summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@wolfbeast.com>2019-08-18 16:25:15 +0200
committerwolfbeast <mcwerewolf@wolfbeast.com>2019-08-18 16:26:16 +0200
commit202296d02aa99afa90581333ab059c050b9c3ade (patch)
tree6ed8a1289bed1bb06d2703ea77cba5fccd3bdffa
parent1530f48c27fb13d7cbd2708c9f0fcf2dabc6ed6a (diff)
parentab6242a93b849b0a3c7525b16bc01dd3172fc167 (diff)
downloadUXP-202296d02aa99afa90581333ab059c050b9c3ade.tar
UXP-202296d02aa99afa90581333ab059c050b9c3ade.tar.gz
UXP-202296d02aa99afa90581333ab059c050b9c3ade.tar.lz
UXP-202296d02aa99afa90581333ab059c050b9c3ade.tar.xz
UXP-202296d02aa99afa90581333ab059c050b9c3ade.zip
Pull Basilisk-release forward.
-rw-r--r--CLOBBER2
-rw-r--r--application/basilisk/app/Makefile.in32
-rw-r--r--application/basilisk/app/profile/basilisk.js11
-rw-r--r--application/basilisk/base/content/browser-devedition.js142
-rw-r--r--application/basilisk/base/content/browser.js3
-rw-r--r--application/basilisk/base/content/global-scripts.inc1
-rw-r--r--application/basilisk/base/content/tabbrowser.xml29
-rw-r--r--application/basilisk/base/jar.mn1
-rw-r--r--application/basilisk/components/customizableui/CustomizableUI.jsm13
-rw-r--r--application/basilisk/components/nsBrowserGlue.js63
-rw-r--r--application/basilisk/components/places/content/controller.js6
-rw-r--r--application/basilisk/components/places/content/placesOverlay.xul4
-rw-r--r--application/basilisk/components/preferences/in-content/main.js77
-rw-r--r--application/basilisk/components/preferences/in-content/main.xul11
-rw-r--r--application/basilisk/installer/Makefile.in8
-rw-r--r--application/basilisk/installer/package-manifest.in12
-rw-r--r--application/basilisk/locales/Makefile.in6
-rw-r--r--application/basilisk/locales/l10n.ini2
-rw-r--r--application/basilisk/modules/ProcessHangMonitor.jsm10
-rw-r--r--application/basilisk/themes/linux/devedition.css106
-rw-r--r--application/basilisk/themes/linux/jar.mn1
-rw-r--r--application/basilisk/themes/osx/devedition.css121
-rw-r--r--application/basilisk/themes/osx/jar.mn1
-rw-r--r--application/basilisk/themes/shared/devedition.inc.css311
-rw-r--r--application/basilisk/themes/shared/devedition/urlbar-history-dropmarker.svg22
-rw-r--r--application/basilisk/themes/shared/jar.inc.mn1
-rw-r--r--application/basilisk/themes/windows/browser.css3
-rw-r--r--application/basilisk/themes/windows/devedition.css316
-rw-r--r--application/basilisk/themes/windows/jar.mn1
-rw-r--r--application/basilisk/tools/mozscreenshots/mozscreenshots/extension/configurations/DevEdition.jsm42
-rw-r--r--application/palemoon/app/Makefile.in28
-rw-r--r--application/palemoon/base/content/browser-addons.js3
-rw-r--r--application/palemoon/base/content/browser.js6
-rw-r--r--application/palemoon/base/content/browser.xul2
-rw-r--r--application/palemoon/branding/official/VisualElements_150.pngbin33851 -> 27921 bytes
-rw-r--r--application/palemoon/branding/official/VisualElements_70.pngbin9272 -> 7785 bytes
-rw-r--r--application/palemoon/branding/official/configure.sh2
-rw-r--r--application/palemoon/branding/official/content/about-logo.pngbin47114 -> 42128 bytes
-rw-r--r--application/palemoon/branding/official/content/about-logo@2x.pngbin171175 -> 166292 bytes
-rw-r--r--application/palemoon/branding/official/content/about-wordmark.pngbin11708 -> 10178 bytes
-rw-r--r--application/palemoon/branding/official/content/about-wordmark.svg222
-rw-r--r--application/palemoon/branding/official/content/about.pngbin64588 -> 47380 bytes
-rw-r--r--application/palemoon/branding/official/content/icon48.pngbin4390 -> 3885 bytes
-rw-r--r--application/palemoon/branding/official/content/icon64.pngbin6928 -> 6176 bytes
-rw-r--r--application/palemoon/branding/official/default16.pngbin881 -> 811 bytes
-rw-r--r--application/palemoon/branding/official/default22.pngbin1324 -> 1377 bytes
-rw-r--r--application/palemoon/branding/official/default24.pngbin1493 -> 1534 bytes
-rw-r--r--application/palemoon/branding/official/default256.pngbin80380 -> 70279 bytes
-rw-r--r--application/palemoon/branding/official/default32.pngbin2325 -> 2273 bytes
-rw-r--r--application/palemoon/branding/official/default48.pngbin4425 -> 3885 bytes
-rw-r--r--application/palemoon/branding/official/disk.icnsbin184077 -> 164632 bytes
-rw-r--r--application/palemoon/branding/official/disk.icobin77586 -> 0 bytes
-rw-r--r--application/palemoon/branding/official/document.icnsbin132198 -> 111772 bytes
-rw-r--r--application/palemoon/branding/official/document.icobin55494 -> 54261 bytes
-rw-r--r--application/palemoon/branding/official/firefox.icnsbin286658 -> 253858 bytes
-rw-r--r--application/palemoon/branding/official/firefox.icobin107919 -> 94683 bytes
-rw-r--r--application/palemoon/branding/official/mozicon128.pngbin23032 -> 20601 bytes
-rw-r--r--application/palemoon/branding/official/palemoon.desktop5
-rw-r--r--application/palemoon/branding/official/wizHeader.bmpbin25818 -> 25818 bytes
-rw-r--r--application/palemoon/branding/official/wizHeaderRTL.bmpbin25818 -> 25818 bytes
-rw-r--r--application/palemoon/branding/official/wizWatermark.bmpbin154542 -> 154542 bytes
-rw-r--r--application/palemoon/branding/shared/pref/uaoverrides.inc4
-rw-r--r--application/palemoon/branding/unofficial/configure.sh2
-rw-r--r--application/palemoon/branding/unofficial/newmoon.desktop3
-rw-r--r--application/palemoon/branding/unstable/configure.sh2
-rw-r--r--application/palemoon/branding/unstable/firefox.icnsbin12079 -> 59809 bytes
-rw-r--r--application/palemoon/components/moz.build4
-rw-r--r--application/palemoon/components/places/content/browserPlacesViews.js15
-rw-r--r--application/palemoon/components/places/content/controller.js92
-rw-r--r--application/palemoon/components/places/content/placesOverlay.xul15
-rw-r--r--application/palemoon/components/places/content/sidebarUtils.js2
-rw-r--r--application/palemoon/components/preferences/advanced.xul9
-rw-r--r--application/palemoon/components/preferences/privacy.js30
-rw-r--r--application/palemoon/components/preferences/privacy.xul3
-rw-r--r--application/palemoon/config/version.txt2
-rw-r--r--application/palemoon/configure.in27
-rw-r--r--application/palemoon/confvars.sh4
-rw-r--r--application/palemoon/installer/Makefile.in8
-rw-r--r--application/palemoon/installer/package-manifest.in5
-rw-r--r--application/palemoon/installer/windows/nsis/installer.nsi6
-rw-r--r--application/palemoon/installer/windows/nsis/shared.nsh29
-rw-r--r--application/palemoon/installer/windows/nsis/uninstaller.nsi52
-rw-r--r--application/palemoon/locales/Makefile.in4
-rw-r--r--application/palemoon/locales/en-US/chrome/browser/preferences/advanced.dtd2
-rw-r--r--application/palemoon/locales/generic/profile/bookmarks.html.in8
-rw-r--r--application/palemoon/themes/linux/jar.mn2
-rw-r--r--application/palemoon/themes/osx/jar.mn2
-rw-r--r--application/palemoon/themes/windows/jar.mn2
-rw-r--r--build/moz.configure/old.configure1
-rw-r--r--caps/moz.build5
-rw-r--r--caps/nsJSPrincipals.cpp2
-rw-r--r--caps/nsNullPrincipal.cpp2
-rw-r--r--caps/nsNullPrincipalURI.cpp6
-rw-r--r--caps/nsPrincipal.cpp2
-rw-r--r--caps/nsScriptSecurityManager.cpp2
-rw-r--r--chrome/moz.build2
-rw-r--r--chrome/nsChromeRegistry.cpp1
-rw-r--r--config/check_spidermonkey_style.py4
-rw-r--r--config/external/icu/data/icudt58l.datbin10912528 -> 11695584 bytes
-rw-r--r--config/milestone.txt2
-rw-r--r--db/sqlite3/src/sqlite3.c12176
-rw-r--r--db/sqlite3/src/sqlite3.h104
-rw-r--r--devtools/client/framework/devtools-browser.js21
-rw-r--r--devtools/client/framework/gDevTools.jsm11
-rw-r--r--devtools/client/jsonview/converter-child.js399
-rw-r--r--devtools/client/jsonview/css/general.css4
-rw-r--r--devtools/client/jsonview/css/main.css4
-rw-r--r--devtools/client/jsonview/json-viewer.js26
-rw-r--r--devtools/client/jsonview/utils.js2
-rw-r--r--devtools/client/locales/en-US/menus.properties5
-rw-r--r--devtools/client/locales/en-US/webide.dtd222
-rw-r--r--devtools/client/locales/en-US/webide.properties92
-rw-r--r--devtools/client/menus.js11
-rw-r--r--devtools/client/moz.build1
-rw-r--r--devtools/client/preferences/devtools.js14
-rw-r--r--devtools/client/projecteditor/lib/plugins/app-manager/app-project-editor.js56
-rw-r--r--devtools/client/projecteditor/lib/plugins/app-manager/moz.build10
-rw-r--r--devtools/client/projecteditor/lib/plugins/app-manager/plugin.js77
-rw-r--r--devtools/client/projecteditor/lib/plugins/moz.build1
-rw-r--r--devtools/client/projecteditor/lib/projecteditor.js1
-rw-r--r--devtools/client/shared/telemetry.js17
-rw-r--r--devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js2
-rw-r--r--devtools/client/webconsole/new-console-output/components/message-types/page-error.js2
-rw-r--r--devtools/client/webconsole/new-console-output/components/message.js31
-rw-r--r--devtools/client/webconsole/new-console-output/selectors/messages.js9
-rw-r--r--devtools/client/webconsole/new-console-output/test/components/page-error.test.js114
-rw-r--r--devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/stub-snippets.js4
-rw-r--r--devtools/client/webconsole/new-console-output/test/fixtures/stubs/consoleApi.js129
-rw-r--r--devtools/client/webconsole/new-console-output/test/fixtures/stubs/evaluationResult.js30
-rw-r--r--devtools/client/webconsole/new-console-output/test/fixtures/stubs/pageError.js98
-rw-r--r--devtools/client/webconsole/new-console-output/types.js1
-rw-r--r--devtools/client/webconsole/new-console-output/utils/messages.js5
-rw-r--r--devtools/client/webide/components/moz.build10
-rw-r--r--devtools/client/webide/components/webideCli.js58
-rw-r--r--devtools/client/webide/components/webideComponents.manifest4
-rw-r--r--devtools/client/webide/content/addons.js135
-rw-r--r--devtools/client/webide/content/addons.xhtml31
-rw-r--r--devtools/client/webide/content/details.js139
-rw-r--r--devtools/client/webide/content/details.xhtml54
-rw-r--r--devtools/client/webide/content/devicepreferences.js81
-rw-r--r--devtools/client/webide/content/devicepreferences.xhtml49
-rw-r--r--devtools/client/webide/content/devicesettings.js81
-rw-r--r--devtools/client/webide/content/devicesettings.xhtml50
-rw-r--r--devtools/client/webide/content/jar.mn38
-rw-r--r--devtools/client/webide/content/logs.js70
-rw-r--r--devtools/client/webide/content/logs.xhtml33
-rw-r--r--devtools/client/webide/content/monitor.js741
-rw-r--r--devtools/client/webide/content/monitor.xhtml31
-rw-r--r--devtools/client/webide/content/moz.build7
-rw-r--r--devtools/client/webide/content/newapp.js175
-rw-r--r--devtools/client/webide/content/newapp.xul33
-rw-r--r--devtools/client/webide/content/permissionstable.js78
-rw-r--r--devtools/client/webide/content/permissionstable.xhtml36
-rw-r--r--devtools/client/webide/content/prefs.js108
-rw-r--r--devtools/client/webide/content/prefs.xhtml112
-rw-r--r--devtools/client/webide/content/project-listing.js42
-rw-r--r--devtools/client/webide/content/project-listing.xhtml35
-rw-r--r--devtools/client/webide/content/project-panel.js11
-rw-r--r--devtools/client/webide/content/runtime-listing.js66
-rw-r--r--devtools/client/webide/content/runtime-listing.xhtml45
-rw-r--r--devtools/client/webide/content/runtime-panel.js11
-rw-r--r--devtools/client/webide/content/runtimedetails.js153
-rw-r--r--devtools/client/webide/content/runtimedetails.xhtml46
-rw-r--r--devtools/client/webide/content/simulator.js352
-rw-r--r--devtools/client/webide/content/simulator.xhtml99
-rw-r--r--devtools/client/webide/content/webide.js1157
-rw-r--r--devtools/client/webide/content/webide.xul178
-rw-r--r--devtools/client/webide/content/wifi-auth.js44
-rw-r--r--devtools/client/webide/content/wifi-auth.xhtml45
-rw-r--r--devtools/client/webide/modules/addons.js197
-rw-r--r--devtools/client/webide/modules/app-manager.js850
-rw-r--r--devtools/client/webide/modules/app-projects.js235
-rw-r--r--devtools/client/webide/modules/app-validator.js292
-rw-r--r--devtools/client/webide/modules/build.js199
-rw-r--r--devtools/client/webide/modules/config-view.js373
-rw-r--r--devtools/client/webide/modules/moz.build21
-rw-r--r--devtools/client/webide/modules/project-list.js375
-rw-r--r--devtools/client/webide/modules/runtime-list.js207
-rw-r--r--devtools/client/webide/modules/runtimes.js673
-rw-r--r--devtools/client/webide/modules/simulator-process.js325
-rw-r--r--devtools/client/webide/modules/simulators.js368
-rw-r--r--devtools/client/webide/modules/tab-store.js178
-rw-r--r--devtools/client/webide/modules/utils.js68
-rw-r--r--devtools/client/webide/moz.build23
-rw-r--r--devtools/client/webide/test/.eslintrc.js6
-rw-r--r--devtools/client/webide/test/addons/adbhelper-linux.xpibin1293 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/adbhelper-linux64.xpibin1293 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/adbhelper-mac64.xpibin1293 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/adbhelper-win32.xpibin1293 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxdt-adapters-linux32.xpibin1156 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxdt-adapters-linux64.xpibin1156 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxdt-adapters-mac64.xpibin1156 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxdt-adapters-win32.xpibin1156 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_1_0_simulator-linux.xpibin5046 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_1_0_simulator-linux64.xpibin5046 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_1_0_simulator-mac64.xpibin5044 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_1_0_simulator-win32.xpibin5046 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_2_0_simulator-linux.xpibin5046 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_2_0_simulator-linux64.xpibin5046 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_2_0_simulator-mac64.xpibin5043 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_2_0_simulator-win32.xpibin5045 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_3_0_simulator-linux.xpibin5045 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_3_0_simulator-linux64.xpibin5048 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_3_0_simulator-mac64.xpibin5048 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_3_0_simulator-win32.xpibin5044 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_3_0_tv_simulator-linux.xpibin5052 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_3_0_tv_simulator-linux64.xpibin5055 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_3_0_tv_simulator-mac64.xpibin5051 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/fxos_3_0_tv_simulator-win32.xpibin5051 -> 0 bytes
-rw-r--r--devtools/client/webide/test/addons/simulators.json4
-rw-r--r--devtools/client/webide/test/app.zipbin480 -> 0 bytes
-rw-r--r--devtools/client/webide/test/app/index.html6
-rw-r--r--devtools/client/webide/test/app/manifest.webapp5
-rw-r--r--devtools/client/webide/test/browser.ini12
-rw-r--r--devtools/client/webide/test/browser_tabs.js84
-rw-r--r--devtools/client/webide/test/browser_widget.js15
-rw-r--r--devtools/client/webide/test/build_app1/package.json5
-rw-r--r--devtools/client/webide/test/build_app2/manifest.webapp1
-rw-r--r--devtools/client/webide/test/build_app2/package.json10
-rw-r--r--devtools/client/webide/test/build_app_windows1/package.json5
-rw-r--r--devtools/client/webide/test/build_app_windows2/manifest.webapp1
-rw-r--r--devtools/client/webide/test/build_app_windows2/package.json10
-rw-r--r--devtools/client/webide/test/chrome.ini71
-rw-r--r--devtools/client/webide/test/device_front_shared.js219
-rw-r--r--devtools/client/webide/test/doc_tabs.html15
-rw-r--r--devtools/client/webide/test/head.js248
-rw-r--r--devtools/client/webide/test/hosted_app.manifest3
-rw-r--r--devtools/client/webide/test/templates.json14
-rw-r--r--devtools/client/webide/test/test_addons.html176
-rw-r--r--devtools/client/webide/test/test_app_validator.html205
-rw-r--r--devtools/client/webide/test/test_autoconnect_runtime.html94
-rw-r--r--devtools/client/webide/test/test_autoselect_project.html110
-rw-r--r--devtools/client/webide/test/test_basic.html55
-rw-r--r--devtools/client/webide/test/test_build.html128
-rw-r--r--devtools/client/webide/test/test_device_permissions.html81
-rw-r--r--devtools/client/webide/test/test_device_preferences.html87
-rw-r--r--devtools/client/webide/test/test_device_runtime.html81
-rw-r--r--devtools/client/webide/test/test_device_settings.html87
-rw-r--r--devtools/client/webide/test/test_duplicate_import.html77
-rw-r--r--devtools/client/webide/test/test_fullscreenToolbox.html67
-rw-r--r--devtools/client/webide/test/test_import.html82
-rw-r--r--devtools/client/webide/test/test_manifestUpdate.html98
-rw-r--r--devtools/client/webide/test/test_newapp.html46
-rw-r--r--devtools/client/webide/test/test_runtime.html203
-rw-r--r--devtools/client/webide/test/test_simulators.html426
-rw-r--r--devtools/client/webide/test/test_telemetry.html325
-rw-r--r--devtools/client/webide/test/test_toolbox.html93
-rw-r--r--devtools/client/webide/test/test_zoom.html77
-rw-r--r--devtools/client/webide/test/validator/no-name-or-icon/manifest.webapp3
-rw-r--r--devtools/client/webide/test/validator/non-absolute-path/manifest.webapp7
-rw-r--r--devtools/client/webide/test/validator/valid/alsoValid/manifest.webapp7
-rw-r--r--devtools/client/webide/test/validator/valid/home.html0
-rw-r--r--devtools/client/webide/test/validator/valid/icon.png0
-rw-r--r--devtools/client/webide/test/validator/valid/manifest.webapp7
-rw-r--r--devtools/client/webide/test/validator/wrong-launch-path/icon.png0
-rw-r--r--devtools/client/webide/test/validator/wrong-launch-path/manifest.webapp7
-rw-r--r--devtools/client/webide/themes/addons.css79
-rw-r--r--devtools/client/webide/themes/config-view.css80
-rw-r--r--devtools/client/webide/themes/deck.css91
-rw-r--r--devtools/client/webide/themes/default-app-icon.pngbin5208 -> 0 bytes
-rw-r--r--devtools/client/webide/themes/details.css138
-rw-r--r--devtools/client/webide/themes/icons.pngbin35353 -> 0 bytes
-rw-r--r--devtools/client/webide/themes/jar.mn24
-rw-r--r--devtools/client/webide/themes/logs.css18
-rw-r--r--devtools/client/webide/themes/monitor.css86
-rw-r--r--devtools/client/webide/themes/moz.build7
-rw-r--r--devtools/client/webide/themes/newapp.css54
-rw-r--r--devtools/client/webide/themes/noise.pngbin6216 -> 0 bytes
-rw-r--r--devtools/client/webide/themes/panel-listing.css150
-rw-r--r--devtools/client/webide/themes/permissionstable.css23
-rw-r--r--devtools/client/webide/themes/rocket.svg12
-rw-r--r--devtools/client/webide/themes/runtimedetails.css25
-rw-r--r--devtools/client/webide/themes/simulator.css41
-rw-r--r--devtools/client/webide/themes/throbber.svg22
-rw-r--r--devtools/client/webide/themes/webide.css149
-rw-r--r--devtools/client/webide/themes/wifi-auth.css64
-rw-r--r--devtools/client/webide/webide-prefs.js35
-rw-r--r--devtools/server/actors/webconsole.js41
-rw-r--r--devtools/shared/webconsole/test/test_page_errors.html18
-rw-r--r--dom/base/nsContentPolicy.cpp21
-rw-r--r--dom/base/nsContentUtils.cpp9
-rw-r--r--dom/base/nsDocument.cpp25
-rw-r--r--dom/base/nsDocument.h6
-rw-r--r--dom/base/nsGlobalWindow.cpp7
-rw-r--r--dom/base/nsIDocument.h10
-rw-r--r--dom/base/nsIImageLoadingContent.idl9
-rw-r--r--dom/base/nsImageLoadingContent.cpp101
-rw-r--r--dom/base/nsImageLoadingContent.h17
-rw-r--r--dom/base/nsObjectLoadingContent.cpp6
-rw-r--r--dom/base/nsWindowMemoryReporter.cpp9
-rw-r--r--dom/base/nsWindowMemoryReporter.h1
-rw-r--r--dom/bindings/BindingUtils.cpp8
-rw-r--r--dom/bindings/BindingUtils.h3
-rw-r--r--dom/bindings/Codegen.py15
-rw-r--r--dom/bindings/moz.build8
-rw-r--r--dom/bindings/nsIScriptError.idl (renamed from js/xpconnect/idl/nsIScriptError.idl)15
-rw-r--r--dom/bindings/nsScriptError.cpp (renamed from js/xpconnect/src/nsScriptError.cpp)183
-rw-r--r--dom/bindings/nsScriptError.h109
-rw-r--r--dom/bindings/nsScriptErrorWithStack.cpp (renamed from js/xpconnect/src/nsScriptErrorWithStack.cpp)4
-rw-r--r--dom/canvas/WebGLBuffer.cpp1
-rw-r--r--dom/canvas/WebGLContext.h3
-rw-r--r--dom/canvas/WebGLExtensionDebugShaders.cpp7
-rw-r--r--dom/canvas/WebGLExtensionDisjointTimerQuery.cpp42
-rw-r--r--dom/canvas/WebGLExtensionDrawBuffers.cpp4
-rw-r--r--dom/canvas/WebGLExtensionInstancedArrays.cpp18
-rw-r--r--dom/canvas/WebGLExtensionLoseContext.cpp2
-rw-r--r--dom/canvas/WebGLExtensionVertexArray.cpp8
-rw-r--r--dom/canvas/WebGLObjectModel.h4
-rw-r--r--dom/canvas/WebGLRenderbuffer.cpp10
-rw-r--r--dom/canvas/WebGLShader.cpp10
-rw-r--r--dom/canvas/WebGLTexture.cpp8
-rw-r--r--dom/canvas/WebGLTexture.h1
-rw-r--r--dom/canvas/WebGLTextureUpload.cpp8
-rw-r--r--dom/indexedDB/ActorsChild.cpp7
-rw-r--r--dom/ipc/ContentParent.cpp17
-rw-r--r--dom/media/MediaResource.cpp2
-rw-r--r--dom/media/fmp4/MP4Decoder.cpp3
-rw-r--r--dom/media/mediasource/ContainerParser.cpp3
-rw-r--r--dom/media/mediasource/MediaSource.cpp6
-rw-r--r--dom/media/mediasource/TrackBuffersManager.cpp2
-rw-r--r--dom/media/webm/WebMDecoder.cpp16
-rw-r--r--dom/media/webm/WebMDemuxer.cpp26
-rw-r--r--dom/network/UDPSocketChild.cpp23
-rw-r--r--dom/plugins/base/nsPluginStreamListenerPeer.cpp4
-rw-r--r--dom/security/nsContentSecurityManager.cpp30
-rw-r--r--dom/workers/RuntimeService.cpp2
-rw-r--r--dom/workers/WorkerPrivate.cpp226
-rw-r--r--dom/workers/WorkerPrivate.h46
-rw-r--r--dom/workers/moz.build1
-rw-r--r--dom/workers/test/test_sharedWorker.html2
-rw-r--r--gfx/gl/GLUploadHelpers.cpp40
-rw-r--r--gfx/thebes/gfxMatrix.h12
-rw-r--r--image/imgLoader.cpp1
-rw-r--r--intl/icu/GIT-INFO5
-rw-r--r--intl/icu/SVN-INFO10
-rw-r--r--intl/icu/source/common/common.vcxproj2
-rw-r--r--intl/icu/source/common/common.vcxproj.filters2
-rw-r--r--intl/icu/source/common/umutex.h4
-rw-r--r--intl/icu/source/common/unicode/uvernum.h6
-rw-r--r--intl/icu/source/common/wintz.c2
-rw-r--r--intl/icu/source/data/coll/af.txt2
-rw-r--r--intl/icu/source/data/coll/am.txt2
-rw-r--r--intl/icu/source/data/coll/ar.txt2
-rw-r--r--intl/icu/source/data/coll/as.txt2
-rw-r--r--intl/icu/source/data/coll/az.txt2
-rw-r--r--intl/icu/source/data/coll/be.txt2
-rw-r--r--intl/icu/source/data/coll/bg.txt2
-rw-r--r--intl/icu/source/data/coll/bn.txt2
-rw-r--r--intl/icu/source/data/coll/bo.txt2
-rw-r--r--intl/icu/source/data/coll/bs.txt2
-rw-r--r--intl/icu/source/data/coll/bs_Cyrl.txt2
-rw-r--r--intl/icu/source/data/coll/ca.txt2
-rw-r--r--intl/icu/source/data/coll/chr.txt2
-rw-r--r--intl/icu/source/data/coll/cs.txt2
-rw-r--r--intl/icu/source/data/coll/cy.txt2
-rw-r--r--intl/icu/source/data/coll/da.txt2
-rw-r--r--intl/icu/source/data/coll/de.txt2
-rw-r--r--intl/icu/source/data/coll/de_.txt2
-rw-r--r--intl/icu/source/data/coll/de_AT.txt2
-rw-r--r--intl/icu/source/data/coll/de__PHONEBOOK.txt2
-rw-r--r--intl/icu/source/data/coll/dsb.txt2
-rw-r--r--intl/icu/source/data/coll/dz.txt2
-rw-r--r--intl/icu/source/data/coll/ee.txt2
-rw-r--r--intl/icu/source/data/coll/el.txt2
-rw-r--r--intl/icu/source/data/coll/en.txt2
-rw-r--r--intl/icu/source/data/coll/en_US.txt2
-rw-r--r--intl/icu/source/data/coll/en_US_POSIX.txt2
-rw-r--r--intl/icu/source/data/coll/eo.txt2
-rw-r--r--intl/icu/source/data/coll/es.txt2
-rw-r--r--intl/icu/source/data/coll/es_.txt2
-rw-r--r--intl/icu/source/data/coll/es__TRADITIONAL.txt2
-rw-r--r--intl/icu/source/data/coll/et.txt2
-rw-r--r--intl/icu/source/data/coll/fa.txt2
-rw-r--r--intl/icu/source/data/coll/fa_AF.txt2
-rw-r--r--intl/icu/source/data/coll/fi.txt2
-rw-r--r--intl/icu/source/data/coll/fil.txt2
-rw-r--r--intl/icu/source/data/coll/fo.txt2
-rw-r--r--intl/icu/source/data/coll/fr.txt2
-rw-r--r--intl/icu/source/data/coll/fr_CA.txt2
-rw-r--r--intl/icu/source/data/coll/ga.txt2
-rw-r--r--intl/icu/source/data/coll/gl.txt2
-rw-r--r--intl/icu/source/data/coll/gu.txt2
-rw-r--r--intl/icu/source/data/coll/ha.txt2
-rw-r--r--intl/icu/source/data/coll/haw.txt2
-rw-r--r--intl/icu/source/data/coll/he.txt2
-rw-r--r--intl/icu/source/data/coll/he_IL.txt2
-rw-r--r--intl/icu/source/data/coll/hi.txt2
-rw-r--r--intl/icu/source/data/coll/hr.txt2
-rw-r--r--intl/icu/source/data/coll/hsb.txt2
-rw-r--r--intl/icu/source/data/coll/hu.txt2
-rw-r--r--intl/icu/source/data/coll/hy.txt2
-rw-r--r--intl/icu/source/data/coll/id.txt2
-rw-r--r--intl/icu/source/data/coll/id_ID.txt2
-rw-r--r--intl/icu/source/data/coll/ig.txt2
-rw-r--r--intl/icu/source/data/coll/in.txt2
-rw-r--r--intl/icu/source/data/coll/in_ID.txt2
-rw-r--r--intl/icu/source/data/coll/is.txt2
-rw-r--r--intl/icu/source/data/coll/it.txt2
-rw-r--r--intl/icu/source/data/coll/iw.txt2
-rw-r--r--intl/icu/source/data/coll/iw_IL.txt2
-rw-r--r--intl/icu/source/data/coll/ja.txt2
-rw-r--r--intl/icu/source/data/coll/ka.txt2
-rw-r--r--intl/icu/source/data/coll/kk.txt2
-rw-r--r--intl/icu/source/data/coll/kl.txt2
-rw-r--r--intl/icu/source/data/coll/km.txt2
-rw-r--r--intl/icu/source/data/coll/kn.txt2
-rw-r--r--intl/icu/source/data/coll/ko.txt2
-rw-r--r--intl/icu/source/data/coll/kok.txt2
-rw-r--r--intl/icu/source/data/coll/ky.txt2
-rw-r--r--intl/icu/source/data/coll/lb.txt2
-rw-r--r--intl/icu/source/data/coll/lkt.txt2
-rw-r--r--intl/icu/source/data/coll/ln.txt2
-rw-r--r--intl/icu/source/data/coll/lo.txt2
-rw-r--r--intl/icu/source/data/coll/lt.txt2
-rw-r--r--intl/icu/source/data/coll/lv.txt2
-rw-r--r--intl/icu/source/data/coll/mk.txt2
-rw-r--r--intl/icu/source/data/coll/ml.txt2
-rw-r--r--intl/icu/source/data/coll/mn.txt2
-rw-r--r--intl/icu/source/data/coll/mo.txt2
-rw-r--r--intl/icu/source/data/coll/mr.txt2
-rw-r--r--intl/icu/source/data/coll/ms.txt2
-rw-r--r--intl/icu/source/data/coll/mt.txt2
-rw-r--r--intl/icu/source/data/coll/my.txt2
-rw-r--r--intl/icu/source/data/coll/nb.txt2
-rw-r--r--intl/icu/source/data/coll/nb_NO.txt2
-rw-r--r--intl/icu/source/data/coll/ne.txt2
-rw-r--r--intl/icu/source/data/coll/nl.txt2
-rw-r--r--intl/icu/source/data/coll/nn.txt2
-rw-r--r--intl/icu/source/data/coll/no.txt2
-rw-r--r--intl/icu/source/data/coll/no_NO.txt2
-rw-r--r--intl/icu/source/data/coll/om.txt2
-rw-r--r--intl/icu/source/data/coll/or.txt2
-rw-r--r--intl/icu/source/data/coll/pa.txt2
-rw-r--r--intl/icu/source/data/coll/pa_Guru.txt2
-rw-r--r--intl/icu/source/data/coll/pa_Guru_IN.txt2
-rw-r--r--intl/icu/source/data/coll/pa_IN.txt2
-rw-r--r--intl/icu/source/data/coll/pl.txt2
-rw-r--r--intl/icu/source/data/coll/ps.txt2
-rw-r--r--intl/icu/source/data/coll/pt.txt2
-rw-r--r--intl/icu/source/data/coll/ro.txt2
-rw-r--r--intl/icu/source/data/coll/ro_MD.txt2
-rw-r--r--intl/icu/source/data/coll/root.txt2
-rw-r--r--intl/icu/source/data/coll/ru.txt2
-rw-r--r--intl/icu/source/data/coll/se.txt2
-rw-r--r--intl/icu/source/data/coll/sh.txt2
-rw-r--r--intl/icu/source/data/coll/sh_BA.txt2
-rw-r--r--intl/icu/source/data/coll/sh_CS.txt2
-rw-r--r--intl/icu/source/data/coll/sh_YU.txt2
-rw-r--r--intl/icu/source/data/coll/si.txt2
-rw-r--r--intl/icu/source/data/coll/sk.txt2
-rw-r--r--intl/icu/source/data/coll/sl.txt2
-rw-r--r--intl/icu/source/data/coll/smn.txt2
-rw-r--r--intl/icu/source/data/coll/sq.txt2
-rw-r--r--intl/icu/source/data/coll/sr.txt2
-rw-r--r--intl/icu/source/data/coll/sr_BA.txt2
-rw-r--r--intl/icu/source/data/coll/sr_Cyrl.txt2
-rw-r--r--intl/icu/source/data/coll/sr_Cyrl_BA.txt2
-rw-r--r--intl/icu/source/data/coll/sr_Cyrl_ME.txt2
-rw-r--r--intl/icu/source/data/coll/sr_Cyrl_RS.txt2
-rw-r--r--intl/icu/source/data/coll/sr_Latn.txt2
-rw-r--r--intl/icu/source/data/coll/sr_Latn_BA.txt2
-rw-r--r--intl/icu/source/data/coll/sr_Latn_RS.txt2
-rw-r--r--intl/icu/source/data/coll/sr_ME.txt2
-rw-r--r--intl/icu/source/data/coll/sr_RS.txt2
-rw-r--r--intl/icu/source/data/coll/sv.txt2
-rw-r--r--intl/icu/source/data/coll/sw.txt2
-rw-r--r--intl/icu/source/data/coll/ta.txt2
-rw-r--r--intl/icu/source/data/coll/te.txt2
-rw-r--r--intl/icu/source/data/coll/th.txt2
-rw-r--r--intl/icu/source/data/coll/to.txt2
-rw-r--r--intl/icu/source/data/coll/tr.txt2
-rw-r--r--intl/icu/source/data/coll/ug.txt2
-rw-r--r--intl/icu/source/data/coll/uk.txt2
-rw-r--r--intl/icu/source/data/coll/ur.txt2
-rw-r--r--intl/icu/source/data/coll/uz.txt2
-rw-r--r--intl/icu/source/data/coll/vi.txt2
-rw-r--r--intl/icu/source/data/coll/wae.txt2
-rw-r--r--intl/icu/source/data/coll/yi.txt2
-rw-r--r--intl/icu/source/data/coll/yo.txt2
-rw-r--r--intl/icu/source/data/coll/zh.txt2
-rw-r--r--intl/icu/source/data/coll/zh_CN.txt2
-rw-r--r--intl/icu/source/data/coll/zh_HK.txt2
-rw-r--r--intl/icu/source/data/coll/zh_Hans.txt2
-rw-r--r--intl/icu/source/data/coll/zh_Hans_CN.txt2
-rw-r--r--intl/icu/source/data/coll/zh_Hans_SG.txt2
-rw-r--r--intl/icu/source/data/coll/zh_Hant.txt2
-rw-r--r--intl/icu/source/data/coll/zh_Hant_HK.txt2
-rw-r--r--intl/icu/source/data/coll/zh_Hant_MO.txt2
-rw-r--r--intl/icu/source/data/coll/zh_Hant_TW.txt2
-rw-r--r--intl/icu/source/data/coll/zh_MO.txt2
-rw-r--r--intl/icu/source/data/coll/zh_SG.txt2
-rw-r--r--intl/icu/source/data/coll/zh_TW.txt2
-rw-r--r--intl/icu/source/data/coll/zu.txt2
-rw-r--r--intl/icu/source/data/curr/af.txt2
-rw-r--r--intl/icu/source/data/curr/af_NA.txt2
-rw-r--r--intl/icu/source/data/curr/agq.txt2
-rw-r--r--intl/icu/source/data/curr/ak.txt2
-rw-r--r--intl/icu/source/data/curr/am.txt2
-rw-r--r--intl/icu/source/data/curr/ar.txt2
-rw-r--r--intl/icu/source/data/curr/ar_AE.txt2
-rw-r--r--intl/icu/source/data/curr/ar_DJ.txt2
-rw-r--r--intl/icu/source/data/curr/ar_ER.txt2
-rw-r--r--intl/icu/source/data/curr/ar_LB.txt2
-rw-r--r--intl/icu/source/data/curr/ar_SO.txt2
-rw-r--r--intl/icu/source/data/curr/ar_SS.txt2
-rw-r--r--intl/icu/source/data/curr/as.txt2
-rw-r--r--intl/icu/source/data/curr/asa.txt2
-rw-r--r--intl/icu/source/data/curr/ast.txt2
-rw-r--r--intl/icu/source/data/curr/az.txt2
-rw-r--r--intl/icu/source/data/curr/az_AZ.txt2
-rw-r--r--intl/icu/source/data/curr/az_Cyrl.txt2
-rw-r--r--intl/icu/source/data/curr/az_Latn.txt2
-rw-r--r--intl/icu/source/data/curr/az_Latn_AZ.txt2
-rw-r--r--intl/icu/source/data/curr/bas.txt2
-rw-r--r--intl/icu/source/data/curr/be.txt2
-rw-r--r--intl/icu/source/data/curr/bem.txt2
-rw-r--r--intl/icu/source/data/curr/bez.txt2
-rw-r--r--intl/icu/source/data/curr/bg.txt2
-rw-r--r--intl/icu/source/data/curr/bm.txt2
-rw-r--r--intl/icu/source/data/curr/bn.txt2
-rw-r--r--intl/icu/source/data/curr/bo.txt2
-rw-r--r--intl/icu/source/data/curr/bo_IN.txt2
-rw-r--r--intl/icu/source/data/curr/br.txt2
-rw-r--r--intl/icu/source/data/curr/brx.txt2
-rw-r--r--intl/icu/source/data/curr/bs.txt2
-rw-r--r--intl/icu/source/data/curr/bs_BA.txt2
-rw-r--r--intl/icu/source/data/curr/bs_Cyrl.txt2
-rw-r--r--intl/icu/source/data/curr/bs_Latn.txt2
-rw-r--r--intl/icu/source/data/curr/bs_Latn_BA.txt2
-rw-r--r--intl/icu/source/data/curr/ca.txt2
-rw-r--r--intl/icu/source/data/curr/ca_FR.txt2
-rw-r--r--intl/icu/source/data/curr/ce.txt2
-rw-r--r--intl/icu/source/data/curr/cgg.txt2
-rw-r--r--intl/icu/source/data/curr/chr.txt2
-rw-r--r--intl/icu/source/data/curr/ckb.txt2
-rw-r--r--intl/icu/source/data/curr/cs.txt2
-rw-r--r--intl/icu/source/data/curr/cy.txt2
-rw-r--r--intl/icu/source/data/curr/da.txt2
-rw-r--r--intl/icu/source/data/curr/dav.txt2
-rw-r--r--intl/icu/source/data/curr/de.txt2
-rw-r--r--intl/icu/source/data/curr/de_CH.txt2
-rw-r--r--intl/icu/source/data/curr/de_LI.txt2
-rw-r--r--intl/icu/source/data/curr/de_LU.txt2
-rw-r--r--intl/icu/source/data/curr/dje.txt2
-rw-r--r--intl/icu/source/data/curr/dsb.txt2
-rw-r--r--intl/icu/source/data/curr/dua.txt2
-rw-r--r--intl/icu/source/data/curr/dyo.txt2
-rw-r--r--intl/icu/source/data/curr/dz.txt2
-rw-r--r--intl/icu/source/data/curr/ebu.txt2
-rw-r--r--intl/icu/source/data/curr/ee.txt2
-rw-r--r--intl/icu/source/data/curr/el.txt2
-rw-r--r--intl/icu/source/data/curr/en.txt2
-rw-r--r--intl/icu/source/data/curr/en_001.txt2
-rw-r--r--intl/icu/source/data/curr/en_150.txt2
-rw-r--r--intl/icu/source/data/curr/en_AG.txt2
-rw-r--r--intl/icu/source/data/curr/en_AI.txt2
-rw-r--r--intl/icu/source/data/curr/en_AT.txt2
-rw-r--r--intl/icu/source/data/curr/en_AU.txt2
-rw-r--r--intl/icu/source/data/curr/en_BB.txt2
-rw-r--r--intl/icu/source/data/curr/en_BE.txt2
-rw-r--r--intl/icu/source/data/curr/en_BI.txt2
-rw-r--r--intl/icu/source/data/curr/en_BM.txt2
-rw-r--r--intl/icu/source/data/curr/en_BS.txt2
-rw-r--r--intl/icu/source/data/curr/en_BW.txt2
-rw-r--r--intl/icu/source/data/curr/en_BZ.txt2
-rw-r--r--intl/icu/source/data/curr/en_CA.txt2
-rw-r--r--intl/icu/source/data/curr/en_CC.txt2
-rw-r--r--intl/icu/source/data/curr/en_CH.txt2
-rw-r--r--intl/icu/source/data/curr/en_CK.txt2
-rw-r--r--intl/icu/source/data/curr/en_CM.txt2
-rw-r--r--intl/icu/source/data/curr/en_CX.txt2
-rw-r--r--intl/icu/source/data/curr/en_CY.txt2
-rw-r--r--intl/icu/source/data/curr/en_DE.txt2
-rw-r--r--intl/icu/source/data/curr/en_DG.txt2
-rw-r--r--intl/icu/source/data/curr/en_DK.txt2
-rw-r--r--intl/icu/source/data/curr/en_DM.txt2
-rw-r--r--intl/icu/source/data/curr/en_ER.txt2
-rw-r--r--intl/icu/source/data/curr/en_FI.txt2
-rw-r--r--intl/icu/source/data/curr/en_FJ.txt2
-rw-r--r--intl/icu/source/data/curr/en_FK.txt2
-rw-r--r--intl/icu/source/data/curr/en_FM.txt2
-rw-r--r--intl/icu/source/data/curr/en_GB.txt2
-rw-r--r--intl/icu/source/data/curr/en_GD.txt2
-rw-r--r--intl/icu/source/data/curr/en_GG.txt2
-rw-r--r--intl/icu/source/data/curr/en_GH.txt2
-rw-r--r--intl/icu/source/data/curr/en_GI.txt2
-rw-r--r--intl/icu/source/data/curr/en_GM.txt2
-rw-r--r--intl/icu/source/data/curr/en_GY.txt2
-rw-r--r--intl/icu/source/data/curr/en_HK.txt2
-rw-r--r--intl/icu/source/data/curr/en_IE.txt2
-rw-r--r--intl/icu/source/data/curr/en_IL.txt2
-rw-r--r--intl/icu/source/data/curr/en_IM.txt2
-rw-r--r--intl/icu/source/data/curr/en_IN.txt2
-rw-r--r--intl/icu/source/data/curr/en_IO.txt2
-rw-r--r--intl/icu/source/data/curr/en_JE.txt2
-rw-r--r--intl/icu/source/data/curr/en_JM.txt2
-rw-r--r--intl/icu/source/data/curr/en_KE.txt2
-rw-r--r--intl/icu/source/data/curr/en_KI.txt2
-rw-r--r--intl/icu/source/data/curr/en_KN.txt2
-rw-r--r--intl/icu/source/data/curr/en_KY.txt2
-rw-r--r--intl/icu/source/data/curr/en_LC.txt2
-rw-r--r--intl/icu/source/data/curr/en_LR.txt2
-rw-r--r--intl/icu/source/data/curr/en_LS.txt2
-rw-r--r--intl/icu/source/data/curr/en_MG.txt2
-rw-r--r--intl/icu/source/data/curr/en_MO.txt2
-rw-r--r--intl/icu/source/data/curr/en_MS.txt2
-rw-r--r--intl/icu/source/data/curr/en_MT.txt2
-rw-r--r--intl/icu/source/data/curr/en_MU.txt2
-rw-r--r--intl/icu/source/data/curr/en_MW.txt2
-rw-r--r--intl/icu/source/data/curr/en_MY.txt2
-rw-r--r--intl/icu/source/data/curr/en_NA.txt2
-rw-r--r--intl/icu/source/data/curr/en_NF.txt2
-rw-r--r--intl/icu/source/data/curr/en_NG.txt2
-rw-r--r--intl/icu/source/data/curr/en_NH.txt2
-rw-r--r--intl/icu/source/data/curr/en_NL.txt2
-rw-r--r--intl/icu/source/data/curr/en_NR.txt2
-rw-r--r--intl/icu/source/data/curr/en_NU.txt2
-rw-r--r--intl/icu/source/data/curr/en_NZ.txt2
-rw-r--r--intl/icu/source/data/curr/en_PG.txt2
-rw-r--r--intl/icu/source/data/curr/en_PH.txt2
-rw-r--r--intl/icu/source/data/curr/en_PK.txt2
-rw-r--r--intl/icu/source/data/curr/en_PN.txt2
-rw-r--r--intl/icu/source/data/curr/en_PW.txt2
-rw-r--r--intl/icu/source/data/curr/en_RH.txt2
-rw-r--r--intl/icu/source/data/curr/en_RW.txt2
-rw-r--r--intl/icu/source/data/curr/en_SB.txt2
-rw-r--r--intl/icu/source/data/curr/en_SC.txt2
-rw-r--r--intl/icu/source/data/curr/en_SD.txt2
-rw-r--r--intl/icu/source/data/curr/en_SE.txt2
-rw-r--r--intl/icu/source/data/curr/en_SG.txt2
-rw-r--r--intl/icu/source/data/curr/en_SH.txt2
-rw-r--r--intl/icu/source/data/curr/en_SI.txt2
-rw-r--r--intl/icu/source/data/curr/en_SL.txt2
-rw-r--r--intl/icu/source/data/curr/en_SS.txt2
-rw-r--r--intl/icu/source/data/curr/en_SX.txt2
-rw-r--r--intl/icu/source/data/curr/en_SZ.txt2
-rw-r--r--intl/icu/source/data/curr/en_TC.txt2
-rw-r--r--intl/icu/source/data/curr/en_TK.txt2
-rw-r--r--intl/icu/source/data/curr/en_TO.txt2
-rw-r--r--intl/icu/source/data/curr/en_TT.txt2
-rw-r--r--intl/icu/source/data/curr/en_TV.txt2
-rw-r--r--intl/icu/source/data/curr/en_TZ.txt2
-rw-r--r--intl/icu/source/data/curr/en_UG.txt2
-rw-r--r--intl/icu/source/data/curr/en_VC.txt2
-rw-r--r--intl/icu/source/data/curr/en_VG.txt2
-rw-r--r--intl/icu/source/data/curr/en_VU.txt2
-rw-r--r--intl/icu/source/data/curr/en_WS.txt2
-rw-r--r--intl/icu/source/data/curr/en_ZA.txt2
-rw-r--r--intl/icu/source/data/curr/en_ZM.txt2
-rw-r--r--intl/icu/source/data/curr/en_ZW.txt2
-rw-r--r--intl/icu/source/data/curr/eo.txt2
-rw-r--r--intl/icu/source/data/curr/es.txt2
-rw-r--r--intl/icu/source/data/curr/es_419.txt2
-rw-r--r--intl/icu/source/data/curr/es_AR.txt2
-rw-r--r--intl/icu/source/data/curr/es_BO.txt2
-rw-r--r--intl/icu/source/data/curr/es_BR.txt2
-rw-r--r--intl/icu/source/data/curr/es_CL.txt2
-rw-r--r--intl/icu/source/data/curr/es_CO.txt2
-rw-r--r--intl/icu/source/data/curr/es_CR.txt2
-rw-r--r--intl/icu/source/data/curr/es_CU.txt2
-rw-r--r--intl/icu/source/data/curr/es_DO.txt2
-rw-r--r--intl/icu/source/data/curr/es_EC.txt2
-rw-r--r--intl/icu/source/data/curr/es_GQ.txt2
-rw-r--r--intl/icu/source/data/curr/es_GT.txt2
-rw-r--r--intl/icu/source/data/curr/es_HN.txt2
-rw-r--r--intl/icu/source/data/curr/es_MX.txt2
-rw-r--r--intl/icu/source/data/curr/es_NI.txt2
-rw-r--r--intl/icu/source/data/curr/es_PA.txt2
-rw-r--r--intl/icu/source/data/curr/es_PE.txt2
-rw-r--r--intl/icu/source/data/curr/es_PH.txt2
-rw-r--r--intl/icu/source/data/curr/es_PR.txt2
-rw-r--r--intl/icu/source/data/curr/es_PY.txt2
-rw-r--r--intl/icu/source/data/curr/es_SV.txt2
-rw-r--r--intl/icu/source/data/curr/es_US.txt2
-rw-r--r--intl/icu/source/data/curr/es_UY.txt2
-rw-r--r--intl/icu/source/data/curr/es_VE.txt2
-rw-r--r--intl/icu/source/data/curr/et.txt2
-rw-r--r--intl/icu/source/data/curr/eu.txt2
-rw-r--r--intl/icu/source/data/curr/ewo.txt2
-rw-r--r--intl/icu/source/data/curr/fa.txt2
-rw-r--r--intl/icu/source/data/curr/fa_AF.txt2
-rw-r--r--intl/icu/source/data/curr/ff.txt2
-rw-r--r--intl/icu/source/data/curr/ff_GN.txt2
-rw-r--r--intl/icu/source/data/curr/ff_MR.txt2
-rw-r--r--intl/icu/source/data/curr/fi.txt2
-rw-r--r--intl/icu/source/data/curr/fil.txt2
-rw-r--r--intl/icu/source/data/curr/fil_PH.txt2
-rw-r--r--intl/icu/source/data/curr/fo.txt2
-rw-r--r--intl/icu/source/data/curr/fo_DK.txt2
-rw-r--r--intl/icu/source/data/curr/fr.txt2
-rw-r--r--intl/icu/source/data/curr/fr_BI.txt2
-rw-r--r--intl/icu/source/data/curr/fr_CA.txt2
-rw-r--r--intl/icu/source/data/curr/fr_CD.txt2
-rw-r--r--intl/icu/source/data/curr/fr_DJ.txt2
-rw-r--r--intl/icu/source/data/curr/fr_DZ.txt2
-rw-r--r--intl/icu/source/data/curr/fr_GN.txt2
-rw-r--r--intl/icu/source/data/curr/fr_HT.txt2
-rw-r--r--intl/icu/source/data/curr/fr_KM.txt2
-rw-r--r--intl/icu/source/data/curr/fr_LU.txt2
-rw-r--r--intl/icu/source/data/curr/fr_MG.txt2
-rw-r--r--intl/icu/source/data/curr/fr_MR.txt2
-rw-r--r--intl/icu/source/data/curr/fr_MU.txt2
-rw-r--r--intl/icu/source/data/curr/fr_RW.txt2
-rw-r--r--intl/icu/source/data/curr/fr_SC.txt2
-rw-r--r--intl/icu/source/data/curr/fr_SY.txt2
-rw-r--r--intl/icu/source/data/curr/fr_TN.txt2
-rw-r--r--intl/icu/source/data/curr/fr_VU.txt2
-rw-r--r--intl/icu/source/data/curr/fur.txt2
-rw-r--r--intl/icu/source/data/curr/fy.txt2
-rw-r--r--intl/icu/source/data/curr/ga.txt2
-rw-r--r--intl/icu/source/data/curr/gd.txt2
-rw-r--r--intl/icu/source/data/curr/gl.txt2
-rw-r--r--intl/icu/source/data/curr/gsw.txt2
-rw-r--r--intl/icu/source/data/curr/gu.txt2
-rw-r--r--intl/icu/source/data/curr/guz.txt2
-rw-r--r--intl/icu/source/data/curr/gv.txt2
-rw-r--r--intl/icu/source/data/curr/ha.txt2
-rw-r--r--intl/icu/source/data/curr/ha_GH.txt2
-rw-r--r--intl/icu/source/data/curr/haw.txt2
-rw-r--r--intl/icu/source/data/curr/he.txt2
-rw-r--r--intl/icu/source/data/curr/he_IL.txt2
-rw-r--r--intl/icu/source/data/curr/hi.txt2
-rw-r--r--intl/icu/source/data/curr/hr.txt2
-rw-r--r--intl/icu/source/data/curr/hr_BA.txt2
-rw-r--r--intl/icu/source/data/curr/hsb.txt2
-rw-r--r--intl/icu/source/data/curr/hu.txt2
-rw-r--r--intl/icu/source/data/curr/hy.txt2
-rw-r--r--intl/icu/source/data/curr/id.txt2
-rw-r--r--intl/icu/source/data/curr/id_ID.txt2
-rw-r--r--intl/icu/source/data/curr/ig.txt2
-rw-r--r--intl/icu/source/data/curr/ii.txt2
-rw-r--r--intl/icu/source/data/curr/in.txt2
-rw-r--r--intl/icu/source/data/curr/in_ID.txt2
-rw-r--r--intl/icu/source/data/curr/is.txt2
-rw-r--r--intl/icu/source/data/curr/it.txt2
-rw-r--r--intl/icu/source/data/curr/iw.txt2
-rw-r--r--intl/icu/source/data/curr/iw_IL.txt2
-rw-r--r--intl/icu/source/data/curr/ja.txt2
-rw-r--r--intl/icu/source/data/curr/ja_JP.txt2
-rw-r--r--intl/icu/source/data/curr/ja_JP_TRADITIONAL.txt2
-rw-r--r--intl/icu/source/data/curr/jgo.txt2
-rw-r--r--intl/icu/source/data/curr/jmc.txt2
-rw-r--r--intl/icu/source/data/curr/ka.txt2
-rw-r--r--intl/icu/source/data/curr/kab.txt2
-rw-r--r--intl/icu/source/data/curr/kam.txt2
-rw-r--r--intl/icu/source/data/curr/kde.txt2
-rw-r--r--intl/icu/source/data/curr/kea.txt2
-rw-r--r--intl/icu/source/data/curr/khq.txt2
-rw-r--r--intl/icu/source/data/curr/ki.txt2
-rw-r--r--intl/icu/source/data/curr/kk.txt2
-rw-r--r--intl/icu/source/data/curr/kkj.txt2
-rw-r--r--intl/icu/source/data/curr/kl.txt2
-rw-r--r--intl/icu/source/data/curr/kln.txt2
-rw-r--r--intl/icu/source/data/curr/km.txt2
-rw-r--r--intl/icu/source/data/curr/kn.txt2
-rw-r--r--intl/icu/source/data/curr/ko.txt2
-rw-r--r--intl/icu/source/data/curr/kok.txt2
-rw-r--r--intl/icu/source/data/curr/ks.txt2
-rw-r--r--intl/icu/source/data/curr/ksb.txt2
-rw-r--r--intl/icu/source/data/curr/ksf.txt2
-rw-r--r--intl/icu/source/data/curr/ksh.txt2
-rw-r--r--intl/icu/source/data/curr/kw.txt2
-rw-r--r--intl/icu/source/data/curr/ky.txt2
-rw-r--r--intl/icu/source/data/curr/lag.txt2
-rw-r--r--intl/icu/source/data/curr/lb.txt2
-rw-r--r--intl/icu/source/data/curr/lg.txt2
-rw-r--r--intl/icu/source/data/curr/lkt.txt2
-rw-r--r--intl/icu/source/data/curr/ln.txt2
-rw-r--r--intl/icu/source/data/curr/ln_AO.txt2
-rw-r--r--intl/icu/source/data/curr/lo.txt2
-rw-r--r--intl/icu/source/data/curr/lrc.txt2
-rw-r--r--intl/icu/source/data/curr/lt.txt2
-rw-r--r--intl/icu/source/data/curr/lu.txt2
-rw-r--r--intl/icu/source/data/curr/luo.txt2
-rw-r--r--intl/icu/source/data/curr/luy.txt2
-rw-r--r--intl/icu/source/data/curr/lv.txt2
-rw-r--r--intl/icu/source/data/curr/mas.txt2
-rw-r--r--intl/icu/source/data/curr/mas_TZ.txt2
-rw-r--r--intl/icu/source/data/curr/mer.txt2
-rw-r--r--intl/icu/source/data/curr/mfe.txt2
-rw-r--r--intl/icu/source/data/curr/mg.txt2
-rw-r--r--intl/icu/source/data/curr/mgh.txt2
-rw-r--r--intl/icu/source/data/curr/mgo.txt2
-rw-r--r--intl/icu/source/data/curr/mk.txt2
-rw-r--r--intl/icu/source/data/curr/ml.txt2
-rw-r--r--intl/icu/source/data/curr/mn.txt2
-rw-r--r--intl/icu/source/data/curr/mo.txt2
-rw-r--r--intl/icu/source/data/curr/mr.txt2
-rw-r--r--intl/icu/source/data/curr/ms.txt2
-rw-r--r--intl/icu/source/data/curr/ms_BN.txt2
-rw-r--r--intl/icu/source/data/curr/ms_SG.txt2
-rw-r--r--intl/icu/source/data/curr/mt.txt2
-rw-r--r--intl/icu/source/data/curr/mua.txt2
-rw-r--r--intl/icu/source/data/curr/my.txt2
-rw-r--r--intl/icu/source/data/curr/mzn.txt2
-rw-r--r--intl/icu/source/data/curr/naq.txt2
-rw-r--r--intl/icu/source/data/curr/nb.txt2
-rw-r--r--intl/icu/source/data/curr/nb_NO.txt2
-rw-r--r--intl/icu/source/data/curr/nd.txt2
-rw-r--r--intl/icu/source/data/curr/nds.txt2
-rw-r--r--intl/icu/source/data/curr/ne.txt2
-rw-r--r--intl/icu/source/data/curr/nl.txt2
-rw-r--r--intl/icu/source/data/curr/nl_AW.txt2
-rw-r--r--intl/icu/source/data/curr/nl_BQ.txt2
-rw-r--r--intl/icu/source/data/curr/nl_CW.txt2
-rw-r--r--intl/icu/source/data/curr/nl_SR.txt2
-rw-r--r--intl/icu/source/data/curr/nl_SX.txt2
-rw-r--r--intl/icu/source/data/curr/nmg.txt2
-rw-r--r--intl/icu/source/data/curr/nn.txt2
-rw-r--r--intl/icu/source/data/curr/nn_NO.txt2
-rw-r--r--intl/icu/source/data/curr/nnh.txt2
-rw-r--r--intl/icu/source/data/curr/no.txt2
-rw-r--r--intl/icu/source/data/curr/no_NO.txt2
-rw-r--r--intl/icu/source/data/curr/no_NO_NY.txt2
-rw-r--r--intl/icu/source/data/curr/nus.txt2
-rw-r--r--intl/icu/source/data/curr/nyn.txt2
-rw-r--r--intl/icu/source/data/curr/om.txt2
-rw-r--r--intl/icu/source/data/curr/om_KE.txt2
-rw-r--r--intl/icu/source/data/curr/or.txt2
-rw-r--r--intl/icu/source/data/curr/os.txt2
-rw-r--r--intl/icu/source/data/curr/os_RU.txt2
-rw-r--r--intl/icu/source/data/curr/pa.txt2
-rw-r--r--intl/icu/source/data/curr/pa_Arab.txt2
-rw-r--r--intl/icu/source/data/curr/pa_Arab_PK.txt2
-rw-r--r--intl/icu/source/data/curr/pa_Guru.txt2
-rw-r--r--intl/icu/source/data/curr/pa_Guru_IN.txt2
-rw-r--r--intl/icu/source/data/curr/pa_IN.txt2
-rw-r--r--intl/icu/source/data/curr/pa_PK.txt2
-rw-r--r--intl/icu/source/data/curr/pl.txt2
-rw-r--r--intl/icu/source/data/curr/ps.txt2
-rw-r--r--intl/icu/source/data/curr/pt.txt2
-rw-r--r--intl/icu/source/data/curr/pt_AO.txt2
-rw-r--r--intl/icu/source/data/curr/pt_CH.txt2
-rw-r--r--intl/icu/source/data/curr/pt_CV.txt2
-rw-r--r--intl/icu/source/data/curr/pt_GQ.txt2
-rw-r--r--intl/icu/source/data/curr/pt_GW.txt2
-rw-r--r--intl/icu/source/data/curr/pt_LU.txt2
-rw-r--r--intl/icu/source/data/curr/pt_MO.txt2
-rw-r--r--intl/icu/source/data/curr/pt_MZ.txt2
-rw-r--r--intl/icu/source/data/curr/pt_PT.txt2
-rw-r--r--intl/icu/source/data/curr/pt_ST.txt2
-rw-r--r--intl/icu/source/data/curr/pt_TL.txt2
-rw-r--r--intl/icu/source/data/curr/qu.txt2
-rw-r--r--intl/icu/source/data/curr/qu_BO.txt2
-rw-r--r--intl/icu/source/data/curr/qu_EC.txt2
-rw-r--r--intl/icu/source/data/curr/rm.txt2
-rw-r--r--intl/icu/source/data/curr/rn.txt2
-rw-r--r--intl/icu/source/data/curr/ro.txt2
-rw-r--r--intl/icu/source/data/curr/ro_MD.txt2
-rw-r--r--intl/icu/source/data/curr/rof.txt2
-rw-r--r--intl/icu/source/data/curr/root.txt2
-rw-r--r--intl/icu/source/data/curr/ru.txt2
-rw-r--r--intl/icu/source/data/curr/ru_BY.txt2
-rw-r--r--intl/icu/source/data/curr/ru_KG.txt2
-rw-r--r--intl/icu/source/data/curr/ru_KZ.txt2
-rw-r--r--intl/icu/source/data/curr/ru_MD.txt2
-rw-r--r--intl/icu/source/data/curr/rw.txt2
-rw-r--r--intl/icu/source/data/curr/rwk.txt2
-rw-r--r--intl/icu/source/data/curr/sah.txt2
-rw-r--r--intl/icu/source/data/curr/saq.txt2
-rw-r--r--intl/icu/source/data/curr/sbp.txt2
-rw-r--r--intl/icu/source/data/curr/se.txt2
-rw-r--r--intl/icu/source/data/curr/se_SE.txt2
-rw-r--r--intl/icu/source/data/curr/seh.txt2
-rw-r--r--intl/icu/source/data/curr/ses.txt2
-rw-r--r--intl/icu/source/data/curr/sg.txt2
-rw-r--r--intl/icu/source/data/curr/sh.txt2
-rw-r--r--intl/icu/source/data/curr/sh_BA.txt2
-rw-r--r--intl/icu/source/data/curr/sh_CS.txt2
-rw-r--r--intl/icu/source/data/curr/sh_YU.txt2
-rw-r--r--intl/icu/source/data/curr/shi.txt2
-rw-r--r--intl/icu/source/data/curr/shi_Latn.txt2
-rw-r--r--intl/icu/source/data/curr/shi_MA.txt2
-rw-r--r--intl/icu/source/data/curr/shi_Tfng.txt2
-rw-r--r--intl/icu/source/data/curr/shi_Tfng_MA.txt2
-rw-r--r--intl/icu/source/data/curr/si.txt2
-rw-r--r--intl/icu/source/data/curr/sk.txt2
-rw-r--r--intl/icu/source/data/curr/sl.txt2
-rw-r--r--intl/icu/source/data/curr/smn.txt2
-rw-r--r--intl/icu/source/data/curr/sn.txt2
-rw-r--r--intl/icu/source/data/curr/so.txt2
-rw-r--r--intl/icu/source/data/curr/so_DJ.txt2
-rw-r--r--intl/icu/source/data/curr/so_ET.txt2
-rw-r--r--intl/icu/source/data/curr/so_KE.txt2
-rw-r--r--intl/icu/source/data/curr/sq.txt2
-rw-r--r--intl/icu/source/data/curr/sq_MK.txt2
-rw-r--r--intl/icu/source/data/curr/sr.txt2
-rw-r--r--intl/icu/source/data/curr/sr_BA.txt2
-rw-r--r--intl/icu/source/data/curr/sr_CS.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Cyrl.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Cyrl_BA.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Cyrl_CS.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Cyrl_RS.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Cyrl_XK.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Cyrl_YU.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Latn.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Latn_BA.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Latn_CS.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Latn_ME.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Latn_RS.txt2
-rw-r--r--intl/icu/source/data/curr/sr_Latn_YU.txt2
-rw-r--r--intl/icu/source/data/curr/sr_ME.txt2
-rw-r--r--intl/icu/source/data/curr/sr_RS.txt2
-rw-r--r--intl/icu/source/data/curr/sr_XK.txt2
-rw-r--r--intl/icu/source/data/curr/sr_YU.txt2
-rw-r--r--intl/icu/source/data/curr/supplementalData.txt2
-rw-r--r--intl/icu/source/data/curr/sv.txt2
-rw-r--r--intl/icu/source/data/curr/sw.txt2
-rw-r--r--intl/icu/source/data/curr/sw_CD.txt2
-rw-r--r--intl/icu/source/data/curr/sw_UG.txt2
-rw-r--r--intl/icu/source/data/curr/ta.txt2
-rw-r--r--intl/icu/source/data/curr/ta_LK.txt2
-rw-r--r--intl/icu/source/data/curr/ta_MY.txt2
-rw-r--r--intl/icu/source/data/curr/ta_SG.txt2
-rw-r--r--intl/icu/source/data/curr/te.txt2
-rw-r--r--intl/icu/source/data/curr/teo.txt2
-rw-r--r--intl/icu/source/data/curr/teo_KE.txt2
-rw-r--r--intl/icu/source/data/curr/th.txt2
-rw-r--r--intl/icu/source/data/curr/th_TH.txt2
-rw-r--r--intl/icu/source/data/curr/th_TH_TRADITIONAL.txt2
-rw-r--r--intl/icu/source/data/curr/ti.txt2
-rw-r--r--intl/icu/source/data/curr/ti_ER.txt2
-rw-r--r--intl/icu/source/data/curr/tl.txt2
-rw-r--r--intl/icu/source/data/curr/tl_PH.txt2
-rw-r--r--intl/icu/source/data/curr/to.txt2
-rw-r--r--intl/icu/source/data/curr/tr.txt2
-rw-r--r--intl/icu/source/data/curr/twq.txt2
-rw-r--r--intl/icu/source/data/curr/tzm.txt2
-rw-r--r--intl/icu/source/data/curr/ug.txt2
-rw-r--r--intl/icu/source/data/curr/uk.txt2
-rw-r--r--intl/icu/source/data/curr/ur.txt2
-rw-r--r--intl/icu/source/data/curr/ur_IN.txt2
-rw-r--r--intl/icu/source/data/curr/uz.txt2
-rw-r--r--intl/icu/source/data/curr/uz_AF.txt2
-rw-r--r--intl/icu/source/data/curr/uz_Arab.txt2
-rw-r--r--intl/icu/source/data/curr/uz_Arab_AF.txt2
-rw-r--r--intl/icu/source/data/curr/uz_Cyrl.txt2
-rw-r--r--intl/icu/source/data/curr/uz_Latn.txt2
-rw-r--r--intl/icu/source/data/curr/uz_Latn_UZ.txt2
-rw-r--r--intl/icu/source/data/curr/uz_UZ.txt2
-rw-r--r--intl/icu/source/data/curr/vai.txt2
-rw-r--r--intl/icu/source/data/curr/vai_LR.txt2
-rw-r--r--intl/icu/source/data/curr/vai_Latn.txt2
-rw-r--r--intl/icu/source/data/curr/vai_Vaii.txt2
-rw-r--r--intl/icu/source/data/curr/vai_Vaii_LR.txt2
-rw-r--r--intl/icu/source/data/curr/vi.txt2
-rw-r--r--intl/icu/source/data/curr/vun.txt2
-rw-r--r--intl/icu/source/data/curr/wae.txt2
-rw-r--r--intl/icu/source/data/curr/xog.txt2
-rw-r--r--intl/icu/source/data/curr/yav.txt2
-rw-r--r--intl/icu/source/data/curr/yi.txt2
-rw-r--r--intl/icu/source/data/curr/yo.txt2
-rw-r--r--intl/icu/source/data/curr/yo_BJ.txt2
-rw-r--r--intl/icu/source/data/curr/yue.txt2
-rw-r--r--intl/icu/source/data/curr/zgh.txt2
-rw-r--r--intl/icu/source/data/curr/zh.txt2
-rw-r--r--intl/icu/source/data/curr/zh_CN.txt2
-rw-r--r--intl/icu/source/data/curr/zh_HK.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hans.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hans_CN.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hans_HK.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hans_MO.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hans_SG.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hant.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hant_HK.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hant_MO.txt2
-rw-r--r--intl/icu/source/data/curr/zh_Hant_TW.txt2
-rw-r--r--intl/icu/source/data/curr/zh_MO.txt2
-rw-r--r--intl/icu/source/data/curr/zh_SG.txt2
-rw-r--r--intl/icu/source/data/curr/zh_TW.txt2
-rw-r--r--intl/icu/source/data/curr/zu.txt2
-rw-r--r--intl/icu/source/data/locales/af.txt2
-rw-r--r--intl/icu/source/data/locales/af_NA.txt2
-rw-r--r--intl/icu/source/data/locales/af_ZA.txt2
-rw-r--r--intl/icu/source/data/locales/agq.txt2
-rw-r--r--intl/icu/source/data/locales/agq_CM.txt2
-rw-r--r--intl/icu/source/data/locales/ak.txt2
-rw-r--r--intl/icu/source/data/locales/ak_GH.txt2
-rw-r--r--intl/icu/source/data/locales/am.txt2
-rw-r--r--intl/icu/source/data/locales/am_ET.txt2
-rw-r--r--intl/icu/source/data/locales/ar.txt3
-rw-r--r--intl/icu/source/data/locales/ar_001.txt2
-rw-r--r--intl/icu/source/data/locales/ar_AE.txt2
-rw-r--r--intl/icu/source/data/locales/ar_BH.txt2
-rw-r--r--intl/icu/source/data/locales/ar_DJ.txt2
-rw-r--r--intl/icu/source/data/locales/ar_DZ.txt2
-rw-r--r--intl/icu/source/data/locales/ar_EG.txt2
-rw-r--r--intl/icu/source/data/locales/ar_EH.txt2
-rw-r--r--intl/icu/source/data/locales/ar_ER.txt2
-rw-r--r--intl/icu/source/data/locales/ar_IL.txt2
-rw-r--r--intl/icu/source/data/locales/ar_IQ.txt2
-rw-r--r--intl/icu/source/data/locales/ar_JO.txt2
-rw-r--r--intl/icu/source/data/locales/ar_KM.txt2
-rw-r--r--intl/icu/source/data/locales/ar_KW.txt2
-rw-r--r--intl/icu/source/data/locales/ar_LB.txt2
-rw-r--r--intl/icu/source/data/locales/ar_LY.txt2
-rw-r--r--intl/icu/source/data/locales/ar_MA.txt2
-rw-r--r--intl/icu/source/data/locales/ar_MR.txt2
-rw-r--r--intl/icu/source/data/locales/ar_OM.txt2
-rw-r--r--intl/icu/source/data/locales/ar_PS.txt2
-rw-r--r--intl/icu/source/data/locales/ar_QA.txt2
-rw-r--r--intl/icu/source/data/locales/ar_SA.txt2
-rw-r--r--intl/icu/source/data/locales/ar_SD.txt2
-rw-r--r--intl/icu/source/data/locales/ar_SO.txt2
-rw-r--r--intl/icu/source/data/locales/ar_SS.txt2
-rw-r--r--intl/icu/source/data/locales/ar_SY.txt2
-rw-r--r--intl/icu/source/data/locales/ar_TD.txt2
-rw-r--r--intl/icu/source/data/locales/ar_TN.txt2
-rw-r--r--intl/icu/source/data/locales/ar_YE.txt2
-rw-r--r--intl/icu/source/data/locales/as.txt2
-rw-r--r--intl/icu/source/data/locales/as_IN.txt2
-rw-r--r--intl/icu/source/data/locales/asa.txt2
-rw-r--r--intl/icu/source/data/locales/asa_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/ast.txt5
-rw-r--r--intl/icu/source/data/locales/ast_ES.txt2
-rw-r--r--intl/icu/source/data/locales/az.txt2
-rw-r--r--intl/icu/source/data/locales/az_AZ.txt2
-rw-r--r--intl/icu/source/data/locales/az_Cyrl.txt2
-rw-r--r--intl/icu/source/data/locales/az_Cyrl_AZ.txt2
-rw-r--r--intl/icu/source/data/locales/az_Latn.txt2
-rw-r--r--intl/icu/source/data/locales/az_Latn_AZ.txt2
-rw-r--r--intl/icu/source/data/locales/bas.txt2
-rw-r--r--intl/icu/source/data/locales/bas_CM.txt2
-rw-r--r--intl/icu/source/data/locales/be.txt2
-rw-r--r--intl/icu/source/data/locales/be_BY.txt2
-rw-r--r--intl/icu/source/data/locales/bem.txt2
-rw-r--r--intl/icu/source/data/locales/bem_ZM.txt2
-rw-r--r--intl/icu/source/data/locales/bez.txt2
-rw-r--r--intl/icu/source/data/locales/bez_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/bg.txt2
-rw-r--r--intl/icu/source/data/locales/bg_BG.txt2
-rw-r--r--intl/icu/source/data/locales/bm.txt2
-rw-r--r--intl/icu/source/data/locales/bm_ML.txt2
-rw-r--r--intl/icu/source/data/locales/bn.txt2
-rw-r--r--intl/icu/source/data/locales/bn_BD.txt2
-rw-r--r--intl/icu/source/data/locales/bn_IN.txt2
-rw-r--r--intl/icu/source/data/locales/bo.txt2
-rw-r--r--intl/icu/source/data/locales/bo_CN.txt2
-rw-r--r--intl/icu/source/data/locales/bo_IN.txt2
-rw-r--r--intl/icu/source/data/locales/br.txt2
-rw-r--r--intl/icu/source/data/locales/br_FR.txt2
-rw-r--r--intl/icu/source/data/locales/brx.txt2
-rw-r--r--intl/icu/source/data/locales/brx_IN.txt2
-rw-r--r--intl/icu/source/data/locales/bs.txt2
-rw-r--r--intl/icu/source/data/locales/bs_BA.txt2
-rw-r--r--intl/icu/source/data/locales/bs_Cyrl.txt3
-rw-r--r--intl/icu/source/data/locales/bs_Cyrl_BA.txt2
-rw-r--r--intl/icu/source/data/locales/bs_Latn.txt2
-rw-r--r--intl/icu/source/data/locales/bs_Latn_BA.txt2
-rw-r--r--intl/icu/source/data/locales/ca.txt2
-rw-r--r--intl/icu/source/data/locales/ca_AD.txt2
-rw-r--r--intl/icu/source/data/locales/ca_ES.txt2
-rw-r--r--intl/icu/source/data/locales/ca_FR.txt2
-rw-r--r--intl/icu/source/data/locales/ca_IT.txt2
-rw-r--r--intl/icu/source/data/locales/ce.txt2
-rw-r--r--intl/icu/source/data/locales/ce_RU.txt2
-rw-r--r--intl/icu/source/data/locales/cgg.txt2
-rw-r--r--intl/icu/source/data/locales/cgg_UG.txt2
-rw-r--r--intl/icu/source/data/locales/chr.txt2
-rw-r--r--intl/icu/source/data/locales/chr_US.txt2
-rw-r--r--intl/icu/source/data/locales/ckb.txt2
-rw-r--r--intl/icu/source/data/locales/ckb_IQ.txt2
-rw-r--r--intl/icu/source/data/locales/ckb_IR.txt2
-rw-r--r--intl/icu/source/data/locales/cs.txt5
-rw-r--r--intl/icu/source/data/locales/cs_CZ.txt2
-rw-r--r--intl/icu/source/data/locales/cy.txt2
-rw-r--r--intl/icu/source/data/locales/cy_GB.txt2
-rw-r--r--intl/icu/source/data/locales/da.txt2
-rw-r--r--intl/icu/source/data/locales/da_DK.txt2
-rw-r--r--intl/icu/source/data/locales/da_GL.txt2
-rw-r--r--intl/icu/source/data/locales/dav.txt2
-rw-r--r--intl/icu/source/data/locales/dav_KE.txt2
-rw-r--r--intl/icu/source/data/locales/de.txt3
-rw-r--r--intl/icu/source/data/locales/de_AT.txt2
-rw-r--r--intl/icu/source/data/locales/de_BE.txt2
-rw-r--r--intl/icu/source/data/locales/de_CH.txt2
-rw-r--r--intl/icu/source/data/locales/de_DE.txt2
-rw-r--r--intl/icu/source/data/locales/de_IT.txt2
-rw-r--r--intl/icu/source/data/locales/de_LI.txt2
-rw-r--r--intl/icu/source/data/locales/de_LU.txt2
-rw-r--r--intl/icu/source/data/locales/dje.txt2
-rw-r--r--intl/icu/source/data/locales/dje_NE.txt2
-rw-r--r--intl/icu/source/data/locales/dsb.txt2
-rw-r--r--intl/icu/source/data/locales/dsb_DE.txt2
-rw-r--r--intl/icu/source/data/locales/dua.txt2
-rw-r--r--intl/icu/source/data/locales/dua_CM.txt2
-rw-r--r--intl/icu/source/data/locales/dyo.txt2
-rw-r--r--intl/icu/source/data/locales/dyo_SN.txt2
-rw-r--r--intl/icu/source/data/locales/dz.txt2
-rw-r--r--intl/icu/source/data/locales/dz_BT.txt2
-rw-r--r--intl/icu/source/data/locales/ebu.txt2
-rw-r--r--intl/icu/source/data/locales/ebu_KE.txt2
-rw-r--r--intl/icu/source/data/locales/ee.txt2
-rw-r--r--intl/icu/source/data/locales/ee_GH.txt2
-rw-r--r--intl/icu/source/data/locales/ee_TG.txt2
-rw-r--r--intl/icu/source/data/locales/el.txt2
-rw-r--r--intl/icu/source/data/locales/el_CY.txt2
-rw-r--r--intl/icu/source/data/locales/el_GR.txt2
-rw-r--r--intl/icu/source/data/locales/en.txt2
-rw-r--r--intl/icu/source/data/locales/en_001.txt2
-rw-r--r--intl/icu/source/data/locales/en_150.txt2
-rw-r--r--intl/icu/source/data/locales/en_AG.txt2
-rw-r--r--intl/icu/source/data/locales/en_AI.txt2
-rw-r--r--intl/icu/source/data/locales/en_AS.txt2
-rw-r--r--intl/icu/source/data/locales/en_AT.txt2
-rw-r--r--intl/icu/source/data/locales/en_AU.txt2
-rw-r--r--intl/icu/source/data/locales/en_BB.txt2
-rw-r--r--intl/icu/source/data/locales/en_BE.txt2
-rw-r--r--intl/icu/source/data/locales/en_BI.txt2
-rw-r--r--intl/icu/source/data/locales/en_BM.txt2
-rw-r--r--intl/icu/source/data/locales/en_BS.txt2
-rw-r--r--intl/icu/source/data/locales/en_BW.txt2
-rw-r--r--intl/icu/source/data/locales/en_BZ.txt2
-rw-r--r--intl/icu/source/data/locales/en_CA.txt2
-rw-r--r--intl/icu/source/data/locales/en_CC.txt2
-rw-r--r--intl/icu/source/data/locales/en_CH.txt2
-rw-r--r--intl/icu/source/data/locales/en_CK.txt2
-rw-r--r--intl/icu/source/data/locales/en_CM.txt2
-rw-r--r--intl/icu/source/data/locales/en_CX.txt2
-rw-r--r--intl/icu/source/data/locales/en_CY.txt2
-rw-r--r--intl/icu/source/data/locales/en_DE.txt2
-rw-r--r--intl/icu/source/data/locales/en_DG.txt2
-rw-r--r--intl/icu/source/data/locales/en_DK.txt2
-rw-r--r--intl/icu/source/data/locales/en_DM.txt2
-rw-r--r--intl/icu/source/data/locales/en_ER.txt2
-rw-r--r--intl/icu/source/data/locales/en_FI.txt2
-rw-r--r--intl/icu/source/data/locales/en_FJ.txt2
-rw-r--r--intl/icu/source/data/locales/en_FK.txt2
-rw-r--r--intl/icu/source/data/locales/en_FM.txt2
-rw-r--r--intl/icu/source/data/locales/en_GB.txt2
-rw-r--r--intl/icu/source/data/locales/en_GD.txt2
-rw-r--r--intl/icu/source/data/locales/en_GG.txt2
-rw-r--r--intl/icu/source/data/locales/en_GH.txt2
-rw-r--r--intl/icu/source/data/locales/en_GI.txt2
-rw-r--r--intl/icu/source/data/locales/en_GM.txt2
-rw-r--r--intl/icu/source/data/locales/en_GU.txt2
-rw-r--r--intl/icu/source/data/locales/en_GY.txt2
-rw-r--r--intl/icu/source/data/locales/en_HK.txt2
-rw-r--r--intl/icu/source/data/locales/en_IE.txt2
-rw-r--r--intl/icu/source/data/locales/en_IL.txt2
-rw-r--r--intl/icu/source/data/locales/en_IM.txt2
-rw-r--r--intl/icu/source/data/locales/en_IN.txt2
-rw-r--r--intl/icu/source/data/locales/en_IO.txt2
-rw-r--r--intl/icu/source/data/locales/en_JE.txt2
-rw-r--r--intl/icu/source/data/locales/en_JM.txt2
-rw-r--r--intl/icu/source/data/locales/en_KE.txt2
-rw-r--r--intl/icu/source/data/locales/en_KI.txt2
-rw-r--r--intl/icu/source/data/locales/en_KN.txt2
-rw-r--r--intl/icu/source/data/locales/en_KY.txt2
-rw-r--r--intl/icu/source/data/locales/en_LC.txt2
-rw-r--r--intl/icu/source/data/locales/en_LR.txt2
-rw-r--r--intl/icu/source/data/locales/en_LS.txt2
-rw-r--r--intl/icu/source/data/locales/en_MG.txt2
-rw-r--r--intl/icu/source/data/locales/en_MH.txt2
-rw-r--r--intl/icu/source/data/locales/en_MO.txt2
-rw-r--r--intl/icu/source/data/locales/en_MP.txt2
-rw-r--r--intl/icu/source/data/locales/en_MS.txt2
-rw-r--r--intl/icu/source/data/locales/en_MT.txt2
-rw-r--r--intl/icu/source/data/locales/en_MU.txt2
-rw-r--r--intl/icu/source/data/locales/en_MW.txt2
-rw-r--r--intl/icu/source/data/locales/en_MY.txt2
-rw-r--r--intl/icu/source/data/locales/en_NA.txt2
-rw-r--r--intl/icu/source/data/locales/en_NF.txt2
-rw-r--r--intl/icu/source/data/locales/en_NG.txt2
-rw-r--r--intl/icu/source/data/locales/en_NH.txt2
-rw-r--r--intl/icu/source/data/locales/en_NL.txt2
-rw-r--r--intl/icu/source/data/locales/en_NR.txt2
-rw-r--r--intl/icu/source/data/locales/en_NU.txt2
-rw-r--r--intl/icu/source/data/locales/en_NZ.txt2
-rw-r--r--intl/icu/source/data/locales/en_PG.txt2
-rw-r--r--intl/icu/source/data/locales/en_PH.txt2
-rw-r--r--intl/icu/source/data/locales/en_PK.txt2
-rw-r--r--intl/icu/source/data/locales/en_PN.txt2
-rw-r--r--intl/icu/source/data/locales/en_PR.txt2
-rw-r--r--intl/icu/source/data/locales/en_PW.txt2
-rw-r--r--intl/icu/source/data/locales/en_RH.txt2
-rw-r--r--intl/icu/source/data/locales/en_RW.txt2
-rw-r--r--intl/icu/source/data/locales/en_SB.txt2
-rw-r--r--intl/icu/source/data/locales/en_SC.txt2
-rw-r--r--intl/icu/source/data/locales/en_SD.txt2
-rw-r--r--intl/icu/source/data/locales/en_SE.txt2
-rw-r--r--intl/icu/source/data/locales/en_SG.txt2
-rw-r--r--intl/icu/source/data/locales/en_SH.txt2
-rw-r--r--intl/icu/source/data/locales/en_SI.txt2
-rw-r--r--intl/icu/source/data/locales/en_SL.txt2
-rw-r--r--intl/icu/source/data/locales/en_SS.txt2
-rw-r--r--intl/icu/source/data/locales/en_SX.txt2
-rw-r--r--intl/icu/source/data/locales/en_SZ.txt2
-rw-r--r--intl/icu/source/data/locales/en_TC.txt2
-rw-r--r--intl/icu/source/data/locales/en_TK.txt2
-rw-r--r--intl/icu/source/data/locales/en_TO.txt2
-rw-r--r--intl/icu/source/data/locales/en_TT.txt2
-rw-r--r--intl/icu/source/data/locales/en_TV.txt2
-rw-r--r--intl/icu/source/data/locales/en_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/en_UG.txt2
-rw-r--r--intl/icu/source/data/locales/en_UM.txt2
-rw-r--r--intl/icu/source/data/locales/en_US.txt2
-rw-r--r--intl/icu/source/data/locales/en_US_POSIX.txt2
-rw-r--r--intl/icu/source/data/locales/en_VC.txt2
-rw-r--r--intl/icu/source/data/locales/en_VG.txt2
-rw-r--r--intl/icu/source/data/locales/en_VI.txt2
-rw-r--r--intl/icu/source/data/locales/en_VU.txt2
-rw-r--r--intl/icu/source/data/locales/en_WS.txt2
-rw-r--r--intl/icu/source/data/locales/en_ZA.txt2
-rw-r--r--intl/icu/source/data/locales/en_ZM.txt2
-rw-r--r--intl/icu/source/data/locales/en_ZW.txt2
-rw-r--r--intl/icu/source/data/locales/eo.txt2
-rw-r--r--intl/icu/source/data/locales/es.txt2
-rw-r--r--intl/icu/source/data/locales/es_419.txt2
-rw-r--r--intl/icu/source/data/locales/es_AR.txt2
-rw-r--r--intl/icu/source/data/locales/es_BO.txt2
-rw-r--r--intl/icu/source/data/locales/es_BR.txt2
-rw-r--r--intl/icu/source/data/locales/es_CL.txt2
-rw-r--r--intl/icu/source/data/locales/es_CO.txt2
-rw-r--r--intl/icu/source/data/locales/es_CR.txt2
-rw-r--r--intl/icu/source/data/locales/es_CU.txt2
-rw-r--r--intl/icu/source/data/locales/es_DO.txt2
-rw-r--r--intl/icu/source/data/locales/es_EA.txt2
-rw-r--r--intl/icu/source/data/locales/es_EC.txt2
-rw-r--r--intl/icu/source/data/locales/es_ES.txt2
-rw-r--r--intl/icu/source/data/locales/es_GQ.txt2
-rw-r--r--intl/icu/source/data/locales/es_GT.txt2
-rw-r--r--intl/icu/source/data/locales/es_HN.txt2
-rw-r--r--intl/icu/source/data/locales/es_IC.txt2
-rw-r--r--intl/icu/source/data/locales/es_MX.txt2
-rw-r--r--intl/icu/source/data/locales/es_NI.txt2
-rw-r--r--intl/icu/source/data/locales/es_PA.txt2
-rw-r--r--intl/icu/source/data/locales/es_PE.txt2
-rw-r--r--intl/icu/source/data/locales/es_PH.txt2
-rw-r--r--intl/icu/source/data/locales/es_PR.txt2
-rw-r--r--intl/icu/source/data/locales/es_PY.txt2
-rw-r--r--intl/icu/source/data/locales/es_SV.txt2
-rw-r--r--intl/icu/source/data/locales/es_US.txt2
-rw-r--r--intl/icu/source/data/locales/es_UY.txt2
-rw-r--r--intl/icu/source/data/locales/es_VE.txt2
-rw-r--r--intl/icu/source/data/locales/et.txt2
-rw-r--r--intl/icu/source/data/locales/et_EE.txt2
-rw-r--r--intl/icu/source/data/locales/eu.txt2
-rw-r--r--intl/icu/source/data/locales/eu_ES.txt2
-rw-r--r--intl/icu/source/data/locales/ewo.txt2
-rw-r--r--intl/icu/source/data/locales/ewo_CM.txt2
-rw-r--r--intl/icu/source/data/locales/fa.txt2
-rw-r--r--intl/icu/source/data/locales/fa_AF.txt2
-rw-r--r--intl/icu/source/data/locales/fa_IR.txt2
-rw-r--r--intl/icu/source/data/locales/ff.txt2
-rw-r--r--intl/icu/source/data/locales/ff_CM.txt2
-rw-r--r--intl/icu/source/data/locales/ff_GN.txt2
-rw-r--r--intl/icu/source/data/locales/ff_MR.txt2
-rw-r--r--intl/icu/source/data/locales/ff_SN.txt2
-rw-r--r--intl/icu/source/data/locales/fi.txt2
-rw-r--r--intl/icu/source/data/locales/fi_FI.txt2
-rw-r--r--intl/icu/source/data/locales/fil.txt2
-rw-r--r--intl/icu/source/data/locales/fil_PH.txt2
-rw-r--r--intl/icu/source/data/locales/fo.txt2
-rw-r--r--intl/icu/source/data/locales/fo_DK.txt2
-rw-r--r--intl/icu/source/data/locales/fo_FO.txt2
-rw-r--r--intl/icu/source/data/locales/fr.txt2
-rw-r--r--intl/icu/source/data/locales/fr_BE.txt2
-rw-r--r--intl/icu/source/data/locales/fr_BF.txt2
-rw-r--r--intl/icu/source/data/locales/fr_BI.txt2
-rw-r--r--intl/icu/source/data/locales/fr_BJ.txt2
-rw-r--r--intl/icu/source/data/locales/fr_BL.txt2
-rw-r--r--intl/icu/source/data/locales/fr_CA.txt2
-rw-r--r--intl/icu/source/data/locales/fr_CD.txt2
-rw-r--r--intl/icu/source/data/locales/fr_CF.txt2
-rw-r--r--intl/icu/source/data/locales/fr_CG.txt2
-rw-r--r--intl/icu/source/data/locales/fr_CH.txt2
-rw-r--r--intl/icu/source/data/locales/fr_CI.txt2
-rw-r--r--intl/icu/source/data/locales/fr_CM.txt2
-rw-r--r--intl/icu/source/data/locales/fr_DJ.txt2
-rw-r--r--intl/icu/source/data/locales/fr_DZ.txt2
-rw-r--r--intl/icu/source/data/locales/fr_FR.txt2
-rw-r--r--intl/icu/source/data/locales/fr_GA.txt2
-rw-r--r--intl/icu/source/data/locales/fr_GF.txt2
-rw-r--r--intl/icu/source/data/locales/fr_GN.txt2
-rw-r--r--intl/icu/source/data/locales/fr_GP.txt2
-rw-r--r--intl/icu/source/data/locales/fr_GQ.txt2
-rw-r--r--intl/icu/source/data/locales/fr_HT.txt2
-rw-r--r--intl/icu/source/data/locales/fr_KM.txt2
-rw-r--r--intl/icu/source/data/locales/fr_LU.txt2
-rw-r--r--intl/icu/source/data/locales/fr_MA.txt2
-rw-r--r--intl/icu/source/data/locales/fr_MC.txt2
-rw-r--r--intl/icu/source/data/locales/fr_MF.txt2
-rw-r--r--intl/icu/source/data/locales/fr_MG.txt2
-rw-r--r--intl/icu/source/data/locales/fr_ML.txt2
-rw-r--r--intl/icu/source/data/locales/fr_MQ.txt2
-rw-r--r--intl/icu/source/data/locales/fr_MR.txt2
-rw-r--r--intl/icu/source/data/locales/fr_MU.txt2
-rw-r--r--intl/icu/source/data/locales/fr_NC.txt2
-rw-r--r--intl/icu/source/data/locales/fr_NE.txt2
-rw-r--r--intl/icu/source/data/locales/fr_PF.txt2
-rw-r--r--intl/icu/source/data/locales/fr_PM.txt2
-rw-r--r--intl/icu/source/data/locales/fr_RE.txt2
-rw-r--r--intl/icu/source/data/locales/fr_RW.txt2
-rw-r--r--intl/icu/source/data/locales/fr_SC.txt2
-rw-r--r--intl/icu/source/data/locales/fr_SN.txt2
-rw-r--r--intl/icu/source/data/locales/fr_SY.txt2
-rw-r--r--intl/icu/source/data/locales/fr_TD.txt2
-rw-r--r--intl/icu/source/data/locales/fr_TG.txt2
-rw-r--r--intl/icu/source/data/locales/fr_TN.txt2
-rw-r--r--intl/icu/source/data/locales/fr_VU.txt2
-rw-r--r--intl/icu/source/data/locales/fr_WF.txt2
-rw-r--r--intl/icu/source/data/locales/fr_YT.txt2
-rw-r--r--intl/icu/source/data/locales/fur.txt2
-rw-r--r--intl/icu/source/data/locales/fur_IT.txt2
-rw-r--r--intl/icu/source/data/locales/fy.txt2
-rw-r--r--intl/icu/source/data/locales/fy_NL.txt2
-rw-r--r--intl/icu/source/data/locales/ga.txt2
-rw-r--r--intl/icu/source/data/locales/ga_IE.txt2
-rw-r--r--intl/icu/source/data/locales/gd.txt2
-rw-r--r--intl/icu/source/data/locales/gd_GB.txt2
-rw-r--r--intl/icu/source/data/locales/gl.txt2
-rw-r--r--intl/icu/source/data/locales/gl_ES.txt2
-rw-r--r--intl/icu/source/data/locales/gsw.txt2
-rw-r--r--intl/icu/source/data/locales/gsw_CH.txt2
-rw-r--r--intl/icu/source/data/locales/gsw_FR.txt2
-rw-r--r--intl/icu/source/data/locales/gsw_LI.txt2
-rw-r--r--intl/icu/source/data/locales/gu.txt2
-rw-r--r--intl/icu/source/data/locales/gu_IN.txt2
-rw-r--r--intl/icu/source/data/locales/guz.txt2
-rw-r--r--intl/icu/source/data/locales/guz_KE.txt2
-rw-r--r--intl/icu/source/data/locales/gv.txt2
-rw-r--r--intl/icu/source/data/locales/gv_IM.txt2
-rw-r--r--intl/icu/source/data/locales/ha.txt2
-rw-r--r--intl/icu/source/data/locales/ha_GH.txt2
-rw-r--r--intl/icu/source/data/locales/ha_NE.txt2
-rw-r--r--intl/icu/source/data/locales/ha_NG.txt2
-rw-r--r--intl/icu/source/data/locales/haw.txt2
-rw-r--r--intl/icu/source/data/locales/haw_US.txt2
-rw-r--r--intl/icu/source/data/locales/he.txt3
-rw-r--r--intl/icu/source/data/locales/he_IL.txt2
-rw-r--r--intl/icu/source/data/locales/hi.txt3
-rw-r--r--intl/icu/source/data/locales/hi_IN.txt2
-rw-r--r--intl/icu/source/data/locales/hr.txt3
-rw-r--r--intl/icu/source/data/locales/hr_BA.txt2
-rw-r--r--intl/icu/source/data/locales/hr_HR.txt2
-rw-r--r--intl/icu/source/data/locales/hsb.txt2
-rw-r--r--intl/icu/source/data/locales/hsb_DE.txt2
-rw-r--r--intl/icu/source/data/locales/hu.txt2
-rw-r--r--intl/icu/source/data/locales/hu_HU.txt2
-rw-r--r--intl/icu/source/data/locales/hy.txt2
-rw-r--r--intl/icu/source/data/locales/hy_AM.txt2
-rw-r--r--intl/icu/source/data/locales/id.txt3
-rw-r--r--intl/icu/source/data/locales/id_ID.txt2
-rw-r--r--intl/icu/source/data/locales/ig.txt2
-rw-r--r--intl/icu/source/data/locales/ig_NG.txt2
-rw-r--r--intl/icu/source/data/locales/ii.txt2
-rw-r--r--intl/icu/source/data/locales/ii_CN.txt2
-rw-r--r--intl/icu/source/data/locales/in.txt2
-rw-r--r--intl/icu/source/data/locales/in_ID.txt2
-rw-r--r--intl/icu/source/data/locales/is.txt2
-rw-r--r--intl/icu/source/data/locales/is_IS.txt2
-rw-r--r--intl/icu/source/data/locales/it.txt2
-rw-r--r--intl/icu/source/data/locales/it_CH.txt2
-rw-r--r--intl/icu/source/data/locales/it_IT.txt2
-rw-r--r--intl/icu/source/data/locales/it_SM.txt2
-rw-r--r--intl/icu/source/data/locales/iw.txt2
-rw-r--r--intl/icu/source/data/locales/iw_IL.txt2
-rw-r--r--intl/icu/source/data/locales/ja.txt4
-rw-r--r--intl/icu/source/data/locales/ja_JP.txt2
-rw-r--r--intl/icu/source/data/locales/ja_JP_TRADITIONAL.txt2
-rw-r--r--intl/icu/source/data/locales/jgo.txt2
-rw-r--r--intl/icu/source/data/locales/jgo_CM.txt2
-rw-r--r--intl/icu/source/data/locales/jmc.txt2
-rw-r--r--intl/icu/source/data/locales/jmc_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/ka.txt2
-rw-r--r--intl/icu/source/data/locales/ka_GE.txt2
-rw-r--r--intl/icu/source/data/locales/kab.txt2
-rw-r--r--intl/icu/source/data/locales/kab_DZ.txt2
-rw-r--r--intl/icu/source/data/locales/kam.txt2
-rw-r--r--intl/icu/source/data/locales/kam_KE.txt2
-rw-r--r--intl/icu/source/data/locales/kde.txt2
-rw-r--r--intl/icu/source/data/locales/kde_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/kea.txt2
-rw-r--r--intl/icu/source/data/locales/kea_CV.txt2
-rw-r--r--intl/icu/source/data/locales/khq.txt2
-rw-r--r--intl/icu/source/data/locales/khq_ML.txt2
-rw-r--r--intl/icu/source/data/locales/ki.txt2
-rw-r--r--intl/icu/source/data/locales/ki_KE.txt2
-rw-r--r--intl/icu/source/data/locales/kk.txt2
-rw-r--r--intl/icu/source/data/locales/kk_KZ.txt2
-rw-r--r--intl/icu/source/data/locales/kkj.txt2
-rw-r--r--intl/icu/source/data/locales/kkj_CM.txt2
-rw-r--r--intl/icu/source/data/locales/kl.txt2
-rw-r--r--intl/icu/source/data/locales/kl_GL.txt2
-rw-r--r--intl/icu/source/data/locales/kln.txt2
-rw-r--r--intl/icu/source/data/locales/kln_KE.txt2
-rw-r--r--intl/icu/source/data/locales/km.txt2
-rw-r--r--intl/icu/source/data/locales/km_KH.txt2
-rw-r--r--intl/icu/source/data/locales/kn.txt2
-rw-r--r--intl/icu/source/data/locales/kn_IN.txt2
-rw-r--r--intl/icu/source/data/locales/ko.txt3
-rw-r--r--intl/icu/source/data/locales/ko_KP.txt2
-rw-r--r--intl/icu/source/data/locales/ko_KR.txt2
-rw-r--r--intl/icu/source/data/locales/kok.txt2
-rw-r--r--intl/icu/source/data/locales/kok_IN.txt2
-rw-r--r--intl/icu/source/data/locales/ks.txt2
-rw-r--r--intl/icu/source/data/locales/ks_IN.txt2
-rw-r--r--intl/icu/source/data/locales/ksb.txt2
-rw-r--r--intl/icu/source/data/locales/ksb_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/ksf.txt2
-rw-r--r--intl/icu/source/data/locales/ksf_CM.txt2
-rw-r--r--intl/icu/source/data/locales/ksh.txt2
-rw-r--r--intl/icu/source/data/locales/ksh_DE.txt2
-rw-r--r--intl/icu/source/data/locales/kw.txt2
-rw-r--r--intl/icu/source/data/locales/kw_GB.txt2
-rw-r--r--intl/icu/source/data/locales/ky.txt2
-rw-r--r--intl/icu/source/data/locales/ky_KG.txt2
-rw-r--r--intl/icu/source/data/locales/lag.txt2
-rw-r--r--intl/icu/source/data/locales/lag_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/lb.txt2
-rw-r--r--intl/icu/source/data/locales/lb_LU.txt2
-rw-r--r--intl/icu/source/data/locales/lg.txt2
-rw-r--r--intl/icu/source/data/locales/lg_UG.txt2
-rw-r--r--intl/icu/source/data/locales/lkt.txt2
-rw-r--r--intl/icu/source/data/locales/lkt_US.txt2
-rw-r--r--intl/icu/source/data/locales/ln.txt2
-rw-r--r--intl/icu/source/data/locales/ln_AO.txt2
-rw-r--r--intl/icu/source/data/locales/ln_CD.txt2
-rw-r--r--intl/icu/source/data/locales/ln_CF.txt2
-rw-r--r--intl/icu/source/data/locales/ln_CG.txt2
-rw-r--r--intl/icu/source/data/locales/lo.txt3
-rw-r--r--intl/icu/source/data/locales/lo_LA.txt2
-rw-r--r--intl/icu/source/data/locales/lrc.txt2
-rw-r--r--intl/icu/source/data/locales/lrc_IQ.txt2
-rw-r--r--intl/icu/source/data/locales/lrc_IR.txt2
-rw-r--r--intl/icu/source/data/locales/lt.txt3
-rw-r--r--intl/icu/source/data/locales/lt_LT.txt2
-rw-r--r--intl/icu/source/data/locales/lu.txt2
-rw-r--r--intl/icu/source/data/locales/lu_CD.txt2
-rw-r--r--intl/icu/source/data/locales/luo.txt2
-rw-r--r--intl/icu/source/data/locales/luo_KE.txt2
-rw-r--r--intl/icu/source/data/locales/luy.txt2
-rw-r--r--intl/icu/source/data/locales/luy_KE.txt2
-rw-r--r--intl/icu/source/data/locales/lv.txt2
-rw-r--r--intl/icu/source/data/locales/lv_LV.txt2
-rw-r--r--intl/icu/source/data/locales/mas.txt2
-rw-r--r--intl/icu/source/data/locales/mas_KE.txt2
-rw-r--r--intl/icu/source/data/locales/mas_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/mer.txt2
-rw-r--r--intl/icu/source/data/locales/mer_KE.txt2
-rw-r--r--intl/icu/source/data/locales/mfe.txt2
-rw-r--r--intl/icu/source/data/locales/mfe_MU.txt2
-rw-r--r--intl/icu/source/data/locales/mg.txt2
-rw-r--r--intl/icu/source/data/locales/mg_MG.txt2
-rw-r--r--intl/icu/source/data/locales/mgh.txt2
-rw-r--r--intl/icu/source/data/locales/mgh_MZ.txt2
-rw-r--r--intl/icu/source/data/locales/mgo.txt2
-rw-r--r--intl/icu/source/data/locales/mgo_CM.txt2
-rw-r--r--intl/icu/source/data/locales/mk.txt2
-rw-r--r--intl/icu/source/data/locales/mk_MK.txt2
-rw-r--r--intl/icu/source/data/locales/ml.txt2
-rw-r--r--intl/icu/source/data/locales/ml_IN.txt2
-rw-r--r--intl/icu/source/data/locales/mn.txt2
-rw-r--r--intl/icu/source/data/locales/mn_MN.txt2
-rw-r--r--intl/icu/source/data/locales/mo.txt2
-rw-r--r--intl/icu/source/data/locales/mr.txt2
-rw-r--r--intl/icu/source/data/locales/mr_IN.txt2
-rw-r--r--intl/icu/source/data/locales/ms.txt2
-rw-r--r--intl/icu/source/data/locales/ms_BN.txt2
-rw-r--r--intl/icu/source/data/locales/ms_MY.txt2
-rw-r--r--intl/icu/source/data/locales/ms_SG.txt2
-rw-r--r--intl/icu/source/data/locales/mt.txt2
-rw-r--r--intl/icu/source/data/locales/mt_MT.txt2
-rw-r--r--intl/icu/source/data/locales/mua.txt2
-rw-r--r--intl/icu/source/data/locales/mua_CM.txt2
-rw-r--r--intl/icu/source/data/locales/my.txt2
-rw-r--r--intl/icu/source/data/locales/my_MM.txt2
-rw-r--r--intl/icu/source/data/locales/mzn.txt2
-rw-r--r--intl/icu/source/data/locales/mzn_IR.txt2
-rw-r--r--intl/icu/source/data/locales/naq.txt2
-rw-r--r--intl/icu/source/data/locales/naq_NA.txt2
-rw-r--r--intl/icu/source/data/locales/nb.txt4
-rw-r--r--intl/icu/source/data/locales/nb_NO.txt2
-rw-r--r--intl/icu/source/data/locales/nb_SJ.txt2
-rw-r--r--intl/icu/source/data/locales/nd.txt2
-rw-r--r--intl/icu/source/data/locales/nd_ZW.txt2
-rw-r--r--intl/icu/source/data/locales/nds.txt2
-rw-r--r--intl/icu/source/data/locales/nds_DE.txt2
-rw-r--r--intl/icu/source/data/locales/nds_NL.txt2
-rw-r--r--intl/icu/source/data/locales/ne.txt2
-rw-r--r--intl/icu/source/data/locales/ne_IN.txt2
-rw-r--r--intl/icu/source/data/locales/ne_NP.txt2
-rw-r--r--intl/icu/source/data/locales/nl.txt3
-rw-r--r--intl/icu/source/data/locales/nl_AW.txt2
-rw-r--r--intl/icu/source/data/locales/nl_BE.txt2
-rw-r--r--intl/icu/source/data/locales/nl_BQ.txt2
-rw-r--r--intl/icu/source/data/locales/nl_CW.txt2
-rw-r--r--intl/icu/source/data/locales/nl_NL.txt2
-rw-r--r--intl/icu/source/data/locales/nl_SR.txt2
-rw-r--r--intl/icu/source/data/locales/nl_SX.txt2
-rw-r--r--intl/icu/source/data/locales/nmg.txt2
-rw-r--r--intl/icu/source/data/locales/nmg_CM.txt2
-rw-r--r--intl/icu/source/data/locales/nn.txt2
-rw-r--r--intl/icu/source/data/locales/nn_NO.txt2
-rw-r--r--intl/icu/source/data/locales/nnh.txt2
-rw-r--r--intl/icu/source/data/locales/nnh_CM.txt2
-rw-r--r--intl/icu/source/data/locales/no.txt2
-rw-r--r--intl/icu/source/data/locales/no_NO.txt2
-rw-r--r--intl/icu/source/data/locales/no_NO_NY.txt2
-rw-r--r--intl/icu/source/data/locales/nus.txt2
-rw-r--r--intl/icu/source/data/locales/nus_SS.txt2
-rw-r--r--intl/icu/source/data/locales/nyn.txt2
-rw-r--r--intl/icu/source/data/locales/nyn_UG.txt2
-rw-r--r--intl/icu/source/data/locales/om.txt2
-rw-r--r--intl/icu/source/data/locales/om_ET.txt2
-rw-r--r--intl/icu/source/data/locales/om_KE.txt2
-rw-r--r--intl/icu/source/data/locales/or.txt2
-rw-r--r--intl/icu/source/data/locales/or_IN.txt2
-rw-r--r--intl/icu/source/data/locales/os.txt2
-rw-r--r--intl/icu/source/data/locales/os_GE.txt2
-rw-r--r--intl/icu/source/data/locales/os_RU.txt2
-rw-r--r--intl/icu/source/data/locales/pa.txt2
-rw-r--r--intl/icu/source/data/locales/pa_Arab.txt2
-rw-r--r--intl/icu/source/data/locales/pa_Arab_PK.txt2
-rw-r--r--intl/icu/source/data/locales/pa_Guru.txt2
-rw-r--r--intl/icu/source/data/locales/pa_Guru_IN.txt2
-rw-r--r--intl/icu/source/data/locales/pa_IN.txt2
-rw-r--r--intl/icu/source/data/locales/pa_PK.txt2
-rw-r--r--intl/icu/source/data/locales/pl.txt2
-rw-r--r--intl/icu/source/data/locales/pl_PL.txt2
-rw-r--r--intl/icu/source/data/locales/ps.txt2
-rw-r--r--intl/icu/source/data/locales/ps_AF.txt2
-rw-r--r--intl/icu/source/data/locales/pt.txt2
-rw-r--r--intl/icu/source/data/locales/pt_AO.txt2
-rw-r--r--intl/icu/source/data/locales/pt_BR.txt2
-rw-r--r--intl/icu/source/data/locales/pt_CH.txt2
-rw-r--r--intl/icu/source/data/locales/pt_CV.txt2
-rw-r--r--intl/icu/source/data/locales/pt_GQ.txt2
-rw-r--r--intl/icu/source/data/locales/pt_GW.txt2
-rw-r--r--intl/icu/source/data/locales/pt_LU.txt2
-rw-r--r--intl/icu/source/data/locales/pt_MO.txt2
-rw-r--r--intl/icu/source/data/locales/pt_MZ.txt2
-rw-r--r--intl/icu/source/data/locales/pt_PT.txt2
-rw-r--r--intl/icu/source/data/locales/pt_ST.txt2
-rw-r--r--intl/icu/source/data/locales/pt_TL.txt2
-rw-r--r--intl/icu/source/data/locales/qu.txt2
-rw-r--r--intl/icu/source/data/locales/qu_BO.txt2
-rw-r--r--intl/icu/source/data/locales/qu_EC.txt2
-rw-r--r--intl/icu/source/data/locales/qu_PE.txt2
-rw-r--r--intl/icu/source/data/locales/rm.txt2
-rw-r--r--intl/icu/source/data/locales/rm_CH.txt2
-rw-r--r--intl/icu/source/data/locales/rn.txt2
-rw-r--r--intl/icu/source/data/locales/rn_BI.txt2
-rw-r--r--intl/icu/source/data/locales/ro.txt2
-rw-r--r--intl/icu/source/data/locales/ro_MD.txt2
-rw-r--r--intl/icu/source/data/locales/ro_RO.txt2
-rw-r--r--intl/icu/source/data/locales/rof.txt2
-rw-r--r--intl/icu/source/data/locales/rof_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/root.txt4
-rw-r--r--intl/icu/source/data/locales/ru.txt3
-rw-r--r--intl/icu/source/data/locales/ru_BY.txt2
-rw-r--r--intl/icu/source/data/locales/ru_KG.txt2
-rw-r--r--intl/icu/source/data/locales/ru_KZ.txt2
-rw-r--r--intl/icu/source/data/locales/ru_MD.txt2
-rw-r--r--intl/icu/source/data/locales/ru_RU.txt2
-rw-r--r--intl/icu/source/data/locales/ru_UA.txt2
-rw-r--r--intl/icu/source/data/locales/rw.txt2
-rw-r--r--intl/icu/source/data/locales/rw_RW.txt2
-rw-r--r--intl/icu/source/data/locales/rwk.txt2
-rw-r--r--intl/icu/source/data/locales/rwk_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/sah.txt2
-rw-r--r--intl/icu/source/data/locales/sah_RU.txt2
-rw-r--r--intl/icu/source/data/locales/saq.txt2
-rw-r--r--intl/icu/source/data/locales/saq_KE.txt2
-rw-r--r--intl/icu/source/data/locales/sbp.txt2
-rw-r--r--intl/icu/source/data/locales/sbp_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/se.txt2
-rw-r--r--intl/icu/source/data/locales/se_FI.txt2
-rw-r--r--intl/icu/source/data/locales/se_NO.txt2
-rw-r--r--intl/icu/source/data/locales/se_SE.txt2
-rw-r--r--intl/icu/source/data/locales/seh.txt2
-rw-r--r--intl/icu/source/data/locales/seh_MZ.txt2
-rw-r--r--intl/icu/source/data/locales/ses.txt2
-rw-r--r--intl/icu/source/data/locales/ses_ML.txt2
-rw-r--r--intl/icu/source/data/locales/sg.txt2
-rw-r--r--intl/icu/source/data/locales/sg_CF.txt2
-rw-r--r--intl/icu/source/data/locales/sh.txt2
-rw-r--r--intl/icu/source/data/locales/sh_BA.txt2
-rw-r--r--intl/icu/source/data/locales/sh_CS.txt2
-rw-r--r--intl/icu/source/data/locales/sh_YU.txt2
-rw-r--r--intl/icu/source/data/locales/shi.txt2
-rw-r--r--intl/icu/source/data/locales/shi_Latn.txt2
-rw-r--r--intl/icu/source/data/locales/shi_Latn_MA.txt2
-rw-r--r--intl/icu/source/data/locales/shi_MA.txt2
-rw-r--r--intl/icu/source/data/locales/shi_Tfng.txt2
-rw-r--r--intl/icu/source/data/locales/shi_Tfng_MA.txt2
-rw-r--r--intl/icu/source/data/locales/si.txt2
-rw-r--r--intl/icu/source/data/locales/si_LK.txt2
-rw-r--r--intl/icu/source/data/locales/sk.txt2
-rw-r--r--intl/icu/source/data/locales/sk_SK.txt2
-rw-r--r--intl/icu/source/data/locales/sl.txt2
-rw-r--r--intl/icu/source/data/locales/sl_SI.txt2
-rw-r--r--intl/icu/source/data/locales/smn.txt2
-rw-r--r--intl/icu/source/data/locales/smn_FI.txt2
-rw-r--r--intl/icu/source/data/locales/sn.txt2
-rw-r--r--intl/icu/source/data/locales/sn_ZW.txt2
-rw-r--r--intl/icu/source/data/locales/so.txt2
-rw-r--r--intl/icu/source/data/locales/so_DJ.txt2
-rw-r--r--intl/icu/source/data/locales/so_ET.txt2
-rw-r--r--intl/icu/source/data/locales/so_KE.txt2
-rw-r--r--intl/icu/source/data/locales/so_SO.txt2
-rw-r--r--intl/icu/source/data/locales/sq.txt2
-rw-r--r--intl/icu/source/data/locales/sq_AL.txt2
-rw-r--r--intl/icu/source/data/locales/sq_MK.txt2
-rw-r--r--intl/icu/source/data/locales/sq_XK.txt2
-rw-r--r--intl/icu/source/data/locales/sr.txt3
-rw-r--r--intl/icu/source/data/locales/sr_BA.txt2
-rw-r--r--intl/icu/source/data/locales/sr_CS.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Cyrl.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Cyrl_BA.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Cyrl_CS.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Cyrl_ME.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Cyrl_RS.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Cyrl_XK.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Cyrl_YU.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Latn.txt3
-rw-r--r--intl/icu/source/data/locales/sr_Latn_BA.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Latn_CS.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Latn_ME.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Latn_RS.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Latn_XK.txt2
-rw-r--r--intl/icu/source/data/locales/sr_Latn_YU.txt2
-rw-r--r--intl/icu/source/data/locales/sr_ME.txt2
-rw-r--r--intl/icu/source/data/locales/sr_RS.txt2
-rw-r--r--intl/icu/source/data/locales/sr_XK.txt2
-rw-r--r--intl/icu/source/data/locales/sr_YU.txt2
-rw-r--r--intl/icu/source/data/locales/sv.txt3
-rw-r--r--intl/icu/source/data/locales/sv_AX.txt2
-rw-r--r--intl/icu/source/data/locales/sv_FI.txt2
-rw-r--r--intl/icu/source/data/locales/sv_SE.txt2
-rw-r--r--intl/icu/source/data/locales/sw.txt2
-rw-r--r--intl/icu/source/data/locales/sw_CD.txt2
-rw-r--r--intl/icu/source/data/locales/sw_KE.txt2
-rw-r--r--intl/icu/source/data/locales/sw_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/sw_UG.txt2
-rw-r--r--intl/icu/source/data/locales/ta.txt2
-rw-r--r--intl/icu/source/data/locales/ta_IN.txt2
-rw-r--r--intl/icu/source/data/locales/ta_LK.txt2
-rw-r--r--intl/icu/source/data/locales/ta_MY.txt2
-rw-r--r--intl/icu/source/data/locales/ta_SG.txt2
-rw-r--r--intl/icu/source/data/locales/te.txt2
-rw-r--r--intl/icu/source/data/locales/te_IN.txt2
-rw-r--r--intl/icu/source/data/locales/teo.txt2
-rw-r--r--intl/icu/source/data/locales/teo_KE.txt2
-rw-r--r--intl/icu/source/data/locales/teo_UG.txt2
-rw-r--r--intl/icu/source/data/locales/th.txt3
-rw-r--r--intl/icu/source/data/locales/th_TH.txt2
-rw-r--r--intl/icu/source/data/locales/th_TH_TRADITIONAL.txt2
-rw-r--r--intl/icu/source/data/locales/ti.txt2
-rw-r--r--intl/icu/source/data/locales/ti_ER.txt2
-rw-r--r--intl/icu/source/data/locales/ti_ET.txt2
-rw-r--r--intl/icu/source/data/locales/tl.txt2
-rw-r--r--intl/icu/source/data/locales/tl_PH.txt2
-rw-r--r--intl/icu/source/data/locales/to.txt2
-rw-r--r--intl/icu/source/data/locales/to_TO.txt2
-rw-r--r--intl/icu/source/data/locales/tr.txt2
-rw-r--r--intl/icu/source/data/locales/tr_CY.txt2
-rw-r--r--intl/icu/source/data/locales/tr_TR.txt2
-rw-r--r--intl/icu/source/data/locales/twq.txt2
-rw-r--r--intl/icu/source/data/locales/twq_NE.txt2
-rw-r--r--intl/icu/source/data/locales/tzm.txt2
-rw-r--r--intl/icu/source/data/locales/tzm_MA.txt2
-rw-r--r--intl/icu/source/data/locales/ug.txt2
-rw-r--r--intl/icu/source/data/locales/ug_CN.txt2
-rw-r--r--intl/icu/source/data/locales/uk.txt2
-rw-r--r--intl/icu/source/data/locales/uk_UA.txt2
-rw-r--r--intl/icu/source/data/locales/ur.txt2
-rw-r--r--intl/icu/source/data/locales/ur_IN.txt2
-rw-r--r--intl/icu/source/data/locales/ur_PK.txt2
-rw-r--r--intl/icu/source/data/locales/uz.txt2
-rw-r--r--intl/icu/source/data/locales/uz_AF.txt2
-rw-r--r--intl/icu/source/data/locales/uz_Arab.txt2
-rw-r--r--intl/icu/source/data/locales/uz_Arab_AF.txt2
-rw-r--r--intl/icu/source/data/locales/uz_Cyrl.txt2
-rw-r--r--intl/icu/source/data/locales/uz_Cyrl_UZ.txt2
-rw-r--r--intl/icu/source/data/locales/uz_Latn.txt2
-rw-r--r--intl/icu/source/data/locales/uz_Latn_UZ.txt2
-rw-r--r--intl/icu/source/data/locales/uz_UZ.txt2
-rw-r--r--intl/icu/source/data/locales/vai.txt2
-rw-r--r--intl/icu/source/data/locales/vai_LR.txt2
-rw-r--r--intl/icu/source/data/locales/vai_Latn.txt2
-rw-r--r--intl/icu/source/data/locales/vai_Latn_LR.txt2
-rw-r--r--intl/icu/source/data/locales/vai_Vaii.txt2
-rw-r--r--intl/icu/source/data/locales/vai_Vaii_LR.txt2
-rw-r--r--intl/icu/source/data/locales/vi.txt2
-rw-r--r--intl/icu/source/data/locales/vi_VN.txt2
-rw-r--r--intl/icu/source/data/locales/vun.txt2
-rw-r--r--intl/icu/source/data/locales/vun_TZ.txt2
-rw-r--r--intl/icu/source/data/locales/wae.txt2
-rw-r--r--intl/icu/source/data/locales/wae_CH.txt2
-rw-r--r--intl/icu/source/data/locales/xog.txt2
-rw-r--r--intl/icu/source/data/locales/xog_UG.txt2
-rw-r--r--intl/icu/source/data/locales/yav.txt2
-rw-r--r--intl/icu/source/data/locales/yav_CM.txt2
-rw-r--r--intl/icu/source/data/locales/yi.txt2
-rw-r--r--intl/icu/source/data/locales/yi_001.txt2
-rw-r--r--intl/icu/source/data/locales/yo.txt2
-rw-r--r--intl/icu/source/data/locales/yo_BJ.txt2
-rw-r--r--intl/icu/source/data/locales/yo_NG.txt2
-rw-r--r--intl/icu/source/data/locales/yue.txt3
-rw-r--r--intl/icu/source/data/locales/yue_HK.txt2
-rw-r--r--intl/icu/source/data/locales/zgh.txt2
-rw-r--r--intl/icu/source/data/locales/zgh_MA.txt2
-rw-r--r--intl/icu/source/data/locales/zh.txt4
-rw-r--r--intl/icu/source/data/locales/zh_CN.txt2
-rw-r--r--intl/icu/source/data/locales/zh_HK.txt2
-rw-r--r--intl/icu/source/data/locales/zh_Hans.txt2
-rw-r--r--intl/icu/source/data/locales/zh_Hans_CN.txt2
-rw-r--r--intl/icu/source/data/locales/zh_Hans_HK.txt2
-rw-r--r--intl/icu/source/data/locales/zh_Hans_MO.txt2
-rw-r--r--intl/icu/source/data/locales/zh_Hans_SG.txt2
-rw-r--r--intl/icu/source/data/locales/zh_Hant.txt3
-rw-r--r--intl/icu/source/data/locales/zh_Hant_HK.txt2
-rw-r--r--intl/icu/source/data/locales/zh_Hant_MO.txt2
-rw-r--r--intl/icu/source/data/locales/zh_Hant_TW.txt2
-rw-r--r--intl/icu/source/data/locales/zh_MO.txt2
-rw-r--r--intl/icu/source/data/locales/zh_SG.txt2
-rw-r--r--intl/icu/source/data/locales/zh_TW.txt2
-rw-r--r--intl/icu/source/data/locales/zu.txt2
-rw-r--r--intl/icu/source/data/locales/zu_ZA.txt2
-rw-r--r--intl/icu/source/data/makedata.vcxproj2
-rw-r--r--intl/icu/source/data/makedata.vcxproj.filters2
-rw-r--r--intl/icu/source/data/misc/currencyNumericCodes.txt2
-rw-r--r--intl/icu/source/data/misc/dayPeriods.txt2
-rw-r--r--intl/icu/source/data/misc/genderList.txt2
-rw-r--r--intl/icu/source/data/misc/icuver.txt4
-rw-r--r--intl/icu/source/data/misc/keyTypeData.txt2
-rw-r--r--intl/icu/source/data/misc/likelySubtags.txt2
-rw-r--r--intl/icu/source/data/misc/metaZones.txt96
-rw-r--r--intl/icu/source/data/misc/metadata.txt2
-rw-r--r--intl/icu/source/data/misc/numberingSystems.txt2
-rw-r--r--intl/icu/source/data/misc/plurals.txt2
-rw-r--r--intl/icu/source/data/misc/supplementalData.txt2
-rw-r--r--intl/icu/source/data/misc/timezoneTypes.txt22
-rw-r--r--intl/icu/source/data/misc/windowsZones.txt49
-rw-r--r--intl/icu/source/data/misc/zoneinfo64.txt2633
-rw-r--r--intl/icu/source/data/unidata/FractionalUCA.txt2
-rw-r--r--intl/icu/source/data/unidata/UCARules.txt2
-rw-r--r--intl/icu/source/data/unidata/changes.txt2
-rw-r--r--intl/icu/source/data/unidata/confusables.txt2
-rw-r--r--intl/icu/source/data/unidata/confusablesWholeScript.txt2
-rw-r--r--intl/icu/source/data/xml/brkitr/de.xml2
-rw-r--r--intl/icu/source/data/xml/brkitr/es.xml2
-rw-r--r--intl/icu/source/data/xml/brkitr/fr.xml2
-rw-r--r--intl/icu/source/data/xml/brkitr/it.xml2
-rw-r--r--intl/icu/source/data/xml/brkitr/pt.xml2
-rw-r--r--intl/icu/source/data/xml/brkitr/ru.xml2
-rw-r--r--intl/icu/source/data/zone/af.txt2
-rw-r--r--intl/icu/source/data/zone/agq.txt2
-rw-r--r--intl/icu/source/data/zone/ak.txt2
-rw-r--r--intl/icu/source/data/zone/am.txt2
-rw-r--r--intl/icu/source/data/zone/ar.txt2
-rw-r--r--intl/icu/source/data/zone/as.txt2
-rw-r--r--intl/icu/source/data/zone/asa.txt2
-rw-r--r--intl/icu/source/data/zone/ast.txt2
-rw-r--r--intl/icu/source/data/zone/az.txt2
-rw-r--r--intl/icu/source/data/zone/az_AZ.txt2
-rw-r--r--intl/icu/source/data/zone/az_Cyrl.txt2
-rw-r--r--intl/icu/source/data/zone/az_Latn.txt2
-rw-r--r--intl/icu/source/data/zone/az_Latn_AZ.txt2
-rw-r--r--intl/icu/source/data/zone/bas.txt2
-rw-r--r--intl/icu/source/data/zone/be.txt2
-rw-r--r--intl/icu/source/data/zone/bem.txt2
-rw-r--r--intl/icu/source/data/zone/bez.txt2
-rw-r--r--intl/icu/source/data/zone/bg.txt2
-rw-r--r--intl/icu/source/data/zone/bm.txt2
-rw-r--r--intl/icu/source/data/zone/bn.txt2
-rw-r--r--intl/icu/source/data/zone/bo.txt2
-rw-r--r--intl/icu/source/data/zone/br.txt2
-rw-r--r--intl/icu/source/data/zone/brx.txt2
-rw-r--r--intl/icu/source/data/zone/bs.txt2
-rw-r--r--intl/icu/source/data/zone/bs_BA.txt2
-rw-r--r--intl/icu/source/data/zone/bs_Cyrl.txt2
-rw-r--r--intl/icu/source/data/zone/bs_Latn.txt2
-rw-r--r--intl/icu/source/data/zone/bs_Latn_BA.txt2
-rw-r--r--intl/icu/source/data/zone/ca.txt2
-rw-r--r--intl/icu/source/data/zone/ce.txt2
-rw-r--r--intl/icu/source/data/zone/cgg.txt2
-rw-r--r--intl/icu/source/data/zone/chr.txt2
-rw-r--r--intl/icu/source/data/zone/ckb.txt2
-rw-r--r--intl/icu/source/data/zone/cs.txt2
-rw-r--r--intl/icu/source/data/zone/cy.txt2
-rw-r--r--intl/icu/source/data/zone/da.txt2
-rw-r--r--intl/icu/source/data/zone/dav.txt2
-rw-r--r--intl/icu/source/data/zone/de.txt2
-rw-r--r--intl/icu/source/data/zone/dje.txt2
-rw-r--r--intl/icu/source/data/zone/dsb.txt2
-rw-r--r--intl/icu/source/data/zone/dua.txt2
-rw-r--r--intl/icu/source/data/zone/dyo.txt2
-rw-r--r--intl/icu/source/data/zone/dz.txt2
-rw-r--r--intl/icu/source/data/zone/ebu.txt2
-rw-r--r--intl/icu/source/data/zone/ee.txt2
-rw-r--r--intl/icu/source/data/zone/el.txt2
-rw-r--r--intl/icu/source/data/zone/en.txt2
-rw-r--r--intl/icu/source/data/zone/en_001.txt2
-rw-r--r--intl/icu/source/data/zone/en_150.txt2
-rw-r--r--intl/icu/source/data/zone/en_AG.txt2
-rw-r--r--intl/icu/source/data/zone/en_AI.txt2
-rw-r--r--intl/icu/source/data/zone/en_AT.txt2
-rw-r--r--intl/icu/source/data/zone/en_AU.txt2
-rw-r--r--intl/icu/source/data/zone/en_BB.txt2
-rw-r--r--intl/icu/source/data/zone/en_BE.txt2
-rw-r--r--intl/icu/source/data/zone/en_BM.txt2
-rw-r--r--intl/icu/source/data/zone/en_BS.txt2
-rw-r--r--intl/icu/source/data/zone/en_BW.txt2
-rw-r--r--intl/icu/source/data/zone/en_BZ.txt2
-rw-r--r--intl/icu/source/data/zone/en_CA.txt2
-rw-r--r--intl/icu/source/data/zone/en_CC.txt2
-rw-r--r--intl/icu/source/data/zone/en_CH.txt2
-rw-r--r--intl/icu/source/data/zone/en_CK.txt2
-rw-r--r--intl/icu/source/data/zone/en_CM.txt2
-rw-r--r--intl/icu/source/data/zone/en_CX.txt2
-rw-r--r--intl/icu/source/data/zone/en_CY.txt2
-rw-r--r--intl/icu/source/data/zone/en_DE.txt2
-rw-r--r--intl/icu/source/data/zone/en_DG.txt2
-rw-r--r--intl/icu/source/data/zone/en_DK.txt2
-rw-r--r--intl/icu/source/data/zone/en_DM.txt2
-rw-r--r--intl/icu/source/data/zone/en_ER.txt2
-rw-r--r--intl/icu/source/data/zone/en_FI.txt2
-rw-r--r--intl/icu/source/data/zone/en_FJ.txt2
-rw-r--r--intl/icu/source/data/zone/en_FK.txt2
-rw-r--r--intl/icu/source/data/zone/en_FM.txt2
-rw-r--r--intl/icu/source/data/zone/en_GB.txt2
-rw-r--r--intl/icu/source/data/zone/en_GD.txt2
-rw-r--r--intl/icu/source/data/zone/en_GG.txt2
-rw-r--r--intl/icu/source/data/zone/en_GH.txt2
-rw-r--r--intl/icu/source/data/zone/en_GI.txt2
-rw-r--r--intl/icu/source/data/zone/en_GM.txt2
-rw-r--r--intl/icu/source/data/zone/en_GU.txt2
-rw-r--r--intl/icu/source/data/zone/en_GY.txt2
-rw-r--r--intl/icu/source/data/zone/en_HK.txt2
-rw-r--r--intl/icu/source/data/zone/en_IE.txt2
-rw-r--r--intl/icu/source/data/zone/en_IL.txt2
-rw-r--r--intl/icu/source/data/zone/en_IM.txt2
-rw-r--r--intl/icu/source/data/zone/en_IN.txt2
-rw-r--r--intl/icu/source/data/zone/en_IO.txt2
-rw-r--r--intl/icu/source/data/zone/en_JE.txt2
-rw-r--r--intl/icu/source/data/zone/en_JM.txt2
-rw-r--r--intl/icu/source/data/zone/en_KE.txt2
-rw-r--r--intl/icu/source/data/zone/en_KI.txt2
-rw-r--r--intl/icu/source/data/zone/en_KN.txt2
-rw-r--r--intl/icu/source/data/zone/en_KY.txt2
-rw-r--r--intl/icu/source/data/zone/en_LC.txt2
-rw-r--r--intl/icu/source/data/zone/en_LR.txt2
-rw-r--r--intl/icu/source/data/zone/en_LS.txt2
-rw-r--r--intl/icu/source/data/zone/en_MG.txt2
-rw-r--r--intl/icu/source/data/zone/en_MH.txt2
-rw-r--r--intl/icu/source/data/zone/en_MO.txt2
-rw-r--r--intl/icu/source/data/zone/en_MP.txt2
-rw-r--r--intl/icu/source/data/zone/en_MS.txt2
-rw-r--r--intl/icu/source/data/zone/en_MT.txt2
-rw-r--r--intl/icu/source/data/zone/en_MU.txt2
-rw-r--r--intl/icu/source/data/zone/en_MW.txt2
-rw-r--r--intl/icu/source/data/zone/en_MY.txt2
-rw-r--r--intl/icu/source/data/zone/en_NA.txt2
-rw-r--r--intl/icu/source/data/zone/en_NF.txt2
-rw-r--r--intl/icu/source/data/zone/en_NG.txt2
-rw-r--r--intl/icu/source/data/zone/en_NH.txt2
-rw-r--r--intl/icu/source/data/zone/en_NL.txt2
-rw-r--r--intl/icu/source/data/zone/en_NR.txt2
-rw-r--r--intl/icu/source/data/zone/en_NU.txt2
-rw-r--r--intl/icu/source/data/zone/en_NZ.txt2
-rw-r--r--intl/icu/source/data/zone/en_PG.txt2
-rw-r--r--intl/icu/source/data/zone/en_PH.txt2
-rw-r--r--intl/icu/source/data/zone/en_PK.txt2
-rw-r--r--intl/icu/source/data/zone/en_PN.txt2
-rw-r--r--intl/icu/source/data/zone/en_PW.txt2
-rw-r--r--intl/icu/source/data/zone/en_RH.txt2
-rw-r--r--intl/icu/source/data/zone/en_RW.txt2
-rw-r--r--intl/icu/source/data/zone/en_SB.txt2
-rw-r--r--intl/icu/source/data/zone/en_SC.txt2
-rw-r--r--intl/icu/source/data/zone/en_SD.txt2
-rw-r--r--intl/icu/source/data/zone/en_SE.txt2
-rw-r--r--intl/icu/source/data/zone/en_SG.txt2
-rw-r--r--intl/icu/source/data/zone/en_SH.txt2
-rw-r--r--intl/icu/source/data/zone/en_SI.txt2
-rw-r--r--intl/icu/source/data/zone/en_SL.txt2
-rw-r--r--intl/icu/source/data/zone/en_SS.txt2
-rw-r--r--intl/icu/source/data/zone/en_SX.txt2
-rw-r--r--intl/icu/source/data/zone/en_SZ.txt2
-rw-r--r--intl/icu/source/data/zone/en_TC.txt2
-rw-r--r--intl/icu/source/data/zone/en_TK.txt2
-rw-r--r--intl/icu/source/data/zone/en_TO.txt2
-rw-r--r--intl/icu/source/data/zone/en_TT.txt2
-rw-r--r--intl/icu/source/data/zone/en_TV.txt2
-rw-r--r--intl/icu/source/data/zone/en_TZ.txt2
-rw-r--r--intl/icu/source/data/zone/en_UG.txt2
-rw-r--r--intl/icu/source/data/zone/en_VC.txt2
-rw-r--r--intl/icu/source/data/zone/en_VG.txt2
-rw-r--r--intl/icu/source/data/zone/en_VU.txt2
-rw-r--r--intl/icu/source/data/zone/en_WS.txt2
-rw-r--r--intl/icu/source/data/zone/en_ZA.txt2
-rw-r--r--intl/icu/source/data/zone/en_ZM.txt2
-rw-r--r--intl/icu/source/data/zone/en_ZW.txt2
-rw-r--r--intl/icu/source/data/zone/eo.txt2
-rw-r--r--intl/icu/source/data/zone/es.txt2
-rw-r--r--intl/icu/source/data/zone/es_419.txt2
-rw-r--r--intl/icu/source/data/zone/es_AR.txt2
-rw-r--r--intl/icu/source/data/zone/es_BO.txt2
-rw-r--r--intl/icu/source/data/zone/es_BR.txt2
-rw-r--r--intl/icu/source/data/zone/es_CL.txt2
-rw-r--r--intl/icu/source/data/zone/es_CO.txt2
-rw-r--r--intl/icu/source/data/zone/es_CR.txt2
-rw-r--r--intl/icu/source/data/zone/es_CU.txt2
-rw-r--r--intl/icu/source/data/zone/es_DO.txt2
-rw-r--r--intl/icu/source/data/zone/es_EC.txt2
-rw-r--r--intl/icu/source/data/zone/es_GT.txt2
-rw-r--r--intl/icu/source/data/zone/es_HN.txt2
-rw-r--r--intl/icu/source/data/zone/es_MX.txt2
-rw-r--r--intl/icu/source/data/zone/es_NI.txt2
-rw-r--r--intl/icu/source/data/zone/es_PA.txt2
-rw-r--r--intl/icu/source/data/zone/es_PE.txt2
-rw-r--r--intl/icu/source/data/zone/es_PR.txt2
-rw-r--r--intl/icu/source/data/zone/es_PY.txt2
-rw-r--r--intl/icu/source/data/zone/es_SV.txt2
-rw-r--r--intl/icu/source/data/zone/es_US.txt2
-rw-r--r--intl/icu/source/data/zone/es_UY.txt2
-rw-r--r--intl/icu/source/data/zone/es_VE.txt2
-rw-r--r--intl/icu/source/data/zone/et.txt2
-rw-r--r--intl/icu/source/data/zone/eu.txt2
-rw-r--r--intl/icu/source/data/zone/ewo.txt2
-rw-r--r--intl/icu/source/data/zone/fa.txt2
-rw-r--r--intl/icu/source/data/zone/ff.txt2
-rw-r--r--intl/icu/source/data/zone/fi.txt2
-rw-r--r--intl/icu/source/data/zone/fil.txt2
-rw-r--r--intl/icu/source/data/zone/fil_PH.txt2
-rw-r--r--intl/icu/source/data/zone/fo.txt2
-rw-r--r--intl/icu/source/data/zone/fr.txt2
-rw-r--r--intl/icu/source/data/zone/fr_CA.txt2
-rw-r--r--intl/icu/source/data/zone/fr_GF.txt2
-rw-r--r--intl/icu/source/data/zone/fur.txt2
-rw-r--r--intl/icu/source/data/zone/fy.txt2
-rw-r--r--intl/icu/source/data/zone/ga.txt2
-rw-r--r--intl/icu/source/data/zone/gd.txt2
-rw-r--r--intl/icu/source/data/zone/gl.txt2
-rw-r--r--intl/icu/source/data/zone/gsw.txt2
-rw-r--r--intl/icu/source/data/zone/gu.txt2
-rw-r--r--intl/icu/source/data/zone/guz.txt2
-rw-r--r--intl/icu/source/data/zone/gv.txt2
-rw-r--r--intl/icu/source/data/zone/ha.txt2
-rw-r--r--intl/icu/source/data/zone/haw.txt2
-rw-r--r--intl/icu/source/data/zone/he.txt2
-rw-r--r--intl/icu/source/data/zone/he_IL.txt2
-rw-r--r--intl/icu/source/data/zone/hi.txt2
-rw-r--r--intl/icu/source/data/zone/hr.txt2
-rw-r--r--intl/icu/source/data/zone/hsb.txt2
-rw-r--r--intl/icu/source/data/zone/hu.txt2
-rw-r--r--intl/icu/source/data/zone/hy.txt2
-rw-r--r--intl/icu/source/data/zone/id.txt2
-rw-r--r--intl/icu/source/data/zone/id_ID.txt2
-rw-r--r--intl/icu/source/data/zone/ig.txt2
-rw-r--r--intl/icu/source/data/zone/ii.txt2
-rw-r--r--intl/icu/source/data/zone/in.txt2
-rw-r--r--intl/icu/source/data/zone/in_ID.txt2
-rw-r--r--intl/icu/source/data/zone/is.txt2
-rw-r--r--intl/icu/source/data/zone/it.txt2
-rw-r--r--intl/icu/source/data/zone/iw.txt2
-rw-r--r--intl/icu/source/data/zone/iw_IL.txt2
-rw-r--r--intl/icu/source/data/zone/ja.txt2
-rw-r--r--intl/icu/source/data/zone/ja_JP.txt2
-rw-r--r--intl/icu/source/data/zone/ja_JP_TRADITIONAL.txt2
-rw-r--r--intl/icu/source/data/zone/jgo.txt2
-rw-r--r--intl/icu/source/data/zone/jmc.txt2
-rw-r--r--intl/icu/source/data/zone/ka.txt2
-rw-r--r--intl/icu/source/data/zone/kab.txt2
-rw-r--r--intl/icu/source/data/zone/kam.txt2
-rw-r--r--intl/icu/source/data/zone/kde.txt2
-rw-r--r--intl/icu/source/data/zone/kea.txt2
-rw-r--r--intl/icu/source/data/zone/khq.txt2
-rw-r--r--intl/icu/source/data/zone/ki.txt2
-rw-r--r--intl/icu/source/data/zone/kk.txt2
-rw-r--r--intl/icu/source/data/zone/kkj.txt2
-rw-r--r--intl/icu/source/data/zone/kl.txt2
-rw-r--r--intl/icu/source/data/zone/kln.txt2
-rw-r--r--intl/icu/source/data/zone/km.txt2
-rw-r--r--intl/icu/source/data/zone/kn.txt2
-rw-r--r--intl/icu/source/data/zone/ko.txt2
-rw-r--r--intl/icu/source/data/zone/ko_KP.txt2
-rw-r--r--intl/icu/source/data/zone/kok.txt2
-rw-r--r--intl/icu/source/data/zone/ks.txt2
-rw-r--r--intl/icu/source/data/zone/ksb.txt2
-rw-r--r--intl/icu/source/data/zone/ksf.txt2
-rw-r--r--intl/icu/source/data/zone/ksh.txt2
-rw-r--r--intl/icu/source/data/zone/kw.txt2
-rw-r--r--intl/icu/source/data/zone/ky.txt2
-rw-r--r--intl/icu/source/data/zone/lag.txt2
-rw-r--r--intl/icu/source/data/zone/lb.txt2
-rw-r--r--intl/icu/source/data/zone/lg.txt2
-rw-r--r--intl/icu/source/data/zone/lkt.txt2
-rw-r--r--intl/icu/source/data/zone/ln.txt2
-rw-r--r--intl/icu/source/data/zone/lo.txt2
-rw-r--r--intl/icu/source/data/zone/lrc.txt2
-rw-r--r--intl/icu/source/data/zone/lt.txt2
-rw-r--r--intl/icu/source/data/zone/lu.txt2
-rw-r--r--intl/icu/source/data/zone/luo.txt2
-rw-r--r--intl/icu/source/data/zone/luy.txt2
-rw-r--r--intl/icu/source/data/zone/lv.txt2
-rw-r--r--intl/icu/source/data/zone/mas.txt2
-rw-r--r--intl/icu/source/data/zone/mer.txt2
-rw-r--r--intl/icu/source/data/zone/mfe.txt2
-rw-r--r--intl/icu/source/data/zone/mg.txt2
-rw-r--r--intl/icu/source/data/zone/mgh.txt2
-rw-r--r--intl/icu/source/data/zone/mgo.txt2
-rw-r--r--intl/icu/source/data/zone/mk.txt2
-rw-r--r--intl/icu/source/data/zone/ml.txt2
-rw-r--r--intl/icu/source/data/zone/mn.txt2
-rw-r--r--intl/icu/source/data/zone/mo.txt2
-rw-r--r--intl/icu/source/data/zone/mr.txt2
-rw-r--r--intl/icu/source/data/zone/ms.txt2
-rw-r--r--intl/icu/source/data/zone/mt.txt2
-rw-r--r--intl/icu/source/data/zone/mua.txt2
-rw-r--r--intl/icu/source/data/zone/my.txt2
-rw-r--r--intl/icu/source/data/zone/mzn.txt2
-rw-r--r--intl/icu/source/data/zone/naq.txt2
-rw-r--r--intl/icu/source/data/zone/nb.txt2
-rw-r--r--intl/icu/source/data/zone/nb_NO.txt2
-rw-r--r--intl/icu/source/data/zone/nd.txt2
-rw-r--r--intl/icu/source/data/zone/nds.txt2
-rw-r--r--intl/icu/source/data/zone/ne.txt2
-rw-r--r--intl/icu/source/data/zone/ne_IN.txt2
-rw-r--r--intl/icu/source/data/zone/nl.txt2
-rw-r--r--intl/icu/source/data/zone/nl_SR.txt2
-rw-r--r--intl/icu/source/data/zone/nmg.txt2
-rw-r--r--intl/icu/source/data/zone/nn.txt2
-rw-r--r--intl/icu/source/data/zone/nn_NO.txt2
-rw-r--r--intl/icu/source/data/zone/nnh.txt2
-rw-r--r--intl/icu/source/data/zone/no.txt2
-rw-r--r--intl/icu/source/data/zone/no_NO.txt2
-rw-r--r--intl/icu/source/data/zone/no_NO_NY.txt2
-rw-r--r--intl/icu/source/data/zone/nus.txt2
-rw-r--r--intl/icu/source/data/zone/nyn.txt2
-rw-r--r--intl/icu/source/data/zone/om.txt2
-rw-r--r--intl/icu/source/data/zone/or.txt2
-rw-r--r--intl/icu/source/data/zone/os.txt2
-rw-r--r--intl/icu/source/data/zone/pa.txt2
-rw-r--r--intl/icu/source/data/zone/pa_Arab.txt2
-rw-r--r--intl/icu/source/data/zone/pa_Arab_PK.txt2
-rw-r--r--intl/icu/source/data/zone/pa_Guru.txt2
-rw-r--r--intl/icu/source/data/zone/pa_Guru_IN.txt2
-rw-r--r--intl/icu/source/data/zone/pa_IN.txt2
-rw-r--r--intl/icu/source/data/zone/pa_PK.txt2
-rw-r--r--intl/icu/source/data/zone/pl.txt2
-rw-r--r--intl/icu/source/data/zone/ps.txt2
-rw-r--r--intl/icu/source/data/zone/pt.txt2
-rw-r--r--intl/icu/source/data/zone/pt_AO.txt2
-rw-r--r--intl/icu/source/data/zone/pt_CH.txt2
-rw-r--r--intl/icu/source/data/zone/pt_CV.txt2
-rw-r--r--intl/icu/source/data/zone/pt_GQ.txt2
-rw-r--r--intl/icu/source/data/zone/pt_GW.txt2
-rw-r--r--intl/icu/source/data/zone/pt_LU.txt2
-rw-r--r--intl/icu/source/data/zone/pt_MO.txt2
-rw-r--r--intl/icu/source/data/zone/pt_MZ.txt2
-rw-r--r--intl/icu/source/data/zone/pt_PT.txt2
-rw-r--r--intl/icu/source/data/zone/pt_ST.txt2
-rw-r--r--intl/icu/source/data/zone/pt_TL.txt2
-rw-r--r--intl/icu/source/data/zone/qu.txt2
-rw-r--r--intl/icu/source/data/zone/qu_BO.txt2
-rw-r--r--intl/icu/source/data/zone/qu_EC.txt2
-rw-r--r--intl/icu/source/data/zone/rm.txt2
-rw-r--r--intl/icu/source/data/zone/rn.txt2
-rw-r--r--intl/icu/source/data/zone/ro.txt2
-rw-r--r--intl/icu/source/data/zone/ro_MD.txt2
-rw-r--r--intl/icu/source/data/zone/rof.txt2
-rw-r--r--intl/icu/source/data/zone/root.txt2
-rw-r--r--intl/icu/source/data/zone/ru.txt2
-rw-r--r--intl/icu/source/data/zone/rw.txt2
-rw-r--r--intl/icu/source/data/zone/rwk.txt2
-rw-r--r--intl/icu/source/data/zone/sah.txt2
-rw-r--r--intl/icu/source/data/zone/saq.txt2
-rw-r--r--intl/icu/source/data/zone/sbp.txt2
-rw-r--r--intl/icu/source/data/zone/se.txt2
-rw-r--r--intl/icu/source/data/zone/seh.txt2
-rw-r--r--intl/icu/source/data/zone/ses.txt2
-rw-r--r--intl/icu/source/data/zone/sg.txt2
-rw-r--r--intl/icu/source/data/zone/sh.txt2
-rw-r--r--intl/icu/source/data/zone/sh_BA.txt2
-rw-r--r--intl/icu/source/data/zone/sh_CS.txt2
-rw-r--r--intl/icu/source/data/zone/sh_YU.txt2
-rw-r--r--intl/icu/source/data/zone/shi.txt2
-rw-r--r--intl/icu/source/data/zone/shi_Latn.txt2
-rw-r--r--intl/icu/source/data/zone/shi_MA.txt2
-rw-r--r--intl/icu/source/data/zone/shi_Tfng.txt2
-rw-r--r--intl/icu/source/data/zone/shi_Tfng_MA.txt2
-rw-r--r--intl/icu/source/data/zone/si.txt2
-rw-r--r--intl/icu/source/data/zone/sk.txt2
-rw-r--r--intl/icu/source/data/zone/sl.txt2
-rw-r--r--intl/icu/source/data/zone/smn.txt2
-rw-r--r--intl/icu/source/data/zone/sn.txt2
-rw-r--r--intl/icu/source/data/zone/so.txt2
-rw-r--r--intl/icu/source/data/zone/sq.txt2
-rw-r--r--intl/icu/source/data/zone/sr.txt2
-rw-r--r--intl/icu/source/data/zone/sr_BA.txt2
-rw-r--r--intl/icu/source/data/zone/sr_CS.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Cyrl.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Cyrl_BA.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Cyrl_CS.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Cyrl_RS.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Cyrl_XK.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Cyrl_YU.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Latn.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Latn_BA.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Latn_CS.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Latn_ME.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Latn_RS.txt2
-rw-r--r--intl/icu/source/data/zone/sr_Latn_YU.txt2
-rw-r--r--intl/icu/source/data/zone/sr_ME.txt2
-rw-r--r--intl/icu/source/data/zone/sr_RS.txt2
-rw-r--r--intl/icu/source/data/zone/sr_XK.txt2
-rw-r--r--intl/icu/source/data/zone/sr_YU.txt2
-rw-r--r--intl/icu/source/data/zone/sv.txt2
-rw-r--r--intl/icu/source/data/zone/sw.txt2
-rw-r--r--intl/icu/source/data/zone/ta.txt2
-rw-r--r--intl/icu/source/data/zone/ta_MY.txt2
-rw-r--r--intl/icu/source/data/zone/ta_SG.txt2
-rw-r--r--intl/icu/source/data/zone/te.txt2
-rw-r--r--intl/icu/source/data/zone/teo.txt2
-rw-r--r--intl/icu/source/data/zone/th.txt2
-rw-r--r--intl/icu/source/data/zone/th_TH.txt2
-rw-r--r--intl/icu/source/data/zone/th_TH_TRADITIONAL.txt2
-rw-r--r--intl/icu/source/data/zone/ti.txt2
-rw-r--r--intl/icu/source/data/zone/tl.txt2
-rw-r--r--intl/icu/source/data/zone/tl_PH.txt2
-rw-r--r--intl/icu/source/data/zone/to.txt2
-rw-r--r--intl/icu/source/data/zone/tr.txt2
-rw-r--r--intl/icu/source/data/zone/twq.txt2
-rw-r--r--intl/icu/source/data/zone/tzm.txt2
-rw-r--r--intl/icu/source/data/zone/ug.txt2
-rw-r--r--intl/icu/source/data/zone/uk.txt2
-rw-r--r--intl/icu/source/data/zone/ur.txt2
-rw-r--r--intl/icu/source/data/zone/ur_IN.txt2
-rw-r--r--intl/icu/source/data/zone/uz.txt2
-rw-r--r--intl/icu/source/data/zone/uz_AF.txt2
-rw-r--r--intl/icu/source/data/zone/uz_Arab.txt2
-rw-r--r--intl/icu/source/data/zone/uz_Arab_AF.txt2
-rw-r--r--intl/icu/source/data/zone/uz_Cyrl.txt2
-rw-r--r--intl/icu/source/data/zone/uz_Latn.txt2
-rw-r--r--intl/icu/source/data/zone/uz_Latn_UZ.txt2
-rw-r--r--intl/icu/source/data/zone/uz_UZ.txt2
-rw-r--r--intl/icu/source/data/zone/vai.txt2
-rw-r--r--intl/icu/source/data/zone/vai_LR.txt2
-rw-r--r--intl/icu/source/data/zone/vai_Latn.txt2
-rw-r--r--intl/icu/source/data/zone/vai_Vaii.txt2
-rw-r--r--intl/icu/source/data/zone/vai_Vaii_LR.txt2
-rw-r--r--intl/icu/source/data/zone/vi.txt2
-rw-r--r--intl/icu/source/data/zone/vun.txt2
-rw-r--r--intl/icu/source/data/zone/wae.txt2
-rw-r--r--intl/icu/source/data/zone/xog.txt2
-rw-r--r--intl/icu/source/data/zone/yav.txt2
-rw-r--r--intl/icu/source/data/zone/yi.txt2
-rw-r--r--intl/icu/source/data/zone/yo.txt2
-rw-r--r--intl/icu/source/data/zone/yue.txt2
-rw-r--r--intl/icu/source/data/zone/zgh.txt2
-rw-r--r--intl/icu/source/data/zone/zh.txt2
-rw-r--r--intl/icu/source/data/zone/zh_CN.txt2
-rw-r--r--intl/icu/source/data/zone/zh_HK.txt2
-rw-r--r--intl/icu/source/data/zone/zh_Hans.txt2
-rw-r--r--intl/icu/source/data/zone/zh_Hans_CN.txt2
-rw-r--r--intl/icu/source/data/zone/zh_Hans_SG.txt2
-rw-r--r--intl/icu/source/data/zone/zh_Hant.txt2
-rw-r--r--intl/icu/source/data/zone/zh_Hant_HK.txt2
-rw-r--r--intl/icu/source/data/zone/zh_Hant_MO.txt2
-rw-r--r--intl/icu/source/data/zone/zh_Hant_TW.txt2
-rw-r--r--intl/icu/source/data/zone/zh_MO.txt2
-rw-r--r--intl/icu/source/data/zone/zh_SG.txt2
-rw-r--r--intl/icu/source/data/zone/zh_TW.txt2
-rw-r--r--intl/icu/source/data/zone/zu.txt2
-rw-r--r--intl/icu/source/extra/uconv/resources/fr.txt2
-rw-r--r--intl/icu/source/extra/uconv/resources/root.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/armenian.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/banviet.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/croat.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/danish.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/greek.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/hangul.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/hania.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/jap.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/korean.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/linji.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/many.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/maopoem.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/russian.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/simplechinese.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/turkish.txt2
-rw-r--r--intl/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt2
-rw-r--r--intl/icu/source/extra/uconv/uconv.vcxproj2
-rw-r--r--intl/icu/source/extra/uconv/uconv.vcxproj.filters2
-rw-r--r--intl/icu/source/i18n/i18n.vcxproj2
-rw-r--r--intl/icu/source/i18n/i18n.vcxproj.filters2
-rw-r--r--intl/icu/source/i18n/japancal.cpp3
-rw-r--r--intl/icu/source/i18n/zonemeta.cpp1
-rw-r--r--intl/icu/source/io/io.vcxproj2
-rw-r--r--intl/icu/source/io/io.vcxproj.filters2
-rw-r--r--intl/icu/source/stubdata/stubdata.vcxproj2
-rw-r--r--intl/icu/source/stubdata/stubdata.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/ctestfw/ctestfw.vcxproj2
-rw-r--r--intl/icu/source/tools/ctestfw/ctestfw.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/genbrk/genbrk.vcxproj2
-rw-r--r--intl/icu/source/tools/genbrk/genbrk.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/genccode/genccode.vcxproj2
-rw-r--r--intl/icu/source/tools/genccode/genccode.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/gencfu/gencfu.vcxproj2
-rw-r--r--intl/icu/source/tools/gencfu/gencfu.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/gencmn/gencmn.vcxproj2
-rw-r--r--intl/icu/source/tools/gencmn/gencmn.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/gencnval/gencnval.vcxproj2
-rw-r--r--intl/icu/source/tools/gencnval/gencnval.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/gendict/gendict.vcxproj2
-rw-r--r--intl/icu/source/tools/gendict/gendict.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/gennorm2/gennorm2.vcxproj2
-rw-r--r--intl/icu/source/tools/genrb/derb.vcxproj2
-rw-r--r--intl/icu/source/tools/genrb/derb.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/genrb/genrb.vcxproj2
-rw-r--r--intl/icu/source/tools/genrb/genrb.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/gensprep/gensprep.vcxproj2
-rw-r--r--intl/icu/source/tools/gensprep/gensprep.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/gentest/gentest.vcxproj2
-rw-r--r--intl/icu/source/tools/gentest/gentest.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/icuinfo/icuinfo.vcxproj2
-rw-r--r--intl/icu/source/tools/icuinfo/testplug.vcxproj2
-rw-r--r--intl/icu/source/tools/icuinfo/testplug.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/icupkg/icupkg.vcxproj2
-rw-r--r--intl/icu/source/tools/icuswap/icuswap.vcxproj2
-rw-r--r--intl/icu/source/tools/makeconv/makeconv.vcxproj2
-rw-r--r--intl/icu/source/tools/makeconv/makeconv.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/pkgdata/pkgdata.vcxproj2
-rw-r--r--intl/icu/source/tools/pkgdata/pkgdata.vcxproj.filters2
-rw-r--r--intl/icu/source/tools/toolutil/toolutil.vcxproj2
-rw-r--r--intl/icu/source/tools/tzcode/icuzdump.vcxproj2
-rw-r--r--intl/icu/source/tools/tzcode/icuzdump.vcxproj.filters2
-rw-r--r--intl/patch-icu.sh30
-rw-r--r--intl/tzdata/GIT-INFO5
-rw-r--r--intl/tzdata/SVN-INFO10
-rw-r--r--intl/tzdata/VERSION1
-rw-r--r--intl/tzdata/source/be/metaZones.resbin41232 -> 41488 bytes
-rw-r--r--intl/tzdata/source/be/timezoneTypes.resbin20032 -> 20064 bytes
-rw-r--r--intl/tzdata/source/be/windowsZones.resbin22400 -> 22496 bytes
-rw-r--r--intl/tzdata/source/be/zoneinfo64.resbin152432 -> 154224 bytes
-rw-r--r--intl/tzdata/source/ee/metaZones.resbin41232 -> 41488 bytes
-rw-r--r--intl/tzdata/source/ee/timezoneTypes.resbin20032 -> 20064 bytes
-rw-r--r--intl/tzdata/source/ee/windowsZones.resbin22400 -> 22496 bytes
-rw-r--r--intl/tzdata/source/ee/zoneinfo64.resbin152432 -> 154224 bytes
-rw-r--r--intl/tzdata/source/le/metaZones.resbin41232 -> 41488 bytes
-rw-r--r--intl/tzdata/source/le/timezoneTypes.resbin20032 -> 20064 bytes
-rw-r--r--intl/tzdata/source/le/windowsZones.resbin22400 -> 22496 bytes
-rw-r--r--intl/tzdata/source/le/zoneinfo64.resbin152432 -> 154224 bytes
-rw-r--r--intl/tzdata/source/metaZones.txt46
-rw-r--r--intl/tzdata/source/timezoneTypes.txt1
-rw-r--r--intl/tzdata/source/windowsZones.txt18
-rw-r--r--intl/tzdata/source/zoneinfo64.txt1892
-rwxr-xr-xintl/update-icu.sh43
-rwxr-xr-xintl/update-tzdata.sh40
-rw-r--r--js/ipc/JavaScriptParent.cpp1
-rw-r--r--js/public/CallArgs.h22
-rw-r--r--js/src/builtin/AtomicsObject.cpp25
-rw-r--r--js/src/builtin/AtomicsObject.h26
-rw-r--r--js/src/builtin/Intl.cpp31
-rw-r--r--js/src/builtin/IntlTimeZoneData.h2
-rw-r--r--js/src/builtin/MapObject.cpp4
-rw-r--r--js/src/builtin/ModuleObject.cpp10
-rw-r--r--js/src/builtin/ModuleObject.h2
-rw-r--r--js/src/builtin/Object.cpp18
-rw-r--r--js/src/builtin/Object.h3
-rw-r--r--js/src/builtin/Object.js6
-rw-r--r--js/src/builtin/Promise.cpp129
-rw-r--r--js/src/builtin/Promise.h8
-rw-r--r--js/src/builtin/Reflect.cpp3
-rw-r--r--js/src/builtin/ReflectParse.cpp31
-rw-r--r--js/src/builtin/RegExp.cpp18
-rw-r--r--js/src/builtin/RegExp.h2
-rw-r--r--js/src/builtin/SIMD.cpp22
-rw-r--r--js/src/builtin/SymbolObject.cpp8
-rw-r--r--js/src/builtin/TestingFunctions.cpp39
-rw-r--r--js/src/builtin/TypedObject.cpp19
-rw-r--r--js/src/builtin/Utilities.js63
-rw-r--r--js/src/builtin/WeakMapObject.cpp6
-rw-r--r--js/src/builtin/WeakSetObject.cpp7
-rw-r--r--js/src/builtin/WeakSetObject.h2
-rw-r--r--js/src/frontend/BytecodeCompiler.cpp25
-rw-r--r--js/src/frontend/BytecodeEmitter.cpp436
-rw-r--r--js/src/frontend/BytecodeEmitter.h38
-rw-r--r--js/src/frontend/FoldConstants.cpp11
-rw-r--r--js/src/frontend/FullParseHandler.h51
-rw-r--r--js/src/frontend/GenerateReservedWords.py213
-rw-r--r--js/src/frontend/NameAnalysisTypes.h14
-rw-r--r--js/src/frontend/NameFunctions.cpp6
-rw-r--r--js/src/frontend/ParseNode.cpp2
-rw-r--r--js/src/frontend/ParseNode.h23
-rw-r--r--js/src/frontend/Parser.cpp3145
-rw-r--r--js/src/frontend/Parser.h477
-rw-r--r--js/src/frontend/ReservedWords.h (renamed from js/src/vm/Keywords.h)49
-rw-r--r--js/src/frontend/SharedContext.h22
-rw-r--r--js/src/frontend/SourceNotes.h3
-rw-r--r--js/src/frontend/SyntaxParseHandler.h53
-rw-r--r--js/src/frontend/TokenKind.h99
-rw-r--r--js/src/frontend/TokenStream.cpp478
-rw-r--r--js/src/frontend/TokenStream.h254
-rw-r--r--js/src/gc/Marking.cpp2
-rw-r--r--js/src/irregexp/RegExpParser.cpp6
-rw-r--r--js/src/irregexp/RegExpParser.h2
-rw-r--r--js/src/jit-test/modules/export-default-async-asi.js2
-rw-r--r--js/src/jit-test/tests/asm.js/import-function-toPrimitive.js26
-rw-r--r--js/src/jit-test/tests/baseline/bug1344334.js14
-rw-r--r--js/src/jit-test/tests/basic/bug713226.js2
-rw-r--r--js/src/jit-test/tests/basic/hasnativemethodpure-optimization.js21
-rw-r--r--js/src/jit-test/tests/basic/testFunctionStatementAliasLocals.js4
-rw-r--r--js/src/jit-test/tests/basic/unboxed-object-clear-new-script.js49
-rw-r--r--js/src/jit-test/tests/basic/unboxed-object-convert-to-native.js47
-rw-r--r--js/src/jit-test/tests/basic/unboxed-object-getelem.js20
-rw-r--r--js/src/jit-test/tests/basic/unboxed-object-set-property.js31
-rw-r--r--js/src/jit-test/tests/basic/unboxed-property-enumeration.js24
-rw-r--r--js/src/jit-test/tests/class/bug1357506.js8
-rw-r--r--js/src/jit-test/tests/class/bug1359622.js4
-rw-r--r--js/src/jit-test/tests/debug/wasm-12.js26
-rw-r--r--js/src/jit-test/tests/ion/unboxed-objects-invalidate.js16
-rw-r--r--js/src/jit-test/tests/modules/export-declaration.js44
-rw-r--r--js/src/jit-test/tests/modules/function-redeclaration.js94
-rw-r--r--js/src/jit-test/tests/parser/arrow-rest.js6
-rw-r--r--js/src/jit-test/tests/parser/missing-closing-brace.js90
-rw-r--r--js/src/jit-test/tests/parser/redeclaration.js230
-rw-r--r--js/src/jit-test/tests/profiler/AutoEntryMonitor-01.js2
-rw-r--r--js/src/jit/AliasAnalysisShared.cpp4
-rw-r--r--js/src/jit/BaselineCacheIR.cpp68
-rw-r--r--js/src/jit/BaselineCompiler.cpp18
-rw-r--r--js/src/jit/BaselineCompiler.h2
-rw-r--r--js/src/jit/BaselineIC.cpp540
-rw-r--r--js/src/jit/BaselineIC.h90
-rw-r--r--js/src/jit/BaselineInspector.cpp48
-rw-r--r--js/src/jit/BaselineInspector.h2
-rw-r--r--js/src/jit/BaselineJIT.cpp2
-rw-r--r--js/src/jit/CacheIR.cpp79
-rw-r--r--js/src/jit/CacheIR.h25
-rw-r--r--js/src/jit/CodeGenerator.cpp454
-rw-r--r--js/src/jit/CodeGenerator.h9
-rw-r--r--js/src/jit/InlinableNatives.h1
-rw-r--r--js/src/jit/Ion.cpp2
-rw-r--r--js/src/jit/IonAnalysis.cpp6
-rw-r--r--js/src/jit/IonAnalysis.h2
-rw-r--r--js/src/jit/IonBuilder.cpp435
-rw-r--r--js/src/jit/IonBuilder.h43
-rw-r--r--js/src/jit/IonCaches.cpp473
-rw-r--r--js/src/jit/IonCaches.h12
-rw-r--r--js/src/jit/JitOptions.cpp3
-rw-r--r--js/src/jit/JitOptions.h3
-rw-r--r--js/src/jit/Lowering.cpp56
-rw-r--r--js/src/jit/Lowering.h5
-rw-r--r--js/src/jit/MCallOptimize.cpp147
-rw-r--r--js/src/jit/MIR.cpp101
-rw-r--r--js/src/jit/MIR.h257
-rw-r--r--js/src/jit/MOpcodes.h5
-rw-r--r--js/src/jit/MacroAssembler.cpp309
-rw-r--r--js/src/jit/MacroAssembler.h17
-rw-r--r--js/src/jit/OptimizationTracking.cpp4
-rw-r--r--js/src/jit/Recover.cpp38
-rw-r--r--js/src/jit/ScalarReplacement.cpp38
-rw-r--r--js/src/jit/SharedIC.cpp39
-rw-r--r--js/src/jit/VMFunctions.cpp51
-rw-r--r--js/src/jit/VMFunctions.h13
-rw-r--r--js/src/jit/arm64/Architecture-arm64.h10
-rw-r--r--js/src/jit/shared/LIR-shared.h121
-rw-r--r--js/src/jit/shared/LOpcodes-shared.h5
-rw-r--r--js/src/js.msg9
-rw-r--r--js/src/jsapi-tests/moz.build1
-rw-r--r--js/src/jsapi-tests/testFunctionBinding.cpp58
-rw-r--r--js/src/jsapi-tests/testUbiNode.cpp2
-rw-r--r--js/src/jsapi.cpp181
-rw-r--r--js/src/jsapi.h183
-rw-r--r--js/src/jsarray.cpp577
-rw-r--r--js/src/jsarray.h50
-rw-r--r--js/src/jsatom.cpp32
-rw-r--r--js/src/jsatom.h35
-rw-r--r--js/src/jsbool.cpp6
-rw-r--r--js/src/jscntxt.cpp227
-rw-r--r--js/src/jscntxt.h10
-rw-r--r--js/src/jscompartment.cpp15
-rw-r--r--js/src/jscompartment.h3
-rwxr-xr-xjs/src/jsdate.cpp2
-rw-r--r--js/src/jsexn.cpp126
-rw-r--r--js/src/jsexn.h6
-rw-r--r--js/src/jsfriendapi.cpp6
-rw-r--r--js/src/jsfriendapi.h6
-rw-r--r--js/src/jsfun.cpp207
-rw-r--r--js/src/jsfun.h38
-rw-r--r--js/src/jsfuninlines.h2
-rw-r--r--js/src/jsiter.cpp22
-rw-r--r--js/src/jsmath.cpp3
-rw-r--r--js/src/jsnum.cpp7
-rw-r--r--js/src/jsobj.cpp190
-rw-r--r--js/src/jsobj.h49
-rw-r--r--js/src/jsobjinlines.h76
-rw-r--r--js/src/json.cpp4
-rw-r--r--js/src/jsopcode.cpp15
-rw-r--r--js/src/jsscript.cpp100
-rw-r--r--js/src/jsscript.h102
-rw-r--r--js/src/jsscriptinlines.h12
-rw-r--r--js/src/jsstr.cpp31
-rw-r--r--js/src/jsstr.h2
-rw-r--r--js/src/jswatchpoint.cpp2
-rw-r--r--js/src/jswrapper.h2
-rw-r--r--js/src/moz.build11
-rw-r--r--js/src/proxy/CrossCompartmentWrapper.cpp4
-rw-r--r--js/src/proxy/Proxy.cpp6
-rw-r--r--js/src/proxy/Wrapper.cpp4
-rw-r--r--js/src/shell/js.cpp34
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js5
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js2
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js2
-rw-r--r--js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js2
-rw-r--r--js/src/tests/ecma_2017/AsyncFunctions/await-error.js16
-rw-r--r--js/src/tests/ecma_2017/AsyncFunctions/await-in-arrow-parameters.js94
-rw-r--r--js/src/tests/ecma_2017/AsyncFunctions/forbidden-as-consequent.js14
-rw-r--r--js/src/tests/ecma_2017/AsyncFunctions/inner-caller.js26
-rw-r--r--js/src/tests/ecma_6/Class/parenExprToString.js8
-rw-r--r--js/src/tests/ecma_6/Comprehensions/for-reserved-word.js107
-rw-r--r--js/src/tests/ecma_6/Function/constructor-binding.js11
-rw-r--r--js/src/tests/ecma_6/Function/throw-type-error.js16
-rw-r--r--js/src/tests/ecma_6/Generators/forbidden-as-consequent.js11
-rw-r--r--js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-parameter.js21
-rw-r--r--js/src/tests/ecma_6/TemplateStrings/tagTempl.js171
-rw-r--r--js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js43
-rw-r--r--js/src/tests/ecma_7/AsyncFunctions/async-contains-unicode-escape.js54
-rw-r--r--js/src/tests/js1_8/regress/regress-467495-05.js2
-rw-r--r--js/src/tests/js1_8/regress/regress-467495-06.js2
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/object-rest.js45
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/object-spread.js29
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/templateStrings.js2
-rw-r--r--js/src/tests/shell/futex.js8
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js27
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-1.js17
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-2.js19
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-3.js19
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-4.js19
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-1.js19
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-2.js24
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-3.js25
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-4.js25
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-1.js24
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-2.js25
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-3.js28
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-4.js25
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-5.js26
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-1.js21
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-2.js26
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-3.js27
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-4.js26
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-1.js25
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-2.js26
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-3.js25
-rwxr-xr-xjs/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-4.js26
-rw-r--r--js/src/tests/test262/language/arguments-object/mapped/shell.js (renamed from devtools/client/webide/test/build_app2/stage/empty-directory)0
-rw-r--r--js/src/tests/test262/language/arguments-object/shell.js (renamed from devtools/client/webide/test/build_app_windows2/stage/empty-directory)0
-rw-r--r--js/src/tests/test262/language/shell.js (renamed from devtools/client/webide/test/validator/no-name-or-icon/home.html)0
-rw-r--r--js/src/tests/test262/shell.js28
-rw-r--r--js/src/vm/ArgumentsObject.cpp72
-rw-r--r--js/src/vm/ArgumentsObject.h3
-rw-r--r--js/src/vm/ArrayBufferObject.cpp4
-rw-r--r--js/src/vm/AsyncFunction.cpp2
-rw-r--r--js/src/vm/CommonPropertyNames.h38
-rw-r--r--js/src/vm/Debugger.cpp58
-rw-r--r--js/src/vm/Debugger.h3
-rw-r--r--js/src/vm/EnvironmentObject.cpp35
-rw-r--r--js/src/vm/EnvironmentObject.h3
-rw-r--r--js/src/vm/ErrorObject.cpp8
-rw-r--r--js/src/vm/ErrorReporting.cpp124
-rw-r--r--js/src/vm/ErrorReporting.h91
-rw-r--r--js/src/vm/GeneratorObject.cpp14
-rw-r--r--js/src/vm/GlobalObject.cpp46
-rw-r--r--js/src/vm/GlobalObject.h241
-rw-r--r--js/src/vm/HelperThreads.cpp2
-rw-r--r--js/src/vm/Interpreter-inl.h4
-rw-r--r--js/src/vm/Interpreter.cpp71
-rw-r--r--js/src/vm/JSONParser.cpp4
-rw-r--r--js/src/vm/NativeObject-inl.h32
-rw-r--r--js/src/vm/NativeObject.cpp56
-rw-r--r--js/src/vm/NativeObject.h63
-rw-r--r--js/src/vm/ObjectGroup-inl.h14
-rw-r--r--js/src/vm/ObjectGroup.cpp189
-rw-r--r--js/src/vm/ObjectGroup.h72
-rw-r--r--js/src/vm/Opcodes.h25
-rw-r--r--js/src/vm/ProxyObject.h2
-rw-r--r--js/src/vm/ReceiverGuard.cpp18
-rw-r--r--js/src/vm/RegExpObject.cpp34
-rw-r--r--js/src/vm/RegExpObject.h11
-rw-r--r--js/src/vm/Runtime.cpp2
-rw-r--r--js/src/vm/Scope.cpp8
-rw-r--r--js/src/vm/Scope.h11
-rw-r--r--js/src/vm/SelfHosting.cpp6
-rw-r--r--js/src/vm/Shape.cpp166
-rw-r--r--js/src/vm/Shape.h3
-rw-r--r--js/src/vm/SharedArrayObject.cpp3
-rw-r--r--js/src/vm/Stack-inl.h6
-rw-r--r--js/src/vm/Stack.cpp2
-rw-r--r--js/src/vm/Stack.h13
-rw-r--r--js/src/vm/StringObject-inl.h18
-rw-r--r--js/src/vm/StringObject.h2
-rw-r--r--js/src/vm/TypeInference-inl.h5
-rw-r--r--js/src/vm/TypeInference.cpp180
-rw-r--r--js/src/vm/TypeInference.h4
-rw-r--r--js/src/vm/TypedArrayObject.cpp11
-rw-r--r--js/src/vm/UnboxedObject-inl.h840
-rw-r--r--js/src/vm/UnboxedObject.cpp1752
-rw-r--r--js/src/vm/UnboxedObject.h524
-rw-r--r--js/src/wasm/AsmJS.cpp40
-rw-r--r--js/src/wasm/WasmJS.cpp14
-rw-r--r--js/xpconnect/idl/moz.build1
-rw-r--r--js/xpconnect/src/XPCComponents.cpp2
-rw-r--r--js/xpconnect/src/XPCConvert.cpp2
-rw-r--r--js/xpconnect/src/XPCModule.h4
-rw-r--r--js/xpconnect/src/XPCWrappedJSClass.cpp1
-rw-r--r--js/xpconnect/src/XPCWrappedNativeInfo.cpp1
-rw-r--r--js/xpconnect/src/moz.build3
-rw-r--r--js/xpconnect/src/nsXPConnect.cpp142
-rw-r--r--js/xpconnect/src/xpcprivate.h72
-rw-r--r--js/xpconnect/src/xpcpublic.h58
-rw-r--r--js/xpconnect/tests/chrome/test_bug1041626.xul3
-rw-r--r--js/xpconnect/wrappers/WrapperFactory.cpp2
-rw-r--r--layout/base/ActiveLayerTracker.cpp15
-rw-r--r--layout/base/FrameLayerBuilder.cpp41
-rw-r--r--layout/base/FrameProperties.h (renamed from layout/base/FramePropertyTable.h)298
-rw-r--r--layout/base/FramePropertyTable.cpp239
-rw-r--r--layout/base/OverflowChangedTracker.h4
-rw-r--r--layout/base/RestyleManager.cpp10
-rw-r--r--layout/base/RestyleManagerBase.cpp88
-rw-r--r--layout/base/RestyleManagerBase.h13
-rw-r--r--layout/base/moz.build3
-rw-r--r--layout/base/nsBidiPresUtils.cpp5
-rw-r--r--layout/base/nsCSSFrameConstructor.cpp23
-rw-r--r--layout/base/nsCSSRendering.cpp10
-rw-r--r--layout/base/nsDisplayList.cpp49
-rw-r--r--layout/base/nsDisplayList.h2
-rw-r--r--layout/base/nsIPresShell.h11
-rw-r--r--layout/base/nsLayoutUtils.cpp16
-rw-r--r--layout/base/nsPresContext.cpp3
-rw-r--r--layout/base/nsPresContext.h11
-rw-r--r--layout/base/nsPresShell.cpp47
-rw-r--r--layout/base/nsPresShell.h15
-rw-r--r--layout/build/moz.build1
-rw-r--r--layout/build/nsLayoutModule.cpp9
-rw-r--r--layout/forms/nsTextControlFrame.cpp14
-rw-r--r--layout/forms/nsTextControlFrame.h2
-rw-r--r--layout/generic/ReflowInput.cpp36
-rw-r--r--layout/generic/RubyUtils.cpp6
-rw-r--r--layout/generic/StickyScrollContainer.cpp26
-rw-r--r--layout/generic/nsBlockFrame.cpp58
-rw-r--r--layout/generic/nsBlockFrame.h4
-rw-r--r--layout/generic/nsBulletFrame.cpp6
-rw-r--r--layout/generic/nsCanvasFrame.cpp4
-rw-r--r--layout/generic/nsCanvasFrame.h2
-rw-r--r--layout/generic/nsContainerFrame.cpp141
-rw-r--r--layout/generic/nsContainerFrame.h10
-rw-r--r--layout/generic/nsFlexContainerFrame.cpp22
-rw-r--r--layout/generic/nsFloatManager.cpp9
-rw-r--r--layout/generic/nsFontInflationData.cpp12
-rw-r--r--layout/generic/nsFrame.cpp177
-rw-r--r--layout/generic/nsGridContainerFrame.cpp80
-rw-r--r--layout/generic/nsGridContainerFrame.h12
-rw-r--r--layout/generic/nsIFrame.h77
-rw-r--r--layout/generic/nsLineLayout.cpp4
-rw-r--r--layout/generic/nsPlaceholderFrame.cpp2
-rw-r--r--layout/generic/nsTextFrame.cpp59
-rw-r--r--layout/mathml/nsMathMLContainerFrame.cpp7
-rw-r--r--layout/mathml/nsMathMLmtableFrame.cpp14
-rw-r--r--layout/reftests/svg/css-transform-svg-ref.html10
-rw-r--r--layout/reftests/svg/css-transform-svg.html13
-rw-r--r--layout/reftests/svg/reftest.list2
-rw-r--r--layout/reftests/svg/svg-blurry-with-subpixel-position-ref.html13
-rw-r--r--layout/reftests/svg/svg-blurry-with-subpixel-position.html13
-rw-r--r--layout/style/FontFaceSet.cpp15
-rw-r--r--layout/svg/SVGTextFrame.cpp10
-rw-r--r--layout/svg/nsSVGEffects.cpp47
-rw-r--r--layout/svg/nsSVGEffects.h2
-rw-r--r--layout/svg/nsSVGFilterFrame.cpp4
-rw-r--r--layout/svg/nsSVGGradientFrame.cpp4
-rw-r--r--layout/svg/nsSVGIntegrationUtils.cpp5
-rw-r--r--layout/svg/nsSVGOuterSVGFrame.cpp53
-rw-r--r--layout/svg/nsSVGPatternFrame.cpp4
-rw-r--r--layout/svg/nsSVGUtils.cpp5
-rw-r--r--layout/tables/nsTableFrame.cpp31
-rw-r--r--layout/tables/nsTableFrame.h3
-rw-r--r--layout/tables/nsTableRowFrame.cpp10
-rw-r--r--layout/tables/nsTableRowGroupFrame.cpp6
-rw-r--r--layout/tables/nsTableWrapperFrame.cpp4
-rw-r--r--layout/xul/nsBox.cpp7
-rw-r--r--layout/xul/nsMenuFrame.cpp6
-rw-r--r--media/libnestegg/include/nestegg.h2
-rw-r--r--media/libnestegg/src/nestegg.c28
-rw-r--r--modules/libpref/init/all.js25
-rw-r--r--netwerk/base/nsIBrowserSearchService.idl8
-rw-r--r--netwerk/base/nsIOService.cpp9
-rw-r--r--netwerk/base/nsIOService.h4
-rw-r--r--netwerk/base/nsNetUtil.cpp56
-rw-r--r--netwerk/base/nsStandardURL.cpp2
-rw-r--r--netwerk/protocol/http/AlternateServices.cpp5
-rw-r--r--netwerk/protocol/http/Http2Push.cpp81
-rw-r--r--netwerk/protocol/http/Http2Push.h18
-rw-r--r--netwerk/protocol/http/Http2Session.cpp24
-rw-r--r--netwerk/protocol/http/Http2Stream.cpp4
-rw-r--r--netwerk/protocol/http/Http2Stream.h2
-rw-r--r--netwerk/protocol/http/nsCORSListenerProxy.cpp3
-rw-r--r--netwerk/protocol/http/nsHttpChannel.cpp4
-rw-r--r--netwerk/protocol/http/nsHttpChannel.h9
-rw-r--r--netwerk/protocol/http/nsHttpChannelAuthProvider.cpp25
-rw-r--r--netwerk/protocol/http/nsHttpChannelAuthProvider.h3
-rw-r--r--netwerk/protocol/http/nsHttpConnectionMgr.cpp33
-rw-r--r--netwerk/protocol/http/nsHttpHandler.h3
-rw-r--r--netwerk/protocol/http/nsHttpTransaction.h16
-rw-r--r--old-configure.in14
-rw-r--r--parser/html/javasrc/Tokenizer.java9
-rw-r--r--parser/html/moz.build2
-rw-r--r--parser/html/nsHtml5ArrayCopy.h7
-rw-r--r--parser/html/nsHtml5AttributeName.cpp2
-rw-r--r--parser/html/nsHtml5AttributeName.h2
-rw-r--r--parser/html/nsHtml5ElementName.cpp2
-rw-r--r--parser/html/nsHtml5ElementName.h2
-rw-r--r--parser/html/nsHtml5Highlighter.cpp16
-rw-r--r--parser/html/nsHtml5Highlighter.h6
-rw-r--r--parser/html/nsHtml5HtmlAttributes.cpp27
-rw-r--r--parser/html/nsHtml5HtmlAttributes.h12
-rw-r--r--parser/html/nsHtml5MetaScanner.cpp15
-rw-r--r--parser/html/nsHtml5MetaScanner.h8
-rw-r--r--parser/html/nsHtml5MetaScannerCppSupplement.h6
-rw-r--r--parser/html/nsHtml5PlainTextUtils.cpp15
-rw-r--r--parser/html/nsHtml5Portability.cpp99
-rw-r--r--parser/html/nsHtml5Portability.h29
-rw-r--r--parser/html/nsHtml5SpeculativeLoad.h106
-rw-r--r--parser/html/nsHtml5StackNode.cpp2
-rw-r--r--parser/html/nsHtml5StackNode.h2
-rw-r--r--parser/html/nsHtml5StateSnapshot.cpp2
-rw-r--r--parser/html/nsHtml5StateSnapshot.h2
-rw-r--r--parser/html/nsHtml5StreamParser.cpp7
-rw-r--r--parser/html/nsHtml5StreamParser.h2
-rw-r--r--parser/html/nsHtml5String.cpp226
-rw-r--r--parser/html/nsHtml5String.h95
-rw-r--r--parser/html/nsHtml5Tokenizer.cpp41
-rw-r--r--parser/html/nsHtml5Tokenizer.h16
-rw-r--r--parser/html/nsHtml5TreeBuilder.cpp49
-rw-r--r--parser/html/nsHtml5TreeBuilder.h27
-rw-r--r--parser/html/nsHtml5TreeBuilderCppSupplement.h206
-rw-r--r--parser/html/nsHtml5TreeOpExecutor.cpp5
-rw-r--r--parser/html/nsHtml5TreeOperation.cpp14
-rw-r--r--parser/html/nsHtml5UTF16Buffer.cpp2
-rw-r--r--parser/html/nsHtml5UTF16Buffer.h2
-rw-r--r--parser/html/nsHtml5ViewSourceUtils.cpp33
-rw-r--r--security/manager/ssl/nsSTSPreloadList.errors5344
-rw-r--r--security/manager/ssl/nsSTSPreloadList.inc5276
-rw-r--r--security/nss/lib/cryptohi/seckey.c5
-rw-r--r--security/nss/lib/freebl/dh.c3
-rw-r--r--security/nss/lib/freebl/ec.c14
-rw-r--r--security/nss/lib/freebl/ecl/ecp_25519.c3
-rw-r--r--security/nss/lib/nss/nss.h4
-rw-r--r--security/nss/lib/pk11wrap/pk11akey.c20
-rw-r--r--security/nss/lib/pk11wrap/pk11cert.c4
-rw-r--r--security/nss/lib/pk11wrap/pk11pk12.c13
-rw-r--r--security/nss/lib/softoken/legacydb/keydb.c33
-rw-r--r--security/nss/lib/softoken/legacydb/lgattr.c6
-rw-r--r--security/nss/lib/softoken/lgglue.c12
-rw-r--r--security/nss/lib/softoken/pkcs11.c4
-rw-r--r--security/nss/lib/softoken/pkcs11c.c2
-rw-r--r--security/nss/lib/softoken/sftkdb.c4
-rw-r--r--security/nss/lib/softoken/sftkdb.h1
-rw-r--r--security/nss/lib/softoken/sftkdbti.h7
-rw-r--r--security/nss/lib/softoken/sftkpwd.c193
-rw-r--r--security/nss/lib/softoken/softkver.h4
-rw-r--r--security/nss/lib/ssl/ssl3con.c20
-rw-r--r--security/nss/lib/util/nssutil.h4
-rw-r--r--security/nss/lib/util/quickder.c7
-rw-r--r--services/sync/modules/policies.js70
-rw-r--r--services/sync/modules/service.js21
-rw-r--r--services/sync/modules/util.js16
-rw-r--r--services/sync/services-sync.js4
-rw-r--r--services/sync/tests/unit/test_service_login.js2
-rw-r--r--testing/profiles/prefs_general.js1
-rw-r--r--testing/talos/talos/config.py2
-rw-r--r--testing/talos/tests/test_talosconfig_browser_config.json2
-rw-r--r--testing/web-platform/meta/MANIFEST.json12
-rw-r--r--testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html13
-rw-r--r--testing/web-platform/tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html14
-rw-r--r--testing/web-platform/tests/html/browsers/history/the-location-interface/location-tojson.html13
-rw-r--r--testing/web-platform/tests/html/browsers/history/the-location-interface/location-valueof.html15
-rw-r--r--toolkit/components/downloads/ApplicationReputation.cpp2
-rw-r--r--toolkit/components/passwordmgr/test/subtst_master_pass.html9
-rw-r--r--toolkit/components/places/PlacesUtils.jsm9
-rw-r--r--toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js1
-rw-r--r--toolkit/components/search/nsSearchService.js10
-rw-r--r--toolkit/components/telemetry/TelemetryEnvironment.jsm2
-rw-r--r--toolkit/components/telemetry/docs/data/environment.rst1
-rw-r--r--toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js8
-rw-r--r--toolkit/content/aboutSupport.js23
-rw-r--r--toolkit/content/aboutSupport.xhtml18
-rw-r--r--toolkit/locales/en-US/chrome/global/aboutSupport.dtd3
-rw-r--r--toolkit/locales/en-US/chrome/global/aboutSupport.properties17
-rw-r--r--toolkit/locales/l10n.mk8
-rw-r--r--toolkit/modules/AppConstants.jsm7
-rw-r--r--toolkit/modules/Troubleshoot.jsm12
-rw-r--r--toolkit/modules/tests/browser/browser_Troubleshoot.js7
-rw-r--r--toolkit/mozapps/extensions/content/extensions.js2
-rw-r--r--toolkit/mozapps/installer/packager.mk2
-rw-r--r--toolkit/mozapps/installer/upload-files.mk8
-rwxr-xr-xtoolkit/mozapps/installer/windows/nsis/common.nsh15
-rw-r--r--toolkit/profile/nsToolkitProfileService.cpp43
-rw-r--r--toolkit/xre/nsAppRunner.cpp96
-rw-r--r--tools/lint/eslint/eslint-plugin-mozilla/lib/rules/import-browserjs-globals.js1
-rwxr-xr-xtools/update-packaging/common.sh32
-rwxr-xr-xtools/update-packaging/make_full_update.sh8
-rw-r--r--widget/gtk/nsFilePicker.cpp133
-rw-r--r--widget/gtk/nsFilePicker.h18
-rw-r--r--xpcom/io/nsLocalFileWin.cpp1
2708 files changed, 31015 insertions, 42139 deletions
diff --git a/CLOBBER b/CLOBBER
index e355625f5..ec7253408 100644
--- a/CLOBBER
+++ b/CLOBBER
@@ -22,4 +22,4 @@
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
# don't change CLOBBER for WebIDL changes any more.
-Clobber for maintenance service removal
+Clobber for SpiderMonkey Update
diff --git a/application/basilisk/app/Makefile.in b/application/basilisk/app/Makefile.in
index 83d6cb36a..b0c1570f6 100644
--- a/application/basilisk/app/Makefile.in
+++ b/application/basilisk/app/Makefile.in
@@ -75,22 +75,22 @@ MAC_BUNDLE_VERSION = $(shell $(PYTHON) $(srcdir)/macversion.py --version=$(MOZ_A
.PHONY: repackage
tools repackage:: $(DIST)/bin/$(MOZ_APP_NAME)
- $(MKDIR) -p $(dist_dest)/Contents/MacOS
- $(MKDIR) -p $(dist_dest)/$(LPROJ)
- rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents $(dist_dest) --exclude English.lproj
- rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents/Resources/English.lproj/ $(dist_dest)/$(LPROJ)
- sed -e 's/%APP_VERSION%/$(MOZ_APP_VERSION)/' -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' -e 's/%MOZ_MACBUNDLE_ID%/$(MOZ_MACBUNDLE_ID)/' -e 's/%MAC_BUNDLE_VERSION%/$(MAC_BUNDLE_VERSION)/' $(srcdir)/macbuild/Contents/Info.plist.in > $(dist_dest)/Contents/Info.plist
- sed -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | iconv -f UTF-8 -t UTF-16 > $(dist_dest)/$(LPROJ)/InfoPlist.strings
- rsync -a --exclude-from='$(srcdir)/macbuild/Contents/MacOS-files.in' $(DIST)/bin/ $(dist_dest)/Contents/Resources
- rsync -a --include-from='$(srcdir)/macbuild/Contents/MacOS-files.in' --exclude '*' $(DIST)/bin/ $(dist_dest)/Contents/MacOS
- $(RM) $(dist_dest)/Contents/MacOS/$(MOZ_APP_NAME)
- rsync -aL $(DIST)/bin/$(MOZ_APP_NAME) $(dist_dest)/Contents/MacOS
- cp -RL $(DIST)/branding/firefox.icns $(dist_dest)/Contents/Resources/firefox.icns
- cp -RL $(DIST)/branding/document.icns $(dist_dest)/Contents/Resources/document.icns
+ $(MKDIR) -p '$(dist_dest)/Contents/MacOS'
+ $(MKDIR) -p '$(dist_dest)/$(LPROJ)'
+ rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents '$(dist_dest)' --exclude English.lproj
+ rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents/Resources/English.lproj/ '$(dist_dest)/$(LPROJ)'
+ sed -e 's/%APP_VERSION%/$(MOZ_APP_VERSION)/' -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' -e 's/%MOZ_MACBUNDLE_ID%/$(MOZ_MACBUNDLE_ID)/' -e 's/%MAC_BUNDLE_VERSION%/$(MAC_BUNDLE_VERSION)/' $(srcdir)/macbuild/Contents/Info.plist.in > '$(dist_dest)/Contents/Info.plist'
+ sed -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | iconv -f UTF-8 -t UTF-16 > '$(dist_dest)/$(LPROJ)/InfoPlist.strings'
+ rsync -a --exclude-from='$(srcdir)/macbuild/Contents/MacOS-files.in' $(DIST)/bin/ '$(dist_dest)/Contents/Resources'
+ rsync -a --include-from='$(srcdir)/macbuild/Contents/MacOS-files.in' --exclude '*' $(DIST)/bin/ '$(dist_dest)/Contents/MacOS'
+ $(RM) '$(dist_dest)/Contents/MacOS/$(MOZ_APP_NAME)'
+ rsync -aL $(DIST)/bin/$(MOZ_APP_NAME) '$(dist_dest)/Contents/MacOS'
+ cp -RL $(DIST)/branding/firefox.icns '$(dist_dest)/Contents/Resources/firefox.icns'
+ cp -RL $(DIST)/branding/document.icns '$(dist_dest)/Contents/Resources/document.icns'
ifdef MOZ_UPDATER
- $(MKDIR) -p $(dist_dest)/Contents/Library/LaunchServices
- mv -f $(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater $(dist_dest)/Contents/Library/LaunchServices
- ln -s ../../../../Library/LaunchServices/org.mozilla.updater $(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater
+ $(MKDIR) -p '$(dist_dest)/Contents/Library/LaunchServices'
+ mv -f '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater' '$(dist_dest)/Contents/Library/LaunchServices'
+ ln -s ../../../../Library/LaunchServices/org.mozilla.updater '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater'
endif
- printf APPLMOZB > $(dist_dest)/Contents/PkgInfo
+ printf APPLMOZB > '$(dist_dest)/Contents/PkgInfo'
endif
diff --git a/application/basilisk/app/profile/basilisk.js b/application/basilisk/app/profile/basilisk.js
index c229f3523..a773bc60e 100644
--- a/application/basilisk/app/profile/basilisk.js
+++ b/application/basilisk/app/profile/basilisk.js
@@ -53,12 +53,6 @@ pref("extensions.getAddons.recommended.browseURL", "https://@AM_DOMAIN@/?compone
pref("extensions.update.autoUpdateDefault", true);
-// Leave these for the moment...
-pref("extensions.hotfix.id", "firefox-hotfix@mozilla.org");
-pref("extensions.hotfix.cert.checkAttributes", true);
-pref("extensions.hotfix.certs.1.sha1Fingerprint", "91:53:98:0C:C1:86:DF:47:8F:35:22:9E:11:C9:A7:31:04:49:A1:AA");
-pref("extensions.hotfix.certs.2.sha1Fingerprint", "39:E7:2B:7A:5B:CF:37:78:F9:5D:4A:E0:53:2D:2F:3D:68:53:C5:60");
-
// Also, leave this for the moment...
// Check AUS for system add-on updates.
pref("extensions.systemAddon.update.url", "https://aus5.mozilla.org/update/3/SystemAddons/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml");
@@ -1015,12 +1009,7 @@ pref("services.sync.syncedTabs.showRemoteIcons", true);
pref("services.sync.sendTabToDevice.enabled", true);
-// Developer edition preferences
-#ifdef MOZ_DEV_EDITION
-sticky_pref("lightweightThemes.selectedThemeID", "firefox-devedition@mozilla.org");
-#else
sticky_pref("lightweightThemes.selectedThemeID", "");
-#endif
// Whether the character encoding menu is under the main Firefox button. This
// preference is a string so that localizers can alter it.
diff --git a/application/basilisk/base/content/browser-devedition.js b/application/basilisk/base/content/browser-devedition.js
deleted file mode 100644
index 0dc1e94da..000000000
--- a/application/basilisk/base/content/browser-devedition.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/**
- * Listeners for the DevEdition theme. This adds an extra stylesheet
- * to browser.xul if a pref is set and no other themes are applied.
- */
-var DevEdition = {
- _devtoolsThemePrefName: "devtools.theme",
- styleSheetLocation: "chrome://browser/skin/devedition.css",
- styleSheet: null,
- initialized: false,
-
- get isStyleSheetEnabled() {
- return this.styleSheet && !this.styleSheet.sheet.disabled;
- },
-
- get isThemeCurrentlyApplied() {
- let theme = LightweightThemeManager.currentTheme;
- return theme && theme.id == "firefox-devedition@mozilla.org";
- },
-
- init: function () {
- this.initialized = true;
- Services.prefs.addObserver(this._devtoolsThemePrefName, this, false);
- Services.obs.addObserver(this, "lightweight-theme-styling-update", false);
- Services.obs.addObserver(this, "lightweight-theme-window-updated", false);
- this._updateDevtoolsThemeAttribute();
-
- if (this.isThemeCurrentlyApplied) {
- this._toggleStyleSheet(true);
- }
- },
-
- createStyleSheet: function() {
- let styleSheetAttr = `href="${this.styleSheetLocation}" type="text/css"`;
- this.styleSheet = document.createProcessingInstruction(
- "xml-stylesheet", styleSheetAttr);
- this.styleSheet.addEventListener("load", this);
- document.insertBefore(this.styleSheet, document.documentElement);
- this.styleSheet.sheet.disabled = true;
- },
-
- observe: function (subject, topic, data) {
- if (topic == "lightweight-theme-styling-update") {
- let newTheme = JSON.parse(data);
- if (newTheme && newTheme.id == "firefox-devedition@mozilla.org") {
- this._toggleStyleSheet(true);
- } else {
- this._toggleStyleSheet(false);
- }
- } else if (topic == "lightweight-theme-window-updated" && subject == window) {
- this._updateLWTBrightness();
- }
-
- if (topic == "nsPref:changed" && data == this._devtoolsThemePrefName) {
- this._updateDevtoolsThemeAttribute();
- }
- },
-
- _inferBrightness: function() {
- ToolbarIconColor.inferFromText();
- // Get an inverted full screen button if the dark theme is applied.
- if (this.isStyleSheetEnabled &&
- document.documentElement.getAttribute("devtoolstheme") == "dark") {
- document.documentElement.setAttribute("brighttitlebarforeground", "true");
- } else {
- document.documentElement.removeAttribute("brighttitlebarforeground");
- }
- },
-
- _updateLWTBrightness() {
- if (this.isThemeCurrentlyApplied) {
- let devtoolsTheme = Services.prefs.getCharPref(this._devtoolsThemePrefName);
- let textColor = devtoolsTheme == "dark" ? "bright" : "dark";
- document.documentElement.setAttribute("lwthemetextcolor", textColor);
- }
- },
-
- _updateDevtoolsThemeAttribute: function() {
- // Set an attribute on root element to make it possible
- // to change colors based on the selected devtools theme.
- let devtoolsTheme = Services.prefs.getCharPref(this._devtoolsThemePrefName);
- if (devtoolsTheme != "dark") {
- devtoolsTheme = "light";
- }
- document.documentElement.setAttribute("devtoolstheme", devtoolsTheme);
- this._updateLWTBrightness();
- this._inferBrightness();
- },
-
- handleEvent: function(e) {
- if (e.type === "load") {
- this.styleSheet.removeEventListener("load", this);
- this.refreshBrowserDisplay();
- }
- },
-
- refreshBrowserDisplay: function() {
- // Don't touch things on the browser if gBrowserInit.onLoad hasn't
- // yet fired.
- if (this.initialized) {
- gBrowser.tabContainer._positionPinnedTabs();
- this._inferBrightness();
- }
- },
-
- _toggleStyleSheet: function(deveditionThemeEnabled) {
- let wasEnabled = this.isStyleSheetEnabled;
- if (deveditionThemeEnabled && !wasEnabled) {
- // The stylesheet may not have been created yet if it wasn't
- // needed on initial load. Make it now.
- if (!this.styleSheet) {
- this.createStyleSheet();
- }
- this.styleSheet.sheet.disabled = false;
- this.refreshBrowserDisplay();
- } else if (!deveditionThemeEnabled && wasEnabled) {
- this.styleSheet.sheet.disabled = true;
- this.refreshBrowserDisplay();
- }
- },
-
- uninit: function () {
- Services.prefs.removeObserver(this._devtoolsThemePrefName, this);
- Services.obs.removeObserver(this, "lightweight-theme-styling-update", false);
- Services.obs.removeObserver(this, "lightweight-theme-window-updated", false);
- if (this.styleSheet) {
- this.styleSheet.removeEventListener("load", this);
- }
- this.styleSheet = null;
- }
-};
-
-// If the DevEdition theme is going to be applied in gBrowserInit.onLoad,
-// then preload it now. This prevents a flash of unstyled content where the
-// normal theme is applied while the DevEdition stylesheet is loading.
-if (!AppConstants.RELEASE_OR_BETA &&
- this != Services.appShell.hiddenDOMWindow && DevEdition.isThemeCurrentlyApplied) {
- DevEdition.createStyleSheet();
-}
diff --git a/application/basilisk/base/content/browser.js b/application/basilisk/base/content/browser.js
index 1dee19a1d..bbd240e69 100644
--- a/application/basilisk/base/content/browser.js
+++ b/application/basilisk/base/content/browser.js
@@ -956,7 +956,6 @@ var gBrowserInit = {
gPageStyleMenu.init();
BrowserOnClick.init();
FeedHandler.init();
- DevEdition.init();
AboutPrivateBrowsingListener.init();
TrackingProtection.init();
RefreshBlocker.init();
@@ -1479,8 +1478,6 @@ var gBrowserInit = {
FeedHandler.uninit();
- DevEdition.uninit();
-
TrackingProtection.uninit();
RefreshBlocker.uninit();
diff --git a/application/basilisk/base/content/global-scripts.inc b/application/basilisk/base/content/global-scripts.inc
index db8496cfc..6edb11214 100644
--- a/application/basilisk/base/content/global-scripts.inc
+++ b/application/basilisk/base/content/global-scripts.inc
@@ -14,7 +14,6 @@
<script type="application/javascript" src="chrome://browser/content/browser-captivePortal.js"/>
<script type="application/javascript" src="chrome://browser/content/browser-ctrlTab.js"/>
<script type="application/javascript" src="chrome://browser/content/browser-customization.js"/>
-<script type="application/javascript" src="chrome://browser/content/browser-devedition.js"/>
<script type="application/javascript" src="chrome://browser/content/browser-feeds.js"/>
<script type="application/javascript" src="chrome://browser/content/browser-fullScreenAndPointerLock.js"/>
<script type="application/javascript" src="chrome://browser/content/browser-fullZoom.js"/>
diff --git a/application/basilisk/base/content/tabbrowser.xml b/application/basilisk/base/content/tabbrowser.xml
index 0e819a3ed..85f923923 100644
--- a/application/basilisk/base/content/tabbrowser.xml
+++ b/application/basilisk/base/content/tabbrowser.xml
@@ -6906,21 +6906,22 @@
<handlers>
<handler event="popupshowing">
<![CDATA[
- document.getElementById("alltabs_undoCloseTab").disabled =
- SessionStore.getClosedTabCount(window) == 0;
-
- // Listen for changes in the tab bar.
- tabcontainer.addEventListener("TabAttrModified", this, false);
- tabcontainer.addEventListener("TabClose", this, false);
- tabcontainer.mTabstrip.addEventListener("scroll", this, false);
-
- let tabs = gBrowser.visibleTabs;
- for (var i = 0; i < tabs.length; i++) {
- if (!tabs[i].pinned)
- this._createTabMenuItem(tabs[i]);
- }
- this._updateTabsVisibilityStatus();
+ document.getElementById("alltabs_undoCloseTab").disabled =
+ SessionStore.getClosedTabCount(window) == 0;
+
+ var tabcontainer = gBrowser.tabContainer;
+
+ // Listen for changes in the tab bar.
+ tabcontainer.addEventListener("TabAttrModified", this, false);
+ tabcontainer.addEventListener("TabClose", this, false);
+ tabcontainer.mTabstrip.addEventListener("scroll", this, false);
+
+ let tabs = gBrowser.visibleTabs;
+ for (var i = 0; i < tabs.length; i++) {
+ if (!tabs[i].pinned)
+ this._createTabMenuItem(tabs[i]);
}
+ this._updateTabsVisibilityStatus();
]]></handler>
<handler event="popuphidden">
diff --git a/application/basilisk/base/jar.mn b/application/basilisk/base/jar.mn
index 76727731b..f546ec4bd 100644
--- a/application/basilisk/base/jar.mn
+++ b/application/basilisk/base/jar.mn
@@ -63,7 +63,6 @@ browser.jar:
content/browser/browser-ctrlTab.js (content/browser-ctrlTab.js)
content/browser/browser-customization.js (content/browser-customization.js)
content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js)
- content/browser/browser-devedition.js (content/browser-devedition.js)
content/browser/browser-feeds.js (content/browser-feeds.js)
content/browser/browser-fullScreenAndPointerLock.js (content/browser-fullScreenAndPointerLock.js)
content/browser/browser-fullZoom.js (content/browser-fullZoom.js)
diff --git a/application/basilisk/components/customizableui/CustomizableUI.jsm b/application/basilisk/components/customizableui/CustomizableUI.jsm
index d56d63d99..ce395121c 100644
--- a/application/basilisk/components/customizableui/CustomizableUI.jsm
+++ b/application/basilisk/components/customizableui/CustomizableUI.jsm
@@ -38,7 +38,6 @@ const kPrefCustomizationState = "browser.uiCustomization.state";
const kPrefCustomizationAutoAdd = "browser.uiCustomization.autoAdd";
const kPrefCustomizationDebug = "browser.uiCustomization.debug";
const kPrefDrawInTitlebar = "browser.tabs.drawInTitlebar";
-const kPrefWebIDEInNavbar = "devtools.webide.widget.inNavbarByDefault";
const kExpectedWindowURL = "chrome://browser/content/browser.xul";
@@ -199,9 +198,7 @@ var CustomizableUIInternal = {
"add-ons-button",
];
- if (!AppConstants.MOZ_DEV_EDITION) {
- panelPlacements.splice(-1, 0, "developer-button");
- }
+ panelPlacements.splice(-1, 0, "developer-button");
let showCharacterEncoding = Services.prefs.getComplexValue(
"browser.menu.showCharacterEncoding",
@@ -226,14 +223,6 @@ var CustomizableUIInternal = {
"home-button",
];
- if (AppConstants.MOZ_DEV_EDITION) {
- navbarPlacements.splice(2, 0, "developer-button");
- }
-
- if (Services.prefs.getBoolPref(kPrefWebIDEInNavbar)) {
- navbarPlacements.push("webide-button");
- }
-
// Place this last, when createWidget is called for pocket, it will
// append to the toolbar.
if (Services.prefs.getPrefType("extensions.pocket.enabled") != Services.prefs.PREF_INVALID &&
diff --git a/application/basilisk/components/nsBrowserGlue.js b/application/basilisk/components/nsBrowserGlue.js
index d29009b13..5d3e4689b 100644
--- a/application/basilisk/components/nsBrowserGlue.js
+++ b/application/basilisk/components/nsBrowserGlue.js
@@ -676,19 +676,6 @@ BrowserGlue.prototype = {
// Ensure we keep track of places/pw-mananager undo by init'ing this early.
Cu.import("resource:///modules/AutoMigrate.jsm");
- if (!AppConstants.RELEASE_OR_BETA) {
- let themeName = gBrowserBundle.GetStringFromName("deveditionTheme.name");
- let vendorShortName = gBrandBundle.GetStringFromName("vendorShortName");
-
- LightweightThemeManager.addBuiltInTheme({
- id: "firefox-devedition@mozilla.org",
- name: themeName,
- headerURL: "resource:///chrome/browser/content/browser/defaultthemes/devedition.header.png",
- iconURL: "resource:///chrome/browser/content/browser/defaultthemes/devedition.icon.png",
- author: vendorShortName,
- });
- }
-
TabCrashHandler.init();
Services.obs.notifyObservers(null, "browser-ui-startup-complete", "");
@@ -1054,10 +1041,6 @@ BrowserGlue.prototype = {
// All initial windows have opened.
_onWindowsRestored: function BG__onWindowsRestored() {
- if (AppConstants.MOZ_DEV_EDITION) {
- this._createExtraDefaultProfile();
- }
-
this._initServiceDiscovery();
// Show update notification, if needed.
@@ -1074,7 +1057,7 @@ BrowserGlue.prototype = {
// them to the user.
let changedIDs = AddonManager.getStartupChanges(AddonManager.STARTUP_CHANGE_INSTALLED);
if (changedIDs.length > 0) {
- let win = this.getMostRecentBrowserWindow();
+ let win = RecentWindow.getMostRecentBrowserWindow();
AddonManager.getAddonsByIDs(changedIDs, function(aAddons) {
aAddons.forEach(function(aAddon) {
// If the add-on isn't user disabled or can't be enabled then skip it.
@@ -1193,40 +1176,6 @@ BrowserGlue.prototype = {
E10SAccessibilityCheck.onWindowsRestored();
},
- _createExtraDefaultProfile: function () {
- if (!AppConstants.MOZ_DEV_EDITION) {
- return;
- }
- // If Developer Edition is the only installed Firefox version and no other
- // profiles are present, create a second one for use by other versions.
- // This helps Firefox versions earlier than 35 avoid accidentally using the
- // unsuitable Developer Edition profile.
- let profileService = Cc["@mozilla.org/toolkit/profile-service;1"]
- .getService(Ci.nsIToolkitProfileService);
- let profileCount = profileService.profileCount;
- if (profileCount == 1 && profileService.selectedProfile.name != "default") {
- let newProfile;
- try {
- newProfile = profileService.createProfile(null, "default");
- profileService.defaultProfile = newProfile;
- profileService.flush();
- } catch (e) {
- Cu.reportError("Could not create profile 'default': " + e);
- }
- if (newProfile) {
- // We don't want a default profile with Developer Edition settings, an
- // empty profile directory will do. The profile service of the other
- // Firefox will populate it with its own stuff.
- let newProfilePath = newProfile.rootDir.path;
- OS.File.removeDir(newProfilePath).then(() => {
- return OS.File.makeDir(newProfilePath);
- }).then(null, e => {
- Cu.reportError("Could not empty profile 'default': " + e);
- });
- }
- }
- },
-
_onQuitRequest: function BG__onQuitRequest(aCancelQuit, aQuitType) {
// If user has already dismissed quit request, then do nothing
if ((aCancelQuit instanceof Ci.nsISupportsPRBool) && aCancelQuit.data)
@@ -1981,14 +1930,8 @@ BrowserGlue.prototype = {
defaultThemeSelected = Services.prefs.getCharPref("general.skins.selectedSkin") == "classic/1.0";
} catch (e) {}
- // If we are on the devedition channel, the devedition theme is on by
- // default. But we need to handle the case where they didn't want it
- // applied, and unapply the theme.
- let userChoseToNotUseDeveditionTheme =
- !defaultThemeSelected ||
- (lightweightThemeSelected && selectedThemeID != "firefox-devedition@mozilla.org");
-
- if (userChoseToNotUseDeveditionTheme && selectedThemeID == "firefox-devedition@mozilla.org") {
+ // If we have the dev edition theme selected, reset it.
+ if (selectedThemeID == "firefox-devedition@mozilla.org") {
Services.prefs.setCharPref("lightweightThemes.selectedThemeID", "");
}
diff --git a/application/basilisk/components/places/content/controller.js b/application/basilisk/components/places/content/controller.js
index ebdab60f4..931c8fac1 100644
--- a/application/basilisk/components/places/content/controller.js
+++ b/application/basilisk/components/places/content/controller.js
@@ -461,7 +461,11 @@ PlacesController.prototype = {
if (parentNode) {
if (PlacesUtils.nodeIsTagQuery(parentNode))
nodeData["tagChild"] = true;
- else if (this.hasCachedLivemarkInfo(parentNode))
+ }
+ } else {
+ var parentNode = node.parent;
+ if (parentNode) {
+ if (this.hasCachedLivemarkInfo(parentNode))
nodeData["livemarkChild"] = true;
}
}
diff --git a/application/basilisk/components/places/content/placesOverlay.xul b/application/basilisk/components/places/content/placesOverlay.xul
index 512eb923e..2dbef0f04 100644
--- a/application/basilisk/components/places/content/placesOverlay.xul
+++ b/application/basilisk/components/places/content/placesOverlay.xul
@@ -198,7 +198,7 @@
accesskey="&cmd.delete.accesskey;"
closemenu="single"
selection="link"
- forcehideselection="bookmark"/>
+ forcehideselection="bookmark|livemarkChild"/>
<menuitem id="placesContext_deleteHost"
command="placesCmd_deleteDataHost"
label="&cmd.deleteDomainData.label;"
@@ -207,7 +207,7 @@
selection="link|host"
selectiontype="single"
hideifprivatebrowsing="true"
- forcehideselection="bookmark"/>
+ forcehideselection="bookmark|livemarkChild"/>
<menuseparator id="placesContext_deleteSeparator"/>
<menuitem id="placesContext_sortBy:name"
command="placesCmd_sortBy:name"
diff --git a/application/basilisk/components/preferences/in-content/main.js b/application/basilisk/components/preferences/in-content/main.js
index bac771bec..8f3dffa57 100644
--- a/application/basilisk/components/preferences/in-content/main.js
+++ b/application/basilisk/components/preferences/in-content/main.js
@@ -78,18 +78,6 @@ var gMainPane = {
setEventListener("chooseFolder", "command",
gMainPane.chooseFolder);
- if (AppConstants.MOZ_DEV_EDITION) {
- let uAppData = OS.Constants.Path.userApplicationDataDir;
- let ignoreSeparateProfile = OS.Path.join(uAppData, "ignore-dev-edition-profile");
-
- setEventListener("separateProfileMode", "command", gMainPane.separateProfileModeChange);
- let separateProfileModeCheckbox = document.getElementById("separateProfileMode");
- setEventListener("getStarted", "click", gMainPane.onGetStarted);
-
- OS.File.stat(ignoreSeparateProfile).then(() => separateProfileModeCheckbox.checked = false,
- () => separateProfileModeCheckbox.checked = true);
- }
-
// Notify observers that the UI is now ready
Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService)
@@ -101,71 +89,6 @@ var gMainPane = {
// **STUB**
},
- separateProfileModeChange: function ()
- {
- if (AppConstants.MOZ_DEV_EDITION) {
- function quitApp() {
- Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestartNotSameProfile);
- }
- function revertCheckbox(error) {
- separateProfileModeCheckbox.checked = !separateProfileModeCheckbox.checked;
- if (error) {
- Cu.reportError("Failed to toggle separate profile mode: " + error);
- }
- }
- function createOrRemoveSpecialDevEditionFile(onSuccess) {
- let uAppData = OS.Constants.Path.userApplicationDataDir;
- let ignoreSeparateProfile = OS.Path.join(uAppData, "ignore-dev-edition-profile");
-
- if (separateProfileModeCheckbox.checked) {
- OS.File.remove(ignoreSeparateProfile).then(onSuccess, revertCheckbox);
- } else {
- OS.File.writeAtomic(ignoreSeparateProfile, new Uint8Array()).then(onSuccess, revertCheckbox);
- }
- }
-
- let separateProfileModeCheckbox = document.getElementById("separateProfileMode");
- let button_index = confirmRestartPrompt(separateProfileModeCheckbox.checked,
- 0, false, true);
- switch (button_index) {
- case CONFIRM_RESTART_PROMPT_CANCEL:
- revertCheckbox();
- return;
- case CONFIRM_RESTART_PROMPT_RESTART_NOW:
- const Cc = Components.classes, Ci = Components.interfaces;
- let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
- .createInstance(Ci.nsISupportsPRBool);
- Services.obs.notifyObservers(cancelQuit, "quit-application-requested",
- "restart");
- if (!cancelQuit.data) {
- createOrRemoveSpecialDevEditionFile(quitApp);
- return;
- }
-
- // Revert the checkbox in case we didn't quit
- revertCheckbox();
- return;
- case CONFIRM_RESTART_PROMPT_RESTART_LATER:
- createOrRemoveSpecialDevEditionFile();
- return;
- }
- }
- },
-
- onGetStarted: function (aEvent) {
- if (AppConstants.MOZ_DEV_EDITION) {
- const Cc = Components.classes, Ci = Components.interfaces;
- let wm = Cc["@mozilla.org/appshell/window-mediator;1"]
- .getService(Ci.nsIWindowMediator);
- let win = wm.getMostRecentWindow("navigator:browser");
-
- if (win) {
- let accountsTab = win.gBrowser.addTab("about:accounts?action=signin&entrypoint=dev-edition-setup");
- win.gBrowser.selectedTab = accountsTab;
- }
- }
- },
-
// HOME PAGE
/*
diff --git a/application/basilisk/components/preferences/in-content/main.xul b/application/basilisk/components/preferences/in-content/main.xul
index 8eca11877..f695b308b 100644
--- a/application/basilisk/components/preferences/in-content/main.xul
+++ b/application/basilisk/components/preferences/in-content/main.xul
@@ -112,17 +112,6 @@
hidden="true">
<caption><label>&startup.label;</label></caption>
-#ifdef MOZ_DEV_EDITION
- <vbox id="separateProfileBox">
- <checkbox id="separateProfileMode"
- label="&separateProfileMode.label;"/>
- <hbox align="center" class="indent">
- <label id="useFirefoxSync">&useFirefoxSync.label;</label>
- <label id="getStarted" class="text-link">&getStarted.label;</label>
- </hbox>
- </vbox>
-#endif
-
#ifdef HAVE_SHELL_SERVICE
<vbox id="defaultBrowserBox">
<hbox align="center">
diff --git a/application/basilisk/installer/Makefile.in b/application/basilisk/installer/Makefile.in
index 4de368db7..1ca3b8ee0 100644
--- a/application/basilisk/installer/Makefile.in
+++ b/application/basilisk/installer/Makefile.in
@@ -99,19 +99,19 @@ include $(topsrcdir)/toolkit/mozapps/installer/packager.mk
ifeq (bundle, $(MOZ_FS_LAYOUT))
BINPATH = $(_BINPATH)
-DEFINES += -DAPPNAME=$(_APPNAME)
+DEFINES += -DAPPNAME='$(_APPNAME)'
else
# Every other platform just winds up in dist/bin
BINPATH = bin
endif
-DEFINES += -DBINPATH=$(BINPATH)
+DEFINES += -DBINPATH='$(BINPATH)'
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
RESPATH = $(_APPNAME)/Contents/Resources
else
RESPATH = $(BINPATH)
endif
-DEFINES += -DRESPATH=$(RESPATH)
+DEFINES += -DRESPATH='$(RESPATH)'
LPROJ_ROOT = $(firstword $(subst -, ,$(AB_CD)))
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
@@ -164,7 +164,7 @@ FINDPATH=bin
endif
package-compare::
- cd $(DIST); find $(PKGCOMP_FIND_OPTS) $(FINDPATH) -type f | sort > bin-list.txt
+ cd $(DIST); find $(PKGCOMP_FIND_OPTS) '$(FINDPATH)' -type f | sort > bin-list.txt
$(call py_action,preprocessor,$(DEFINES) $(ACDEFINES) $(MOZ_PKG_MANIFEST)) | grep '^$(BINPATH)' | sed -e 's/^\///' | sort > $(DIST)/pack-list.txt
-diff -u $(DIST)/pack-list.txt $(DIST)/bin-list.txt
rm -f $(DIST)/pack-list.txt $(DIST)/bin-list.txt
diff --git a/application/basilisk/installer/package-manifest.in b/application/basilisk/installer/package-manifest.in
index 22655bc33..bffab0f6e 100644
--- a/application/basilisk/installer/package-manifest.in
+++ b/application/basilisk/installer/package-manifest.in
@@ -183,6 +183,7 @@
@RESPATH@/components/dom.xpt
@RESPATH@/components/dom_apps.xpt
@RESPATH@/components/dom_base.xpt
+@RESPATH@/components/dom_bindings.xpt
@RESPATH@/components/dom_system.xpt
@RESPATH@/components/dom_canvas.xpt
@RESPATH@/components/dom_core.xpt
@@ -354,8 +355,6 @@
@RESPATH@/browser/components/nsSetDefaultBrowser.js
@RESPATH@/browser/components/devtools-startup.manifest
@RESPATH@/browser/components/devtools-startup.js
-@RESPATH@/browser/components/webideCli.js
-@RESPATH@/browser/components/webideComponents.manifest
@RESPATH@/browser/components/browser-newtab.xpt
@RESPATH@/browser/components/aboutNewTabService.js
@RESPATH@/browser/components/NewTabComponents.manifest
@@ -477,8 +476,10 @@
@RESPATH@/browser/components/SelfSupportService.manifest
@RESPATH@/browser/components/SelfSupportService.js
#endif
+#ifdef MOZ_SERVICES_SYNC
@RESPATH@/components/SyncComponents.manifest
@RESPATH@/components/Weave.js
+#endif
@RESPATH@/components/CaptivePortalDetectComponents.manifest
@RESPATH@/components/captivedetect.js
@RESPATH@/components/servicesComponents.manifest
@@ -593,11 +594,6 @@
@RESPATH@/browser/chrome/icons/default/default48.png
#endif
-; [Webide Files]
-@RESPATH@/browser/chrome/webide@JAREXT@
-@RESPATH@/browser/chrome/webide.manifest
-@RESPATH@/browser/@PREF_DIR@/webide-prefs.js
-
; DevTools
@RESPATH@/browser/chrome/devtools@JAREXT@
@RESPATH@/browser/chrome/devtools.manifest
@@ -629,7 +625,9 @@
@RESPATH@/defaults/pref/channel-prefs.js
; Services (gre) prefs
+#ifdef MOZ_SERVICES_SYNC
@RESPATH@/defaults/pref/services-sync.js
+#endif
; [Layout Engine Resources]
; Style Sheets, Graphics and other Resources used by the layout engine.
diff --git a/application/basilisk/locales/Makefile.in b/application/basilisk/locales/Makefile.in
index b8aee0f14..0d8b1d86a 100644
--- a/application/basilisk/locales/Makefile.in
+++ b/application/basilisk/locales/Makefile.in
@@ -97,7 +97,9 @@ DEFINES += -DBOOKMARKS_INCLUDE_DIR=$(dir $(call MERGE_FILE,profile/bookmarks.inc
libs-%:
$(NSINSTALL) -D $(DIST)/install
@$(MAKE) -C $(DEPTH)/toolkit/locales libs-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)'
+ifdef MOZ_SERVICES_SYNC
@$(MAKE) -C $(DEPTH)/services/sync/locales AB_CD=$* XPI_NAME=locale-$*
+endif
@$(MAKE) -C $(DEPTH)/extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$*
# @$(MAKE) -C ../extensions/pocket/locale AB_CD=$* XPI_NAME=locale-$*
@$(MAKE) -C $(DEPTH)/intl/locales AB_CD=$* XPI_NAME=locale-$*
@@ -168,10 +170,10 @@ endif
ident:
@printf 'fx_revision '
@$(PYTHON) $(topsrcdir)/config/printconfigsetting.py \
- $(STAGEDIST)/application.ini App SourceStamp
+ '$(STAGEDIST)'/application.ini App SourceStamp
@printf 'buildid '
@$(PYTHON) $(topsrcdir)/config/printconfigsetting.py \
- $(STAGEDIST)/application.ini App BuildID
+ '$(STAGEDIST)'/application.ini App BuildID
merge-%:
ifdef LOCALE_MERGEDIR
diff --git a/application/basilisk/locales/l10n.ini b/application/basilisk/locales/l10n.ini
index f1d22c259..78bafe8ca 100644
--- a/application/basilisk/locales/l10n.ini
+++ b/application/basilisk/locales/l10n.ini
@@ -16,7 +16,9 @@ dirs = browser
# non-central apps might want to use %(topsrcdir)s here, or other vars
# RFE: that needs to be supported by compare-locales, too, though
toolkit = toolkit/locales/l10n.ini
+#ifdef MOZ_SERVICES_SYNC
services_sync = services/sync/locales/l10n.ini
+#endif
[extras]
dirs = extensions/spellcheck
diff --git a/application/basilisk/modules/ProcessHangMonitor.jsm b/application/basilisk/modules/ProcessHangMonitor.jsm
index b1f6f2a97..80c506ac7 100644
--- a/application/basilisk/modules/ProcessHangMonitor.jsm
+++ b/application/basilisk/modules/ProcessHangMonitor.jsm
@@ -304,16 +304,6 @@ var ProcessHangMonitor = {
}
}];
- if (AppConstants.MOZ_DEV_EDITION && report.hangType == report.SLOW_SCRIPT) {
- buttons.push({
- label: bundle.getString("processHang.button_debug.label"),
- accessKey: bundle.getString("processHang.button_debug.accessKey"),
- callback: function() {
- ProcessHangMonitor.debugScript(win);
- }
- });
- }
-
nb.appendNotification(bundle.getString("processHang.label"),
"process-hang",
"chrome://browser/skin/slowStartup-16.png",
diff --git a/application/basilisk/themes/linux/devedition.css b/application/basilisk/themes/linux/devedition.css
deleted file mode 100644
index 1f16d5d63..000000000
--- a/application/basilisk/themes/linux/devedition.css
+++ /dev/null
@@ -1,106 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-%include ../shared/devedition.inc.css
-
-:root {
- --forwardbutton-width: 29px;
-}
-
-:root[devtoolstheme="light"] {
- --urlbar-dropmarker-url: url("chrome://browser/skin/devedition/urlbar-history-dropmarker.svg");
- --urlbar-dropmarker-region: rect(0px, 11px, 14px, 0px);
- --urlbar-dropmarker-hover-region: rect(0, 22px, 14px, 11px);
- --urlbar-dropmarker-active-region: rect(0px, 33px, 14px, 22px);
- --urlbar-dropmarker-2x-url: url("chrome://browser/skin/devedition/urlbar-history-dropmarker.svg");
- --urlbar-dropmarker-2x-region: rect(0px, 11px, 14px, 0px);
- --urlbar-dropmarker-hover-2x-region: rect(0, 22px, 14px, 11px);
- --urlbar-dropmarker-active-2x-region: rect(0px, 33px, 14px, 22px);
-}
-
-:root[devtoolstheme="dark"] .findbar-closebutton:not(:hover),
-:root[devtoolstheme="dark"] #sidebar-header > .close-icon:not(:hover),
-.tab-close-button[selected]:not(:hover) {
- background-image: -moz-image-rect(url("chrome://global/skin/icons/close.svg"), 0, 80, 16, 64);
-}
-
-/* The menubar and tabs toolbar should match the devedition theme */
-#TabsToolbar,
-#toolbar-menubar {
- -moz-appearance: none !important;
-}
-#main-menubar {
- color: var(--chrome-color);
-}
-#main-menubar > menu:not([open]) {
- color: inherit;
-}
-
-/* Allow buttons with -moz-appearance set to look normal on hover and open states */
-#navigator-toolbox .toolbarbutton-1:-moz-any(:hover, [open="true"]),
-#PlacesToolbar toolbarbutton.bookmark-item:-moz-any(:hover, [open="true"]) {
- color: initial;
-}
-
-/* Square back and forward buttons */
-#back-button > .toolbarbutton-icon,
-#forward-button > .toolbarbutton-icon {
- margin: 0;
- border: 1px solid var(--chrome-nav-bar-controls-border-color);
- padding: 2px 5px;
- background: var(--chrome-nav-buttons-background);
- box-shadow: none !important;
-}
-
-#forward-button > .toolbarbutton-icon {
- border-inline-start: none;
-}
-
-/* Override a box shadow for disabled back button */
-#main-window:not([customizing]) #back-button[disabled] > .toolbarbutton-icon {
- box-shadow: none !important;
-}
-
-#back-button:hover:not([disabled="true"]) > .toolbarbutton-icon,
-#forward-button:hover:not([disabled="true"]) > .toolbarbutton-icon {
- background: var(--chrome-nav-buttons-hover-background) !important;
-}
-
-#back-button > .toolbarbutton-icon {
- border-radius: 2px 0 0 2px !important;
-}
-
-.urlbar-history-dropmarker {
- -moz-appearance: none;
- padding: 0 3px;
- list-style-image: var(--urlbar-dropmarker-url);
- -moz-image-region: var(--urlbar-dropmarker-region);
-}
-
-/* Add the proper background for tab overflow */
-#alltabs-button,
-#new-tab-button {
- background: var(--chrome-background-color);
-}
-
-#new-tab-button:hover > .toolbarbutton-icon {
- border-color: transparent !important;
-}
-
-/* Prevent double border below tabs toolbar */
-#TabsToolbar:not([collapsed="true"]) + #nav-bar {
- border-top-width: 0 !important;
-}
-
-/* Fix the bad-looking text-shadow in the sidebar header: */
-.sidebar-header,
-#sidebar-header {
- text-shadow: none;
-}
-
-.ac-type-icon {
- /* Left-align the type icon in awesomebar popup results with the icon in the
- urlbar. */
- margin-inline-start: 11px;
-}
diff --git a/application/basilisk/themes/linux/jar.mn b/application/basilisk/themes/linux/jar.mn
index e9f666418..81581dfaa 100644
--- a/application/basilisk/themes/linux/jar.mn
+++ b/application/basilisk/themes/linux/jar.mn
@@ -13,7 +13,6 @@ browser.jar:
#endif
skin/classic/browser/actionicon-tab.png
* skin/classic/browser/browser.css
-* skin/classic/browser/devedition.css
* skin/classic/browser/browser-lightweightTheme.css
skin/classic/browser/click-to-play-warning-stripes.png
skin/classic/browser/Info.png
diff --git a/application/basilisk/themes/osx/devedition.css b/application/basilisk/themes/osx/devedition.css
deleted file mode 100644
index c7a2bdd71..000000000
--- a/application/basilisk/themes/osx/devedition.css
+++ /dev/null
@@ -1,121 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-%include ../shared/devedition.inc.css
-
-:root {
- --forwardbutton-width: 32px;
-}
-
-/* Use only 1px separator between nav toolbox and page content */
-#navigator-toolbox::after {
- border-top-style: none;
- margin-top: -1px;
-}
-
-/* Include extra space on left/right for dragging since there is no space above
- the tabs */
-#main-window[tabsintitlebar] #TabsToolbar {
- padding-left: 50px;
- padding-right: 50px;
- margin-bottom: 0; /* Don't overlap the inner highlight at the top of the nav-bar */
-}
-
-/* Get rid of 1px bright strip at the top of window */
-#main-window[tabsintitlebar] #titlebar-content {
- background: var(--chrome-background-color);
-}
-
-/* Resize things so that the native titlebar is in line with the tabs */
-#main-window[tabsintitlebar] > #titlebar > #titlebar-content > #titlebar-buttonbox-container,
-#main-window[tabsintitlebar] > #titlebar > #titlebar-content > #titlebar-secondary-buttonbox > #titlebar-fullscreen-button {
- margin-top: 6px;
-}
-
-/* Square back and forward buttons. Need !important on these because there
- are a lot of more specific selectors sprinkled around elsewhere for changing
- background / shadows for different states */
-#back-button,
-#forward-button {
- height: 24px !important;
- box-shadow: none !important;
- border: 1px solid var(--chrome-nav-bar-controls-border-color) !important;
- background: var(--chrome-nav-buttons-background) !important;
-}
-
-#forward-button {
- border-inline-start: none !important;
- /* browser.css and friends set up the width of the button to be 32px.
- * They then set margin-left to -2px to ensure the button is not too wide
- * compared to the back button, and set padding-left to center the icon
- * correctly.
- * In our theme, the back and forward buttons are the same width, with the
- * back button being 32px with 1px border on both sides. To ensure the
- * forward button's content box looks like it is the same size with width
- * set to 32px and a 1px border on only 1 side, we overlap by 1px, so both
- * buttons end up with a content box that looks like it's 30px.
- */
- margin-left: -1px;
- padding-left: 1px;
-}
-
-#forward-button > .toolbarbutton-icon {
- margin-left: 0;
- margin-right: 0;
-}
-
-#back-button:hover:not([disabled="true"]),
-#forward-button:hover:not([disabled="true"]) {
- background: var(--chrome-nav-buttons-hover-background) !important;
-}
-
-#back-button {
- border-radius: 3px 0 0 3px !important;
- padding: 0 !important;
- margin: 0 !important;
-}
-
-#back-button:hover:active:not([disabled="true"]) {
- -moz-image-region: rect(18px, 54px, 36px, 36px);
-}
-
-/* Use smaller back button icon */
-@media (min-resolution: 2dppx) {
- #back-button:hover:active:not([disabled="true"]) {
- -moz-image-region: rect(36px, 108px, 72px, 72px);
- }
-}
-
-/* Don't use the default background for tabs toolbar */
-#TabsToolbar {
- -moz-appearance: none !important;
-}
-
-/* Prevent the hover styling from on the identity icon from overlapping the
- urlbar border. */
-#identity-box {
- margin-top: -1px !important;
- margin-bottom: -1px !important;
- padding-top: 3px !important;
- padding-bottom: 3px !important;
-}
-
-:root[devtoolstheme="dark"] .findbar-closebutton:not(:hover),
-/* Tab styling - make sure to use an inverted icon for the selected tab
- (brighttext only covers the unselected tabs) */
-.tab-close-button[selected=true]:not(:hover) {
- -moz-image-region: rect(0, 64px, 16px, 48px);
-}
-@media (min-resolution: 2dppx) {
- :root[devtoolstheme="dark"] .findbar-closebutton:not(:hover),
- .tab-close-button[selected=true]:not(:hover) {
- -moz-image-region: rect(0, 128px, 32px, 96px);
- }
-}
-
-.ac-type-icon {
- /* Left-align the type icon in awesomebar popup results with the icon in the
- urlbar. */
- margin-inline-start: 14px;
-}
diff --git a/application/basilisk/themes/osx/jar.mn b/application/basilisk/themes/osx/jar.mn
index 92d2ceedf..5dec6559a 100644
--- a/application/basilisk/themes/osx/jar.mn
+++ b/application/basilisk/themes/osx/jar.mn
@@ -13,7 +13,6 @@ browser.jar:
skin/classic/browser/actionicon-tab.png
skin/classic/browser/actionicon-tab@2x.png
* skin/classic/browser/browser.css
-* skin/classic/browser/devedition.css
* skin/classic/browser/browser-lightweightTheme.css
skin/classic/browser/click-to-play-warning-stripes.png
skin/classic/browser/Info.png
diff --git a/application/basilisk/themes/shared/devedition.inc.css b/application/basilisk/themes/shared/devedition.inc.css
deleted file mode 100644
index a5c0db948..000000000
--- a/application/basilisk/themes/shared/devedition.inc.css
+++ /dev/null
@@ -1,311 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-/* devedition.css is loaded in browser.xul after browser.css when it is
- preffed on. The bulk of the styling is here in the shared file, but
- there are overrides for each platform in their devedition.css files. */
-
-:root {
- --tab-toolbar-navbar-overlap: 0px;
- --navbar-tab-toolbar-highlight-overlap: 0px;
- --space-above-tabbar: 0px;
- --toolbarbutton-text-shadow: none;
- --backbutton-urlbar-overlap: 0px;
-}
-
-:root[devtoolstheme="dark"] {
- /* Chrome */
- --chrome-background-color: #272b35;
- --chrome-color: #F5F7FA;
- --chrome-secondary-background-color: #393F4C;
- --chrome-navigator-toolbox-separator-color: rgba(0,0,0,.2);
- --chrome-nav-bar-separator-color: rgba(0,0,0,.2);
- --chrome-nav-buttons-background: #252C33;
- --chrome-nav-buttons-hover-background: #1B2127;
- --chrome-nav-bar-controls-border-color: #1D2328;
- --chrome-selection-color: #fff;
- --chrome-selection-background-color: #5675B9;
-
- /* Tabs */
- --tabs-toolbar-color: #F5F7FA;
- --tab-background-color: #272b35;
- --tab-hover-background-color: #07090a;
- --tab-selection-color: #f5f7fa;
- --tab-selection-background-color: #5675B9;
- --tab-selection-box-shadow: none;
- --pinned-tab-glow: radial-gradient(22px at center calc(100% - 2px), rgba(76,158,217,0.9) 13%, rgba(0,0,0,0.4) 16%, transparent 70%);
-
- /* Url and search bars */
- --url-and-searchbar-background-color: #171B1F;
- --urlbar-separator-color: #5F6670;
- --urlbar-dropmarker-url: url("chrome://browser/skin/devedition/urlbar-history-dropmarker.svg");
- --urlbar-dropmarker-region: rect(0px, 11px, 14px, 0px);
- --urlbar-dropmarker-hover-region: rect(0, 22px, 14px, 11px);
- --urlbar-dropmarker-active-region: rect(0px, 33px, 14px, 22px);
- --urlbar-dropmarker-2x-url: url("chrome://browser/skin/devedition/urlbar-history-dropmarker.svg");
- --urlbar-dropmarker-2x-region: rect(0px, 11px, 14px, 0px);
- --urlbar-dropmarker-hover-2x-region: rect(0, 22px, 14px, 11px);
- --urlbar-dropmarker-active-2x-region: rect(0px, 33px, 14px, 22px);
-}
-
-/* Override the lwtheme-specific styling for toolbar buttons */
-:root[devtoolstheme="dark"],
-:root[devtoolstheme="dark"] toolbar:-moz-lwtheme {
- --toolbarbutton-hover-background: rgba(25,33, 38,.6) linear-gradient(rgba(25,33,38,.6), rgba(25,33,38,.6)) padding-box;
- --toolbarbutton-hover-boxshadow: none;
- --toolbarbutton-hover-bordercolor: rgba(25,33,38,.6);
- --toolbarbutton-active-background: rgba(25,33,38,1) linear-gradient(rgba(25,33,38,1), rgba(25,33,38,1)) border-box;
- --toolbarbutton-active-boxshadow: none;
- --toolbarbutton-active-bordercolor: rgba(25,33,38,.8);
- --toolbarbutton-checkedhover-backgroundcolor: #3C5283;
-
-}
-
-:root[devtoolstheme="light"] {
- --url-and-searchbar-background-color: #fff;
-
- --chrome-background-color: #E3E4E6;
- --chrome-color: #18191a;
- --chrome-secondary-background-color: #f5f6f7;
- --chrome-navigator-toolbox-separator-color: #cccccc;
- --chrome-nav-bar-separator-color: #B6B6B8;
- --chrome-nav-buttons-background: #ffffff; /* --theme-body-background */
- --chrome-nav-buttons-hover-background: #DADBDB;
- --chrome-nav-bar-controls-border-color: #ccc;
- --chrome-selection-color: #f5f7fa;
- --chrome-selection-background-color: #4c9ed9;
-
- --tab-background-color: #E3E4E6;
- --tab-hover-background-color: #D7D8DA;
- --tab-selection-color: #f5f7fa;
- --tab-selection-background-color: #4c9ed9;
- --tab-selection-box-shadow: none;
- --pinned-tab-glow: radial-gradient(22px at center calc(100% - 2px), rgba(76,158,217,0.9) 13%, transparent 16%);
-}
-
-/* Override the lwtheme-specific styling for toolbar buttons */
-:root[devtoolstheme="light"],
-:root[devtoolstheme="light"] toolbar:-moz-lwtheme {
- --toolbarbutton-hover-background: #eaeaea;
- --toolbarbutton-hover-boxshadow: none;
- --toolbarbutton-hover-bordercolor: rgba(0,0,0,0.1);
- --toolbarbutton-active-background: #d7d7d8 border-box;
- --toolbarbutton-active-boxshadow: none;
- --toolbarbutton-active-bordercolor: rgba(0,0,0,0.15);
- --toolbarbutton-checkedhover-backgroundcolor: #d7d7d8;
-}
-
-/* Give some space to drag the window around while customizing
- (normal space to left and right of tabs doesn't work in this case) */
-#main-window[tabsintitlebar][customizing] {
- --space-above-tabbar: 9px;
-}
-
-/* Override @tabCurveHalfWidth@ and @tabCurveWidth@. XXX: Switch to a CSS variable once the perf is sorted out - bug 1088771 */
-.tab-background-middle {
- border-left-width: 0;
- border-right-width: 0;
- margin: 0;
-}
-
-.tab-background,
-.tabs-newtab-button {
- margin-inline-end: 0;
- margin-inline-start: 0;
-}
-
-.tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox {
- padding-inline-end: 0;
- padding-inline-start: 0;
-}
-
-.tab-background-start[selected=true]::after,
-.tab-background-start[selected=true]::before,
-.tab-background-start,
-.tab-background-end,
-.tab-background-end[selected=true]::after,
-.tab-background-end[selected=true]::before {
- width: 0;
-}
-
-.tab-background-start[selected=true]::after,
-.tab-background-end[selected=true]::after {
- margin-inline-start: 0;
-}
-/* End override @tabCurveHalfWidth@ and @tabCurveWidth@ */
-
-#urlbar ::-moz-selection,
-#navigator-toolbox .searchbar-textbox ::-moz-selection,
-.browserContainer > findbar ::-moz-selection {
- background-color: var(--chrome-selection-background-color);
- color: var(--chrome-selection-color);
-}
-
-/* Change the base colors for the browser chrome */
-
-#tabbrowser-tabs,
-#TabsToolbar,
-#browser-panel {
- background: var(--chrome-background-color);
- color: var(--chrome-color);
-}
-
-#navigator-toolbox:-moz-lwtheme::after {
- border-bottom-color: var(--chrome-navigator-toolbox-separator-color);
-}
-
-#navigator-toolbox > toolbar:not(#TabsToolbar):not(#toolbar-menubar),
-.browserContainer > findbar,
-#browser-bottombox {
- background-color: var(--chrome-secondary-background-color) !important;
- background-image: none !important;
- color: var(--chrome-color);
-}
-
-/* Default findbar text color doesn't look good - Bug 1125677 */
-.browserContainer > findbar .findbar-find-status,
-.browserContainer > findbar .found-matches {
- color: inherit;
-}
-
-#navigator-toolbox .toolbarbutton-1,
-.browserContainer > findbar .findbar-button,
-#PlacesToolbar toolbarbutton.bookmark-item {
- color: var(--chrome-color);
- text-shadow: var(--toolbarbutton-text-shadow);
-}
-
-/* Using toolbar[brighttext] instead of important to override linux */
-toolbar[brighttext] #downloads-indicator-counter {
- text-shadow: var(--toolbarbutton-text-shadow);
- color: var(--chrome-color);
-}
-
-#TabsToolbar {
- text-shadow: none !important;
-}
-
-/* URL bar and search bar*/
-#urlbar,
-#navigator-toolbox .searchbar-textbox {
- background-color: var(--url-and-searchbar-background-color) !important;
- background-image: none !important;
- color: inherit !important;
- border: 1px solid var(--chrome-nav-bar-controls-border-color) !important;
- box-shadow: none !important;
-}
-
-%filter substitution
-%define selectorPrefix :root[devtoolstheme="dark"]
-%define selectorSuffix :-moz-lwtheme
-%define iconVariant -white
-%include identity-block/icons.inc.css
-
-#urlbar {
- border-inline-start: none !important;
- opacity: 1 !important;
-}
-
-window:not([chromehidden~="toolbar"]) #urlbar-wrapper {
- overflow: -moz-hidden-unscrollable;
- clip-path: none;
- margin-inline-start: 0;
-}
-
-:root[devtoolstheme="dark"] #urlbar-zoom-button:hover {
- background-color: rgba(255,255,255,.2);
-}
-
-:root[devtoolstheme="dark"] #urlbar-zoom-button:hover:active {
- background-color: rgba(255,255,255,.3);
-}
-
-/* Nav bar specific stuff */
-#nav-bar {
- margin-top: 0 !important;
- border-top: none !important;
- border-bottom: none !important;
- border-radius: 0 !important;
- box-shadow: 0 -1px var(--chrome-nav-bar-separator-color) !important;
-}
-
-/* No extra vertical padding for nav bar */
-#nav-bar-customization-target,
-#nav-bar {
- padding-top: 0;
- padding-bottom: 0;
-}
-
-/* Use smaller back button icon */
-#back-button {
- -moz-image-region: rect(0, 54px, 18px, 36px);
-}
-
-@media (min-resolution: 1.1dppx) {
- #back-button {
- -moz-image-region: rect(0, 108px, 36px, 72px);
- }
-}
-
-.tab-background {
- visibility: hidden;
-}
-
-/* Tab separators */
-.tabbrowser-tab::after,
-.tabbrowser-tab::before {
- background: currentColor;
- opacity: 0.2 !important;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down,
-.tabbrowser-arrowscrollbox > .scrollbutton-up {
- background-color: var(--tab-background-color);
- border-color: transparent;
-}
-
-.tabbrowser-tab {
- /* We normally rely on other tab elements for pointer events, but this
- theme hides those so we need it set here instead */
- pointer-events: auto;
-}
-
-.tabbrowser-tab:-moz-any([image], [pinned]) > .tab-stack > .tab-content[attention]:not([selected="true"]),
-.tabbrowser-tab > .tab-stack > .tab-content[pinned][titlechanged]:not([selected="true"]) {
- background-image: var(--pinned-tab-glow);
- background-position: center;
- background-size: 100%;
-}
-
-.tabbrowser-tab[image] > .tab-stack > .tab-content[attention]:not([pinned]):not([selected="true"]) {
- background-position: left bottom var(--tab-toolbar-navbar-overlap);
- background-size: 34px 100%;
-}
-
-.tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):hover,
-.tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):hover,
-.tabbrowser-tab:hover {
- background-color: var(--tab-hover-background-color);
-}
-
-.tabbrowser-tab[visuallyselected] {
- color: var(--tab-selection-color) !important; /* Override color: inherit */
- background-color: var(--tab-selection-background-color);
-}
-
-.tab-icon-sound[soundplaying],
-.tab-icon-sound[muted] {
- filter: url(chrome://browser/skin/filters.svg#fill) !important; /* removes drop-shadow filter */
-}
-
-/* Don't need space for the tab curves (66px - 30px) */
-.tabs-newtab-button {
- width: 36px;
-}
-
-.tabs-newtab-button:hover {
- /* Important needed because !important is used in browser.css */
- background-color: var(--tab-hover-background-color) !important;
- background-image: none;
-}
diff --git a/application/basilisk/themes/shared/devedition/urlbar-history-dropmarker.svg b/application/basilisk/themes/shared/devedition/urlbar-history-dropmarker.svg
deleted file mode 100644
index 115fbf127..000000000
--- a/application/basilisk/themes/shared/devedition/urlbar-history-dropmarker.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="33" height="14" viewBox="0 0 33 14">
- <defs>
- <polygon points="0,0 5.5,7 11,0" id="dropmarker-shape"/>
- </defs>
- <style>
- use {
- fill: #b6babf;
- }
- .hover {
- fill: #61bdeb;
- }
- .active {
- fill: #39ace6;
- }
- </style>
- <use xlink:href="#dropmarker-shape" style="transform: translate(0, 4px)"/>
- <use xlink:href="#dropmarker-shape" style="transform: translate(11px, 4px)" class="hover"/>
- <use xlink:href="#dropmarker-shape" style="transform: translate(22px, 4px)" class="active"/>
-</svg>
diff --git a/application/basilisk/themes/shared/jar.inc.mn b/application/basilisk/themes/shared/jar.inc.mn
index 5750d2dc5..d12971a4b 100644
--- a/application/basilisk/themes/shared/jar.inc.mn
+++ b/application/basilisk/themes/shared/jar.inc.mn
@@ -137,6 +137,5 @@
skin/classic/browser/privatebrowsing/private-browsing.svg (../shared/privatebrowsing/private-browsing.svg)
skin/classic/browser/privatebrowsing/tracking-protection-off.svg (../shared/privatebrowsing/tracking-protection-off.svg)
skin/classic/browser/privatebrowsing/tracking-protection.svg (../shared/privatebrowsing/tracking-protection.svg)
- skin/classic/browser/devedition/urlbar-history-dropmarker.svg (../shared/devedition/urlbar-history-dropmarker.svg)
skin/classic/browser/urlbar-star.svg (../shared/urlbar-star.svg)
skin/classic/browser/urlbar-tab.svg (../shared/urlbar-tab.svg)
diff --git a/application/basilisk/themes/windows/browser.css b/application/basilisk/themes/windows/browser.css
index 334265e60..9a965520a 100644
--- a/application/basilisk/themes/windows/browser.css
+++ b/application/basilisk/themes/windows/browser.css
@@ -193,9 +193,6 @@ toolbar:-moz-lwtheme {
@media not all and (-moz-windows-compositor),
not all and (-moz-windows-default-theme) {
- /* Please keep the menu text colors in this media block in sync with
- * devedition.css, minus the :not(:-moz-lwtheme) condition - see Bug 1165718.
- */
:root[tabsintitlebar]:not([inFullscreen]):not(:-moz-lwtheme) {
--titlebar-text-color: CaptionText;
}
diff --git a/application/basilisk/themes/windows/devedition.css b/application/basilisk/themes/windows/devedition.css
deleted file mode 100644
index bdf4bb80e..000000000
--- a/application/basilisk/themes/windows/devedition.css
+++ /dev/null
@@ -1,316 +0,0 @@
-% This Source Code Form is subject to the terms of the Mozilla Public
-% License, v. 2.0. If a copy of the MPL was not distributed with this
-% file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-%include ../shared/devedition.inc.css
-
-:root {
- --forwardbutton-width: 29px;
-}
-
-:root[devtoolstheme="dark"],
-:root[devtoolstheme="light"] {
- /* Matches the #browser-border-start, #browser-border-end color */
- --chrome-nav-bar-separator-color: rgba(10, 31, 51, 0.35);
-}
-
-/* The window background is white due to no accentcolor in the lightweight
- theme. It can't be changed to transparent when there is no compositor
- (Win 7 in classic / basic theme), or else dragging and focus become
- broken. So instead just show the normal titlebar in that case, and override
- the window color as transparent when the compositor is available. */
-@media not all and (-moz-windows-compositor) {
- #main-window[tabsintitlebar] #titlebar:-moz-lwtheme {
- visibility: visible;
- }
-
- #main-window {
- background: var(--chrome-background-color) !important;
- }
-}
-
-@media (-moz-windows-compositor) {
- #main-window {
- background: transparent !important;
- }
-}
-
-#TabsToolbar::after {
- display: none;
-}
-
-#back-button > .toolbarbutton-icon,
-#forward-button > .toolbarbutton-icon {
- background: var(--chrome-nav-buttons-background) !important;
- border-radius: 0 !important;
- height: auto !important;
- padding: var(--toolbarbutton-vertical-inner-padding) 5px !important;
- margin: 0 !important;
- border: 1px solid var(--chrome-nav-bar-controls-border-color) !important;
- box-shadow: none !important;
-}
-
-#back-button > .toolbarbutton-icon {
- /* 18px icon + 2 * 5px padding + 2 * 1px border */
- width: 30px !important;
-}
-
-#forward-button > .toolbarbutton-icon {
- /* 18px icon + 2 * 5px padding + 1 * 1px border */
- width: 29px !important;
-}
-
-/* the normal theme adds box-shadow: <stuff> !important when the back-button is [open]. Fix: */
-#back-button[open="true"] > .toolbarbutton-icon {
- box-shadow: none !important;
-}
-
-#forward-button > .toolbarbutton-icon {
- border-inline-start: none !important;
-}
-
-/* Override a box shadow for disabled back button */
-#main-window:not([customizing]) #back-button[disabled] > .toolbarbutton-icon {
- box-shadow: none !important;
-}
-
-/* Override !important properties for hovered back button */
-#main-window #back-button:hover:not([disabled="true"]) > .toolbarbutton-icon,
-#main-window #forward-button:hover:not([disabled="true"]) > .toolbarbutton-icon {
- background: var(--chrome-nav-buttons-hover-background) !important;
- box-shadow: none !important;
-}
-
-#back-button > .toolbarbutton-icon {
- border-radius: 2px 0 0 2px !important;
-}
-
-#nav-bar .toolbarbutton-1:not([type=menu-button]),
-#nav-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button,
-#nav-bar .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
- padding-top: 2px;
- padding-bottom: 2px;
-}
-
-.tabbrowser-tab {
- background-color: var(--tab-background-color);
-}
-
-#toolbar-menubar {
- text-shadow: none !important;
-}
-
-:root[devtoolstheme="dark"] .findbar-closebutton,
-:root[devtoolstheme="dark"] #sidebar-header > .close-icon,
-/* Tab styling - make sure to use an inverted icon for the selected tab
- (brighttext only covers the unselected tabs) */
-.tab-close-button[selected=true] {
- list-style-image: url("chrome://global/skin/icons/close-inverted.png");
-}
-
-@media (min-resolution: 1.1dppx) {
- :root[devtoolstheme="dark"] .findbar-closebutton,
- :root[devtoolstheme="dark"] #sidebar-header > .close-icon,
- .tab-close-button[selected=true] {
- list-style-image: url("chrome://global/skin/icons/close-inverted@2x.png");
- }
-}
-
-@media (-moz-os-version: windows-win7),
- (-moz-os-version: windows-win8) {
- :root {
- --space-above-tabbar: 15px;
- }
-
- /* It'd be nice if there was an element in the scrollbox's inner content
- that collapsed to the current width of the tabs. Since there isn't we
- need to handle overflowing and non-overflowing tabs separately.
-
- In the case of overflowing tabs, set a border-top on the entire container,
- otherwise we need to set it on each element individually */
- #main-window[sizemode=normal] .tabbrowser-tabs[overflow="true"] {
- background-clip: padding-box;
- border-top: 1px solid var(--chrome-nav-bar-separator-color);
- border-inline-end: 1px solid var(--chrome-nav-bar-separator-color);
- background-color: var(--tab-background-color); /* Make sure there is no transparent gap during tab close animation */
- }
-
- /* Add a border to the left of the first tab (or scroll arrow). Using .tabbrowser-tabs
- instead of #TabsToolbar because it will work even in customize mode. */
- #main-window[sizemode=normal] .tabbrowser-tabs {
- background-clip: padding-box;
- border-inline-start: 1px solid var(--chrome-nav-bar-separator-color);
- border-inline-end: 1px solid transparent;
- }
-
- #main-window[sizemode=normal] .tabbrowser-tabs:not([overflow="true"]) .tabbrowser-tab,
- #main-window[sizemode=normal] .tabbrowser-tabs:not([overflow="true"]) .tabbrowser-arrowscrollbox > .scrollbutton-down,
- #main-window[sizemode=normal] .tabbrowser-tabs:not([overflow="true"]) .tabbrowser-arrowscrollbox > .scrollbutton-up,
- #main-window[sizemode=normal] .tabbrowser-tabs:not([overflow="true"]) .tabs-newtab-button {
- background-clip: padding-box;
- border-top: 1px solid var(--chrome-nav-bar-separator-color);
- }
-
- /* Allow the border-top rule to take effect */
- #main-window[sizemode=normal] .tabbrowser-tabs:not([overflow="true"]) .tabbrowser-tab {
- -moz-border-top-colors: none;
- }
-
- #main-window[sizemode=normal] .tabbrowser-tabs:not([overflow="true"]) .closing-tabs-spacer {
- background-clip: padding-box;
- border-inline-start: 1px solid var(--chrome-nav-bar-separator-color);
- }
-
- .tabs-newtab-button {
- background: var(--tab-background-color);
- }
-
- /* Use default window colors when in non-maximized mode */
- #tabbrowser-tabs,
- #TabsToolbar,
- #browser-panel,
- #titlebar-content {
- background: transparent;
- }
-
- /* Ensure that the entire background is styled when maximized/fullscreen */
- #main-window:not([sizemode="normal"]):not([customizing]) #browser-panel {
- background: var(--chrome-background-color) !important;
- }
-
- /* The menu items need to be visible when the entire background is styled */
- #main-window:not([sizemode="normal"]) #main-menubar {
- color: var(--chrome-color);
- background-color: transparent;
- }
-
- #main-window[sizemode="maximized"] #main-menubar > menu:not(:-moz-window-inactive) {
- color: inherit;
- }
-
- /* Use proper menu text styling in Win7 classic mode (copied from browser.css) */
- @media not all and (-moz-windows-compositor),
- not all and (-moz-windows-default-theme) {
- :root[tabsintitlebar]:not([inFullscreen]) {
- --titlebar-text-color: CaptionText;
- }
-
- :root[tabsintitlebar]:not([inFullscreen]):-moz-window-inactive {
- --titlebar-text-color: InactiveCaptionText;
- }
-
- #main-window[tabsintitlebar] #main-menubar > menu {
- color: inherit;
- }
- }
-
- /* Use less opacity than normal since this is very dark, and on top of the default toolbar color */
- .tabbrowser-arrowscrollbox > .scrollbutton-up[disabled],
- .tabbrowser-arrowscrollbox > .scrollbutton-down[disabled] {
- opacity: .6;
- }
-
- /* Override scrollbutton gradients in normal and hover state */
- .tabbrowser-arrowscrollbox > .scrollbutton-down,
- .tabbrowser-arrowscrollbox > .scrollbutton-up {
- background-image: none !important;
- transition: none; /* scrollbutton-down has an unwanted transition on background color */
- }
-
- /* Restore draggable space on the sides of tabs when maximized */
- #main-window[sizemode="maximized"] .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox {
- padding-left: 15px;
- padding-right: 15px;
- }
-
- /* Override the padding that's intended to compensate for tabs that can overlap border-radius on nav-bar in default theme. */
- #main-window[sizemode=normal]:not([customizing]) #TabsToolbar {
- padding-left: 0;
- padding-right: 0;
- }
-}
-
-/* Restored windows get an artificial border on windows, because the lwtheme background
- * overlaps the regular window border. That isn't the case for us, so we avoid painting
- * over the native border with our custom borders: */
-#browser-panel {
- /* These are !important to avoid specificity-wars with the selectors that add borders here. */
- background-image: none !important;
- border-top: none !important;
-}
-
-#navigator-toolbox {
- /* The side borders on the toolbox also look out-of-place because we don't paint over
- * the native background color at all, and these are !important for the same reason as above. */
- border-left: none !important;
- border-right: none !important;
-}
-
-/* Disable dragging like in the default theme: */
-#main-window[tabsintitlebar] #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar):-moz-lwtheme {
- -moz-window-dragging: no-drag;
-}
-
-/* The sidebar header has no background now that the background of the #browser-panel
- * has no image and is transparent. Fix: */
-.sidebar-header:-moz-lwtheme,
-#sidebar-header {
- background-color: var(--chrome-background-color);
- color: var(--chrome-color);
-}
-
-@media (-moz-os-version: windows-win7),
- (-moz-os-version: windows-win8) {
- /* And then we add them back on toolbars so that they don't look borderless: */
- #main-window:not([customizing])[sizemode=normal] #navigator-toolbox::after,
- #main-window:not([customizing])[sizemode=normal] #navigator-toolbox > toolbar:not(#toolbar-menubar):not(#TabsToolbar) {
- border-left: 1px solid hsla(209,67%,12%,0.35);
- border-right: 1px solid hsla(209,67%,12%,0.35);
- }
-}
-
-@media (-moz-os-version: windows-win10) {
- /* Always keep draggable space on the sides of tabs since there is no top margin on Win10 */
- #main-window .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox {
- padding-left: 15px;
- padding-right: 15px;
- }
-
- /* Force white caption buttons for the dark theme on Windows 10 */
- :root[devtoolstheme="dark"] #titlebar-min {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize-white);
- }
- :root[devtoolstheme="dark"] #titlebar-max {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize-white);
- }
- #main-window[devtoolstheme="dark"][sizemode="maximized"] #titlebar-max {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore-white);
- }
- :root[devtoolstheme="dark"] #titlebar-close {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-white);
- }
-
- /* ... and normal ones for the light theme on Windows 10 */
- :root[devtoolstheme="light"] #titlebar-min {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#minimize);
- }
- :root[devtoolstheme="light"] #titlebar-max {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#maximize);
- }
- #main-window[devtoolstheme="light"][sizemode="maximized"] #titlebar-max {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#restore);
- }
- :root[devtoolstheme="light"] #titlebar-close {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#close);
- }
-
- :root[devtoolstheme="light"] #titlebar-close:hover {
- list-style-image: url(chrome://browser/skin/caption-buttons.svg#close-white);
- }
-}
-
-.ac-type-icon {
- /* Left-align the type icon in awesomebar popup results with the icon in the
- urlbar. */
- margin-inline-start: 13px;
-}
diff --git a/application/basilisk/themes/windows/jar.mn b/application/basilisk/themes/windows/jar.mn
index 28c6c6465..b0b9ca454 100644
--- a/application/basilisk/themes/windows/jar.mn
+++ b/application/basilisk/themes/windows/jar.mn
@@ -14,7 +14,6 @@ browser.jar:
skin/classic/browser/actionicon-tab@2x.png
skin/classic/browser/actionicon-tab-win7.png
* skin/classic/browser/browser.css
-* skin/classic/browser/devedition.css
* skin/classic/browser/browser-lightweightTheme.css
skin/classic/browser/caption-buttons.svg
skin/classic/browser/click-to-play-warning-stripes.png
diff --git a/application/basilisk/tools/mozscreenshots/mozscreenshots/extension/configurations/DevEdition.jsm b/application/basilisk/tools/mozscreenshots/mozscreenshots/extension/configurations/DevEdition.jsm
deleted file mode 100644
index fd981bca3..000000000
--- a/application/basilisk/tools/mozscreenshots/mozscreenshots/extension/configurations/DevEdition.jsm
+++ /dev/null
@@ -1,42 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-this.EXPORTED_SYMBOLS = ["DevEdition"];
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-const THEME_ID = "firefox-devedition@mozilla.org";
-
-Cu.import("resource://gre/modules/LightweightThemeManager.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/Task.jsm");
-
-this.DevEdition = {
- init(libDir) {},
-
- configurations: {
- devEditionLight: {
- applyConfig: Task.async(() => {
- Services.prefs.setCharPref("devtools.theme", "light");
- LightweightThemeManager.currentTheme = LightweightThemeManager.getUsedTheme(THEME_ID);
- Services.prefs.setBoolPref("browser.devedition.theme.showCustomizeButton", true);
- }),
- },
- devEditionDark: {
- applyConfig: Task.async(() => {
- Services.prefs.setCharPref("devtools.theme", "dark");
- LightweightThemeManager.currentTheme = LightweightThemeManager.getUsedTheme(THEME_ID);
- Services.prefs.setBoolPref("browser.devedition.theme.showCustomizeButton", true);
- }),
- },
- devEditionOff: {
- applyConfig: Task.async(() => {
- Services.prefs.clearUserPref("devtools.theme");
- LightweightThemeManager.currentTheme = null;
- Services.prefs.clearUserPref("browser.devedition.theme.showCustomizeButton");
- }),
- },
- },
-};
diff --git a/application/palemoon/app/Makefile.in b/application/palemoon/app/Makefile.in
index c0f01212c..d008010ec 100644
--- a/application/palemoon/app/Makefile.in
+++ b/application/palemoon/app/Makefile.in
@@ -80,26 +80,26 @@ MAC_BUNDLE_VERSION = $(shell $(PYTHON) $(srcdir)/macversion.py --version=$(MOZ_A
.PHONY: repackage
tools repackage:: $(PROGRAM)
- $(MKDIR) -p $(dist_dest)/Contents/MacOS
- $(MKDIR) -p $(dist_dest)/Contents/Resources/$(AB).lproj
- rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents $(dist_dest) --exclude English.lproj
- rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents/Resources/English.lproj/ $(dist_dest)/Contents/Resources/$(AB).lproj
- sed -e 's/%APP_VERSION%/$(MOZ_APP_VERSION)/' -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' -e 's/%MOZ_MACBUNDLE_ID%/$(MOZ_MACBUNDLE_ID)/' -e 's/%MAC_BUNDLE_VERSION%/$(MAC_BUNDLE_VERSION)/' $(srcdir)/macbuild/Contents/Info.plist.in > $(dist_dest)/Contents/Info.plist
- sed -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | iconv -f UTF-8 -t UTF-16 > $(dist_dest)/Contents/Resources/$(AB).lproj/InfoPlist.strings
- rsync -a --exclude-from='$(srcdir)/macbuild/Contents/MacOS-files.in' $(DIST)/bin/ $(dist_dest)/Contents/Resources
- rsync -a --include-from='$(srcdir)/macbuild/Contents/MacOS-files.in' --exclude '*' $(DIST)/bin/ $(dist_dest)/Contents/MacOS
- $(RM) $(dist_dest)/Contents/MacOS/$(PROGRAM)
- rsync -aL $(PROGRAM) $(dist_dest)/Contents/MacOS
- cp -RL $(DIST)/branding/firefox.icns $(dist_dest)/Contents/Resources/firefox.icns
- cp -RL $(DIST)/branding/document.icns $(dist_dest)/Contents/Resources/document.icns
- printf APPLMOZB > $(dist_dest)/Contents/PkgInfo
+ $(MKDIR) -p '$(dist_dest)/Contents/MacOS'
+ $(MKDIR) -p '$(dist_dest)/Contents/Resources/$(AB).lproj'
+ rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents '$(dist_dest)' --exclude English.lproj
+ rsync -a --exclude '*.in' $(srcdir)/macbuild/Contents/Resources/English.lproj/ '$(dist_dest)/Contents/Resources/$(AB).lproj'
+ sed -e 's/%APP_VERSION%/$(MOZ_APP_VERSION)/' -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' -e 's/%MOZ_MACBUNDLE_ID%/$(MOZ_MACBUNDLE_ID)/' -e 's/%MAC_BUNDLE_VERSION%/$(MAC_BUNDLE_VERSION)/' $(srcdir)/macbuild/Contents/Info.plist.in > '$(dist_dest)/Contents/Info.plist'
+ sed -e 's/%MAC_APP_NAME%/$(MAC_APP_NAME)/' $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | iconv -f UTF-8 -t UTF-16 > '$(dist_dest)/Contents/Resources/$(AB).lproj/InfoPlist.strings'
+ rsync -a --exclude-from='$(srcdir)/macbuild/Contents/MacOS-files.in' $(DIST)/bin/ '$(dist_dest)/Contents/Resources'
+ rsync -a --include-from='$(srcdir)/macbuild/Contents/MacOS-files.in' --exclude '*' $(DIST)/bin/ '$(dist_dest)/Contents/MacOS'
+ $(RM) '$(dist_dest)/Contents/MacOS/$(PROGRAM)'
+ rsync -aL $(PROGRAM) '$(dist_dest)/Contents/MacOS'
+ cp -RL $(DIST)/branding/firefox.icns '$(dist_dest)/Contents/Resources/firefox.icns'
+ cp -RL $(DIST)/branding/document.icns '$(dist_dest)/Contents/Resources/document.icns'
+ printf APPLMOZB > '$(dist_dest)/Contents/PkgInfo'
endif
ifdef LIBXUL_SDK #{
ifndef SKIP_COPY_XULRUNNER #{
libs::
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT)) #{
- rsync -a --copy-unsafe-links $(LIBXUL_DIST)/XUL.framework $(dist_dest)/Contents/Frameworks
+ rsync -a --copy-unsafe-links $(LIBXUL_DIST)/XUL.framework '$(dist_dest)/Contents/Frameworks'
else
$(NSINSTALL) -D $(DIST)/bin/xulrunner
(cd $(LIBXUL_SDK)/bin && tar $(TAR_CREATE_FLAGS) - .) | (cd $(DIST)/bin/xulrunner && tar -xf -)
diff --git a/application/palemoon/base/content/browser-addons.js b/application/palemoon/base/content/browser-addons.js
index f5c398f33..630a0cf79 100644
--- a/application/palemoon/base/content/browser-addons.js
+++ b/application/palemoon/base/content/browser-addons.js
@@ -263,7 +263,7 @@ var AddonsMgrListener = {
onDisabled: function(aAddon) this.onUninstalled(),
};
-
+#ifdef MOZ_PERSONAS
var LightWeightThemeWebInstaller = {
handleEvent: function (event) {
switch (event.type) {
@@ -534,3 +534,4 @@ var LightweightThemeListener = {
this.updateStyleSheet("url(" + themeData.headerURL + ")");
},
};
+#endif
diff --git a/application/palemoon/base/content/browser.js b/application/palemoon/base/content/browser.js
index 16b7c0019..7615bc92a 100644
--- a/application/palemoon/base/content/browser.js
+++ b/application/palemoon/base/content/browser.js
@@ -1216,9 +1216,11 @@ var gBrowserInit = {
placesContext.addEventListener("popuphiding", updateEditUIVisibility, false);
#endif
+#ifdef MOZ_PERSONAS
gBrowser.mPanelContainer.addEventListener("InstallBrowserTheme", LightWeightThemeWebInstaller, false, true);
gBrowser.mPanelContainer.addEventListener("PreviewBrowserTheme", LightWeightThemeWebInstaller, false, true);
gBrowser.mPanelContainer.addEventListener("ResetBrowserThemePreview", LightWeightThemeWebInstaller, false, true);
+#endif
// Bug 666808 - AeroPeek support for e10s
if (!gMultiProcessBrowser) {
@@ -2443,16 +2445,12 @@ function BrowserOnAboutPageLoad(doc) {
// Inject search engine and snippets URL.
let docElt = doc.documentElement;
- // set the following attributes BEFORE searchEngineURL, which triggers to
- // show the snippets when it's set.
- docElt.setAttribute("snippetsURL", AboutHomeUtils.snippetsURL);
if (AboutHomeUtils.showKnowYourRights) {
docElt.setAttribute("showKnowYourRights", "true");
// Set pref to indicate we've shown the notification.
let currentVersion = Services.prefs.getIntPref("browser.rights.version");
Services.prefs.setBoolPref("browser.rights." + currentVersion + ".shown", true);
}
- docElt.setAttribute("snippetsVersion", AboutHomeUtils.snippetsVersion);
function updateSearchEngine() {
let engine = AboutHomeUtils.defaultSearchEngine;
diff --git a/application/palemoon/base/content/browser.xul b/application/palemoon/base/content/browser.xul
index ddc305a7b..0a249afa9 100644
--- a/application/palemoon/base/content/browser.xul
+++ b/application/palemoon/base/content/browser.xul
@@ -53,8 +53,10 @@
titlemodifier_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
#endif
titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
+#ifdef MOZ_PERSONAS
lightweightthemes="true"
lightweightthemesfooter="browser-bottombox"
+#endif
windowtype="navigator:browser"
macanimationtype="document"
screenX="4" screenY="4"
diff --git a/application/palemoon/branding/official/VisualElements_150.png b/application/palemoon/branding/official/VisualElements_150.png
index aa784449d..0100b7dde 100644
--- a/application/palemoon/branding/official/VisualElements_150.png
+++ b/application/palemoon/branding/official/VisualElements_150.png
Binary files differ
diff --git a/application/palemoon/branding/official/VisualElements_70.png b/application/palemoon/branding/official/VisualElements_70.png
index e785bfbc1..147a6f804 100644
--- a/application/palemoon/branding/official/VisualElements_70.png
+++ b/application/palemoon/branding/official/VisualElements_70.png
Binary files differ
diff --git a/application/palemoon/branding/official/configure.sh b/application/palemoon/branding/official/configure.sh
index a9818b4a7..8943f5819 100644
--- a/application/palemoon/branding/official/configure.sh
+++ b/application/palemoon/branding/official/configure.sh
@@ -2,5 +2,5 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-MOZ_APP_DISPLAYNAME=PaleMoon
+MOZ_APP_DISPLAYNAME="Pale Moon"
# MOZ_UA_BUILDID=20100101
diff --git a/application/palemoon/branding/official/content/about-logo.png b/application/palemoon/branding/official/content/about-logo.png
index 0a475c028..93536f033 100644
--- a/application/palemoon/branding/official/content/about-logo.png
+++ b/application/palemoon/branding/official/content/about-logo.png
Binary files differ
diff --git a/application/palemoon/branding/official/content/about-logo@2x.png b/application/palemoon/branding/official/content/about-logo@2x.png
index c9d9d43de..d87a62309 100644
--- a/application/palemoon/branding/official/content/about-logo@2x.png
+++ b/application/palemoon/branding/official/content/about-logo@2x.png
Binary files differ
diff --git a/application/palemoon/branding/official/content/about-wordmark.png b/application/palemoon/branding/official/content/about-wordmark.png
index bf09f15a0..1b849be2e 100644
--- a/application/palemoon/branding/official/content/about-wordmark.png
+++ b/application/palemoon/branding/official/content/about-wordmark.png
Binary files differ
diff --git a/application/palemoon/branding/official/content/about-wordmark.svg b/application/palemoon/branding/official/content/about-wordmark.svg
index 166ea2c37..708adaaec 100644
--- a/application/palemoon/branding/official/content/about-wordmark.svg
+++ b/application/palemoon/branding/official/content/about-wordmark.svg
@@ -1,77 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="314.56464"
- height="44.113129"
- id="svg2"
version="1.1"
- inkscape:version="0.92.1 r15371"
- sodipodi:docname="about-wordmark.svg">
+ id="svg2"
+ height="44.113129"
+ width="314.56464">
<defs
id="defs4">
<filter
- style="color-interpolation-filters:sRGB"
- inkscape:label="Drop Shadow"
- id="filter4610">
+ id="filter4610"
+ style="color-interpolation-filters:sRGB">
<feFlood
- flood-opacity="1"
- flood-color="rgb(252,252,247)"
+ id="feFlood4600"
result="flood"
- id="feFlood4600" />
+ flood-color="rgb(252,252,247)"
+ flood-opacity="1" />
<feComposite
- in="flood"
- in2="SourceGraphic"
- operator="in"
+ id="feComposite4602"
result="composite1"
- id="feComposite4602" />
+ operator="in"
+ in2="SourceGraphic"
+ in="flood" />
<feGaussianBlur
- in="composite1"
- stdDeviation="1"
+ id="feGaussianBlur4604"
result="blur"
- id="feGaussianBlur4604" />
+ stdDeviation="1"
+ in="composite1" />
<feOffset
- dx="2.77556e-017"
- dy="0"
+ id="feOffset4606"
result="offset"
- id="feOffset4606" />
+ dy="0"
+ dx="2.77556e-017" />
<feComposite
- in="SourceGraphic"
- in2="offset"
- operator="over"
+ id="feComposite4608"
result="composite2"
- id="feComposite4608" />
+ operator="over"
+ in2="offset"
+ in="SourceGraphic" />
</filter>
</defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#000000"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:zoom="1.979899"
- inkscape:cx="140.32026"
- inkscape:cy="-32.25665"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1169"
- inkscape:window-height="763"
- inkscape:window-x="66"
- inkscape:window-y="66"
- inkscape:window-maximized="0"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
@@ -85,95 +56,78 @@
</rdf:RDF>
</metadata>
<g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-29.067649,-53.687969)">
+ transform="translate(-29.067649,-53.687969)"
+ id="layer1">
<text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'Museo 500';-inkscape-font-specification:'Museo 500';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"
- x="34.479874"
+ id="text2985"
y="32.093662"
- id="text2985"><tspan
- sodipodi:role="line"
- id="tspan2987"
- x="34.479874"
+ x="34.479874"
+ style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0%;font-family:'Museo 500';-inkscape-font-specification:'Museo 500';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"
+ xml:space="preserve"><tspan
+ style="font-size:51.20000076px;line-height:1.25;stroke-width:1.06666672"
y="32.093662"
- style="font-size:51.20000076px;line-height:1.25;stroke-width:1.06666672"> </tspan></text>
+ x="34.479874"
+ id="tspan2987"> </tspan></text>
<flowRoot
- xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:'Museo 500';-inkscape-font-specification:'Museo 500';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"
id="flowRoot2989"
- style="font-style:normal;font-weight:normal;font-size:12.80000019px;line-height:0.01%;font-family:'Museo 500';-inkscape-font-specification:'Museo 500';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.06666672"><flowRegion
- id="flowRegion2991"
- style="stroke-width:1.06666672"><rect
- id="rect2993"
- width="698.21747"
- height="396.51855"
- x="47.409828"
+ xml:space="preserve"><flowRegion
+ style="stroke-width:1.06666672"
+ id="flowRegion2991"><rect
+ style="stroke-width:1.13777781"
y="111.82838"
- style="stroke-width:1.13777781" /></flowRegion><flowPara
- id="flowPara2995"
- style="font-size:51.20000076px;line-height:1.25;stroke-width:1.06666672"> </flowPara></flowRoot> <g
- id="g3795"
- style="filter:url(#filter4610)">
- <g
- id="text2997"
- style="font-style:normal;font-weight:normal;font-size:48px;line-height:125%;font-family:'Museo 500';-inkscape-font-specification:'Museo 500';letter-spacing:0px;word-spacing:0px;fill:#262678;fill-opacity:1;stroke:none">
- <path
- id="path3779"
- d="M 58.609493,93.510938 V 61.767187 h -3.328124 v -4.403124 h 15.923436 c 3.34477,3.5e-5 6.066904,1.032587 8.166407,3.097655 2.09945,2.065136 3.149189,4.804196 3.149219,8.217189 -3e-5,3.413042 -1.058101,6.177882 -3.174219,8.294531 -2.11617,2.11668 -4.82997,3.175013 -8.141407,3.174999 h -7.474999 v 13.362501 z m 5.120313,-17.765626 h 6.656249 c 2.115607,1.8e-5 3.788,-0.631491 5.017188,-1.894531 1.229143,-1.263 1.843727,-2.986696 1.84375,-5.171094 -2.3e-5,-2.151014 -0.606013,-3.840856 -1.817969,-5.069531 -1.212,-1.228615 -2.875801,-1.842937 -4.991406,-1.842969 h -6.707812 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- <path
- id="path3781"
- d="m 85.529806,86.240625 c -2e-6,-1.331242 0.273174,-2.517438 0.819531,-3.558594 0.54635,-1.041134 1.305986,-1.860403 2.278906,-2.457812 0.972911,-0.597382 1.97994,-1.100767 3.021094,-1.510156 1.041137,-0.40936 2.21874,-0.708058 3.532812,-0.896094 1.314049,-0.188005 2.397643,-0.307536 3.250781,-0.358594 0.853109,-0.05103 1.7578,-0.07654 2.71406,-0.07656 h 1.12657 v -0.256251 c -2e-5,-2.252064 -0.44377,-3.847635 -1.33125,-4.786718 -0.88752,-0.939041 -2.355227,-1.408572 -4.403129,-1.408594 -0.956263,2.2e-5 -1.903658,0.145074 -2.842188,0.435156 -0.93855,0.290126 -1.407821,0.810699 -1.407812,1.561719 v 1.485938 h -4.659375 v -2.560938 c -4e-6,-0.98956 0.332807,-1.834352 0.998437,-2.534375 0.665619,-0.699976 1.527337,-1.20336 2.585156,-1.510156 1.057804,-0.306746 2.013532,-0.520027 2.867188,-0.639844 0.853634,-0.119766 1.689831,-0.179661 2.508594,-0.179688 3.926029,2.7e-5 6.682529,0.89612 8.269529,2.688282 1.58696,1.792209 2.38045,4.27528 2.38047,7.449218 v 11.007813 c -2e-5,0.751046 0.3755,1.126567 1.12656,1.126562 h 2.09844 v 4.25 h -4.65781 c -2.15106,0 -3.22658,-0.990103 -3.22656,-2.970312 l 0.10312,-1.535937 h -0.10312 c -0.0677,0.136462 -0.15289,0.324223 -0.25547,0.563281 -0.10263,0.239065 -0.3844,0.648701 -0.84532,1.228905 -0.46095,0.580212 -0.98152,1.09219 -1.561714,1.535939 -0.580224,0.44375 -1.365119,0.853385 -2.354688,1.228905 -0.989596,0.375521 -2.064596,0.563281 -3.225,0.563281 -2.389591,0 -4.454955,-0.699738 -6.196094,-2.099218 -1.741149,-1.399476 -2.61172,-3.32786 -2.611718,-5.785156 z m 6.042187,-3.020312 c -0.682299,0.716676 -1.023445,1.638029 -1.023437,2.764062 -8e-6,1.126048 0.426554,2.098703 1.279687,2.917968 0.853116,0.819275 2.047906,1.22891 3.584375,1.228907 1.979153,3e-6 3.625766,-0.861714 4.939842,-2.585156 1.31405,-1.723431 1.97108,-3.609105 1.9711,-5.657032 V 81.01875 h -1.27969 c -1.262519,1.3e-5 -2.363298,0.04246 -3.302346,0.127344 -0.939075,0.08491 -2.031522,0.272668 -3.277344,0.563281 -1.245843,0.290637 -2.209904,0.794282 -2.892187,1.510938 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- <path
- id="path3783"
- d="M 115.78606,90.234375 V 62.739062 c -1e-5,-0.749968 -0.37553,-1.124968 -1.12657,-1.124999 h -2.1 v -4.25 h 4.91562 c 1.16042,3.5e-5 1.99661,0.256024 2.5086,0.767968 0.51197,0.512014 0.76796,1.348211 0.76797,2.508594 v 27.49375 c -10e-6,0.751046 0.37551,1.126567 1.12656,1.126563 h 2.1 v 4.25 h -4.91563 c -1.16041,0 -1.99662,-0.25599 -2.50858,-0.767969 -0.51199,-0.511978 -0.76798,-1.348175 -0.76797,-2.508594 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- <path
- id="path3785"
- d="m 127.07981,80.557812 c 0,-4.062483 1.22864,-7.339562 3.68593,-9.83125 2.45729,-2.49164 5.56353,-3.737473 9.31875,-3.7375 3.51561,2.7e-5 6.25467,1.143515 8.2172,3.43047 1.96247,2.286999 2.94372,5.188298 2.94374,8.703906 l -0.15312,2.048437 h -18.89375 c 0.13749,2.66251 1.05936,4.77032 2.76562,6.323437 1.70624,1.55313 3.75416,2.329692 6.14375,2.329687 1.33124,5e-6 2.62837,-0.255985 3.89141,-0.767968 1.263,-0.511974 2.18461,-1.007026 2.76484,-1.485156 l 0.92188,-0.76875 2.14999,3.532812 c -0.27294,0.273962 -0.68257,0.624222 -1.2289,1.050782 -0.54638,0.426564 -1.68987,0.989584 -3.43047,1.689062 -1.74065,0.699479 -3.51565,1.049218 -5.325,1.049218 -4.06147,0 -7.37214,-1.28854 -9.93203,-3.865624 -2.5599,-2.577077 -3.83984,-5.810928 -3.83984,-9.701563 z m 5.325,-3.021875 h 13.72031 c -0.0677,-2.081232 -0.68179,-3.702323 -1.84219,-4.863281 -1.16043,-1.160915 -2.5771,-1.741383 -4.25,-1.741406 -1.94585,2.3e-5 -3.60991,0.571897 -4.99218,1.715625 -1.38231,1.143769 -2.26095,2.773456 -2.63594,4.889062 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- <path
- id="path3787"
- d="m 168.35949,93.510938 v -4.403126 h 1.74063 c 0.68333,5e-6 1.05885,-0.375515 1.12656,-1.126562 l 2.45781,-30.617187 h 5.27344 l 8.5,19.148437 1.79219,4.55625 h 0.10155 c 0.61456,-1.740611 1.21196,-3.259359 1.79219,-4.55625 l 8.5,-19.148437 h 5.27343 l 2.45781,30.617187 c 0.0676,0.751047 0.44267,1.126567 1.12501,1.126562 h 1.69062 v 4.403126 h -4.55781 c -1.12608,0 -1.93649,-0.25599 -2.43125,-0.767969 -0.49482,-0.511978 -0.77659,-1.348175 -0.84531,-2.508594 L 200.87198,71.135937 200.77043,65.8125 h -0.10314 c -0.68233,2.252109 -1.31358,4.026586 -1.89375,5.323437 l -7.32188,15.871875 h -4.30156 l -7.32188,-15.871875 c -0.27292,-0.54581 -0.57137,-1.27107 -0.89531,-2.175781 -0.32397,-0.904662 -0.57136,-1.663775 -0.74219,-2.277343 l -0.30781,-0.921875 h -0.10154 c 0.0333,2.150025 -0.001,3.94169 -0.10315,5.374999 l -1.43281,19.098438 c -0.0688,1.160419 -0.35053,1.996616 -0.84531,2.508594 -0.4948,0.511979 -1.3224,0.767969 -2.48282,0.767969 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- <path
- id="path3789"
- d="m 217.12355,90.234375 c -2.69583,-2.594786 -4.04374,-5.837751 -4.04374,-9.728906 0,-3.891129 1.34817,-7.116647 4.04453,-9.676562 2.69634,-2.559871 5.99035,-3.839818 9.88203,-3.839845 3.92498,2.7e-5 7.23566,1.279974 9.93203,3.839845 2.69632,2.559915 4.0445,5.785433 4.04453,9.676562 -3e-5,3.891155 -1.3568,7.13386 -4.07031,9.728125 -2.71357,2.594272 -6.01591,3.891405 -9.90703,3.891405 -3.89116,0 -7.18516,-1.296873 -9.88204,-3.890624 z m 3.60938,-16.332812 c -1.72292,1.740643 -2.58439,3.942202 -2.58438,6.604687 -1e-5,2.662511 0.86171,4.881258 2.58516,6.65625 1.72343,1.775005 3.81431,2.662504 6.27266,2.662499 2.49165,5e-6 4.5992,-0.878901 6.32265,-2.636717 1.72342,-1.757805 2.58513,-3.985147 2.58516,-6.682032 -3e-5,-2.662485 -0.86174,-4.864044 -2.58516,-6.604687 -1.72345,-1.740604 -3.831,-2.610916 -6.32265,-2.610938 -2.45835,2.2e-5 -4.5495,0.870334 -6.27344,2.610938 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- <path
- id="path3791"
- d="m 248.72355,90.234375 c -2.69583,-2.594786 -4.04374,-5.837751 -4.04374,-9.728906 0,-3.891129 1.34817,-7.116647 4.04453,-9.676562 2.69634,-2.559871 5.99035,-3.839818 9.88203,-3.839845 3.92498,2.7e-5 7.23566,1.279974 9.93203,3.839845 2.69632,2.559915 4.0445,5.785433 4.04453,9.676562 -3e-5,3.891155 -1.3568,7.13386 -4.07031,9.728125 -2.71357,2.594272 -6.01591,3.891405 -9.90703,3.891405 -3.89116,0 -7.18516,-1.296873 -9.88204,-3.890624 z m 3.60938,-16.332812 c -1.72292,1.740643 -2.58439,3.942202 -2.58438,6.604687 -1e-5,2.662511 0.86171,4.881258 2.58516,6.65625 1.72343,1.775005 3.81431,2.662504 6.27266,2.662499 2.49165,5e-6 4.5992,-0.878901 6.32265,-2.636717 1.72342,-1.757805 2.58513,-3.985147 2.58516,-6.682032 -3e-5,-2.662485 -0.86174,-4.864044 -2.58516,-6.604687 -1.72345,-1.740604 -3.831,-2.610916 -6.32265,-2.610938 -2.45835,2.2e-5 -4.5495,0.870334 -6.27344,2.610938 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- <path
- id="path3793"
- d="M 278.78762,93.510938 V 72.979687 c 0,-0.75102 -0.37552,-1.12654 -1.12656,-1.126562 h -2.09845 v -4.25 h 4.76094 c 2.18438,2.6e-5 3.27656,0.955754 3.27657,2.867188 v 0.973437 l -0.10155,1.484375 h 0.10155 c 0.68333,-1.467687 1.84425,-2.824456 3.48281,-4.070313 1.63853,-1.245807 3.72029,-1.868723 6.24532,-1.86875 3.03851,2.7e-5 5.28305,0.819297 6.73358,2.457813 1.4505,1.638564 2.17576,4.130228 2.17579,7.475 v 11.2125 c -3e-5,0.751046 0.37549,1.126567 1.12656,1.126563 h 2.09843 v 4.25 h -4.91406 c -1.16043,0 -1.99664,-0.25599 -2.50859,-0.767969 -0.512,-0.511978 -0.76799,-1.348175 -0.76797,-2.508594 V 78.048437 c -2e-5,-2.082274 -0.33283,-3.686439 -0.99843,-4.8125 -0.66566,-1.12602 -1.95419,-1.68904 -3.86563,-1.689062 -1.98023,2.2e-5 -3.71277,0.588823 -5.19766,1.766406 -1.4849,1.177624 -2.48308,2.704965 -2.99453,4.582031 -0.3073,0.887516 -0.46095,2.047931 -0.46093,3.48125 v 12.134376 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- </g>
- <g
- id="text3769"
- style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:'Museo 500';-inkscape-font-specification:'Museo 500';letter-spacing:0px;word-spacing:0px;fill:#262678;fill-opacity:1;stroke:none">
- <path
- id="path3774"
- d="m 304.55762,64.957287 v -6.613281 h -1.51465 c -0.15647,7e-6 -0.2347,0.07824 -0.2347,0.234701 v 0.479818 h -0.94922 v -0.991863 c 0,-0.241746 0.0462,-0.408847 0.13851,-0.501302 0.0924,-0.09244 0.2595,-0.138663 0.50146,-0.138671 h 5.18392 c 0.24175,8e-6 0.40885,0.04623 0.50131,0.138671 0.0925,0.09246 0.13866,0.259556 0.13866,0.501302 v 0.991863 h -0.94921 v -0.479818 c 0,-0.156461 -0.0783,-0.234694 -0.2347,-0.234701 h -1.51465 v 6.613281 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- <path
- id="path3776"
- d="M 308.70378,64.957287 V 64.03997 h 0.36263 c 0.14236,10e-7 0.22059,-0.07823 0.2347,-0.234701 l 0.51204,-6.37858 h 1.09864 l 1.77082,3.989258 0.37338,0.949218 h 0.0211 c 0.12803,-0.362627 0.25249,-0.679033 0.37336,-0.949218 l 1.77084,-3.989258 h 1.09864 l 0.51204,6.37858 c 0.0141,0.156469 0.0923,0.234702 0.23438,0.234701 h 0.35221 v 0.917317 h -0.94955 c -0.2346,0 -0.40343,-0.05333 -0.50651,-0.159993 -0.10304,-0.106656 -0.16178,-0.280869 -0.17611,-0.522623 l -0.30924,-3.978842 -0.0211,-1.109049 h -0.0214 c -0.14215,0.469189 -0.27366,0.838872 -0.39452,1.109049 l -1.5254,3.306641 h -0.89616 l -1.52539,-3.306641 c -0.0568,-0.113711 -0.11903,-0.264806 -0.18653,-0.453287 -0.0675,-0.188472 -0.11903,-0.346621 -0.15461,-0.474447 l -0.0641,-0.192058 h -0.0211 c 0.007,0.447922 -2.2e-4,0.821186 -0.0214,1.119792 l -0.2985,3.978842 c -0.0143,0.241754 -0.0731,0.415962 -0.17611,0.522623 -0.10304,0.106667 -0.2755,0.159993 -0.51725,0.159993 z"
- inkscape:connector-curvature="0"
- style="stroke-width:1.06666672" />
- </g>
+ x="47.409828"
+ height="396.51855"
+ width="698.21747"
+ id="rect2993" /></flowRegion><flowPara
+ style="font-size:51.20000076px;line-height:1.25;stroke-width:1.06666672"
+ id="flowPara2995"> </flowPara></flowRoot> <g
+ id="text2997"
+ style="font-style:normal;font-weight:normal;font-size:48px;line-height:125%;font-family:'Museo 500';-inkscape-font-specification:'Museo 500';letter-spacing:0px;word-spacing:0px;fill:#0b3575;fill-opacity:1;stroke:none;filter:url(#filter4610)">
+ <path
+ id="path3779"
+ d="M 58.609493,93.510938 V 61.767187 h -3.328124 v -4.403124 h 15.923436 c 3.34477,3.5e-5 6.066904,1.032587 8.166407,3.097655 2.09945,2.065136 3.149189,4.804196 3.149219,8.217189 -3e-5,3.413042 -1.058101,6.177882 -3.174219,8.294531 -2.11617,2.11668 -4.82997,3.175013 -8.141407,3.174999 h -7.474999 v 13.362501 z m 5.120313,-17.765626 h 6.656249 c 2.115607,1.8e-5 3.788,-0.631491 5.017188,-1.894531 1.229143,-1.263 1.843727,-2.986696 1.84375,-5.171094 -2.3e-5,-2.151014 -0.606013,-3.840856 -1.817969,-5.069531 -1.212,-1.228615 -2.875801,-1.842937 -4.991406,-1.842969 h -6.707812 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ <path
+ id="path3781"
+ d="m 85.529806,86.240625 c -2e-6,-1.331242 0.273174,-2.517438 0.819531,-3.558594 0.54635,-1.041134 1.305986,-1.860403 2.278906,-2.457812 0.972911,-0.597382 1.97994,-1.100767 3.021094,-1.510156 1.041137,-0.40936 2.21874,-0.708058 3.532812,-0.896094 1.314049,-0.188005 2.397643,-0.307536 3.250781,-0.358594 0.853109,-0.05103 1.7578,-0.07654 2.71406,-0.07656 h 1.12657 v -0.256251 c -2e-5,-2.252064 -0.44377,-3.847635 -1.33125,-4.786718 -0.88752,-0.939041 -2.355227,-1.408572 -4.403129,-1.408594 -0.956263,2.2e-5 -1.903658,0.145074 -2.842188,0.435156 -0.93855,0.290126 -1.407821,0.810699 -1.407812,1.561719 v 1.485938 h -4.659375 v -2.560938 c -4e-6,-0.98956 0.332807,-1.834352 0.998437,-2.534375 0.665619,-0.699976 1.527337,-1.20336 2.585156,-1.510156 1.057804,-0.306746 2.013532,-0.520027 2.867188,-0.639844 0.853634,-0.119766 1.689831,-0.179661 2.508594,-0.179688 3.926029,2.7e-5 6.682529,0.89612 8.269529,2.688282 1.58696,1.792209 2.38045,4.27528 2.38047,7.449218 v 11.007813 c -2e-5,0.751046 0.3755,1.126567 1.12656,1.126562 h 2.09844 v 4.25 h -4.65781 c -2.15106,0 -3.22658,-0.990103 -3.22656,-2.970312 l 0.10312,-1.535937 h -0.10312 c -0.0677,0.136462 -0.15289,0.324223 -0.25547,0.563281 -0.10263,0.239065 -0.3844,0.648701 -0.84532,1.228905 -0.46095,0.580212 -0.98152,1.09219 -1.561714,1.535939 -0.580224,0.44375 -1.365119,0.853385 -2.354688,1.228905 -0.989596,0.375521 -2.064596,0.563281 -3.225,0.563281 -2.389591,0 -4.454955,-0.699738 -6.196094,-2.099218 -1.741149,-1.399476 -2.61172,-3.32786 -2.611718,-5.785156 z m 6.042187,-3.020312 c -0.682299,0.716676 -1.023445,1.638029 -1.023437,2.764062 -8e-6,1.126048 0.426554,2.098703 1.279687,2.917968 0.853116,0.819275 2.047906,1.22891 3.584375,1.228907 1.979153,3e-6 3.625766,-0.861714 4.939842,-2.585156 1.31405,-1.723431 1.97108,-3.609105 1.9711,-5.657032 V 81.01875 h -1.27969 c -1.262519,1.3e-5 -2.363298,0.04246 -3.302346,0.127344 -0.939075,0.08491 -2.031522,0.272668 -3.277344,0.563281 -1.245843,0.290637 -2.209904,0.794282 -2.892187,1.510938 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ <path
+ id="path3783"
+ d="M 115.78606,90.234375 V 62.739062 c -1e-5,-0.749968 -0.37553,-1.124968 -1.12657,-1.124999 h -2.1 v -4.25 h 4.91562 c 1.16042,3.5e-5 1.99661,0.256024 2.5086,0.767968 0.51197,0.512014 0.76796,1.348211 0.76797,2.508594 v 27.49375 c -10e-6,0.751046 0.37551,1.126567 1.12656,1.126563 h 2.1 v 4.25 h -4.91563 c -1.16041,0 -1.99662,-0.25599 -2.50858,-0.767969 -0.51199,-0.511978 -0.76798,-1.348175 -0.76797,-2.508594 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ <path
+ id="path3785"
+ d="m 127.07981,80.557812 c 0,-4.062483 1.22864,-7.339562 3.68593,-9.83125 2.45729,-2.49164 5.56353,-3.737473 9.31875,-3.7375 3.51561,2.7e-5 6.25467,1.143515 8.2172,3.43047 1.96247,2.286999 2.94372,5.188298 2.94374,8.703906 l -0.15312,2.048437 h -18.89375 c 0.13749,2.66251 1.05936,4.77032 2.76562,6.323437 1.70624,1.55313 3.75416,2.329692 6.14375,2.329687 1.33124,5e-6 2.62837,-0.255985 3.89141,-0.767968 1.263,-0.511974 2.18461,-1.007026 2.76484,-1.485156 l 0.92188,-0.76875 2.14999,3.532812 c -0.27294,0.273962 -0.68257,0.624222 -1.2289,1.050782 -0.54638,0.426564 -1.68987,0.989584 -3.43047,1.689062 -1.74065,0.699479 -3.51565,1.049218 -5.325,1.049218 -4.06147,0 -7.37214,-1.28854 -9.93203,-3.865624 -2.5599,-2.577077 -3.83984,-5.810928 -3.83984,-9.701563 z m 5.325,-3.021875 h 13.72031 c -0.0677,-2.081232 -0.68179,-3.702323 -1.84219,-4.863281 -1.16043,-1.160915 -2.5771,-1.741383 -4.25,-1.741406 -1.94585,2.3e-5 -3.60991,0.571897 -4.99218,1.715625 -1.38231,1.143769 -2.26095,2.773456 -2.63594,4.889062 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ <path
+ id="path3787"
+ d="m 168.35949,93.510938 v -4.403126 h 1.74063 c 0.68333,5e-6 1.05885,-0.375515 1.12656,-1.126562 l 2.45781,-30.617187 h 5.27344 l 8.5,19.148437 1.79219,4.55625 h 0.10155 c 0.61456,-1.740611 1.21196,-3.259359 1.79219,-4.55625 l 8.5,-19.148437 h 5.27343 l 2.45781,30.617187 c 0.0676,0.751047 0.44267,1.126567 1.12501,1.126562 h 1.69062 v 4.403126 h -4.55781 c -1.12608,0 -1.93649,-0.25599 -2.43125,-0.767969 -0.49482,-0.511978 -0.77659,-1.348175 -0.84531,-2.508594 L 200.87198,71.135937 200.77043,65.8125 h -0.10314 c -0.68233,2.252109 -1.31358,4.026586 -1.89375,5.323437 l -7.32188,15.871875 h -4.30156 l -7.32188,-15.871875 c -0.27292,-0.54581 -0.57137,-1.27107 -0.89531,-2.175781 -0.32397,-0.904662 -0.57136,-1.663775 -0.74219,-2.277343 l -0.30781,-0.921875 h -0.10154 c 0.0333,2.150025 -0.001,3.94169 -0.10315,5.374999 l -1.43281,19.098438 c -0.0688,1.160419 -0.35053,1.996616 -0.84531,2.508594 -0.4948,0.511979 -1.3224,0.767969 -2.48282,0.767969 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ <path
+ id="path3789"
+ d="m 217.12355,90.234375 c -2.69583,-2.594786 -4.04374,-5.837751 -4.04374,-9.728906 0,-3.891129 1.34817,-7.116647 4.04453,-9.676562 2.69634,-2.559871 5.99035,-3.839818 9.88203,-3.839845 3.92498,2.7e-5 7.23566,1.279974 9.93203,3.839845 2.69632,2.559915 4.0445,5.785433 4.04453,9.676562 -3e-5,3.891155 -1.3568,7.13386 -4.07031,9.728125 -2.71357,2.594272 -6.01591,3.891405 -9.90703,3.891405 -3.89116,0 -7.18516,-1.296873 -9.88204,-3.890624 z m 3.60938,-16.332812 c -1.72292,1.740643 -2.58439,3.942202 -2.58438,6.604687 -1e-5,2.662511 0.86171,4.881258 2.58516,6.65625 1.72343,1.775005 3.81431,2.662504 6.27266,2.662499 2.49165,5e-6 4.5992,-0.878901 6.32265,-2.636717 1.72342,-1.757805 2.58513,-3.985147 2.58516,-6.682032 -3e-5,-2.662485 -0.86174,-4.864044 -2.58516,-6.604687 -1.72345,-1.740604 -3.831,-2.610916 -6.32265,-2.610938 -2.45835,2.2e-5 -4.5495,0.870334 -6.27344,2.610938 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ <path
+ id="path3791"
+ d="m 248.72355,90.234375 c -2.69583,-2.594786 -4.04374,-5.837751 -4.04374,-9.728906 0,-3.891129 1.34817,-7.116647 4.04453,-9.676562 2.69634,-2.559871 5.99035,-3.839818 9.88203,-3.839845 3.92498,2.7e-5 7.23566,1.279974 9.93203,3.839845 2.69632,2.559915 4.0445,5.785433 4.04453,9.676562 -3e-5,3.891155 -1.3568,7.13386 -4.07031,9.728125 -2.71357,2.594272 -6.01591,3.891405 -9.90703,3.891405 -3.89116,0 -7.18516,-1.296873 -9.88204,-3.890624 z m 3.60938,-16.332812 c -1.72292,1.740643 -2.58439,3.942202 -2.58438,6.604687 -1e-5,2.662511 0.86171,4.881258 2.58516,6.65625 1.72343,1.775005 3.81431,2.662504 6.27266,2.662499 2.49165,5e-6 4.5992,-0.878901 6.32265,-2.636717 1.72342,-1.757805 2.58513,-3.985147 2.58516,-6.682032 -3e-5,-2.662485 -0.86174,-4.864044 -2.58516,-6.604687 -1.72345,-1.740604 -3.831,-2.610916 -6.32265,-2.610938 -2.45835,2.2e-5 -4.5495,0.870334 -6.27344,2.610938 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ <path
+ id="path3793"
+ d="M 278.78762,93.510938 V 72.979687 c 0,-0.75102 -0.37552,-1.12654 -1.12656,-1.126562 h -2.09845 v -4.25 h 4.76094 c 2.18438,2.6e-5 3.27656,0.955754 3.27657,2.867188 v 0.973437 l -0.10155,1.484375 h 0.10155 c 0.68333,-1.467687 1.84425,-2.824456 3.48281,-4.070313 1.63853,-1.245807 3.72029,-1.868723 6.24532,-1.86875 3.03851,2.7e-5 5.28305,0.819297 6.73358,2.457813 1.4505,1.638564 2.17576,4.130228 2.17579,7.475 v 11.2125 c -3e-5,0.751046 0.37549,1.126567 1.12656,1.126563 h 2.09843 v 4.25 h -4.91406 c -1.16043,0 -1.99664,-0.25599 -2.50859,-0.767969 -0.512,-0.511978 -0.76799,-1.348175 -0.76797,-2.508594 V 78.048437 c -2e-5,-2.082274 -0.33283,-3.686439 -0.99843,-4.8125 -0.66566,-1.12602 -1.95419,-1.68904 -3.86563,-1.689062 -1.98023,2.2e-5 -3.71277,0.588823 -5.19766,1.766406 -1.4849,1.177624 -2.48308,2.704965 -2.99453,4.582031 -0.3073,0.887516 -0.46095,2.047931 -0.46093,3.48125 v 12.134376 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ </g>
+ <g
+ id="text3769"
+ style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:'Museo 500';-inkscape-font-specification:'Museo 500';letter-spacing:0px;word-spacing:0px;fill:#0b3575;fill-opacity:1;stroke:none;filter:url(#filter4610)">
+ <path
+ id="path3774"
+ d="m 304.55762,64.957287 v -6.613281 h -1.51465 c -0.15647,7e-6 -0.2347,0.07824 -0.2347,0.234701 v 0.479818 h -0.94922 v -0.991863 c 0,-0.241746 0.0462,-0.408847 0.13851,-0.501302 0.0924,-0.09244 0.2595,-0.138663 0.50146,-0.138671 h 5.18392 c 0.24175,8e-6 0.40885,0.04623 0.50131,0.138671 0.0925,0.09246 0.13866,0.259556 0.13866,0.501302 v 0.991863 h -0.94921 v -0.479818 c 0,-0.156461 -0.0783,-0.234694 -0.2347,-0.234701 h -1.51465 v 6.613281 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
+ <path
+ id="path3776"
+ d="M 308.70378,64.957287 V 64.03997 h 0.36263 c 0.14236,10e-7 0.22059,-0.07823 0.2347,-0.234701 l 0.51204,-6.37858 h 1.09864 l 1.77082,3.989258 0.37338,0.949218 h 0.0211 c 0.12803,-0.362627 0.25249,-0.679033 0.37336,-0.949218 l 1.77084,-3.989258 h 1.09864 l 0.51204,6.37858 c 0.0141,0.156469 0.0923,0.234702 0.23438,0.234701 h 0.35221 v 0.917317 h -0.94955 c -0.2346,0 -0.40343,-0.05333 -0.50651,-0.159993 -0.10304,-0.106656 -0.16178,-0.280869 -0.17611,-0.522623 l -0.30924,-3.978842 -0.0211,-1.109049 h -0.0214 c -0.14215,0.469189 -0.27366,0.838872 -0.39452,1.109049 l -1.5254,3.306641 h -0.89616 l -1.52539,-3.306641 c -0.0568,-0.113711 -0.11903,-0.264806 -0.18653,-0.453287 -0.0675,-0.188472 -0.11903,-0.346621 -0.15461,-0.474447 l -0.0641,-0.192058 h -0.0211 c 0.007,0.447922 -2.2e-4,0.821186 -0.0214,1.119792 l -0.2985,3.978842 c -0.0143,0.241754 -0.0731,0.415962 -0.17611,0.522623 -0.10304,0.106667 -0.2755,0.159993 -0.51725,0.159993 z"
+ style="fill:#0b3575;fill-opacity:1;stroke-width:1.06666672" />
</g>
</g>
</svg>
diff --git a/application/palemoon/branding/official/content/about.png b/application/palemoon/branding/official/content/about.png
index e34dd11ed..0a4fbb393 100644
--- a/application/palemoon/branding/official/content/about.png
+++ b/application/palemoon/branding/official/content/about.png
Binary files differ
diff --git a/application/palemoon/branding/official/content/icon48.png b/application/palemoon/branding/official/content/icon48.png
index abc17585f..c3a98f128 100644
--- a/application/palemoon/branding/official/content/icon48.png
+++ b/application/palemoon/branding/official/content/icon48.png
Binary files differ
diff --git a/application/palemoon/branding/official/content/icon64.png b/application/palemoon/branding/official/content/icon64.png
index bccb5e8ec..93a7ce23c 100644
--- a/application/palemoon/branding/official/content/icon64.png
+++ b/application/palemoon/branding/official/content/icon64.png
Binary files differ
diff --git a/application/palemoon/branding/official/default16.png b/application/palemoon/branding/official/default16.png
index d58dbc5cc..b840a3acf 100644
--- a/application/palemoon/branding/official/default16.png
+++ b/application/palemoon/branding/official/default16.png
Binary files differ
diff --git a/application/palemoon/branding/official/default22.png b/application/palemoon/branding/official/default22.png
index 3b7a33e4a..4e290f84b 100644
--- a/application/palemoon/branding/official/default22.png
+++ b/application/palemoon/branding/official/default22.png
Binary files differ
diff --git a/application/palemoon/branding/official/default24.png b/application/palemoon/branding/official/default24.png
index e70cc06f3..f47d3ef23 100644
--- a/application/palemoon/branding/official/default24.png
+++ b/application/palemoon/branding/official/default24.png
Binary files differ
diff --git a/application/palemoon/branding/official/default256.png b/application/palemoon/branding/official/default256.png
index 9a5e7ccab..53adcfa73 100644
--- a/application/palemoon/branding/official/default256.png
+++ b/application/palemoon/branding/official/default256.png
Binary files differ
diff --git a/application/palemoon/branding/official/default32.png b/application/palemoon/branding/official/default32.png
index 5be7a3378..fde9707d8 100644
--- a/application/palemoon/branding/official/default32.png
+++ b/application/palemoon/branding/official/default32.png
Binary files differ
diff --git a/application/palemoon/branding/official/default48.png b/application/palemoon/branding/official/default48.png
index 9cd9712f7..c3a98f128 100644
--- a/application/palemoon/branding/official/default48.png
+++ b/application/palemoon/branding/official/default48.png
Binary files differ
diff --git a/application/palemoon/branding/official/disk.icns b/application/palemoon/branding/official/disk.icns
index 8dc67b202..f3a549583 100644
--- a/application/palemoon/branding/official/disk.icns
+++ b/application/palemoon/branding/official/disk.icns
Binary files differ
diff --git a/application/palemoon/branding/official/disk.ico b/application/palemoon/branding/official/disk.ico
deleted file mode 100644
index cc5412a3a..000000000
--- a/application/palemoon/branding/official/disk.ico
+++ /dev/null
Binary files differ
diff --git a/application/palemoon/branding/official/document.icns b/application/palemoon/branding/official/document.icns
index 74c2b4c1e..c9f33dbfa 100644
--- a/application/palemoon/branding/official/document.icns
+++ b/application/palemoon/branding/official/document.icns
Binary files differ
diff --git a/application/palemoon/branding/official/document.ico b/application/palemoon/branding/official/document.ico
index 762655001..2f843dbd1 100644
--- a/application/palemoon/branding/official/document.ico
+++ b/application/palemoon/branding/official/document.ico
Binary files differ
diff --git a/application/palemoon/branding/official/firefox.icns b/application/palemoon/branding/official/firefox.icns
index e1a2f9a46..87f9ac751 100644
--- a/application/palemoon/branding/official/firefox.icns
+++ b/application/palemoon/branding/official/firefox.icns
Binary files differ
diff --git a/application/palemoon/branding/official/firefox.ico b/application/palemoon/branding/official/firefox.ico
index 0f55f0ba5..ea25fd887 100644
--- a/application/palemoon/branding/official/firefox.ico
+++ b/application/palemoon/branding/official/firefox.ico
Binary files differ
diff --git a/application/palemoon/branding/official/mozicon128.png b/application/palemoon/branding/official/mozicon128.png
index b19a61fdc..35eafcb08 100644
--- a/application/palemoon/branding/official/mozicon128.png
+++ b/application/palemoon/branding/official/mozicon128.png
Binary files differ
diff --git a/application/palemoon/branding/official/palemoon.desktop b/application/palemoon/branding/official/palemoon.desktop
index 0e6c104b4..440092b33 100644
--- a/application/palemoon/branding/official/palemoon.desktop
+++ b/application/palemoon/branding/official/palemoon.desktop
@@ -64,7 +64,7 @@ Comment[ko]=웹을 돌아 다닙니다
Comment[ku]=Li torê bigere
Comment[lt]=Naršykite internete
Comment[nb]=Surf på nettet
-Comment[nl]=Verken het internet
+Comment[nl]=Surf op het internet
Comment[nn]=Surf på nettet
Comment[no]=Surf på nettet
Comment[pl]=Przeglądanie stron WWW
@@ -87,8 +87,9 @@ Type=Application
Icon=palemoon
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
-StartupNotify=true
+StartupNotify=false
Actions=NewTab;NewWindow;NewPrivateWindow;
+StartupWMClass="pale moon"
[Desktop Action NewTab]
Name=Open new tab
diff --git a/application/palemoon/branding/official/wizHeader.bmp b/application/palemoon/branding/official/wizHeader.bmp
index 368e01b90..c023036b6 100644
--- a/application/palemoon/branding/official/wizHeader.bmp
+++ b/application/palemoon/branding/official/wizHeader.bmp
Binary files differ
diff --git a/application/palemoon/branding/official/wizHeaderRTL.bmp b/application/palemoon/branding/official/wizHeaderRTL.bmp
index 0671342c1..11edaa883 100644
--- a/application/palemoon/branding/official/wizHeaderRTL.bmp
+++ b/application/palemoon/branding/official/wizHeaderRTL.bmp
Binary files differ
diff --git a/application/palemoon/branding/official/wizWatermark.bmp b/application/palemoon/branding/official/wizWatermark.bmp
index 778749aa2..ad7703d8f 100644
--- a/application/palemoon/branding/official/wizWatermark.bmp
+++ b/application/palemoon/branding/official/wizWatermark.bmp
Binary files differ
diff --git a/application/palemoon/branding/shared/pref/uaoverrides.inc b/application/palemoon/branding/shared/pref/uaoverrides.inc
index 36a0ae145..028b29b41 100644
--- a/application/palemoon/branding/shared/pref/uaoverrides.inc
+++ b/application/palemoon/branding/shared/pref/uaoverrides.inc
@@ -57,8 +57,6 @@ pref("@GUAO_PREF@.www.amazon.com","Mozilla/5.0 (@OS_SLICE@ rv:45.9) @GK_SLICE@ F
pref("@GUAO_PREF@.soundcloud.com","Mozilla/5.0 (@OS_SLICE@ rv:@GRE_VERSION@) @GRE_DATE_SLICE@ @PM_SLICE@");
// Daily motion only likes strict Firefox UAs
pref("@GUAO_PREF@.dailymotion.com","Mozilla/5.0 (@OS_SLICE@ rv:52.0) @GK_SLICE@ Firefox/52.0");
-// Financial Times' polyfill.io breaks horribly on a Pale Moon UA. Send a strict Firefox UA instead.
-pref("@GUAO_PREF@.polyfill.io","Mozilla/5.0 (@OS_SLICE@ rv:60.9) @GK_SLICE@ Firefox/60.9");
// The following requires native mode. Or it blocks.. "too old firefox", breakage, etc.
@@ -76,7 +74,7 @@ pref("@GUAO_PREF@.netflix.com","Mozilla/5.0 (@OS_SLICE@ rv:45.9) @GK_SLICE@ Fire
pref("@GUAO_PREF@.netflximg.net","Mozilla/5.0 (@OS_SLICE@ rv:45.9) @GK_SLICE@ Firefox/45.9");
// UA-sniffing domains that are "app/vendor-specific" and do not like Pale Moon
-pref("@GUAO_PREF@.web.whatsapp.com","Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36");
+pref("@GUAO_PREF@.web.whatsapp.com","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
// The following domains do not like the Goanna slice
pref("@GUAO_PREF@.hitbox.tv","Mozilla/5.0 (@OS_SLICE@ rv:@GK_VERSION@) @GK_SLICE@ @FX_SLICE@");
diff --git a/application/palemoon/branding/unofficial/configure.sh b/application/palemoon/branding/unofficial/configure.sh
index 05a1e1b87..c03b8382a 100644
--- a/application/palemoon/branding/unofficial/configure.sh
+++ b/application/palemoon/branding/unofficial/configure.sh
@@ -2,4 +2,4 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-MOZ_APP_DISPLAYNAME=NewMoon
+MOZ_APP_DISPLAYNAME="New Moon"
diff --git a/application/palemoon/branding/unofficial/newmoon.desktop b/application/palemoon/branding/unofficial/newmoon.desktop
index 6dcf32477..3b337fdd4 100644
--- a/application/palemoon/branding/unofficial/newmoon.desktop
+++ b/application/palemoon/branding/unofficial/newmoon.desktop
@@ -87,8 +87,9 @@ Type=Application
Icon=palemoon
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
-StartupNotify=true
+StartupNotify=false
Actions=NewTab;NewWindow;NewPrivateWindow;
+StartupWMClass="new moon"
[Desktop Action NewTab]
Name=Open new tab
diff --git a/application/palemoon/branding/unstable/configure.sh b/application/palemoon/branding/unstable/configure.sh
index 814133dfa..8943f5819 100644
--- a/application/palemoon/branding/unstable/configure.sh
+++ b/application/palemoon/branding/unstable/configure.sh
@@ -2,5 +2,5 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-MOZ_APP_DISPLAYNAME=Palemoon
+MOZ_APP_DISPLAYNAME="Pale Moon"
# MOZ_UA_BUILDID=20100101
diff --git a/application/palemoon/branding/unstable/firefox.icns b/application/palemoon/branding/unstable/firefox.icns
index 117ddb195..3df606a01 100644
--- a/application/palemoon/branding/unstable/firefox.icns
+++ b/application/palemoon/branding/unstable/firefox.icns
Binary files differ
diff --git a/application/palemoon/components/moz.build b/application/palemoon/components/moz.build
index eb2771c48..48d4552ba 100644
--- a/application/palemoon/components/moz.build
+++ b/application/palemoon/components/moz.build
@@ -20,11 +20,9 @@ DIRS += [
'search',
'sessionstore',
'shell',
+ 'statusbar',
]
-if CONFIG['MOZ_BROWSER_STATUSBAR']:
- DIRS += ['statusbar']
-
if CONFIG['MOZ_SERVICES_SYNC']:
DIRS += ['sync']
diff --git a/application/palemoon/components/places/content/browserPlacesViews.js b/application/palemoon/components/places/content/browserPlacesViews.js
index eec7274a4..8b90dd280 100644
--- a/application/palemoon/components/places/content/browserPlacesViews.js
+++ b/application/palemoon/components/places/content/browserPlacesViews.js
@@ -109,8 +109,15 @@ PlacesViewBase.prototype = {
get selectedNode() {
if (this._contextMenuShown) {
- let popup = document.popupNode;
- return popup._placesNode || popup.parentNode._placesNode || null;
+ let anchor = this._contextMenuShown.triggerNode;
+ if (!anchor)
+ return null;
+
+ if (anchor._placesNode)
+ return this._rootElt == anchor ? null : anchor._placesNode;
+
+ anchor = anchor.parentNode;
+ return this._rootElt == anchor ? null : (anchor._placesNode || null);
}
return null;
},
@@ -176,13 +183,13 @@ PlacesViewBase.prototype = {
},
buildContextMenu: function PVB_buildContextMenu(aPopup) {
- this._contextMenuShown = true;
+ this._contextMenuShown = aPopup;
window.updateCommands("places");
return this.controller.buildContextMenu(aPopup);
},
destroyContextMenu: function PVB_destroyContextMenu(aPopup) {
- this._contextMenuShown = false;
+ this._contextMenuShown = null;
},
_cleanPopup: function PVB_cleanPopup(aPopup, aDelay) {
diff --git a/application/palemoon/components/places/content/controller.js b/application/palemoon/components/places/content/controller.js
index 7f5f7f652..f4e272e2f 100644
--- a/application/palemoon/components/places/content/controller.js
+++ b/application/palemoon/components/places/content/controller.js
@@ -334,20 +334,6 @@ PlacesController.prototype = {
},
/**
- * Determines whether or not the root node for the view is selected
- */
- rootNodeIsSelected: function PC_rootNodeIsSelected() {
- var nodes = this._view.selectedNodes;
- var root = this._view.result.root;
- for (var i = 0; i < nodes.length; ++i) {
- if (nodes[i] == root)
- return true;
- }
-
- return false;
- },
-
- /**
* Looks at the data on the clipboard to see if it is paste-able.
* Paste-able data is:
* - in a format that the view can receive
@@ -400,7 +386,7 @@ PlacesController.prototype = {
* Gathers information about the selected nodes according to the following
* rules:
* "link" node is a URI
- * "bookmark" node is a bookamrk
+ * "bookmark" node is a bookmark
* "livemarkChild" node is a child of a livemark
* "tagChild" node is a child of a tag
* "folder" node is a folder
@@ -414,15 +400,10 @@ PlacesController.prototype = {
* node are set on its corresponding object as properties.
* Notes:
* 1) This can be slow, so don't call it anywhere performance critical!
- * 2) A single-object array corresponding the root node is returned if
- * there's no selection.
*/
_buildSelectionMetadata: function PC__buildSelectionMetadata() {
var metadata = [];
- var root = this._view.result.root;
var nodes = this._view.selectedNodes;
- if (nodes.length == 0)
- nodes.push(root); // See the second note above
for (var i = 0; i < nodes.length; i++) {
var nodeData = {};
@@ -463,7 +444,11 @@ PlacesController.prototype = {
if (parentNode) {
if (PlacesUtils.nodeIsTagQuery(parentNode))
nodeData["tagChild"] = true;
- else if (this.hasCachedLivemarkInfo(parentNode))
+ }
+ } else {
+ var parentNode = node.parent;
+ if (parentNode) {
+ if (this.hasCachedLivemarkInfo(parentNode))
nodeData["livemarkChild"] = true;
}
}
@@ -501,10 +486,23 @@ PlacesController.prototype = {
*/
_shouldShowMenuItem: function PC__shouldShowMenuItem(aMenuItem, aMetaData) {
var selectiontype = aMenuItem.getAttribute("selectiontype");
- if (selectiontype == "multiple" && aMetaData.length == 1)
+ if (!selectiontype) {
+ selectiontype = "single|multiple";
+ }
+ var selectionTypes = selectiontype.split("|");
+ if (selectionTypes.indexOf("any") != -1) {
+ return true;
+ }
+ var count = aMetaData.length;
+ if (count > 1 && selectionTypes.indexOf("multiple") == -1)
return false;
- if (selectiontype == "single" && aMetaData.length != 1)
+ if (count == 1 && selectionTypes.indexOf("single") == -1)
return false;
+ // NB: if there is no selection, we show the item if (and only if)
+ // the selectiontype includes 'none' - the metadata list will be
+ // empty so none of the other criteria will apply anyway.
+ if (count == 0)
+ return selectionTypes.indexOf("none") != -1;
var forceHideAttr = aMenuItem.getAttribute("forcehideselection");
if (forceHideAttr) {
@@ -551,9 +549,11 @@ PlacesController.prototype = {
* 1) The "selectiontype" attribute may be set on a menu-item to "single"
* if the menu-item should be visible only if there is a single node
* selected, or to "multiple" if the menu-item should be visible only if
- * multiple nodes are selected. If the attribute is not set or if it is
- * set to an invalid value, the menu-item may be visible for both types of
- * selection.
+ * multiple nodes are selected, or to "none" if the menuitems should be
+ * visible for if there are no selected nodes, or to a |-separated
+ * combination of these.
+ * If the attribute is not set or set to an invalid value, the menu-item
+ * may be visible irrespective of the selection.
* 2) The "selection" attribute may be set on a menu-item to the various
* meta-data rules for which it may be visible. The rules should be
* separated with the | character.
@@ -584,7 +584,7 @@ PlacesController.prototype = {
var separator = null;
var visibleItemsBeforeSep = false;
- var anyVisible = false;
+ var usableItemCount = 0;
for (var i = 0; i < aPopup.childNodes.length; ++i) {
var item = aPopup.childNodes[i];
if (item.localName != "menuseparator") {
@@ -598,12 +598,13 @@ PlacesController.prototype = {
(!/tree/i.test(this._view.localName) || ip);
var hideIfPrivate = item.getAttribute("hideifprivatebrowsing") == "true" &&
PrivateBrowsingUtils.isWindowPrivate(window);
- item.hidden = hideIfNoIP || hideIfPrivate || hideParentFolderItem ||
- !this._shouldShowMenuItem(item, metadata);
+ var shouldHideItem = hideIfNoIP || hideIfPrivate || hideParentFolderItem ||
+ !this._shouldShowMenuItem(item, metadata);
+ item.hidden = item.disabled = shouldHideItem;
if (!item.hidden) {
visibleItemsBeforeSep = true;
- anyVisible = true;
+ usableItemCount++;
// Show the separator above the menu-item if any
if (separator) {
@@ -627,21 +628,21 @@ PlacesController.prototype = {
}
// Set Open Folder/Links In Tabs items enabled state if they're visible
- if (anyVisible) {
+ if (usableItemCount > 0) {
var openContainerInTabsItem = document.getElementById("placesContext_openContainer:tabs");
- if (!openContainerInTabsItem.hidden && this._view.selectedNode &&
- PlacesUtils.nodeIsContainer(this._view.selectedNode)) {
- openContainerInTabsItem.disabled =
- !PlacesUtils.hasChildURIs(this._view.selectedNode);
- }
- else {
- // see selectiontype rule in the overlay
- var openLinksInTabsItem = document.getElementById("placesContext_openLinks:tabs");
- openLinksInTabsItem.disabled = openLinksInTabsItem.hidden;
+ if (!openContainerInTabsItem.hidden) {
+ var containerToUse = this._view.selectedNode || this._view.result.root;
+ if (PlacesUtils.nodeIsContainer(containerToUse)) {
+ if (!PlacesUtils.hasChildURIs(containerToUse, true)) {
+ openContainerInTabsItem.disabled = true;
+ // Ensure that we don't display the menu if nothing is enabled:
+ usableItemCount--;
+ }
+ }
}
}
- return anyVisible;
+ return usableItemCount > 0;
},
/**
@@ -707,10 +708,15 @@ PlacesController.prototype = {
*/
openSelectionInTabs: function PC_openLinksInTabs(aEvent) {
var node = this._view.selectedNode;
+ var nodes = this._view.selectedNodes;
+ // In the case of no selection, open the root node:
+ if (!node && !nodes.length) {
+ node = this._view.result.root;
+ }
if (node && PlacesUtils.nodeIsContainer(node))
- PlacesUIUtils.openContainerNodeInTabs(this._view.selectedNode, aEvent, this._view);
+ PlacesUIUtils.openContainerNodeInTabs(node, aEvent, this._view);
else
- PlacesUIUtils.openURINodesInTabs(this._view.selectedNodes, aEvent, this._view);
+ PlacesUIUtils.openURINodesInTabs(nodes, aEvent, this._view);
},
/**
diff --git a/application/palemoon/components/places/content/placesOverlay.xul b/application/palemoon/components/places/content/placesOverlay.xul
index dd4d50f01..59115a57f 100644
--- a/application/palemoon/components/places/content/placesOverlay.xul
+++ b/application/palemoon/components/places/content/placesOverlay.xul
@@ -149,20 +149,20 @@
command="placesCmd_new:bookmark"
label="&cmd.new_bookmark.label;"
accesskey="&cmd.new_bookmark.accesskey;"
- selection="any"
+ selectiontype="any"
hideifnoinsertionpoint="true"/>
<menuitem id="placesContext_new:folder"
command="placesCmd_new:folder"
label="&cmd.new_folder.label;"
accesskey="&cmd.context_new_folder.accesskey;"
- selection="any"
+ selectiontype="any"
hideifnoinsertionpoint="true"/>
<menuitem id="placesContext_new:separator"
command="placesCmd_new:separator"
label="&cmd.new_separator.label;"
accesskey="&cmd.new_separator.accesskey;"
closemenu="single"
- selection="any"
+ selectiontype="any"
hideifnoinsertionpoint="true"/>
<menuseparator id="placesContext_newSeparator"/>
<menuitem id="placesContext_createBookmark"
@@ -182,14 +182,13 @@
command="placesCmd_copy"
label="&copyCmd.label;"
closemenu="single"
- accesskey="&copyCmd.accesskey;"
- selection="any"/>
+ accesskey="&copyCmd.accesskey;"/>
<menuitem id="placesContext_paste"
command="placesCmd_paste"
label="&pasteCmd.label;"
closemenu="single"
accesskey="&pasteCmd.accesskey;"
- selection="any"
+ selectiontype="any"
hideifnoinsertionpoint="true"/>
<menuseparator id="placesContext_editSeparator"/>
<menuitem id="placesContext_delete"
@@ -204,7 +203,7 @@
accesskey="&cmd.delete.accesskey;"
closemenu="single"
selection="link"
- forcehideselection="bookmark"/>
+ forcehideselection="bookmark|livemarkChild"/>
<menuitem id="placesContext_deleteHost"
command="placesCmd_deleteDataHost"
label="&cmd.deleteDomainData.label;"
@@ -213,7 +212,7 @@
selection="link|host"
selectiontype="single"
hideifprivatebrowsing="true"
- forcehideselection="bookmark"/>
+ forcehideselection="bookmark|livemarkChild"/>
<menuseparator id="placesContext_deleteSeparator"/>
<menuitem id="placesContext_reload"
command="placesCmd_reload"
diff --git a/application/palemoon/components/places/content/sidebarUtils.js b/application/palemoon/components/places/content/sidebarUtils.js
index 8ffb70348..06ed53753 100644
--- a/application/palemoon/components/places/content/sidebarUtils.js
+++ b/application/palemoon/components/places/content/sidebarUtils.js
@@ -40,7 +40,7 @@ var SidebarUtils = {
var openInTabs = isContainer &&
(aEvent.button == 1 ||
(aEvent.button == 0 && modifKey)) &&
- PlacesUtils.hasChildURIs(tbo.view.nodeForTreeIndex(cell.row));
+ PlacesUtils.hasChildURIs(tbo.view.nodeForTreeIndex(cell.row), true);
if (aEvent.button == 0 && isContainer && !openInTabs) {
tbo.view.toggleOpenState(cell.row);
diff --git a/application/palemoon/components/preferences/advanced.xul b/application/palemoon/components/preferences/advanced.xul
index 34998c1b8..e5f3bb160 100644
--- a/application/palemoon/components/preferences/advanced.xul
+++ b/application/palemoon/components/preferences/advanced.xul
@@ -106,6 +106,8 @@
<preference id="general.smoothScroll.scrollbars" name="general.smoothScroll.scrollbars" type="bool"/>
<preference id="general.smoothScroll.scrollbars.durationMinMS" name="general.smoothScroll.scrollbars.durationMinMS" type="int"/>
<preference id="general.smoothScroll.scrollbars.durationMaxMS" name="general.smoothScroll.scrollbars.durationMaxMS" type="int"/>
+
+ <preference id="mousewheel.default.delta_multiplier_y" name="mousewheel.default.delta_multiplier_y" type="int"/>
</preferences>
#ifdef HAVE_SHELL_SERVICE
@@ -445,6 +447,13 @@
preference="general.smoothScroll.scrollbars.durationMaxMS"/>
<label flex="1">ms.</label>
</hbox>
+
+ <hbox align="center">
+ <label value="&smoothscroll.overall.yspeed.label;"/>
+ <textbox type="number" size="3" min="1" max="999"
+ preference="mousewheel.default.delta_multiplier_y"/>
+ <label flex="1">%.</label>
+ </hbox>
</groupbox>
</tabpanel>
<!-- end Smooth scrolling tab -->
diff --git a/application/palemoon/components/preferences/privacy.js b/application/palemoon/components/preferences/privacy.js
index 05c2f9b8a..e2a871acc 100644
--- a/application/palemoon/components/preferences/privacy.js
+++ b/application/palemoon/components/preferences/privacy.js
@@ -298,36 +298,6 @@ var gPrivacyPane = {
// HISTORY
- /**
- * Read the location bar enabled and suggestion prefs
- * @return Int value for suggestion menulist
- */
- readSuggestionPref: function PPP_readSuggestionPref()
- {
- let getVal = function(aPref)
- document.getElementById("browser.urlbar." + aPref).value;
-
- // Suggest nothing if autocomplete is not enabled
- if (!getVal("autocomplete.enabled"))
- return -1;
-
- // Bottom 2 bits of default.behavior specify history/bookmark
- return getVal("default.behavior") & 3;
- },
-
- /**
- * Update browser.urlbar.autocomplete.enabled when a
- * browser.urlbar.suggest.* pref is changed from the ui.
- */
- writeSuggestionPref: function PPP_writeSuggestionPref() {
- let getVal = (aPref) => {
- return document.getElementById("browser.urlbar.suggest." + aPref).value;
- }
- // autocomplete.enabled is true if any of the suggestions is true
- let enabled = ["history", "bookmark", "openpage"].map(getVal).some(v => v);
- Services.prefs.setBoolPref("browser.urlbar.autocomplete.enabled", enabled);
- },
-
/*
* Preferences:
*
diff --git a/application/palemoon/components/preferences/privacy.xul b/application/palemoon/components/preferences/privacy.xul
index bdb227c63..d2f8106d1 100644
--- a/application/palemoon/components/preferences/privacy.xul
+++ b/application/palemoon/components/preferences/privacy.xul
@@ -254,15 +254,12 @@
<vbox id="tabPrefsBox" align="start" flex="1">
<checkbox id="historySuggestion" label="&locbar.history.label;"
- onsyncfrompreference="return gPrivacyPane.writeSuggestionPref();"
accesskey="&locbar.history.accesskey;"
preference="browser.urlbar.suggest.history"/>
<checkbox id="bookmarkSuggestion" label="&locbar.bookmarks.label;"
- onsyncfrompreference="return gPrivacyPane.writeSuggestionPref();"
accesskey="&locbar.bookmarks.accesskey;"
preference="browser.urlbar.suggest.bookmark"/>
<checkbox id="openpageSuggestion" label="&locbar.openpage.label;"
- onsyncfrompreference="return gPrivacyPane.writeSuggestionPref();"
accesskey="&locbar.openpage.accesskey;"
preference="browser.urlbar.suggest.openpage"/>
</vbox>
diff --git a/application/palemoon/config/version.txt b/application/palemoon/config/version.txt
index bcbf0fd12..ff225a990 100644
--- a/application/palemoon/config/version.txt
+++ b/application/palemoon/config/version.txt
@@ -1 +1 @@
-28.6.0a1 \ No newline at end of file
+28.7.0a1 \ No newline at end of file
diff --git a/application/palemoon/configure.in b/application/palemoon/configure.in
index eb02af3c0..70ddf6621 100644
--- a/application/palemoon/configure.in
+++ b/application/palemoon/configure.in
@@ -15,20 +15,6 @@ AC_SUBST(MOZ_PHOENIX_EXTENSIONS)
dnl Optional parts of the build.
dnl ========================================================
-dnl = Disable the status bar code
-dnl ========================================================
-MOZ_ARG_DISABLE_BOOL(browser-statusbar,
-[ --disable-browser-statusbar Disable Browser Status bar],
- MOZ_BROWSER_STATUSBAR=,
- MOZ_BROWSER_STATUSBAR=1)
-
-if test -n "$MOZ_BROWSER_STATUSBAR"; then
- AC_DEFINE(MOZ_BROWSER_STATUSBAR)
-fi
-
-AC_SUBST(MOZ_BROWSER_STATUSBAR)
-
-dnl ========================================================
dnl = Disable Sync
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(sync,
@@ -36,3 +22,16 @@ MOZ_ARG_DISABLE_BOOL(sync,
MOZ_SERVICES_SYNC=,
MOZ_SERVICES_SYNC=1)
+dnl ========================================================
+dnl = Disable Lightweight Themes
+dnl ========================================================
+MOZ_ARG_DISABLE_BOOL(personas,
+[ --disable-personas Disable lightweight theme support],
+ MOZ_PERSONAS=,
+ MOZ_PERSONAS=1)
+
+if test -n "$MOZ_PERSONAS"; then
+ AC_DEFINE(MOZ_PERSONAS)
+fi
+
+AC_SUBST(MOZ_PERSONAS) \ No newline at end of file
diff --git a/application/palemoon/confvars.sh b/application/palemoon/confvars.sh
index 6216cba5b..ee8e38412 100644
--- a/application/palemoon/confvars.sh
+++ b/application/palemoon/confvars.sh
@@ -43,8 +43,8 @@ MC_PALEMOON=1
# Firefox-like browsers
MOZ_PHOENIX=1
-# Browser Feature: Status bar Component
-MOZ_BROWSER_STATUSBAR=1
+# Lightweight Themes
+MOZ_PERSONAS=1
# Browser Feature: Profile Migration Component
MOZ_PROFILE_MIGRATOR=
diff --git a/application/palemoon/installer/Makefile.in b/application/palemoon/installer/Makefile.in
index 3f009c51c..a0c38f282 100644
--- a/application/palemoon/installer/Makefile.in
+++ b/application/palemoon/installer/Makefile.in
@@ -113,19 +113,19 @@ include $(topsrcdir)/toolkit/mozapps/installer/packager.mk
ifeq (bundle, $(MOZ_FS_LAYOUT))
BINPATH = $(_BINPATH)
-DEFINES += -DAPPNAME=$(_APPNAME)
+DEFINES += -DAPPNAME='$(_APPNAME)'
else
# Every other platform just winds up in dist/bin
BINPATH = bin
endif
-DEFINES += -DBINPATH=$(BINPATH)
+DEFINES += -DBINPATH='$(BINPATH)'
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
RESPATH = $(_APPNAME)/Contents/Resources
else
RESPATH = $(BINPATH)
endif
-DEFINES += -DRESPATH=$(RESPATH)
+DEFINES += -DRESPATH='$(RESPATH)'
AB = $(firstword $(subst -, ,$(AB_CD)))
DEFINES += -DAB=$(AB)
@@ -173,7 +173,7 @@ endif
package-compare:: $(MOZ_PKG_MANIFEST)
ifdef MOZ_PKG_MANIFEST_P
- cd $(DIST); find $(PKGCOMP_FIND_OPTS) $(FINDPATH) -type f | sort > bin-list.txt
+ cd $(DIST); find $(PKGCOMP_FIND_OPTS) '$(FINDPATH)' -type f | sort > bin-list.txt
grep '^$(BINPATH)' $(MOZ_PKG_MANIFEST) | sed -e 's/^\///' | sort > $(DIST)/pack-list.txt
-diff -u $(DIST)/pack-list.txt $(DIST)/bin-list.txt
rm -f $(DIST)/pack-list.txt $(DIST)/bin-list.txt
diff --git a/application/palemoon/installer/package-manifest.in b/application/palemoon/installer/package-manifest.in
index 0d80e15f9..f95f18f77 100644
--- a/application/palemoon/installer/package-manifest.in
+++ b/application/palemoon/installer/package-manifest.in
@@ -206,11 +206,6 @@
#endif
#ifdef MOZ_DEVTOOLS
-; [Webide Files]
-@RESPATH@/browser/chrome/webide@JAREXT@
-@RESPATH@/browser/chrome/webide.manifest
-@RESPATH@/browser/@PREF_DIR@/webide-prefs.js
-
; DevTools
@RESPATH@/browser/chrome/devtools@JAREXT@
@RESPATH@/browser/chrome/devtools.manifest
diff --git a/application/palemoon/installer/windows/nsis/installer.nsi b/application/palemoon/installer/windows/nsis/installer.nsi
index 9216bb6e1..9f61c9cbb 100644
--- a/application/palemoon/installer/windows/nsis/installer.nsi
+++ b/application/palemoon/installer/windows/nsis/installer.nsi
@@ -34,7 +34,6 @@ RequestExecutionLevel user
Var TmpVal
Var InstallType
Var AddStartMenuSC
-Var AddTaskbarSC
Var AddQuickLaunchSC
Var AddDesktopSC
Var InstallMaintenanceService
@@ -92,7 +91,6 @@ VIAddVersionKey "OriginalFilename" "setup.exe"
!insertmacro InitHashAppModelId
!insertmacro IsHandlerForInstallDir
!insertmacro IsPinnedToTaskBar
-!insertmacro IsUserAdmin
!insertmacro LogDesktopShortcut
!insertmacro LogQuickLaunchShortcut
!insertmacro LogStartMenuShortcut
@@ -391,12 +389,10 @@ Section "-Application" APP_IDX
; If we are writing to HKLM and create either the desktop or start menu
; shortcuts set IconsVisible to 1 otherwise to 0.
- ; Taskbar shortcuts imply having a start menu shortcut.
${StrFilter} "${FileMainEXE}" "+" "" "" $R9
StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
${If} $AddDesktopSC == 1
${OrIf} $AddStartMenuSC == 1
- ${OrIf} $AddTaskbarSC == 1
WriteRegDWORD HKLM "$0" "IconsVisible" 1
${Else}
WriteRegDWORD HKLM "$0" "IconsVisible" 0
@@ -410,12 +406,10 @@ Section "-Application" APP_IDX
; If we create either the desktop or start menu shortcuts, then
; set IconsVisible to 1 otherwise to 0.
- ; Taskbar shortcuts imply having a start menu shortcut.
${StrFilter} "${FileMainEXE}" "+" "" "" $R9
StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
${If} $AddDesktopSC == 1
${OrIf} $AddStartMenuSC == 1
- ${OrIf} $AddTaskbarSC == 1
WriteRegDWORD HKCU "$0" "IconsVisible" 1
${Else}
WriteRegDWORD HKCU "$0" "IconsVisible" 0
diff --git a/application/palemoon/installer/windows/nsis/shared.nsh b/application/palemoon/installer/windows/nsis/shared.nsh
index 815853ae7..385a411a3 100644
--- a/application/palemoon/installer/windows/nsis/shared.nsh
+++ b/application/palemoon/installer/windows/nsis/shared.nsh
@@ -322,11 +322,9 @@
WriteRegStr SHCTX "$0\.xhtml" "" "PaleMoonHTML"
${EndIf}
- ${AddAssociationIfNoneExist} ".pdf"
${AddAssociationIfNoneExist} ".oga"
${AddAssociationIfNoneExist} ".ogg"
${AddAssociationIfNoneExist} ".ogv"
- ${AddAssociationIfNoneExist} ".pdf"
${AddAssociationIfNoneExist} ".webm"
; An empty string is used for the 5th param because PaleMoonHTML is not a
@@ -842,24 +840,17 @@
ClearErrors
WriteIniStr "$0" "TASKBAR" "Migrated" "true"
${If} ${AtLeastWin7}
- ; If we didn't run the stub installer, AddTaskbarSC will be empty.
- ; We determine whether to pin based on whether we're the default
- ; browser, or if we're on win8 or later, we always pin.
- ${If} $AddTaskbarSC == ""
- ; No need to check the default on Win8 and later
- ${If} ${AtMostWin2008R2}
- ; Check if the PaleMoon is the http handler for this user
- SetShellVarContext current ; Set SHCTX to the current user
- ${IsHandlerForInstallDir} "http" $R9
- ${If} $TmpVal == "HKLM"
- SetShellVarContext all ; Set SHCTX to all users
- ${EndIf}
- ${EndIf}
- ${If} "$R9" == "true"
- ${OrIf} ${AtLeastWin8}
- ${PinToTaskBar}
+ ; No need to check the default on Win8 and later
+ ${If} ${AtMostWin2008R2}
+ ; Check if the Pale Moon is the http handler for this user
+ SetShellVarContext current ; Set SHCTX to the current user
+ ${IsHandlerForInstallDir} "http" $R9
+ ${If} $TmpVal == "HKLM"
+ SetShellVarContext all ; Set SHCTX to all users
${EndIf}
- ${ElseIf} $AddTaskbarSC == "1"
+ ${EndIf}
+ ${If} "$R9" == "true"
+ ${OrIf} ${AtLeastWin8}
${PinToTaskBar}
${EndIf}
${EndIf}
diff --git a/application/palemoon/installer/windows/nsis/uninstaller.nsi b/application/palemoon/installer/windows/nsis/uninstaller.nsi
index c85af3656..44b7c060b 100644
--- a/application/palemoon/installer/windows/nsis/uninstaller.nsi
+++ b/application/palemoon/installer/windows/nsis/uninstaller.nsi
@@ -76,7 +76,6 @@ VIAddVersionKey "OriginalFilename" "helper.exe"
!insertmacro InitHashAppModelId
!insertmacro IsHandlerForInstallDir
!insertmacro IsPinnedToTaskBar
-!insertmacro IsUserAdmin
!insertmacro LogDesktopShortcut
!insertmacro LogQuickLaunchShortcut
!insertmacro LogStartMenuShortcut
@@ -168,56 +167,6 @@ UninstPage custom un.preConfirm
ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe"
################################################################################
-# Helper Functions
-
-; This function is used to uninstall the maintenance service if the
-; application currently being uninstalled is the last application to use the
-; maintenance service.
-Function un.UninstallServiceIfNotUsed
- ; $0 will store if a subkey exists
- ; $1 will store the first subkey if it exists or an empty string if it doesn't
- ; Backup the old values
- Push $0
- Push $1
-
- ; The maintenance service always uses the 64-bit registry on x64 systems
- ${If} ${RunningX64}
- SetRegView 64
- ${EndIf}
-
- ; Figure out the number of subkeys
- StrCpy $0 0
- ${Do}
- EnumRegKey $1 HKLM "Software\Mozilla\MaintenanceService" $0
- ${If} "$1" == ""
- ${ExitDo}
- ${EndIf}
- IntOp $0 $0 + 1
- ${Loop}
-
- ; Restore back the registry view
- ${If} ${RunningX64}
- SetRegView lastUsed
- ${EndIf}
- ${If} $0 == 0
- ; Get the path of the maintenance service uninstaller
- ReadRegStr $1 HKLM ${MaintUninstallKey} "UninstallString"
-
- ; If the uninstall string does not exist, skip executing it
- StrCmp $1 "" doneUninstall
-
- ; $1 is already a quoted string pointing to the install path
- ; so we're already protected against paths with spaces
- nsExec::Exec "$1 /S"
-doneUninstall:
- ${EndIf}
-
- ; Restore the old value of $1 and $0
- Pop $1
- Pop $0
-FunctionEnd
-
-################################################################################
# Install Sections
; Empty section required for the installer to compile as an uninstaller
Section ""
@@ -297,7 +246,6 @@ Section "Uninstall"
${un.RegCleanFileHandler} ".oga" "PaleMoonHTML"
${un.RegCleanFileHandler} ".ogg" "PaleMoonHTML"
${un.RegCleanFileHandler} ".ogv" "PaleMoonHTML"
- ${un.RegCleanFileHandler} ".pdf" "PaleMoonHTML"
${un.RegCleanFileHandler} ".webm" "PaleMoonHTML"
${EndIf}
diff --git a/application/palemoon/locales/Makefile.in b/application/palemoon/locales/Makefile.in
index 38a867658..897fa0bca 100644
--- a/application/palemoon/locales/Makefile.in
+++ b/application/palemoon/locales/Makefile.in
@@ -198,10 +198,10 @@ endif
ident:
@printf "fx_revision "
@$(PYTHON) $(topsrcdir)/config/printconfigsetting.py \
- $(STAGEDIST)/application.ini App SourceStamp
+ '$(STAGEDIST)'/application.ini App SourceStamp
@printf "buildid "
@$(PYTHON) $(topsrcdir)/config/printconfigsetting.py \
- $(STAGEDIST)/application.ini App BuildID
+ '$(STAGEDIST)'/application.ini App BuildID
merge-%:
ifdef LOCALE_MERGEDIR
diff --git a/application/palemoon/locales/en-US/chrome/browser/preferences/advanced.dtd b/application/palemoon/locales/en-US/chrome/browser/preferences/advanced.dtd
index dcb7b0e90..bb8dd12d2 100644
--- a/application/palemoon/locales/en-US/chrome/browser/preferences/advanced.dtd
+++ b/application/palemoon/locales/en-US/chrome/browser/preferences/advanced.dtd
@@ -147,3 +147,5 @@
<!ENTITY smoothscroll.pagekeys.duration "Page up/down scroll duration:">
<!ENTITY smoothscroll.scrollbar.label "Smooth scroll with scrollbars">
<!ENTITY smoothscroll.scrollbar.duration "Scrollbar smooth scroll duration:">
+
+<!ENTITY smoothscroll.overall.yspeed.label "Overall smooth scroll speed:">
diff --git a/application/palemoon/locales/generic/profile/bookmarks.html.in b/application/palemoon/locales/generic/profile/bookmarks.html.in
index 96270641a..90e3adfe9 100644
--- a/application/palemoon/locales/generic/profile/bookmarks.html.in
+++ b/application/palemoon/locales/generic/profile/bookmarks.html.in
@@ -11,9 +11,9 @@
<DT><H3 PERSONAL_TOOLBAR_FOLDER="true" ID="rdf:#$FvPhC3">@bookmarks_toolbarfolder@</H3>
<DD>@bookmarks_toolbarfolder_description@
<DL><p>
- <DT><A HREF="http://www.palemoon.org/" ICON_URI="http://www.palemoon.org/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADe0lEQVQ4jW2T7VPTBQDHfwd/gpZW57bwuvJFIQ1lPgy9g7KzNCO4A9sDA8FNTCyg0KD9GBuCIrYhHYPw6Ygd2xB0rAFrEfxikA03YibyIO4pYGwONlhbx923F72I2/V5/f18X32/BBHDrox6ejKnlTxSaqRKlROuK5op1w3DHKUfdZC1d36hxeY3Qca9lVFH7uG2RFLPdKGo0YqOQTcouw/T7hBcy2E4l9YjuhGHmCDJuFg7bmd6mXrXMRleO9EEZp4axc2T6DH/CddyGN5ABMH1vxGObMC/GoVp3N1JEJtKXmadEdPY50FLJ/FGphIHzurx5Y1HMFiW8HB2BX84gvD4wghHNvBXdAMeXxi3fpj5+l+ZWUjbzsyL0NjFeDOjAcm823inxIjSVjuMD72g7D5YZ1fw2BmEbzWCQCgK29wK6rXTEYF0aAexPTmX3MbkY+fhYqQKlMgW/wiObAzFzZNo1s9D/2ARk/OrGPrdB5PVC5PVi7HHz3FaYUN29ZCYePFt/vDW3VwkfnARR4tuouAyBUGdGbw6C9r6HTDZlmF/tgoN5UFbnwPynjk06+chUz1B2vn7Q8RLyTzX1kQOEg59iiOF3+IkOQCejIJQboXi3lOMzwQw7Q5h5JEf6mEPbhudEF2fwNGKEbBOqZ0ELYXn2pLIwQvMPLB5cmSU68C7NIqSlilcveuCweLH+EwI1tkg9A8WofrZDW6tBccvDoN9Wu0k6Ck8alsSB6+kFCDpIylOlPUgR0JB+I0V4g43FL1+dFIhGH5bR1v/EiTfP4VIPoHMykGkCjXDBC1FUEXbywFjfz7Y2VJkXtAhp2oQIrkNEvUC6nV+NPaH0NgXQv19PyranTjbZEeOhMLBQhVJMFhCBmPvJ9GE/Twwj5fj/c+04NaMoKT1CRp6A7g+sAZFXxByQxBXdc8h1S6hst2BD8sHIkknv6MTBEEQ9H25klf3ccE8VobMLzQQXrNA0ulB08AamoxraOwPoaE3gNruZZAqN0QKGw6JtFWblpwVT2fxtQkH8pFeoAS/hsKFW7O4cs+Ha/oA6rq9qOlahLjDBaHchrRz3VqCyIqPuUNW/A5WfvXr71VE3z3XBX7tGMraplHZ/gxf3ZnH5y1T4MhGo6kiTfX/yP/BOEwyducopWlFXeYs8U8Lgsu/LvAvmc0fV5ikrFwVIzb/D6b/QY5z63dPAAAAAElFTkSuQmCC">Pale Moon</A>
- <DT><A HREF="https://forum.palemoon.org/index.php" ICON_URI="https://forum.palemoon.org/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADWUlEQVQ4jW1T60+Tdxj9Bf4CyXRR21Kixgheq1baAo2IaLkIpi0tpdQCBZHLNIIgQvGlpVkHOnnpFKrOTafUtjIuVYmXKBZREzLB4A0NbOVFghVtcEOqJid+YMlI50meb+ecPM/JeQgJQESymcNTNVHx+7vcJdYBps7+dNTS9tz9s2uQ0pQ7OIH8OaCCVqb+QG3ItPqj81tRYHmIltsMeh5PYoh5D8Y7Dc/EPzNnrzw5TCgqKFAdtCSuzL480YQlO34CL8uO4qZBtN0bB+OdxmvfDKamP2Ha/xmTU3503h25SMgck0XCosOsqO/AiqXAiinFvDAhlvK2ImpLEuIkKdgqSUG2bje8kz588H/G2JsPOGZ/qJ8VxxSwv12f7V8sLELEzqMIl1SAEPLV6fvjEd69/4iBYR/qnS9mlJXtbLKIn0ct4GkQJi5GtNYKhf464tP2ghACmUyOevokpHIlVoSHw+a6h5v9Xtx/9ha5dD+Sy69WkwXrte6Q1WqsSqyApOAMdHVuiNMNIIRAkZ6Byz1D6HvyCiftt9HUPgi6fRjNV/5ErW0I4sLWO2ThBg0TsjoDYTFFiM89gfTqa4hW1IAQAhabg81xCdiWmIraY7/A3j2KX294kG95BMmhu4jUOTyEzc9kQlap8M26LESpG7CzzIWYdNP/7lepNfi9+yVs3WNQm/uQfNANUd7FUcKJ3NUzf40KC/k6rE01YkdpOwSy2Q2ksjQYjpzG9/Q5NJ5qRXPnCGouDCOfHoC06hYEOS13CEeQW8PaqEKoIAsihRHS8k4IZfrZEBVq1DleorHLh8arPtR3TKLyvAeFxx9DaXCDrz1LkbDYktBQvsrPjczEuqQyJOx1IurfDGTKTNAdDBq7ptDQNYUjrneodU6g6rwHKRXXZyLk9Gy1Q0U6A3dTBnhJJZAecCClsBkrwlciZ3cx6M4xWK79jR8v+2Bue4Nq2xjy6QEIcltq5jRZHsyJ1F7iCrMRm2OFxtSNcsstmM704mjHa5jbvDBdmoC+hUFeQz/EBU4nIfLggHeQB7NFeYZl2yr9ccWt0JgfoPT0C1T99hcqzo1gn/UZ1KZev0hnM3xF/B+42ynumrQTRvEeR69Mf3Nca34wnmF09yYccBnXKpu4gfwvLIL1Qrog43cAAAAASUVORK5CYII=" LAST_CHARSET="UTF-8">Pale Moon forum</A>
- <DT><A HREF="http://www.palemoon.org/faq.shtml" ICON_URI="http://www.palemoon.org/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADe0lEQVQ4jW2T7VPTBQDHfwd/gpZW57bwuvJFIQ1lPgy9g7KzNCO4A9sDA8FNTCyg0KD9GBuCIrYhHYPw6Ygd2xB0rAFrEfxikA03YibyIO4pYGwONlhbx923F72I2/V5/f18X32/BBHDrox6ejKnlTxSaqRKlROuK5op1w3DHKUfdZC1d36hxeY3Qca9lVFH7uG2RFLPdKGo0YqOQTcouw/T7hBcy2E4l9YjuhGHmCDJuFg7bmd6mXrXMRleO9EEZp4axc2T6DH/CddyGN5ABMH1vxGObMC/GoVp3N1JEJtKXmadEdPY50FLJ/FGphIHzurx5Y1HMFiW8HB2BX84gvD4wghHNvBXdAMeXxi3fpj5+l+ZWUjbzsyL0NjFeDOjAcm823inxIjSVjuMD72g7D5YZ1fw2BmEbzWCQCgK29wK6rXTEYF0aAexPTmX3MbkY+fhYqQKlMgW/wiObAzFzZNo1s9D/2ARk/OrGPrdB5PVC5PVi7HHz3FaYUN29ZCYePFt/vDW3VwkfnARR4tuouAyBUGdGbw6C9r6HTDZlmF/tgoN5UFbnwPynjk06+chUz1B2vn7Q8RLyTzX1kQOEg59iiOF3+IkOQCejIJQboXi3lOMzwQw7Q5h5JEf6mEPbhudEF2fwNGKEbBOqZ0ELYXn2pLIwQvMPLB5cmSU68C7NIqSlilcveuCweLH+EwI1tkg9A8WofrZDW6tBccvDoN9Wu0k6Ck8alsSB6+kFCDpIylOlPUgR0JB+I0V4g43FL1+dFIhGH5bR1v/EiTfP4VIPoHMykGkCjXDBC1FUEXbywFjfz7Y2VJkXtAhp2oQIrkNEvUC6nV+NPaH0NgXQv19PyranTjbZEeOhMLBQhVJMFhCBmPvJ9GE/Twwj5fj/c+04NaMoKT1CRp6A7g+sAZFXxByQxBXdc8h1S6hst2BD8sHIkknv6MTBEEQ9H25klf3ccE8VobMLzQQXrNA0ulB08AamoxraOwPoaE3gNruZZAqN0QKGw6JtFWblpwVT2fxtQkH8pFeoAS/hsKFW7O4cs+Ha/oA6rq9qOlahLjDBaHchrRz3VqCyIqPuUNW/A5WfvXr71VE3z3XBX7tGMraplHZ/gxf3ZnH5y1T4MhGo6kiTfX/yP/BOEwyducopWlFXeYs8U8Lgsu/LvAvmc0fV5ikrFwVIzb/D6b/QY5z63dPAAAAAElFTkSuQmCC">F.A.Q.</A>
- <DT><A HREF="http://www.palemoon.org/releasenotes.shtml" ICON_URI="http://www.palemoon.org/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADe0lEQVQ4jW2T7VPTBQDHfwd/gpZW57bwuvJFIQ1lPgy9g7KzNCO4A9sDA8FNTCyg0KD9GBuCIrYhHYPw6Ygd2xB0rAFrEfxikA03YibyIO4pYGwONlhbx923F72I2/V5/f18X32/BBHDrox6ejKnlTxSaqRKlROuK5op1w3DHKUfdZC1d36hxeY3Qca9lVFH7uG2RFLPdKGo0YqOQTcouw/T7hBcy2E4l9YjuhGHmCDJuFg7bmd6mXrXMRleO9EEZp4axc2T6DH/CddyGN5ABMH1vxGObMC/GoVp3N1JEJtKXmadEdPY50FLJ/FGphIHzurx5Y1HMFiW8HB2BX84gvD4wghHNvBXdAMeXxi3fpj5+l+ZWUjbzsyL0NjFeDOjAcm823inxIjSVjuMD72g7D5YZ1fw2BmEbzWCQCgK29wK6rXTEYF0aAexPTmX3MbkY+fhYqQKlMgW/wiObAzFzZNo1s9D/2ARk/OrGPrdB5PVC5PVi7HHz3FaYUN29ZCYePFt/vDW3VwkfnARR4tuouAyBUGdGbw6C9r6HTDZlmF/tgoN5UFbnwPynjk06+chUz1B2vn7Q8RLyTzX1kQOEg59iiOF3+IkOQCejIJQboXi3lOMzwQw7Q5h5JEf6mEPbhudEF2fwNGKEbBOqZ0ELYXn2pLIwQvMPLB5cmSU68C7NIqSlilcveuCweLH+EwI1tkg9A8WofrZDW6tBccvDoN9Wu0k6Ck8alsSB6+kFCDpIylOlPUgR0JB+I0V4g43FL1+dFIhGH5bR1v/EiTfP4VIPoHMykGkCjXDBC1FUEXbywFjfz7Y2VJkXtAhp2oQIrkNEvUC6nV+NPaH0NgXQv19PyranTjbZEeOhMLBQhVJMFhCBmPvJ9GE/Twwj5fj/c+04NaMoKT1CRp6A7g+sAZFXxByQxBXdc8h1S6hst2BD8sHIkknv6MTBEEQ9H25klf3ccE8VobMLzQQXrNA0ulB08AamoxraOwPoaE3gNruZZAqN0QKGw6JtFWblpwVT2fxtQkH8pFeoAS/hsKFW7O4cs+Ha/oA6rq9qOlahLjDBaHchrRz3VqCyIqPuUNW/A5WfvXr71VE3z3XBX7tGMraplHZ/gxf3ZnH5y1T4MhGo6kiTfX/yP/BOEwyducopWlFXeYs8U8Lgsu/LvAvmc0fV5ikrFwVIzb/D6b/QY5z63dPAAAAAElFTkSuQmCC">Release notes</A>
+ <DT><A HREF="http://www.palemoon.org/" ICON_URI="http://www.palemoon.org/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfjBQQNKi3s6zvVAAAAB3RJTUUH4wUFDiY4QniqfgAAAAlwSFlzAAAK8AAACvABQqw0mAAAAn1JREFUeNpVU9FKW0EUnLO7NzdFY5uqRSMSoSj1F/paP0EEoU/2H/pWIkiLX+GzH5HnQj9BENQqpSgWkdbeu/fubudsCKQ3CSS7M3PmzDmRb5f3mH1SShsGcmAF7wTYaGMC35cQjBNwYoxczeJlKpASrAFGHYOP3cKUJMO3Cb4JMPwhIggJdZNwLEaOKBiU52bIp73S7jp+iyyJFNG2/JBlSBYC6KrsWhnR1XYQ2Sc1GuRKcTTXMbudwqpcfokxUPtamV/heGWdgaVKYWXPpvRp0sLF/ZB3Z72uKx0B3ocswis8VQ0CRf7yTMWflRZTh00bq1awpS18IK8kXltBQWDbBroK2X7Byxc9m9tIk7Qyju66EThwjHhHyS3DQpG0dSYVEELM9rWdyKskmmDMEpaphjpAnOw4VhuayAMGBi85cX0UzF7xVEfUdJNyV5Ltu5wNYIJsOK1GPji6TFKBkm3wJxq6iLQkMWVXhkmqkAktHHF/qgDnfXsZUhi03mTVqm7gFKiDzuPUXWg4FabPqbdRRVWcZOcuiJXx02P1VgjU8HJM2rtWysFOzh1dcXSaPizolEKdue5Yvp7fDn+efz+LtS81Bt2YIHn1Jn0SqLO31ubwtLzlGfekerm5vuWss1fzz3vHtxc/RpE9q4cmkcCKUW2yGc2EFLQpTdcei8OVL8a567zKCyuLR78f6u37m7s9iS0rE1HrhD1qilXC6vyIddCr/mr/dH516bNy8ypz3mHwZrD/anPt0JuyqkOBqtJlKrhMFk2dUPkID1MtvV45XNsevCcn/vdvnD6+btbvbn4dPNw+7lSVH+pZOde96i8vjJcH/ZNO6a5n8f8A5KRcUpQlS3kAAAAASUVORK5CYII=">Pale Moon</A>
+ <DT><A HREF="https://forum.palemoon.org/index.php" ICON_URI="https://forum.palemoon.org/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfjBQQNKi3s6zvVAAAAB3RJTUUH4wUFDiY4QniqfgAAAAlwSFlzAAAK8AAACvABQqw0mAAAAn1JREFUeNpVU9FKW0EUnLO7NzdFY5uqRSMSoSj1F/paP0EEoU/2H/pWIkiLX+GzH5HnQj9BENQqpSgWkdbeu/fubudsCKQ3CSS7M3PmzDmRb5f3mH1SShsGcmAF7wTYaGMC35cQjBNwYoxczeJlKpASrAFGHYOP3cKUJMO3Cb4JMPwhIggJdZNwLEaOKBiU52bIp73S7jp+iyyJFNG2/JBlSBYC6KrsWhnR1XYQ2Sc1GuRKcTTXMbudwqpcfokxUPtamV/heGWdgaVKYWXPpvRp0sLF/ZB3Z72uKx0B3ocswis8VQ0CRf7yTMWflRZTh00bq1awpS18IK8kXltBQWDbBroK2X7Byxc9m9tIk7Qyju66EThwjHhHyS3DQpG0dSYVEELM9rWdyKskmmDMEpaphjpAnOw4VhuayAMGBi85cX0UzF7xVEfUdJNyV5Ltu5wNYIJsOK1GPji6TFKBkm3wJxq6iLQkMWVXhkmqkAktHHF/qgDnfXsZUhi03mTVqm7gFKiDzuPUXWg4FabPqbdRRVWcZOcuiJXx02P1VgjU8HJM2rtWysFOzh1dcXSaPizolEKdue5Yvp7fDn+efz+LtS81Bt2YIHn1Jn0SqLO31ubwtLzlGfekerm5vuWss1fzz3vHtxc/RpE9q4cmkcCKUW2yGc2EFLQpTdcei8OVL8a567zKCyuLR78f6u37m7s9iS0rE1HrhD1qilXC6vyIddCr/mr/dH516bNy8ypz3mHwZrD/anPt0JuyqkOBqtJlKrhMFk2dUPkID1MtvV45XNsevCcn/vdvnD6+btbvbn4dPNw+7lSVH+pZOde96i8vjJcH/ZNO6a5n8f8A5KRcUpQlS3kAAAAASUVORK5CYII=" LAST_CHARSET="UTF-8">Pale Moon forum</A>
+ <DT><A HREF="http://www.palemoon.org/faq.shtml" ICON_URI="http://www.palemoon.org/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfjBQQNKi3s6zvVAAAAB3RJTUUH4wUFDiY4QniqfgAAAAlwSFlzAAAK8AAACvABQqw0mAAAAn1JREFUeNpVU9FKW0EUnLO7NzdFY5uqRSMSoSj1F/paP0EEoU/2H/pWIkiLX+GzH5HnQj9BENQqpSgWkdbeu/fubudsCKQ3CSS7M3PmzDmRb5f3mH1SShsGcmAF7wTYaGMC35cQjBNwYoxczeJlKpASrAFGHYOP3cKUJMO3Cb4JMPwhIggJdZNwLEaOKBiU52bIp73S7jp+iyyJFNG2/JBlSBYC6KrsWhnR1XYQ2Sc1GuRKcTTXMbudwqpcfokxUPtamV/heGWdgaVKYWXPpvRp0sLF/ZB3Z72uKx0B3ocswis8VQ0CRf7yTMWflRZTh00bq1awpS18IK8kXltBQWDbBroK2X7Byxc9m9tIk7Qyju66EThwjHhHyS3DQpG0dSYVEELM9rWdyKskmmDMEpaphjpAnOw4VhuayAMGBi85cX0UzF7xVEfUdJNyV5Ltu5wNYIJsOK1GPji6TFKBkm3wJxq6iLQkMWVXhkmqkAktHHF/qgDnfXsZUhi03mTVqm7gFKiDzuPUXWg4FabPqbdRRVWcZOcuiJXx02P1VgjU8HJM2rtWysFOzh1dcXSaPizolEKdue5Yvp7fDn+efz+LtS81Bt2YIHn1Jn0SqLO31ubwtLzlGfekerm5vuWss1fzz3vHtxc/RpE9q4cmkcCKUW2yGc2EFLQpTdcei8OVL8a567zKCyuLR78f6u37m7s9iS0rE1HrhD1qilXC6vyIddCr/mr/dH516bNy8ypz3mHwZrD/anPt0JuyqkOBqtJlKrhMFk2dUPkID1MtvV45XNsevCcn/vdvnD6+btbvbn4dPNw+7lSVH+pZOde96i8vjJcH/ZNO6a5n8f8A5KRcUpQlS3kAAAAASUVORK5CYII=">F.A.Q.</A>
+ <DT><A HREF="http://www.palemoon.org/releasenotes.shtml" ICON_URI="http://www.palemoon.org/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfjBQQNKi3s6zvVAAAAB3RJTUUH4wUFDiY4QniqfgAAAAlwSFlzAAAK8AAACvABQqw0mAAAAn1JREFUeNpVU9FKW0EUnLO7NzdFY5uqRSMSoSj1F/paP0EEoU/2H/pWIkiLX+GzH5HnQj9BENQqpSgWkdbeu/fubudsCKQ3CSS7M3PmzDmRb5f3mH1SShsGcmAF7wTYaGMC35cQjBNwYoxczeJlKpASrAFGHYOP3cKUJMO3Cb4JMPwhIggJdZNwLEaOKBiU52bIp73S7jp+iyyJFNG2/JBlSBYC6KrsWhnR1XYQ2Sc1GuRKcTTXMbudwqpcfokxUPtamV/heGWdgaVKYWXPpvRp0sLF/ZB3Z72uKx0B3ocswis8VQ0CRf7yTMWflRZTh00bq1awpS18IK8kXltBQWDbBroK2X7Byxc9m9tIk7Qyju66EThwjHhHyS3DQpG0dSYVEELM9rWdyKskmmDMEpaphjpAnOw4VhuayAMGBi85cX0UzF7xVEfUdJNyV5Ltu5wNYIJsOK1GPji6TFKBkm3wJxq6iLQkMWVXhkmqkAktHHF/qgDnfXsZUhi03mTVqm7gFKiDzuPUXWg4FabPqbdRRVWcZOcuiJXx02P1VgjU8HJM2rtWysFOzh1dcXSaPizolEKdue5Yvp7fDn+efz+LtS81Bt2YIHn1Jn0SqLO31ubwtLzlGfekerm5vuWss1fzz3vHtxc/RpE9q4cmkcCKUW2yGc2EFLQpTdcei8OVL8a567zKCyuLR78f6u37m7s9iS0rE1HrhD1qilXC6vyIddCr/mr/dH516bNy8ypz3mHwZrD/anPt0JuyqkOBqtJlKrhMFk2dUPkID1MtvV45XNsevCcn/vdvnD6+btbvbn4dPNw+7lSVH+pZOde96i8vjJcH/ZNO6a5n8f8A5KRcUpQlS3kAAAAASUVORK5CYII=">Release notes</A>
</DL><p>
</DL><p>
diff --git a/application/palemoon/themes/linux/jar.mn b/application/palemoon/themes/linux/jar.mn
index a79487c7f..a7c426bce 100644
--- a/application/palemoon/themes/linux/jar.mn
+++ b/application/palemoon/themes/linux/jar.mn
@@ -107,7 +107,6 @@ browser.jar:
#endif
* skin/classic/browser/preferences/preferences.css (preferences/preferences.css)
skin/classic/browser/preferences/applications.css (preferences/applications.css)
-#ifdef MOZ_BROWSER_STATUSBAR
skin/classic/browser/statusbar/dynamic.css (../shared/statusbar/dynamic.css)
* skin/classic/browser/statusbar/overlay.css (statusbar/overlay.css)
* skin/classic/browser/statusbar/prefs.css (statusbar/prefs.css)
@@ -116,7 +115,6 @@ browser.jar:
skin/classic/browser/statusbar/pms24.png (../shared/statusbar/pms24.png)
skin/classic/browser/statusbar/throbber-idle.png (../shared/statusbar/throbber-idle.png)
skin/classic/browser/statusbar/throbberStatic.png (../shared/statusbar/throbberStatic.png)
-#endif
skin/classic/browser/tabbrowser/alltabs.png (tabbrowser/alltabs.png)
skin/classic/browser/tabbrowser/connecting.png (tabbrowser/connecting.png)
skin/classic/browser/tabbrowser/loading.png (tabbrowser/loading.png)
diff --git a/application/palemoon/themes/osx/jar.mn b/application/palemoon/themes/osx/jar.mn
index c59fb1c72..67339c7cc 100644
--- a/application/palemoon/themes/osx/jar.mn
+++ b/application/palemoon/themes/osx/jar.mn
@@ -146,7 +146,6 @@ browser.jar:
skin/classic/browser/preferences/saveFile.png (preferences/saveFile.png)
* skin/classic/browser/preferences/preferences.css (preferences/preferences.css)
skin/classic/browser/preferences/applications.css (preferences/applications.css)
-#ifdef MOZ_BROWSER_STATUSBAR
skin/classic/browser/statusbar/dynamic.css (../shared/statusbar/dynamic.css)
* skin/classic/browser/statusbar/overlay.css (statusbar/overlay.css)
* skin/classic/browser/statusbar/prefs.css (statusbar/prefs.css)
@@ -155,7 +154,6 @@ browser.jar:
skin/classic/browser/statusbar/pms24.png (../shared/statusbar/pms24.png)
skin/classic/browser/statusbar/throbber-idle.png (../shared/statusbar/throbber-idle.png)
skin/classic/browser/statusbar/throbberStatic.png (../shared/statusbar/throbberStatic.png)
-#endif
skin/classic/browser/tabbrowser/alltabs.png (tabbrowser/alltabs.png)
skin/classic/browser/tabbrowser/alltabs-inverted.png (tabbrowser/alltabs-inverted.png)
skin/classic/browser/tabbrowser/newtab.png (tabbrowser/newtab.png)
diff --git a/application/palemoon/themes/windows/jar.mn b/application/palemoon/themes/windows/jar.mn
index 604466c9f..4422bb666 100644
--- a/application/palemoon/themes/windows/jar.mn
+++ b/application/palemoon/themes/windows/jar.mn
@@ -131,7 +131,6 @@ browser.jar:
skin/classic/browser/preferences/saveFile.png (preferences/saveFile.png)
* skin/classic/browser/preferences/preferences.css (preferences/preferences.css)
skin/classic/browser/preferences/applications.css (preferences/applications.css)
-#ifdef MOZ_BROWSER_STATUSBAR
skin/classic/browser/statusbar/dynamic.css (../shared/statusbar/dynamic.css)
* skin/classic/browser/statusbar/overlay.css (statusbar/overlay.css)
* skin/classic/browser/statusbar/prefs.css (statusbar/prefs.css)
@@ -140,7 +139,6 @@ browser.jar:
skin/classic/browser/statusbar/pms24.png (../shared/statusbar/pms24.png)
skin/classic/browser/statusbar/throbber-idle.png (../shared/statusbar/throbber-idle.png)
skin/classic/browser/statusbar/throbberStatic.png (../shared/statusbar/throbberStatic.png)
-#endif
skin/classic/browser/tabbrowser/alltabs.png (tabbrowser/alltabs.png)
skin/classic/browser/tabbrowser/alltabs-inverted.png (tabbrowser/alltabs-inverted.png)
skin/classic/browser/tabbrowser/newtab.png (tabbrowser/newtab.png)
diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure
index 59dc8b57b..326b2327e 100644
--- a/build/moz.configure/old.configure
+++ b/build/moz.configure/old.configure
@@ -310,6 +310,7 @@ def old_configure_options(*options):
# Below are configure flags used by Pale Moon
'--disable-browser-statusbar',
'--disable-sync',
+ '--disable-personas',
# Below are configure flags used by Basilisk
'--disable-webextensions',
diff --git a/caps/moz.build b/caps/moz.build
index 58b45e360..dc47ecbba 100644
--- a/caps/moz.build
+++ b/caps/moz.build
@@ -34,12 +34,7 @@ EXPORTS.mozilla = [
]
SOURCES += [
- # Compile this separately since nsExceptionHandler.h conflicts
- # with something from nsNullPrincipal.cpp.
'BasePrincipal.cpp',
-]
-
-UNIFIED_SOURCES += [
'DomainPolicy.cpp',
'nsJSPrincipals.cpp',
'nsNullPrincipal.cpp',
diff --git a/caps/nsJSPrincipals.cpp b/caps/nsJSPrincipals.cpp
index 0f3afa14e..8349aed53 100644
--- a/caps/nsJSPrincipals.cpp
+++ b/caps/nsJSPrincipals.cpp
@@ -15,6 +15,7 @@
#include "nsMemory.h"
#include "nsStringBuffer.h"
+#include "mozilla/ipc/PBackgroundSharedTypes.h"
#include "mozilla/dom/StructuredCloneTags.h"
// for mozilla::dom::workers::kJSPrincipalsDebugToken
#include "mozilla/dom/workers/Workers.h"
@@ -22,6 +23,7 @@
using namespace mozilla;
using namespace mozilla::ipc;
+using namespace mozilla::dom;
NS_IMETHODIMP_(MozExternalRefCountType)
nsJSPrincipals::AddRef()
diff --git a/caps/nsNullPrincipal.cpp b/caps/nsNullPrincipal.cpp
index 6ebf0f129..386344e37 100644
--- a/caps/nsNullPrincipal.cpp
+++ b/caps/nsNullPrincipal.cpp
@@ -20,6 +20,8 @@
#include "nsIClassInfoImpl.h"
#include "nsNetCID.h"
#include "nsError.h"
+#include "nsIObjectInputStream.h"
+#include "nsIObjectOutputStream.h"
#include "nsIScriptSecurityManager.h"
#include "nsPrincipal.h"
#include "nsScriptSecurityManager.h"
diff --git a/caps/nsNullPrincipalURI.cpp b/caps/nsNullPrincipalURI.cpp
index f8b867160..159928ba6 100644
--- a/caps/nsNullPrincipalURI.cpp
+++ b/caps/nsNullPrincipalURI.cpp
@@ -6,8 +6,12 @@
#include "nsNullPrincipalURI.h"
+#include "mozilla/ArrayUtils.h"
+
#include "mozilla/DebugOnly.h"
#include "mozilla/MemoryReporting.h"
+#include "mozilla/Services.h"
+#include "mozilla/Unused.h"
#include "mozilla/ipc/URIParams.h"
@@ -15,6 +19,8 @@
#include "nsCRT.h"
#include "nsIUUIDGenerator.h"
+using namespace mozilla;
+
////////////////////////////////////////////////////////////////////////////////
//// nsNullPrincipalURI
diff --git a/caps/nsPrincipal.cpp b/caps/nsPrincipal.cpp
index 129cdf9a0..d111042c1 100644
--- a/caps/nsPrincipal.cpp
+++ b/caps/nsPrincipal.cpp
@@ -19,6 +19,8 @@
#include "nsJSPrincipals.h"
#include "nsIEffectiveTLDService.h"
#include "nsIClassInfoImpl.h"
+#include "nsIObjectInputStream.h"
+#include "nsIObjectOutputStream.h"
#include "nsIProtocolHandler.h"
#include "nsError.h"
#include "nsIContentSecurityPolicy.h"
diff --git a/caps/nsScriptSecurityManager.cpp b/caps/nsScriptSecurityManager.cpp
index 129a4d0da..bf5f33599 100644
--- a/caps/nsScriptSecurityManager.cpp
+++ b/caps/nsScriptSecurityManager.cpp
@@ -59,6 +59,7 @@
#include "mozIApplication.h"
#include "mozilla/Preferences.h"
#include "mozilla/dom/BindingUtils.h"
+#include "mozilla/dom/ContentParent.h"
#include <stdint.h>
#include "mozilla/dom/ScriptSettings.h"
#include "mozilla/ClearOnShutdown.h"
@@ -70,6 +71,7 @@
using namespace mozilla;
using namespace mozilla::dom;
+using namespace mozilla::ipc;
nsIIOService *nsScriptSecurityManager::sIOService = nullptr;
nsIStringBundle *nsScriptSecurityManager::sStrBundle = nullptr;
diff --git a/chrome/moz.build b/chrome/moz.build
index b75e9435d..15439356a 100644
--- a/chrome/moz.build
+++ b/chrome/moz.build
@@ -17,7 +17,7 @@ EXPORTS.mozilla.chrome += [
'RegistryMessageUtils.h',
]
-UNIFIED_SOURCES += [
+SOURCES += [
'nsChromeProtocolHandler.cpp',
'nsChromeRegistry.cpp',
'nsChromeRegistryChrome.cpp',
diff --git a/chrome/nsChromeRegistry.cpp b/chrome/nsChromeRegistry.cpp
index 485ca002c..4bd8b4dca 100644
--- a/chrome/nsChromeRegistry.cpp
+++ b/chrome/nsChromeRegistry.cpp
@@ -14,6 +14,7 @@
#include "nsError.h"
#include "nsEscape.h"
#include "nsNetUtil.h"
+#include "nsIURL.h"
#include "nsString.h"
#include "nsQueryObject.h"
diff --git a/config/check_spidermonkey_style.py b/config/check_spidermonkey_style.py
index 647f403c4..3b5f20037 100644
--- a/config/check_spidermonkey_style.py
+++ b/config/check_spidermonkey_style.py
@@ -63,7 +63,7 @@ included_inclnames_to_ignore = set([
'devtools/Instruments.h', # we ignore devtools/ in general
'double-conversion.h', # strange MFBT case
'javascript-trace.h', # generated in $OBJDIR if HAVE_DTRACE is defined
- 'jsautokw.h', # generated in $OBJDIR
+ 'frontend/ReservedWordsGenerated.h', # generated in $OBJDIR
'jscustomallocator.h', # provided by embedders; allowed to be missing
'js-config.h', # generated in $OBJDIR
'fdlibm.h', # fdlibm
@@ -99,7 +99,7 @@ included_inclnames_to_ignore = set([
# ignore #includes of them when checking #include ordering.
oddly_ordered_inclnames = set([
'ctypes/typedefs.h', # Included multiple times in the body of ctypes/CTypes.h
- 'jsautokw.h', # Included in the body of frontend/TokenStream.h
+ 'frontend/ReservedWordsGenerated.h', # Included in the body of frontend/TokenStream.h
'jswin.h', # Must be #included before <psapi.h>
'machine/endian.h', # Must be included after <sys/types.h> on BSD
'winbase.h', # Must precede other system headers(?)
diff --git a/config/external/icu/data/icudt58l.dat b/config/external/icu/data/icudt58l.dat
index 2cba52d5b..528ff5ebe 100644
--- a/config/external/icu/data/icudt58l.dat
+++ b/config/external/icu/data/icudt58l.dat
Binary files differ
diff --git a/config/milestone.txt b/config/milestone.txt
index cf45e1d05..67b4fdd4e 100644
--- a/config/milestone.txt
+++ b/config/milestone.txt
@@ -10,4 +10,4 @@
# hardcoded milestones in the tree from these two files.
#--------------------------------------------------------
-4.2.1
+4.4.1 \ No newline at end of file
diff --git a/db/sqlite3/src/sqlite3.c b/db/sqlite3/src/sqlite3.c
index 4729f4572..61bfdeb76 100644
--- a/db/sqlite3/src/sqlite3.c
+++ b/db/sqlite3/src/sqlite3.c
@@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
-** version 3.27.2. By combining all the individual C code files into this
+** version 3.29.0. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements
@@ -39,7 +39,7 @@
** SQLite was built with.
*/
-#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
+#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS /* IMP: R-16824-07538 */
/*
** Include the configuration header output by 'configure' if we're using the
@@ -888,6 +888,11 @@ SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt){
#pragma warning(disable : 4706)
#endif /* defined(_MSC_VER) */
+#if defined(_MSC_VER) && !defined(_WIN64)
+#undef SQLITE_4_BYTE_ALIGNED_MALLOC
+#define SQLITE_4_BYTE_ALIGNED_MALLOC
+#endif /* defined(_MSC_VER) && !defined(_WIN64) */
+
#endif /* SQLITE_MSVC_H */
/************** End of msvc.h ************************************************/
@@ -1162,9 +1167,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.27.2"
-#define SQLITE_VERSION_NUMBER 3027002
-#define SQLITE_SOURCE_ID "2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7"
+#define SQLITE_VERSION "3.29.0"
+#define SQLITE_VERSION_NUMBER 3029000
+#define SQLITE_SOURCE_ID "2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -1228,6 +1233,9 @@ SQLITE_API int sqlite3_libversion_number(void);
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
SQLITE_API const char *sqlite3_compileoption_get(int N);
+#else
+# define sqlite3_compileoption_used(X) 0
+# define sqlite3_compileoption_get(X) ((void*)0)
#endif
/*
@@ -2332,8 +2340,14 @@ typedef struct sqlite3_api_routines sqlite3_api_routines;
** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
-** to test whether a file is at least readable. The file can be a
-** directory.
+** to test whether a file is at least readable. The SQLITE_ACCESS_READ
+** flag is never actually used and is not implemented in the built-in
+** VFSes of SQLite. The file is named by the second argument and can be a
+** directory. The xAccess method returns [SQLITE_OK] on success or some
+** non-zero error code if there is an I/O error or if the name of
+** the file given in the second argument is illegal. If SQLITE_OK
+** is returned, then non-zero or zero is written into *pResOut to indicate
+** whether or not the file is accessible.
**
** ^SQLite will always allocate at least mxPathname+1 bytes for the
** output buffer xFullPathname. The exact size of the output buffer
@@ -3125,8 +3139,8 @@ struct sqlite3_mem_methods {
**
** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]]
** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
-** <dd> ^This option is used to enable or disable the two-argument
-** version of the [fts3_tokenizer()] function which is part of the
+** <dd> ^This option is used to enable or disable the
+** [fts3_tokenizer()] function which is part of the
** [FTS3] full-text search engine extension.
** There should be two additional arguments.
** The first argument is an integer which is 0 to disable fts3_tokenizer() or
@@ -3234,10 +3248,50 @@ struct sqlite3_mem_methods {
** features include but are not limited to the following:
** <ul>
** <li> The [PRAGMA writable_schema=ON] statement.
+** <li> The [PRAGMA journal_mode=OFF] statement.
** <li> Writes to the [sqlite_dbpage] virtual table.
** <li> Direct writes to [shadow tables].
** </ul>
** </dd>
+**
+** [[SQLITE_DBCONFIG_WRITABLE_SCHEMA]] <dt>SQLITE_DBCONFIG_WRITABLE_SCHEMA</dt>
+** <dd>The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the
+** "writable_schema" flag. This has the same effect and is logically equivalent
+** to setting [PRAGMA writable_schema=ON] or [PRAGMA writable_schema=OFF].
+** The first argument to this setting is an integer which is 0 to disable
+** the writable_schema, positive to enable writable_schema, or negative to
+** leave the setting unchanged. The second parameter is a pointer to an
+** integer into which is written 0 or 1 to indicate whether the writable_schema
+** is enabled or disabled following this call.
+** </dd>
+**
+** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
+** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
+** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
+** the legacy behavior of the [ALTER TABLE RENAME] command such it
+** behaves as it did prior to [version 3.24.0] (2018-06-04). See the
+** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
+** additional information. This feature can also be turned on and off
+** using the [PRAGMA legacy_alter_table] statement.
+** </dd>
+**
+** [[SQLITE_DBCONFIG_DQS_DML]]
+** <dt>SQLITE_DBCONFIG_DQS_DML</td>
+** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
+** the legacy [double-quoted string literal] misfeature for DML statement
+** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
+** default value of this setting is determined by the [-DSQLITE_DQS]
+** compile-time option.
+** </dd>
+**
+** [[SQLITE_DBCONFIG_DQS_DDL]]
+** <dt>SQLITE_DBCONFIG_DQS_DDL</td>
+** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
+** the legacy [double-quoted string literal] misfeature for DDL statements,
+** such as CREATE TABLE and CREATE INDEX. The
+** default value of this setting is determined by the [-DSQLITE_DQS]
+** compile-time option.
+** </dd>
** </dl>
*/
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
@@ -3251,7 +3305,11 @@ struct sqlite3_mem_methods {
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
-#define SQLITE_DBCONFIG_MAX 1010 /* Largest DBCONFIG */
+#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
+#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
+#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
+#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1014 /* Largest DBCONFIG */
/*
** CAPI3REF: Enable Or Disable Extended Result Codes
@@ -4934,6 +4992,18 @@ SQLITE_API const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt);
SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
/*
+** CAPI3REF: Query The EXPLAIN Setting For A Prepared Statement
+** METHOD: sqlite3_stmt
+**
+** ^The sqlite3_stmt_isexplain(S) interface returns 1 if the
+** prepared statement S is an EXPLAIN statement, or 2 if the
+** statement S is an EXPLAIN QUERY PLAN.
+** ^The sqlite3_stmt_isexplain(S) interface returns 0 if S is
+** an ordinary statement or a NULL pointer.
+*/
+SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
+
+/*
** CAPI3REF: Determine If A Prepared Statement Has Been Reset
** METHOD: sqlite3_stmt
**
@@ -5072,7 +5142,9 @@ typedef struct sqlite3_context sqlite3_context;
** ^The fifth argument to the BLOB and string binding interfaces
** is a destructor used to dispose of the BLOB or
** string after SQLite has finished with it. ^The destructor is called
-** to dispose of the BLOB or string even if the call to bind API fails.
+** to dispose of the BLOB or string even if the call to the bind API fails,
+** except the destructor is not called if the third parameter is a NULL
+** pointer or the fourth parameter is negative.
** ^If the fifth argument is
** the special value [SQLITE_STATIC], then SQLite assumes that the
** information is in static, unmanaged space and does not need to be freed.
@@ -5989,6 +6061,8 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** <tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
** <td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
** against a virtual table.
+** <tr><td><b>sqlite3_value_frombind&nbsp;&nbsp;</b>
+** <td>&rarr;&nbsp;&nbsp;<td>True if value originated from a [bound parameter]
** </table></blockquote>
**
** <b>Details:</b>
@@ -6050,6 +6124,11 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** than within an [xUpdate] method call for an UPDATE statement, then
** the return value is arbitrary and meaningless.
**
+** ^The sqlite3_value_frombind(X) interface returns non-zero if the
+** value X originated from one of the [sqlite3_bind_int|sqlite3_bind()]
+** interfaces. ^If X comes from an SQL literal value, or a table column,
+** and expression, then sqlite3_value_frombind(X) returns zero.
+**
** Please pay particular attention to the fact that the pointer returned
** from [sqlite3_value_blob()], [sqlite3_value_text()], or
** [sqlite3_value_text16()] can be invalidated by a subsequent call to
@@ -6095,6 +6174,7 @@ SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
SQLITE_API int sqlite3_value_type(sqlite3_value*);
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
+SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
/*
** CAPI3REF: Finding The Subtype Of SQL Values
@@ -6830,7 +6910,7 @@ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
** associated with database N of connection D. ^The main database file
** has the name "main". If there is no attached database N on the database
** connection D, or if database N is a temporary or in-memory database, then
-** a NULL pointer is returned.
+** this function will return either a NULL pointer or an empty string.
**
** ^The filename returned by this function is the output of the
** xFullPathname method of the [VFS]. ^In other words, the filename
@@ -8321,7 +8401,8 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_SORTER_MMAP 24
#define SQLITE_TESTCTRL_IMPOSTER 25
#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
-#define SQLITE_TESTCTRL_LAST 26 /* Largest TESTCTRL */
+#define SQLITE_TESTCTRL_RESULT_INTREAL 27
+#define SQLITE_TESTCTRL_LAST 27 /* Largest TESTCTRL */
/*
** CAPI3REF: SQL Keyword Checking
@@ -11931,7 +12012,7 @@ SQLITE_API int sqlite3rebaser_configure(
** in size. This function allocates and populates a buffer with a copy
** of the changeset rebased rebased according to the configuration of the
** rebaser object passed as the first argument. If successful, (*ppOut)
-** is set to point to the new buffer containing the rebased changset and
+** is set to point to the new buffer containing the rebased changeset and
** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the
** responsibility of the caller to eventually free the new buffer using
** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut)
@@ -12340,7 +12421,7 @@ struct Fts5PhraseIter {
** Save the pointer passed as the second argument as the extension functions
** "auxiliary data". The pointer may then be retrieved by the current or any
** future invocation of the same fts5 extension function made as part of
-** of the same MATCH query using the xGetAuxdata() API.
+** the same MATCH query using the xGetAuxdata() API.
**
** Each extension function is allocated a single auxiliary data slot for
** each FTS query (MATCH expression). If the extension function is invoked
@@ -12355,7 +12436,7 @@ struct Fts5PhraseIter {
** The xDelete callback, if one is specified, is also invoked on the
** auxiliary data pointer after the FTS5 query has finished.
**
-** If an error (e.g. an OOM condition) occurs within this function, an
+** If an error (e.g. an OOM condition) occurs within this function,
** the auxiliary data is set to NULL and an error code returned. If the
** xDelete parameter was not NULL, it is invoked on the auxiliary data
** pointer before returning.
@@ -13381,7 +13462,7 @@ struct Hash {
unsigned int count; /* Number of entries in this table */
HashElem *first; /* The first element of the array */
struct _ht { /* the hash table */
- int count; /* Number of entries with this hash */
+ unsigned int count; /* Number of entries with this hash */
HashElem *chain; /* Pointer to first entry with this hash */
} *ht;
};
@@ -13522,99 +13603,94 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define TK_PRECEDING 85
#define TK_RANGE 86
#define TK_UNBOUNDED 87
-#define TK_REINDEX 88
-#define TK_RENAME 89
-#define TK_CTIME_KW 90
-#define TK_ANY 91
-#define TK_BITAND 92
-#define TK_BITOR 93
-#define TK_LSHIFT 94
-#define TK_RSHIFT 95
-#define TK_PLUS 96
-#define TK_MINUS 97
-#define TK_STAR 98
-#define TK_SLASH 99
-#define TK_REM 100
-#define TK_CONCAT 101
-#define TK_COLLATE 102
-#define TK_BITNOT 103
-#define TK_ON 104
-#define TK_INDEXED 105
-#define TK_STRING 106
-#define TK_JOIN_KW 107
-#define TK_CONSTRAINT 108
-#define TK_DEFAULT 109
-#define TK_NULL 110
-#define TK_PRIMARY 111
-#define TK_UNIQUE 112
-#define TK_CHECK 113
-#define TK_REFERENCES 114
-#define TK_AUTOINCR 115
-#define TK_INSERT 116
-#define TK_DELETE 117
-#define TK_UPDATE 118
-#define TK_SET 119
-#define TK_DEFERRABLE 120
-#define TK_FOREIGN 121
-#define TK_DROP 122
-#define TK_UNION 123
-#define TK_ALL 124
-#define TK_EXCEPT 125
-#define TK_INTERSECT 126
-#define TK_SELECT 127
-#define TK_VALUES 128
-#define TK_DISTINCT 129
-#define TK_DOT 130
-#define TK_FROM 131
-#define TK_JOIN 132
-#define TK_USING 133
-#define TK_ORDER 134
-#define TK_GROUP 135
-#define TK_HAVING 136
-#define TK_LIMIT 137
-#define TK_WHERE 138
-#define TK_INTO 139
-#define TK_NOTHING 140
-#define TK_FLOAT 141
-#define TK_BLOB 142
-#define TK_INTEGER 143
-#define TK_VARIABLE 144
-#define TK_CASE 145
-#define TK_WHEN 146
-#define TK_THEN 147
-#define TK_ELSE 148
-#define TK_INDEX 149
-#define TK_ALTER 150
-#define TK_ADD 151
-#define TK_WINDOW 152
-#define TK_OVER 153
-#define TK_FILTER 154
-#define TK_TRUEFALSE 155
-#define TK_ISNOT 156
-#define TK_FUNCTION 157
-#define TK_COLUMN 158
-#define TK_AGG_FUNCTION 159
-#define TK_AGG_COLUMN 160
-#define TK_UMINUS 161
-#define TK_UPLUS 162
-#define TK_TRUTH 163
-#define TK_REGISTER 164
-#define TK_VECTOR 165
-#define TK_SELECT_COLUMN 166
-#define TK_IF_NULL_ROW 167
-#define TK_ASTERISK 168
-#define TK_SPAN 169
-#define TK_END_OF_FILE 170
-#define TK_UNCLOSED_STRING 171
-#define TK_SPACE 172
-#define TK_ILLEGAL 173
-
-/* The token codes above must all fit in 8 bits */
-#define TKFLG_MASK 0xff
-
-/* Flags that can be added to a token code when it is not
-** being stored in a u8: */
-#define TKFLG_DONTFOLD 0x100 /* Omit constant folding optimizations */
+#define TK_EXCLUDE 88
+#define TK_GROUPS 89
+#define TK_OTHERS 90
+#define TK_TIES 91
+#define TK_REINDEX 92
+#define TK_RENAME 93
+#define TK_CTIME_KW 94
+#define TK_ANY 95
+#define TK_BITAND 96
+#define TK_BITOR 97
+#define TK_LSHIFT 98
+#define TK_RSHIFT 99
+#define TK_PLUS 100
+#define TK_MINUS 101
+#define TK_STAR 102
+#define TK_SLASH 103
+#define TK_REM 104
+#define TK_CONCAT 105
+#define TK_COLLATE 106
+#define TK_BITNOT 107
+#define TK_ON 108
+#define TK_INDEXED 109
+#define TK_STRING 110
+#define TK_JOIN_KW 111
+#define TK_CONSTRAINT 112
+#define TK_DEFAULT 113
+#define TK_NULL 114
+#define TK_PRIMARY 115
+#define TK_UNIQUE 116
+#define TK_CHECK 117
+#define TK_REFERENCES 118
+#define TK_AUTOINCR 119
+#define TK_INSERT 120
+#define TK_DELETE 121
+#define TK_UPDATE 122
+#define TK_SET 123
+#define TK_DEFERRABLE 124
+#define TK_FOREIGN 125
+#define TK_DROP 126
+#define TK_UNION 127
+#define TK_ALL 128
+#define TK_EXCEPT 129
+#define TK_INTERSECT 130
+#define TK_SELECT 131
+#define TK_VALUES 132
+#define TK_DISTINCT 133
+#define TK_DOT 134
+#define TK_FROM 135
+#define TK_JOIN 136
+#define TK_USING 137
+#define TK_ORDER 138
+#define TK_GROUP 139
+#define TK_HAVING 140
+#define TK_LIMIT 141
+#define TK_WHERE 142
+#define TK_INTO 143
+#define TK_NOTHING 144
+#define TK_FLOAT 145
+#define TK_BLOB 146
+#define TK_INTEGER 147
+#define TK_VARIABLE 148
+#define TK_CASE 149
+#define TK_WHEN 150
+#define TK_THEN 151
+#define TK_ELSE 152
+#define TK_INDEX 153
+#define TK_ALTER 154
+#define TK_ADD 155
+#define TK_WINDOW 156
+#define TK_OVER 157
+#define TK_FILTER 158
+#define TK_TRUEFALSE 159
+#define TK_ISNOT 160
+#define TK_FUNCTION 161
+#define TK_COLUMN 162
+#define TK_AGG_FUNCTION 163
+#define TK_AGG_COLUMN 164
+#define TK_UMINUS 165
+#define TK_UPLUS 166
+#define TK_TRUTH 167
+#define TK_REGISTER 168
+#define TK_VECTOR 169
+#define TK_SELECT_COLUMN 170
+#define TK_IF_NULL_ROW 171
+#define TK_ASTERISK 172
+#define TK_SPAN 173
+#define TK_SPACE 174
+#define TK_ILLEGAL 175
/************** End of parse.h ***********************************************/
/************** Continuing where we left off in sqliteInt.h ******************/
@@ -13920,12 +13996,13 @@ typedef INT16_TYPE LogEst;
** at run-time.
*/
#ifndef SQLITE_BYTEORDER
-# if defined(i386) || defined(__i386__) || defined(_M_IX86) || \
- defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \
- defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \
- defined(__arm__) || defined(_M_ARM64)
+# if defined(i386) || defined(__i386__) || defined(_M_IX86) || \
+ defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \
+ defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \
+ defined(__ARMEL__) || defined(__AARCH64EL__) || defined(_M_ARM64)
# define SQLITE_BYTEORDER 1234
-# elif defined(sparc) || defined(__ppc__)
+# elif defined(sparc) || defined(__ppc__) || \
+ defined(__ARMEB__) || defined(__AARCH64EB__)
# define SQLITE_BYTEORDER 4321
# else
# define SQLITE_BYTEORDER 0
@@ -14546,9 +14623,6 @@ struct BtreePayload {
SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const BtreePayload *pPayload,
int flags, int seekResult);
SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes);
-#ifndef SQLITE_OMIT_WINDOWFUNC
-SQLITE_PRIVATE void sqlite3BtreeSkipNext(BtCursor*);
-#endif
SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes);
SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int flags);
SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*);
@@ -14906,25 +14980,25 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Offset 89 /* synopsis: r[P3] = sqlite_offset(P1) */
#define OP_Column 90 /* synopsis: r[P3]=PX */
#define OP_Affinity 91 /* synopsis: affinity(r[P1@P2]) */
-#define OP_BitAnd 92 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
-#define OP_BitOr 93 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
-#define OP_ShiftLeft 94 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
-#define OP_ShiftRight 95 /* same as TK_RSHIFT, synopsis: r[P3]=r[P2]>>r[P1] */
-#define OP_Add 96 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */
-#define OP_Subtract 97 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */
-#define OP_Multiply 98 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */
-#define OP_Divide 99 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */
-#define OP_Remainder 100 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */
-#define OP_Concat 101 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */
-#define OP_MakeRecord 102 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
-#define OP_BitNot 103 /* same as TK_BITNOT, synopsis: r[P2]= ~r[P1] */
-#define OP_Count 104 /* synopsis: r[P2]=count() */
-#define OP_ReadCookie 105
-#define OP_String8 106 /* same as TK_STRING, synopsis: r[P2]='P4' */
-#define OP_SetCookie 107
-#define OP_ReopenIdx 108 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenRead 109 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenWrite 110 /* synopsis: root=P2 iDb=P3 */
+#define OP_MakeRecord 92 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
+#define OP_Count 93 /* synopsis: r[P2]=count() */
+#define OP_ReadCookie 94
+#define OP_SetCookie 95
+#define OP_BitAnd 96 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
+#define OP_BitOr 97 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
+#define OP_ShiftLeft 98 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
+#define OP_ShiftRight 99 /* same as TK_RSHIFT, synopsis: r[P3]=r[P2]>>r[P1] */
+#define OP_Add 100 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */
+#define OP_Subtract 101 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */
+#define OP_Multiply 102 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */
+#define OP_Divide 103 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */
+#define OP_Remainder 104 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */
+#define OP_Concat 105 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */
+#define OP_ReopenIdx 106 /* synopsis: root=P2 iDb=P3 */
+#define OP_BitNot 107 /* same as TK_BITNOT, synopsis: r[P2]= ~r[P1] */
+#define OP_OpenRead 108 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenWrite 109 /* synopsis: root=P2 iDb=P3 */
+#define OP_String8 110 /* same as TK_STRING, synopsis: r[P2]='P4' */
#define OP_OpenDup 111
#define OP_OpenAutoindex 112 /* synopsis: nColumn=P2 */
#define OP_OpenEphemeral 113 /* synopsis: nColumn=P2 */
@@ -14955,11 +15029,11 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_ResetSorter 138
#define OP_CreateBtree 139 /* synopsis: r[P2]=root iDb=P1 flags=P3 */
#define OP_SqlExec 140
-#define OP_Real 141 /* same as TK_FLOAT, synopsis: r[P2]=P4 */
-#define OP_ParseSchema 142
-#define OP_LoadAnalysis 143
-#define OP_DropTable 144
-#define OP_DropIndex 145
+#define OP_ParseSchema 141
+#define OP_LoadAnalysis 142
+#define OP_DropTable 143
+#define OP_DropIndex 144
+#define OP_Real 145 /* same as TK_FLOAT, synopsis: r[P2]=P4 */
#define OP_DropTrigger 146
#define OP_IntegrityCk 147
#define OP_RowSetAdd 148 /* synopsis: rowset(P1)=r[P2] */
@@ -15010,14 +15084,14 @@ typedef struct VdbeOpList VdbeOpList;
/* 64 */ 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10, 0x10,\
/* 72 */ 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x10,\
/* 80 */ 0x10, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,\
-/* 88 */ 0x12, 0x20, 0x00, 0x00, 0x26, 0x26, 0x26, 0x26,\
-/* 96 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x00, 0x12,\
-/* 104 */ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\
+/* 88 */ 0x12, 0x20, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,\
+/* 96 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,\
+/* 104 */ 0x26, 0x26, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00,\
/* 112 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
/* 120 */ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
/* 128 */ 0x10, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x10,\
-/* 136 */ 0x10, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00,\
-/* 144 */ 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x00, 0x04,\
+/* 136 */ 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\
+/* 144 */ 0x00, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x04,\
/* 152 */ 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
/* 160 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,\
/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00,}
@@ -16325,6 +16399,7 @@ struct sqlite3 {
void (*xRollbackCallback)(void*); /* Invoked at every commit. */
void *pUpdateArg;
void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
+ Parse *pParse; /* Current parse */
#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
void *pPreUpdateArg; /* First argument to xPreUpdateCallback */
void (*xPreUpdateCallback)( /* Registered using sqlite3_preupdate_hook() */
@@ -16440,6 +16515,8 @@ struct sqlite3 {
#define SQLITE_LegacyAlter 0x04000000 /* Legacy ALTER TABLE behaviour */
#define SQLITE_NoSchemaError 0x08000000 /* Do not report schema parse errors*/
#define SQLITE_Defensive 0x10000000 /* Input SQL is likely hostile */
+#define SQLITE_DqsDDL 0x20000000 /* dbl-quoted strings allowed in DDL*/
+#define SQLITE_DqsDML 0x40000000 /* dbl-quoted strings allowed in DML*/
/* Flags used only if debugging */
#define HI(X) ((u64)(X)<<32)
@@ -16458,7 +16535,8 @@ struct sqlite3 {
#define DBFLAG_SchemaChange 0x0001 /* Uncommitted Hash table changes */
#define DBFLAG_PreferBuiltin 0x0002 /* Preference to built-in funcs */
#define DBFLAG_Vacuum 0x0004 /* Currently in a VACUUM */
-#define DBFLAG_SchemaKnownOk 0x0008 /* Schema is known to be valid */
+#define DBFLAG_VacuumInto 0x0008 /* Currently running VACUUM INTO */
+#define DBFLAG_SchemaKnownOk 0x0010 /* Schema is known to be valid */
/*
** Bits of the sqlite3.dbOptFlags field that are used by the
@@ -16466,7 +16544,7 @@ struct sqlite3 {
** selectively disable various optimizations.
*/
#define SQLITE_QueryFlattener 0x0001 /* Query flattening */
- /* 0x0002 available for reuse */
+#define SQLITE_WindowFunc 0x0002 /* Use xInverse for window functions */
#define SQLITE_GroupByOrder 0x0004 /* GROUPBY cover of ORDERBY */
#define SQLITE_FactorOutConst 0x0008 /* Constant factoring */
#define SQLITE_DistinctOpt 0x0010 /* DISTINCT using indexes */
@@ -16584,7 +16662,6 @@ struct FuncDestructor {
#define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */
#define SQLITE_FUNC_OFFSET 0x8000 /* Built-in sqlite_offset() function */
#define SQLITE_FUNC_WINDOW 0x00010000 /* Built-in window-only function */
-#define SQLITE_FUNC_WINDOW_SIZE 0x20000 /* Requires partition size as arg. */
#define SQLITE_FUNC_INTERNAL 0x00040000 /* For use by NestedParse() only */
/*
@@ -17146,6 +17223,7 @@ struct Index {
unsigned noSkipScan:1; /* Do not try to use skip-scan if true */
unsigned hasStat1:1; /* aiRowLogEst values come from sqlite_stat1 */
unsigned bNoQuery:1; /* Do not use this index to optimize queries */
+ unsigned bAscKeyBug:1; /* True if the bba7b69f9849b5bf bug applies */
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
int nSample; /* Number of elements in aSample[] */
int nSampleCol; /* Size of IndexSample.anEq[] and so on */
@@ -17373,7 +17451,7 @@ struct Expr {
** TK_SELECT_COLUMN: column of the result vector */
i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */
- u8 op2; /* TK_REGISTER: original value of Expr.op
+ u8 op2; /* TK_REGISTER/TK_TRUTH: original value of Expr.op
** TK_COLUMN: the value of p5 for OP_Column
** TK_AGG_FUNCTION: nesting depth */
AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
@@ -17390,12 +17468,16 @@ struct Expr {
/*
** The following are the meanings of bits in the Expr.flags field.
+** Value restrictions:
+**
+** EP_Agg == NC_HasAgg == SF_HasAgg
+** EP_Win == NC_HasWin
*/
#define EP_FromJoin 0x000001 /* Originates in ON/USING clause of outer join */
-#define EP_Agg 0x000002 /* Contains one or more aggregate functions */
+#define EP_Distinct 0x000002 /* Aggregate function with DISTINCT keyword */
#define EP_HasFunc 0x000004 /* Contains one or more functions of any kind */
#define EP_FixedCol 0x000008 /* TK_Column with a known fixed value */
-#define EP_Distinct 0x000010 /* Aggregate function with DISTINCT keyword */
+#define EP_Agg 0x000010 /* Contains one or more aggregate functions */
#define EP_VarSelect 0x000020 /* pSelect is correlated, not constant */
#define EP_DblQuoted 0x000040 /* token.z was originally in "..." */
#define EP_InfixFunc 0x000080 /* True for an infix function: LIKE, GLOB, etc */
@@ -17403,10 +17485,10 @@ struct Expr {
#define EP_Generic 0x000200 /* Ignore COLLATE or affinity on this tree */
#define EP_IntValue 0x000400 /* Integer value contained in u.iValue */
#define EP_xIsSelect 0x000800 /* x.pSelect is valid (otherwise x.pList is) */
-#define EP_Skip 0x001000 /* COLLATE, AS, or UNLIKELY */
+#define EP_Skip 0x001000 /* Operator does not contribute to affinity */
#define EP_Reduced 0x002000 /* Expr struct EXPR_REDUCEDSIZE bytes only */
#define EP_TokenOnly 0x004000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */
-#define EP_Static 0x008000 /* Held in memory not obtained from malloc() */
+#define EP_Win 0x008000 /* Contains window functions */
#define EP_MemToken 0x010000 /* Need to sqlite3DbFree() Expr.zToken */
#define EP_NoReduce 0x020000 /* Cannot EXPRDUP_REDUCE this Expr */
#define EP_Unlikely 0x040000 /* unlikely() or likelihood() function */
@@ -17418,6 +17500,9 @@ struct Expr {
#define EP_WinFunc 0x1000000 /* TK_FUNCTION with Expr.y.pWin set */
#define EP_Subrtn 0x2000000 /* Uses Expr.y.sub. TK_IN, _SELECT, or _EXISTS */
#define EP_Quoted 0x4000000 /* TK_ID was originally quoted */
+#define EP_Static 0x8000000 /* Held in memory not obtained from malloc() */
+#define EP_IsTrue 0x10000000 /* Always has boolean value of TRUE */
+#define EP_IsFalse 0x20000000 /* Always has boolean value of FALSE */
/*
** The EP_Propagate mask is a set of properties that automatically propagate
@@ -17433,6 +17518,8 @@ struct Expr {
#define ExprHasAllProperty(E,P) (((E)->flags&(P))==(P))
#define ExprSetProperty(E,P) (E)->flags|=(P)
#define ExprClearProperty(E,P) (E)->flags&=~(P)
+#define ExprAlwaysTrue(E) (((E)->flags&(EP_FromJoin|EP_IsTrue))==EP_IsTrue)
+#define ExprAlwaysFalse(E) (((E)->flags&(EP_FromJoin|EP_IsFalse))==EP_IsFalse)
/* The ExprSetVVAProperty() macro is used for Verification, Validation,
** and Accreditation only. It works like ExprSetProperty() during VVA
@@ -17649,7 +17736,7 @@ struct NameContext {
NameContext *pNext; /* Next outer name context. NULL for outermost */
int nRef; /* Number of names resolved by this context */
int nErr; /* Number of errors encountered while resolving names */
- u16 ncFlags; /* Zero or more NC_* flags defined below */
+ int ncFlags; /* Zero or more NC_* flags defined below */
Select *pWinSelect; /* SELECT statement for any window functions */
};
@@ -17657,8 +17744,9 @@ struct NameContext {
** Allowed values for the NameContext, ncFlags field.
**
** Value constraints (all checked via assert()):
-** NC_HasAgg == SF_HasAgg
+** NC_HasAgg == SF_HasAgg == EP_Agg
** NC_MinMaxAgg == SF_MinMaxAgg == SQLITE_FUNC_MINMAX
+** NC_HasWin == EP_Win
**
*/
#define NC_AllowAgg 0x0001 /* Aggregate functions are allowed here */
@@ -17674,6 +17762,8 @@ struct NameContext {
#define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */
#define NC_Complex 0x2000 /* True if a function or subquery seen */
#define NC_AllowWin 0x4000 /* Window functions are allowed here */
+#define NC_HasWin 0x8000 /* One or more window functions seen */
+#define NC_IsDDL 0x10000 /* Resolving names in a CREATE statement */
/*
** An instance of the following object describes a single ON CONFLICT
@@ -17988,6 +18078,7 @@ struct Parse {
AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */
Parse *pToplevel; /* Parse structure for main program (or NULL) */
Table *pTriggerTab; /* Table triggers are being coded for */
+ Parse *pParentParse; /* Parent parser if this parser is nested */
int addrCrTab; /* Address of OP_CreateBtree opcode on CREATE TABLE */
u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */
u32 oldmask; /* Mask of old.* columns referenced */
@@ -18428,7 +18519,7 @@ struct TreeView {
#endif /* SQLITE_DEBUG */
/*
-** This object is used in varioius ways, all related to window functions
+** This object is used in various ways, all related to window functions
**
** (1) A single instance of this structure is attached to the
** the Expr.pWin field for each window function in an expression tree.
@@ -18443,15 +18534,18 @@ struct TreeView {
** object on a linked list attached to Select.pWinDefn.
**
** The uses (1) and (2) are really the same Window object that just happens
-** to be accessible in two different ways. Use (3) is are separate objects.
+** to be accessible in two different ways. Use case (3) are separate objects.
*/
struct Window {
char *zName; /* Name of window (may be NULL) */
+ char *zBase; /* Name of base window for chaining (may be NULL) */
ExprList *pPartition; /* PARTITION BY clause */
ExprList *pOrderBy; /* ORDER BY clause */
- u8 eType; /* TK_RANGE or TK_ROWS */
+ u8 eFrmType; /* TK_RANGE, TK_GROUPS, TK_ROWS, or 0 */
u8 eStart; /* UNBOUNDED, CURRENT, PRECEDING or FOLLOWING */
u8 eEnd; /* UNBOUNDED, CURRENT, PRECEDING or FOLLOWING */
+ u8 bImplicitFrame; /* True if frame was implicitly specified */
+ u8 eExclude; /* TK_NO, TK_CURRENT, TK_TIES, TK_GROUP, or 0 */
Expr *pStart; /* Expression for "<expr> PRECEDING" */
Expr *pEnd; /* Expression for "<expr> FOLLOWING" */
Window *pNextWin; /* Next window function belonging to this SELECT */
@@ -18462,17 +18556,19 @@ struct Window {
int regResult;
int csrApp; /* Function cursor (used by min/max) */
int regApp; /* Function register (also used by min/max) */
- int regPart; /* First in a set of registers holding PARTITION BY
- ** and ORDER BY values for the window */
+ int regPart; /* Array of registers for PARTITION BY values */
Expr *pOwner; /* Expression object this window is attached to */
int nBufferCol; /* Number of columns in buffer table */
int iArgCol; /* Offset of first argument for this function */
+ int regOne; /* Register containing constant value 1 */
+ int regStartRowid;
+ int regEndRowid;
};
#ifndef SQLITE_OMIT_WINDOWFUNC
SQLITE_PRIVATE void sqlite3WindowDelete(sqlite3*, Window*);
SQLITE_PRIVATE void sqlite3WindowListDelete(sqlite3 *db, Window *p);
-SQLITE_PRIVATE Window *sqlite3WindowAlloc(Parse*, int, int, Expr*, int , Expr*);
+SQLITE_PRIVATE Window *sqlite3WindowAlloc(Parse*, int, int, Expr*, int , Expr*, u8);
SQLITE_PRIVATE void sqlite3WindowAttach(Parse*, Expr*, Window*);
SQLITE_PRIVATE int sqlite3WindowCompare(Parse*, Window*, Window*);
SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse*, Window*);
@@ -18483,6 +18579,8 @@ SQLITE_PRIVATE void sqlite3WindowUpdate(Parse*, Window*, Window*, FuncDef*);
SQLITE_PRIVATE Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p);
SQLITE_PRIVATE Window *sqlite3WindowListDup(sqlite3 *db, Window *p);
SQLITE_PRIVATE void sqlite3WindowFunctions(void);
+SQLITE_PRIVATE void sqlite3WindowChain(Parse*, Window*, Window*);
+SQLITE_PRIVATE Window *sqlite3WindowAssemble(Parse*, Window*, ExprList*, ExprList*, Token*);
#else
# define sqlite3WindowDelete(a,b)
# define sqlite3WindowFunctions()
@@ -18672,8 +18770,12 @@ SQLITE_PRIVATE void sqlite3MutexWarnOnContention(sqlite3_mutex*);
#endif
#ifndef SQLITE_OMIT_FLOATING_POINT
+# define EXP754 (((u64)0x7ff)<<52)
+# define MAN754 ((((u64)1)<<52)-1)
+# define IsNaN(X) (((X)&EXP754)==EXP754 && ((X)&MAN754)!=0)
SQLITE_PRIVATE int sqlite3IsNaN(double);
#else
+# define IsNaN(X) 0
# define sqlite3IsNaN(X) 0
#endif
@@ -18712,6 +18814,7 @@ SQLITE_PRIVATE void sqlite3TreeViewWinFunc(TreeView*, const Window*, u8);
SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*);
SQLITE_PRIVATE void sqlite3ErrorMsg(Parse*, const char*, ...);
+SQLITE_PRIVATE int sqlite3ErrorToParser(sqlite3*,int);
SQLITE_PRIVATE void sqlite3Dequote(char*);
SQLITE_PRIVATE void sqlite3DequoteExpr(Expr*);
SQLITE_PRIVATE void sqlite3TokenInit(Token*,char*);
@@ -18731,10 +18834,12 @@ SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*);
SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*);
SQLITE_PRIVATE void sqlite3PExprAddSelect(Parse*, Expr*, Select*);
-SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
+SQLITE_PRIVATE Expr *sqlite3ExprAnd(Parse*,Expr*, Expr*);
+SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr*);
SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int);
SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32);
SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*);
+SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*);
SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*);
SQLITE_PRIVATE void sqlite3ExprListSetSortOrder(ExprList*,int);
@@ -19043,6 +19148,7 @@ SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*);
SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
+SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64);
SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
SQLITE_PRIVATE int sqlite3Atoi(const char*);
@@ -19144,6 +19250,9 @@ SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8,
void(*)(void*));
SQLITE_PRIVATE void sqlite3ValueSetNull(sqlite3_value*);
SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*);
+#ifndef SQLITE_UNTESTABLE
+SQLITE_PRIVATE void sqlite3ResultIntReal(sqlite3_context*);
+#endif
SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *);
#ifndef SQLITE_OMIT_UTF16
SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8);
@@ -19706,8 +19815,15 @@ SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = {
** SQLITE_ALLOW_COVERING_INDEX_SCAN compile-time option, or is "on" if
** that compile-time option is omitted.
*/
-#ifndef SQLITE_ALLOW_COVERING_INDEX_SCAN
+#if !defined(SQLITE_ALLOW_COVERING_INDEX_SCAN)
# define SQLITE_ALLOW_COVERING_INDEX_SCAN 1
+#else
+# if !SQLITE_ALLOW_COVERING_INDEX_SCAN
+# error "Compile-time disabling of covering index scan using the\
+ -DSQLITE_ALLOW_COVERING_INDEX_SCAN=0 option is deprecated.\
+ Contact SQLite developers if this is a problem for you, and\
+ delete this #error macro to continue with your build."
+# endif
#endif
/* The minimum PMA size is set to this value multiplied by the database
@@ -20134,12 +20250,12 @@ struct sqlite3_value {
#define MEM_Int 0x0004 /* Value is an integer */
#define MEM_Real 0x0008 /* Value is a real number */
#define MEM_Blob 0x0010 /* Value is a BLOB */
-#define MEM_AffMask 0x001f /* Mask of affinity bits */
-/* Available 0x0020 */
-/* Available 0x0040 */
+#define MEM_IntReal 0x0020 /* MEM_Int that stringifies like MEM_Real */
+#define MEM_AffMask 0x003f /* Mask of affinity bits */
+#define MEM_FromBind 0x0040 /* Value originates from sqlite3_bind() */
#define MEM_Undefined 0x0080 /* Value is undefined */
#define MEM_Cleared 0x0100 /* NULL set by OP_Null, not from data */
-#define MEM_TypeMask 0xc1ff /* Mask of type bits */
+#define MEM_TypeMask 0xc1bf /* Mask of type bits */
/* Whenever Mem contains a valid string or blob representation, one of
@@ -20172,6 +20288,12 @@ struct sqlite3_value {
((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f)
/*
+** True if Mem X is a NULL-nochng type.
+*/
+#define MemNullNochng(X) \
+ ((X)->flags==(MEM_Null|MEM_Zero) && (X)->n==0 && (X)->u.nZero==0)
+
+/*
** Return true if a memory cell is not marked as invalid. This macro
** is for use inside assert() statements only.
*/
@@ -21253,7 +21375,7 @@ static int parseDateOrTime(
return 0;
}else if( sqlite3StrICmp(zDate,"now")==0 && sqlite3NotPureFunc(context) ){
return setDateTimeToCurrent(context, p);
- }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8) ){
+ }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8)>0 ){
setRawDateNumber(p, r);
return 0;
}
@@ -21587,7 +21709,7 @@ static int parseModifier(
** date is already on the appropriate weekday, this is a no-op.
*/
if( sqlite3_strnicmp(z, "weekday ", 8)==0
- && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)
+ && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)>0
&& (n=(int)r)==r && n>=0 && r<7 ){
sqlite3_int64 Z;
computeYMD_HMS(p);
@@ -21646,7 +21768,7 @@ static int parseModifier(
double rRounder;
int i;
for(n=1; z[n] && z[n]!=':' && !sqlite3Isspace(z[n]); n++){}
- if( !sqlite3AtoF(z, &r, n, SQLITE_UTF8) ){
+ if( sqlite3AtoF(z, &r, n, SQLITE_UTF8)<=0 ){
rc = 1;
break;
}
@@ -27120,6 +27242,9 @@ SQLITE_PRIVATE void sqlite3OomFault(sqlite3 *db){
db->u1.isInterrupted = 1;
}
db->lookaside.bDisable++;
+ if( db->pParse ){
+ db->pParse->rc = SQLITE_NOMEM_BKPT;
+ }
}
}
@@ -27276,6 +27401,12 @@ static const et_info fmtinfo[] = {
{ 'r', 10, 1, etORDINAL, 0, 0 },
};
+/* Floating point constants used for rounding */
+static const double arRound[] = {
+ 5.0e-01, 5.0e-02, 5.0e-03, 5.0e-04, 5.0e-05,
+ 5.0e-06, 5.0e-07, 5.0e-08, 5.0e-09, 5.0e-10,
+};
+
/*
** If SQLITE_OMIT_FLOATING_POINT is defined, then none of the floating point
** conversions will work.
@@ -27313,7 +27444,8 @@ static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){
static void setStrAccumError(StrAccum *p, u8 eError){
assert( eError==SQLITE_NOMEM || eError==SQLITE_TOOBIG );
p->accError = eError;
- p->nAlloc = 0;
+ if( p->mxAlloc ) sqlite3_str_reset(p);
+ if( eError==SQLITE_TOOBIG ) sqlite3ErrorToParser(p->db, eError);
}
/*
@@ -27343,6 +27475,7 @@ static char *getTextArg(PrintfArguments *p){
*/
static char *printfTempBuf(sqlite3_str *pAccum, sqlite3_int64 n){
char *z;
+ if( pAccum->accError ) return 0;
if( n>pAccum->nAlloc && n>pAccum->mxAlloc ){
setStrAccumError(pAccum, SQLITE_TOOBIG);
return 0;
@@ -27692,8 +27825,18 @@ SQLITE_API void sqlite3_str_vappendf(
}
if( xtype==etGENERIC && precision>0 ) precision--;
testcase( precision>0xfff );
- for(idx=precision&0xfff, rounder=0.5; idx>0; idx--, rounder*=0.1){}
- if( xtype==etFLOAT ) realvalue += rounder;
+ idx = precision & 0xfff;
+ rounder = arRound[idx%10];
+ while( idx>=10 ){ rounder *= 1.0e-10; idx -= 10; }
+ if( xtype==etFLOAT ){
+ double rx = (double)realvalue;
+ sqlite3_uint64 u;
+ int ex;
+ memcpy(&u, &rx, sizeof(u));
+ ex = -1023 + (int)((u>>52)&0x7ff);
+ if( precision+(ex/3) < 15 ) rounder += realvalue*3e-16;
+ realvalue += rounder;
+ }
/* Normalize realvalue to within 10.0 > realvalue >= 1.0 */
exp = 0;
if( sqlite3IsNaN((double)realvalue) ){
@@ -28062,9 +28205,8 @@ static int sqlite3StrAccumEnlarge(StrAccum *p, int N){
return 0;
}
if( p->mxAlloc==0 ){
- N = p->nAlloc - p->nChar - 1;
setStrAccumError(p, SQLITE_TOOBIG);
- return N;
+ return p->nAlloc - p->nChar - 1;
}else{
char *zOld = isMalloced(p) ? p->zText : 0;
i64 szNew = p->nChar;
@@ -28136,7 +28278,7 @@ SQLITE_API void sqlite3_str_append(sqlite3_str *p, const char *z, int N){
assert( z!=0 || N==0 );
assert( p->zText!=0 || p->nChar==0 || p->accError );
assert( N>=0 );
- assert( p->accError==0 || p->nAlloc==0 );
+ assert( p->accError==0 || p->nAlloc==0 || p->mxAlloc==0 );
if( p->nChar+N >= p->nAlloc ){
enlargeAndAppend(p,z,N);
}else if( N ){
@@ -28769,24 +28911,62 @@ SQLITE_PRIVATE void sqlite3TreeViewBound(
** Generate a human-readable explanation for a Window object
*/
SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){
+ int nElement = 0;
+ if( pWin->pFilter ){
+ sqlite3TreeViewItem(pView, "FILTER", 1);
+ sqlite3TreeViewExpr(pView, pWin->pFilter, 0);
+ sqlite3TreeViewPop(pView);
+ }
pView = sqlite3TreeViewPush(pView, more);
if( pWin->zName ){
- sqlite3TreeViewLine(pView, "OVER %s", pWin->zName);
+ sqlite3TreeViewLine(pView, "OVER %s (%p)", pWin->zName, pWin);
}else{
- sqlite3TreeViewLine(pView, "OVER");
+ sqlite3TreeViewLine(pView, "OVER (%p)", pWin);
+ }
+ if( pWin->zBase ) nElement++;
+ if( pWin->pOrderBy ) nElement++;
+ if( pWin->eFrmType ) nElement++;
+ if( pWin->eExclude ) nElement++;
+ if( pWin->zBase ){
+ sqlite3TreeViewPush(pView, (--nElement)>0);
+ sqlite3TreeViewLine(pView, "window: %s", pWin->zBase);
+ sqlite3TreeViewPop(pView);
}
if( pWin->pPartition ){
- sqlite3TreeViewExprList(pView, pWin->pPartition, 1, "PARTITION-BY");
+ sqlite3TreeViewExprList(pView, pWin->pPartition, nElement>0,"PARTITION-BY");
}
if( pWin->pOrderBy ){
- sqlite3TreeViewExprList(pView, pWin->pOrderBy, 1, "ORDER-BY");
- }
- if( pWin->eType ){
- sqlite3TreeViewItem(pView, pWin->eType==TK_RANGE ? "RANGE" : "ROWS", 0);
+ sqlite3TreeViewExprList(pView, pWin->pOrderBy, (--nElement)>0, "ORDER-BY");
+ }
+ if( pWin->eFrmType ){
+ char zBuf[30];
+ const char *zFrmType = "ROWS";
+ if( pWin->eFrmType==TK_RANGE ) zFrmType = "RANGE";
+ if( pWin->eFrmType==TK_GROUPS ) zFrmType = "GROUPS";
+ sqlite3_snprintf(sizeof(zBuf),zBuf,"%s%s",zFrmType,
+ pWin->bImplicitFrame ? " (implied)" : "");
+ sqlite3TreeViewItem(pView, zBuf, (--nElement)>0);
sqlite3TreeViewBound(pView, pWin->eStart, pWin->pStart, 1);
sqlite3TreeViewBound(pView, pWin->eEnd, pWin->pEnd, 0);
sqlite3TreeViewPop(pView);
}
+ if( pWin->eExclude ){
+ char zBuf[30];
+ const char *zExclude;
+ switch( pWin->eExclude ){
+ case TK_NO: zExclude = "NO OTHERS"; break;
+ case TK_CURRENT: zExclude = "CURRENT ROW"; break;
+ case TK_GROUP: zExclude = "GROUP"; break;
+ case TK_TIES: zExclude = "TIES"; break;
+ default:
+ sqlite3_snprintf(sizeof(zBuf),zBuf,"invalid(%d)", pWin->eExclude);
+ zExclude = zBuf;
+ break;
+ }
+ sqlite3TreeViewPush(pView, 0);
+ sqlite3TreeViewLine(pView, "EXCLUDE %s", zExclude);
+ sqlite3TreeViewPop(pView);
+ }
sqlite3TreeViewPop(pView);
}
#endif /* SQLITE_OMIT_WINDOWFUNC */
@@ -28936,7 +29116,7 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m
};
assert( pExpr->op2==TK_IS || pExpr->op2==TK_ISNOT );
assert( pExpr->pRight );
- assert( pExpr->pRight->op==TK_TRUEFALSE );
+ assert( sqlite3ExprSkipCollate(pExpr->pRight)->op==TK_TRUEFALSE );
x = (pExpr->op2==TK_ISNOT)*2 + sqlite3ExprTruthValue(pExpr->pRight);
zUniOp = azOp[x];
break;
@@ -29766,11 +29946,11 @@ SQLITE_PRIVATE u32 sqlite3Utf8Read(
** encoding, or if *pMem does not contain a string value.
*/
SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
- int len; /* Maximum length of output string in bytes */
- unsigned char *zOut; /* Output buffer */
- unsigned char *zIn; /* Input iterator */
- unsigned char *zTerm; /* End of input */
- unsigned char *z; /* Output iterator */
+ sqlite3_int64 len; /* Maximum length of output string in bytes */
+ unsigned char *zOut; /* Output buffer */
+ unsigned char *zIn; /* Input iterator */
+ unsigned char *zTerm; /* End of input */
+ unsigned char *z; /* Output iterator */
unsigned int c;
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
@@ -29819,14 +29999,14 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desired
** nul-terminator.
*/
pMem->n &= ~1;
- len = pMem->n * 2 + 1;
+ len = 2 * (sqlite3_int64)pMem->n + 1;
}else{
/* When converting from UTF-8 to UTF-16 the maximum growth is caused
** when a 1-byte UTF-8 character is translated into a 2-byte UTF-16
** character. Two bytes are required in the output buffer for the
** nul-terminator.
*/
- len = pMem->n * 2 + 2;
+ len = 2 * (sqlite3_int64)pMem->n + 2;
}
/* Set zIn to point at the start of the input buffer and zTerm to point 1
@@ -30118,9 +30298,7 @@ SQLITE_PRIVATE void sqlite3UtfSelfTest(void){
*/
/* #include "sqliteInt.h" */
/* #include <stdarg.h> */
-#if HAVE_ISNAN || SQLITE_HAVE_ISNAN
-# include <math.h>
-#endif
+#include <math.h>
/*
** Routine needed to support the testcase() macro.
@@ -30133,15 +30311,23 @@ SQLITE_PRIVATE void sqlite3Coverage(int x){
#endif
/*
-** Give a callback to the test harness that can be used to simulate faults
-** in places where it is difficult or expensive to do so purely by means
-** of inputs.
+** Calls to sqlite3FaultSim() are used to simulate a failure during testing,
+** or to bypass normal error detection during testing in order to let
+** execute proceed futher downstream.
+**
+** In deployment, sqlite3FaultSim() *always* return SQLITE_OK (0). The
+** sqlite3FaultSim() function only returns non-zero during testing.
**
-** The intent of the integer argument is to let the fault simulator know
-** which of multiple sqlite3FaultSim() calls has been hit.
+** During testing, if the test harness has set a fault-sim callback using
+** a call to sqlite3_test_control(SQLITE_TESTCTRL_FAULT_INSTALL), then
+** each call to sqlite3FaultSim() is relayed to that application-supplied
+** callback and the integer return value form the application-supplied
+** callback is returned by sqlite3FaultSim().
**
-** Return whatever integer value the test callback returns, or return
-** SQLITE_OK if no test callback is installed.
+** The integer argument to sqlite3FaultSim() is a code to identify which
+** sqlite3FaultSim() instance is being invoked. Each call to sqlite3FaultSim()
+** should have a unique code. To prevent legacy testing applications from
+** breaking, the codes should not be changed or reused.
*/
#ifndef SQLITE_UNTESTABLE
SQLITE_PRIVATE int sqlite3FaultSim(int iTest){
@@ -30153,47 +30339,11 @@ SQLITE_PRIVATE int sqlite3FaultSim(int iTest){
#ifndef SQLITE_OMIT_FLOATING_POINT
/*
** Return true if the floating point value is Not a Number (NaN).
-**
-** Use the math library isnan() function if compiled with SQLITE_HAVE_ISNAN.
-** Otherwise, we have our own implementation that works on most systems.
*/
SQLITE_PRIVATE int sqlite3IsNaN(double x){
- int rc; /* The value return */
-#if !SQLITE_HAVE_ISNAN && !HAVE_ISNAN
- /*
- ** Systems that support the isnan() library function should probably
- ** make use of it by compiling with -DSQLITE_HAVE_ISNAN. But we have
- ** found that many systems do not have a working isnan() function so
- ** this implementation is provided as an alternative.
- **
- ** This NaN test sometimes fails if compiled on GCC with -ffast-math.
- ** On the other hand, the use of -ffast-math comes with the following
- ** warning:
- **
- ** This option [-ffast-math] should never be turned on by any
- ** -O option since it can result in incorrect output for programs
- ** which depend on an exact implementation of IEEE or ISO
- ** rules/specifications for math functions.
- **
- ** Under MSVC, this NaN test may fail if compiled with a floating-
- ** point precision mode other than /fp:precise. From the MSDN
- ** documentation:
- **
- ** The compiler [with /fp:precise] will properly handle comparisons
- ** involving NaN. For example, x != x evaluates to true if x is NaN
- ** ...
- */
-#ifdef __FAST_MATH__
-# error SQLite will not work correctly with the -ffast-math option of GCC.
-#endif
- volatile double y = x;
- volatile double z = y;
- rc = (y!=z);
-#else /* if HAVE_ISNAN */
- rc = isnan(x);
-#endif /* HAVE_ISNAN */
- testcase( rc );
- return rc;
+ u64 y;
+ memcpy(&y,&x,sizeof(y));
+ return IsNaN(y);
}
#endif /* SQLITE_OMIT_FLOATING_POINT */
@@ -30327,6 +30477,19 @@ SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
}
/*
+** If database connection db is currently parsing SQL, then transfer
+** error code errCode to that parser if the parser has not already
+** encountered some other kind of error.
+*/
+SQLITE_PRIVATE int sqlite3ErrorToParser(sqlite3 *db, int errCode){
+ Parse *pParse;
+ if( db==0 || (pParse = db->pParse)==0 ) return errCode;
+ pParse->rc = errCode;
+ pParse->nErr++;
+ return errCode;
+}
+
+/*
** Convert an SQL-style quoted string into a normal string by removing
** the quote characters. The conversion is done in-place. If the
** input does not begin with a quote character, then this routine
@@ -30402,12 +30565,18 @@ SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){
}
SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){
unsigned char *a, *b;
- int c;
+ int c, x;
a = (unsigned char *)zLeft;
b = (unsigned char *)zRight;
for(;;){
- c = (int)UpperToLower[*a] - (int)UpperToLower[*b];
- if( c || *a==0 ) break;
+ c = *a;
+ x = *b;
+ if( c==x ){
+ if( c==0 ) break;
+ }else{
+ c = (int)UpperToLower[c] - (int)UpperToLower[x];
+ if( c ) break;
+ }
a++;
b++;
}
@@ -30435,15 +30604,15 @@ SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
static LONGDOUBLE_TYPE sqlite3Pow10(int E){
#if defined(_MSC_VER)
static const LONGDOUBLE_TYPE x[] = {
- 1.0e+001,
- 1.0e+002,
- 1.0e+004,
- 1.0e+008,
- 1.0e+016,
- 1.0e+032,
- 1.0e+064,
- 1.0e+128,
- 1.0e+256
+ 1.0e+001L,
+ 1.0e+002L,
+ 1.0e+004L,
+ 1.0e+008L,
+ 1.0e+016L,
+ 1.0e+032L,
+ 1.0e+064L,
+ 1.0e+128L,
+ 1.0e+256L
};
LONGDOUBLE_TYPE r = 1.0;
int i;
@@ -30473,8 +30642,15 @@ static LONGDOUBLE_TYPE sqlite3Pow10(int E){
** uses the encoding enc. The string is not necessarily zero-terminated.
**
** Return TRUE if the result is a valid real number (or integer) and FALSE
-** if the string is empty or contains extraneous text. Valid numbers
-** are in one of these formats:
+** if the string is empty or contains extraneous text. More specifically
+** return
+** 1 => The input string is a pure integer
+** 2 or more => The input has a decimal point or eNNN clause
+** 0 or less => The input string is not a valid number
+** -1 => Not a valid number, but has a valid prefix which
+** includes a decimal point and/or an eNNN clause
+**
+** Valid numbers are in one of these formats:
**
** [+-]digits[E[+-]digits]
** [+-]digits.[digits][E[+-]digits]
@@ -30499,8 +30675,8 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
int e = 0; /* exponent */
int eValid = 1; /* True exponent is either not used or is well-formed */
double result;
- int nDigits = 0;
- int nonNum = 0; /* True if input contains UTF16 with high byte non-zero */
+ int nDigit = 0; /* Number of digits processed */
+ int eType = 1; /* 1: pure integer, 2+: fractional -1 or less: bad UTF16 */
assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
*pResult = 0.0; /* Default return value, in case of an error */
@@ -30511,8 +30687,10 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
int i;
incr = 2;
assert( SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 );
+ testcase( enc==SQLITE_UTF16LE );
+ testcase( enc==SQLITE_UTF16BE );
for(i=3-enc; i<length && z[i]==0; i+=2){}
- nonNum = i<length;
+ if( i<length ) eType = -100;
zEnd = &z[i^1];
z += (enc&1);
}
@@ -30530,27 +30708,30 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
}
/* copy max significant digits to significand */
- while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
+ while( z<zEnd && sqlite3Isdigit(*z) ){
s = s*10 + (*z - '0');
- z+=incr; nDigits++;
+ z+=incr; nDigit++;
+ if( s>=((LARGEST_INT64-9)/10) ){
+ /* skip non-significant significand digits
+ ** (increase exponent by d to shift decimal left) */
+ while( z<zEnd && sqlite3Isdigit(*z) ){ z+=incr; d++; }
+ }
}
-
- /* skip non-significant significand digits
- ** (increase exponent by d to shift decimal left) */
- while( z<zEnd && sqlite3Isdigit(*z) ){ z+=incr; nDigits++; d++; }
if( z>=zEnd ) goto do_atof_calc;
/* if decimal point is present */
if( *z=='.' ){
z+=incr;
+ eType++;
/* copy digits from after decimal to significand
** (decrease exponent by d to shift decimal right) */
while( z<zEnd && sqlite3Isdigit(*z) ){
if( s<((LARGEST_INT64-9)/10) ){
s = s*10 + (*z - '0');
d--;
+ nDigit++;
}
- z+=incr; nDigits++;
+ z+=incr;
}
}
if( z>=zEnd ) goto do_atof_calc;
@@ -30559,6 +30740,7 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
if( *z=='e' || *z=='E' ){
z+=incr;
eValid = 0;
+ eType++;
/* This branch is needed to avoid a (harmless) buffer overread. The
** special comment alerts the mutation tester that the correct answer
@@ -30657,7 +30839,13 @@ do_atof_calc:
*pResult = result;
/* return true if number and no extra non-whitespace chracters after */
- return z==zEnd && nDigits>0 && eValid && nonNum==0;
+ if( z==zEnd && nDigit>0 && eValid && eType>0 ){
+ return eType;
+ }else if( eType>=2 && (eType==3 || eValid) && nDigit>0 ){
+ return -1;
+ }else{
+ return 0;
+ }
#else
return !sqlite3Atoi64(z, pResult, length, enc);
#endif /* SQLITE_OMIT_FLOATING_POINT */
@@ -30700,6 +30888,7 @@ static int compare2pow63(const char *zNum, int incr){
**
** Returns:
**
+** -1 Not even a prefix of the input text looks like an integer
** 0 Successful transformation. Fits in a 64-bit signed integer.
** 1 Excess non-space text after the integer value
** 2 Integer too large for a 64-bit signed integer or is malformed
@@ -30759,9 +30948,9 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc
*pNum = (i64)u;
}
rc = 0;
- if( (i==0 && zStart==zNum) /* No digits */
- || nonNum /* UTF16 with high-order bytes non-zero */
- ){
+ if( i==0 && zStart==zNum ){ /* No digits */
+ rc = -1;
+ }else if( nonNum ){ /* UTF16 with high-order bytes non-zero */
rc = 1;
}else if( &zNum[i]<zEnd ){ /* Extra bytes at the end */
int jj = i;
@@ -30992,23 +31181,12 @@ SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
u32 a,b,s;
- a = *p;
- /* a: p0 (unmasked) */
- if (!(a&0x80))
- {
- *v = a;
+ if( ((signed char*)p)[0]>=0 ){
+ *v = *p;
return 1;
}
-
- p++;
- b = *p;
- /* b: p1 (unmasked) */
- if (!(b&0x80))
- {
- a &= 0x7f;
- a = a<<7;
- a |= b;
- *v = a;
+ if( ((signed char*)p)[1]>=0 ){
+ *v = ((u32)(p[0]&0x7f)<<7) | p[1];
return 2;
}
@@ -31016,8 +31194,9 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) );
assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) );
- p++;
- a = a<<14;
+ a = ((u32)p[0])<<14;
+ b = p[1];
+ p += 2;
a |= *p;
/* a: p0<<14 | p2 (unmasked) */
if (!(a&0x80))
@@ -31677,7 +31856,7 @@ SQLITE_PRIVATE VList *sqlite3VListAdd(
assert( pIn==0 || pIn[0]>=3 ); /* Verify ok to add new elements */
if( pIn==0 || pIn[1]+nInt > pIn[0] ){
/* Enlarge the allocation */
- int nAlloc = (pIn ? pIn[0]*2 : 10) + nInt;
+ sqlite3_int64 nAlloc = (pIn ? 2*(sqlite3_int64)pIn[0] : 10) + nInt;
VList *pOut = sqlite3DbRealloc(db, pIn, nAlloc*sizeof(int));
if( pOut==0 ) return pIn;
if( pIn==0 ) pOut[1] = 2;
@@ -31883,7 +32062,7 @@ static HashElem *findElementWithHash(
unsigned int *pHash /* Write the hash value here */
){
HashElem *elem; /* Used to loop thru the element list */
- int count; /* Number of elements left to test */
+ unsigned int count; /* Number of elements left to test */
unsigned int h; /* The computed hash */
static HashElem nullElement = { 0, 0, 0, 0 };
@@ -31931,8 +32110,8 @@ static void removeElementGivenHash(
if( pEntry->chain==elem ){
pEntry->chain = elem->next;
}
+ assert( pEntry->count>0 );
pEntry->count--;
- assert( pEntry->count>=0 );
}
sqlite3_free( elem );
pH->count--;
@@ -32107,25 +32286,25 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 89 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"),
/* 90 */ "Column" OpHelp("r[P3]=PX"),
/* 91 */ "Affinity" OpHelp("affinity(r[P1@P2])"),
- /* 92 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"),
- /* 93 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"),
- /* 94 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<<r[P1]"),
- /* 95 */ "ShiftRight" OpHelp("r[P3]=r[P2]>>r[P1]"),
- /* 96 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"),
- /* 97 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"),
- /* 98 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"),
- /* 99 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"),
- /* 100 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"),
- /* 101 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"),
- /* 102 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
- /* 103 */ "BitNot" OpHelp("r[P2]= ~r[P1]"),
- /* 104 */ "Count" OpHelp("r[P2]=count()"),
- /* 105 */ "ReadCookie" OpHelp(""),
- /* 106 */ "String8" OpHelp("r[P2]='P4'"),
- /* 107 */ "SetCookie" OpHelp(""),
- /* 108 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
- /* 109 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
- /* 110 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
+ /* 92 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
+ /* 93 */ "Count" OpHelp("r[P2]=count()"),
+ /* 94 */ "ReadCookie" OpHelp(""),
+ /* 95 */ "SetCookie" OpHelp(""),
+ /* 96 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"),
+ /* 97 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"),
+ /* 98 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<<r[P1]"),
+ /* 99 */ "ShiftRight" OpHelp("r[P3]=r[P2]>>r[P1]"),
+ /* 100 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"),
+ /* 101 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"),
+ /* 102 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"),
+ /* 103 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"),
+ /* 104 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"),
+ /* 105 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"),
+ /* 106 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
+ /* 107 */ "BitNot" OpHelp("r[P2]= ~r[P1]"),
+ /* 108 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
+ /* 109 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
+ /* 110 */ "String8" OpHelp("r[P2]='P4'"),
/* 111 */ "OpenDup" OpHelp(""),
/* 112 */ "OpenAutoindex" OpHelp("nColumn=P2"),
/* 113 */ "OpenEphemeral" OpHelp("nColumn=P2"),
@@ -32156,11 +32335,11 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 138 */ "ResetSorter" OpHelp(""),
/* 139 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"),
/* 140 */ "SqlExec" OpHelp(""),
- /* 141 */ "Real" OpHelp("r[P2]=P4"),
- /* 142 */ "ParseSchema" OpHelp(""),
- /* 143 */ "LoadAnalysis" OpHelp(""),
- /* 144 */ "DropTable" OpHelp(""),
- /* 145 */ "DropIndex" OpHelp(""),
+ /* 141 */ "ParseSchema" OpHelp(""),
+ /* 142 */ "LoadAnalysis" OpHelp(""),
+ /* 143 */ "DropTable" OpHelp(""),
+ /* 144 */ "DropIndex" OpHelp(""),
+ /* 145 */ "Real" OpHelp("r[P2]=P4"),
/* 146 */ "DropTrigger" OpHelp(""),
/* 147 */ "IntegrityCk" OpHelp(""),
/* 148 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
@@ -47887,9 +48066,10 @@ static int numberOfCachePages(PCache *p){
** suggested cache size is set to N. */
return p->szCache;
}else{
- /* IMPLEMENTATION-OF: R-61436-13639 If the argument N is negative, then
- ** the number of cache pages is adjusted to use approximately abs(N*1024)
- ** bytes of memory. */
+ /* IMPLEMANTATION-OF: R-59858-46238 If the argument N is negative, then the
+ ** number of cache pages is adjusted to be a number of pages that would
+ ** use approximately abs(N*1024) bytes of memory based on the current
+ ** page size. */
return (int)((-1024*(i64)p->szCache)/(p->szPage+p->szExtra));
}
}
@@ -49016,9 +49196,7 @@ static void pcache1FreePage(PgHdr1 *p){
** exists, this function falls back to sqlite3Malloc().
*/
SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){
- /* During rebalance operations on a corrupt database file, it is sometimes
- ** (rarely) possible to overread the temporary page buffer by a few bytes.
- ** Enlarge the allocation slightly so that this does not cause problems. */
+ assert( sz<=65536+8 ); /* These allocations are never very large */
return pcache1Alloc(sz);
}
@@ -49307,6 +49485,7 @@ static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){
}else{
pGroup = &pcache1.grp;
}
+ pcache1EnterMutex(pGroup);
if( pGroup->lru.isAnchor==0 ){
pGroup->lru.isAnchor = 1;
pGroup->lru.pLruPrev = pGroup->lru.pLruNext = &pGroup->lru;
@@ -49316,7 +49495,6 @@ static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){
pCache->szExtra = szExtra;
pCache->szAlloc = szPage + szExtra + ROUND8(sizeof(PgHdr1));
pCache->bPurgeable = (bPurgeable ? 1 : 0);
- pcache1EnterMutex(pGroup);
pcache1ResizeHash(pCache);
if( bPurgeable ){
pCache->nMin = 10;
@@ -51302,6 +51480,9 @@ static const unsigned char aJournalMagic[] = {
SQLITE_PRIVATE int sqlite3PagerDirectReadOk(Pager *pPager, Pgno pgno){
if( pPager->fd->pMethods==0 ) return 0;
if( sqlite3PCacheIsDirty(pPager->pPCache) ) return 0;
+#ifdef SQLITE_HAS_CODEC
+ if( pPager->xCodec!=0 ) return 0;
+#endif
#ifndef SQLITE_OMIT_WAL
if( pPager->pWal ){
u32 iRead = 0;
@@ -54251,8 +54432,14 @@ SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nR
rc = sqlite3OsFileSize(pPager->fd, &nByte);
}
if( rc==SQLITE_OK ){
- pNew = (char *)sqlite3PageMalloc(pageSize);
- if( !pNew ) rc = SQLITE_NOMEM_BKPT;
+ /* 8 bytes of zeroed overrun space is sufficient so that the b-tree
+ * cell header parser will never run off the end of the allocation */
+ pNew = (char *)sqlite3PageMalloc(pageSize+8);
+ if( !pNew ){
+ rc = SQLITE_NOMEM_BKPT;
+ }else{
+ memset(pNew+pageSize, 0, 8);
+ }
}
if( rc==SQLITE_OK ){
@@ -57633,8 +57820,12 @@ SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, i
*/
pPg->flags &= ~PGHDR_NEED_SYNC;
pPgOld = sqlite3PagerLookup(pPager, pgno);
- assert( !pPgOld || pPgOld->nRef==1 );
+ assert( !pPgOld || pPgOld->nRef==1 || CORRUPT_DB );
if( pPgOld ){
+ if( pPgOld->nRef>1 ){
+ sqlite3PagerUnrefNotNull(pPgOld);
+ return SQLITE_CORRUPT_BKPT;
+ }
pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC);
if( pPager->tempFile ){
/* Do not discard pages from an in-memory database since we might
@@ -58162,7 +58353,7 @@ SQLITE_PRIVATE int sqlite3PagerSnapshotCheck(Pager *pPager, sqlite3_snapshot *pS
*/
SQLITE_PRIVATE void sqlite3PagerSnapshotUnlock(Pager *pPager){
assert( pPager->pWal );
- return sqlite3WalSnapshotUnlock(pPager->pWal);
+ sqlite3WalSnapshotUnlock(pPager->pWal);
}
#endif /* SQLITE_ENABLE_SNAPSHOT */
@@ -58763,7 +58954,7 @@ static SQLITE_NOINLINE int walIndexPageRealloc(
/* Enlarge the pWal->apWiData[] array if required */
if( pWal->nWiData<=iPage ){
- int nByte = sizeof(u32*)*(iPage+1);
+ sqlite3_int64 nByte = sizeof(u32*)*(iPage+1);
volatile u32 **apNew;
apNew = (volatile u32 **)sqlite3_realloc64((void *)pWal->apWiData, nByte);
if( !apNew ){
@@ -58867,6 +59058,7 @@ static void walChecksumBytes(
assert( nByte>=8 );
assert( (nByte&0x00000007)==0 );
+ assert( nByte<=65536 );
if( nativeCksum ){
do {
@@ -59174,6 +59366,7 @@ static void walCleanupHash(Wal *pWal){
int iLimit = 0; /* Zero values greater than this */
int nByte; /* Number of bytes to zero in aPgno[] */
int i; /* Used to iterate through aHash[] */
+ int rc; /* Return code form walHashGet() */
assert( pWal->writeLock );
testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE-1 );
@@ -59184,11 +59377,12 @@ static void walCleanupHash(Wal *pWal){
/* Obtain pointers to the hash-table and page-number array containing
** the entry that corresponds to frame pWal->hdr.mxFrame. It is guaranteed
- ** that the page said hash-table and array reside on is already mapped.
+ ** that the page said hash-table and array reside on is already mapped.(1)
*/
assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) );
assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] );
- walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &sLoc);
+ rc = walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &sLoc);
+ if( NEVER(rc) ) return; /* Defense-in-depth, in case (1) above is wrong */
/* Zero all hash-table entries that correspond to frame numbers greater
** than pWal->hdr.mxFrame.
@@ -59802,7 +59996,7 @@ static int walIteratorInit(Wal *pWal, u32 nBackfill, WalIterator **pp){
WalIterator *p; /* Return value */
int nSegment; /* Number of segments to merge */
u32 iLast; /* Last frame in log */
- int nByte; /* Number of bytes to allocate */
+ sqlite3_int64 nByte; /* Number of bytes to allocate */
int i; /* Iterator variable */
ht_slot *aTmp; /* Temp space used by merge-sort */
int rc = SQLITE_OK; /* Return Code */
@@ -61093,9 +61287,9 @@ SQLITE_PRIVATE int sqlite3WalFindFrame(
}
nCollide = HASHTABLE_NSLOT;
for(iKey=walHash(pgno); sLoc.aHash[iKey]; iKey=walNextHash(iKey)){
- u32 iFrame = sLoc.aHash[iKey] + sLoc.iZero;
- if( iFrame<=iLast && iFrame>=pWal->minFrame
- && sLoc.aPgno[sLoc.aHash[iKey]]==pgno ){
+ u32 iH = sLoc.aHash[iKey];
+ u32 iFrame = iH + sLoc.iZero;
+ if( iFrame<=iLast && iFrame>=pWal->minFrame && sLoc.aPgno[iH]==pgno ){
assert( iFrame>iRead || CORRUPT_DB );
iRead = iFrame;
}
@@ -62338,7 +62532,7 @@ struct MemPage {
u16 maxLocal; /* Copy of BtShared.maxLocal or BtShared.maxLeaf */
u16 minLocal; /* Copy of BtShared.minLocal or BtShared.minLeaf */
u16 cellOffset; /* Index in aData of first cell pointer */
- u16 nFree; /* Number of free bytes on the page */
+ int nFree; /* Number of free bytes on the page. -1 for unknown */
u16 nCell; /* Number of cells on this page, local and ovfl */
u16 maskPage; /* Mask for page offset */
u16 aiOvfl[4]; /* Insert the i-th overflow cell before the aiOvfl-th
@@ -63892,14 +64086,18 @@ moveto_done:
*/
static int btreeRestoreCursorPosition(BtCursor *pCur){
int rc;
- int skipNext;
+ int skipNext = 0;
assert( cursorOwnsBtShared(pCur) );
assert( pCur->eState>=CURSOR_REQUIRESEEK );
if( pCur->eState==CURSOR_FAULT ){
return pCur->skipNext;
}
pCur->eState = CURSOR_INVALID;
- rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &skipNext);
+ if( sqlite3FaultSim(410) ){
+ rc = SQLITE_IOERR;
+ }else{
+ rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &skipNext);
+ }
if( rc==SQLITE_OK ){
sqlite3_free(pCur->pKey);
pCur->pKey = 0;
@@ -64480,7 +64678,7 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
hdr = pPage->hdrOffset;
cellOffset = pPage->cellOffset;
nCell = pPage->nCell;
- assert( nCell==get2byte(&data[hdr+3]) );
+ assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB );
iCellFirst = cellOffset + 2*nCell;
usableSize = pPage->pBt->usableSize;
@@ -64491,11 +64689,7 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
** reconstruct the entire page. */
if( (int)data[hdr+7]<=nMaxFrag ){
int iFree = get2byte(&data[hdr+1]);
-
- /* If the initial freeblock offset were out of bounds, that would
- ** have been detected by btreeInitPage() when it was computing the
- ** number of free bytes on the page. */
- assert( iFree<=usableSize-4 );
+ if( iFree>usableSize-4 ) return SQLITE_CORRUPT_PAGE(pPage);
if( iFree ){
int iFree2 = get2byte(&data[iFree]);
if( iFree2>usableSize-4 ) return SQLITE_CORRUPT_PAGE(pPage);
@@ -64514,7 +64708,10 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
if( iFree2+sz2 > usableSize ) return SQLITE_CORRUPT_PAGE(pPage);
memmove(&data[iFree+sz+sz2], &data[iFree+sz], iFree2-(iFree+sz));
sz += sz2;
+ }else if( iFree+sz>usableSize ){
+ return SQLITE_CORRUPT_PAGE(pPage);
}
+
cbrk = top+sz;
assert( cbrk+(iFree-top) <= usableSize );
memmove(&data[cbrk], &data[top], iFree-top);
@@ -64565,6 +64762,7 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
data[hdr+7] = 0;
defragment_out:
+ assert( pPage->nFree>=0 );
if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){
return SQLITE_CORRUPT_PAGE(pPage);
}
@@ -64592,16 +64790,16 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
** causes the fragmentation count to exceed 60.
*/
static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
- const int hdr = pPg->hdrOffset;
- u8 * const aData = pPg->aData;
- int iAddr = hdr + 1;
- int pc = get2byte(&aData[iAddr]);
- int x;
- int usableSize = pPg->pBt->usableSize;
- int size; /* Size of the free slot */
+ const int hdr = pPg->hdrOffset; /* Offset to page header */
+ u8 * const aData = pPg->aData; /* Page data */
+ int iAddr = hdr + 1; /* Address of ptr to pc */
+ int pc = get2byte(&aData[iAddr]); /* Address of a free slot */
+ int x; /* Excess size of the slot */
+ int maxPC = pPg->pBt->usableSize - nByte; /* Max address for a usable slot */
+ int size; /* Size of the free slot */
assert( pc>0 );
- while( pc<=usableSize-4 ){
+ while( pc<=maxPC ){
/* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each
** freeblock form a big-endian integer which is the size of the freeblock
** in bytes, including the 4-byte header. */
@@ -64609,10 +64807,7 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
if( (x = size - nByte)>=0 ){
testcase( x==4 );
testcase( x==3 );
- if( size+pc > usableSize ){
- *pRc = SQLITE_CORRUPT_PAGE(pPg);
- return 0;
- }else if( x<4 ){
+ if( x<4 ){
/* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total
** number of bytes in fragments may not exceed 60. */
if( aData[hdr+7]>57 ) return 0;
@@ -64621,21 +64816,31 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
** fragmented bytes within the page. */
memcpy(&aData[iAddr], &aData[pc], 2);
aData[hdr+7] += (u8)x;
+ }else if( x+pc > maxPC ){
+ /* This slot extends off the end of the usable part of the page */
+ *pRc = SQLITE_CORRUPT_PAGE(pPg);
+ return 0;
}else{
/* The slot remains on the free-list. Reduce its size to account
- ** for the portion used by the new allocation. */
+ ** for the portion used by the new allocation. */
put2byte(&aData[pc+2], x);
}
return &aData[pc + x];
}
iAddr = pc;
pc = get2byte(&aData[pc]);
- if( pc<iAddr+size ) break;
+ if( pc<=iAddr+size ){
+ if( pc ){
+ /* The next slot in the chain is not past the end of the current slot */
+ *pRc = SQLITE_CORRUPT_PAGE(pPg);
+ }
+ return 0;
+ }
}
- if( pc ){
+ if( pc>maxPC+nByte-4 ){
+ /* The free slot chain extends off the end of the page */
*pRc = SQLITE_CORRUPT_PAGE(pPg);
}
-
return 0;
}
@@ -64676,7 +64881,7 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
** However, that integer is too large to be stored in a 2-byte unsigned
** integer, so a value of 0 is used in its place. */
top = get2byte(&data[hdr+5]);
- assert( top<=(int)pPage->pBt->usableSize ); /* Prevent by getAndInitPage() */
+ assert( top<=(int)pPage->pBt->usableSize ); /* by btreeComputeFreeSpace() */
if( gap>top ){
if( top==0 && pPage->pBt->usableSize==65536 ){
top = 65536;
@@ -64685,9 +64890,9 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
}
}
- /* If there is enough space between gap and top for one more cell pointer
- ** array entry offset, and if the freelist is not empty, then search the
- ** freelist looking for a free slot big enough to satisfy the request.
+ /* If there is enough space between gap and top for one more cell pointer,
+ ** and if the freelist is not empty, then search the
+ ** freelist looking for a slot big enough to satisfy the request.
*/
testcase( gap+2==top );
testcase( gap+1==top );
@@ -64709,6 +64914,7 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
testcase( gap+2+nByte==top );
if( gap+2+nByte>top ){
assert( pPage->nCell>0 || CORRUPT_DB );
+ assert( pPage->nFree>=0 );
rc = defragmentPage(pPage, MIN(4, pPage->nFree - (2+nByte)));
if( rc ) return rc;
top = get2byteNotZero(&data[hdr+5]);
@@ -64717,7 +64923,7 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
/* Allocate memory from the gap in between the cell pointer array
- ** and the cell content area. The btreeInitPage() call has already
+ ** and the cell content area. The btreeComputeFreeSpace() call has already
** validated the freelist. Given that the freelist is valid, there
** is no way that the allocation can extend off the end of the page.
** The assert() below verifies the previous sentence.
@@ -64736,7 +64942,7 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
**
** Adjacent freeblocks are coalesced.
**
-** Note that even though the freeblock list was checked by btreeInitPage(),
+** Even though the freeblock list was checked by btreeComputeFreeSpace(),
** that routine will not detect overlap between cells or freeblocks. Nor
** does it detect cells or freeblocks that encrouch into the reserved bytes
** at the end of the page. So do additional corruption checks inside this
@@ -64898,21 +65104,14 @@ static int decodeFlags(MemPage *pPage, int flagByte){
}
/*
-** Initialize the auxiliary information for a disk block.
-**
-** Return SQLITE_OK on success. If we see that the page does
-** not contain a well-formed database page, then return
-** SQLITE_CORRUPT. Note that a return of SQLITE_OK does not
-** guarantee that the page is well-formed. It only shows that
-** we failed to detect any corruption.
+** Compute the amount of freespace on the page. In other words, fill
+** in the pPage->nFree field.
*/
-static int btreeInitPage(MemPage *pPage){
+static int btreeComputeFreeSpace(MemPage *pPage){
int pc; /* Address of a freeblock within pPage->aData[] */
u8 hdr; /* Offset to beginning of page header */
u8 *data; /* Equal to pPage->aData */
- BtShared *pBt; /* The main btree structure */
int usableSize; /* Amount of usable space on each page */
- u16 cellOffset; /* Offset from start of page to first cell pointer */
int nFree; /* Number of unused bytes on the page */
int top; /* First byte of the cell content area */
int iCellFirst; /* First allowable cell or freeblock offset */
@@ -64924,71 +65123,18 @@ static int btreeInitPage(MemPage *pPage){
assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) );
assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) );
assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) );
- assert( pPage->isInit==0 );
+ assert( pPage->isInit==1 );
+ assert( pPage->nFree<0 );
- pBt = pPage->pBt;
+ usableSize = pPage->pBt->usableSize;
hdr = pPage->hdrOffset;
data = pPage->aData;
- /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating
- ** the b-tree page type. */
- if( decodeFlags(pPage, data[hdr]) ){
- return SQLITE_CORRUPT_PAGE(pPage);
- }
- assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
- pPage->maskPage = (u16)(pBt->pageSize - 1);
- pPage->nOverflow = 0;
- usableSize = pBt->usableSize;
- pPage->cellOffset = cellOffset = hdr + 8 + pPage->childPtrSize;
- pPage->aDataEnd = &data[usableSize];
- pPage->aCellIdx = &data[cellOffset];
- pPage->aDataOfst = &data[pPage->childPtrSize];
/* EVIDENCE-OF: R-58015-48175 The two-byte integer at offset 5 designates
** the start of the cell content area. A zero value for this integer is
** interpreted as 65536. */
top = get2byteNotZero(&data[hdr+5]);
- /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the
- ** number of cells on the page. */
- pPage->nCell = get2byte(&data[hdr+3]);
- if( pPage->nCell>MX_CELL(pBt) ){
- /* To many cells for a single page. The page must be corrupt */
- return SQLITE_CORRUPT_PAGE(pPage);
- }
- testcase( pPage->nCell==MX_CELL(pBt) );
- /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only
- ** possible for a root page of a table that contains no rows) then the
- ** offset to the cell content area will equal the page size minus the
- ** bytes of reserved space. */
- assert( pPage->nCell>0 || top==usableSize || CORRUPT_DB );
-
- /* A malformed database page might cause us to read past the end
- ** of page when parsing a cell.
- **
- ** The following block of code checks early to see if a cell extends
- ** past the end of a page boundary and causes SQLITE_CORRUPT to be
- ** returned if it does.
- */
- iCellFirst = cellOffset + 2*pPage->nCell;
+ iCellFirst = hdr + 8 + pPage->childPtrSize + 2*pPage->nCell;
iCellLast = usableSize - 4;
- if( pBt->db->flags & SQLITE_CellSizeCk ){
- int i; /* Index into the cell pointer array */
- int sz; /* Size of a cell */
-
- if( !pPage->leaf ) iCellLast--;
- for(i=0; i<pPage->nCell; i++){
- pc = get2byteAligned(&data[cellOffset+i*2]);
- testcase( pc==iCellFirst );
- testcase( pc==iCellLast );
- if( pc<iCellFirst || pc>iCellLast ){
- return SQLITE_CORRUPT_PAGE(pPage);
- }
- sz = pPage->xCellSize(pPage, &data[pc]);
- testcase( pc+sz==usableSize );
- if( pc+sz>usableSize ){
- return SQLITE_CORRUPT_PAGE(pPage);
- }
- }
- if( !pPage->leaf ) iCellLast++;
- }
/* Compute the total free space on the page
** EVIDENCE-OF: R-23588-34450 The two-byte integer at offset 1 gives the
@@ -65032,11 +65178,104 @@ static int btreeInitPage(MemPage *pPage){
** serves to verify that the offset to the start of the cell-content
** area, according to the page header, lies within the page.
*/
- if( nFree>usableSize ){
+ if( nFree>usableSize || nFree<iCellFirst ){
return SQLITE_CORRUPT_PAGE(pPage);
}
pPage->nFree = (u16)(nFree - iCellFirst);
+ return SQLITE_OK;
+}
+
+/*
+** Do additional sanity check after btreeInitPage() if
+** PRAGMA cell_size_check=ON
+*/
+static SQLITE_NOINLINE int btreeCellSizeCheck(MemPage *pPage){
+ int iCellFirst; /* First allowable cell or freeblock offset */
+ int iCellLast; /* Last possible cell or freeblock offset */
+ int i; /* Index into the cell pointer array */
+ int sz; /* Size of a cell */
+ int pc; /* Address of a freeblock within pPage->aData[] */
+ u8 *data; /* Equal to pPage->aData */
+ int usableSize; /* Maximum usable space on the page */
+ int cellOffset; /* Start of cell content area */
+
+ iCellFirst = pPage->cellOffset + 2*pPage->nCell;
+ usableSize = pPage->pBt->usableSize;
+ iCellLast = usableSize - 4;
+ data = pPage->aData;
+ cellOffset = pPage->cellOffset;
+ if( !pPage->leaf ) iCellLast--;
+ for(i=0; i<pPage->nCell; i++){
+ pc = get2byteAligned(&data[cellOffset+i*2]);
+ testcase( pc==iCellFirst );
+ testcase( pc==iCellLast );
+ if( pc<iCellFirst || pc>iCellLast ){
+ return SQLITE_CORRUPT_PAGE(pPage);
+ }
+ sz = pPage->xCellSize(pPage, &data[pc]);
+ testcase( pc+sz==usableSize );
+ if( pc+sz>usableSize ){
+ return SQLITE_CORRUPT_PAGE(pPage);
+ }
+ }
+ return SQLITE_OK;
+}
+
+/*
+** Initialize the auxiliary information for a disk block.
+**
+** Return SQLITE_OK on success. If we see that the page does
+** not contain a well-formed database page, then return
+** SQLITE_CORRUPT. Note that a return of SQLITE_OK does not
+** guarantee that the page is well-formed. It only shows that
+** we failed to detect any corruption.
+*/
+static int btreeInitPage(MemPage *pPage){
+ u8 *data; /* Equal to pPage->aData */
+ BtShared *pBt; /* The main btree structure */
+
+ assert( pPage->pBt!=0 );
+ assert( pPage->pBt->db!=0 );
+ assert( sqlite3_mutex_held(pPage->pBt->mutex) );
+ assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) );
+ assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) );
+ assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) );
+ assert( pPage->isInit==0 );
+
+ pBt = pPage->pBt;
+ data = pPage->aData + pPage->hdrOffset;
+ /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating
+ ** the b-tree page type. */
+ if( decodeFlags(pPage, data[0]) ){
+ return SQLITE_CORRUPT_PAGE(pPage);
+ }
+ assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
+ pPage->maskPage = (u16)(pBt->pageSize - 1);
+ pPage->nOverflow = 0;
+ pPage->cellOffset = pPage->hdrOffset + 8 + pPage->childPtrSize;
+ pPage->aCellIdx = data + pPage->childPtrSize + 8;
+ pPage->aDataEnd = pPage->aData + pBt->usableSize;
+ pPage->aDataOfst = pPage->aData + pPage->childPtrSize;
+ /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the
+ ** number of cells on the page. */
+ pPage->nCell = get2byte(&data[3]);
+ if( pPage->nCell>MX_CELL(pBt) ){
+ /* To many cells for a single page. The page must be corrupt */
+ return SQLITE_CORRUPT_PAGE(pPage);
+ }
+ testcase( pPage->nCell==MX_CELL(pBt) );
+ /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only
+ ** possible for a root page of a table that contains no rows) then the
+ ** offset to the cell content area will equal the page size minus the
+ ** bytes of reserved space. */
+ assert( pPage->nCell>0
+ || get2byteNotZero(&data[5])==(int)pBt->usableSize
+ || CORRUPT_DB );
+ pPage->nFree = -1; /* Indicate that this value is yet uncomputed */
pPage->isInit = 1;
+ if( pBt->db->flags & SQLITE_CellSizeCk ){
+ return btreeCellSizeCheck(pPage);
+ }
return SQLITE_OK;
}
@@ -65179,19 +65418,18 @@ static int getAndInitPage(
if( pgno>btreePagecount(pBt) ){
rc = SQLITE_CORRUPT_BKPT;
- goto getAndInitPage_error;
+ goto getAndInitPage_error1;
}
rc = sqlite3PagerGet(pBt->pPager, pgno, (DbPage**)&pDbPage, bReadOnly);
if( rc ){
- goto getAndInitPage_error;
+ goto getAndInitPage_error1;
}
*ppPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);
if( (*ppPage)->isInit==0 ){
btreePageFromDbPage(pDbPage, pgno, pBt);
rc = btreeInitPage(*ppPage);
if( rc!=SQLITE_OK ){
- releasePage(*ppPage);
- goto getAndInitPage_error;
+ goto getAndInitPage_error2;
}
}
assert( (*ppPage)->pgno==pgno );
@@ -65201,12 +65439,13 @@ static int getAndInitPage(
** compatible with the root page. */
if( pCur && ((*ppPage)->nCell<1 || (*ppPage)->intKey!=pCur->curIntKey) ){
rc = SQLITE_CORRUPT_PGNO(pgno);
- releasePage(*ppPage);
- goto getAndInitPage_error;
+ goto getAndInitPage_error2;
}
return SQLITE_OK;
-getAndInitPage_error:
+getAndInitPage_error2:
+ releasePage(*ppPage);
+getAndInitPage_error1:
if( pCur ){
pCur->iPage--;
pCur->pPage = pCur->apPage[pCur->iPage];
@@ -67168,6 +67407,18 @@ SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int wr
}
/*
+** Set the pBt->nPage field correctly, according to the current
+** state of the database. Assume pBt->pPage1 is valid.
+*/
+static void btreeSetNPage(BtShared *pBt, MemPage *pPage1){
+ int nPage = get4byte(&pPage1->aData[28]);
+ testcase( nPage==0 );
+ if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
+ testcase( pBt->nPage!=nPage );
+ pBt->nPage = nPage;
+}
+
+/*
** Rollback the transaction in progress.
**
** If tripCode is not SQLITE_OK then cursors will be invalidated (tripped).
@@ -67212,11 +67463,7 @@ SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode, int writeOnly){
** call btreeGetPage() on page 1 again to make
** sure pPage1->aData is set correctly. */
if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){
- int nPage = get4byte(28+(u8*)pPage1->aData);
- testcase( nPage==0 );
- if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
- testcase( pBt->nPage!=nPage );
- pBt->nPage = nPage;
+ btreeSetNPage(pBt, pPage1);
releasePageOne(pPage1);
}
assert( countValidCursors(pBt, 1)==0 );
@@ -67296,12 +67543,11 @@ SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){
pBt->nPage = 0;
}
rc = newDatabase(pBt);
- pBt->nPage = get4byte(28 + pBt->pPage1->aData);
+ btreeSetNPage(pBt, pBt->pPage1);
- /* The database size was written into the offset 28 of the header
- ** when the transaction started, so we know that the value at offset
- ** 28 is nonzero. */
- assert( pBt->nPage>0 );
+ /* pBt->nPage might be zero if the database was corrupt when
+ ** the transaction was started. Otherwise, it must be at least 1. */
+ assert( CORRUPT_DB || pBt->nPage>0 );
}
sqlite3BtreeLeave(p);
}
@@ -68287,23 +68533,6 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
return rc;
}
-/*
-** This function is a no-op if cursor pCur does not point to a valid row.
-** Otherwise, if pCur is valid, configure it so that the next call to
-** sqlite3BtreeNext() is a no-op.
-*/
-#ifndef SQLITE_OMIT_WINDOWFUNC
-SQLITE_PRIVATE void sqlite3BtreeSkipNext(BtCursor *pCur){
- /* We believe that the cursor must always be in the valid state when
- ** this routine is called, but the proof is difficult, so we add an
- ** ALWaYS() test just in case we are wrong. */
- if( ALWAYS(pCur->eState==CURSOR_VALID) ){
- pCur->eState = CURSOR_SKIPNEXT;
- pCur->skipNext = 1;
- }
-}
-#endif /* SQLITE_OMIT_WINDOWFUNC */
-
/* Move the cursor to the last entry in the table. Return SQLITE_OK
** on success. Set *pRes to 0 if the cursor actually points to something
** or set *pRes to 1 if the table is empty.
@@ -68326,6 +68555,7 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
assert( pCur->ix==pCur->pPage->nCell-1 );
assert( pCur->pPage->leaf );
#endif
+ *pRes = 0;
return SQLITE_OK;
}
@@ -68547,6 +68777,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
** case this happens. */
void *pCellKey;
u8 * const pCellBody = pCell - pPage->childPtrSize;
+ const int nOverrun = 18; /* Size of the overrun padding */
pPage->xParseCell(pPage, pCellBody, &pCur->info);
nCell = (int)pCur->info.nKey;
testcase( nCell<0 ); /* True if key size is 2^32 or more */
@@ -68557,19 +68788,20 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
rc = SQLITE_CORRUPT_PAGE(pPage);
goto moveto_finish;
}
- pCellKey = sqlite3Malloc( nCell+18 );
+ pCellKey = sqlite3Malloc( nCell+nOverrun );
if( pCellKey==0 ){
rc = SQLITE_NOMEM_BKPT;
goto moveto_finish;
}
pCur->ix = (u16)idx;
rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0);
+ memset(((u8*)pCellKey)+nCell,0,nOverrun); /* Fix uninit warnings */
pCur->curFlags &= ~BTCF_ValidOvfl;
if( rc ){
sqlite3_free(pCellKey);
goto moveto_finish;
}
- c = xRecordCompare(nCell, pCellKey, pIdxKey);
+ c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey);
sqlite3_free(pCellKey);
}
assert(
@@ -69201,13 +69433,15 @@ static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){
MemPage *pPage1 = pBt->pPage1; /* Local reference to page 1 */
MemPage *pPage; /* Page being freed. May be NULL. */
int rc; /* Return Code */
- int nFree; /* Initial number of pages on free-list */
+ u32 nFree; /* Initial number of pages on free-list */
assert( sqlite3_mutex_held(pBt->mutex) );
assert( CORRUPT_DB || iPage>1 );
assert( !pMemPage || pMemPage->pgno==iPage );
- if( iPage<2 ) return SQLITE_CORRUPT_BKPT;
+ if( iPage<2 || iPage>pBt->nPage ){
+ return SQLITE_CORRUPT_BKPT;
+ }
if( pMemPage ){
pPage = pMemPage;
sqlite3PagerRef(pPage->pDbPage);
@@ -69618,6 +69852,7 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
assert( CORRUPT_DB || sz==cellSize(pPage, idx) );
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
+ assert( pPage->nFree>=0 );
data = pPage->aData;
ptr = &pPage->aCellIdx[2*idx];
pc = get2byte(ptr);
@@ -69688,6 +69923,7 @@ static void insertCell(
** might be less than 8 (leaf-size + pointer) on the interior node. Hence
** the term after the || in the following assert(). */
assert( sz==pPage->xCellSize(pPage, pCell) || (sz==8 && iChild>0) );
+ assert( pPage->nFree>=0 );
if( pPage->nOverflow || sz+2>pPage->nFree ){
if( pTemp ){
memcpy(pTemp, pCell, sz);
@@ -69745,7 +69981,7 @@ static void insertCell(
pPage->nCell++;
/* increment the cell count */
if( (++data[pPage->hdrOffset+4])==0 ) data[pPage->hdrOffset+3]++;
- assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell );
+ assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell || CORRUPT_DB );
#ifndef SQLITE_OMIT_AUTOVACUUM
if( pPage->pBt->autoVacuum ){
/* The cell may contain a pointer to an overflow page. If so, write
@@ -69832,8 +70068,13 @@ static void insertCell(
** are used and they point to the leaf pages only, and the ixNx value are:
**
** ixNx[0] = Number of cells in Child-1.
-** ixNx[1] = Number of cells in Child-1 and Child-2 + 1 for 1st divider.
-** ixNx[2] = Number of cells in Child-1 and Child-2 + both divider cells
+** ixNx[1] = Number of cells in Child-1 and Child-2.
+** ixNx[2] = Total number of cells.
+**
+** Sometimes when deleting, a child page can have zero cells. In those
+** cases, ixNx[] entries with higher indexes, and the corresponding apEnd[]
+** entries, shift down. The end result is that each ixNx[] entry should
+** be larger than the previous
*/
typedef struct CellArray CellArray;
struct CellArray {
@@ -70162,8 +70403,9 @@ static int editPage(
int iCell = (iOld + pPg->aiOvfl[i]) - iNew;
if( iCell>=0 && iCell<nNew ){
pCellptr = &pPg->aCellIdx[iCell * 2];
- assert( nCell>=iCell );
- memmove(&pCellptr[2], pCellptr, (nCell - iCell) * 2);
+ if( nCell>iCell ){
+ memmove(&pCellptr[2], pCellptr, (nCell - iCell) * 2);
+ }
nCell++;
if( pageInsertArray(
pPg, pBegin, &pData, pCellptr,
@@ -70239,8 +70481,10 @@ static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
assert( sqlite3PagerIswriteable(pParent->pDbPage) );
assert( pPage->nOverflow==1 );
-
+
if( pPage->nCell==0 ) return SQLITE_CORRUPT_BKPT; /* dbfuzz001.test */
+ assert( pPage->nFree>=0 );
+ assert( pParent->nFree>=0 );
/* Allocate a new page. This page will become the right-sibling of
** pPage. Make the parent page writable, so that the new divider cell
@@ -70410,6 +70654,7 @@ static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){
*/
pTo->isInit = 0;
rc = btreeInitPage(pTo);
+ if( rc==SQLITE_OK ) rc = btreeComputeFreeSpace(pTo);
if( rc!=SQLITE_OK ){
*pRC = rc;
return;
@@ -70518,6 +70763,7 @@ static int balance_nonroot(
if( !aOvflSpace ){
return SQLITE_NOMEM_BKPT;
}
+ assert( pParent->nFree>=0 );
/* Find the sibling pages to balance. Also locate the cells in pParent
** that divide the siblings. An attempt is made to find NN siblings on
@@ -70557,7 +70803,13 @@ static int balance_nonroot(
memset(apOld, 0, (i+1)*sizeof(MemPage*));
goto balance_cleanup;
}
- nMaxCells += 1+apOld[i]->nCell+apOld[i]->nOverflow;
+ if( apOld[i]->nFree<0 ){
+ rc = btreeComputeFreeSpace(apOld[i]);
+ if( rc ){
+ memset(apOld, 0, (i)*sizeof(MemPage*));
+ goto balance_cleanup;
+ }
+ }
if( (i--)==0 ) break;
if( pParent->nOverflow && i+nxDiv==pParent->aiOvfl[0] ){
@@ -70601,6 +70853,7 @@ static int balance_nonroot(
/* Make nMaxCells a multiple of 4 in order to preserve 8-byte
** alignment */
+ nMaxCells = nOld*(MX_CELL(pBt) + ArraySize(pParent->apOvfl));
nMaxCells = (nMaxCells + 3)&~3;
/*
@@ -70611,7 +70864,7 @@ static int balance_nonroot(
+ nMaxCells*sizeof(u16) /* b.szCell */
+ pBt->pageSize; /* aSpace1 */
- assert( szScratch<=6*(int)pBt->pageSize );
+ assert( szScratch<=7*(int)pBt->pageSize );
b.apCell = sqlite3StackAllocRaw(0, szScratch );
if( b.apCell==0 ){
rc = SQLITE_NOMEM_BKPT;
@@ -70647,6 +70900,7 @@ static int balance_nonroot(
u16 maskPage = pOld->maskPage;
u8 *piCell = aData + pOld->cellOffset;
u8 *piEnd;
+ VVA_ONLY( int nCellAtStart = b.nCell; )
/* Verify that all sibling pages are of the same "type" (table-leaf,
** table-interior, index-leaf, or index-interior).
@@ -70675,6 +70929,10 @@ static int balance_nonroot(
*/
memset(&b.szCell[b.nCell], 0, sizeof(b.szCell[0])*(limit+pOld->nOverflow));
if( pOld->nOverflow>0 ){
+ if( limit<pOld->aiOvfl[0] ){
+ rc = SQLITE_CORRUPT_BKPT;
+ goto balance_cleanup;
+ }
limit = pOld->aiOvfl[0];
for(j=0; j<limit; j++){
b.apCell[b.nCell] = aData + (maskPage & get2byteAligned(piCell));
@@ -70694,6 +70952,7 @@ static int balance_nonroot(
piCell += 2;
b.nCell++;
}
+ assert( (b.nCell-nCellAtStart)==(pOld->nCell+pOld->nOverflow) );
cntOld[i] = b.nCell;
if( i<nOld-1 && !leafData){
@@ -70751,11 +71010,15 @@ static int balance_nonroot(
MemPage *p = apOld[i];
b.apEnd[k] = p->aDataEnd;
b.ixNx[k] = cntOld[i];
+ if( k && b.ixNx[k]==b.ixNx[k-1] ){
+ k--; /* Omit b.ixNx[] entry for child pages with no cells */
+ }
if( !leafData ){
k++;
b.apEnd[k] = pParent->aDataEnd;
b.ixNx[k] = cntOld[i]+1;
}
+ assert( p->nFree>=0 );
szNew[i] = usableSpace - p->nFree;
for(j=0; j<p->nOverflow; j++){
szNew[i] += 2 + p->xCellSize(p, p->apOvfl[j]);
@@ -70981,18 +71244,18 @@ static int balance_nonroot(
if( ISAUTOVACUUM ){
MemPage *pOld;
MemPage *pNew = pOld = apNew[0];
- u8 *aOld = pNew->aData;
int cntOldNext = pNew->nCell + pNew->nOverflow;
- int usableSize = pBt->usableSize;
int iNew = 0;
int iOld = 0;
for(i=0; i<b.nCell; i++){
u8 *pCell = b.apCell[i];
- if( i==cntOldNext ){
- pOld = (++iOld)<nNew ? apNew[iOld] : apOld[iOld];
+ while( i==cntOldNext ){
+ iOld++;
+ assert( iOld<nNew || iOld<nOld );
+ assert( iOld>=0 && iOld<NB );
+ pOld = iOld<nNew ? apNew[iOld] : apOld[iOld];
cntOldNext += pOld->nCell + pOld->nOverflow + !leafData;
- aOld = pOld->aData;
}
if( i==cntNew[iNew] ){
pNew = apNew[++iNew];
@@ -71007,7 +71270,7 @@ static int balance_nonroot(
** overflow cell), we can skip updating the pointer map entries. */
if( iOld>=nNew
|| pNew->pgno!=aPgno[iOld]
- || !SQLITE_WITHIN(pCell,aOld,&aOld[usableSize])
+ || !SQLITE_WITHIN(pCell,pOld->aData,pOld->aDataEnd)
){
if( !leafCorrection ){
ptrmapPut(pBt, get4byte(pCell), PTRMAP_BTREE, pNew->pgno, &rc);
@@ -71158,7 +71421,8 @@ static int balance_nonroot(
rc = defragmentPage(apNew[0], -1);
testcase( rc!=SQLITE_OK );
assert( apNew[0]->nFree ==
- (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2)
+ (get2byteNotZero(&apNew[0]->aData[5]) - apNew[0]->cellOffset
+ - apNew[0]->nCell*2)
|| rc!=SQLITE_OK
);
copyNodeContent(apNew[0], pParent, &rc);
@@ -71257,7 +71521,7 @@ static int balance_deeper(MemPage *pRoot, MemPage **ppChild){
}
assert( sqlite3PagerIswriteable(pChild->pDbPage) );
assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
- assert( pChild->nCell==pRoot->nCell );
+ assert( pChild->nCell==pRoot->nCell || CORRUPT_DB );
TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno));
@@ -71299,6 +71563,7 @@ static int balance(BtCursor *pCur){
int iPage = pCur->iPage;
MemPage *pPage = pCur->pPage;
+ if( NEVER(pPage->nFree<0) && btreeComputeFreeSpace(pPage) ) break;
if( iPage==0 ){
if( pPage->nOverflow ){
/* The root page of the b-tree is overfull. In this case call the
@@ -71327,6 +71592,9 @@ static int balance(BtCursor *pCur){
int const iIdx = pCur->aiIdx[iPage-1];
rc = sqlite3PagerWrite(pParent->pDbPage);
+ if( rc==SQLITE_OK && pParent->nFree<0 ){
+ rc = btreeComputeFreeSpace(pParent);
+ }
if( rc==SQLITE_OK ){
#ifndef SQLITE_OMIT_QUICKBALANCE
if( pPage->intKeyLeaf
@@ -71673,6 +71941,10 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
pPage = pCur->pPage;
assert( pPage->intKey || pX->nKey>=0 );
assert( pPage->leaf || !pPage->intKey );
+ if( pPage->nFree<0 ){
+ rc = btreeComputeFreeSpace(pPage);
+ if( rc ) return rc;
+ }
TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n",
pCur->pgnoRoot, pX->nKey, pX->nData, pPage->pgno,
@@ -71815,14 +72087,18 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
assert( pCur->curFlags & BTCF_WriteFlag );
assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
assert( !hasReadConflicts(p, pCur->pgnoRoot) );
- assert( pCur->ix<pCur->pPage->nCell );
- assert( pCur->eState==CURSOR_VALID );
assert( (flags & ~(BTREE_SAVEPOSITION | BTREE_AUXDELETE))==0 );
+ if( pCur->eState==CURSOR_REQUIRESEEK ){
+ rc = btreeRestoreCursorPosition(pCur);
+ if( rc ) return rc;
+ }
+ assert( pCur->eState==CURSOR_VALID );
iCellDepth = pCur->iPage;
iCellIdx = pCur->ix;
pPage = pCur->pPage;
pCell = findCell(pPage, iCellIdx);
+ if( pPage->nFree<0 && btreeComputeFreeSpace(pPage) ) return SQLITE_CORRUPT;
/* If the bPreserve flag is set to true, then the cursor position must
** be preserved following this delete operation. If the current delete
@@ -71893,6 +72169,10 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
Pgno n;
unsigned char *pTmp;
+ if( pLeaf->nFree<0 ){
+ rc = btreeComputeFreeSpace(pLeaf);
+ if( rc ) return rc;
+ }
if( iCellDepth<pCur->iPage-1 ){
n = pCur->apPage[iCellDepth+1]->pgno;
}else{
@@ -72251,6 +72531,9 @@ static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
assert( sqlite3BtreeHoldsMutex(p) );
assert( p->inTrans==TRANS_WRITE );
assert( iTable>=2 );
+ if( iTable>btreePagecount(pBt) ){
+ return SQLITE_CORRUPT_BKPT;
+ }
rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0);
if( rc ) return rc;
@@ -72599,10 +72882,10 @@ static void checkList(
IntegrityCk *pCheck, /* Integrity checking context */
int isFreeList, /* True for a freelist. False for overflow page list */
int iPage, /* Page number for first page in the list */
- int N /* Expected number of pages in the list */
+ u32 N /* Expected number of pages in the list */
){
int i;
- int expected = N;
+ u32 expected = N;
int nErrAtStart = pCheck->nErr;
while( iPage!=0 && pCheck->mxErr ){
DbPage *pOvflPage;
@@ -72784,6 +73067,11 @@ static int checkTreePage(
"btreeInitPage() returns error code %d", rc);
goto end_of_check;
}
+ if( (rc = btreeComputeFreeSpace(pPage))!=0 ){
+ assert( rc==SQLITE_CORRUPT );
+ checkAppendMsg(pCheck, "free space corruption", rc);
+ goto end_of_check;
+ }
data = pPage->aData;
hdr = pPage->hdrOffset;
@@ -72856,7 +73144,7 @@ static int checkTreePage(
/* Check the content overflow list */
if( info.nPayload>info.nLocal ){
- int nPage; /* Number of pages on the overflow chain */
+ u32 nPage; /* Number of pages on the overflow chain */
Pgno pgnoOvfl; /* First page of the overflow chain */
assert( pc + info.nSize - 4 <= usableSize );
nPage = (info.nPayload - info.nLocal + usableSize - 5)/(usableSize - 4);
@@ -72916,9 +73204,9 @@ static int checkTreePage(
i = get2byte(&data[hdr+1]);
while( i>0 ){
int size, j;
- assert( (u32)i<=usableSize-4 ); /* Enforced by btreeInitPage() */
+ assert( (u32)i<=usableSize-4 ); /* Enforced by btreeComputeFreeSpace() */
size = get2byte(&data[i+2]);
- assert( (u32)(i+size)<=usableSize ); /* Enforced by btreeInitPage() */
+ assert( (u32)(i+size)<=usableSize ); /* due to btreeComputeFreeSpace() */
btreeHeapInsert(heap, (((u32)i)<<16)|(i+size-1));
/* EVIDENCE-OF: R-58208-19414 The first 2 bytes of a freeblock are a
** big-endian integer which is the offset in the b-tree page of the next
@@ -72927,8 +73215,8 @@ static int checkTreePage(
j = get2byte(&data[i]);
/* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of
** increasing offset. */
- assert( j==0 || j>i+size ); /* Enforced by btreeInitPage() */
- assert( (u32)j<=usableSize-4 ); /* Enforced by btreeInitPage() */
+ assert( j==0 || j>i+size ); /* Enforced by btreeComputeFreeSpace() */
+ assert( (u32)j<=usableSize-4 ); /* Enforced by btreeComputeFreeSpace() */
i = j;
}
/* Analyze the min-heap looking for overlap between cells and/or
@@ -73686,7 +73974,7 @@ static int backupOnePage(
if( nSrcReserve!=nDestReserve ){
u32 newPgsz = nSrcPgsz;
rc = sqlite3PagerSetPagesize(pDestPager, &newPgsz, nSrcReserve);
- if( rc==SQLITE_OK && newPgsz!=nSrcPgsz ) rc = SQLITE_READONLY;
+ if( rc==SQLITE_OK && newPgsz!=(u32)nSrcPgsz ) rc = SQLITE_READONLY;
}
#endif
@@ -74233,6 +74521,11 @@ copy_finished:
/* #include "sqliteInt.h" */
/* #include "vdbeInt.h" */
+/* True if X is a power of two. 0 is considered a power of two here.
+** In other words, return true if X has at most one bit set.
+*/
+#define ISPOWEROF2(X) (((X)&((X)-1))==0)
+
#ifdef SQLITE_DEBUG
/*
** Check invariants on a Mem object.
@@ -74252,8 +74545,8 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){
** That saves a few cycles in inner loops. */
assert( (p->flags & MEM_Dyn)==0 || p->szMalloc==0 );
- /* Cannot be both MEM_Int and MEM_Real at the same time */
- assert( (p->flags & (MEM_Int|MEM_Real))!=(MEM_Int|MEM_Real) );
+ /* Cannot have more than one of MEM_Int, MEM_Real, or MEM_IntReal */
+ assert( ISPOWEROF2(p->flags & (MEM_Int|MEM_Real|MEM_IntReal)) );
if( p->flags & MEM_Null ){
/* Cannot be both MEM_Null and some other type */
@@ -74272,7 +74565,7 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){
((p->flags&MEM_Static)!=0 ? 1 : 0) <= 1 );
/* No other bits set */
- assert( (p->flags & ~(MEM_Null|MEM_Term|MEM_Subtype
+ assert( (p->flags & ~(MEM_Null|MEM_Term|MEM_Subtype|MEM_FromBind
|MEM_Dyn|MEM_Ephem|MEM_Static))==0 );
}else{
/* A pure NULL might have other flags, such as MEM_Static, MEM_Dyn,
@@ -74307,9 +74600,31 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){
}
#endif
+/*
+** Render a Mem object which is one of MEM_Int, MEM_Real, or MEM_IntReal
+** into a buffer.
+*/
+static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){
+ StrAccum acc;
+ assert( p->flags & (MEM_Int|MEM_Real|MEM_IntReal) );
+ sqlite3StrAccumInit(&acc, 0, zBuf, sz, 0);
+ if( p->flags & MEM_Int ){
+ sqlite3_str_appendf(&acc, "%lld", p->u.i);
+ }else if( p->flags & MEM_IntReal ){
+ sqlite3_str_appendf(&acc, "%!.15g", (double)p->u.i);
+ }else{
+ sqlite3_str_appendf(&acc, "%!.15g", p->u.r);
+ }
+ assert( acc.zText==zBuf && acc.mxAlloc<=0 );
+ zBuf[acc.nChar] = 0; /* Fast version of sqlite3StrAccumFinish(&acc) */
+}
+
#ifdef SQLITE_DEBUG
/*
-** Check that string value of pMem agrees with its integer or real value.
+** Validity checks on pMem. pMem holds a string.
+**
+** (1) Check that string value of pMem agrees with its integer or real value.
+** (2) Check that the string is correctly zero terminated
**
** A single int or real value always converts to the same strings. But
** many different strings can be converted into the same int or real.
@@ -74327,17 +74642,24 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){
**
** This routine is for use inside of assert() statements only.
*/
-SQLITE_PRIVATE int sqlite3VdbeMemConsistentDualRep(Mem *p){
+SQLITE_PRIVATE int sqlite3VdbeMemValidStrRep(Mem *p){
char zBuf[100];
char *z;
int i, j, incr;
if( (p->flags & MEM_Str)==0 ) return 1;
- if( (p->flags & (MEM_Int|MEM_Real))==0 ) return 1;
- if( p->flags & MEM_Int ){
- sqlite3_snprintf(sizeof(zBuf),zBuf,"%lld",p->u.i);
- }else{
- sqlite3_snprintf(sizeof(zBuf),zBuf,"%!.15g",p->u.r);
- }
+ if( p->flags & MEM_Term ){
+ /* Insure that the string is properly zero-terminated. Pay particular
+ ** attention to the case where p->n is odd */
+ if( p->szMalloc>0 && p->z==p->zMalloc ){
+ assert( p->enc==SQLITE_UTF8 || p->szMalloc >= ((p->n+1)&~1)+2 );
+ assert( p->enc!=SQLITE_UTF8 || p->szMalloc >= p->n+1 );
+ }
+ assert( p->z[p->n]==0 );
+ assert( p->enc==SQLITE_UTF8 || p->z[(p->n+1)&~1]==0 );
+ assert( p->enc==SQLITE_UTF8 || p->z[((p->n+1)&~1)+1]==0 );
+ }
+ if( (p->flags & (MEM_Int|MEM_Real|MEM_IntReal))==0 ) return 1;
+ vdbeMemRenderNum(sizeof(zBuf), zBuf, p);
z = p->z;
i = j = 0;
incr = 1;
@@ -74393,8 +74715,7 @@ SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
}
/*
-** Make sure pMem->z points to a writable allocation of at least
-** min(n,32) bytes.
+** Make sure pMem->z points to a writable allocation of at least n bytes.
**
** If the bPreserve argument is true, then copy of the content of
** pMem->z into the new allocation. pMem must be either a string or
@@ -74413,7 +74734,6 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPre
assert( pMem->szMalloc==0
|| pMem->szMalloc==sqlite3DbMallocSize(pMem->db, pMem->zMalloc) );
- if( n<32 ) n = 32;
if( pMem->szMalloc>0 && bPreserve && pMem->z==pMem->zMalloc ){
pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
bPreserve = 0;
@@ -74451,8 +74771,8 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPre
**
** Any prior string or blob content in the pMem object may be discarded.
** The pMem->xDel destructor is called, if it exists. Though MEM_Str
-** and MEM_Blob values may be discarded, MEM_Int, MEM_Real, and MEM_Null
-** values are preserved.
+** and MEM_Blob values may be discarded, MEM_Int, MEM_Real, MEM_IntReal,
+** and MEM_Null values are preserved.
**
** Return SQLITE_OK on success or an error code (probably SQLITE_NOMEM)
** if unable to complete the resizing.
@@ -74465,20 +74785,26 @@ SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int szNew){
}
assert( (pMem->flags & MEM_Dyn)==0 );
pMem->z = pMem->zMalloc;
- pMem->flags &= (MEM_Null|MEM_Int|MEM_Real);
+ pMem->flags &= (MEM_Null|MEM_Int|MEM_Real|MEM_IntReal);
return SQLITE_OK;
}
/*
** It is already known that pMem contains an unterminated string.
** Add the zero terminator.
+**
+** Three bytes of zero are added. In this way, there is guaranteed
+** to be a double-zero byte at an even byte boundary in order to
+** terminate a UTF16 string, even if the initial size of the buffer
+** is an odd number of bytes.
*/
static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
- if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
+ if( sqlite3VdbeMemGrow(pMem, pMem->n+3, 1) ){
return SQLITE_NOMEM_BKPT;
}
pMem->z[pMem->n] = 0;
pMem->z[pMem->n+1] = 0;
+ pMem->z[pMem->n+2] = 0;
pMem->flags |= MEM_Term;
return SQLITE_OK;
}
@@ -74515,13 +74841,15 @@ SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
int nByte;
assert( pMem->flags & MEM_Zero );
- assert( pMem->flags&MEM_Blob );
+ assert( (pMem->flags&MEM_Blob)!=0 || MemNullNochng(pMem) );
+ testcase( sqlite3_value_nochange(pMem) );
assert( !sqlite3VdbeMemIsRowSet(pMem) );
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
/* Set nByte to the number of bytes required to store the expanded blob. */
nByte = pMem->n + pMem->u.nZero;
if( nByte<=0 ){
+ if( (pMem->flags & MEM_Blob)==0 ) return SQLITE_OK;
nByte = 1;
}
if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){
@@ -74550,12 +74878,12 @@ SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
}
/*
-** Add MEM_Str to the set of representations for the given Mem. Numbers
-** are converted using sqlite3_snprintf(). Converting a BLOB to a string
-** is a no-op.
+** Add MEM_Str to the set of representations for the given Mem. This
+** routine is only called if pMem is a number of some kind, not a NULL
+** or a BLOB.
**
-** Existing representations MEM_Int and MEM_Real are invalidated if
-** bForce is true but are retained if bForce is false.
+** Existing representations MEM_Int, MEM_Real, or MEM_IntReal are invalidated
+** if bForce is true but are retained if bForce is false.
**
** A MEM_Null value will never be passed to this function. This function is
** used for converting values to text for returning to the user (i.e. via
@@ -74564,13 +74892,12 @@ SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
** user and the latter is an internal programming error.
*/
SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){
- int fg = pMem->flags;
const int nByte = 32;
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
- assert( !(fg&MEM_Zero) );
- assert( !(fg&(MEM_Str|MEM_Blob)) );
- assert( fg&(MEM_Int|MEM_Real) );
+ assert( !(pMem->flags&MEM_Zero) );
+ assert( !(pMem->flags&(MEM_Str|MEM_Blob)) );
+ assert( pMem->flags&(MEM_Int|MEM_Real|MEM_IntReal) );
assert( !sqlite3VdbeMemIsRowSet(pMem) );
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
@@ -74580,23 +74907,12 @@ SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){
return SQLITE_NOMEM_BKPT;
}
- /* For a Real or Integer, use sqlite3_snprintf() to produce the UTF-8
- ** string representation of the value. Then, if the required encoding
- ** is UTF-16le or UTF-16be do a translation.
- **
- ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16.
- */
- if( fg & MEM_Int ){
- sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i);
- }else{
- assert( fg & MEM_Real );
- sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->u.r);
- }
+ vdbeMemRenderNum(nByte, pMem->z, pMem);
assert( pMem->z!=0 );
pMem->n = sqlite3Strlen30NN(pMem->z);
pMem->enc = SQLITE_UTF8;
pMem->flags |= MEM_Str|MEM_Term;
- if( bForce ) pMem->flags &= ~(MEM_Int|MEM_Real);
+ if( bForce ) pMem->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal);
sqlite3VdbeChangeEncoding(pMem, enc);
return SQLITE_OK;
}
@@ -74770,7 +75086,8 @@ SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
flags = pMem->flags;
- if( flags & MEM_Int ){
+ if( flags & (MEM_Int|MEM_IntReal) ){
+ testcase( flags & MEM_IntReal );
return pMem->u.i;
}else if( flags & MEM_Real ){
return doubleToInt64(pMem->u.r);
@@ -74799,7 +75116,8 @@ SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
if( pMem->flags & MEM_Real ){
return pMem->u.r;
- }else if( pMem->flags & MEM_Int ){
+ }else if( pMem->flags & (MEM_Int|MEM_IntReal) ){
+ testcase( pMem->flags & MEM_IntReal );
return (double)pMem->u.i;
}else if( pMem->flags & (MEM_Str|MEM_Blob) ){
return memRealValue(pMem);
@@ -74814,7 +75132,8 @@ SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
** Return the value ifNull if pMem is NULL.
*/
SQLITE_PRIVATE int sqlite3VdbeBooleanValue(Mem *pMem, int ifNull){
- if( pMem->flags & MEM_Int ) return pMem->u.i!=0;
+ testcase( pMem->flags & MEM_IntReal );
+ if( pMem->flags & (MEM_Int|MEM_IntReal) ) return pMem->u.i!=0;
if( pMem->flags & MEM_Null ) return ifNull;
return sqlite3VdbeRealValue(pMem)!=0.0;
}
@@ -74877,17 +75196,21 @@ SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
/* Compare a floating point value to an integer. Return true if the two
** values are the same within the precision of the floating point value.
**
+** This function assumes that i was obtained by assignment from r1.
+**
** For some versions of GCC on 32-bit machines, if you do the more obvious
** comparison of "r1==(double)i" you sometimes get an answer of false even
** though the r1 and (double)i values are bit-for-bit the same.
*/
-static int sqlite3RealSameAsInt(double r1, sqlite3_int64 i){
+SQLITE_PRIVATE int sqlite3RealSameAsInt(double r1, sqlite3_int64 i){
double r2 = (double)i;
- return memcmp(&r1, &r2, sizeof(r1))==0;
+ return r1==0.0
+ || (memcmp(&r1, &r2, sizeof(r1))==0
+ && i >= -2251799813685248LL && i < 2251799813685248LL);
}
/*
-** Convert pMem so that it has types MEM_Real or MEM_Int or both.
+** Convert pMem so that it has type MEM_Real or MEM_Int.
** Invalidate any prior representations.
**
** Every effort is made to force the conversion, even if the input
@@ -74895,25 +75218,26 @@ static int sqlite3RealSameAsInt(double r1, sqlite3_int64 i){
** as much of the string as we can and ignore the rest.
*/
SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
- if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
+ testcase( pMem->flags & MEM_Int );
+ testcase( pMem->flags & MEM_Real );
+ testcase( pMem->flags & MEM_IntReal );
+ testcase( pMem->flags & MEM_Null );
+ if( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null))==0 ){
int rc;
+ sqlite3_int64 ix;
assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
- rc = sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc);
- if( rc==0 ){
+ rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
+ if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1)
+ || sqlite3RealSameAsInt(pMem->u.r, (ix = (i64)pMem->u.r))
+ ){
+ pMem->u.i = ix;
MemSetTypeFlag(pMem, MEM_Int);
}else{
- i64 i = pMem->u.i;
- sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
- if( rc==1 && sqlite3RealSameAsInt(pMem->u.r, i) ){
- pMem->u.i = i;
- MemSetTypeFlag(pMem, MEM_Int);
- }else{
- MemSetTypeFlag(pMem, MEM_Real);
- }
+ MemSetTypeFlag(pMem, MEM_Real);
}
}
- assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
+ assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null))!=0 );
pMem->flags &= ~(MEM_Str|MEM_Blob|MEM_Zero);
return SQLITE_OK;
}
@@ -74956,7 +75280,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemCast(Mem *pMem, u8 aff, u8 encoding){
pMem->flags |= (pMem->flags&MEM_Blob)>>3;
sqlite3ValueApplyAffinity(pMem, SQLITE_AFF_TEXT, encoding);
assert( pMem->flags & MEM_Str || pMem->db->mallocFailed );
- pMem->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
+ pMem->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal|MEM_Blob|MEM_Zero);
break;
}
}
@@ -75140,7 +75464,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){
** dual type, are allowed, as long as the underlying value is the
** same. */
u16 mFlags = pMem->flags & pX->flags & pX->mScopyFlags;
- assert( (mFlags&MEM_Int)==0 || pMem->u.i==pX->u.i );
+ assert( (mFlags&(MEM_Int|MEM_IntReal))==0 || pMem->u.i==pX->u.i );
assert( (mFlags&MEM_Real)==0 || pMem->u.r==pX->u.r );
assert( (mFlags&MEM_Str)==0 || (pMem->n==pX->n && pMem->z==pX->z) );
assert( (mFlags&MEM_Blob)==0 || sqlite3BlobCompare(pMem,pX)==0 );
@@ -75262,7 +75586,6 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
assert( enc!=0 );
if( enc==SQLITE_UTF8 ){
nByte = 0x7fffffff & (int)strlen(z);
- if( nByte>iLimit ) nByte = iLimit+1;
}else{
for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
}
@@ -75274,29 +75597,30 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
** management (one of MEM_Dyn or MEM_Static).
*/
if( xDel==SQLITE_TRANSIENT ){
- int nAlloc = nByte;
+ u32 nAlloc = nByte;
if( flags&MEM_Term ){
nAlloc += (enc==SQLITE_UTF8?1:2);
}
if( nByte>iLimit ){
- return SQLITE_TOOBIG;
+ return sqlite3ErrorToParser(pMem->db, SQLITE_TOOBIG);
}
testcase( nAlloc==0 );
testcase( nAlloc==31 );
testcase( nAlloc==32 );
- if( sqlite3VdbeMemClearAndResize(pMem, MAX(nAlloc,32)) ){
+ if( sqlite3VdbeMemClearAndResize(pMem, (int)MAX(nAlloc,32)) ){
return SQLITE_NOMEM_BKPT;
}
memcpy(pMem->z, z, nAlloc);
- }else if( xDel==SQLITE_DYNAMIC ){
- sqlite3VdbeMemRelease(pMem);
- pMem->zMalloc = pMem->z = (char *)z;
- pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc);
}else{
sqlite3VdbeMemRelease(pMem);
pMem->z = (char *)z;
- pMem->xDel = xDel;
- flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
+ if( xDel==SQLITE_DYNAMIC ){
+ pMem->zMalloc = pMem->z;
+ pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc);
+ }else{
+ pMem->xDel = xDel;
+ flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
+ }
}
pMem->n = nByte;
@@ -75415,7 +75739,7 @@ static SQLITE_NOINLINE const void *valueToText(sqlite3_value* pVal, u8 enc){
assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0
|| pVal->db->mallocFailed );
if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){
- assert( sqlite3VdbeMemConsistentDualRep(pVal) );
+ assert( sqlite3VdbeMemValidStrRep(pVal) );
return pVal->z;
}else{
return 0;
@@ -75438,7 +75762,7 @@ SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
assert( !sqlite3VdbeMemIsRowSet(pVal) );
if( (pVal->flags&(MEM_Str|MEM_Term))==(MEM_Str|MEM_Term) && pVal->enc==enc ){
- assert( sqlite3VdbeMemConsistentDualRep(pVal) );
+ assert( sqlite3VdbeMemValidStrRep(pVal) );
return pVal->z;
}
if( pVal->flags&MEM_Null ){
@@ -75703,7 +76027,12 @@ static int valueFromExpr(
}else{
sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
}
- if( pVal->flags & (MEM_Int|MEM_Real) ) pVal->flags &= ~MEM_Str;
+ assert( (pVal->flags & MEM_IntReal)==0 );
+ if( pVal->flags & (MEM_Int|MEM_IntReal|MEM_Real) ){
+ testcase( pVal->flags & MEM_Int );
+ testcase( pVal->flags & MEM_Real );
+ pVal->flags &= ~MEM_Str;
+ }
if( enc!=SQLITE_UTF8 ){
rc = sqlite3VdbeChangeEncoding(pVal, enc);
}
@@ -75726,7 +76055,7 @@ static int valueFromExpr(
}else if( op==TK_NULL ){
pVal = valueNew(db, pCtx);
if( pVal==0 ) goto no_mem;
- sqlite3VdbeMemNumerify(pVal);
+ sqlite3VdbeMemSetNull(pVal);
}
#ifndef SQLITE_OMIT_BLOB_LITERAL
else if( op==TK_BLOB ){
@@ -76264,9 +76593,11 @@ static int growOpArray(Vdbe *v, int nOp){
** operation (without SQLITE_TEST_REALLOC_STRESS) is to double the current
** size of the op array or add 1KB of space, whichever is smaller. */
#ifdef SQLITE_TEST_REALLOC_STRESS
- int nNew = (v->nOpAlloc>=512 ? v->nOpAlloc*2 : v->nOpAlloc+nOp);
+ sqlite3_int64 nNew = (v->nOpAlloc>=512 ? 2*(sqlite3_int64)v->nOpAlloc
+ : (sqlite3_int64)v->nOpAlloc+nOp);
#else
- int nNew = (v->nOpAlloc ? v->nOpAlloc*2 : (int)(1024/sizeof(Op)));
+ sqlite3_int64 nNew = (v->nOpAlloc ? 2*(sqlite3_int64)v->nOpAlloc
+ : (sqlite3_int64)(1024/sizeof(Op)));
UNUSED_PARAMETER(nOp);
#endif
@@ -76736,6 +77067,7 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
int hasAbort = 0;
int hasFkCounter = 0;
int hasCreateTable = 0;
+ int hasCreateIndex = 0;
int hasInitCoroutine = 0;
Op *pOp;
VdbeOpIter sIter;
@@ -76746,6 +77078,7 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
int opcode = pOp->opcode;
if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename
|| opcode==OP_VDestroy
+ || (opcode==OP_Function0 && pOp->p4.pFunc->funcFlags&SQLITE_FUNC_INTERNAL)
|| ((opcode==OP_Halt || opcode==OP_HaltIfNull)
&& ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort))
){
@@ -76753,6 +77086,14 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
break;
}
if( opcode==OP_CreateBtree && pOp->p3==BTREE_INTKEY ) hasCreateTable = 1;
+ if( mayAbort ){
+ /* hasCreateIndex may also be set for some DELETE statements that use
+ ** OP_Clear. So this routine may end up returning true in the case
+ ** where a "DELETE FROM tbl" has a statement-journal but does not
+ ** require one. This is not so bad - it is an inefficiency, not a bug. */
+ if( opcode==OP_CreateBtree && pOp->p3==BTREE_BLOBKEY ) hasCreateIndex = 1;
+ if( opcode==OP_Clear ) hasCreateIndex = 1;
+ }
if( opcode==OP_InitCoroutine ) hasInitCoroutine = 1;
#ifndef SQLITE_OMIT_FOREIGN_KEY
if( opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1 ){
@@ -76768,7 +77109,8 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
** true for this case to prevent the assert() in the callers frame
** from failing. */
return ( v->db->mallocFailed || hasAbort==mayAbort || hasFkCounter
- || (hasCreateTable && hasInitCoroutine) );
+ || (hasCreateTable && hasInitCoroutine) || hasCreateIndex
+ );
}
#endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */
@@ -77053,7 +77395,7 @@ SQLITE_PRIVATE void sqlite3VdbeScanStatus(
LogEst nEst, /* Estimated number of output rows */
const char *zName /* Name of table or index being scanned */
){
- int nByte = (p->nScan+1) * sizeof(ScanStatus);
+ sqlite3_int64 nByte = (p->nScan+1) * sizeof(ScanStatus);
ScanStatus *aNew;
aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte);
if( aNew ){
@@ -77640,7 +77982,7 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){
Mem *pMem = pOp->p4.pMem;
if( pMem->flags & MEM_Str ){
zP4 = pMem->z;
- }else if( pMem->flags & MEM_Int ){
+ }else if( pMem->flags & (MEM_Int|MEM_IntReal) ){
sqlite3_str_appendf(&x, "%lld", pMem->u.i);
}else if( pMem->flags & MEM_Real ){
sqlite3_str_appendf(&x, "%.16g", pMem->u.r);
@@ -78174,9 +78516,9 @@ SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){
** of a ReusableSpace object by the allocSpace() routine below.
*/
struct ReusableSpace {
- u8 *pSpace; /* Available memory */
- int nFree; /* Bytes of available memory */
- int nNeeded; /* Total bytes that could not be allocated */
+ u8 *pSpace; /* Available memory */
+ sqlite3_int64 nFree; /* Bytes of available memory */
+ sqlite3_int64 nNeeded; /* Total bytes that could not be allocated */
};
/* Try to allocate nByte bytes of 8-byte aligned bulk memory for pBuf
@@ -78196,7 +78538,7 @@ struct ReusableSpace {
static void *allocSpace(
struct ReusableSpace *p, /* Bulk memory available for allocation */
void *pBuf, /* Pointer to a prior allocation */
- int nByte /* Bytes of memory needed */
+ sqlite3_int64 nByte /* Bytes of memory needed */
){
assert( EIGHT_BYTE_ALIGNMENT(p->pSpace) );
if( pBuf==0 ){
@@ -79002,7 +79344,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
}
/* Check for immediate foreign key violations. */
- if( p->rc==SQLITE_OK ){
+ if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
sqlite3VdbeCheckFk(p, 0);
}
@@ -79528,6 +79870,8 @@ SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor **pp, int *piCol){
/*
** Return the serial-type for the value stored in pMem.
+**
+** This routine might convert a large MEM_IntReal value into MEM_Real.
*/
SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format, u32 *pLen){
int flags = pMem->flags;
@@ -79538,11 +79882,13 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format, u32 *pLen){
*pLen = 0;
return 0;
}
- if( flags&MEM_Int ){
+ if( flags&(MEM_Int|MEM_IntReal) ){
/* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
# define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
i64 i = pMem->u.i;
u64 u;
+ testcase( flags & MEM_Int );
+ testcase( flags & MEM_IntReal );
if( i<0 ){
u = ~i;
}else{
@@ -79562,6 +79908,15 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format, u32 *pLen){
if( u<=2147483647 ){ *pLen = 4; return 4; }
if( u<=MAX_6BYTE ){ *pLen = 6; return 5; }
*pLen = 8;
+ if( flags&MEM_IntReal ){
+ /* If the value is IntReal and is going to take up 8 bytes to store
+ ** as an integer, then we might as well make it an 8-byte floating
+ ** point value */
+ pMem->u.r = (double)pMem->u.i;
+ pMem->flags &= ~MEM_IntReal;
+ pMem->flags |= MEM_Real;
+ return 7;
+ }
return 6;
}
if( flags&MEM_Real ){
@@ -79735,7 +80090,7 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, Mem *pMem, u32 serial_type){
** routine so that in most cases the overhead of moving the stack pointer
** is avoided.
*/
-static u32 SQLITE_NOINLINE serialGet(
+static u32 serialGet(
const unsigned char *buf, /* Buffer to deserialize from */
u32 serial_type, /* Serial type to deserialize */
Mem *pMem /* Memory cell to write value into */
@@ -79767,7 +80122,7 @@ static u32 SQLITE_NOINLINE serialGet(
assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 );
swapMixedEndianFloat(x);
memcpy(&pMem->u.r, &x, sizeof(x));
- pMem->flags = sqlite3IsNaN(pMem->u.r) ? MEM_Null : MEM_Real;
+ pMem->flags = IsNaN(x) ? MEM_Null : MEM_Real;
}
return 8;
}
@@ -80217,8 +80572,13 @@ SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const C
/* At least one of the two values is a number
*/
- if( combined_flags&(MEM_Int|MEM_Real) ){
- if( (f1 & f2 & MEM_Int)!=0 ){
+ if( combined_flags&(MEM_Int|MEM_Real|MEM_IntReal) ){
+ testcase( combined_flags & MEM_Int );
+ testcase( combined_flags & MEM_Real );
+ testcase( combined_flags & MEM_IntReal );
+ if( (f1 & f2 & (MEM_Int|MEM_IntReal))!=0 ){
+ testcase( f1 & f2 & MEM_Int );
+ testcase( f1 & f2 & MEM_IntReal );
if( pMem1->u.i < pMem2->u.i ) return -1;
if( pMem1->u.i > pMem2->u.i ) return +1;
return 0;
@@ -80228,15 +80588,23 @@ SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const C
if( pMem1->u.r > pMem2->u.r ) return +1;
return 0;
}
- if( (f1&MEM_Int)!=0 ){
+ if( (f1&(MEM_Int|MEM_IntReal))!=0 ){
+ testcase( f1 & MEM_Int );
+ testcase( f1 & MEM_IntReal );
if( (f2&MEM_Real)!=0 ){
return sqlite3IntFloatCompare(pMem1->u.i, pMem2->u.r);
+ }else if( (f2&(MEM_Int|MEM_IntReal))!=0 ){
+ if( pMem1->u.i < pMem2->u.i ) return -1;
+ if( pMem1->u.i > pMem2->u.i ) return +1;
+ return 0;
}else{
return -1;
}
}
if( (f1&MEM_Real)!=0 ){
- if( (f2&MEM_Int)!=0 ){
+ if( (f2&(MEM_Int|MEM_IntReal))!=0 ){
+ testcase( f2 & MEM_Int );
+ testcase( f2 & MEM_IntReal );
return -sqlite3IntFloatCompare(pMem2->u.i, pMem1->u.r);
}else{
return -1;
@@ -80385,7 +80753,9 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip(
u32 serial_type;
/* RHS is an integer */
- if( pRhs->flags & MEM_Int ){
+ if( pRhs->flags & (MEM_Int|MEM_IntReal) ){
+ testcase( pRhs->flags & MEM_Int );
+ testcase( pRhs->flags & MEM_IntReal );
serial_type = aKey1[idx1];
testcase( serial_type==12 );
if( serial_type>=10 ){
@@ -80730,7 +81100,9 @@ SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){
testcase( flags & MEM_Real );
testcase( flags & MEM_Null );
testcase( flags & MEM_Blob );
- if( (flags & (MEM_Real|MEM_Null|MEM_Blob))==0 && p->pKeyInfo->aColl[0]==0 ){
+ if( (flags & (MEM_Real|MEM_IntReal|MEM_Null|MEM_Blob))==0
+ && p->pKeyInfo->aColl[0]==0
+ ){
assert( flags & MEM_Str );
return vdbeRecordCompareString;
}
@@ -81153,7 +81525,7 @@ static SQLITE_NOINLINE void invokeProfileCallback(sqlite3 *db, Vdbe *p){
assert( p->zSql!=0 );
sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
iElapse = (iNow - p->startTime)*1000000;
-#ifndef SQLITE_OMIT_DEPRECATED
+#ifndef SQLITE_OMIT_DEPRECATED
if( db->xProfile ){
db->xProfile(db->pProfileArg, p->zSql, iElapse);
}
@@ -81320,39 +81692,86 @@ SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){
*/
SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){
static const u8 aType[] = {
- SQLITE_BLOB, /* 0x00 */
- SQLITE_NULL, /* 0x01 */
- SQLITE_TEXT, /* 0x02 */
- SQLITE_NULL, /* 0x03 */
- SQLITE_INTEGER, /* 0x04 */
- SQLITE_NULL, /* 0x05 */
- SQLITE_INTEGER, /* 0x06 */
- SQLITE_NULL, /* 0x07 */
- SQLITE_FLOAT, /* 0x08 */
- SQLITE_NULL, /* 0x09 */
- SQLITE_FLOAT, /* 0x0a */
- SQLITE_NULL, /* 0x0b */
- SQLITE_INTEGER, /* 0x0c */
- SQLITE_NULL, /* 0x0d */
- SQLITE_INTEGER, /* 0x0e */
- SQLITE_NULL, /* 0x0f */
- SQLITE_BLOB, /* 0x10 */
- SQLITE_NULL, /* 0x11 */
- SQLITE_TEXT, /* 0x12 */
- SQLITE_NULL, /* 0x13 */
- SQLITE_INTEGER, /* 0x14 */
- SQLITE_NULL, /* 0x15 */
- SQLITE_INTEGER, /* 0x16 */
- SQLITE_NULL, /* 0x17 */
- SQLITE_FLOAT, /* 0x18 */
- SQLITE_NULL, /* 0x19 */
- SQLITE_FLOAT, /* 0x1a */
- SQLITE_NULL, /* 0x1b */
- SQLITE_INTEGER, /* 0x1c */
- SQLITE_NULL, /* 0x1d */
- SQLITE_INTEGER, /* 0x1e */
- SQLITE_NULL, /* 0x1f */
+ SQLITE_BLOB, /* 0x00 (not possible) */
+ SQLITE_NULL, /* 0x01 NULL */
+ SQLITE_TEXT, /* 0x02 TEXT */
+ SQLITE_NULL, /* 0x03 (not possible) */
+ SQLITE_INTEGER, /* 0x04 INTEGER */
+ SQLITE_NULL, /* 0x05 (not possible) */
+ SQLITE_INTEGER, /* 0x06 INTEGER + TEXT */
+ SQLITE_NULL, /* 0x07 (not possible) */
+ SQLITE_FLOAT, /* 0x08 FLOAT */
+ SQLITE_NULL, /* 0x09 (not possible) */
+ SQLITE_FLOAT, /* 0x0a FLOAT + TEXT */
+ SQLITE_NULL, /* 0x0b (not possible) */
+ SQLITE_INTEGER, /* 0x0c (not possible) */
+ SQLITE_NULL, /* 0x0d (not possible) */
+ SQLITE_INTEGER, /* 0x0e (not possible) */
+ SQLITE_NULL, /* 0x0f (not possible) */
+ SQLITE_BLOB, /* 0x10 BLOB */
+ SQLITE_NULL, /* 0x11 (not possible) */
+ SQLITE_TEXT, /* 0x12 (not possible) */
+ SQLITE_NULL, /* 0x13 (not possible) */
+ SQLITE_INTEGER, /* 0x14 INTEGER + BLOB */
+ SQLITE_NULL, /* 0x15 (not possible) */
+ SQLITE_INTEGER, /* 0x16 (not possible) */
+ SQLITE_NULL, /* 0x17 (not possible) */
+ SQLITE_FLOAT, /* 0x18 FLOAT + BLOB */
+ SQLITE_NULL, /* 0x19 (not possible) */
+ SQLITE_FLOAT, /* 0x1a (not possible) */
+ SQLITE_NULL, /* 0x1b (not possible) */
+ SQLITE_INTEGER, /* 0x1c (not possible) */
+ SQLITE_NULL, /* 0x1d (not possible) */
+ SQLITE_INTEGER, /* 0x1e (not possible) */
+ SQLITE_NULL, /* 0x1f (not possible) */
+ SQLITE_FLOAT, /* 0x20 INTREAL */
+ SQLITE_NULL, /* 0x21 (not possible) */
+ SQLITE_TEXT, /* 0x22 INTREAL + TEXT */
+ SQLITE_NULL, /* 0x23 (not possible) */
+ SQLITE_FLOAT, /* 0x24 (not possible) */
+ SQLITE_NULL, /* 0x25 (not possible) */
+ SQLITE_FLOAT, /* 0x26 (not possible) */
+ SQLITE_NULL, /* 0x27 (not possible) */
+ SQLITE_FLOAT, /* 0x28 (not possible) */
+ SQLITE_NULL, /* 0x29 (not possible) */
+ SQLITE_FLOAT, /* 0x2a (not possible) */
+ SQLITE_NULL, /* 0x2b (not possible) */
+ SQLITE_FLOAT, /* 0x2c (not possible) */
+ SQLITE_NULL, /* 0x2d (not possible) */
+ SQLITE_FLOAT, /* 0x2e (not possible) */
+ SQLITE_NULL, /* 0x2f (not possible) */
+ SQLITE_BLOB, /* 0x30 (not possible) */
+ SQLITE_NULL, /* 0x31 (not possible) */
+ SQLITE_TEXT, /* 0x32 (not possible) */
+ SQLITE_NULL, /* 0x33 (not possible) */
+ SQLITE_FLOAT, /* 0x34 (not possible) */
+ SQLITE_NULL, /* 0x35 (not possible) */
+ SQLITE_FLOAT, /* 0x36 (not possible) */
+ SQLITE_NULL, /* 0x37 (not possible) */
+ SQLITE_FLOAT, /* 0x38 (not possible) */
+ SQLITE_NULL, /* 0x39 (not possible) */
+ SQLITE_FLOAT, /* 0x3a (not possible) */
+ SQLITE_NULL, /* 0x3b (not possible) */
+ SQLITE_FLOAT, /* 0x3c (not possible) */
+ SQLITE_NULL, /* 0x3d (not possible) */
+ SQLITE_FLOAT, /* 0x3e (not possible) */
+ SQLITE_NULL, /* 0x3f (not possible) */
};
+#ifdef SQLITE_DEBUG
+ {
+ int eType = SQLITE_BLOB;
+ if( pVal->flags & MEM_Null ){
+ eType = SQLITE_NULL;
+ }else if( pVal->flags & (MEM_Real|MEM_IntReal) ){
+ eType = SQLITE_FLOAT;
+ }else if( pVal->flags & MEM_Int ){
+ eType = SQLITE_INTEGER;
+ }else if( pVal->flags & MEM_Str ){
+ eType = SQLITE_TEXT;
+ }
+ assert( eType == aType[pVal->flags&MEM_AffMask] );
+ }
+#endif
return aType[pVal->flags&MEM_AffMask];
}
@@ -81361,6 +81780,11 @@ SQLITE_API int sqlite3_value_nochange(sqlite3_value *pVal){
return (pVal->flags&(MEM_Null|MEM_Zero))==(MEM_Null|MEM_Zero);
}
+/* Return true if a parameter value originated from an sqlite3_bind() */
+SQLITE_API int sqlite3_value_frombind(sqlite3_value *pVal){
+ return (pVal->flags&MEM_FromBind)!=0;
+}
+
/* Make a copy of an sqlite3_value object
*/
SQLITE_API sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){
@@ -81597,6 +82021,21 @@ SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){
sqlite3OomFault(pCtx->pOut->db);
}
+#ifndef SQLITE_UNTESTABLE
+/* Force the INT64 value currently stored as the result to be
+** a MEM_IntReal value. See the SQLITE_TESTCTRL_RESULT_INTREAL
+** test-control.
+*/
+SQLITE_PRIVATE void sqlite3ResultIntReal(sqlite3_context *pCtx){
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ if( pCtx->pOut->flags & MEM_Int ){
+ pCtx->pOut->flags &= ~MEM_Int;
+ pCtx->pOut->flags |= MEM_IntReal;
+ }
+}
+#endif
+
+
/*
** This function is called after a transaction has been committed. It
** invokes callbacks registered with sqlite3_wal_hook() as required.
@@ -82206,10 +82645,10 @@ SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
** or a constant) then useTypes 2, 3, and 4 return NULL.
*/
static const void *columnName(
- sqlite3_stmt *pStmt,
- int N,
- const void *(*xFunc)(Mem*),
- int useType
+ sqlite3_stmt *pStmt, /* The statement */
+ int N, /* Which column to get the name for */
+ int useUtf16, /* True to return the name as UTF16 */
+ int useType /* What type of name */
){
const void *ret;
Vdbe *p;
@@ -82230,8 +82669,15 @@ static const void *columnName(
N += useType*n;
sqlite3_mutex_enter(db->mutex);
assert( db->mallocFailed==0 );
- ret = xFunc(&p->aColName[N]);
- /* A malloc may have failed inside of the xFunc() call. If this
+#ifndef SQLITE_OMIT_UTF16
+ if( useUtf16 ){
+ ret = sqlite3_value_text16((sqlite3_value*)&p->aColName[N]);
+ }else
+#endif
+ {
+ ret = sqlite3_value_text((sqlite3_value*)&p->aColName[N]);
+ }
+ /* A malloc may have failed inside of the _text() call. If this
** is the case, clear the mallocFailed flag and return NULL.
*/
if( db->mallocFailed ){
@@ -82248,13 +82694,11 @@ static const void *columnName(
** statement pStmt.
*/
SQLITE_API const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
+ return columnName(pStmt, N, 0, COLNAME_NAME);
}
#ifndef SQLITE_OMIT_UTF16
SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
+ return columnName(pStmt, N, 1, COLNAME_NAME);
}
#endif
@@ -82273,13 +82717,11 @@ SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
** of the result set of SQL statement pStmt.
*/
SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
+ return columnName(pStmt, N, 0, COLNAME_DECLTYPE);
}
#ifndef SQLITE_OMIT_UTF16
SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
+ return columnName(pStmt, N, 1, COLNAME_DECLTYPE);
}
#endif /* SQLITE_OMIT_UTF16 */
#endif /* SQLITE_OMIT_DECLTYPE */
@@ -82291,13 +82733,11 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
** anything else which is not an unambiguous reference to a database column.
*/
SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
+ return columnName(pStmt, N, 0, COLNAME_DATABASE);
}
#ifndef SQLITE_OMIT_UTF16
SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
+ return columnName(pStmt, N, 1, COLNAME_DATABASE);
}
#endif /* SQLITE_OMIT_UTF16 */
@@ -82307,13 +82747,11 @@ SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N
** anything else which is not an unambiguous reference to a database column.
*/
SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
+ return columnName(pStmt, N, 0, COLNAME_TABLE);
}
#ifndef SQLITE_OMIT_UTF16
SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
+ return columnName(pStmt, N, 1, COLNAME_TABLE);
}
#endif /* SQLITE_OMIT_UTF16 */
@@ -82323,13 +82761,11 @@ SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
** anything else which is not an unambiguous reference to a database column.
*/
SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
+ return columnName(pStmt, N, 0, COLNAME_COLUMN);
}
#ifndef SQLITE_OMIT_UTF16
SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
- return columnName(
- pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
+ return columnName(pStmt, N, 1, COLNAME_COLUMN);
}
#endif /* SQLITE_OMIT_UTF16 */
#endif /* SQLITE_ENABLE_COLUMN_METADATA */
@@ -82698,6 +83134,14 @@ SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
}
/*
+** Return 1 if the statement is an EXPLAIN and return 2 if the
+** statement is an EXPLAIN QUERY PLAN
+*/
+SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt){
+ return pStmt ? ((Vdbe*)pStmt)->explain : 0;
+}
+
+/*
** Return true if the prepared statement is in need of being reset.
*/
SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
@@ -82878,7 +83322,9 @@ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppVa
}else if( iIdx>=p->pUnpacked->nField ){
*ppValue = (sqlite3_value *)columnNullValue();
}else if( p->pTab->aCol[iIdx].affinity==SQLITE_AFF_REAL ){
- if( pMem->flags & MEM_Int ){
+ if( pMem->flags & (MEM_Int|MEM_IntReal) ){
+ testcase( pMem->flags & MEM_Int );
+ testcase( pMem->flags & MEM_IntReal );
sqlite3VdbeMemRealify(pMem);
}
}
@@ -83197,7 +83643,7 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
pVar = &p->aVar[idx-1];
if( pVar->flags & MEM_Null ){
sqlite3_str_append(&out, "NULL", 4);
- }else if( pVar->flags & MEM_Int ){
+ }else if( pVar->flags & (MEM_Int|MEM_IntReal) ){
sqlite3_str_appendf(&out, "%lld", pVar->u.i);
}else if( pVar->flags & MEM_Real ){
sqlite3_str_appendf(&out, "%!.15g", pVar->u.r);
@@ -83386,12 +83832,20 @@ SQLITE_API int sqlite3_found_count = 0;
** feature is used for test suite validation only and does not appear an
** production builds.
**
-** M is an integer between 2 and 4. 2 indicates a ordinary two-way
-** branch (I=0 means fall through and I=1 means taken). 3 indicates
-** a 3-way branch where the third way is when one of the operands is
-** NULL. 4 indicates the OP_Jump instruction which has three destinations
-** depending on whether the first operand is less than, equal to, or greater
-** than the second.
+** M is the type of branch. I is the direction taken for this instance of
+** the branch.
+**
+** M: 2 - two-way branch (I=0: fall-thru 1: jump )
+** 3 - two-way + NULL (I=0: fall-thru 1: jump 2: NULL )
+** 4 - OP_Jump (I=0: jump p1 1: jump p2 2: jump p3)
+**
+** In other words, if M is 2, then I is either 0 (for fall-through) or
+** 1 (for when the branch is taken). If M is 3, the I is 0 for an
+** ordinary fall-through, I is 1 if the branch was taken, and I is 2
+** if the result of comparison is NULL. For M=3, I=2 the jump may or
+** may not be taken, depending on the SQLITE_JUMPIFNULL flags in p5.
+** When M is 4, that means that an OP_Jump is being run. I is 0, 1, or 2
+** depending on if the operands are less than, equal, or greater than.
**
** iSrcLine is the source code line (from the __LINE__ macro) that
** generated the VDBE instruction combined with flag bits. The source
@@ -83402,9 +83856,9 @@ SQLITE_API int sqlite3_found_count = 0;
** alternate branch are never taken. If a branch is never taken then
** flags should be 0x06 since only the fall-through approach is allowed.
**
-** Bit 0x04 of the flags indicates an OP_Jump opcode that is only
+** Bit 0x08 of the flags indicates an OP_Jump opcode that is only
** interested in equal or not-equal. In other words, I==0 and I==2
-** should be treated the same.
+** should be treated as equivalent
**
** Since only a line number is retained, not the filename, this macro
** only works for amalgamation builds. But that is ok, since these macros
@@ -83428,6 +83882,18 @@ SQLITE_API int sqlite3_found_count = 0;
mNever = iSrcLine >> 24;
assert( (I & mNever)==0 );
if( sqlite3GlobalConfig.xVdbeBranch==0 ) return; /*NO_TEST*/
+ /* Invoke the branch coverage callback with three arguments:
+ ** iSrcLine - the line number of the VdbeCoverage() macro, with
+ ** flags removed.
+ ** I - Mask of bits 0x07 indicating which cases are are
+ ** fulfilled by this instance of the jump. 0x01 means
+ ** fall-thru, 0x02 means taken, 0x04 means NULL. Any
+ ** impossible cases (ex: if the comparison is never NULL)
+ ** are filled in automatically so that the coverage
+ ** measurement logic does not flag those impossible cases
+ ** as missed coverage.
+ ** M - Type of jump. Same as M argument above
+ */
I |= mNever;
if( M==2 ) I |= 0x04;
if( M==4 ){
@@ -83440,14 +83906,6 @@ SQLITE_API int sqlite3_found_count = 0;
#endif
/*
-** Convert the given register into a string if it isn't one
-** already. Return non-zero if a malloc() fails.
-*/
-#define Stringify(P, enc) \
- if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc,0)) \
- { goto no_mem; }
-
-/*
** An ephemeral string value (signified by the MEM_Ephem flag) contains
** a pointer to a dynamically allocated string where some other entity
** is responsible for deallocating that string. Because the register
@@ -83508,7 +83966,7 @@ static VdbeCursor *allocateCursor(
** is clear. Otherwise, if this is an ephemeral cursor created by
** OP_OpenDup, the cursor will not be closed and will still be part
** of a BtShared.pCursor list. */
- p->apCsr[iCur]->isEphemeral = 0;
+ if( p->apCsr[iCur]->pBtx==0 ) p->apCsr[iCur]->isEphemeral = 0;
sqlite3VdbeFreeCursor(p, p->apCsr[iCur]);
p->apCsr[iCur] = 0;
}
@@ -83529,6 +83987,21 @@ static VdbeCursor *allocateCursor(
}
/*
+** The string in pRec is known to look like an integer and to have a
+** floating point value of rValue. Return true and set *piValue to the
+** integer value if the string is in range to be an integer. Otherwise,
+** return false.
+*/
+static int alsoAnInt(Mem *pRec, double rValue, i64 *piValue){
+ i64 iValue = (double)rValue;
+ if( sqlite3RealSameAsInt(rValue,iValue) ){
+ *piValue = iValue;
+ return 1;
+ }
+ return 0==sqlite3Atoi64(pRec->z, piValue, pRec->n, pRec->enc);
+}
+
+/*
** Try to convert a value into a numeric representation if we can
** do so without loss of information. In other words, if the string
** looks like a number, convert it into a number. If it does not
@@ -83545,12 +84018,12 @@ static VdbeCursor *allocateCursor(
*/
static void applyNumericAffinity(Mem *pRec, int bTryForInt){
double rValue;
- i64 iValue;
u8 enc = pRec->enc;
- assert( (pRec->flags & (MEM_Str|MEM_Int|MEM_Real))==MEM_Str );
- if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
- if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
- pRec->u.i = iValue;
+ int rc;
+ assert( (pRec->flags & (MEM_Str|MEM_Int|MEM_Real|MEM_IntReal))==MEM_Str );
+ rc = sqlite3AtoF(pRec->z, &rValue, pRec->n, enc);
+ if( rc<=0 ) return;
+ if( rc==1 && alsoAnInt(pRec, rValue, &pRec->u.i) ){
pRec->flags |= MEM_Int;
}else{
pRec->u.r = rValue;
@@ -83604,11 +84077,14 @@ static void applyAffinity(
** there is already a string rep, but it is pointless to waste those
** CPU cycles. */
if( 0==(pRec->flags&MEM_Str) ){ /*OPTIMIZATION-IF-FALSE*/
- if( (pRec->flags&(MEM_Real|MEM_Int)) ){
+ if( (pRec->flags&(MEM_Real|MEM_Int|MEM_IntReal)) ){
+ testcase( pRec->flags & MEM_Int );
+ testcase( pRec->flags & MEM_Real );
+ testcase( pRec->flags & MEM_IntReal );
sqlite3VdbeMemStringify(pRec, enc, 1);
}
}
- pRec->flags &= ~(MEM_Real|MEM_Int);
+ pRec->flags &= ~(MEM_Real|MEM_Int|MEM_IntReal);
}
}
@@ -83647,13 +84123,21 @@ SQLITE_PRIVATE void sqlite3ValueApplyAffinity(
** accordingly.
*/
static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){
- assert( (pMem->flags & (MEM_Int|MEM_Real))==0 );
+ int rc;
+ sqlite3_int64 ix;
+ assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal))==0 );
assert( (pMem->flags & (MEM_Str|MEM_Blob))!=0 );
ExpandBlob(pMem);
- if( sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc)==0 ){
- return 0;
- }
- if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==0 ){
+ rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
+ if( rc<=0 ){
+ if( rc==0 && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1 ){
+ pMem->u.i = ix;
+ return MEM_Int;
+ }else{
+ return MEM_Real;
+ }
+ }else if( rc==1 && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)==0 ){
+ pMem->u.i = ix;
return MEM_Int;
}
return MEM_Real;
@@ -83667,10 +84151,15 @@ static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){
** But it does set pMem->u.r and pMem->u.i appropriately.
*/
static u16 numericType(Mem *pMem){
- if( pMem->flags & (MEM_Int|MEM_Real) ){
- return pMem->flags & (MEM_Int|MEM_Real);
+ if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal) ){
+ testcase( pMem->flags & MEM_Int );
+ testcase( pMem->flags & MEM_Real );
+ testcase( pMem->flags & MEM_IntReal );
+ return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal);
}
if( pMem->flags & (MEM_Str|MEM_Blob) ){
+ testcase( pMem->flags & MEM_Str );
+ testcase( pMem->flags & MEM_Blob );
return computeNumericType(pMem);
}
return 0;
@@ -83766,6 +84255,8 @@ static void memTracePrint(Mem *p){
printf(p->flags & MEM_Zero ? " NULL-nochng" : " NULL");
}else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
printf(" si:%lld", p->u.i);
+ }else if( (p->flags & (MEM_IntReal))!=0 ){
+ printf(" ir:%lld", p->u.i);
}else if( p->flags & MEM_Int ){
printf(" i:%lld", p->u.i);
#ifndef SQLITE_OMIT_FLOATING_POINT
@@ -83975,6 +84466,15 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
assert( p->magic==VDBE_MAGIC_RUN ); /* sqlite3_step() verifies this */
sqlite3VdbeEnter(p);
+#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
+ if( db->xProgress ){
+ u32 iPrior = p->aCounter[SQLITE_STMTSTATUS_VM_STEP];
+ assert( 0 < db->nProgressOps );
+ nProgressLimit = db->nProgressOps - (iPrior % db->nProgressOps);
+ }else{
+ nProgressLimit = 0xffffffff;
+ }
+#endif
if( p->rc==SQLITE_NOMEM ){
/* This happens if a malloc() inside a call to sqlite3_column_text() or
** sqlite3_column_text16() failed. */
@@ -83988,15 +84488,6 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
db->busyHandler.nBusy = 0;
if( db->u1.isInterrupted ) goto abort_due_to_interrupt;
sqlite3VdbeIOTraceSql(p);
-#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
- if( db->xProgress ){
- u32 iPrior = p->aCounter[SQLITE_STMTSTATUS_VM_STEP];
- assert( 0 < db->nProgressOps );
- nProgressLimit = db->nProgressOps - (iPrior % db->nProgressOps);
- }else{
- nProgressLimit = 0xffffffff;
- }
-#endif
#ifdef SQLITE_DEBUG
sqlite3BeginBenignMalloc();
if( p->pc==0
@@ -84172,10 +84663,11 @@ check_for_interrupt:
** If the progress callback returns non-zero, exit the virtual machine with
** a return code SQLITE_ABORT.
*/
- if( nVmStep>=nProgressLimit && db->xProgress!=0 ){
+ while( nVmStep>=nProgressLimit && db->xProgress!=0 ){
assert( db->nProgressOps!=0 );
- nProgressLimit = nVmStep + db->nProgressOps - (nVmStep%db->nProgressOps);
+ nProgressLimit += db->nProgressOps;
if( db->xProgress(db->pProgressArg) ){
+ nProgressLimit = 0xffffffff;
rc = SQLITE_INTERRUPT;
goto abort_due_to_error;
}
@@ -84454,6 +84946,7 @@ case OP_String8: { /* same as TK_STRING, out2 */
if( encoding!=SQLITE_UTF8 ){
rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC);
assert( rc==SQLITE_OK || rc==SQLITE_TOOBIG );
+ if( rc ) goto too_big;
if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem;
assert( pOut->szMalloc>0 && pOut->zMalloc==pOut->z );
assert( VdbeMemDynamic(pOut)==0 );
@@ -84466,7 +84959,6 @@ case OP_String8: { /* same as TK_STRING, out2 */
pOp->p4.z = pOut->z;
pOp->p1 = pOut->n;
}
- testcase( rc==SQLITE_TOOBIG );
#endif
if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
goto too_big;
@@ -84588,7 +85080,10 @@ case OP_Variable: { /* out2 */
goto too_big;
}
pOut = &aMem[pOp->p2];
- sqlite3VdbeMemShallowCopy(pOut, pVar, MEM_Static);
+ if( VdbeMemDynamic(pOut) ) sqlite3VdbeMemSetNull(pOut);
+ memcpy(pOut, pVar, MEMCELLSIZE);
+ pOut->flags &= ~(MEM_Dyn|MEM_Ephem);
+ pOut->flags |= MEM_Static|MEM_FromBind;
UPDATE_MAX_BLOBSIZE(pOut);
break;
}
@@ -84721,18 +85216,6 @@ case OP_ResultRow: {
assert( pOp->p1>0 );
assert( pOp->p1+pOp->p2<=(p->nMem+1 - p->nCursor)+1 );
-#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
- /* Run the progress counter just before returning.
- */
- if( db->xProgress!=0
- && nVmStep>=nProgressLimit
- && db->xProgress(db->pProgressArg)!=0
- ){
- rc = SQLITE_INTERRUPT;
- goto abort_due_to_error;
- }
-#endif
-
/* If this statement has violated immediate foreign key constraints, do
** not return the number of rows modified. And do not RELEASE the statement
** transaction. It needs to be rolled back. */
@@ -84804,33 +85287,57 @@ case OP_ResultRow: {
** to avoid a memcpy().
*/
case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */
- i64 nByte;
+ i64 nByte; /* Total size of the output string or blob */
+ u16 flags1; /* Initial flags for P1 */
+ u16 flags2; /* Initial flags for P2 */
pIn1 = &aMem[pOp->p1];
pIn2 = &aMem[pOp->p2];
pOut = &aMem[pOp->p3];
+ testcase( pIn1==pIn2 );
+ testcase( pOut==pIn2 );
assert( pIn1!=pOut );
- if( (pIn1->flags | pIn2->flags) & MEM_Null ){
+ flags1 = pIn1->flags;
+ testcase( flags1 & MEM_Null );
+ testcase( pIn2->flags & MEM_Null );
+ if( (flags1 | pIn2->flags) & MEM_Null ){
sqlite3VdbeMemSetNull(pOut);
break;
}
- if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem;
- Stringify(pIn1, encoding);
- Stringify(pIn2, encoding);
+ if( (flags1 & (MEM_Str|MEM_Blob))==0 ){
+ if( sqlite3VdbeMemStringify(pIn1,encoding,0) ) goto no_mem;
+ flags1 = pIn1->flags & ~MEM_Str;
+ }else if( (flags1 & MEM_Zero)!=0 ){
+ if( sqlite3VdbeMemExpandBlob(pIn1) ) goto no_mem;
+ flags1 = pIn1->flags & ~MEM_Str;
+ }
+ flags2 = pIn2->flags;
+ if( (flags2 & (MEM_Str|MEM_Blob))==0 ){
+ if( sqlite3VdbeMemStringify(pIn2,encoding,0) ) goto no_mem;
+ flags2 = pIn2->flags & ~MEM_Str;
+ }else if( (flags2 & MEM_Zero)!=0 ){
+ if( sqlite3VdbeMemExpandBlob(pIn2) ) goto no_mem;
+ flags2 = pIn2->flags & ~MEM_Str;
+ }
nByte = pIn1->n + pIn2->n;
if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
goto too_big;
}
- if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){
+ if( sqlite3VdbeMemGrow(pOut, (int)nByte+3, pOut==pIn2) ){
goto no_mem;
}
MemSetTypeFlag(pOut, MEM_Str);
if( pOut!=pIn2 ){
memcpy(pOut->z, pIn2->z, pIn2->n);
+ assert( (pIn2->flags & MEM_Dyn) == (flags2 & MEM_Dyn) );
+ pIn2->flags = flags2;
}
memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
+ assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) );
+ pIn1->flags = flags1;
pOut->z[nByte]=0;
pOut->z[nByte+1] = 0;
+ pOut->z[nByte+2] = 0;
pOut->flags |= MEM_Term;
pOut->n = (int)nByte;
pOut->enc = encoding;
@@ -84881,7 +85388,6 @@ case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */
case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */
case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */
case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */
- char bIntint; /* Started out as two integer operands */
u16 flags; /* Combined MEM_* flags from both inputs */
u16 type1; /* Numeric type of left operand */
u16 type2; /* Numeric type of right operand */
@@ -84899,7 +85405,6 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */
if( (type1 & type2 & MEM_Int)!=0 ){
iA = pIn1->u.i;
iB = pIn2->u.i;
- bIntint = 1;
switch( pOp->opcode ){
case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break;
case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break;
@@ -84922,7 +85427,6 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */
}else if( (flags & MEM_Null)!=0 ){
goto arithmetic_result_is_null;
}else{
- bIntint = 0;
fp_math:
rA = sqlite3VdbeRealValue(pIn1);
rB = sqlite3VdbeRealValue(pIn2);
@@ -84954,9 +85458,6 @@ fp_math:
}
pOut->u.r = rB;
MemSetTypeFlag(pOut, MEM_Real);
- if( ((type1|type2)&MEM_Real)==0 && !bIntint ){
- sqlite3VdbeIntegerAffinity(pOut);
- }
#endif
}
break;
@@ -85098,8 +85599,8 @@ case OP_MustBeInt: { /* jump, in1 */
pIn1 = &aMem[pOp->p1];
if( (pIn1->flags & MEM_Int)==0 ){
applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
- VdbeBranchTaken((pIn1->flags&MEM_Int)==0, 2);
if( (pIn1->flags & MEM_Int)==0 ){
+ VdbeBranchTaken(1, 2);
if( pOp->p2==0 ){
rc = SQLITE_MISMATCH;
goto abort_due_to_error;
@@ -85108,6 +85609,7 @@ case OP_MustBeInt: { /* jump, in1 */
}
}
}
+ VdbeBranchTaken(0, 2);
MemSetTypeFlag(pIn1, MEM_Int);
break;
}
@@ -85124,7 +85626,9 @@ case OP_MustBeInt: { /* jump, in1 */
*/
case OP_RealAffinity: { /* in1 */
pIn1 = &aMem[pOp->p1];
- if( pIn1->flags & MEM_Int ){
+ if( pIn1->flags & (MEM_Int|MEM_IntReal) ){
+ testcase( pIn1->flags & MEM_Int );
+ testcase( pIn1->flags & MEM_IntReal );
sqlite3VdbeMemRealify(pIn1);
}
break;
@@ -85282,7 +85786,6 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
** OP_Eq or OP_Ne) then take the jump or not depending on whether
** or not both operands are null.
*/
- assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne );
assert( (flags1 & MEM_Cleared)==0 );
assert( (pOp->p5 & SQLITE_JUMPIFNULL)==0 || CORRUPT_DB );
testcase( (pOp->p5 & SQLITE_JUMPIFNULL)!=0 );
@@ -85291,7 +85794,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
){
res = 0; /* Operands are equal */
}else{
- res = 1; /* Operands are not equal */
+ res = ((flags3 & MEM_Null) ? -1 : +1); /* Operands are not equal */
}
}else{
/* SQLITE_NULLEQ is clear and at least one operand is NULL,
@@ -85317,7 +85820,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
affinity = pOp->p5 & SQLITE_AFF_MASK;
if( affinity>=SQLITE_AFF_NUMERIC ){
if( (flags1 | flags3)&MEM_Str ){
- if( (flags1 & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){
+ if( (flags1 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){
applyNumericAffinity(pIn1,0);
assert( flags3==pIn3->flags );
/* testcase( flags3!=pIn3->flags );
@@ -85327,7 +85830,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
** in case our analysis is incorrect, so it is left in. */
flags3 = pIn3->flags;
}
- if( (flags3 & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){
+ if( (flags3 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){
applyNumericAffinity(pIn3,0);
}
}
@@ -85340,17 +85843,19 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
goto compare_op;
}
}else if( affinity==SQLITE_AFF_TEXT ){
- if( (flags1 & MEM_Str)==0 && (flags1 & (MEM_Int|MEM_Real))!=0 ){
+ if( (flags1 & MEM_Str)==0 && (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
testcase( pIn1->flags & MEM_Int );
testcase( pIn1->flags & MEM_Real );
+ testcase( pIn1->flags & MEM_IntReal );
sqlite3VdbeMemStringify(pIn1, encoding, 1);
testcase( (flags1&MEM_Dyn) != (pIn1->flags&MEM_Dyn) );
flags1 = (pIn1->flags & ~MEM_TypeMask) | (flags1 & MEM_TypeMask);
assert( pIn1!=pIn3 );
}
- if( (flags3 & MEM_Str)==0 && (flags3 & (MEM_Int|MEM_Real))!=0 ){
+ if( (flags3 & MEM_Str)==0 && (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
testcase( pIn3->flags & MEM_Int );
testcase( pIn3->flags & MEM_Real );
+ testcase( pIn3->flags & MEM_IntReal );
sqlite3VdbeMemStringify(pIn3, encoding, 1);
testcase( (flags3&MEM_Dyn) != (pIn3->flags&MEM_Dyn) );
flags3 = (pIn3->flags & ~MEM_TypeMask) | (flags3 & MEM_TypeMask);
@@ -85409,7 +85914,7 @@ compare_op:
pOut->u.i = res2;
REGISTER_TRACE(pOp->p2, pOut);
}else{
- VdbeBranchTaken(res!=0, (pOp->p5 & SQLITE_NULLEQ)?2:3);
+ VdbeBranchTaken(res2!=0, (pOp->p5 & SQLITE_NULLEQ)?2:3);
if( res2 ){
goto jump_to_p2;
}
@@ -85959,15 +86464,15 @@ case OP_Column: {
zEndHdr = zData + aOffset[0];
testcase( zHdr>=zEndHdr );
do{
- if( (t = zHdr[0])<0x80 ){
+ if( (pC->aType[i] = t = zHdr[0])<0x80 ){
zHdr++;
offset64 += sqlite3VdbeOneByteSerialTypeLen(t);
}else{
zHdr += sqlite3GetVarint32(zHdr, &t);
+ pC->aType[i] = t;
offset64 += sqlite3VdbeSerialTypeLen(t);
}
- pC->aType[i++] = t;
- aOffset[i] = (u32)(offset64 & 0xffffffff);
+ aOffset[++i] = (u32)(offset64 & 0xffffffff);
}while( i<=p2 && zHdr<zEndHdr );
/* The record is corrupt if any of the following are true:
@@ -86106,12 +86611,21 @@ case OP_Affinity: {
assert( pOp->p2>0 );
assert( zAffinity[pOp->p2]==0 );
pIn1 = &aMem[pOp->p1];
- do{
+ while( 1 /*edit-by-break*/ ){
assert( pIn1 <= &p->aMem[(p->nMem+1 - p->nCursor)] );
assert( memIsValid(pIn1) );
- applyAffinity(pIn1, *(zAffinity++), encoding);
+ applyAffinity(pIn1, zAffinity[0], encoding);
+ if( zAffinity[0]==SQLITE_AFF_REAL && (pIn1->flags & MEM_Int)!=0 ){
+ /* When applying REAL affinity, if the result is still MEM_Int,
+ ** indicate that REAL is actually desired */
+ pIn1->flags |= MEM_IntReal;
+ pIn1->flags &= ~MEM_Int;
+ }
+ REGISTER_TRACE((int)(pIn1-aMem), pIn1);
+ zAffinity++;
+ if( zAffinity[0]==0 ) break;
pIn1++;
- }while( zAffinity[0] );
+ }
break;
}
@@ -86132,7 +86646,6 @@ case OP_Affinity: {
** If P4 is NULL then all index fields have the affinity BLOB.
*/
case OP_MakeRecord: {
- u8 *zNewRecord; /* A buffer to hold the data for the new record */
Mem *pRec; /* The new record */
u64 nData; /* Number of bytes of data space */
int nHdr; /* Number of bytes of header space */
@@ -86145,9 +86658,9 @@ case OP_MakeRecord: {
int nField; /* Number of fields in the record */
char *zAffinity; /* The affinity string for the record */
int file_format; /* File format to use for encoding */
- int i; /* Space used in zNewRecord[] header */
- int j; /* Space used in zNewRecord[] content */
u32 len; /* Length of a field */
+ u8 *zHdr; /* Where to write next byte of the header */
+ u8 *zPayload; /* Where to write next byte of the payload */
/* Assuming the record contains N fields, the record format looks
** like this:
@@ -86186,7 +86699,14 @@ case OP_MakeRecord: {
if( zAffinity ){
pRec = pData0;
do{
- applyAffinity(pRec++, *(zAffinity++), encoding);
+ applyAffinity(pRec, zAffinity[0], encoding);
+ if( zAffinity[0]==SQLITE_AFF_REAL && (pRec->flags & MEM_Int) ){
+ pRec->flags |= MEM_IntReal;
+ pRec->flags &= ~(MEM_Int);
+ }
+ REGISTER_TRACE((int)(pRec-aMem), pRec);
+ zAffinity++;
+ pRec++;
assert( zAffinity[0]==0 || pRec<=pLast );
}while( zAffinity[0] );
}
@@ -86274,34 +86794,34 @@ case OP_MakeRecord: {
goto no_mem;
}
}
- zNewRecord = (u8 *)pOut->z;
+ pOut->n = (int)nByte;
+ pOut->flags = MEM_Blob;
+ if( nZero ){
+ pOut->u.nZero = nZero;
+ pOut->flags |= MEM_Zero;
+ }
+ UPDATE_MAX_BLOBSIZE(pOut);
+ zHdr = (u8 *)pOut->z;
+ zPayload = zHdr + nHdr;
/* Write the record */
- i = putVarint32(zNewRecord, nHdr);
- j = nHdr;
+ zHdr += putVarint32(zHdr, nHdr);
assert( pData0<=pLast );
pRec = pData0;
do{
serial_type = pRec->uTemp;
/* EVIDENCE-OF: R-06529-47362 Following the size varint are one or more
** additional varints, one per column. */
- i += putVarint32(&zNewRecord[i], serial_type); /* serial type */
+ zHdr += putVarint32(zHdr, serial_type); /* serial type */
/* EVIDENCE-OF: R-64536-51728 The values for each column in the record
** immediately follow the header. */
- j += sqlite3VdbeSerialPut(&zNewRecord[j], pRec, serial_type); /* content */
+ zPayload += sqlite3VdbeSerialPut(zPayload, pRec, serial_type); /* content */
}while( (++pRec)<=pLast );
- assert( i==nHdr );
- assert( j==nByte );
+ assert( nHdr==(int)(zHdr - (u8*)pOut->z) );
+ assert( nByte==(int)(zPayload - (u8*)pOut->z) );
assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) );
- pOut->n = (int)nByte;
- pOut->flags = MEM_Blob;
- if( nZero ){
- pOut->u.nZero = nZero;
- pOut->flags |= MEM_Zero;
- }
REGISTER_TRACE(pOp->p3, pOut);
- UPDATE_MAX_BLOBSIZE(pOut);
break;
}
@@ -86331,8 +86851,9 @@ case OP_Count: { /* out2 */
/* Opcode: Savepoint P1 * * P4 *
**
** Open, release or rollback the savepoint named by parameter P4, depending
-** on the value of P1. To open a new savepoint, P1==0. To release (commit) an
-** existing savepoint, P1==1, or to rollback an existing savepoint P1==2.
+** on the value of P1. To open a new savepoint set P1==0 (SAVEPOINT_BEGIN).
+** To release (commit) an existing savepoint set P1==1 (SAVEPOINT_RELEASE).
+** To rollback an existing savepoint set P1==2 (SAVEPOINT_ROLLBACK).
*/
case OP_Savepoint: {
int p1; /* Value of P1 operand */
@@ -86400,6 +86921,7 @@ case OP_Savepoint: {
}
}
}else{
+ assert( p1==SAVEPOINT_RELEASE || p1==SAVEPOINT_ROLLBACK );
iSavepoint = 0;
/* Find the named savepoint. If there is no such savepoint, then an
@@ -86453,6 +86975,7 @@ case OP_Savepoint: {
if( rc!=SQLITE_OK ) goto abort_due_to_error;
}
}else{
+ assert( p1==SAVEPOINT_RELEASE );
isSchemaChange = 0;
}
for(ii=0; ii<db->nDb; ii++){
@@ -86489,6 +87012,7 @@ case OP_Savepoint: {
db->nSavepoint--;
}
}else{
+ assert( p1==SAVEPOINT_ROLLBACK );
db->nDeferredCons = pSavepoint->nDeferredCons;
db->nDeferredImmCons = pSavepoint->nDeferredImmCons;
}
@@ -86970,6 +87494,7 @@ case OP_OpenDup: {
pCx->pKeyInfo = pOrig->pKeyInfo;
pCx->isTable = pOrig->isTable;
pCx->pgnoRoot = pOrig->pgnoRoot;
+ pCx->isOrdered = pOrig->isOrdered;
rc = sqlite3BtreeCursor(pOrig->pBtx, pCx->pgnoRoot, BTREE_WRCSR,
pCx->pKeyInfo, pCx->uc.pCursor);
/* The sqlite3BtreeCursor() routine can only fail for the first cursor
@@ -87026,11 +87551,15 @@ case OP_OpenEphemeral: {
if( pCx ){
/* If the ephermeral table is already open, erase all existing content
** so that the table is empty again, rather than creating a new table. */
- rc = sqlite3BtreeClearTable(pCx->pBtx, pCx->pgnoRoot, 0);
+ assert( pCx->isEphemeral );
+ pCx->seqCount = 0;
+ pCx->cacheStatus = CACHE_STALE;
+ if( pCx->pBtx ){
+ rc = sqlite3BtreeClearTable(pCx->pBtx, pCx->pgnoRoot, 0);
+ }
}else{
pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, CURTYPE_BTREE);
if( pCx==0 ) goto no_mem;
- pCx->nullRow = 1;
pCx->isEphemeral = 1;
rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->pBtx,
BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5,
@@ -87066,6 +87595,7 @@ case OP_OpenEphemeral: {
pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
}
if( rc ) goto abort_due_to_error;
+ pCx->nullRow = 1;
break;
}
@@ -87294,6 +87824,8 @@ case OP_SeekGT: { /* jump, in3, group */
pC->seekOp = pOp->opcode;
#endif
+ pC->deferredMoveto = 0;
+ pC->cacheStatus = CACHE_STALE;
if( pC->isTable ){
/* The BTREE_SEEK_EQ flag is only set on index cursors */
assert( sqlite3BtreeCursorHasHint(pC->uc.pCursor, BTREE_SEEK_EQ)==0
@@ -87303,20 +87835,24 @@ case OP_SeekGT: { /* jump, in3, group */
** blob, or NULL. But it needs to be an integer before we can do
** the seek, so convert it. */
pIn3 = &aMem[pOp->p3];
- if( (pIn3->flags & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){
+ if( (pIn3->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Str))==MEM_Str ){
applyNumericAffinity(pIn3, 0);
}
iKey = sqlite3VdbeIntValue(pIn3);
/* If the P3 value could not be converted into an integer without
** loss of information, then special processing is required... */
- if( (pIn3->flags & MEM_Int)==0 ){
+ if( (pIn3->flags & (MEM_Int|MEM_IntReal))==0 ){
if( (pIn3->flags & MEM_Real)==0 ){
- /* If the P3 value cannot be converted into any kind of a number,
- ** then the seek is not possible, so jump to P2 */
- VdbeBranchTaken(1,2); goto jump_to_p2;
- break;
- }
+ if( (pIn3->flags & MEM_Null) || oc>=OP_SeekGE ){
+ VdbeBranchTaken(1,2); goto jump_to_p2;
+ break;
+ }else{
+ rc = sqlite3BtreeLast(pC->uc.pCursor, &res);
+ if( rc!=SQLITE_OK ) goto abort_due_to_error;
+ goto seek_not_found;
+ }
+ }else
/* If the approximation iKey is larger than the actual real search
** term, substitute >= for > and < for <=. e.g. if the search term
@@ -87340,7 +87876,7 @@ case OP_SeekGT: { /* jump, in3, group */
assert( (OP_SeekLT & 0x0001)==(OP_SeekGE & 0x0001) );
if( (oc & 0x0001)==(OP_SeekLT & 0x0001) ) oc++;
}
- }
+ }
rc = sqlite3BtreeMovetoUnpacked(pC->uc.pCursor, 0, (u64)iKey, 0, &res);
pC->movetoTarget = iKey; /* Used by OP_Delete */
if( rc!=SQLITE_OK ){
@@ -87394,8 +87930,6 @@ case OP_SeekGT: { /* jump, in3, group */
goto seek_not_found;
}
}
- pC->deferredMoveto = 0;
- pC->cacheStatus = CACHE_STALE;
#ifdef SQLITE_TEST
sqlite3_search_count++;
#endif
@@ -87695,7 +88229,9 @@ case OP_SeekRowid: { /* jump, in3 */
u64 iKey;
pIn3 = &aMem[pOp->p3];
- if( (pIn3->flags & MEM_Int)==0 ){
+ testcase( pIn3->flags & MEM_Int );
+ testcase( pIn3->flags & MEM_IntReal );
+ if( (pIn3->flags & (MEM_Int|MEM_IntReal))==0 ){
/* Make sure pIn3->u.i contains a valid integer representation of
** the key value, but do not change the datatype of the register, as
** other parts of the perpared statement might be depending on the
@@ -88070,7 +88606,7 @@ case OP_Delete: {
** OP_Delete will have also set the pC->movetoTarget field to the rowid of
** the row that is being deleted */
i64 iKey = sqlite3BtreeIntegerKey(pC->uc.pCursor);
- assert( pC->movetoTarget==iKey );
+ assert( CORRUPT_DB || pC->movetoTarget==iKey );
}
#endif
@@ -88478,7 +89014,7 @@ case OP_Sort: { /* jump */
p->aCounter[SQLITE_STMTSTATUS_SORT]++;
/* Fall through into OP_Rewind */
}
-/* Opcode: Rewind P1 P2 * * P5
+/* Opcode: Rewind P1 P2 * * *
**
** The next use of the Rowid or Column or Next instruction for P1
** will refer to the first entry in the database table or index.
@@ -88486,10 +89022,6 @@ case OP_Sort: { /* jump */
** If the table or index is not empty, fall through to the following
** instruction.
**
-** If P5 is non-zero and the table is not empty, then the "skip-next"
-** flag is set on the cursor so that the next OP_Next instruction
-** executed on it is a no-op.
-**
** This opcode leaves the cursor configured to move in forward order,
** from the beginning toward the end. In other words, the cursor is
** configured to use Next, not Prev.
@@ -88500,6 +89032,7 @@ case OP_Rewind: { /* jump */
int res;
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ assert( pOp->p5==0 );
pC = p->apCsr[pOp->p1];
assert( pC!=0 );
assert( isSorter(pC)==(pOp->opcode==OP_SorterSort) );
@@ -88514,9 +89047,6 @@ case OP_Rewind: { /* jump */
pCrsr = pC->uc.pCursor;
assert( pCrsr );
rc = sqlite3BtreeFirst(pCrsr, &res);
-#ifndef SQLITE_OMIT_WINDOWFUNC
- if( pOp->p5 ) sqlite3BtreeSkipNext(pCrsr);
-#endif
pC->deferredMoveto = 0;
pC->cacheStatus = CACHE_STALE;
}
@@ -89526,8 +90056,7 @@ case OP_Program: { /* jump */
}
#endif
pOp = &aOp[-1];
-
- break;
+ goto check_for_interrupt;
}
/* Opcode: Param P1 P2 * * *
@@ -89899,6 +90428,7 @@ case OP_AggFinal: {
assert( (pMem->flags & ~(MEM_Null|MEM_Agg))==0 );
#ifndef SQLITE_OMIT_WINDOWFUNC
if( pOp->p3 ){
+ memAboutToChange(p, &aMem[pOp->p3]);
rc = sqlite3VdbeMemAggValue(pMem, &aMem[pOp->p3], pOp->p4.pFunc);
pMem = &aMem[pOp->p3];
}else
@@ -90936,7 +91466,16 @@ abort_due_to_error:
** release the mutexes on btrees that were acquired at the
** top. */
vdbe_return:
- testcase( nVmStep>0 );
+#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
+ while( nVmStep>=nProgressLimit && db->xProgress!=0 ){
+ nProgressLimit += db->nProgressOps;
+ if( db->xProgress(db->pProgressArg) ){
+ nProgressLimit = 0xffffffff;
+ rc = SQLITE_INTERRUPT;
+ goto abort_due_to_error;
+ }
+ }
+#endif
p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep;
sqlite3VdbeLeave(p);
assert( rc!=SQLITE_OK || nExtraDelete==0
@@ -92023,7 +92562,7 @@ static int vdbePmaReadBlob(
/* Extend the p->aAlloc[] allocation if required. */
if( p->nAlloc<nByte ){
u8 *aNew;
- int nNew = MAX(128, p->nAlloc*2);
+ sqlite3_int64 nNew = MAX(128, 2*(sqlite3_int64)p->nAlloc);
while( nByte>nNew ) nNew = nNew*2;
aNew = sqlite3Realloc(p->aAlloc, nNew);
if( !aNew ) return SQLITE_NOMEM_BKPT;
@@ -93314,15 +93853,19 @@ SQLITE_PRIVATE int sqlite3VdbeSorterWrite(
if( nMin>pSorter->nMemory ){
u8 *aNew;
- int iListOff = (u8*)pSorter->list.pList - pSorter->list.aMemory;
- int nNew = pSorter->nMemory * 2;
+ sqlite3_int64 nNew = 2 * (sqlite3_int64)pSorter->nMemory;
+ int iListOff = -1;
+ if( pSorter->list.pList ){
+ iListOff = (u8*)pSorter->list.pList - pSorter->list.aMemory;
+ }
while( nNew < nMin ) nNew = nNew*2;
if( nNew > pSorter->mxPmaSize ) nNew = pSorter->mxPmaSize;
if( nNew < nMin ) nNew = nMin;
-
aNew = sqlite3Realloc(pSorter->list.aMemory, nNew);
if( !aNew ) return SQLITE_NOMEM_BKPT;
- pSorter->list.pList = (SorterRecord*)&aNew[iListOff];
+ if( iListOff>=0 ){
+ pSorter->list.pList = (SorterRecord*)&aNew[iListOff];
+ }
pSorter->list.aMemory = aNew;
pSorter->nMemory = nNew;
}
@@ -95023,6 +95566,23 @@ SQLITE_PRIVATE int sqlite3MatchSpanName(
}
/*
+** Return TRUE if the double-quoted string mis-feature should be supported.
+*/
+static int areDoubleQuotedStringsEnabled(sqlite3 *db, NameContext *pTopNC){
+ if( db->init.busy ) return 1; /* Always support for legacy schemas */
+ if( pTopNC->ncFlags & NC_IsDDL ){
+ /* Currently parsing a DDL statement */
+ if( sqlite3WritableSchema(db) && (db->flags & SQLITE_DqsDML)!=0 ){
+ return 1;
+ }
+ return (db->flags & SQLITE_DqsDDL)!=0;
+ }else{
+ /* Currently parsing a DML statement */
+ return (db->flags & SQLITE_DqsDML)!=0;
+ }
+}
+
+/*
** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
** that name in the set of source tables in pSrcList and make the pExpr
** expression node refer back to that source column. The following changes
@@ -95309,6 +95869,10 @@ static int lookupName(
sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs);
return WRC_Abort;
}
+ if( (pNC->ncFlags&NC_AllowWin)==0 && ExprHasProperty(pOrig, EP_Win) ){
+ sqlite3ErrorMsg(pParse, "misuse of aliased window function %s",zAs);
+ return WRC_Abort;
+ }
if( sqlite3ExprVectorSize(pOrig)!=1 ){
sqlite3ErrorMsg(pParse, "row value misused");
return WRC_Abort;
@@ -95346,7 +95910,9 @@ static int lookupName(
*/
if( cnt==0 && zTab==0 ){
assert( pExpr->op==TK_ID );
- if( ExprHasProperty(pExpr,EP_DblQuoted) ){
+ if( ExprHasProperty(pExpr,EP_DblQuoted)
+ && areDoubleQuotedStringsEnabled(db, pTopNC)
+ ){
/* If a double-quoted identifier does not match any known column name,
** then treat it as a string.
**
@@ -95599,6 +96165,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
const char *zId; /* The function name. */
FuncDef *pDef; /* Information about the function */
u8 enc = ENC(pParse->db); /* The database encoding */
+ int savedAllowFlags = (pNC->ncFlags & (NC_AllowAgg | NC_AllowWin));
assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
zId = pExpr->u.zToken;
@@ -95614,7 +96181,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
}else{
is_agg = pDef->xFinalize!=0;
if( pDef->funcFlags & SQLITE_FUNC_UNLIKELY ){
- ExprSetProperty(pExpr, EP_Unlikely|EP_Skip);
+ ExprSetProperty(pExpr, EP_Unlikely);
if( n==2 ){
pExpr->iTable = exprProbability(pList->a[1].pExpr);
if( pExpr->iTable<0 ){
@@ -95720,8 +96287,11 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
pNC->nErr++;
}
if( is_agg ){
+ /* Window functions may not be arguments of aggregate functions.
+ ** Or arguments of other window functions. But aggregate functions
+ ** may be arguments for window functions. */
#ifndef SQLITE_OMIT_WINDOWFUNC
- pNC->ncFlags &= ~(pExpr->y.pWin ? NC_AllowWin : NC_AllowAgg);
+ pNC->ncFlags &= ~(NC_AllowWin | (!pExpr->y.pWin ? NC_AllowAgg : 0));
#else
pNC->ncFlags &= ~NC_AllowAgg;
#endif
@@ -95732,7 +96302,9 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
#ifndef SQLITE_OMIT_WINDOWFUNC
if( pExpr->y.pWin ){
Select *pSel = pNC->pWinSelect;
- sqlite3WindowUpdate(pParse, pSel->pWinDefn, pExpr->y.pWin, pDef);
+ if( IN_RENAME_OBJECT==0 ){
+ sqlite3WindowUpdate(pParse, pSel->pWinDefn, pExpr->y.pWin, pDef);
+ }
sqlite3WalkExprList(pWalker, pExpr->y.pWin->pPartition);
sqlite3WalkExprList(pWalker, pExpr->y.pWin->pOrderBy);
sqlite3WalkExpr(pWalker, pExpr->y.pWin->pFilter);
@@ -95742,7 +96314,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
pExpr->y.pWin->pNextWin = pSel->pWin;
pSel->pWin = pExpr->y.pWin;
}
- pNC->ncFlags |= NC_AllowWin;
+ pNC->ncFlags |= NC_HasWin;
}else
#endif /* SQLITE_OMIT_WINDOWFUNC */
{
@@ -95760,8 +96332,8 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
pNC2->ncFlags |= NC_HasAgg | (pDef->funcFlags & SQLITE_FUNC_MINMAX);
}
- pNC->ncFlags |= NC_AllowAgg;
}
+ pNC->ncFlags |= savedAllowFlags;
}
/* FIX ME: Compute pExpr->affinity based on the expected return
** type of the function
@@ -95792,11 +96364,11 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
}
case TK_IS:
case TK_ISNOT: {
- Expr *pRight;
+ Expr *pRight = sqlite3ExprSkipCollate(pExpr->pRight);
assert( !ExprHasProperty(pExpr, EP_Reduced) );
/* Handle special cases of "x IS TRUE", "x IS FALSE", "x IS NOT TRUE",
** and "x IS NOT FALSE". */
- if( (pRight = pExpr->pRight)->op==TK_ID ){
+ if( pRight->op==TK_ID ){
int rc = resolveExprStep(pWalker, pRight);
if( rc==WRC_Abort ) return WRC_Abort;
if( pRight->op==TK_TRUEFALSE ){
@@ -96298,7 +96870,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
*/
for(i=0; i<p->pSrc->nSrc; i++){
struct SrcList_item *pItem = &p->pSrc->a[i];
- if( pItem->pSelect ){
+ if( pItem->pSelect && (pItem->pSelect->selFlags & SF_Resolved)==0 ){
NameContext *pNC; /* Used to iterate name contexts */
int nRef = 0; /* Refcount for pOuterNC and outer contexts */
const char *zSavedContext = pParse->zAuthContext;
@@ -96430,6 +97002,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
}
}
+#ifndef SQLITE_OMIT_WINDOWFUNC
if( IN_RENAME_OBJECT ){
Window *pWin;
for(pWin=p->pWinDefn; pWin; pWin=pWin->pNextWin){
@@ -96440,6 +97013,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
}
}
}
+#endif
/* If this is part of a compound SELECT, check that it has the right
** number of expressions in the select list. */
@@ -96516,12 +97090,12 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames(
NameContext *pNC, /* Namespace to resolve expressions in. */
Expr *pExpr /* The expression to be analyzed. */
){
- u16 savedHasAgg;
+ int savedHasAgg;
Walker w;
if( pExpr==0 ) return SQLITE_OK;
- savedHasAgg = pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg);
- pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg);
+ savedHasAgg = pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg|NC_HasWin);
+ pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin);
w.pParse = pNC->pParse;
w.xExprCallback = resolveExprStep;
w.xSelectCallback = resolveSelectStep;
@@ -96537,9 +97111,11 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames(
#if SQLITE_MAX_EXPR_DEPTH>0
w.pParse->nHeight -= pExpr->nHeight;
#endif
- if( pNC->ncFlags & NC_HasAgg ){
- ExprSetProperty(pExpr, EP_Agg);
- }
+ assert( EP_Agg==NC_HasAgg );
+ assert( EP_Win==NC_HasWin );
+ testcase( pNC->ncFlags & NC_HasAgg );
+ testcase( pNC->ncFlags & NC_HasWin );
+ ExprSetProperty(pExpr, pNC->ncFlags & (NC_HasAgg|NC_HasWin) );
pNC->ncFlags |= savedHasAgg;
return pNC->nErr>0 || w.pParse->nErr>0;
}
@@ -96628,7 +97204,7 @@ SQLITE_PRIVATE int sqlite3ResolveSelfReference(
}
sNC.pParse = pParse;
sNC.pSrcList = &sSrc;
- sNC.ncFlags = type;
+ sNC.ncFlags = type | NC_IsDDL;
if( (rc = sqlite3ResolveExprNames(&sNC, pExpr))!=SQLITE_OK ) return rc;
if( pList ) rc = sqlite3ResolveExprListNames(&sNC, pList);
return rc;
@@ -96682,8 +97258,12 @@ SQLITE_PRIVATE char sqlite3TableColumnAffinity(Table *pTab, int iCol){
*/
SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){
int op;
- pExpr = sqlite3ExprSkipCollate(pExpr);
if( pExpr->flags & EP_Generic ) return 0;
+ while( ExprHasProperty(pExpr, EP_Skip) ){
+ assert( pExpr->op==TK_COLLATE );
+ pExpr = pExpr->pLeft;
+ assert( pExpr!=0 );
+ }
op = pExpr->op;
if( op==TK_SELECT ){
assert( pExpr->flags&EP_xIsSelect );
@@ -96744,7 +97324,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprAddCollateString(Parse *pParse, Expr *pExpr, con
** or likelihood() function at the root of an expression.
*/
SQLITE_PRIVATE Expr *sqlite3ExprSkipCollate(Expr *pExpr){
- while( pExpr && ExprHasProperty(pExpr, EP_Skip) ){
+ while( pExpr && ExprHasProperty(pExpr, EP_Skip|EP_Unlikely) ){
if( ExprHasProperty(pExpr, EP_Unlikely) ){
assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
assert( pExpr->x.pList->nExpr>0 );
@@ -97411,7 +97991,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
pNew->iAgg = -1;
if( pToken ){
if( nExtra==0 ){
- pNew->flags |= EP_IntValue|EP_Leaf;
+ pNew->flags |= EP_IntValue|EP_Leaf|(iValue?EP_IsTrue:EP_IsFalse);
pNew->u.iValue = iValue;
}else{
pNew->u.zToken = (char*)&pNew[1];
@@ -97488,20 +98068,16 @@ SQLITE_PRIVATE Expr *sqlite3PExpr(
Expr *pRight /* Right operand */
){
Expr *p;
- if( op==TK_AND && pParse->nErr==0 && !IN_RENAME_OBJECT ){
- /* Take advantage of short-circuit false optimization for AND */
- p = sqlite3ExprAnd(pParse->db, pLeft, pRight);
- }else{
- p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr));
- if( p ){
- memset(p, 0, sizeof(Expr));
- p->op = op & TKFLG_MASK;
- p->iAgg = -1;
- }
+ p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr));
+ if( p ){
+ memset(p, 0, sizeof(Expr));
+ p->op = op & 0xff;
+ p->iAgg = -1;
sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight);
- }
- if( p ) {
sqlite3ExprCheckHeight(pParse, p->nHeight);
+ }else{
+ sqlite3ExprDelete(pParse->db, pLeft);
+ sqlite3ExprDelete(pParse->db, pRight);
}
return p;
}
@@ -97523,33 +98099,6 @@ SQLITE_PRIVATE void sqlite3PExprAddSelect(Parse *pParse, Expr *pExpr, Select *pS
/*
-** If the expression is always either TRUE or FALSE (respectively),
-** then return 1. If one cannot determine the truth value of the
-** expression at compile-time return 0.
-**
-** This is an optimization. If is OK to return 0 here even if
-** the expression really is always false or false (a false negative).
-** But it is a bug to return 1 if the expression might have different
-** boolean values in different circumstances (a false positive.)
-**
-** Note that if the expression is part of conditional for a
-** LEFT JOIN, then we cannot determine at compile-time whether or not
-** is it true or false, so always return 0.
-*/
-static int exprAlwaysTrue(Expr *p){
- int v = 0;
- if( ExprHasProperty(p, EP_FromJoin) ) return 0;
- if( !sqlite3ExprIsInteger(p, &v) ) return 0;
- return v!=0;
-}
-static int exprAlwaysFalse(Expr *p){
- int v = 0;
- if( ExprHasProperty(p, EP_FromJoin) ) return 0;
- if( !sqlite3ExprIsInteger(p, &v) ) return 0;
- return v==0;
-}
-
-/*
** Join two expressions using an AND operator. If either expression is
** NULL, then just return the other expression.
**
@@ -97557,19 +98106,18 @@ static int exprAlwaysFalse(Expr *p){
** of returning an AND expression, just return a constant expression with
** a value of false.
*/
-SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){
- if( pLeft==0 ){
+SQLITE_PRIVATE Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){
+ sqlite3 *db = pParse->db;
+ if( pLeft==0 ){
return pRight;
}else if( pRight==0 ){
return pLeft;
- }else if( exprAlwaysFalse(pLeft) || exprAlwaysFalse(pRight) ){
- sqlite3ExprDelete(db, pLeft);
- sqlite3ExprDelete(db, pRight);
+ }else if( ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight) ){
+ sqlite3ExprUnmapAndDelete(pParse, pLeft);
+ sqlite3ExprUnmapAndDelete(pParse, pRight);
return sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[0], 0);
}else{
- Expr *pNew = sqlite3ExprAlloc(db, TK_AND, 0, 0);
- sqlite3ExprAttachSubtrees(db, pNew, pLeft, pRight);
- return pNew;
+ return sqlite3PExpr(pParse, TK_AND, pLeft, pRight);
}
}
@@ -97726,6 +98274,18 @@ SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
if( p ) sqlite3ExprDeleteNN(db, p);
}
+/* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the
+** expression.
+*/
+SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse *pParse, Expr *p){
+ if( p ){
+ if( IN_RENAME_OBJECT ){
+ sqlite3RenameExprUnmap(pParse, p);
+ }
+ sqlite3ExprDeleteNN(pParse->db, p);
+ }
+}
+
/*
** Return the number of bytes allocated for the expression structure
** passed as the first argument. This is always one of EXPR_FULLSIZE,
@@ -97960,7 +98520,7 @@ static Expr *exprDup(sqlite3 *db, Expr *p, int dupFlags, u8 **pzBuffer){
static With *withDup(sqlite3 *db, With *p){
With *pRet = 0;
if( p ){
- int nByte = sizeof(*p) + sizeof(p->a[0]) * (p->nCte-1);
+ sqlite3_int64 nByte = sizeof(*p) + sizeof(p->a[0]) * (p->nCte-1);
pRet = sqlite3DbMallocZero(db, nByte);
if( pRet ){
int i;
@@ -98225,7 +98785,7 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(
}else if( (pList->nExpr & (pList->nExpr-1))==0 ){
ExprList *pNew;
pNew = sqlite3DbRealloc(db, pList,
- sizeof(*pList)+(2*pList->nExpr - 1)*sizeof(pList->a[0]));
+ sizeof(*pList)+(2*(sqlite3_int64)pList->nExpr-1)*sizeof(pList->a[0]));
if( pNew==0 ){
goto no_mem;
}
@@ -98308,10 +98868,7 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(
}
vector_append_error:
- if( IN_RENAME_OBJECT ){
- sqlite3RenameExprUnmap(pParse, pExpr);
- }
- sqlite3ExprDelete(db, pExpr);
+ sqlite3ExprUnmapAndDelete(pParse, pExpr);
sqlite3IdListDelete(db, pColumns);
return pList;
}
@@ -98459,6 +99016,7 @@ SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr *pExpr){
|| sqlite3StrICmp(pExpr->u.zToken, "false")==0)
){
pExpr->op = TK_TRUEFALSE;
+ ExprSetProperty(pExpr, pExpr->u.zToken[4]==0 ? EP_IsTrue : EP_IsFalse);
return 1;
}
return 0;
@@ -98469,12 +99027,40 @@ SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr *pExpr){
** and 0 if it is FALSE.
*/
SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr *pExpr){
+ pExpr = sqlite3ExprSkipCollate((Expr*)pExpr);
assert( pExpr->op==TK_TRUEFALSE );
assert( sqlite3StrICmp(pExpr->u.zToken,"true")==0
|| sqlite3StrICmp(pExpr->u.zToken,"false")==0 );
return pExpr->u.zToken[4]==0;
}
+/*
+** If pExpr is an AND or OR expression, try to simplify it by eliminating
+** terms that are always true or false. Return the simplified expression.
+** Or return the original expression if no simplification is possible.
+**
+** Examples:
+**
+** (x<10) AND true => (x<10)
+** (x<10) AND false => false
+** (x<10) AND (y=22 OR false) => (x<10) AND (y=22)
+** (x<10) AND (y=22 OR true) => (x<10)
+** (y=22) OR true => true
+*/
+SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){
+ assert( pExpr!=0 );
+ if( pExpr->op==TK_AND || pExpr->op==TK_OR ){
+ Expr *pRight = sqlite3ExprSimplifiedAndOr(pExpr->pRight);
+ Expr *pLeft = sqlite3ExprSimplifiedAndOr(pExpr->pLeft);
+ if( ExprAlwaysTrue(pLeft) || ExprAlwaysFalse(pRight) ){
+ pExpr = pExpr->op==TK_AND ? pRight : pLeft;
+ }else if( ExprAlwaysTrue(pRight) || ExprAlwaysFalse(pLeft) ){
+ pExpr = pExpr->op==TK_AND ? pLeft : pRight;
+ }
+ }
+ return pExpr;
+}
+
/*
** These routines are Walker callbacks used to check expressions to
@@ -98719,7 +99305,7 @@ SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr *p){
*/
SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){
int rc = 0;
- if( p==0 ) return 0; /* Can only happen following on OOM */
+ if( NEVER(p==0) ) return 0; /* Used to only happen following on OOM */
/* If an expression is an integer literal that fits in a signed 32-bit
** integer, then the EP_IntValue flag will have already been set */
@@ -99448,6 +100034,7 @@ SQLITE_PRIVATE void sqlite3CodeRhsOfIN(
*/
if( addrOnce && !sqlite3ExprIsConstant(pE2) ){
sqlite3VdbeChangeToNoop(v, addrOnce);
+ ExprClearProperty(pExpr, EP_Subrtn);
addrOnce = 0;
}
@@ -100014,7 +100601,8 @@ SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int n
** register iReg. The caller must ensure that iReg already contains
** the correct value for the expression.
*/
-static void exprToRegister(Expr *p, int iReg){
+static void exprToRegister(Expr *pExpr, int iReg){
+ Expr *p = sqlite3ExprSkipCollate(pExpr);
p->op2 = p->op;
p->op = TK_REGISTER;
p->iTable = iReg;
@@ -101066,18 +101654,23 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int
if( NEVER(pExpr==0) ) return; /* No way this can happen */
op = pExpr->op;
switch( op ){
- case TK_AND: {
- int d2 = sqlite3VdbeMakeLabel(pParse);
- testcase( jumpIfNull==0 );
- sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL);
- sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
- sqlite3VdbeResolveLabel(v, d2);
- break;
- }
+ case TK_AND:
case TK_OR: {
- testcase( jumpIfNull==0 );
- sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
- sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
+ Expr *pAlt = sqlite3ExprSimplifiedAndOr(pExpr);
+ if( pAlt!=pExpr ){
+ sqlite3ExprIfTrue(pParse, pAlt, dest, jumpIfNull);
+ }else if( op==TK_AND ){
+ int d2 = sqlite3VdbeMakeLabel(pParse);
+ testcase( jumpIfNull==0 );
+ sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,
+ jumpIfNull^SQLITE_JUMPIFNULL);
+ sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
+ sqlite3VdbeResolveLabel(v, d2);
+ }else{
+ testcase( jumpIfNull==0 );
+ sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
+ sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
+ }
break;
}
case TK_NOT: {
@@ -101163,9 +101756,9 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int
#endif
default: {
default_expr:
- if( exprAlwaysTrue(pExpr) ){
+ if( ExprAlwaysTrue(pExpr) ){
sqlite3VdbeGoto(v, dest);
- }else if( exprAlwaysFalse(pExpr) ){
+ }else if( ExprAlwaysFalse(pExpr) ){
/* No-op */
}else{
r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
@@ -101233,18 +101826,23 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int
assert( pExpr->op!=TK_GE || op==OP_Lt );
switch( pExpr->op ){
- case TK_AND: {
- testcase( jumpIfNull==0 );
- sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
- sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
- break;
- }
+ case TK_AND:
case TK_OR: {
- int d2 = sqlite3VdbeMakeLabel(pParse);
- testcase( jumpIfNull==0 );
- sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL);
- sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
- sqlite3VdbeResolveLabel(v, d2);
+ Expr *pAlt = sqlite3ExprSimplifiedAndOr(pExpr);
+ if( pAlt!=pExpr ){
+ sqlite3ExprIfFalse(pParse, pAlt, dest, jumpIfNull);
+ }else if( pExpr->op==TK_AND ){
+ testcase( jumpIfNull==0 );
+ sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
+ sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
+ }else{
+ int d2 = sqlite3VdbeMakeLabel(pParse);
+ testcase( jumpIfNull==0 );
+ sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2,
+ jumpIfNull^SQLITE_JUMPIFNULL);
+ sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
+ sqlite3VdbeResolveLabel(v, d2);
+ }
break;
}
case TK_NOT: {
@@ -101333,9 +101931,9 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int
#endif
default: {
default_expr:
- if( exprAlwaysFalse(pExpr) ){
+ if( ExprAlwaysFalse(pExpr) ){
sqlite3VdbeGoto(v, dest);
- }else if( exprAlwaysTrue(pExpr) ){
+ }else if( ExprAlwaysTrue(pExpr) ){
/* no-op */
}else{
r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
@@ -101491,6 +102089,7 @@ SQLITE_PRIVATE int sqlite3ExprCompare(Parse *pParse, Expr *pA, Expr *pB, int iTa
&& (combinedFlags & EP_Reduced)==0
){
if( pA->iColumn!=pB->iColumn ) return 2;
+ if( pA->op2!=pB->op2 ) return 2;
if( pA->iTable!=pB->iTable
&& (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2;
}
@@ -101539,6 +102138,76 @@ SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr *pA, Expr *pB, int iTab){
}
/*
+** Return non-zero if Expr p can only be true if pNN is not NULL.
+*/
+static int exprImpliesNotNull(
+ Parse *pParse, /* Parsing context */
+ Expr *p, /* The expression to be checked */
+ Expr *pNN, /* The expression that is NOT NULL */
+ int iTab, /* Table being evaluated */
+ int seenNot /* True if p is an operand of NOT */
+){
+ assert( p );
+ assert( pNN );
+ if( sqlite3ExprCompare(pParse, p, pNN, iTab)==0 ) return 1;
+ switch( p->op ){
+ case TK_IN: {
+ if( seenNot && ExprHasProperty(p, EP_xIsSelect) ) return 0;
+ assert( ExprHasProperty(p,EP_xIsSelect)
+ || (p->x.pList!=0 && p->x.pList->nExpr>0) );
+ return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, seenNot);
+ }
+ case TK_BETWEEN: {
+ ExprList *pList = p->x.pList;
+ assert( pList!=0 );
+ assert( pList->nExpr==2 );
+ if( seenNot ) return 0;
+ if( exprImpliesNotNull(pParse, pList->a[0].pExpr, pNN, iTab, seenNot)
+ || exprImpliesNotNull(pParse, pList->a[1].pExpr, pNN, iTab, seenNot)
+ ){
+ return 1;
+ }
+ return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, seenNot);
+ }
+ case TK_EQ:
+ case TK_NE:
+ case TK_LT:
+ case TK_LE:
+ case TK_GT:
+ case TK_GE:
+ case TK_PLUS:
+ case TK_MINUS:
+ case TK_STAR:
+ case TK_REM:
+ case TK_BITAND:
+ case TK_BITOR:
+ case TK_SLASH:
+ case TK_LSHIFT:
+ case TK_RSHIFT:
+ case TK_CONCAT: {
+ if( exprImpliesNotNull(pParse, p->pRight, pNN, iTab, seenNot) ) return 1;
+ /* Fall thru into the next case */
+ }
+ case TK_SPAN:
+ case TK_COLLATE:
+ case TK_BITNOT:
+ case TK_UPLUS:
+ case TK_UMINUS: {
+ return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, seenNot);
+ }
+ case TK_TRUTH: {
+ if( seenNot ) return 0;
+ if( p->op2!=TK_IS ) return 0;
+ return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, seenNot);
+ }
+ case TK_NOT: {
+ return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, 1);
+ }
+ }
+ return 0;
+}
+
+/*
** Return true if we can prove the pE2 will always be true if pE1 is
** true. Return false if we cannot complete the proof or if pE2 might
** be false. Examples:
@@ -101573,10 +102242,10 @@ SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Parse *pParse, Expr *pE1, Expr *pE2, i
){
return 1;
}
- if( pE2->op==TK_NOTNULL && pE1->op!=TK_ISNULL && pE1->op!=TK_IS ){
- Expr *pX = sqlite3ExprSkipCollate(pE1->pLeft);
- testcase( pX!=pE1->pLeft );
- if( sqlite3ExprCompare(pParse, pX, pE2->pLeft, iTab)==0 ) return 1;
+ if( pE2->op==TK_NOTNULL
+ && exprImpliesNotNull(pParse, pE1, pE2->pLeft, iTab, 0)
+ ){
+ return 1;
}
return 0;
}
@@ -101670,6 +102339,17 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){
*/
SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab){
Walker w;
+ p = sqlite3ExprSkipCollate(p);
+ while( p ){
+ if( p->op==TK_NOTNULL ){
+ p = p->pLeft;
+ }else if( p->op==TK_AND ){
+ if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab) ) return 1;
+ p = p->pRight;
+ }else{
+ break;
+ }
+ }
w.xExprCallback = impliesNotNullRow;
w.xSelectCallback = 0;
w.xSelectCallback2 = 0;
@@ -102139,7 +102819,7 @@ static void renameTestSchema(Parse *pParse, const char *zDb, int bTemp){
sqlite3NestedParse(pParse,
"SELECT 1 "
"FROM \"%w\".%s "
- "WHERE name NOT LIKE 'sqlite_%%'"
+ "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'"
" AND sql NOT LIKE 'create virtual%%'"
" AND sqlite_rename_test(%Q, sql, type, name, %d)=NULL ",
zDb, MASTER_NAME,
@@ -102150,7 +102830,7 @@ static void renameTestSchema(Parse *pParse, const char *zDb, int bTemp){
sqlite3NestedParse(pParse,
"SELECT 1 "
"FROM temp.%s "
- "WHERE name NOT LIKE 'sqlite_%%'"
+ "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'"
" AND sql NOT LIKE 'create virtual%%'"
" AND sqlite_rename_test(%Q, sql, type, name, 1)=NULL ",
MASTER_NAME, zDb
@@ -102251,15 +102931,15 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
}
#endif
- /* Begin a transaction for database iDb.
- ** Then modify the schema cookie (since the ALTER TABLE modifies the
- ** schema). Open a statement transaction if the table is a virtual
- ** table.
- */
+ /* Begin a transaction for database iDb. Then modify the schema cookie
+ ** (since the ALTER TABLE modifies the schema). Call sqlite3MayAbort(),
+ ** as the scalar functions (e.g. sqlite_rename_table()) invoked by the
+ ** nested SQL may raise an exception. */
v = sqlite3GetVdbe(pParse);
if( v==0 ){
goto exit_rename_table;
}
+ sqlite3MayAbort(pParse);
/* figure out how many UTF-8 characters are in zName */
zTabName = pTab->zName;
@@ -102271,7 +102951,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
"UPDATE \"%w\".%s SET "
"sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, %d) "
"WHERE (type!='index' OR tbl_name=%Q COLLATE nocase)"
- "AND name NOT LIKE 'sqlite_%%'"
+ "AND name NOT LIKE 'sqliteX_%%' ESCAPE 'X'"
, zDb, MASTER_NAME, zDb, zTabName, zName, (iDb==1), zTabName
);
@@ -102282,7 +102962,8 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
"tbl_name = %Q, "
"name = CASE "
"WHEN type='table' THEN %Q "
- "WHEN name LIKE 'sqlite_autoindex%%' AND type='index' THEN "
+ "WHEN name LIKE 'sqliteX_autoindex%%' ESCAPE 'X' "
+ " AND type='index' THEN "
"'sqlite_autoindex_' || %Q || substr(name,%d+18) "
"ELSE name END "
"WHERE tbl_name=%Q COLLATE nocase AND "
@@ -102328,7 +103009,6 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
int i = ++pParse->nMem;
sqlite3VdbeLoadString(v, i, zName);
sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB);
- sqlite3MayAbort(pParse);
}
#endif
@@ -102649,6 +103329,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameColumn(
** uses the sqlite_rename_column() SQL function to compute the new
** CREATE statement text for the sqlite_master table.
*/
+ sqlite3MayAbort(pParse);
zNew = sqlite3NameFromToken(db, pNew);
if( !zNew ) goto exit_rename_column;
assert( pNew->n>0 );
@@ -102656,7 +103337,8 @@ SQLITE_PRIVATE void sqlite3AlterRenameColumn(
sqlite3NestedParse(pParse,
"UPDATE \"%w\".%s SET "
"sql = sqlite_rename_column(sql, type, name, %Q, %Q, %d, %Q, %d, %d) "
- "WHERE name NOT LIKE 'sqlite_%%' AND (type != 'index' OR tbl_name = %Q)"
+ "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X' "
+ " AND (type != 'index' OR tbl_name = %Q)"
" AND sql NOT LIKE 'create virtual%%'",
zDb, MASTER_NAME,
zDb, pTab->zName, iCol, zNew, bQuote, iSchema==1,
@@ -102811,6 +103493,29 @@ static int renameUnmapExprCb(Walker *pWalker, Expr *pExpr){
}
/*
+** Walker callback used by sqlite3RenameExprUnmap().
+*/
+static int renameUnmapSelectCb(Walker *pWalker, Select *p){
+ Parse *pParse = pWalker->pParse;
+ int i;
+ if( ALWAYS(p->pEList) ){
+ ExprList *pList = p->pEList;
+ for(i=0; i<pList->nExpr; i++){
+ if( pList->a[i].zName ){
+ sqlite3RenameTokenRemap(pParse, 0, (void*)pList->a[i].zName);
+ }
+ }
+ }
+ if( ALWAYS(p->pSrc) ){ /* Every Select as a SrcList, even if it is empty */
+ SrcList *pSrc = p->pSrc;
+ for(i=0; i<pSrc->nSrc; i++){
+ sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName);
+ }
+ }
+ return WRC_Continue;
+}
+
+/*
** Remove all nodes that are part of expression pExpr from the rename list.
*/
SQLITE_PRIVATE void sqlite3RenameExprUnmap(Parse *pParse, Expr *pExpr){
@@ -102818,6 +103523,7 @@ SQLITE_PRIVATE void sqlite3RenameExprUnmap(Parse *pParse, Expr *pExpr){
memset(&sWalker, 0, sizeof(Walker));
sWalker.pParse = pParse;
sWalker.xExprCallback = renameUnmapExprCb;
+ sWalker.xSelectCallback = renameUnmapSelectCb;
sqlite3WalkExpr(&sWalker, pExpr);
}
@@ -105903,12 +106609,14 @@ static void attachFunc(
sqlite3BtreeEnterAll(db);
db->init.iDb = 0;
db->mDbFlags &= ~(DBFLAG_SchemaKnownOk);
- rc = sqlite3Init(db, &zErrDyn);
+ if( !REOPEN_AS_MEMDB(db) ){
+ rc = sqlite3Init(db, &zErrDyn);
+ }
sqlite3BtreeLeaveAll(db);
assert( zErrDyn==0 || rc!=SQLITE_OK );
}
#ifdef SQLITE_USER_AUTHENTICATION
- if( rc==SQLITE_OK ){
+ if( rc==SQLITE_OK && !REOPEN_AS_MEMDB(db) ){
u8 newAuth = 0;
rc = sqlite3UserAuthCheckLogin(db, zName, &newAuth);
if( newAuth<db->auth.authLevel ){
@@ -106837,7 +107545,12 @@ SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
zSql = sqlite3VMPrintf(db, zFormat, ap);
va_end(ap);
if( zSql==0 ){
- return; /* A malloc must have failed */
+ /* This can result either from an OOM or because the formatted string
+ ** exceeds SQLITE_LIMIT_LENGTH. In the latter case, we need to set
+ ** an error */
+ if( !db->mallocFailed ) pParse->rc = SQLITE_TOOBIG;
+ pParse->nErr++;
+ return;
}
pParse->nested++;
memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ);
@@ -107190,10 +107903,14 @@ static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
#ifdef SQLITE_DEBUG
/* Record the number of outstanding lookaside allocations in schema Tables
- ** prior to doing any free() operations. Since schema Tables do not use
- ** lookaside, this number should not change. */
+ ** prior to doing any free() operations. Since schema Tables do not use
+ ** lookaside, this number should not change.
+ **
+ ** If malloc has already failed, it may be that it failed while allocating
+ ** a Table object that was going to be marked ephemeral. So do not check
+ ** that no lookaside memory is used in this case either. */
int nLookaside = 0;
- if( db && (pTable->tabFlags & TF_Ephemeral)==0 ){
+ if( db && !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){
nLookaside = sqlite3LookasideUsed(db, 0);
}
#endif
@@ -107901,7 +108618,7 @@ SQLITE_PRIVATE void sqlite3AddDefaultValue(
** accept it. This routine does the necessary conversion. It converts
** the expression given in its argument from a TK_STRING into a TK_ID
** if the expression is just a TK_STRING with an optional COLLATE clause.
-** If the epxression is anything other than TK_STRING, the expression is
+** If the expression is anything other than TK_STRING, the expression is
** unchanged.
*/
static void sqlite3StringToId(Expr *p){
@@ -107977,7 +108694,8 @@ SQLITE_PRIVATE void sqlite3AddPrimaryKey(
&& sortOrder!=SQLITE_SO_DESC
){
if( IN_RENAME_OBJECT && pList ){
- sqlite3RenameTokenRemap(pParse, &pTab->iPKey, pList->a[0].pExpr);
+ Expr *pCExpr = sqlite3ExprSkipCollate(pList->a[0].pExpr);
+ sqlite3RenameTokenRemap(pParse, &pTab->iPKey, pCExpr);
}
pTab->iPKey = iCol;
pTab->keyConf = (u8)onError;
@@ -108297,10 +109015,51 @@ static void estimateIndexWidth(Index *pIdx){
pIdx->szIdxRow = sqlite3LogEst(wIndex*4);
}
-/* Return true if value x is found any of the first nCol entries of aiCol[]
+/* Return true if column number x is any of the first nCol entries of aiCol[].
+** This is used to determine if the column number x appears in any of the
+** first nCol entries of an index.
*/
static int hasColumn(const i16 *aiCol, int nCol, int x){
- while( nCol-- > 0 ) if( x==*(aiCol++) ) return 1;
+ while( nCol-- > 0 ){
+ assert( aiCol[0]>=0 );
+ if( x==*(aiCol++) ){
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/*
+** Return true if any of the first nKey entries of index pIdx exactly
+** match the iCol-th entry of pPk. pPk is always a WITHOUT ROWID
+** PRIMARY KEY index. pIdx is an index on the same table. pIdx may
+** or may not be the same index as pPk.
+**
+** The first nKey entries of pIdx are guaranteed to be ordinary columns,
+** not a rowid or expression.
+**
+** This routine differs from hasColumn() in that both the column and the
+** collating sequence must match for this routine, but for hasColumn() only
+** the column name must match.
+*/
+static int isDupColumn(Index *pIdx, int nKey, Index *pPk, int iCol){
+ int i, j;
+ assert( nKey<=pIdx->nColumn );
+ assert( iCol<MAX(pPk->nColumn,pPk->nKeyCol) );
+ assert( pPk->idxType==SQLITE_IDXTYPE_PRIMARYKEY );
+ assert( pPk->pTable->tabFlags & TF_WithoutRowid );
+ assert( pPk->pTable==pIdx->pTable );
+ testcase( pPk==pIdx );
+ j = pPk->aiColumn[iCol];
+ assert( j!=XN_ROWID && j!=XN_EXPR );
+ for(i=0; i<nKey; i++){
+ assert( pIdx->aiColumn[i]>=0 || j>=0 );
+ if( pIdx->aiColumn[i]==j
+ && sqlite3StrICmp(pIdx->azColl[i], pPk->azColl[iCol])==0
+ ){
+ return 1;
+ }
+ }
return 0;
}
@@ -108389,15 +109148,19 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
pList = sqlite3ExprListAppend(pParse, 0,
sqlite3ExprAlloc(db, TK_ID, &ipkToken, 0));
if( pList==0 ) return;
+ if( IN_RENAME_OBJECT ){
+ sqlite3RenameTokenRemap(pParse, pList->a[0].pExpr, &pTab->iPKey);
+ }
pList->a[0].sortOrder = pParse->iPkSortOrder;
assert( pParse->pNewTable==pTab );
+ pTab->iPKey = -1;
sqlite3CreateIndex(pParse, 0, 0, 0, pList, pTab->keyConf, 0, 0, 0, 0,
SQLITE_IDXTYPE_PRIMARYKEY);
if( db->mallocFailed || pParse->nErr ) return;
pPk = sqlite3PrimaryKeyIndex(pTab);
- pTab->iPKey = -1;
}else{
pPk = sqlite3PrimaryKeyIndex(pTab);
+ assert( pPk!=0 );
/*
** Remove all redundant columns from the PRIMARY KEY. For example, change
@@ -108405,9 +109168,10 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
** code assumes the PRIMARY KEY contains no repeated columns.
*/
for(i=j=1; i<pPk->nKeyCol; i++){
- if( hasColumn(pPk->aiColumn, j, pPk->aiColumn[i]) ){
+ if( isDupColumn(pPk, j, pPk, i) ){
pPk->nColumn--;
}else{
+ testcase( hasColumn(pPk->aiColumn, j, pPk->aiColumn[i]) );
pPk->aiColumn[j++] = pPk->aiColumn[i];
}
}
@@ -108437,7 +109201,10 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
int n;
if( IsPrimaryKeyIndex(pIdx) ) continue;
for(i=n=0; i<nPk; i++){
- if( !hasColumn(pIdx->aiColumn, pIdx->nKeyCol, pPk->aiColumn[i]) ) n++;
+ if( !isDupColumn(pIdx, pIdx->nKeyCol, pPk, i) ){
+ testcase( hasColumn(pIdx->aiColumn, pIdx->nKeyCol, pPk->aiColumn[i]) );
+ n++;
+ }
}
if( n==0 ){
/* This index is a superset of the primary key */
@@ -108446,9 +109213,14 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
}
if( resizeIndexObject(db, pIdx, pIdx->nKeyCol+n) ) return;
for(i=0, j=pIdx->nKeyCol; i<nPk; i++){
- if( !hasColumn(pIdx->aiColumn, pIdx->nKeyCol, pPk->aiColumn[i]) ){
+ if( !isDupColumn(pIdx, pIdx->nKeyCol, pPk, i) ){
+ testcase( hasColumn(pIdx->aiColumn, pIdx->nKeyCol, pPk->aiColumn[i]) );
pIdx->aiColumn[j] = pPk->aiColumn[i];
pIdx->azColl[j] = pPk->azColl[i];
+ if( pPk->aSortOrder[i] ){
+ /* See ticket https://www.sqlite.org/src/info/bba7b69f9849b5bf */
+ pIdx->bAscKeyBug = 1;
+ }
j++;
}
}
@@ -108567,6 +109339,11 @@ SQLITE_PRIVATE void sqlite3EndTable(
if( p->tnum==1 ) p->tabFlags |= TF_Readonly;
}
+ assert( (p->tabFlags & TF_HasPrimaryKey)==0
+ || p->iPKey>=0 || sqlite3PrimaryKeyIndex(p)!=0 );
+ assert( (p->tabFlags & TF_HasPrimaryKey)!=0
+ || (p->iPKey<0 && sqlite3PrimaryKeyIndex(p)==0) );
+
/* Special processing for WITHOUT ROWID Tables */
if( tabOpts & TF_WithoutRowid ){
if( (p->tabFlags & TF_Autoincrement) ){
@@ -109562,10 +110339,27 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
sqlite3UniqueConstraint(pParse, OE_Abort, pIndex);
sqlite3VdbeJumpHere(v, j2);
}else{
+ /* Most CREATE INDEX and REINDEX statements that are not UNIQUE can not
+ ** abort. The exception is if one of the indexed expressions contains a
+ ** user function that throws an exception when it is evaluated. But the
+ ** overhead of adding a statement journal to a CREATE INDEX statement is
+ ** very small (since most of the pages written do not contain content that
+ ** needs to be restored if the statement aborts), so we call
+ ** sqlite3MayAbort() for all CREATE INDEX statements. */
+ sqlite3MayAbort(pParse);
addr2 = sqlite3VdbeCurrentAddr(v);
}
sqlite3VdbeAddOp3(v, OP_SorterData, iSorter, regRecord, iIdx);
- sqlite3VdbeAddOp1(v, OP_SeekEnd, iIdx);
+ if( !pIndex->bAscKeyBug ){
+ /* This OP_SeekEnd opcode makes index insert for a REINDEX go much
+ ** faster by avoiding unnecessary seeks. But the optimization does
+ ** not work for UNIQUE constraint indexes on WITHOUT ROWID tables
+ ** with DESC primary keys, since those indexes have there keys in
+ ** a different order from the main table.
+ ** See ticket: https://www.sqlite.org/src/info/bba7b69f9849b5bf
+ */
+ sqlite3VdbeAddOp1(v, OP_SeekEnd, iIdx);
+ }
sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdx, regRecord);
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
sqlite3ReleaseTempReg(pParse, regRecord);
@@ -109720,13 +110514,13 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
assert( pParse->nErr==0 );
if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0
&& db->init.busy==0
+ && pTblName!=0
#if SQLITE_USER_AUTHENTICATION
&& sqlite3UserAuthTable(pTab->zName)==0
#endif
#ifdef SQLITE_ALLOW_SQLITE_MASTER_INDEX
&& sqlite3StrICmp(&pTab->zName[7],"master")!=0
#endif
- && sqlite3StrNICmp(&pTab->zName[7],"altertab_",9)!=0
){
sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
goto exit_create_index;
@@ -109830,6 +110624,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
sqlite3ExprListSetSortOrder(pList, sortOrder);
}else{
sqlite3ExprListCheckLength(pParse, pList, "index");
+ if( pParse->nErr ) goto exit_create_index;
}
/* Figure out how many bytes of space are required to store explicitly
@@ -109848,6 +110643,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
*/
nName = sqlite3Strlen30(zName);
nExtraCol = pPk ? pPk->nKeyCol : 1;
+ assert( pList->nExpr + nExtraCol <= 32767 /* Fits in i16 */ );
pIndex = sqlite3AllocateIndexObject(db, pList->nExpr + nExtraCol,
nName + nExtra + 1, &zExtra);
if( db->mallocFailed ){
@@ -109955,9 +110751,10 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
for(j=0; j<pPk->nKeyCol; j++){
int x = pPk->aiColumn[j];
assert( x>=0 );
- if( hasColumn(pIndex->aiColumn, pIndex->nKeyCol, x) ){
+ if( isDupColumn(pIndex, pIndex->nKeyCol, pPk, j) ){
pIndex->nColumn--;
}else{
+ testcase( hasColumn(pIndex->aiColumn,pIndex->nKeyCol,x) );
pIndex->aiColumn[i] = x;
pIndex->azColl[i] = pPk->azColl[j];
pIndex->aSortOrder[i] = pPk->aSortOrder[j];
@@ -110331,9 +111128,9 @@ SQLITE_PRIVATE void *sqlite3ArrayAllocate(
int *pIdx /* Write the index of a new slot here */
){
char *z;
- int n = *pnEntry;
+ sqlite3_int64 n = *pIdx = *pnEntry;
if( (n & (n-1))==0 ){
- int sz = (n==0) ? 1 : 2*n;
+ sqlite3_int64 sz = (n==0) ? 1 : 2*n;
void *pNew = sqlite3DbRealloc(db, pArray, sz*szEntry);
if( pNew==0 ){
*pIdx = -1;
@@ -110343,7 +111140,6 @@ SQLITE_PRIVATE void *sqlite3ArrayAllocate(
}
z = (char*)pArray;
memset(&z[n * szEntry], 0, szEntry);
- *pIdx = n;
++*pnEntry;
return pArray;
}
@@ -110454,7 +111250,7 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(
/* Allocate additional space if needed */
if( (u32)pSrc->nSrc+nExtra>pSrc->nAlloc ){
SrcList *pNew;
- int nAlloc = pSrc->nSrc*2+nExtra;
+ sqlite3_int64 nAlloc = 2*(sqlite3_int64)pSrc->nSrc+nExtra;
sqlite3 *db = pParse->db;
if( pSrc->nSrc+nExtra>=SQLITE_MAX_SRCLIST ){
@@ -110961,7 +111757,8 @@ SQLITE_PRIVATE void sqlite3UniqueConstraint(
StrAccum errMsg;
Table *pTab = pIdx->pTable;
- sqlite3StrAccumInit(&errMsg, pParse->db, 0, 0, 200);
+ sqlite3StrAccumInit(&errMsg, pParse->db, 0, 0,
+ pParse->db->aLimit[SQLITE_LIMIT_LENGTH]);
if( pIdx->aColExpr ){
sqlite3_str_appendf(&errMsg, "index '%q'", pIdx->zName);
}else{
@@ -111210,7 +112007,7 @@ SQLITE_PRIVATE With *sqlite3WithAdd(
}
if( pWith ){
- int nByte = sizeof(*pWith) + (sizeof(pWith->a[1]) * pWith->nCte);
+ sqlite3_int64 nByte = sizeof(*pWith) + (sizeof(pWith->a[1]) * pWith->nCte);
pNew = sqlite3DbRealloc(db, pWith, nByte);
}else{
pNew = sqlite3DbMallocZero(db, sizeof(*pWith));
@@ -112728,6 +113525,7 @@ SQLITE_PRIVATE void sqlite3ResolvePartIdxLabel(Parse *pParse, int iLabel){
/* #include "sqliteInt.h" */
/* #include <stdlib.h> */
/* #include <assert.h> */
+/* #include <math.h> */
/* #include "vdbeInt.h" */
/*
@@ -113098,10 +113896,10 @@ static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
** handle the rounding directly,
** otherwise use printf.
*/
- if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
- r = (double)((sqlite_int64)(r+0.5));
- }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
- r = -(double)((sqlite_int64)((-r)+0.5));
+ if( r<-4503599627370496.0 || r>+4503599627370496.0 ){
+ /* The value has no fractional part so there is nothing to round */
+ }else if( n==0 ){
+ r = (double)((sqlite_int64)(r+(r<0?-0.5:+0.5)));
}else{
zBuf = sqlite3_mprintf("%.*f",n,r);
if( zBuf==0 ){
@@ -113555,8 +114353,6 @@ static void likeFunc(
return;
}
#endif
- zB = sqlite3_value_text(argv[0]);
- zA = sqlite3_value_text(argv[1]);
/* Limit the length of the LIKE or GLOB pattern to avoid problems
** of deep recursion and N*N behavior in patternCompare().
@@ -113568,8 +114364,6 @@ static void likeFunc(
sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
return;
}
- assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
-
if( argc==3 ){
/* The escape character string must consist of a single UTF-8 character.
** Otherwise, return an error.
@@ -113585,6 +114379,8 @@ static void likeFunc(
}else{
escape = pInfo->matchSet;
}
+ zB = sqlite3_value_text(argv[0]);
+ zA = sqlite3_value_text(argv[1]);
if( zA && zB ){
#ifdef SQLITE_TEST
sqlite3_like_count++;
@@ -114510,35 +115306,24 @@ SQLITE_PRIVATE void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){
}
/*
-** Set the LIKEOPT flag on the 2-argument function with the given name.
-*/
-static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
- FuncDef *pDef;
- pDef = sqlite3FindFunction(db, zName, 2, SQLITE_UTF8, 0);
- if( ALWAYS(pDef) ){
- pDef->funcFlags |= flagVal;
- }
-}
-
-/*
-** Register the built-in LIKE and GLOB functions. The caseSensitive
+** Re-register the built-in LIKE functions. The caseSensitive
** parameter determines whether or not the LIKE operator is case
-** sensitive. GLOB is always case sensitive.
+** sensitive.
*/
SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
struct compareInfo *pInfo;
+ int flags;
if( caseSensitive ){
pInfo = (struct compareInfo*)&likeInfoAlt;
+ flags = SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE;
}else{
pInfo = (struct compareInfo*)&likeInfoNorm;
+ flags = SQLITE_FUNC_LIKE;
}
sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0);
- sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
- (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0, 0, 0);
- setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
- setLikeOptFlag(db, "like",
- caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
+ sqlite3FindFunction(db, "like", 2, SQLITE_UTF8, 0)->funcFlags |= flags;
+ sqlite3FindFunction(db, "like", 3, SQLITE_UTF8, 0)->funcFlags |= flags;
}
/*
@@ -115328,7 +116113,7 @@ static void fkScanChildren(
zCol = pFKey->pFrom->aCol[iCol].zName;
pRight = sqlite3Expr(db, TK_ID, zCol);
pEq = sqlite3PExpr(pParse, TK_EQ, pLeft, pRight);
- pWhere = sqlite3ExprAnd(db, pWhere, pEq);
+ pWhere = sqlite3ExprAnd(pParse, pWhere, pEq);
}
/* If the child table is the same as the parent table, then add terms
@@ -115362,11 +116147,11 @@ static void fkScanChildren(
pLeft = exprTableRegister(pParse, pTab, regData, iCol);
pRight = sqlite3Expr(db, TK_ID, pTab->aCol[iCol].zName);
pEq = sqlite3PExpr(pParse, TK_IS, pLeft, pRight);
- pAll = sqlite3ExprAnd(db, pAll, pEq);
+ pAll = sqlite3ExprAnd(pParse, pAll, pEq);
}
pNe = sqlite3PExpr(pParse, TK_NOT, pAll, 0);
}
- pWhere = sqlite3ExprAnd(db, pWhere, pNe);
+ pWhere = sqlite3ExprAnd(pParse, pWhere, pNe);
}
/* Resolve the references in the WHERE clause. */
@@ -115972,7 +116757,7 @@ static Trigger *fkActionTrigger(
sqlite3ExprAlloc(db, TK_ID, &tToCol, 0)),
sqlite3ExprAlloc(db, TK_ID, &tFromCol, 0)
);
- pWhere = sqlite3ExprAnd(db, pWhere, pEq);
+ pWhere = sqlite3ExprAnd(pParse, pWhere, pEq);
/* For ON UPDATE, construct the next term of the WHEN clause.
** The final WHEN clause will be like this:
@@ -115988,7 +116773,7 @@ static Trigger *fkActionTrigger(
sqlite3ExprAlloc(db, TK_ID, &tNew, 0),
sqlite3ExprAlloc(db, TK_ID, &tToCol, 0))
);
- pWhen = sqlite3ExprAnd(db, pWhen, pEq);
+ pWhen = sqlite3ExprAnd(pParse, pWhen, pEq);
}
if( action!=OE_Restrict && (action!=OE_Cascade || pChanges) ){
@@ -116985,7 +117770,7 @@ SQLITE_PRIVATE void sqlite3Insert(
int nIdx;
nIdx = sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, 0, -1, 0,
&iDataCur, &iIdxCur);
- aRegIdx = sqlite3DbMallocRawNN(db, sizeof(int)*(nIdx+1));
+ aRegIdx = sqlite3DbMallocRawNN(db, sizeof(int)*(nIdx+2));
if( aRegIdx==0 ){
goto insert_cleanup;
}
@@ -116994,6 +117779,7 @@ SQLITE_PRIVATE void sqlite3Insert(
aRegIdx[i] = ++pParse->nMem;
pParse->nMem += pIdx->nColumn;
}
+ aRegIdx[i] = ++pParse->nMem; /* Register to store the table record */
}
#ifndef SQLITE_OMIT_UPSERT
if( pUpsert ){
@@ -117397,6 +118183,14 @@ SQLITE_PRIVATE int sqlite3ExprReferencesUpdatedColumn(
** the same as the order of indices on the linked list of indices
** at pTab->pIndex.
**
+** (2019-05-07) The generated code also creates a new record for the
+** main table, if pTab is a rowid table, and stores that record in the
+** register identified by aRegIdx[nIdx] - in other words in the first
+** entry of aRegIdx[] past the last index. It is important that the
+** record be generated during constraint checks to avoid affinity changes
+** to the register content that occur after constraint checks but before
+** the new record is inserted.
+**
** The caller must have already opened writeable cursors on the main
** table and all applicable indices (that is to say, all indices for which
** aRegIdx[] is not zero). iDataCur is the cursor for the main table when
@@ -117587,7 +118381,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
}else{
char *zName = pCheck->a[i].zName;
if( zName==0 ) zName = pTab->zName;
- if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */
+ if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-26383-51744 */
sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_CHECK,
onError, zName, P4_TRANSIENT,
P5_ConstraintCheck);
@@ -117840,7 +118634,9 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn, aRegIdx[ix]);
VdbeComment((v, "for %s", pIdx->zName));
#ifdef SQLITE_ENABLE_NULL_TRIM
- if( pIdx->idxType==2 ) sqlite3SetMakeRecordP5(v, pIdx->pTable);
+ if( pIdx->idxType==SQLITE_IDXTYPE_PRIMARYKEY ){
+ sqlite3SetMakeRecordP5(v, pIdx->pTable);
+ }
#endif
/* In an UPDATE operation, if this index is the PRIMARY KEY index
@@ -118014,6 +118810,16 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
sqlite3VdbeJumpHere(v, ipkBottom);
}
+ /* Generate the table record */
+ if( HasRowid(pTab) ){
+ int regRec = aRegIdx[ix];
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regNewData+1, pTab->nCol, regRec);
+ sqlite3SetMakeRecordP5(v, pTab);
+ if( !bAffinityDone ){
+ sqlite3TableAffinity(v, pTab, 0);
+ }
+ }
+
*pbMayReplace = seenReplace;
VdbeModuleComment((v, "END: GenCnstCks(%d)", seenReplace));
}
@@ -118063,10 +118869,7 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion(
Vdbe *v; /* Prepared statements under construction */
Index *pIdx; /* An index being inserted or updated */
u8 pik_flags; /* flag values passed to the btree insert */
- int regData; /* Content registers (after the rowid) */
- int regRec; /* Register holding assembled record for the table */
int i; /* Loop counter */
- u8 bAffinityDone = 0; /* True if OP_Affinity has been run already */
assert( update_flags==0
|| update_flags==OPFLAG_ISUPDATE
@@ -118078,7 +118881,6 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion(
assert( pTab->pSelect==0 ); /* This table is not a VIEW */
for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
if( aRegIdx[i]==0 ) continue;
- bAffinityDone = 1;
if( pIdx->pPartIdxWhere ){
sqlite3VdbeAddOp2(v, OP_IsNull, aRegIdx[i], sqlite3VdbeCurrentAddr(v)+2);
VdbeCoverage(v);
@@ -118106,13 +118908,6 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion(
sqlite3VdbeChangeP5(v, pik_flags);
}
if( !HasRowid(pTab) ) return;
- regData = regNewData + 1;
- regRec = sqlite3GetTempReg(pParse);
- sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec);
- sqlite3SetMakeRecordP5(v, pTab);
- if( !bAffinityDone ){
- sqlite3TableAffinity(v, pTab, 0);
- }
if( pParse->nested ){
pik_flags = 0;
}else{
@@ -118125,7 +118920,7 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion(
if( useSeekResult ){
pik_flags |= OPFLAG_USESEEKRESULT;
}
- sqlite3VdbeAddOp3(v, OP_Insert, iDataCur, regRec, regNewData);
+ sqlite3VdbeAddOp3(v, OP_Insert, iDataCur, aRegIdx[i], regNewData);
if( !pParse->nested ){
sqlite3VdbeAppendP4(v, pTab, P4_TABLE);
}
@@ -118444,6 +119239,13 @@ static int xferOptimization(
if( pSrcIdx==0 ){
return 0; /* pDestIdx has no corresponding index in pSrc */
}
+ if( pSrcIdx->tnum==pDestIdx->tnum && pSrc->pSchema==pDest->pSchema
+ && sqlite3FaultSim(411)==SQLITE_OK ){
+ /* The sqlite3FaultSim() call allows this corruption test to be
+ ** bypassed during testing, in order to exercise other corruption tests
+ ** further downstream. */
+ return 0; /* Corrupt schema - two indexes on the same btree */
+ }
}
#ifndef SQLITE_OMIT_CHECK
if( pDest->pCheck && sqlite3ExprListCompare(pSrc->pCheck,pDest->pCheck,-1) ){
@@ -118521,7 +119323,7 @@ static int xferOptimization(
sqlite3RowidConstraint(pParse, onError, pDest);
sqlite3VdbeJumpHere(v, addr2);
autoIncStep(pParse, regAutoinc, regRowid);
- }else if( pDest->pIndex==0 ){
+ }else if( pDest->pIndex==0 && !(db->mDbFlags & DBFLAG_VacuumInto) ){
addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid);
}else{
addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
@@ -118584,7 +119386,7 @@ static int xferOptimization(
sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);
}
}
- if( !HasRowid(pSrc) && pDestIdx->idxType==2 ){
+ if( !HasRowid(pSrc) && pDestIdx->idxType==SQLITE_IDXTYPE_PRIMARYKEY ){
idxInsFlags |= OPFLAG_NCHANGE;
}
sqlite3VdbeAddOp2(v, OP_IdxInsert, iDest, regData);
@@ -119096,6 +119898,9 @@ struct sqlite3_api_routines {
void(*xDestroy)(void*));
/* Version 3.26.0 and later */
const char *(*normalized_sql)(sqlite3_stmt*);
+ /* Version 3.28.0 and later */
+ int (*stmt_isexplain)(sqlite3_stmt*);
+ int (*value_frombind)(sqlite3_value*);
};
/*
@@ -119385,6 +120190,9 @@ typedef int (*sqlite3_loadext_entry)(
#define sqlite3_create_window_function sqlite3_api->create_window_function
/* Version 3.26.0 and later */
#define sqlite3_normalized_sql sqlite3_api->normalized_sql
+/* Version 3.28.0 and later */
+#define sqlite3_stmt_isexplain sqlite3_api->isexplain
+#define sqlite3_value_frombind sqlite3_api->frombind
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
@@ -119844,10 +120652,13 @@ static const sqlite3_api_routines sqlite3Apis = {
sqlite3_create_window_function,
/* Version 3.26.0 and later */
#ifdef SQLITE_ENABLE_NORMALIZE
- sqlite3_normalized_sql
+ sqlite3_normalized_sql,
#else
- 0
+ 0,
#endif
+ /* Version 3.28.0 and later */
+ sqlite3_stmt_isexplain,
+ sqlite3_value_frombind
};
/*
@@ -120295,10 +121106,9 @@ SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
#define PragTyp_WAL_AUTOCHECKPOINT 38
#define PragTyp_WAL_CHECKPOINT 39
#define PragTyp_ACTIVATE_EXTENSIONS 40
-#define PragTyp_HEXKEY 41
-#define PragTyp_KEY 42
-#define PragTyp_LOCK_STATUS 43
-#define PragTyp_STATS 44
+#define PragTyp_KEY 41
+#define PragTyp_LOCK_STATUS 42
+#define PragTyp_STATS 43
/* Property flags associated with various pragma. */
#define PragFlg_NeedSchema 0x01 /* Force schema load before running */
@@ -120427,11 +121237,13 @@ static const PragmaName aPragmaName[] = {
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
#endif
+#if !defined(SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA)
{/* zName: */ "case_sensitive_like",
/* ePragTyp: */ PragTyp_CASE_SENSITIVE_LIKE,
/* ePragFlg: */ PragFlg_NoColumns,
/* ColNames: */ 0, 0,
/* iArg: */ 0 },
+#endif
{/* zName: */ "cell_size_check",
/* ePragTyp: */ PragTyp_FLAG,
/* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1,
@@ -120569,12 +121381,12 @@ static const PragmaName aPragmaName[] = {
#endif
#if defined(SQLITE_HAS_CODEC)
{/* zName: */ "hexkey",
- /* ePragTyp: */ PragTyp_HEXKEY,
+ /* ePragTyp: */ PragTyp_KEY,
/* ePragFlg: */ 0,
/* ColNames: */ 0, 0,
/* iArg: */ 2 },
{/* zName: */ "hexrekey",
- /* ePragTyp: */ PragTyp_HEXKEY,
+ /* ePragTyp: */ PragTyp_KEY,
/* ePragFlg: */ 0,
/* ColNames: */ 0, 0,
/* iArg: */ 3 },
@@ -121535,6 +122347,11 @@ SQLITE_PRIVATE void sqlite3Pragma(
** then do a query */
eMode = PAGER_JOURNALMODE_QUERY;
}
+ if( eMode==PAGER_JOURNALMODE_OFF && (db->flags & SQLITE_Defensive)!=0 ){
+ /* Do not allow journal-mode "OFF" in defensive since the database
+ ** can become corrupted using ordinary SQL when the journal is off */
+ eMode = PAGER_JOURNALMODE_QUERY;
+ }
}
if( eMode==PAGER_JOURNALMODE_QUERY && pId2->n==0 ){
/* Convert "PRAGMA journal_mode" into "PRAGMA main.journal_mode" */
@@ -122312,6 +123129,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
#endif /* !defined(SQLITE_OMIT_TRIGGER) */
#endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
+#ifndef SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA
/* Reinstall the LIKE and GLOB functions. The variant of LIKE
** used will be case sensitive or not depending on the RHS.
*/
@@ -122321,6 +123139,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
}
}
break;
+#endif /* SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA */
#ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX
# define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100
@@ -123014,28 +123833,30 @@ SQLITE_PRIVATE void sqlite3Pragma(
*/
case PragTyp_KEY: {
if( zRight ){
- int n = pPragma->iArg<4 ? sqlite3Strlen30(zRight) : -1;
- if( (pPragma->iArg & 1)==0 ){
- sqlite3_key_v2(db, zDb, zRight, n);
+ char zBuf[40];
+ const char *zKey = zRight;
+ int n;
+ if( pPragma->iArg==2 || pPragma->iArg==3 ){
+ u8 iByte;
+ int i;
+ for(i=0, iByte=0; i<sizeof(zBuf)*2 && sqlite3Isxdigit(zRight[i]); i++){
+ iByte = (iByte<<4) + sqlite3HexToInt(zRight[i]);
+ if( (i&1)!=0 ) zBuf[i/2] = iByte;
+ }
+ zKey = zBuf;
+ n = i/2;
}else{
- sqlite3_rekey_v2(db, zDb, zRight, n);
- }
- }
- break;
- }
- case PragTyp_HEXKEY: {
- if( zRight ){
- u8 iByte;
- int i;
- char zKey[40];
- for(i=0, iByte=0; i<sizeof(zKey)*2 && sqlite3Isxdigit(zRight[i]); i++){
- iByte = (iByte<<4) + sqlite3HexToInt(zRight[i]);
- if( (i&1)!=0 ) zKey[i/2] = iByte;
+ n = pPragma->iArg<4 ? sqlite3Strlen30(zRight) : -1;
}
if( (pPragma->iArg & 1)==0 ){
- sqlite3_key_v2(db, zDb, zKey, i/2);
+ rc = sqlite3_key_v2(db, zDb, zKey, n);
}else{
- sqlite3_rekey_v2(db, zDb, zKey, i/2);
+ rc = sqlite3_rekey_v2(db, zDb, zKey, n);
+ }
+ if( rc==SQLITE_OK && n!=0 ){
+ sqlite3VdbeSetNumCols(v, 1);
+ sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "ok", SQLITE_STATIC);
+ returnSingleText(v, "ok");
}
}
break;
@@ -124676,7 +125497,7 @@ static void addWhereTerm(
ExprSetVVAProperty(pEq, EP_NoReduce);
pEq->iRightJoinTable = (i16)pE2->iTable;
}
- *ppWhere = sqlite3ExprAnd(db, *ppWhere, pEq);
+ *ppWhere = sqlite3ExprAnd(pParse, *ppWhere, pEq);
}
/*
@@ -124810,7 +125631,7 @@ static int sqliteProcessJoin(Parse *pParse, Select *p){
*/
if( pRight->pOn ){
if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor);
- p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn);
+ p->pWhere = sqlite3ExprAnd(pParse, p->pWhere, pRight->pOn);
pRight->pOn = 0;
}
@@ -126417,9 +127238,6 @@ SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
if( pTab==0 ){
return 0;
}
- /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
- ** is disabled */
- assert( db->lookaside.bDisable );
pTab->nTabRef = 1;
pTab->zName = 0;
pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
@@ -126861,6 +127679,7 @@ static int multiSelect(
*/
assert( p && p->pPrior ); /* Calling function guarantees this much */
assert( (p->selFlags & SF_Recursive)==0 || p->op==TK_ALL || p->op==TK_UNION );
+ assert( p->selFlags & SF_Compound );
db = pParse->db;
pPrior = p->pPrior;
dest = *pDest;
@@ -128355,7 +129174,7 @@ static int flattenSubquery(
if( isLeftJoin>0 ){
setJoinExpr(pWhere, iNewParent);
}
- pParent->pWhere = sqlite3ExprAnd(db, pWhere, pParent->pWhere);
+ pParent->pWhere = sqlite3ExprAnd(pParse, pWhere, pParent->pWhere);
if( db->mallocFailed==0 ){
SubstContext x;
x.pParse = pParse;
@@ -128366,10 +129185,10 @@ static int flattenSubquery(
substSelect(&x, pParent, 0);
}
- /* The flattened query is distinct if either the inner or the
- ** outer query is distinct.
- */
- pParent->selFlags |= pSub->selFlags & SF_Distinct;
+ /* The flattened query is a compound if either the inner or the
+ ** outer query is a compound. */
+ pParent->selFlags |= pSub->selFlags & SF_Compound;
+ assert( (pSub->selFlags & SF_Distinct)==0 ); /* restriction (17b) */
/*
** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
@@ -128690,9 +129509,9 @@ static int pushDownWhereTerms(
x.pEList = pSubq->pEList;
pNew = substExpr(&x, pNew);
if( pSubq->selFlags & SF_Aggregate ){
- pSubq->pHaving = sqlite3ExprAnd(pParse->db, pSubq->pHaving, pNew);
+ pSubq->pHaving = sqlite3ExprAnd(pParse, pSubq->pHaving, pNew);
}else{
- pSubq->pWhere = sqlite3ExprAnd(pParse->db, pSubq->pWhere, pNew);
+ pSubq->pWhere = sqlite3ExprAnd(pParse, pSubq->pWhere, pNew);
}
pSubq = pSubq->pPrior;
}
@@ -129118,7 +129937,7 @@ SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, struct SrcList_item *pFr
pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
pTab->tabFlags |= TF_Ephemeral;
- return SQLITE_OK;
+ return pParse->nErr ? SQLITE_ERROR : SQLITE_OK;
}
/*
@@ -129164,6 +129983,10 @@ static int selectExpander(Walker *pWalker, Select *p){
if( (selFlags & SF_Expanded)!=0 ){
return WRC_Prune;
}
+ if( pWalker->eCode ){
+ /* Renumber selId because it has been copied from a view */
+ p->selId = ++pParse->nSelect;
+ }
pTabList = p->pSrc;
pEList = p->pEList;
sqlite3WithPush(pParse, p->pWith, 0);
@@ -129213,12 +130036,15 @@ static int selectExpander(Walker *pWalker, Select *p){
#if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
if( IsVirtual(pTab) || pTab->pSelect ){
i16 nCol;
+ u8 eCodeOrig = pWalker->eCode;
if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
assert( pFrom->pSelect==0 );
pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
nCol = pTab->nCol;
pTab->nCol = -1;
+ pWalker->eCode = 1; /* Turn on Select.selId renumbering */
sqlite3WalkSelect(pWalker, pFrom->pSelect);
+ pWalker->eCode = eCodeOrig;
pTab->nCol = nCol;
}
#endif
@@ -129468,6 +130294,7 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
}
w.xSelectCallback = selectExpander;
w.xSelectCallback2 = selectPopWith;
+ w.eCode = 0;
sqlite3WalkSelect(&w, pSelect);
}
@@ -129627,7 +130454,7 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
**
** If regAcc is non-zero and there are no min() or max() aggregates
** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator
-** registers i register regAcc contains 0. The caller will take care
+** registers if register regAcc contains 0. The caller will take care
** of setting and clearing regAcc.
*/
static void updateAccumulator(Parse *pParse, int regAcc, AggInfo *pAggInfo){
@@ -129739,7 +130566,7 @@ static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){
if( pNew ){
Expr *pWhere = pS->pWhere;
SWAP(Expr, *pNew, *pExpr);
- pNew = sqlite3ExprAnd(db, pWhere, pNew);
+ pNew = sqlite3ExprAnd(pWalker->pParse, pWhere, pNew);
pS->pWhere = pNew;
pWalker->eCode = 1;
}
@@ -129794,15 +130621,19 @@ static struct SrcList_item *isSelfJoinView(
if( pItem->pSelect==0 ) continue;
if( pItem->fg.viaCoroutine ) continue;
if( pItem->zName==0 ) continue;
- if( sqlite3_stricmp(pItem->zDatabase, pThis->zDatabase)!=0 ) continue;
+ assert( pItem->pTab!=0 );
+ assert( pThis->pTab!=0 );
+ if( pItem->pTab->pSchema!=pThis->pTab->pSchema ) continue;
if( sqlite3_stricmp(pItem->zName, pThis->zName)!=0 ) continue;
pS1 = pItem->pSelect;
- if( pThis->pSelect->selId!=pS1->selId ){
+ if( pItem->pTab->pSchema==0 && pThis->pSelect->selId!=pS1->selId ){
/* The query flattener left two different CTE tables with identical
** names in the same FROM clause. */
continue;
}
- if( sqlite3ExprCompare(0, pThis->pSelect->pWhere, pS1->pWhere, -1) ){
+ if( sqlite3ExprCompare(0, pThis->pSelect->pWhere, pS1->pWhere, -1)
+ || sqlite3ExprCompare(0, pThis->pSelect->pHaving, pS1->pHaving, -1)
+ ){
/* The view was modified by some other optimization such as
** pushDownWhereTerms() */
continue;
@@ -129827,7 +130658,8 @@ static struct SrcList_item *isSelfJoinView(
** * The subquery is a UNION ALL of two or more terms
** * The subquery does not have a LIMIT clause
** * There is no WHERE or GROUP BY or HAVING clauses on the subqueries
-** * The outer query is a simple count(*)
+** * The outer query is a simple count(*) with no WHERE clause or other
+** extraneous syntax.
**
** Return TRUE if the optimization is undertaken.
*/
@@ -129838,6 +130670,8 @@ static int countOfViewOptimization(Parse *pParse, Select *p){
sqlite3 *db;
if( (p->selFlags & SF_Aggregate)==0 ) return 0; /* This is an aggregate */
if( p->pEList->nExpr!=1 ) return 0; /* Single result column */
+ if( p->pWhere ) return 0;
+ if( p->pGroupBy ) return 0;
pExpr = p->pEList->a[0].pExpr;
if( pExpr->op!=TK_AGG_FUNCTION ) return 0; /* Result is an aggregate */
if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0; /* Is count() */
@@ -132488,11 +133322,12 @@ SQLITE_PRIVATE void sqlite3Update(
Index *pIdx; /* For looping over indices */
Index *pPk; /* The PRIMARY KEY index for WITHOUT ROWID tables */
int nIdx; /* Number of indices that need updating */
+ int nAllIdx; /* Total number of indexes */
int iBaseCur; /* Base cursor number */
int iDataCur; /* Cursor for the canonical data btree */
int iIdxCur; /* Cursor for the first index */
sqlite3 *db; /* The database structure */
- int *aRegIdx = 0; /* First register in array assigned to each index */
+ int *aRegIdx = 0; /* Registers for to each index and the main table */
int *aXRef = 0; /* aXRef[i] is the index in pChanges->a[] of the
** an expression for the i-th column of the table.
** aXRef[i]==-1 if the i-th column is not changed. */
@@ -132606,10 +133441,10 @@ SQLITE_PRIVATE void sqlite3Update(
/* Allocate space for aXRef[], aRegIdx[], and aToOpen[].
** Initialize aXRef[] and aToOpen[] to their default values.
*/
- aXRef = sqlite3DbMallocRawNN(db, sizeof(int) * (pTab->nCol+nIdx) + nIdx+2 );
+ aXRef = sqlite3DbMallocRawNN(db, sizeof(int) * (pTab->nCol+nIdx+1) + nIdx+2 );
if( aXRef==0 ) goto update_cleanup;
aRegIdx = aXRef+pTab->nCol;
- aToOpen = (u8*)(aRegIdx+nIdx);
+ aToOpen = (u8*)(aRegIdx+nIdx+1);
memset(aToOpen, 1, nIdx+1);
aToOpen[nIdx+1] = 0;
for(i=0; i<pTab->nCol; i++) aXRef[i] = -1;
@@ -132688,7 +133523,7 @@ SQLITE_PRIVATE void sqlite3Update(
** the key for accessing each index.
*/
if( onError==OE_Replace ) bReplace = 1;
- for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
+ for(nAllIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nAllIdx++){
int reg;
if( chngKey || hasFK>1 || pIdx==pPk
|| indexWhereClauseMightChange(pIdx,aXRef,chngRowid)
@@ -132708,9 +133543,10 @@ SQLITE_PRIVATE void sqlite3Update(
}
}
}
- if( reg==0 ) aToOpen[j+1] = 0;
- aRegIdx[j] = reg;
+ if( reg==0 ) aToOpen[nAllIdx+1] = 0;
+ aRegIdx[nAllIdx] = reg;
}
+ aRegIdx[nAllIdx] = ++pParse->nMem; /* Register storing the table record */
if( bReplace ){
/* If REPLACE conflict resolution might be invoked, open cursors on all
** indexes in case they are needed to delete records. */
@@ -132725,7 +133561,13 @@ SQLITE_PRIVATE void sqlite3Update(
/* Allocate required registers. */
if( !IsVirtual(pTab) ){
- regRowSet = ++pParse->nMem;
+ /* For now, regRowSet and aRegIdx[nAllIdx] share the same register.
+ ** If regRowSet turns out to be needed, then aRegIdx[nAllIdx] will be
+ ** reallocated. aRegIdx[nAllIdx] is the register in which the main
+ ** table record is written. regRowSet holds the RowSet for the
+ ** two-pass update algorithm. */
+ assert( aRegIdx[nAllIdx]==pParse->nMem );
+ regRowSet = aRegIdx[nAllIdx];
regOldRowid = regNewRowid = ++pParse->nMem;
if( chngPk || pTrigger || hasFK ){
regOld = pParse->nMem + 1;
@@ -132855,6 +133697,8 @@ SQLITE_PRIVATE void sqlite3Update(
** leave it in register regOldRowid. */
sqlite3VdbeAddOp2(v, OP_Rowid, iDataCur, regOldRowid);
if( eOnePass==ONEPASS_OFF ){
+ /* We need to use regRowSet, so reallocate aRegIdx[nAllIdx] */
+ aRegIdx[nAllIdx] = ++pParse->nMem;
sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid);
}
}else{
@@ -133686,6 +134530,7 @@ SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse, Token *pNm, Expr *pInto){
Vdbe *v = sqlite3GetVdbe(pParse);
int iDb = 0;
if( v==0 ) goto build_vacuum_end;
+ if( pParse->nErr ) goto build_vacuum_end;
if( pNm ){
#ifndef SQLITE_BUG_COMPATIBLE_20160819
/* Default behavior: Report an error if the argument to VACUUM is
@@ -133719,11 +134564,11 @@ build_vacuum_end:
/*
** This routine implements the OP_Vacuum opcode of the VDBE.
*/
-SQLITE_PRIVATE int sqlite3RunVacuum(
+SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3RunVacuum(
char **pzErrMsg, /* Write error message here */
sqlite3 *db, /* Database connection */
int iDb, /* Which attached DB to vacuum */
- sqlite3_value *pOut /* Write results here, if not NULL */
+ sqlite3_value *pOut /* Write results here, if not NULL. VACUUM INTO */
){
int rc = SQLITE_OK; /* Return code from service routines */
Btree *pMain; /* The database being vacuumed */
@@ -133732,6 +134577,7 @@ SQLITE_PRIVATE int sqlite3RunVacuum(
u64 saved_flags; /* Saved value of db->flags */
int saved_nChange; /* Saved value of db->nChange */
int saved_nTotalChange; /* Saved value of db->nTotalChange */
+ u32 saved_openFlags; /* Saved value of db->openFlags */
u8 saved_mTrace; /* Saved trace settings */
Db *pDb = 0; /* Database to detach at end of vacuum */
int isMemDb; /* True if vacuuming a :memory: database */
@@ -133742,18 +134588,21 @@ SQLITE_PRIVATE int sqlite3RunVacuum(
if( !db->autoCommit ){
sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");
- return SQLITE_ERROR;
+ return SQLITE_ERROR; /* IMP: R-12218-18073 */
}
if( db->nVdbeActive>1 ){
sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress");
- return SQLITE_ERROR;
+ return SQLITE_ERROR; /* IMP: R-15610-35227 */
}
+ saved_openFlags = db->openFlags;
if( pOut ){
if( sqlite3_value_type(pOut)!=SQLITE_TEXT ){
sqlite3SetString(pzErrMsg, db, "non-text filename");
return SQLITE_ERROR;
}
zOut = (const char*)sqlite3_value_text(pOut);
+ db->openFlags &= ~SQLITE_OPEN_READONLY;
+ db->openFlags |= SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE;
}else{
zOut = "";
}
@@ -133792,6 +134641,7 @@ SQLITE_PRIVATE int sqlite3RunVacuum(
*/
nDb = db->nDb;
rc = execSqlF(db, pzErrMsg, "ATTACH %Q AS vacuum_db", zOut);
+ db->openFlags = saved_openFlags;
if( rc!=SQLITE_OK ) goto end_of_vacuum;
assert( (db->nDb-1)==nDb );
pDb = &db->aDb[nDb];
@@ -133805,6 +134655,7 @@ SQLITE_PRIVATE int sqlite3RunVacuum(
sqlite3SetString(pzErrMsg, db, "output file already exists");
goto end_of_vacuum;
}
+ db->mDbFlags |= DBFLAG_VacuumInto;
}
nRes = sqlite3BtreeGetOptimalReserve(pMain);
@@ -134293,9 +135144,13 @@ SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){
** string will be freed automatically when the table is
** deleted.
*/
-static void addModuleArgument(sqlite3 *db, Table *pTable, char *zArg){
- int nBytes = sizeof(char *)*(2+pTable->nModuleArg);
+static void addModuleArgument(Parse *pParse, Table *pTable, char *zArg){
+ sqlite3_int64 nBytes = sizeof(char *)*(2+pTable->nModuleArg);
char **azModuleArg;
+ sqlite3 *db = pParse->db;
+ if( pTable->nModuleArg+3>=db->aLimit[SQLITE_LIMIT_COLUMN] ){
+ sqlite3ErrorMsg(pParse, "too many columns on %s", pTable->zName);
+ }
azModuleArg = sqlite3DbRealloc(db, pTable->azModuleArg, nBytes);
if( azModuleArg==0 ){
sqlite3DbFree(db, zArg);
@@ -134330,9 +135185,9 @@ SQLITE_PRIVATE void sqlite3VtabBeginParse(
db = pParse->db;
assert( pTable->nModuleArg==0 );
- addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName));
- addModuleArgument(db, pTable, 0);
- addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName));
+ addModuleArgument(pParse, pTable, sqlite3NameFromToken(db, pModuleName));
+ addModuleArgument(pParse, pTable, 0);
+ addModuleArgument(pParse, pTable, sqlite3DbStrDup(db, pTable->zName));
assert( (pParse->sNameToken.z==pName2->z && pName2->z!=0)
|| (pParse->sNameToken.z==pName1->z && pName2->z==0)
);
@@ -134365,7 +135220,7 @@ static void addArgumentToVtab(Parse *pParse){
const char *z = (const char*)pParse->sArg.z;
int n = pParse->sArg.n;
sqlite3 *db = pParse->db;
- addModuleArgument(db, pParse->pNewTable, sqlite3DbStrNDup(db, z, n));
+ addModuleArgument(pParse, pParse->pNewTable, sqlite3DbStrNDup(db, z, n));
}
}
@@ -134654,7 +135509,8 @@ static int growVTrans(sqlite3 *db){
/* Grow the sqlite3.aVTrans array if required */
if( (db->nVTrans%ARRAY_INCR)==0 ){
VTable **aVTrans;
- int nBytes = sizeof(sqlite3_vtab *) * (db->nVTrans + ARRAY_INCR);
+ sqlite3_int64 nBytes = sizeof(sqlite3_vtab*)*
+ ((sqlite3_int64)db->nVTrans + ARRAY_INCR);
aVTrans = sqlite3DbRealloc(db, (void *)db->aVTrans, nBytes);
if( !aVTrans ){
return SQLITE_NOMEM_BKPT;
@@ -134827,6 +135683,7 @@ SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab
p = vtabDisconnectAll(db, pTab);
xDestroy = p->pMod->pModule->xDestroy;
assert( xDestroy!=0 ); /* Checked before the virtual table is created */
+ pTab->nTabRef++;
rc = xDestroy(p->pVtab);
/* Remove the sqlite3_vtab* from the aVTrans[] array, if applicable */
if( rc==SQLITE_OK ){
@@ -134835,6 +135692,7 @@ SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab
pTab->pVTable = 0;
sqlite3VtabUnlock(p);
}
+ sqlite3DeleteTable(db, pTab);
}
return rc;
@@ -135150,9 +136008,9 @@ SQLITE_PRIVATE int sqlite3VtabEponymousTableInit(Parse *pParse, Module *pMod){
pTab->pSchema = db->aDb[0].pSchema;
assert( pTab->nModuleArg==0 );
pTab->iPKey = -1;
- addModuleArgument(db, pTab, sqlite3DbStrDup(db, pTab->zName));
- addModuleArgument(db, pTab, 0);
- addModuleArgument(db, pTab, sqlite3DbStrDup(db, pTab->zName));
+ addModuleArgument(pParse, pTab, sqlite3DbStrDup(db, pTab->zName));
+ addModuleArgument(pParse, pTab, 0);
+ addModuleArgument(pParse, pTab, sqlite3DbStrDup(db, pTab->zName));
rc = vtabCallConstructor(db, pTab, pMod, pModule->xConnect, &zErr);
if( rc ){
sqlite3ErrorMsg(pParse, "%s", zErr);
@@ -135277,6 +136135,8 @@ SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
** planner logic in "where.c". These definitions are broken out into
** a separate source file for easier editing.
*/
+#ifndef SQLITE_WHEREINT_H
+#define SQLITE_WHEREINT_H
/*
** Trace output macros
@@ -135848,6 +136708,8 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereC
#define WHERE_PARTIALIDX 0x00020000 /* The automatic index is partial */
#define WHERE_IN_EARLYOUT 0x00040000 /* Perhaps quit IN loops early */
+#endif /* !defined(SQLITE_WHEREINT_H) */
+
/************** End of whereInt.h ********************************************/
/************** Continuing where we left off in wherecode.c ******************/
@@ -136830,7 +137692,7 @@ static void codeCursorHint(
}
/* If we survive all prior tests, that means this term is worth hinting */
- pExpr = sqlite3ExprAnd(db, pExpr, sqlite3ExprDup(db, pTerm->pExpr, 0));
+ pExpr = sqlite3ExprAnd(pParse, pExpr, sqlite3ExprDup(db, pTerm->pExpr, 0));
}
if( pExpr!=0 ){
sWalker.xExprCallback = codeCursorHintFixExpr;
@@ -136991,6 +137853,34 @@ static void whereIndexExprTrans(
}
/*
+** The pTruth expression is always true because it is the WHERE clause
+** a partial index that is driving a query loop. Look through all of the
+** WHERE clause terms on the query, and if any of those terms must be
+** true because pTruth is true, then mark those WHERE clause terms as
+** coded.
+*/
+static void whereApplyPartialIndexConstraints(
+ Expr *pTruth,
+ int iTabCur,
+ WhereClause *pWC
+){
+ int i;
+ WhereTerm *pTerm;
+ while( pTruth->op==TK_AND ){
+ whereApplyPartialIndexConstraints(pTruth->pLeft, iTabCur, pWC);
+ pTruth = pTruth->pRight;
+ }
+ for(i=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
+ Expr *pExpr;
+ if( pTerm->wtFlags & TERM_CODED ) continue;
+ pExpr = pTerm->pExpr;
+ if( sqlite3ExprCompare(0, pExpr, pTruth, iTabCur)==0 ){
+ pTerm->wtFlags |= TERM_CODED;
+ }
+ }
+}
+
+/*
** Generate code for the start of the iLevel-th loop in the WHERE clause
** implementation described by pWInfo.
*/
@@ -137599,6 +138489,14 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
whereIndexExprTrans(pIdx, iCur, iIdxCur, pWInfo);
}
+ /* If a partial index is driving the loop, try to eliminate WHERE clause
+ ** terms from the query that must be true due to the WHERE clause of
+ ** the partial index
+ */
+ if( pIdx->pPartIdxWhere ){
+ whereApplyPartialIndexConstraints(pIdx->pPartIdxWhere, iCur, pWC);
+ }
+
/* Record the instruction used to terminate the loop. */
if( pLoop->wsFlags & WHERE_ONEROW ){
pLevel->op = OP_Noop;
@@ -137759,10 +138657,15 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
if( (pWC->a[iTerm].eOperator & WO_ALL)==0 ) continue;
testcase( pWC->a[iTerm].wtFlags & TERM_ORINFO );
pExpr = sqlite3ExprDup(db, pExpr, 0);
- pAndExpr = sqlite3ExprAnd(db, pAndExpr, pExpr);
+ pAndExpr = sqlite3ExprAnd(pParse, pAndExpr, pExpr);
}
if( pAndExpr ){
- pAndExpr = sqlite3PExpr(pParse, TK_AND|TKFLG_DONTFOLD, 0, pAndExpr);
+ /* The extra 0x10000 bit on the opcode is masked off and does not
+ ** become part of the new Expr.op. However, it does make the
+ ** op==TK_AND comparison inside of sqlite3PExpr() false, and this
+ ** prevents sqlite3PExpr() from implementing AND short-circuit
+ ** optimization, which we do not want here. */
+ pAndExpr = sqlite3PExpr(pParse, TK_AND|0x10000, 0, pAndExpr);
}
}
@@ -137905,7 +138808,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
sqlite3VdbeGoto(v, pLevel->addrBrk);
sqlite3VdbeResolveLabel(v, iLoopBody);
- if( pWInfo->nLevel>1 ) sqlite3StackFree(db, pOrTab);
+ if( pWInfo->nLevel>1 ){ sqlite3StackFree(db, pOrTab); }
if( !untestedTerms ) disableTerm(pLevel, pTerm);
}else
#endif /* SQLITE_OMIT_OR_OPTIMIZATION */
@@ -137992,8 +138895,9 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
u32 x = pLevel->iLikeRepCntr;
if( x>0 ){
skipLikeAddr = sqlite3VdbeAddOp1(v, (x&1)?OP_IfNot:OP_If,(int)(x>>1));
+ VdbeCoverageIf(v, (x&1)==1);
+ VdbeCoverageIf(v, (x&1)==0);
}
- VdbeCoverage(v);
#endif
}
#ifdef WHERETRACE_ENABLED /* 0xffff */
@@ -138337,27 +139241,33 @@ static int isLikeOrGlob(
zNew[iTo++] = zNew[iFrom];
}
zNew[iTo] = 0;
+ assert( iTo>0 );
- /* If the RHS begins with a digit or a minus sign, then the LHS must be
- ** an ordinary column (not a virtual table column) with TEXT affinity.
- ** Otherwise the LHS might be numeric and "lhs >= rhs" would be false
- ** even though "lhs LIKE rhs" is true. But if the RHS does not start
- ** with a digit or '-', then "lhs LIKE rhs" will always be false if
- ** the LHS is numeric and so the optimization still works.
+ /* If the LHS is not an ordinary column with TEXT affinity, then the
+ ** pattern prefix boundaries (both the start and end boundaries) must
+ ** not look like a number. Otherwise the pattern might be treated as
+ ** a number, which will invalidate the LIKE optimization.
**
- ** 2018-09-10 ticket c94369cae9b561b1f996d0054bfab11389f9d033
- ** The RHS pattern must not be '/%' because the termination condition
- ** will then become "x<'0'" and if the affinity is numeric, will then
- ** be converted into "x<0", which is incorrect.
+ ** Getting this right has been a persistent source of bugs in the
+ ** LIKE optimization. See, for example:
+ ** 2018-09-10 https://sqlite.org/src/info/c94369cae9b561b1
+ ** 2019-05-02 https://sqlite.org/src/info/b043a54c3de54b28
+ ** 2019-06-10 https://sqlite.org/src/info/fd76310a5e843e07
+ ** 2019-06-14 https://sqlite.org/src/info/ce8717f0885af975
*/
- if( sqlite3Isdigit(zNew[0])
- || zNew[0]=='-'
- || (zNew[0]+1=='0' && iTo==1)
+ if( pLeft->op!=TK_COLUMN
+ || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT
+ || IsVirtual(pLeft->y.pTab) /* Value might be numeric */
){
- if( pLeft->op!=TK_COLUMN
- || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT
- || IsVirtual(pLeft->y.pTab) /* Value might be numeric */
- ){
+ int isNum;
+ double rDummy;
+ isNum = sqlite3AtoF(zNew, &rDummy, iTo, SQLITE_UTF8);
+ if( isNum<=0 ){
+ zNew[iTo-1]++;
+ isNum = sqlite3AtoF(zNew, &rDummy, iTo, SQLITE_UTF8);
+ zNew[iTo-1]--;
+ }
+ if( isNum>0 ){
sqlite3ExprDelete(db, pPrefix);
sqlite3ValueFree(pVal);
return 0;
@@ -139595,6 +140505,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereExprUsageNN(WhereMaskSet *pMaskSet, Expr *p){
}else if( p->x.pList ){
mask |= sqlite3WhereExprListUsage(pMaskSet, p->x.pList);
}
+#ifndef SQLITE_OMIT_WINDOWFUNC
+ if( p->op==TK_FUNCTION && p->y.pWin ){
+ mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pPartition);
+ mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pOrderBy);
+ }
+#endif
return mask;
}
SQLITE_PRIVATE Bitmask sqlite3WhereExprUsage(WhereMaskSet *pMaskSet, Expr *p){
@@ -140238,17 +141154,17 @@ static LogEst estLog(LogEst N){
** opcodes into OP_Copy when the table is being accessed via co-routine
** instead of via table lookup.
**
-** If the bIncrRowid parameter is 0, then any OP_Rowid instructions on
-** cursor iTabCur are transformed into OP_Null. Or, if bIncrRowid is non-zero,
-** then each OP_Rowid is transformed into an instruction to increment the
-** value stored in its output register.
+** If the iAutoidxCur is not zero, then any OP_Rowid instructions on
+** cursor iTabCur are transformed into OP_Sequence opcode for the
+** iAutoidxCur cursor, in order to generate unique rowids for the
+** automatic index being generated.
*/
static void translateColumnToCopy(
Parse *pParse, /* Parsing context */
int iStart, /* Translate from this opcode to the end */
int iTabCur, /* OP_Column/OP_Rowid references to this table */
int iRegister, /* The first column is in this register */
- int bIncrRowid /* If non-zero, transform OP_rowid to OP_AddImm(1) */
+ int iAutoidxCur /* If non-zero, cursor of autoindex being generated */
){
Vdbe *v = pParse->pVdbe;
VdbeOp *pOp = sqlite3VdbeGetOp(v, iStart);
@@ -140262,11 +141178,9 @@ static void translateColumnToCopy(
pOp->p2 = pOp->p3;
pOp->p3 = 0;
}else if( pOp->opcode==OP_Rowid ){
- if( bIncrRowid ){
- /* Increment the value stored in the P2 operand of the OP_Rowid. */
- pOp->opcode = OP_AddImm;
- pOp->p1 = pOp->p2;
- pOp->p2 = 1;
+ if( iAutoidxCur ){
+ pOp->opcode = OP_Sequence;
+ pOp->p1 = iAutoidxCur;
}else{
pOp->opcode = OP_Null;
pOp->p1 = 0;
@@ -140413,7 +141327,7 @@ static void constructAutomaticIndex(
&& (pTerm->wtFlags & TERM_VIRTUAL)==0
&& !ExprHasProperty(pExpr, EP_FromJoin)
&& sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor) ){
- pPartial = sqlite3ExprAnd(pParse->db, pPartial,
+ pPartial = sqlite3ExprAnd(pParse, pPartial,
sqlite3ExprDup(pParse->db, pExpr, 0));
}
if( termCanDriveIndex(pTerm, pSrc, notReady) ){
@@ -140540,8 +141454,9 @@ static void constructAutomaticIndex(
if( pTabItem->fg.viaCoroutine ){
sqlite3VdbeChangeP2(v, addrCounter, regBase+n);
testcase( pParse->db->mallocFailed );
+ assert( pLevel->iIdxCur>0 );
translateColumnToCopy(pParse, addrTop, pLevel->iTabCur,
- pTabItem->regResult, 1);
+ pTabItem->regResult, pLevel->iIdxCur);
sqlite3VdbeGoto(v, addrTop);
pTabItem->fg.viaCoroutine = 0;
}else{
@@ -143011,11 +143926,11 @@ static int whereLoopAddVirtual(
rc = whereLoopAddVirtualOne(pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn);
/* If the call to xBestIndex() with all terms enabled produced a plan
- ** that does not require any source tables (IOW: a plan with mBest==0),
- ** then there is no point in making any further calls to xBestIndex()
- ** since they will all return the same result (if the xBestIndex()
- ** implementation is sane). */
- if( rc==SQLITE_OK && (mBest = (pNew->prereq & ~mPrereq))!=0 ){
+ ** that does not require any source tables (IOW: a plan with mBest==0)
+ ** and does not use an IN(...) operator, then there is no point in making
+ ** any further calls to xBestIndex() since they will all return the same
+ ** result (if the xBestIndex() implementation is sane). */
+ if( rc==SQLITE_OK && ((mBest = (pNew->prereq & ~mPrereq))!=0 || bIn) ){
int seenZero = 0; /* True if a plan with no prereqs seen */
int seenZeroNoIN = 0; /* Plan with no prereqs and no IN(...) seen */
Bitmask mPrev = 0;
@@ -145249,6 +146164,96 @@ static void dense_rankValueFunc(sqlite3_context *pCtx){
}
/*
+** Implementation of built-in window function nth_value(). This
+** implementation is used in "slow mode" only - when the EXCLUDE clause
+** is not set to the default value "NO OTHERS".
+*/
+struct NthValueCtx {
+ i64 nStep;
+ sqlite3_value *pValue;
+};
+static void nth_valueStepFunc(
+ sqlite3_context *pCtx,
+ int nArg,
+ sqlite3_value **apArg
+){
+ struct NthValueCtx *p;
+ p = (struct NthValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p));
+ if( p ){
+ i64 iVal;
+ switch( sqlite3_value_numeric_type(apArg[1]) ){
+ case SQLITE_INTEGER:
+ iVal = sqlite3_value_int64(apArg[1]);
+ break;
+ case SQLITE_FLOAT: {
+ double fVal = sqlite3_value_double(apArg[1]);
+ if( ((i64)fVal)!=fVal ) goto error_out;
+ iVal = (i64)fVal;
+ break;
+ }
+ default:
+ goto error_out;
+ }
+ if( iVal<=0 ) goto error_out;
+
+ p->nStep++;
+ if( iVal==p->nStep ){
+ p->pValue = sqlite3_value_dup(apArg[0]);
+ if( !p->pValue ){
+ sqlite3_result_error_nomem(pCtx);
+ }
+ }
+ }
+ UNUSED_PARAMETER(nArg);
+ UNUSED_PARAMETER(apArg);
+ return;
+
+ error_out:
+ sqlite3_result_error(
+ pCtx, "second argument to nth_value must be a positive integer", -1
+ );
+}
+static void nth_valueFinalizeFunc(sqlite3_context *pCtx){
+ struct NthValueCtx *p;
+ p = (struct NthValueCtx*)sqlite3_aggregate_context(pCtx, 0);
+ if( p && p->pValue ){
+ sqlite3_result_value(pCtx, p->pValue);
+ sqlite3_value_free(p->pValue);
+ p->pValue = 0;
+ }
+}
+#define nth_valueInvFunc noopStepFunc
+#define nth_valueValueFunc noopValueFunc
+
+static void first_valueStepFunc(
+ sqlite3_context *pCtx,
+ int nArg,
+ sqlite3_value **apArg
+){
+ struct NthValueCtx *p;
+ p = (struct NthValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p));
+ if( p && p->pValue==0 ){
+ p->pValue = sqlite3_value_dup(apArg[0]);
+ if( !p->pValue ){
+ sqlite3_result_error_nomem(pCtx);
+ }
+ }
+ UNUSED_PARAMETER(nArg);
+ UNUSED_PARAMETER(apArg);
+}
+static void first_valueFinalizeFunc(sqlite3_context *pCtx){
+ struct NthValueCtx *p;
+ p = (struct NthValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p));
+ if( p && p->pValue ){
+ sqlite3_result_value(pCtx, p->pValue);
+ sqlite3_value_free(p->pValue);
+ p->pValue = 0;
+ }
+}
+#define first_valueInvFunc noopStepFunc
+#define first_valueValueFunc noopValueFunc
+
+/*
** Implementation of built-in window function rank(). Assumes that
** the window frame has been set to:
**
@@ -145283,7 +146288,7 @@ static void rankValueFunc(sqlite3_context *pCtx){
** Implementation of built-in window function percent_rank(). Assumes that
** the window frame has been set to:
**
-** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+** GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
*/
static void percent_rankStepFunc(
sqlite3_context *pCtx,
@@ -145291,38 +146296,44 @@ static void percent_rankStepFunc(
sqlite3_value **apArg
){
struct CallCount *p;
- UNUSED_PARAMETER(nArg); assert( nArg==1 );
-
+ UNUSED_PARAMETER(nArg); assert( nArg==0 );
+ UNUSED_PARAMETER(apArg);
p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p));
if( p ){
- if( p->nTotal==0 ){
- p->nTotal = sqlite3_value_int64(apArg[0]);
- }
- p->nStep++;
- if( p->nValue==0 ){
- p->nValue = p->nStep;
- }
+ p->nTotal++;
}
}
+static void percent_rankInvFunc(
+ sqlite3_context *pCtx,
+ int nArg,
+ sqlite3_value **apArg
+){
+ struct CallCount *p;
+ UNUSED_PARAMETER(nArg); assert( nArg==0 );
+ UNUSED_PARAMETER(apArg);
+ p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p));
+ p->nStep++;
+}
static void percent_rankValueFunc(sqlite3_context *pCtx){
struct CallCount *p;
p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p));
if( p ){
+ p->nValue = p->nStep;
if( p->nTotal>1 ){
- double r = (double)(p->nValue-1) / (double)(p->nTotal-1);
+ double r = (double)p->nValue / (double)(p->nTotal-1);
sqlite3_result_double(pCtx, r);
}else{
sqlite3_result_double(pCtx, 0.0);
}
- p->nValue = 0;
}
}
+#define percent_rankFinalizeFunc percent_rankValueFunc
/*
** Implementation of built-in window function cume_dist(). Assumes that
** the window frame has been set to:
**
-** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+** GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING
*/
static void cume_distStepFunc(
sqlite3_context *pCtx,
@@ -145330,24 +146341,33 @@ static void cume_distStepFunc(
sqlite3_value **apArg
){
struct CallCount *p;
- assert( nArg==1 ); UNUSED_PARAMETER(nArg);
-
+ UNUSED_PARAMETER(nArg); assert( nArg==0 );
+ UNUSED_PARAMETER(apArg);
p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p));
if( p ){
- if( p->nTotal==0 ){
- p->nTotal = sqlite3_value_int64(apArg[0]);
- }
- p->nStep++;
+ p->nTotal++;
}
}
-static void cume_distValueFunc(sqlite3_context *pCtx){
+static void cume_distInvFunc(
+ sqlite3_context *pCtx,
+ int nArg,
+ sqlite3_value **apArg
+){
struct CallCount *p;
+ UNUSED_PARAMETER(nArg); assert( nArg==0 );
+ UNUSED_PARAMETER(apArg);
p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p));
- if( p && p->nTotal ){
+ p->nStep++;
+}
+static void cume_distValueFunc(sqlite3_context *pCtx){
+ struct CallCount *p;
+ p = (struct CallCount*)sqlite3_aggregate_context(pCtx, 0);
+ if( p ){
double r = (double)(p->nStep) / (double)(p->nTotal);
sqlite3_result_double(pCtx, r);
}
}
+#define cume_distFinalizeFunc cume_distValueFunc
/*
** Context object for ntile() window function.
@@ -145362,7 +146382,7 @@ struct NtileCtx {
** Implementation of ntile(). This assumes that the window frame has
** been coerced to:
**
-** ROWS UNBOUNDED PRECEDING AND CURRENT ROW
+** ROWS CURRENT ROW AND UNBOUNDED FOLLOWING
*/
static void ntileStepFunc(
sqlite3_context *pCtx,
@@ -145370,32 +146390,42 @@ static void ntileStepFunc(
sqlite3_value **apArg
){
struct NtileCtx *p;
- assert( nArg==2 ); UNUSED_PARAMETER(nArg);
+ assert( nArg==1 ); UNUSED_PARAMETER(nArg);
p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p));
if( p ){
if( p->nTotal==0 ){
p->nParam = sqlite3_value_int64(apArg[0]);
- p->nTotal = sqlite3_value_int64(apArg[1]);
if( p->nParam<=0 ){
sqlite3_result_error(
pCtx, "argument of ntile must be a positive integer", -1
);
}
}
- p->iRow++;
+ p->nTotal++;
}
}
+static void ntileInvFunc(
+ sqlite3_context *pCtx,
+ int nArg,
+ sqlite3_value **apArg
+){
+ struct NtileCtx *p;
+ assert( nArg==1 ); UNUSED_PARAMETER(nArg);
+ UNUSED_PARAMETER(apArg);
+ p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p));
+ p->iRow++;
+}
static void ntileValueFunc(sqlite3_context *pCtx){
struct NtileCtx *p;
p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p));
if( p && p->nParam>0 ){
int nSize = (p->nTotal / p->nParam);
if( nSize==0 ){
- sqlite3_result_int64(pCtx, p->iRow);
+ sqlite3_result_int64(pCtx, p->iRow+1);
}else{
i64 nLarge = p->nTotal - p->nParam*nSize;
i64 iSmall = nLarge*(nSize+1);
- i64 iRow = p->iRow-1;
+ i64 iRow = p->iRow;
assert( (nLarge*(nSize+1) + (p->nParam-nLarge)*nSize)==p->nTotal );
@@ -145407,6 +146437,7 @@ static void ntileValueFunc(sqlite3_context *pCtx){
}
}
}
+#define ntileFinalizeFunc ntileValueFunc
/*
** Context object for last_value() window function.
@@ -145456,7 +146487,7 @@ static void last_valueInvFunc(
}
static void last_valueValueFunc(sqlite3_context *pCtx){
struct LastValueCtx *p;
- p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p));
+ p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, 0);
if( p && p->pVal ){
sqlite3_result_value(pCtx, p->pVal);
}
@@ -145546,12 +146577,12 @@ SQLITE_PRIVATE void sqlite3WindowFunctions(void){
WINDOWFUNCX(row_number, 0, 0),
WINDOWFUNCX(dense_rank, 0, 0),
WINDOWFUNCX(rank, 0, 0),
- WINDOWFUNCX(percent_rank, 0, SQLITE_FUNC_WINDOW_SIZE),
- WINDOWFUNCX(cume_dist, 0, SQLITE_FUNC_WINDOW_SIZE),
- WINDOWFUNCX(ntile, 1, SQLITE_FUNC_WINDOW_SIZE),
+ WINDOWFUNCALL(percent_rank, 0, 0),
+ WINDOWFUNCALL(cume_dist, 0, 0),
+ WINDOWFUNCALL(ntile, 1, 0),
WINDOWFUNCALL(last_value, 1, 0),
- WINDOWFUNCNOOP(nth_value, 2, 0),
- WINDOWFUNCNOOP(first_value, 1, 0),
+ WINDOWFUNCALL(nth_value, 2, 0),
+ WINDOWFUNCALL(first_value, 1, 0),
WINDOWFUNCNOOP(lead, 1, 0),
WINDOWFUNCNOOP(lead, 2, 0),
WINDOWFUNCNOOP(lead, 3, 0),
@@ -145562,6 +146593,17 @@ SQLITE_PRIVATE void sqlite3WindowFunctions(void){
sqlite3InsertBuiltinFuncs(aWindowFuncs, ArraySize(aWindowFuncs));
}
+static Window *windowFind(Parse *pParse, Window *pList, const char *zName){
+ Window *p;
+ for(p=pList; p; p=p->pNextWin){
+ if( sqlite3StrICmp(p->zName, zName)==0 ) break;
+ }
+ if( p==0 ){
+ sqlite3ErrorMsg(pParse, "no such window: %s", zName);
+ }
+ return p;
+}
+
/*
** This function is called immediately after resolving the function name
** for a window function within a SELECT statement. Argument pList is a
@@ -145585,48 +146627,66 @@ SQLITE_PRIVATE void sqlite3WindowUpdate(
Window *pWin, /* Window frame to update */
FuncDef *pFunc /* Window function definition */
){
- if( pWin->zName && pWin->eType==0 ){
- Window *p;
- for(p=pList; p; p=p->pNextWin){
- if( sqlite3StrICmp(p->zName, pWin->zName)==0 ) break;
- }
- if( p==0 ){
- sqlite3ErrorMsg(pParse, "no such window: %s", pWin->zName);
- return;
- }
+ if( pWin->zName && pWin->eFrmType==0 ){
+ Window *p = windowFind(pParse, pList, pWin->zName);
+ if( p==0 ) return;
pWin->pPartition = sqlite3ExprListDup(pParse->db, p->pPartition, 0);
pWin->pOrderBy = sqlite3ExprListDup(pParse->db, p->pOrderBy, 0);
pWin->pStart = sqlite3ExprDup(pParse->db, p->pStart, 0);
pWin->pEnd = sqlite3ExprDup(pParse->db, p->pEnd, 0);
pWin->eStart = p->eStart;
pWin->eEnd = p->eEnd;
- pWin->eType = p->eType;
+ pWin->eFrmType = p->eFrmType;
+ pWin->eExclude = p->eExclude;
+ }else{
+ sqlite3WindowChain(pParse, pWin, pList);
}
+ if( (pWin->eFrmType==TK_RANGE)
+ && (pWin->pStart || pWin->pEnd)
+ && (pWin->pOrderBy==0 || pWin->pOrderBy->nExpr!=1)
+ ){
+ sqlite3ErrorMsg(pParse,
+ "RANGE with offset PRECEDING/FOLLOWING requires one ORDER BY expression"
+ );
+ }else
if( pFunc->funcFlags & SQLITE_FUNC_WINDOW ){
sqlite3 *db = pParse->db;
if( pWin->pFilter ){
sqlite3ErrorMsg(pParse,
"FILTER clause may only be used with aggregate window functions"
);
- }else
- if( pFunc->zName==row_numberName || pFunc->zName==ntileName ){
- sqlite3ExprDelete(db, pWin->pStart);
- sqlite3ExprDelete(db, pWin->pEnd);
- pWin->pStart = pWin->pEnd = 0;
- pWin->eType = TK_ROWS;
- pWin->eStart = TK_UNBOUNDED;
- pWin->eEnd = TK_CURRENT;
- }else
-
- if( pFunc->zName==dense_rankName || pFunc->zName==rankName
- || pFunc->zName==percent_rankName || pFunc->zName==cume_distName
- ){
- sqlite3ExprDelete(db, pWin->pStart);
- sqlite3ExprDelete(db, pWin->pEnd);
- pWin->pStart = pWin->pEnd = 0;
- pWin->eType = TK_RANGE;
- pWin->eStart = TK_UNBOUNDED;
- pWin->eEnd = TK_CURRENT;
+ }else{
+ struct WindowUpdate {
+ const char *zFunc;
+ int eFrmType;
+ int eStart;
+ int eEnd;
+ } aUp[] = {
+ { row_numberName, TK_ROWS, TK_UNBOUNDED, TK_CURRENT },
+ { dense_rankName, TK_RANGE, TK_UNBOUNDED, TK_CURRENT },
+ { rankName, TK_RANGE, TK_UNBOUNDED, TK_CURRENT },
+ { percent_rankName, TK_GROUPS, TK_CURRENT, TK_UNBOUNDED },
+ { cume_distName, TK_GROUPS, TK_FOLLOWING, TK_UNBOUNDED },
+ { ntileName, TK_ROWS, TK_CURRENT, TK_UNBOUNDED },
+ { leadName, TK_ROWS, TK_UNBOUNDED, TK_UNBOUNDED },
+ { lagName, TK_ROWS, TK_UNBOUNDED, TK_CURRENT },
+ };
+ int i;
+ for(i=0; i<ArraySize(aUp); i++){
+ if( pFunc->zName==aUp[i].zFunc ){
+ sqlite3ExprDelete(db, pWin->pStart);
+ sqlite3ExprDelete(db, pWin->pEnd);
+ pWin->pEnd = pWin->pStart = 0;
+ pWin->eFrmType = aUp[i].eFrmType;
+ pWin->eStart = aUp[i].eStart;
+ pWin->eEnd = aUp[i].eEnd;
+ pWin->eExclude = 0;
+ if( pWin->eStart==TK_FOLLOWING ){
+ pWin->pStart = sqlite3Expr(db, TK_INTEGER, "1");
+ }
+ break;
+ }
+ }
}
}
pWin->pFunc = pFunc;
@@ -145641,6 +146701,7 @@ struct WindowRewrite {
Window *pWin;
SrcList *pSrc;
ExprList *pSub;
+ Table *pTab;
Select *pSubSelect; /* Current sub-select, if any */
};
@@ -145701,6 +146762,7 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){
pExpr->op = TK_COLUMN;
pExpr->iColumn = p->pSub->nExpr-1;
pExpr->iTable = p->pWin->iEphCsr;
+ pExpr->y.pTab = p->pTab;
}
break;
@@ -145744,6 +146806,7 @@ static void selectWindowRewriteEList(
Window *pWin,
SrcList *pSrc,
ExprList *pEList, /* Rewrite expressions in this list */
+ Table *pTab,
ExprList **ppSub /* IN/OUT: Sub-select expression-list */
){
Walker sWalker;
@@ -145755,6 +146818,7 @@ static void selectWindowRewriteEList(
sRewrite.pSub = *ppSub;
sRewrite.pWin = pWin;
sRewrite.pSrc = pSrc;
+ sRewrite.pTab = pTab;
sWalker.pParse = pParse;
sWalker.xExprCallback = selectWindowRewriteExprCb;
@@ -145773,13 +146837,18 @@ static void selectWindowRewriteEList(
static ExprList *exprListAppendList(
Parse *pParse, /* Parsing context */
ExprList *pList, /* List to which to append. Might be NULL */
- ExprList *pAppend /* List of values to append. Might be NULL */
+ ExprList *pAppend, /* List of values to append. Might be NULL */
+ int bIntToNull
){
if( pAppend ){
int i;
int nInit = pList ? pList->nExpr : 0;
for(i=0; i<pAppend->nExpr; i++){
Expr *pDup = sqlite3ExprDup(pParse->db, pAppend->a[i].pExpr, 0);
+ if( bIntToNull && pDup && pDup->op==TK_INTEGER ){
+ pDup->op = TK_NULL;
+ pDup->flags &= ~(EP_IntValue|EP_IsTrue|EP_IsFalse);
+ }
pList = sqlite3ExprListAppend(pParse, pList, pDup);
if( pList ) pList->a[nInit+i].sortOrder = pAppend->a[i].sortOrder;
}
@@ -145809,17 +146878,24 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){
ExprList *pSublist = 0; /* Expression list for sub-query */
Window *pMWin = p->pWin; /* Master window object */
Window *pWin; /* Window object iterator */
+ Table *pTab;
+
+ pTab = sqlite3DbMallocZero(db, sizeof(Table));
+ if( pTab==0 ){
+ return SQLITE_NOMEM;
+ }
p->pSrc = 0;
p->pWhere = 0;
p->pGroupBy = 0;
p->pHaving = 0;
+ p->selFlags &= ~SF_Aggregate;
/* Create the ORDER BY clause for the sub-select. This is the concatenation
** of the window PARTITION and ORDER BY clauses. Then, if this makes it
** redundant, remove the ORDER BY from the parent SELECT. */
pSort = sqlite3ExprListDup(db, pMWin->pPartition, 0);
- pSort = exprListAppendList(pParse, pSort, pMWin->pOrderBy);
+ pSort = exprListAppendList(pParse, pSort, pMWin->pOrderBy, 1);
if( pSort && p->pOrderBy ){
if( sqlite3ExprListCompare(pSort, p->pOrderBy, -1)==0 ){
sqlite3ExprListDelete(db, p->pOrderBy);
@@ -145831,16 +146907,17 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){
** The OpenEphemeral instruction is coded later, after it is known how
** many columns the table will have. */
pMWin->iEphCsr = pParse->nTab++;
+ pParse->nTab += 3;
- selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, &pSublist);
- selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, &pSublist);
+ selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, pTab, &pSublist);
+ selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, pTab, &pSublist);
pMWin->nBufferCol = (pSublist ? pSublist->nExpr : 0);
/* Append the PARTITION BY and ORDER BY expressions to the to the
** sub-select expression list. They are required to figure out where
** boundaries for partitions and sets of peer rows lie. */
- pSublist = exprListAppendList(pParse, pSublist, pMWin->pPartition);
- pSublist = exprListAppendList(pParse, pSublist, pMWin->pOrderBy);
+ pSublist = exprListAppendList(pParse, pSublist, pMWin->pPartition, 0);
+ pSublist = exprListAppendList(pParse, pSublist, pMWin->pOrderBy, 0);
/* Append the arguments passed to each window function to the
** sub-select expression list. Also allocate two registers for each
@@ -145848,7 +146925,7 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){
** results. */
for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
pWin->iArgCol = (pSublist ? pSublist->nExpr : 0);
- pSublist = exprListAppendList(pParse, pSublist, pWin->pOwner->x.pList);
+ pSublist = exprListAppendList(pParse, pSublist, pWin->pOwner->x.pList, 0);
if( pWin->pFilter ){
Expr *pFilter = sqlite3ExprDup(db, pWin->pFilter, 0);
pSublist = sqlite3ExprListAppend(pParse, pSublist, pFilter);
@@ -145875,21 +146952,28 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){
);
p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
if( p->pSrc ){
+ Table *pTab2;
p->pSrc->a[0].pSelect = pSub;
sqlite3SrcListAssignCursors(pParse, p->pSrc);
- if( sqlite3ExpandSubquery(pParse, &p->pSrc->a[0]) ){
+ pSub->selFlags |= SF_Expanded;
+ pTab2 = sqlite3ResultSetOfSelect(pParse, pSub);
+ if( pTab2==0 ){
rc = SQLITE_NOMEM;
}else{
- pSub->selFlags |= SF_Expanded;
- p->selFlags &= ~SF_Aggregate;
- sqlite3SelectPrep(pParse, pSub, 0);
+ memcpy(pTab, pTab2, sizeof(Table));
+ pTab->tabFlags |= TF_Ephemeral;
+ p->pSrc->a[0].pTab = pTab;
+ pTab = pTab2;
}
-
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pMWin->iEphCsr, pSublist->nExpr);
+ sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+1, pMWin->iEphCsr);
+ sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+2, pMWin->iEphCsr);
+ sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+3, pMWin->iEphCsr);
}else{
sqlite3SelectDelete(db, pSub);
}
if( db->mallocFailed ) rc = SQLITE_NOMEM;
+ sqlite3DbFree(db, pTab);
}
return rc;
@@ -145906,6 +146990,7 @@ SQLITE_PRIVATE void sqlite3WindowDelete(sqlite3 *db, Window *p){
sqlite3ExprDelete(db, p->pEnd);
sqlite3ExprDelete(db, p->pStart);
sqlite3DbFree(db, p->zName);
+ sqlite3DbFree(db, p->zBase);
sqlite3DbFree(db, p);
}
}
@@ -145942,16 +147027,18 @@ static Expr *sqlite3WindowOffsetExpr(Parse *pParse, Expr *pExpr){
*/
SQLITE_PRIVATE Window *sqlite3WindowAlloc(
Parse *pParse, /* Parsing context */
- int eType, /* Frame type. TK_RANGE or TK_ROWS */
+ int eType, /* Frame type. TK_RANGE, TK_ROWS, TK_GROUPS, or 0 */
int eStart, /* Start type: CURRENT, PRECEDING, FOLLOWING, UNBOUNDED */
Expr *pStart, /* Start window size if TK_PRECEDING or FOLLOWING */
int eEnd, /* End type: CURRENT, FOLLOWING, TK_UNBOUNDED, PRECEDING */
- Expr *pEnd /* End window size if TK_FOLLOWING or PRECEDING */
+ Expr *pEnd, /* End window size if TK_FOLLOWING or PRECEDING */
+ u8 eExclude /* EXCLUDE clause */
){
Window *pWin = 0;
+ int bImplicitFrame = 0;
/* Parser assures the following: */
- assert( eType==TK_RANGE || eType==TK_ROWS );
+ assert( eType==0 || eType==TK_RANGE || eType==TK_ROWS || eType==TK_GROUPS );
assert( eStart==TK_CURRENT || eStart==TK_PRECEDING
|| eStart==TK_UNBOUNDED || eStart==TK_FOLLOWING );
assert( eEnd==TK_CURRENT || eEnd==TK_FOLLOWING
@@ -145959,13 +147046,9 @@ SQLITE_PRIVATE Window *sqlite3WindowAlloc(
assert( (eStart==TK_PRECEDING || eStart==TK_FOLLOWING)==(pStart!=0) );
assert( (eEnd==TK_FOLLOWING || eEnd==TK_PRECEDING)==(pEnd!=0) );
-
- /* If a frame is declared "RANGE" (not "ROWS"), then it may not use
- ** either "<expr> PRECEDING" or "<expr> FOLLOWING".
- */
- if( eType==TK_RANGE && (pStart!=0 || pEnd!=0) ){
- sqlite3ErrorMsg(pParse, "RANGE must use only UNBOUNDED or CURRENT ROW");
- goto windowAllocErr;
+ if( eType==0 ){
+ bImplicitFrame = 1;
+ eType = TK_RANGE;
}
/* Additionally, the
@@ -145985,15 +147068,20 @@ SQLITE_PRIVATE Window *sqlite3WindowAlloc(
if( (eStart==TK_CURRENT && eEnd==TK_PRECEDING)
|| (eStart==TK_FOLLOWING && (eEnd==TK_PRECEDING || eEnd==TK_CURRENT))
){
- sqlite3ErrorMsg(pParse, "unsupported frame delimiter for ROWS");
+ sqlite3ErrorMsg(pParse, "unsupported frame specification");
goto windowAllocErr;
}
pWin = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
if( pWin==0 ) goto windowAllocErr;
- pWin->eType = eType;
+ pWin->eFrmType = eType;
pWin->eStart = eStart;
pWin->eEnd = eEnd;
+ if( eExclude==0 && OptimizationDisabled(pParse->db, SQLITE_WindowFunc) ){
+ eExclude = TK_NO;
+ }
+ pWin->eExclude = eExclude;
+ pWin->bImplicitFrame = bImplicitFrame;
pWin->pEnd = sqlite3WindowOffsetExpr(pParse, pEnd);
pWin->pStart = sqlite3WindowOffsetExpr(pParse, pStart);
return pWin;
@@ -146005,6 +147093,69 @@ windowAllocErr:
}
/*
+** Attach PARTITION and ORDER BY clauses pPartition and pOrderBy to window
+** pWin. Also, if parameter pBase is not NULL, set pWin->zBase to the
+** equivalent nul-terminated string.
+*/
+SQLITE_PRIVATE Window *sqlite3WindowAssemble(
+ Parse *pParse,
+ Window *pWin,
+ ExprList *pPartition,
+ ExprList *pOrderBy,
+ Token *pBase
+){
+ if( pWin ){
+ pWin->pPartition = pPartition;
+ pWin->pOrderBy = pOrderBy;
+ if( pBase ){
+ pWin->zBase = sqlite3DbStrNDup(pParse->db, pBase->z, pBase->n);
+ }
+ }else{
+ sqlite3ExprListDelete(pParse->db, pPartition);
+ sqlite3ExprListDelete(pParse->db, pOrderBy);
+ }
+ return pWin;
+}
+
+/*
+** Window *pWin has just been created from a WINDOW clause. Tokne pBase
+** is the base window. Earlier windows from the same WINDOW clause are
+** stored in the linked list starting at pWin->pNextWin. This function
+** either updates *pWin according to the base specification, or else
+** leaves an error in pParse.
+*/
+SQLITE_PRIVATE void sqlite3WindowChain(Parse *pParse, Window *pWin, Window *pList){
+ if( pWin->zBase ){
+ sqlite3 *db = pParse->db;
+ Window *pExist = windowFind(pParse, pList, pWin->zBase);
+ if( pExist ){
+ const char *zErr = 0;
+ /* Check for errors */
+ if( pWin->pPartition ){
+ zErr = "PARTITION clause";
+ }else if( pExist->pOrderBy && pWin->pOrderBy ){
+ zErr = "ORDER BY clause";
+ }else if( pExist->bImplicitFrame==0 ){
+ zErr = "frame specification";
+ }
+ if( zErr ){
+ sqlite3ErrorMsg(pParse,
+ "cannot override %s of window: %s", zErr, pWin->zBase
+ );
+ }else{
+ pWin->pPartition = sqlite3ExprListDup(db, pExist->pPartition, 0);
+ if( pExist->pOrderBy ){
+ assert( pWin->pOrderBy==0 );
+ pWin->pOrderBy = sqlite3ExprListDup(db, pExist->pOrderBy, 0);
+ }
+ sqlite3DbFree(db, pWin->zBase);
+ pWin->zBase = 0;
+ }
+ }
+ }
+}
+
+/*
** Attach window object pWin to expression p.
*/
SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){
@@ -146032,9 +147183,10 @@ SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){
** Identical window objects can be processed in a single scan.
*/
SQLITE_PRIVATE int sqlite3WindowCompare(Parse *pParse, Window *p1, Window *p2){
- if( p1->eType!=p2->eType ) return 1;
+ if( p1->eFrmType!=p2->eFrmType ) return 1;
if( p1->eStart!=p2->eStart ) return 1;
if( p1->eEnd!=p2->eEnd ) return 1;
+ if( p1->eExclude!=p2->eExclude ) return 1;
if( sqlite3ExprCompare(pParse, p1->pStart, p2->pStart, -1) ) return 1;
if( sqlite3ExprCompare(pParse, p1->pEnd, p2->pEnd, -1) ) return 1;
if( sqlite3ExprListCompare(p1->pPartition, p2->pPartition, -1) ) return 1;
@@ -146051,12 +147203,27 @@ SQLITE_PRIVATE int sqlite3WindowCompare(Parse *pParse, Window *p1, Window *p2){
SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse *pParse, Window *pMWin){
Window *pWin;
Vdbe *v = sqlite3GetVdbe(pParse);
- int nPart = (pMWin->pPartition ? pMWin->pPartition->nExpr : 0);
- nPart += (pMWin->pOrderBy ? pMWin->pOrderBy->nExpr : 0);
- if( nPart ){
+
+ /* Allocate registers to use for PARTITION BY values, if any. Initialize
+ ** said registers to NULL. */
+ if( pMWin->pPartition ){
+ int nExpr = pMWin->pPartition->nExpr;
pMWin->regPart = pParse->nMem+1;
- pParse->nMem += nPart;
- sqlite3VdbeAddOp3(v, OP_Null, 0, pMWin->regPart, pMWin->regPart+nPart-1);
+ pParse->nMem += nExpr;
+ sqlite3VdbeAddOp3(v, OP_Null, 0, pMWin->regPart, pMWin->regPart+nExpr-1);
+ }
+
+ pMWin->regOne = ++pParse->nMem;
+ sqlite3VdbeAddOp2(v, OP_Integer, 1, pMWin->regOne);
+
+ if( pMWin->eExclude ){
+ pMWin->regStartRowid = ++pParse->nMem;
+ pMWin->regEndRowid = ++pParse->nMem;
+ pMWin->csrApp = pParse->nTab++;
+ sqlite3VdbeAddOp2(v, OP_Integer, 1, pMWin->regStartRowid);
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, pMWin->regEndRowid);
+ sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->csrApp, pMWin->iEphCsr);
+ return;
}
for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
@@ -146085,20 +147252,24 @@ SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse *pParse, Window *pMWin){
else if( p->zName==nth_valueName || p->zName==first_valueName ){
/* Allocate two registers at pWin->regApp. These will be used to
** store the start and end index of the current frame. */
- assert( pMWin->iEphCsr );
pWin->regApp = pParse->nMem+1;
pWin->csrApp = pParse->nTab++;
pParse->nMem += 2;
sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr);
}
else if( p->zName==leadName || p->zName==lagName ){
- assert( pMWin->iEphCsr );
pWin->csrApp = pParse->nTab++;
sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr);
}
}
}
+#define WINDOW_STARTING_INT 0
+#define WINDOW_ENDING_INT 1
+#define WINDOW_NTH_VALUE_INT 2
+#define WINDOW_STARTING_NUM 3
+#define WINDOW_ENDING_NUM 4
+
/*
** A "PRECEDING <expr>" (eCond==0) or "FOLLOWING <expr>" (eCond==1) or the
** value of the second argument to nth_value() (eCond==2) has just been
@@ -146106,25 +147277,42 @@ SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse *pParse, Window *pMWin){
** code to check that the value is a non-negative integer and throws an
** exception if it is not.
*/
-static void windowCheckIntValue(Parse *pParse, int reg, int eCond){
+static void windowCheckValue(Parse *pParse, int reg, int eCond){
static const char *azErr[] = {
"frame starting offset must be a non-negative integer",
"frame ending offset must be a non-negative integer",
- "second argument to nth_value must be a positive integer"
+ "second argument to nth_value must be a positive integer",
+ "frame starting offset must be a non-negative number",
+ "frame ending offset must be a non-negative number",
};
- static int aOp[] = { OP_Ge, OP_Ge, OP_Gt };
+ static int aOp[] = { OP_Ge, OP_Ge, OP_Gt, OP_Ge, OP_Ge };
Vdbe *v = sqlite3GetVdbe(pParse);
int regZero = sqlite3GetTempReg(pParse);
- assert( eCond==0 || eCond==1 || eCond==2 );
+ assert( eCond>=0 && eCond<ArraySize(azErr) );
sqlite3VdbeAddOp2(v, OP_Integer, 0, regZero);
- sqlite3VdbeAddOp2(v, OP_MustBeInt, reg, sqlite3VdbeCurrentAddr(v)+2);
- VdbeCoverageIf(v, eCond==0);
- VdbeCoverageIf(v, eCond==1);
- VdbeCoverageIf(v, eCond==2);
+ if( eCond>=WINDOW_STARTING_NUM ){
+ int regString = sqlite3GetTempReg(pParse);
+ sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC);
+ sqlite3VdbeAddOp3(v, OP_Ge, regString, sqlite3VdbeCurrentAddr(v)+2, reg);
+ sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC|SQLITE_JUMPIFNULL);
+ VdbeCoverage(v);
+ assert( eCond==3 || eCond==4 );
+ VdbeCoverageIf(v, eCond==3);
+ VdbeCoverageIf(v, eCond==4);
+ }else{
+ sqlite3VdbeAddOp2(v, OP_MustBeInt, reg, sqlite3VdbeCurrentAddr(v)+2);
+ VdbeCoverage(v);
+ assert( eCond==0 || eCond==1 || eCond==2 );
+ VdbeCoverageIf(v, eCond==0);
+ VdbeCoverageIf(v, eCond==1);
+ VdbeCoverageIf(v, eCond==2);
+ }
sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg);
- VdbeCoverageNeverNullIf(v, eCond==0);
- VdbeCoverageNeverNullIf(v, eCond==1);
+ VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */
+ VdbeCoverageNeverNullIf(v, eCond==1); /* the OP_MustBeInt */
VdbeCoverageNeverNullIf(v, eCond==2);
+ VdbeCoverageNeverNullIf(v, eCond==3); /* NULL case caught by */
+ VdbeCoverageNeverNullIf(v, eCond==4); /* the OP_Ge */
sqlite3MayAbort(pParse);
sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_ERROR, OE_Abort);
sqlite3VdbeAppendP4(v, (void*)azErr[eCond], P4_STATIC);
@@ -146164,37 +147352,28 @@ static void windowAggStep(
Window *pMWin, /* Linked list of window functions */
int csr, /* Read arguments from this cursor */
int bInverse, /* True to invoke xInverse instead of xStep */
- int reg, /* Array of registers */
- int regPartSize /* Register containing size of partition */
+ int reg /* Array of registers */
){
Vdbe *v = sqlite3GetVdbe(pParse);
Window *pWin;
for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
- int flags = pWin->pFunc->funcFlags;
+ FuncDef *pFunc = pWin->pFunc;
int regArg;
int nArg = windowArgCount(pWin);
+ int i;
- if( csr>=0 ){
- int i;
- for(i=0; i<nArg; i++){
+ for(i=0; i<nArg; i++){
+ if( i!=1 || pFunc->zName!=nth_valueName ){
sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+i, reg+i);
+ }else{
+ sqlite3VdbeAddOp3(v, OP_Column, pMWin->iEphCsr, pWin->iArgCol+i, reg+i);
}
- regArg = reg;
- if( flags & SQLITE_FUNC_WINDOW_SIZE ){
- if( nArg==0 ){
- regArg = regPartSize;
- }else{
- sqlite3VdbeAddOp2(v, OP_SCopy, regPartSize, reg+nArg);
- }
- nArg++;
- }
- }else{
- assert( !(flags & SQLITE_FUNC_WINDOW_SIZE) );
- regArg = reg + pWin->iArgCol;
}
+ regArg = reg;
- if( (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX)
- && pWin->eStart!=TK_UNBOUNDED
+ if( pMWin->regStartRowid==0
+ && (pFunc->funcFlags & SQLITE_FUNC_MINMAX)
+ && (pWin->eStart!=TK_UNBOUNDED)
){
int addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, regArg);
VdbeCoverage(v);
@@ -146211,34 +147390,24 @@ static void windowAggStep(
}
sqlite3VdbeJumpHere(v, addrIsNull);
}else if( pWin->regApp ){
- assert( pWin->pFunc->zName==nth_valueName
- || pWin->pFunc->zName==first_valueName
+ assert( pFunc->zName==nth_valueName
+ || pFunc->zName==first_valueName
);
assert( bInverse==0 || bInverse==1 );
sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1-bInverse, 1);
- }else if( pWin->pFunc->zName==leadName
- || pWin->pFunc->zName==lagName
- ){
- /* no-op */
- }else{
+ }else if( pFunc->xSFunc!=noopStepFunc ){
int addrIf = 0;
if( pWin->pFilter ){
int regTmp;
assert( nArg==0 || nArg==pWin->pOwner->x.pList->nExpr );
assert( nArg || pWin->pOwner->x.pList==0 );
- if( csr>0 ){
- regTmp = sqlite3GetTempReg(pParse);
- sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp);
- }else{
- regTmp = regArg + nArg;
- }
+ regTmp = sqlite3GetTempReg(pParse);
+ sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp);
addrIf = sqlite3VdbeAddOp3(v, OP_IfNot, regTmp, 0, 1);
VdbeCoverage(v);
- if( csr>0 ){
- sqlite3ReleaseTempReg(pParse, regTmp);
- }
+ sqlite3ReleaseTempReg(pParse, regTmp);
}
- if( pWin->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){
+ if( pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){
CollSeq *pColl;
assert( nArg>0 );
pColl = sqlite3ExprNNCollSeq(pParse, pWin->pOwner->x.pList->a[0].pExpr);
@@ -146246,45 +147415,96 @@ static void windowAggStep(
}
sqlite3VdbeAddOp3(v, bInverse? OP_AggInverse : OP_AggStep,
bInverse, regArg, pWin->regAccum);
- sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF);
+ sqlite3VdbeAppendP4(v, pFunc, P4_FUNCDEF);
sqlite3VdbeChangeP5(v, (u8)nArg);
if( addrIf ) sqlite3VdbeJumpHere(v, addrIf);
}
}
}
+typedef struct WindowCodeArg WindowCodeArg;
+typedef struct WindowCsrAndReg WindowCsrAndReg;
+struct WindowCsrAndReg {
+ int csr;
+ int reg;
+};
+
+struct WindowCodeArg {
+ Parse *pParse;
+ Window *pMWin;
+ Vdbe *pVdbe;
+ int regGosub;
+ int addrGosub;
+ int regArg;
+ int eDelete;
+
+ WindowCsrAndReg start;
+ WindowCsrAndReg current;
+ WindowCsrAndReg end;
+};
+
+/*
+** Values that may be passed as the second argument to windowCodeOp().
+*/
+#define WINDOW_RETURN_ROW 1
+#define WINDOW_AGGINVERSE 2
+#define WINDOW_AGGSTEP 3
+
+/*
+** Generate VM code to read the window frames peer values from cursor csr into
+** an array of registers starting at reg.
+*/
+static void windowReadPeerValues(
+ WindowCodeArg *p,
+ int csr,
+ int reg
+){
+ Window *pMWin = p->pMWin;
+ ExprList *pOrderBy = pMWin->pOrderBy;
+ if( pOrderBy ){
+ Vdbe *v = sqlite3GetVdbe(p->pParse);
+ ExprList *pPart = pMWin->pPartition;
+ int iColOff = pMWin->nBufferCol + (pPart ? pPart->nExpr : 0);
+ int i;
+ for(i=0; i<pOrderBy->nExpr; i++){
+ sqlite3VdbeAddOp3(v, OP_Column, csr, iColOff+i, reg+i);
+ }
+ }
+}
+
/*
-** Generate VM code to invoke either xValue() (bFinal==0) or xFinalize()
-** (bFinal==1) for each window function in the linked list starting at
+** Generate VM code to invoke either xValue() (bFin==0) or xFinalize()
+** (bFin==1) for each window function in the linked list starting at
** pMWin. Or, for built-in window-functions that do not use the standard
** API, generate the equivalent VM code.
*/
-static void windowAggFinal(Parse *pParse, Window *pMWin, int bFinal){
+static void windowAggFinal(WindowCodeArg *p, int bFin){
+ Parse *pParse = p->pParse;
+ Window *pMWin = p->pMWin;
Vdbe *v = sqlite3GetVdbe(pParse);
Window *pWin;
for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
- if( (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX)
- && pWin->eStart!=TK_UNBOUNDED
+ if( pMWin->regStartRowid==0
+ && (pWin->pFunc->funcFlags & SQLITE_FUNC_MINMAX)
+ && (pWin->eStart!=TK_UNBOUNDED)
){
sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
sqlite3VdbeAddOp1(v, OP_Last, pWin->csrApp);
VdbeCoverage(v);
sqlite3VdbeAddOp3(v, OP_Column, pWin->csrApp, 0, pWin->regResult);
sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2);
- if( bFinal ){
- sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp);
- }
}else if( pWin->regApp ){
+ assert( pMWin->regStartRowid==0 );
}else{
- if( bFinal ){
- sqlite3VdbeAddOp2(v, OP_AggFinal, pWin->regAccum, windowArgCount(pWin));
+ int nArg = windowArgCount(pWin);
+ if( bFin ){
+ sqlite3VdbeAddOp2(v, OP_AggFinal, pWin->regAccum, nArg);
sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF);
sqlite3VdbeAddOp2(v, OP_Copy, pWin->regAccum, pWin->regResult);
sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
}else{
- sqlite3VdbeAddOp3(v, OP_AggValue, pWin->regAccum, windowArgCount(pWin),
- pWin->regResult);
+ sqlite3VdbeAddOp3(v, OP_AggValue,pWin->regAccum,nArg,pWin->regResult);
sqlite3VdbeAppendP4(v, pWin->pFunc, P4_FUNCDEF);
}
}
@@ -146292,66 +147512,97 @@ static void windowAggFinal(Parse *pParse, Window *pMWin, int bFinal){
}
/*
-** This function generates VM code to invoke the sub-routine at address
-** lblFlushPart once for each partition with the entire partition cached in
-** the Window.iEphCsr temp table.
+** Generate code to calculate the current values of all window functions in the
+** p->pMWin list by doing a full scan of the current window frame. Store the
+** results in the Window.regResult registers, ready to return the upper
+** layer.
*/
-static void windowPartitionCache(
- Parse *pParse,
- Select *p, /* The rewritten SELECT statement */
- WhereInfo *pWInfo, /* WhereInfo to call WhereEnd() on */
- int regFlushPart, /* Register to use with Gosub lblFlushPart */
- int lblFlushPart, /* Subroutine to Gosub to */
- int *pRegSize /* OUT: Register containing partition size */
-){
- Window *pMWin = p->pWin;
- Vdbe *v = sqlite3GetVdbe(pParse);
- int iSubCsr = p->pSrc->a[0].iCursor;
- int nSub = p->pSrc->a[0].pTab->nCol;
- int k;
+static void windowFullScan(WindowCodeArg *p){
+ Window *pWin;
+ Parse *pParse = p->pParse;
+ Window *pMWin = p->pMWin;
+ Vdbe *v = p->pVdbe;
- int reg = pParse->nMem+1;
- int regRecord = reg+nSub;
- int regRowid = regRecord+1;
+ int regCRowid = 0; /* Current rowid value */
+ int regCPeer = 0; /* Current peer values */
+ int regRowid = 0; /* AggStep rowid value */
+ int regPeer = 0; /* AggStep peer values */
- *pRegSize = regRowid;
- pParse->nMem += nSub + 2;
+ int nPeer;
+ int lblNext;
+ int lblBrk;
+ int addrNext;
+ int csr = pMWin->csrApp;
- /* Load the column values for the row returned by the sub-select
- ** into an array of registers starting at reg. */
- for(k=0; k<nSub; k++){
- sqlite3VdbeAddOp3(v, OP_Column, iSubCsr, k, reg+k);
+ nPeer = (pMWin->pOrderBy ? pMWin->pOrderBy->nExpr : 0);
+
+ lblNext = sqlite3VdbeMakeLabel(pParse);
+ lblBrk = sqlite3VdbeMakeLabel(pParse);
+
+ regCRowid = sqlite3GetTempReg(pParse);
+ regRowid = sqlite3GetTempReg(pParse);
+ if( nPeer ){
+ regCPeer = sqlite3GetTempRange(pParse, nPeer);
+ regPeer = sqlite3GetTempRange(pParse, nPeer);
}
- sqlite3VdbeAddOp3(v, OP_MakeRecord, reg, nSub, regRecord);
- /* Check if this is the start of a new partition. If so, call the
- ** flush_partition sub-routine. */
- if( pMWin->pPartition ){
+ sqlite3VdbeAddOp2(v, OP_Rowid, pMWin->iEphCsr, regCRowid);
+ windowReadPeerValues(p, pMWin->iEphCsr, regCPeer);
+
+ for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
+ sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
+ }
+
+ sqlite3VdbeAddOp3(v, OP_SeekGE, csr, lblBrk, pMWin->regStartRowid);
+ VdbeCoverage(v);
+ addrNext = sqlite3VdbeCurrentAddr(v);
+ sqlite3VdbeAddOp2(v, OP_Rowid, csr, regRowid);
+ sqlite3VdbeAddOp3(v, OP_Gt, pMWin->regEndRowid, lblBrk, regRowid);
+ VdbeCoverageNeverNull(v);
+
+ if( pMWin->eExclude==TK_CURRENT ){
+ sqlite3VdbeAddOp3(v, OP_Eq, regCRowid, lblNext, regRowid);
+ VdbeCoverageNeverNull(v);
+ }else if( pMWin->eExclude!=TK_NO ){
int addr;
- ExprList *pPart = pMWin->pPartition;
- int nPart = pPart->nExpr;
- int regNewPart = reg + pMWin->nBufferCol;
- KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pPart, 0, 0);
+ int addrEq = 0;
+ KeyInfo *pKeyInfo = 0;
- addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPart, pMWin->regPart,nPart);
- sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
- sqlite3VdbeAddOp3(v, OP_Jump, addr+2, addr+4, addr+2);
- VdbeCoverageEqNe(v);
- sqlite3VdbeAddOp3(v, OP_Copy, regNewPart, pMWin->regPart, nPart-1);
- sqlite3VdbeAddOp2(v, OP_Gosub, regFlushPart, lblFlushPart);
- VdbeComment((v, "call flush_partition"));
+ if( pMWin->pOrderBy ){
+ pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pMWin->pOrderBy, 0, 0);
+ }
+ if( pMWin->eExclude==TK_TIES ){
+ addrEq = sqlite3VdbeAddOp3(v, OP_Eq, regCRowid, 0, regRowid);
+ VdbeCoverageNeverNull(v);
+ }
+ if( pKeyInfo ){
+ windowReadPeerValues(p, csr, regPeer);
+ sqlite3VdbeAddOp3(v, OP_Compare, regPeer, regCPeer, nPeer);
+ sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
+ addr = sqlite3VdbeCurrentAddr(v)+1;
+ sqlite3VdbeAddOp3(v, OP_Jump, addr, lblNext, addr);
+ VdbeCoverageEqNe(v);
+ }else{
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, lblNext);
+ }
+ if( addrEq ) sqlite3VdbeJumpHere(v, addrEq);
}
- /* Buffer the current row in the ephemeral table. */
- sqlite3VdbeAddOp2(v, OP_NewRowid, pMWin->iEphCsr, regRowid);
- sqlite3VdbeAddOp3(v, OP_Insert, pMWin->iEphCsr, regRecord, regRowid);
+ windowAggStep(pParse, pMWin, csr, 0, p->regArg);
- /* End of the input loop */
- sqlite3WhereEnd(pWInfo);
+ sqlite3VdbeResolveLabel(v, lblNext);
+ sqlite3VdbeAddOp2(v, OP_Next, csr, addrNext);
+ VdbeCoverage(v);
+ sqlite3VdbeJumpHere(v, addrNext-1);
+ sqlite3VdbeJumpHere(v, addrNext+1);
+ sqlite3ReleaseTempReg(pParse, regRowid);
+ sqlite3ReleaseTempReg(pParse, regCRowid);
+ if( nPeer ){
+ sqlite3ReleaseTempRange(pParse, regPeer, nPeer);
+ sqlite3ReleaseTempRange(pParse, regCPeer, nPeer);
+ }
- /* Invoke "flush_partition" to deal with the final (or only) partition */
- sqlite3VdbeAddOp2(v, OP_Gosub, regFlushPart, lblFlushPart);
- VdbeComment((v, "call flush_partition"));
+ windowAggFinal(p, 1);
}
/*
@@ -146367,110 +147618,74 @@ static void windowPartitionCache(
** lag()
** lead()
*/
-static void windowReturnOneRow(
- Parse *pParse,
- Window *pMWin,
- int regGosub,
- int addrGosub
-){
- Vdbe *v = sqlite3GetVdbe(pParse);
- Window *pWin;
- for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
- FuncDef *pFunc = pWin->pFunc;
- if( pFunc->zName==nth_valueName
- || pFunc->zName==first_valueName
- ){
- int csr = pWin->csrApp;
- int lbl = sqlite3VdbeMakeLabel(pParse);
- int tmpReg = sqlite3GetTempReg(pParse);
- sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
+static void windowReturnOneRow(WindowCodeArg *p){
+ Window *pMWin = p->pMWin;
+ Vdbe *v = p->pVdbe;
- if( pFunc->zName==nth_valueName ){
- sqlite3VdbeAddOp3(v, OP_Column, pMWin->iEphCsr, pWin->iArgCol+1,tmpReg);
- windowCheckIntValue(pParse, tmpReg, 2);
- }else{
- sqlite3VdbeAddOp2(v, OP_Integer, 1, tmpReg);
- }
- sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg);
- sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg);
- VdbeCoverageNeverNull(v);
- sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, 0, tmpReg);
- VdbeCoverageNeverTaken(v);
- sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
- sqlite3VdbeResolveLabel(v, lbl);
- sqlite3ReleaseTempReg(pParse, tmpReg);
- }
- else if( pFunc->zName==leadName || pFunc->zName==lagName ){
- int nArg = pWin->pOwner->x.pList->nExpr;
- int iEph = pMWin->iEphCsr;
- int csr = pWin->csrApp;
- int lbl = sqlite3VdbeMakeLabel(pParse);
- int tmpReg = sqlite3GetTempReg(pParse);
-
- if( nArg<3 ){
+ if( pMWin->regStartRowid ){
+ windowFullScan(p);
+ }else{
+ Parse *pParse = p->pParse;
+ Window *pWin;
+
+ for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
+ FuncDef *pFunc = pWin->pFunc;
+ if( pFunc->zName==nth_valueName
+ || pFunc->zName==first_valueName
+ ){
+ int csr = pWin->csrApp;
+ int lbl = sqlite3VdbeMakeLabel(pParse);
+ int tmpReg = sqlite3GetTempReg(pParse);
sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
- }else{
- sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+2, pWin->regResult);
- }
- sqlite3VdbeAddOp2(v, OP_Rowid, iEph, tmpReg);
- if( nArg<2 ){
- int val = (pFunc->zName==leadName ? 1 : -1);
- sqlite3VdbeAddOp2(v, OP_AddImm, tmpReg, val);
- }else{
- int op = (pFunc->zName==leadName ? OP_Add : OP_Subtract);
- int tmpReg2 = sqlite3GetTempReg(pParse);
- sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+1, tmpReg2);
- sqlite3VdbeAddOp3(v, op, tmpReg2, tmpReg, tmpReg);
- sqlite3ReleaseTempReg(pParse, tmpReg2);
+
+ if( pFunc->zName==nth_valueName ){
+ sqlite3VdbeAddOp3(v, OP_Column,pMWin->iEphCsr,pWin->iArgCol+1,tmpReg);
+ windowCheckValue(pParse, tmpReg, 2);
+ }else{
+ sqlite3VdbeAddOp2(v, OP_Integer, 1, tmpReg);
+ }
+ sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg);
+ sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg);
+ VdbeCoverageNeverNull(v);
+ sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, 0, tmpReg);
+ VdbeCoverageNeverTaken(v);
+ sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
+ sqlite3VdbeResolveLabel(v, lbl);
+ sqlite3ReleaseTempReg(pParse, tmpReg);
+ }
+ else if( pFunc->zName==leadName || pFunc->zName==lagName ){
+ int nArg = pWin->pOwner->x.pList->nExpr;
+ int csr = pWin->csrApp;
+ int lbl = sqlite3VdbeMakeLabel(pParse);
+ int tmpReg = sqlite3GetTempReg(pParse);
+ int iEph = pMWin->iEphCsr;
+
+ if( nArg<3 ){
+ sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult);
+ }else{
+ sqlite3VdbeAddOp3(v, OP_Column, iEph,pWin->iArgCol+2,pWin->regResult);
+ }
+ sqlite3VdbeAddOp2(v, OP_Rowid, iEph, tmpReg);
+ if( nArg<2 ){
+ int val = (pFunc->zName==leadName ? 1 : -1);
+ sqlite3VdbeAddOp2(v, OP_AddImm, tmpReg, val);
+ }else{
+ int op = (pFunc->zName==leadName ? OP_Add : OP_Subtract);
+ int tmpReg2 = sqlite3GetTempReg(pParse);
+ sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+1, tmpReg2);
+ sqlite3VdbeAddOp3(v, op, tmpReg2, tmpReg, tmpReg);
+ sqlite3ReleaseTempReg(pParse, tmpReg2);
+ }
+
+ sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, lbl, tmpReg);
+ VdbeCoverage(v);
+ sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
+ sqlite3VdbeResolveLabel(v, lbl);
+ sqlite3ReleaseTempReg(pParse, tmpReg);
}
-
- sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, lbl, tmpReg);
- VdbeCoverage(v);
- sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult);
- sqlite3VdbeResolveLabel(v, lbl);
- sqlite3ReleaseTempReg(pParse, tmpReg);
}
}
- sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub);
-}
-
-/*
-** Invoke the code generated by windowReturnOneRow() and, optionally, the
-** xInverse() function for each window function, for one or more rows
-** from the Window.iEphCsr temp table. This routine generates VM code
-** similar to:
-**
-** while( regCtr>0 ){
-** regCtr--;
-** windowReturnOneRow()
-** if( bInverse ){
-** AggInverse
-** }
-** Next (Window.iEphCsr)
-** }
-*/
-static void windowReturnRows(
- Parse *pParse,
- Window *pMWin, /* List of window functions */
- int regCtr, /* Register containing number of rows */
- int regGosub, /* Register for Gosub addrGosub */
- int addrGosub, /* Address of sub-routine for ReturnOneRow */
- int regInvArg, /* Array of registers for xInverse args */
- int regInvSize /* Register containing size of partition */
-){
- int addr;
- Vdbe *v = sqlite3GetVdbe(pParse);
- windowAggFinal(pParse, pMWin, 0);
- addr = sqlite3VdbeAddOp3(v, OP_IfPos, regCtr, sqlite3VdbeCurrentAddr(v)+2 ,1);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
- windowReturnOneRow(pParse, pMWin, regGosub, addrGosub);
- if( regInvArg ){
- windowAggStep(pParse, pMWin, pMWin->iEphCsr, 1, regInvArg, regInvSize);
- }
- sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, addr);
- VdbeCoverage(v);
- sqlite3VdbeJumpHere(v, addr+1); /* The OP_Goto */
+ sqlite3VdbeAddOp2(v, OP_Gosub, p->regGosub, p->addrGosub);
}
/*
@@ -146488,17 +147703,17 @@ static int windowInitAccum(Parse *pParse, Window *pMWin){
FuncDef *pFunc = pWin->pFunc;
sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum);
nArg = MAX(nArg, windowArgCount(pWin));
- if( pFunc->zName==nth_valueName
- || pFunc->zName==first_valueName
- ){
- sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp);
- sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
- }
+ if( pMWin->regStartRowid==0 ){
+ if( pFunc->zName==nth_valueName || pFunc->zName==first_valueName ){
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp);
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
+ }
- if( (pFunc->funcFlags & SQLITE_FUNC_MINMAX) && pWin->csrApp ){
- assert( pWin->eStart!=TK_UNBOUNDED );
- sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp);
- sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
+ if( (pFunc->funcFlags & SQLITE_FUNC_MINMAX) && pWin->csrApp ){
+ assert( pWin->eStart!=TK_UNBOUNDED );
+ sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp);
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1);
+ }
}
}
regArg = pParse->nMem+1;
@@ -146506,672 +147721,248 @@ static int windowInitAccum(Parse *pParse, Window *pMWin){
return regArg;
}
+/*
+** Return true if the current frame should be cached in the ephemeral table,
+** even if there are no xInverse() calls required.
+*/
+static int windowCacheFrame(Window *pMWin){
+ Window *pWin;
+ if( pMWin->regStartRowid ) return 1;
+ for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
+ FuncDef *pFunc = pWin->pFunc;
+ if( (pFunc->zName==nth_valueName)
+ || (pFunc->zName==first_valueName)
+ || (pFunc->zName==leadName)
+ || (pFunc->zName==lagName)
+ ){
+ return 1;
+ }
+ }
+ return 0;
+}
/*
-** This function does the work of sqlite3WindowCodeStep() for all "ROWS"
-** window frame types except for "BETWEEN UNBOUNDED PRECEDING AND CURRENT
-** ROW". Pseudo-code for each follows.
-**
-** ROWS BETWEEN <expr1> PRECEDING AND <expr2> FOLLOWING
-**
-** ...
-** if( new partition ){
-** Gosub flush_partition
-** }
-** Insert (record in eph-table)
-** sqlite3WhereEnd()
-** Gosub flush_partition
-**
-** flush_partition:
-** Once {
-** OpenDup (iEphCsr -> csrStart)
-** OpenDup (iEphCsr -> csrEnd)
-** }
-** regStart = <expr1> // PRECEDING expression
-** regEnd = <expr2> // FOLLOWING expression
-** if( regStart<0 || regEnd<0 ){ error! }
-** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done
-** Next(csrEnd) // if EOF skip Aggstep
-** Aggstep (csrEnd)
-** if( (regEnd--)<=0 ){
-** AggFinal (xValue)
-** Gosub addrGosub
-** Next(csr) // if EOF goto flush_partition_done
-** if( (regStart--)<=0 ){
-** AggInverse (csrStart)
-** Next(csrStart)
-** }
-** }
-** flush_partition_done:
-** ResetSorter (csr)
-** Return
-**
-** ROWS BETWEEN <expr> PRECEDING AND CURRENT ROW
-** ROWS BETWEEN CURRENT ROW AND <expr> FOLLOWING
-** ROWS BETWEEN UNBOUNDED PRECEDING AND <expr> FOLLOWING
-**
-** These are similar to the above. For "CURRENT ROW", intialize the
-** register to 0. For "UNBOUNDED PRECEDING" to infinity.
-**
-** ROWS BETWEEN <expr> PRECEDING AND UNBOUNDED FOLLOWING
-** ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
-**
-** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done
-** while( 1 ){
-** Next(csrEnd) // Exit while(1) at EOF
-** Aggstep (csrEnd)
-** }
-** while( 1 ){
-** AggFinal (xValue)
-** Gosub addrGosub
-** Next(csr) // if EOF goto flush_partition_done
-** if( (regStart--)<=0 ){
-** AggInverse (csrStart)
-** Next(csrStart)
-** }
-** }
-**
-** For the "CURRENT ROW AND UNBOUNDED FOLLOWING" case, the final if()
-** condition is always true (as if regStart were initialized to 0).
-**
-** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
-**
-** This is the only RANGE case handled by this routine. It modifies the
-** second while( 1 ) loop in "ROWS BETWEEN CURRENT ... UNBOUNDED..." to
-** be:
-**
-** while( 1 ){
-** AggFinal (xValue)
-** while( 1 ){
-** regPeer++
-** Gosub addrGosub
-** Next(csr) // if EOF goto flush_partition_done
-** if( new peer ) break;
-** }
-** while( (regPeer--)>0 ){
-** AggInverse (csrStart)
-** Next(csrStart)
-** }
-** }
-**
-** ROWS BETWEEN <expr> FOLLOWING AND <expr> FOLLOWING
-**
-** regEnd = regEnd - regStart
-** Rewind (csr,csrStart,csrEnd) // if EOF goto flush_partition_done
-** Aggstep (csrEnd)
-** Next(csrEnd) // if EOF fall-through
-** if( (regEnd--)<=0 ){
-** if( (regStart--)<=0 ){
-** AggFinal (xValue)
-** Gosub addrGosub
-** Next(csr) // if EOF goto flush_partition_done
-** }
-** AggInverse (csrStart)
-** Next (csrStart)
-** }
-**
-** ROWS BETWEEN <expr> PRECEDING AND <expr> PRECEDING
-**
-** Replace the bit after "Rewind" in the above with:
-**
-** if( (regEnd--)<=0 ){
-** AggStep (csrEnd)
-** Next (csrEnd)
-** }
-** AggFinal (xValue)
-** Gosub addrGosub
-** Next(csr) // if EOF goto flush_partition_done
-** if( (regStart--)<=0 ){
-** AggInverse (csr2)
-** Next (csr2)
-** }
+** regOld and regNew are each the first register in an array of size
+** pOrderBy->nExpr. This function generates code to compare the two
+** arrays of registers using the collation sequences and other comparison
+** parameters specified by pOrderBy.
**
+** If the two arrays are not equal, the contents of regNew is copied to
+** regOld and control falls through. Otherwise, if the contents of the arrays
+** are equal, an OP_Goto is executed. The address of the OP_Goto is returned.
*/
-static void windowCodeRowExprStep(
- Parse *pParse,
- Select *p,
- WhereInfo *pWInfo,
- int regGosub,
- int addrGosub
+static void windowIfNewPeer(
+ Parse *pParse,
+ ExprList *pOrderBy,
+ int regNew, /* First in array of new values */
+ int regOld, /* First in array of old values */
+ int addr /* Jump here */
){
- Window *pMWin = p->pWin;
Vdbe *v = sqlite3GetVdbe(pParse);
- int regFlushPart; /* Register for "Gosub flush_partition" */
- int lblFlushPart; /* Label for "Gosub flush_partition" */
- int lblFlushDone; /* Label for "Gosub flush_partition_done" */
-
- int regArg;
- int addr;
- int csrStart = pParse->nTab++;
- int csrEnd = pParse->nTab++;
- int regStart; /* Value of <expr> PRECEDING */
- int regEnd; /* Value of <expr> FOLLOWING */
- int addrGoto;
- int addrTop;
- int addrIfPos1 = 0;
- int addrIfPos2 = 0;
- int regSize = 0;
-
- assert( pMWin->eStart==TK_PRECEDING
- || pMWin->eStart==TK_CURRENT
- || pMWin->eStart==TK_FOLLOWING
- || pMWin->eStart==TK_UNBOUNDED
- );
- assert( pMWin->eEnd==TK_FOLLOWING
- || pMWin->eEnd==TK_CURRENT
- || pMWin->eEnd==TK_UNBOUNDED
- || pMWin->eEnd==TK_PRECEDING
- );
-
- /* Allocate register and label for the "flush_partition" sub-routine. */
- regFlushPart = ++pParse->nMem;
- lblFlushPart = sqlite3VdbeMakeLabel(pParse);
- lblFlushDone = sqlite3VdbeMakeLabel(pParse);
-
- regStart = ++pParse->nMem;
- regEnd = ++pParse->nMem;
-
- windowPartitionCache(pParse, p, pWInfo, regFlushPart, lblFlushPart, &regSize);
-
- addrGoto = sqlite3VdbeAddOp0(v, OP_Goto);
-
- /* Start of "flush_partition" */
- sqlite3VdbeResolveLabel(v, lblFlushPart);
- sqlite3VdbeAddOp2(v, OP_Once, 0, sqlite3VdbeCurrentAddr(v)+3);
- VdbeCoverage(v);
- VdbeComment((v, "Flush_partition subroutine"));
- sqlite3VdbeAddOp2(v, OP_OpenDup, csrStart, pMWin->iEphCsr);
- sqlite3VdbeAddOp2(v, OP_OpenDup, csrEnd, pMWin->iEphCsr);
-
- /* If either regStart or regEnd are not non-negative integers, throw
- ** an exception. */
- if( pMWin->pStart ){
- sqlite3ExprCode(pParse, pMWin->pStart, regStart);
- windowCheckIntValue(pParse, regStart, 0);
- }
- if( pMWin->pEnd ){
- sqlite3ExprCode(pParse, pMWin->pEnd, regEnd);
- windowCheckIntValue(pParse, regEnd, 1);
- }
-
- /* If this is "ROWS <expr1> FOLLOWING AND ROWS <expr2> FOLLOWING", do:
- **
- ** if( regEnd<regStart ){
- ** // The frame always consists of 0 rows
- ** regStart = regSize;
- ** }
- ** regEnd = regEnd - regStart;
- */
- if( pMWin->pEnd && pMWin->eStart==TK_FOLLOWING ){
- assert( pMWin->pStart!=0 );
- assert( pMWin->eEnd==TK_FOLLOWING );
- sqlite3VdbeAddOp3(v, OP_Ge, regStart, sqlite3VdbeCurrentAddr(v)+2, regEnd);
- VdbeCoverageNeverNull(v);
- sqlite3VdbeAddOp2(v, OP_Copy, regSize, regStart);
- sqlite3VdbeAddOp3(v, OP_Subtract, regStart, regEnd, regEnd);
- }
-
- if( pMWin->pStart && pMWin->eEnd==TK_PRECEDING ){
- assert( pMWin->pEnd!=0 );
- assert( pMWin->eStart==TK_PRECEDING );
- sqlite3VdbeAddOp3(v, OP_Le, regStart, sqlite3VdbeCurrentAddr(v)+3, regEnd);
- VdbeCoverageNeverNull(v);
- sqlite3VdbeAddOp2(v, OP_Copy, regSize, regStart);
- sqlite3VdbeAddOp2(v, OP_Copy, regSize, regEnd);
- }
-
- /* Initialize the accumulator register for each window function to NULL */
- regArg = windowInitAccum(pParse, pMWin);
-
- sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr, lblFlushDone);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Rewind, csrStart, lblFlushDone);
- VdbeCoverageNeverTaken(v);
- sqlite3VdbeChangeP5(v, 1);
- sqlite3VdbeAddOp2(v, OP_Rewind, csrEnd, lblFlushDone);
- VdbeCoverageNeverTaken(v);
- sqlite3VdbeChangeP5(v, 1);
-
- /* Invoke AggStep function for each window function using the row that
- ** csrEnd currently points to. Or, if csrEnd is already at EOF,
- ** do nothing. */
- addrTop = sqlite3VdbeCurrentAddr(v);
- if( pMWin->eEnd==TK_PRECEDING ){
- addrIfPos1 = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0 , 1);
- VdbeCoverage(v);
- }
- sqlite3VdbeAddOp2(v, OP_Next, csrEnd, sqlite3VdbeCurrentAddr(v)+2);
- VdbeCoverage(v);
- addr = sqlite3VdbeAddOp0(v, OP_Goto);
- windowAggStep(pParse, pMWin, csrEnd, 0, regArg, regSize);
- if( pMWin->eEnd==TK_UNBOUNDED ){
- sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop);
- sqlite3VdbeJumpHere(v, addr);
- addrTop = sqlite3VdbeCurrentAddr(v);
+ if( pOrderBy ){
+ int nVal = pOrderBy->nExpr;
+ KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOrderBy, 0, 0);
+ sqlite3VdbeAddOp3(v, OP_Compare, regOld, regNew, nVal);
+ sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
+ sqlite3VdbeAddOp3(v, OP_Jump,
+ sqlite3VdbeCurrentAddr(v)+1, addr, sqlite3VdbeCurrentAddr(v)+1
+ );
+ VdbeCoverageEqNe(v);
+ sqlite3VdbeAddOp3(v, OP_Copy, regNew, regOld, nVal-1);
}else{
- sqlite3VdbeJumpHere(v, addr);
- if( pMWin->eEnd==TK_PRECEDING ){
- sqlite3VdbeJumpHere(v, addrIfPos1);
- }
- }
-
- if( pMWin->eEnd==TK_FOLLOWING ){
- addrIfPos1 = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0 , 1);
- VdbeCoverage(v);
- }
- if( pMWin->eStart==TK_FOLLOWING ){
- addrIfPos2 = sqlite3VdbeAddOp3(v, OP_IfPos, regStart, 0 , 1);
- VdbeCoverage(v);
- }
- windowAggFinal(pParse, pMWin, 0);
- windowReturnOneRow(pParse, pMWin, regGosub, addrGosub);
- sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)+2);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Goto, 0, lblFlushDone);
- if( pMWin->eStart==TK_FOLLOWING ){
- sqlite3VdbeJumpHere(v, addrIfPos2);
- }
-
- if( pMWin->eStart==TK_CURRENT
- || pMWin->eStart==TK_PRECEDING
- || pMWin->eStart==TK_FOLLOWING
- ){
- int lblSkipInverse = sqlite3VdbeMakeLabel(pParse);;
- if( pMWin->eStart==TK_PRECEDING ){
- sqlite3VdbeAddOp3(v, OP_IfPos, regStart, lblSkipInverse, 1);
- VdbeCoverage(v);
- }
- if( pMWin->eStart==TK_FOLLOWING ){
- sqlite3VdbeAddOp2(v, OP_Next, csrStart, sqlite3VdbeCurrentAddr(v)+2);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Goto, 0, lblSkipInverse);
- }else{
- sqlite3VdbeAddOp2(v, OP_Next, csrStart, sqlite3VdbeCurrentAddr(v)+1);
- VdbeCoverageAlwaysTaken(v);
- }
- windowAggStep(pParse, pMWin, csrStart, 1, regArg, regSize);
- sqlite3VdbeResolveLabel(v, lblSkipInverse);
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
}
- if( pMWin->eEnd==TK_FOLLOWING ){
- sqlite3VdbeJumpHere(v, addrIfPos1);
- }
- sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop);
-
- /* flush_partition_done: */
- sqlite3VdbeResolveLabel(v, lblFlushDone);
- sqlite3VdbeAddOp1(v, OP_ResetSorter, pMWin->iEphCsr);
- sqlite3VdbeAddOp1(v, OP_Return, regFlushPart);
- VdbeComment((v, "end flush_partition subroutine"));
-
- /* Jump to here to skip over flush_partition */
- sqlite3VdbeJumpHere(v, addrGoto);
}
/*
-** This function does the work of sqlite3WindowCodeStep() for cases that
-** would normally be handled by windowCodeDefaultStep() when there are
-** one or more built-in window-functions that require the entire partition
-** to be cached in a temp table before any rows can be returned. Additionally.
-** "RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING" is always handled by
-** this function.
-**
-** Pseudo-code corresponding to the VM code generated by this function
-** for each type of window follows.
-**
-** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-**
-** flush_partition:
-** Once {
-** OpenDup (iEphCsr -> csrLead)
-** }
-** Integer ctr 0
-** foreach row (csrLead){
-** if( new peer ){
-** AggFinal (xValue)
-** for(i=0; i<ctr; i++){
-** Gosub addrGosub
-** Next iEphCsr
-** }
-** Integer ctr 0
-** }
-** AggStep (csrLead)
-** Incr ctr
-** }
-**
-** AggFinal (xFinalize)
-** for(i=0; i<ctr; i++){
-** Gosub addrGosub
-** Next iEphCsr
-** }
-**
-** ResetSorter (csr)
-** Return
-**
-** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-**
-** As above, except that the "if( new peer )" branch is always taken.
-**
-** RANGE BETWEEN CURRENT ROW AND CURRENT ROW
-**
-** As above, except that each of the for() loops becomes:
-**
-** for(i=0; i<ctr; i++){
-** Gosub addrGosub
-** AggInverse (iEphCsr)
-** Next iEphCsr
-** }
-**
-** RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
+** This function is called as part of generating VM programs for RANGE
+** offset PRECEDING/FOLLOWING frame boundaries. Assuming "ASC" order for
+** the ORDER BY term in the window, it generates code equivalent to:
**
-** flush_partition:
-** Once {
-** OpenDup (iEphCsr -> csrLead)
-** }
-** foreach row (csrLead) {
-** AggStep (csrLead)
-** }
-** foreach row (iEphCsr) {
-** Gosub addrGosub
-** }
-**
-** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
-**
-** flush_partition:
-** Once {
-** OpenDup (iEphCsr -> csrLead)
-** }
-** foreach row (csrLead){
-** AggStep (csrLead)
-** }
-** Rewind (csrLead)
-** Integer ctr 0
-** foreach row (csrLead){
-** if( new peer ){
-** AggFinal (xValue)
-** for(i=0; i<ctr; i++){
-** Gosub addrGosub
-** AggInverse (iEphCsr)
-** Next iEphCsr
-** }
-** Integer ctr 0
-** }
-** Incr ctr
-** }
+** if( csr1.peerVal + regVal >= csr2.peerVal ) goto lbl;
**
-** AggFinal (xFinalize)
-** for(i=0; i<ctr; i++){
-** Gosub addrGosub
-** Next iEphCsr
-** }
-**
-** ResetSorter (csr)
-** Return
+** A special type of arithmetic is used such that if csr.peerVal is not
+** a numeric type (real or integer), then the result of the addition is
+** a copy of csr1.peerVal.
*/
-static void windowCodeCacheStep(
- Parse *pParse,
- Select *p,
- WhereInfo *pWInfo,
- int regGosub,
- int addrGosub
+static void windowCodeRangeTest(
+ WindowCodeArg *p,
+ int op, /* OP_Ge or OP_Gt */
+ int csr1,
+ int regVal,
+ int csr2,
+ int lbl
){
- Window *pMWin = p->pWin;
+ Parse *pParse = p->pParse;
Vdbe *v = sqlite3GetVdbe(pParse);
- int k;
- int addr;
- ExprList *pPart = pMWin->pPartition;
- ExprList *pOrderBy = pMWin->pOrderBy;
- int nPeer = pOrderBy ? pOrderBy->nExpr : 0;
- int regNewPeer;
-
- int addrGoto; /* Address of Goto used to jump flush_par.. */
- int addrNext; /* Jump here for next iteration of loop */
- int regFlushPart;
- int lblFlushPart;
- int csrLead;
- int regCtr;
- int regArg; /* Register array to martial function args */
- int regSize;
- int lblEmpty;
- int bReverse = pMWin->pOrderBy && pMWin->eStart==TK_CURRENT
- && pMWin->eEnd==TK_UNBOUNDED;
-
- assert( (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT)
- || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_UNBOUNDED)
- || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_CURRENT)
- || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED)
- );
-
- lblEmpty = sqlite3VdbeMakeLabel(pParse);
- regNewPeer = pParse->nMem+1;
- pParse->nMem += nPeer;
-
- /* Allocate register and label for the "flush_partition" sub-routine. */
- regFlushPart = ++pParse->nMem;
- lblFlushPart = sqlite3VdbeMakeLabel(pParse);
+ int reg1 = sqlite3GetTempReg(pParse);
+ int reg2 = sqlite3GetTempReg(pParse);
+ int arith = OP_Add;
+ int addrGe;
- csrLead = pParse->nTab++;
- regCtr = ++pParse->nMem;
-
- windowPartitionCache(pParse, p, pWInfo, regFlushPart, lblFlushPart, &regSize);
- addrGoto = sqlite3VdbeAddOp0(v, OP_Goto);
-
- /* Start of "flush_partition" */
- sqlite3VdbeResolveLabel(v, lblFlushPart);
- sqlite3VdbeAddOp2(v, OP_Once, 0, sqlite3VdbeCurrentAddr(v)+2);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_OpenDup, csrLead, pMWin->iEphCsr);
-
- /* Initialize the accumulator register for each window function to NULL */
- regArg = windowInitAccum(pParse, pMWin);
-
- sqlite3VdbeAddOp2(v, OP_Integer, 0, regCtr);
- sqlite3VdbeAddOp2(v, OP_Rewind, csrLead, lblEmpty);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr, lblEmpty);
- VdbeCoverageNeverTaken(v);
+ int regString = ++pParse->nMem;
- if( bReverse ){
- int addr2 = sqlite3VdbeCurrentAddr(v);
- windowAggStep(pParse, pMWin, csrLead, 0, regArg, regSize);
- sqlite3VdbeAddOp2(v, OP_Next, csrLead, addr2);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Rewind, csrLead, lblEmpty);
- VdbeCoverageNeverTaken(v);
- }
- addrNext = sqlite3VdbeCurrentAddr(v);
-
- if( pOrderBy && (pMWin->eEnd==TK_CURRENT || pMWin->eStart==TK_CURRENT) ){
- int bCurrent = (pMWin->eStart==TK_CURRENT);
- int addrJump = 0; /* Address of OP_Jump below */
- if( pMWin->eType==TK_RANGE ){
- int iOff = pMWin->nBufferCol + (pPart ? pPart->nExpr : 0);
- int regPeer = pMWin->regPart + (pPart ? pPart->nExpr : 0);
- KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOrderBy, 0, 0);
- for(k=0; k<nPeer; k++){
- sqlite3VdbeAddOp3(v, OP_Column, csrLead, iOff+k, regNewPeer+k);
- }
- addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPeer, regPeer, nPeer);
- sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
- addrJump = sqlite3VdbeAddOp3(v, OP_Jump, addr+2, 0, addr+2);
- VdbeCoverage(v);
- sqlite3VdbeAddOp3(v, OP_Copy, regNewPeer, regPeer, nPeer-1);
+ assert( op==OP_Ge || op==OP_Gt || op==OP_Le );
+ assert( p->pMWin->pOrderBy && p->pMWin->pOrderBy->nExpr==1 );
+ if( p->pMWin->pOrderBy->a[0].sortOrder ){
+ switch( op ){
+ case OP_Ge: op = OP_Le; break;
+ case OP_Gt: op = OP_Lt; break;
+ default: assert( op==OP_Le ); op = OP_Ge; break;
}
-
- windowReturnRows(pParse, pMWin, regCtr, regGosub, addrGosub,
- (bCurrent ? regArg : 0), (bCurrent ? regSize : 0)
- );
- if( addrJump ) sqlite3VdbeJumpHere(v, addrJump);
+ arith = OP_Subtract;
}
- if( bReverse==0 ){
- windowAggStep(pParse, pMWin, csrLead, 0, regArg, regSize);
- }
- sqlite3VdbeAddOp2(v, OP_AddImm, regCtr, 1);
- sqlite3VdbeAddOp2(v, OP_Next, csrLead, addrNext);
- VdbeCoverage(v);
-
- windowReturnRows(pParse, pMWin, regCtr, regGosub, addrGosub, 0, 0);
+ windowReadPeerValues(p, csr1, reg1);
+ windowReadPeerValues(p, csr2, reg2);
- sqlite3VdbeResolveLabel(v, lblEmpty);
- sqlite3VdbeAddOp1(v, OP_ResetSorter, pMWin->iEphCsr);
- sqlite3VdbeAddOp1(v, OP_Return, regFlushPart);
+ /* Check if the peer value for csr1 value is a text or blob by comparing
+ ** it to the smallest possible string - ''. If it is, jump over the
+ ** OP_Add or OP_Subtract operation and proceed directly to the comparison. */
+ sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC);
+ addrGe = sqlite3VdbeAddOp3(v, OP_Ge, regString, 0, reg1);
+ VdbeCoverage(v);
+ sqlite3VdbeAddOp3(v, arith, regVal, reg1, reg1);
+ sqlite3VdbeJumpHere(v, addrGe);
+ sqlite3VdbeAddOp3(v, op, reg2, lbl, reg1); VdbeCoverage(v);
+ sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
+ assert( op==OP_Ge || op==OP_Gt || op==OP_Lt || op==OP_Le );
+ testcase(op==OP_Ge); VdbeCoverageIf(v, op==OP_Ge);
+ testcase(op==OP_Lt); VdbeCoverageIf(v, op==OP_Lt);
+ testcase(op==OP_Le); VdbeCoverageIf(v, op==OP_Le);
+ testcase(op==OP_Gt); VdbeCoverageIf(v, op==OP_Gt);
- /* Jump to here to skip over flush_partition */
- sqlite3VdbeJumpHere(v, addrGoto);
+ sqlite3ReleaseTempReg(pParse, reg1);
+ sqlite3ReleaseTempReg(pParse, reg2);
}
-
/*
-** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-**
-** ...
-** if( new partition ){
-** AggFinal (xFinalize)
-** Gosub addrGosub
-** ResetSorter eph-table
-** }
-** else if( new peer ){
-** AggFinal (xValue)
-** Gosub addrGosub
-** ResetSorter eph-table
-** }
-** AggStep
-** Insert (record into eph-table)
-** sqlite3WhereEnd()
-** AggFinal (xFinalize)
-** Gosub addrGosub
-**
-** RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
-**
-** As above, except take no action for a "new peer". Invoke
-** the sub-routine once only for each partition.
-**
-** RANGE BETWEEN CURRENT ROW AND CURRENT ROW
-**
-** As above, except that the "new peer" condition is handled in the
-** same way as "new partition" (so there is no "else if" block).
-**
-** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-**
-** As above, except assume every row is a "new peer".
+** Helper function for sqlite3WindowCodeStep(). Each call to this function
+** generates VM code for a single RETURN_ROW, AGGSTEP or AGGINVERSE
+** operation. Refer to the header comment for sqlite3WindowCodeStep() for
+** details.
*/
-static void windowCodeDefaultStep(
- Parse *pParse,
- Select *p,
- WhereInfo *pWInfo,
- int regGosub,
- int addrGosub
+static int windowCodeOp(
+ WindowCodeArg *p, /* Context object */
+ int op, /* WINDOW_RETURN_ROW, AGGSTEP or AGGINVERSE */
+ int regCountdown, /* Register for OP_IfPos countdown */
+ int jumpOnEof /* Jump here if stepped cursor reaches EOF */
){
- Window *pMWin = p->pWin;
- Vdbe *v = sqlite3GetVdbe(pParse);
- int k;
- int iSubCsr = p->pSrc->a[0].iCursor;
- int nSub = p->pSrc->a[0].pTab->nCol;
- int reg = pParse->nMem+1;
- int regRecord = reg+nSub;
- int regRowid = regRecord+1;
- int addr;
- ExprList *pPart = pMWin->pPartition;
- ExprList *pOrderBy = pMWin->pOrderBy;
-
- assert( pMWin->eType==TK_RANGE
- || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT)
- );
-
- assert( (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_CURRENT)
- || (pMWin->eStart==TK_UNBOUNDED && pMWin->eEnd==TK_UNBOUNDED)
- || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_CURRENT)
- || (pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED && !pOrderBy)
- );
-
- if( pMWin->eEnd==TK_UNBOUNDED ){
- pOrderBy = 0;
- }
-
- pParse->nMem += nSub + 2;
-
- /* Load the individual column values of the row returned by
- ** the sub-select into an array of registers. */
- for(k=0; k<nSub; k++){
- sqlite3VdbeAddOp3(v, OP_Column, iSubCsr, k, reg+k);
+ int csr, reg;
+ Parse *pParse = p->pParse;
+ Window *pMWin = p->pMWin;
+ int ret = 0;
+ Vdbe *v = p->pVdbe;
+ int addrIf = 0;
+ int addrContinue = 0;
+ int addrGoto = 0;
+ int bPeer = (pMWin->eFrmType!=TK_ROWS);
+
+ int lblDone = sqlite3VdbeMakeLabel(pParse);
+ int addrNextRange = 0;
+
+ /* Special case - WINDOW_AGGINVERSE is always a no-op if the frame
+ ** starts with UNBOUNDED PRECEDING. */
+ if( op==WINDOW_AGGINVERSE && pMWin->eStart==TK_UNBOUNDED ){
+ assert( regCountdown==0 && jumpOnEof==0 );
+ return 0;
}
- /* Check if this is the start of a new partition or peer group. */
- if( pPart || pOrderBy ){
- int nPart = (pPart ? pPart->nExpr : 0);
- int addrGoto = 0;
- int addrJump = 0;
- int nPeer = (pOrderBy ? pOrderBy->nExpr : 0);
-
- if( pPart ){
- int regNewPart = reg + pMWin->nBufferCol;
- KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pPart, 0, 0);
- addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPart, pMWin->regPart,nPart);
- sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
- addrJump = sqlite3VdbeAddOp3(v, OP_Jump, addr+2, 0, addr+2);
- VdbeCoverageEqNe(v);
- windowAggFinal(pParse, pMWin, 1);
- if( pOrderBy ){
- addrGoto = sqlite3VdbeAddOp0(v, OP_Goto);
+ if( regCountdown>0 ){
+ if( pMWin->eFrmType==TK_RANGE ){
+ addrNextRange = sqlite3VdbeCurrentAddr(v);
+ assert( op==WINDOW_AGGINVERSE || op==WINDOW_AGGSTEP );
+ if( op==WINDOW_AGGINVERSE ){
+ if( pMWin->eStart==TK_FOLLOWING ){
+ windowCodeRangeTest(
+ p, OP_Le, p->current.csr, regCountdown, p->start.csr, lblDone
+ );
+ }else{
+ windowCodeRangeTest(
+ p, OP_Ge, p->start.csr, regCountdown, p->current.csr, lblDone
+ );
+ }
+ }else{
+ windowCodeRangeTest(
+ p, OP_Gt, p->end.csr, regCountdown, p->current.csr, lblDone
+ );
}
+ }else{
+ addrIf = sqlite3VdbeAddOp3(v, OP_IfPos, regCountdown, 0, 1);
+ VdbeCoverage(v);
}
+ }
- if( pOrderBy ){
- int regNewPeer = reg + pMWin->nBufferCol + nPart;
- int regPeer = pMWin->regPart + nPart;
+ if( op==WINDOW_RETURN_ROW && pMWin->regStartRowid==0 ){
+ windowAggFinal(p, 0);
+ }
+ addrContinue = sqlite3VdbeCurrentAddr(v);
+ switch( op ){
+ case WINDOW_RETURN_ROW:
+ csr = p->current.csr;
+ reg = p->current.reg;
+ windowReturnOneRow(p);
+ break;
- if( addrJump ) sqlite3VdbeJumpHere(v, addrJump);
- if( pMWin->eType==TK_RANGE ){
- KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOrderBy, 0, 0);
- addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPeer, regPeer, nPeer);
- sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
- addrJump = sqlite3VdbeAddOp3(v, OP_Jump, addr+2, 0, addr+2);
- VdbeCoverage(v);
+ case WINDOW_AGGINVERSE:
+ csr = p->start.csr;
+ reg = p->start.reg;
+ if( pMWin->regStartRowid ){
+ assert( pMWin->regEndRowid );
+ sqlite3VdbeAddOp2(v, OP_AddImm, pMWin->regStartRowid, 1);
}else{
- addrJump = 0;
+ windowAggStep(pParse, pMWin, csr, 1, p->regArg);
}
- windowAggFinal(pParse, pMWin, pMWin->eStart==TK_CURRENT);
- if( addrGoto ) sqlite3VdbeJumpHere(v, addrGoto);
- }
-
- sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr,sqlite3VdbeCurrentAddr(v)+3);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub);
- sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)-1);
- VdbeCoverage(v);
-
- sqlite3VdbeAddOp1(v, OP_ResetSorter, pMWin->iEphCsr);
- sqlite3VdbeAddOp3(
- v, OP_Copy, reg+pMWin->nBufferCol, pMWin->regPart, nPart+nPeer-1
- );
+ break;
- if( addrJump ) sqlite3VdbeJumpHere(v, addrJump);
+ default:
+ assert( op==WINDOW_AGGSTEP );
+ csr = p->end.csr;
+ reg = p->end.reg;
+ if( pMWin->regStartRowid ){
+ assert( pMWin->regEndRowid );
+ sqlite3VdbeAddOp2(v, OP_AddImm, pMWin->regEndRowid, 1);
+ }else{
+ windowAggStep(pParse, pMWin, csr, 0, p->regArg);
+ }
+ break;
}
- /* Invoke step function for window functions */
- windowAggStep(pParse, pMWin, -1, 0, reg, 0);
+ if( op==p->eDelete ){
+ sqlite3VdbeAddOp1(v, OP_Delete, csr);
+ sqlite3VdbeChangeP5(v, OPFLAG_SAVEPOSITION);
+ }
- /* Buffer the current row in the ephemeral table. */
- if( pMWin->nBufferCol>0 ){
- sqlite3VdbeAddOp3(v, OP_MakeRecord, reg, pMWin->nBufferCol, regRecord);
+ if( jumpOnEof ){
+ sqlite3VdbeAddOp2(v, OP_Next, csr, sqlite3VdbeCurrentAddr(v)+2);
+ VdbeCoverage(v);
+ ret = sqlite3VdbeAddOp0(v, OP_Goto);
}else{
- sqlite3VdbeAddOp2(v, OP_Blob, 0, regRecord);
- sqlite3VdbeAppendP4(v, (void*)"", 0);
+ sqlite3VdbeAddOp2(v, OP_Next, csr, sqlite3VdbeCurrentAddr(v)+1+bPeer);
+ VdbeCoverage(v);
+ if( bPeer ){
+ addrGoto = sqlite3VdbeAddOp0(v, OP_Goto);
+ }
}
- sqlite3VdbeAddOp2(v, OP_NewRowid, pMWin->iEphCsr, regRowid);
- sqlite3VdbeAddOp3(v, OP_Insert, pMWin->iEphCsr, regRecord, regRowid);
- /* End the database scan loop. */
- sqlite3WhereEnd(pWInfo);
+ if( bPeer ){
+ int nReg = (pMWin->pOrderBy ? pMWin->pOrderBy->nExpr : 0);
+ int regTmp = (nReg ? sqlite3GetTempRange(pParse, nReg) : 0);
+ windowReadPeerValues(p, csr, regTmp);
+ windowIfNewPeer(pParse, pMWin->pOrderBy, regTmp, reg, addrContinue);
+ sqlite3ReleaseTempRange(pParse, regTmp, nReg);
+ }
- windowAggFinal(pParse, pMWin, 1);
- sqlite3VdbeAddOp2(v, OP_Rewind, pMWin->iEphCsr,sqlite3VdbeCurrentAddr(v)+3);
- VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Gosub, regGosub, addrGosub);
- sqlite3VdbeAddOp2(v, OP_Next, pMWin->iEphCsr, sqlite3VdbeCurrentAddr(v)-1);
- VdbeCoverage(v);
+ if( addrNextRange ){
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addrNextRange);
+ }
+ sqlite3VdbeResolveLabel(v, lblDone);
+ if( addrGoto ) sqlite3VdbeJumpHere(v, addrGoto);
+ if( addrIf ) sqlite3VdbeJumpHere(v, addrIf);
+ return ret;
}
+
/*
** Allocate and return a duplicate of the Window object indicated by the
** third argument. Set the Window.pOwner field of the new object to
@@ -147187,9 +147978,10 @@ SQLITE_PRIVATE Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p){
pNew->pFunc = p->pFunc;
pNew->pPartition = sqlite3ExprListDup(db, p->pPartition, 0);
pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, 0);
- pNew->eType = p->eType;
+ pNew->eFrmType = p->eFrmType;
pNew->eEnd = p->eEnd;
pNew->eStart = p->eStart;
+ pNew->eExclude = p->eExclude;
pNew->pStart = sqlite3ExprDup(db, p->pStart, 0);
pNew->pEnd = sqlite3ExprDup(db, p->pEnd, 0);
pNew->pOwner = pOwner;
@@ -147217,11 +148009,359 @@ SQLITE_PRIVATE Window *sqlite3WindowListDup(sqlite3 *db, Window *p){
}
/*
+** Return true if it can be determined at compile time that expression
+** pExpr evaluates to a value that, when cast to an integer, is greater
+** than zero. False otherwise.
+**
+** If an OOM error occurs, this function sets the Parse.db.mallocFailed
+** flag and returns zero.
+*/
+static int windowExprGtZero(Parse *pParse, Expr *pExpr){
+ int ret = 0;
+ sqlite3 *db = pParse->db;
+ sqlite3_value *pVal = 0;
+ sqlite3ValueFromExpr(db, pExpr, db->enc, SQLITE_AFF_NUMERIC, &pVal);
+ if( pVal && sqlite3_value_int(pVal)>0 ){
+ ret = 1;
+ }
+ sqlite3ValueFree(pVal);
+ return ret;
+}
+
+/*
** sqlite3WhereBegin() has already been called for the SELECT statement
** passed as the second argument when this function is invoked. It generates
-** code to populate the Window.regResult register for each window function and
-** invoke the sub-routine at instruction addrGosub once for each row.
-** This function calls sqlite3WhereEnd() before returning.
+** code to populate the Window.regResult register for each window function
+** and invoke the sub-routine at instruction addrGosub once for each row.
+** sqlite3WhereEnd() is always called before returning.
+**
+** This function handles several different types of window frames, which
+** require slightly different processing. The following pseudo code is
+** used to implement window frames of the form:
+**
+** ROWS BETWEEN <expr1> PRECEDING AND <expr2> FOLLOWING
+**
+** Other window frame types use variants of the following:
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+**
+** if( first row of partition ){
+** // Rewind three cursors, all open on the eph table.
+** Rewind(csrEnd);
+** Rewind(csrStart);
+** Rewind(csrCurrent);
+**
+** regEnd = <expr2> // FOLLOWING expression
+** regStart = <expr1> // PRECEDING expression
+** }else{
+** // First time this branch is taken, the eph table contains two
+** // rows. The first row in the partition, which all three cursors
+** // currently point to, and the following row.
+** AGGSTEP
+** if( (regEnd--)<=0 ){
+** RETURN_ROW
+** if( (regStart--)<=0 ){
+** AGGINVERSE
+** }
+** }
+** }
+** }
+** flush:
+** AGGSTEP
+** while( 1 ){
+** RETURN ROW
+** if( csrCurrent is EOF ) break;
+** if( (regStart--)<=0 ){
+** AggInverse(csrStart)
+** Next(csrStart)
+** }
+** }
+**
+** The pseudo-code above uses the following shorthand:
+**
+** AGGSTEP: invoke the aggregate xStep() function for each window function
+** with arguments read from the current row of cursor csrEnd, then
+** step cursor csrEnd forward one row (i.e. sqlite3BtreeNext()).
+**
+** RETURN_ROW: return a row to the caller based on the contents of the
+** current row of csrCurrent and the current state of all
+** aggregates. Then step cursor csrCurrent forward one row.
+**
+** AGGINVERSE: invoke the aggregate xInverse() function for each window
+** functions with arguments read from the current row of cursor
+** csrStart. Then step csrStart forward one row.
+**
+** There are two other ROWS window frames that are handled significantly
+** differently from the above - "BETWEEN <expr> PRECEDING AND <expr> PRECEDING"
+** and "BETWEEN <expr> FOLLOWING AND <expr> FOLLOWING". These are special
+** cases because they change the order in which the three cursors (csrStart,
+** csrCurrent and csrEnd) iterate through the ephemeral table. Cases that
+** use UNBOUNDED or CURRENT ROW are much simpler variations on one of these
+** three.
+**
+** ROWS BETWEEN <expr1> PRECEDING AND <expr2> PRECEDING
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+** if( first row of partition ){
+** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent)
+** regEnd = <expr2>
+** regStart = <expr1>
+** }else{
+** if( (regEnd--)<=0 ){
+** AGGSTEP
+** }
+** RETURN_ROW
+** if( (regStart--)<=0 ){
+** AGGINVERSE
+** }
+** }
+** }
+** flush:
+** if( (regEnd--)<=0 ){
+** AGGSTEP
+** }
+** RETURN_ROW
+**
+**
+** ROWS BETWEEN <expr1> FOLLOWING AND <expr2> FOLLOWING
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+** if( first row of partition ){
+** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent)
+** regEnd = <expr2>
+** regStart = regEnd - <expr1>
+** }else{
+** AGGSTEP
+** if( (regEnd--)<=0 ){
+** RETURN_ROW
+** }
+** if( (regStart--)<=0 ){
+** AGGINVERSE
+** }
+** }
+** }
+** flush:
+** AGGSTEP
+** while( 1 ){
+** if( (regEnd--)<=0 ){
+** RETURN_ROW
+** if( eof ) break;
+** }
+** if( (regStart--)<=0 ){
+** AGGINVERSE
+** if( eof ) break
+** }
+** }
+** while( !eof csrCurrent ){
+** RETURN_ROW
+** }
+**
+** For the most part, the patterns above are adapted to support UNBOUNDED by
+** assuming that it is equivalent to "infinity PRECEDING/FOLLOWING" and
+** CURRENT ROW by assuming that it is equivilent to "0 PRECEDING/FOLLOWING".
+** This is optimized of course - branches that will never be taken and
+** conditions that are always true are omitted from the VM code. The only
+** exceptional case is:
+**
+** ROWS BETWEEN <expr1> FOLLOWING AND UNBOUNDED FOLLOWING
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+** if( first row of partition ){
+** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent)
+** regStart = <expr1>
+** }else{
+** AGGSTEP
+** }
+** }
+** flush:
+** AGGSTEP
+** while( 1 ){
+** if( (regStart--)<=0 ){
+** AGGINVERSE
+** if( eof ) break
+** }
+** RETURN_ROW
+** }
+** while( !eof csrCurrent ){
+** RETURN_ROW
+** }
+**
+** Also requiring special handling are the cases:
+**
+** ROWS BETWEEN <expr1> PRECEDING AND <expr2> PRECEDING
+** ROWS BETWEEN <expr1> FOLLOWING AND <expr2> FOLLOWING
+**
+** when (expr1 < expr2). This is detected at runtime, not by this function.
+** To handle this case, the pseudo-code programs depicted above are modified
+** slightly to be:
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+** if( first row of partition ){
+** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent)
+** regEnd = <expr2>
+** regStart = <expr1>
+** if( regEnd < regStart ){
+** RETURN_ROW
+** delete eph table contents
+** continue
+** }
+** ...
+**
+** The new "continue" statement in the above jumps to the next iteration
+** of the outer loop - the one started by sqlite3WhereBegin().
+**
+** The various GROUPS cases are implemented using the same patterns as
+** ROWS. The VM code is modified slightly so that:
+**
+** 1. The else branch in the main loop is only taken if the row just
+** added to the ephemeral table is the start of a new group. In
+** other words, it becomes:
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+** if( first row of partition ){
+** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent)
+** regEnd = <expr2>
+** regStart = <expr1>
+** }else if( new group ){
+** ...
+** }
+** }
+**
+** 2. Instead of processing a single row, each RETURN_ROW, AGGSTEP or
+** AGGINVERSE step processes the current row of the relevant cursor and
+** all subsequent rows belonging to the same group.
+**
+** RANGE window frames are a little different again. As for GROUPS, the
+** main loop runs once per group only. And RETURN_ROW, AGGSTEP and AGGINVERSE
+** deal in groups instead of rows. As for ROWS and GROUPS, there are three
+** basic cases:
+**
+** RANGE BETWEEN <expr1> PRECEDING AND <expr2> FOLLOWING
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+** if( first row of partition ){
+** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent)
+** regEnd = <expr2>
+** regStart = <expr1>
+** }else{
+** AGGSTEP
+** while( (csrCurrent.key + regEnd) < csrEnd.key ){
+** RETURN_ROW
+** while( csrStart.key + regStart) < csrCurrent.key ){
+** AGGINVERSE
+** }
+** }
+** }
+** }
+** flush:
+** AGGSTEP
+** while( 1 ){
+** RETURN ROW
+** if( csrCurrent is EOF ) break;
+** while( csrStart.key + regStart) < csrCurrent.key ){
+** AGGINVERSE
+** }
+** }
+** }
+**
+** In the above notation, "csr.key" means the current value of the ORDER BY
+** expression (there is only ever 1 for a RANGE that uses an <expr> FOLLOWING
+** or <expr PRECEDING) read from cursor csr.
+**
+** RANGE BETWEEN <expr1> PRECEDING AND <expr2> PRECEDING
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+** if( first row of partition ){
+** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent)
+** regEnd = <expr2>
+** regStart = <expr1>
+** }else{
+** if( (csrEnd.key + regEnd) <= csrCurrent.key ){
+** AGGSTEP
+** }
+** while( (csrStart.key + regStart) < csrCurrent.key ){
+** AGGINVERSE
+** }
+** RETURN_ROW
+** }
+** }
+** flush:
+** while( (csrEnd.key + regEnd) <= csrCurrent.key ){
+** AGGSTEP
+** }
+** while( (csrStart.key + regStart) < csrCurrent.key ){
+** AGGINVERSE
+** }
+** RETURN_ROW
+**
+** RANGE BETWEEN <expr1> FOLLOWING AND <expr2> FOLLOWING
+**
+** ... loop started by sqlite3WhereBegin() ...
+** if( new partition ){
+** Gosub flush
+** }
+** Insert new row into eph table.
+** if( first row of partition ){
+** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent)
+** regEnd = <expr2>
+** regStart = <expr1>
+** }else{
+** AGGSTEP
+** while( (csrCurrent.key + regEnd) < csrEnd.key ){
+** while( (csrCurrent.key + regStart) > csrStart.key ){
+** AGGINVERSE
+** }
+** RETURN_ROW
+** }
+** }
+** }
+** flush:
+** AGGSTEP
+** while( 1 ){
+** while( (csrCurrent.key + regStart) > csrStart.key ){
+** AGGINVERSE
+** if( eof ) break "while( 1 )" loop.
+** }
+** RETURN_ROW
+** }
+** while( !eof csrCurrent ){
+** RETURN_ROW
+** }
+**
+** The text above leaves out many details. Refer to the code and comments
+** below for a more complete picture.
*/
SQLITE_PRIVATE void sqlite3WindowCodeStep(
Parse *pParse, /* Parse context */
@@ -147231,75 +148371,321 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep(
int addrGosub /* OP_Gosub here to return each row */
){
Window *pMWin = p->pWin;
+ ExprList *pOrderBy = pMWin->pOrderBy;
+ Vdbe *v = sqlite3GetVdbe(pParse);
+ int csrWrite; /* Cursor used to write to eph. table */
+ int csrInput = p->pSrc->a[0].iCursor; /* Cursor of sub-select */
+ int nInput = p->pSrc->a[0].pTab->nCol; /* Number of cols returned by sub */
+ int iInput; /* To iterate through sub cols */
+ int addrNe; /* Address of OP_Ne */
+ int addrGosubFlush = 0; /* Address of OP_Gosub to flush: */
+ int addrInteger = 0; /* Address of OP_Integer */
+ int addrEmpty; /* Address of OP_Rewind in flush: */
+ int regStart = 0; /* Value of <expr> PRECEDING */
+ int regEnd = 0; /* Value of <expr> FOLLOWING */
+ int regNew; /* Array of registers holding new input row */
+ int regRecord; /* regNew array in record form */
+ int regRowid; /* Rowid for regRecord in eph table */
+ int regNewPeer = 0; /* Peer values for new row (part of regNew) */
+ int regPeer = 0; /* Peer values for current row */
+ int regFlushPart = 0; /* Register for "Gosub flush_partition" */
+ WindowCodeArg s; /* Context object for sub-routines */
+ int lblWhereEnd; /* Label just before sqlite3WhereEnd() code */
+
+ assert( pMWin->eStart==TK_PRECEDING || pMWin->eStart==TK_CURRENT
+ || pMWin->eStart==TK_FOLLOWING || pMWin->eStart==TK_UNBOUNDED
+ );
+ assert( pMWin->eEnd==TK_FOLLOWING || pMWin->eEnd==TK_CURRENT
+ || pMWin->eEnd==TK_UNBOUNDED || pMWin->eEnd==TK_PRECEDING
+ );
+ assert( pMWin->eExclude==0 || pMWin->eExclude==TK_CURRENT
+ || pMWin->eExclude==TK_GROUP || pMWin->eExclude==TK_TIES
+ || pMWin->eExclude==TK_NO
+ );
- /* There are three different functions that may be used to do the work
- ** of this one, depending on the window frame and the specific built-in
- ** window functions used (if any).
- **
- ** windowCodeRowExprStep() handles all "ROWS" window frames, except for:
- **
- ** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
- **
- ** The exception is because windowCodeRowExprStep() implements all window
- ** frame types by caching the entire partition in a temp table, and
- ** "ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW" is easy enough to
- ** implement without such a cache.
- **
- ** windowCodeCacheStep() is used for:
- **
- ** RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
- **
- ** It is also used for anything not handled by windowCodeRowExprStep()
- ** that invokes a built-in window function that requires the entire
- ** partition to be cached in a temp table before any rows are returned
- ** (e.g. nth_value() or percent_rank()).
- **
- ** Finally, assuming there is no built-in window function that requires
- ** the partition to be cached, windowCodeDefaultStep() is used for:
- **
- ** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
- ** RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
- ** RANGE BETWEEN CURRENT ROW AND CURRENT ROW
- ** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
- **
- ** windowCodeDefaultStep() is the only one of the three functions that
- ** does not cache each partition in a temp table before beginning to
- ** return rows.
- */
- if( pMWin->eType==TK_ROWS
- && (pMWin->eStart!=TK_UNBOUNDED||pMWin->eEnd!=TK_CURRENT||!pMWin->pOrderBy)
- ){
- VdbeModuleComment((pParse->pVdbe, "Begin RowExprStep()"));
- windowCodeRowExprStep(pParse, p, pWInfo, regGosub, addrGosub);
- }else{
- Window *pWin;
- int bCache = 0; /* True to use CacheStep() */
-
- if( pMWin->eStart==TK_CURRENT && pMWin->eEnd==TK_UNBOUNDED ){
- bCache = 1;
- }else{
- for(pWin=pMWin; pWin; pWin=pWin->pNextWin){
- FuncDef *pFunc = pWin->pFunc;
- if( (pFunc->funcFlags & SQLITE_FUNC_WINDOW_SIZE)
- || (pFunc->zName==nth_valueName)
- || (pFunc->zName==first_valueName)
- || (pFunc->zName==leadName)
- || (pFunc->zName==lagName)
- ){
- bCache = 1;
- break;
+ lblWhereEnd = sqlite3VdbeMakeLabel(pParse);
+
+ /* Fill in the context object */
+ memset(&s, 0, sizeof(WindowCodeArg));
+ s.pParse = pParse;
+ s.pMWin = pMWin;
+ s.pVdbe = v;
+ s.regGosub = regGosub;
+ s.addrGosub = addrGosub;
+ s.current.csr = pMWin->iEphCsr;
+ csrWrite = s.current.csr+1;
+ s.start.csr = s.current.csr+2;
+ s.end.csr = s.current.csr+3;
+
+ /* Figure out when rows may be deleted from the ephemeral table. There
+ ** are four options - they may never be deleted (eDelete==0), they may
+ ** be deleted as soon as they are no longer part of the window frame
+ ** (eDelete==WINDOW_AGGINVERSE), they may be deleted as after the row
+ ** has been returned to the caller (WINDOW_RETURN_ROW), or they may
+ ** be deleted after they enter the frame (WINDOW_AGGSTEP). */
+ switch( pMWin->eStart ){
+ case TK_FOLLOWING:
+ if( pMWin->eFrmType!=TK_RANGE
+ && windowExprGtZero(pParse, pMWin->pStart)
+ ){
+ s.eDelete = WINDOW_RETURN_ROW;
+ }
+ break;
+ case TK_UNBOUNDED:
+ if( windowCacheFrame(pMWin)==0 ){
+ if( pMWin->eEnd==TK_PRECEDING ){
+ if( pMWin->eFrmType!=TK_RANGE
+ && windowExprGtZero(pParse, pMWin->pEnd)
+ ){
+ s.eDelete = WINDOW_AGGSTEP;
+ }
+ }else{
+ s.eDelete = WINDOW_RETURN_ROW;
+ }
+ }
+ break;
+ default:
+ s.eDelete = WINDOW_AGGINVERSE;
+ break;
+ }
+
+ /* Allocate registers for the array of values from the sub-query, the
+ ** samve values in record form, and the rowid used to insert said record
+ ** into the ephemeral table. */
+ regNew = pParse->nMem+1;
+ pParse->nMem += nInput;
+ regRecord = ++pParse->nMem;
+ regRowid = ++pParse->nMem;
+
+ /* If the window frame contains an "<expr> PRECEDING" or "<expr> FOLLOWING"
+ ** clause, allocate registers to store the results of evaluating each
+ ** <expr>. */
+ if( pMWin->eStart==TK_PRECEDING || pMWin->eStart==TK_FOLLOWING ){
+ regStart = ++pParse->nMem;
+ }
+ if( pMWin->eEnd==TK_PRECEDING || pMWin->eEnd==TK_FOLLOWING ){
+ regEnd = ++pParse->nMem;
+ }
+
+ /* If this is not a "ROWS BETWEEN ..." frame, then allocate arrays of
+ ** registers to store copies of the ORDER BY expressions (peer values)
+ ** for the main loop, and for each cursor (start, current and end). */
+ if( pMWin->eFrmType!=TK_ROWS ){
+ int nPeer = (pOrderBy ? pOrderBy->nExpr : 0);
+ regNewPeer = regNew + pMWin->nBufferCol;
+ if( pMWin->pPartition ) regNewPeer += pMWin->pPartition->nExpr;
+ regPeer = pParse->nMem+1; pParse->nMem += nPeer;
+ s.start.reg = pParse->nMem+1; pParse->nMem += nPeer;
+ s.current.reg = pParse->nMem+1; pParse->nMem += nPeer;
+ s.end.reg = pParse->nMem+1; pParse->nMem += nPeer;
+ }
+
+ /* Load the column values for the row returned by the sub-select
+ ** into an array of registers starting at regNew. Assemble them into
+ ** a record in register regRecord. */
+ for(iInput=0; iInput<nInput; iInput++){
+ sqlite3VdbeAddOp3(v, OP_Column, csrInput, iInput, regNew+iInput);
+ }
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regNew, nInput, regRecord);
+
+ /* An input row has just been read into an array of registers starting
+ ** at regNew. If the window has a PARTITION clause, this block generates
+ ** VM code to check if the input row is the start of a new partition.
+ ** If so, it does an OP_Gosub to an address to be filled in later. The
+ ** address of the OP_Gosub is stored in local variable addrGosubFlush. */
+ if( pMWin->pPartition ){
+ int addr;
+ ExprList *pPart = pMWin->pPartition;
+ int nPart = pPart->nExpr;
+ int regNewPart = regNew + pMWin->nBufferCol;
+ KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pPart, 0, 0);
+
+ regFlushPart = ++pParse->nMem;
+ addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPart, pMWin->regPart, nPart);
+ sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO);
+ sqlite3VdbeAddOp3(v, OP_Jump, addr+2, addr+4, addr+2);
+ VdbeCoverageEqNe(v);
+ addrGosubFlush = sqlite3VdbeAddOp1(v, OP_Gosub, regFlushPart);
+ VdbeComment((v, "call flush_partition"));
+ sqlite3VdbeAddOp3(v, OP_Copy, regNewPart, pMWin->regPart, nPart-1);
+ }
+
+ /* Insert the new row into the ephemeral table */
+ sqlite3VdbeAddOp2(v, OP_NewRowid, csrWrite, regRowid);
+ sqlite3VdbeAddOp3(v, OP_Insert, csrWrite, regRecord, regRowid);
+ addrNe = sqlite3VdbeAddOp3(v, OP_Ne, pMWin->regOne, 0, regRowid);
+ VdbeCoverageNeverNull(v);
+
+ /* This block is run for the first row of each partition */
+ s.regArg = windowInitAccum(pParse, pMWin);
+
+ if( regStart ){
+ sqlite3ExprCode(pParse, pMWin->pStart, regStart);
+ windowCheckValue(pParse, regStart, 0 + (pMWin->eFrmType==TK_RANGE ? 3 : 0));
+ }
+ if( regEnd ){
+ sqlite3ExprCode(pParse, pMWin->pEnd, regEnd);
+ windowCheckValue(pParse, regEnd, 1 + (pMWin->eFrmType==TK_RANGE ? 3 : 0));
+ }
+
+ if( pMWin->eStart==pMWin->eEnd && regStart ){
+ int op = ((pMWin->eStart==TK_FOLLOWING) ? OP_Ge : OP_Le);
+ int addrGe = sqlite3VdbeAddOp3(v, op, regStart, 0, regEnd);
+ VdbeCoverageNeverNullIf(v, op==OP_Ge); /* NeverNull because bound <expr> */
+ VdbeCoverageNeverNullIf(v, op==OP_Le); /* values previously checked */
+ windowAggFinal(&s, 0);
+ sqlite3VdbeAddOp2(v, OP_Rewind, s.current.csr, 1);
+ VdbeCoverageNeverTaken(v);
+ windowReturnOneRow(&s);
+ sqlite3VdbeAddOp1(v, OP_ResetSorter, s.current.csr);
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd);
+ sqlite3VdbeJumpHere(v, addrGe);
+ }
+ if( pMWin->eStart==TK_FOLLOWING && pMWin->eFrmType!=TK_RANGE && regEnd ){
+ assert( pMWin->eEnd==TK_FOLLOWING );
+ sqlite3VdbeAddOp3(v, OP_Subtract, regStart, regEnd, regStart);
+ }
+
+ if( pMWin->eStart!=TK_UNBOUNDED ){
+ sqlite3VdbeAddOp2(v, OP_Rewind, s.start.csr, 1);
+ VdbeCoverageNeverTaken(v);
+ }
+ sqlite3VdbeAddOp2(v, OP_Rewind, s.current.csr, 1);
+ VdbeCoverageNeverTaken(v);
+ sqlite3VdbeAddOp2(v, OP_Rewind, s.end.csr, 1);
+ VdbeCoverageNeverTaken(v);
+ if( regPeer && pOrderBy ){
+ sqlite3VdbeAddOp3(v, OP_Copy, regNewPeer, regPeer, pOrderBy->nExpr-1);
+ sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.start.reg, pOrderBy->nExpr-1);
+ sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.current.reg, pOrderBy->nExpr-1);
+ sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.end.reg, pOrderBy->nExpr-1);
+ }
+
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd);
+
+ sqlite3VdbeJumpHere(v, addrNe);
+
+ /* Beginning of the block executed for the second and subsequent rows. */
+ if( regPeer ){
+ windowIfNewPeer(pParse, pOrderBy, regNewPeer, regPeer, lblWhereEnd);
+ }
+ if( pMWin->eStart==TK_FOLLOWING ){
+ windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0);
+ if( pMWin->eEnd!=TK_UNBOUNDED ){
+ if( pMWin->eFrmType==TK_RANGE ){
+ int lbl = sqlite3VdbeMakeLabel(pParse);
+ int addrNext = sqlite3VdbeCurrentAddr(v);
+ windowCodeRangeTest(&s, OP_Ge, s.current.csr, regEnd, s.end.csr, lbl);
+ windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
+ windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addrNext);
+ sqlite3VdbeResolveLabel(v, lbl);
+ }else{
+ windowCodeOp(&s, WINDOW_RETURN_ROW, regEnd, 0);
+ windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
+ }
+ }
+ }else
+ if( pMWin->eEnd==TK_PRECEDING ){
+ int bRPS = (pMWin->eStart==TK_PRECEDING && pMWin->eFrmType==TK_RANGE);
+ windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0);
+ if( bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
+ windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
+ if( !bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
+ }else{
+ int addr = 0;
+ windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0);
+ if( pMWin->eEnd!=TK_UNBOUNDED ){
+ if( pMWin->eFrmType==TK_RANGE ){
+ int lbl = 0;
+ addr = sqlite3VdbeCurrentAddr(v);
+ if( regEnd ){
+ lbl = sqlite3VdbeMakeLabel(pParse);
+ windowCodeRangeTest(&s, OP_Ge, s.current.csr, regEnd, s.end.csr, lbl);
+ }
+ windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
+ windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
+ if( regEnd ){
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
+ sqlite3VdbeResolveLabel(v, lbl);
}
+ }else{
+ if( regEnd ){
+ addr = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0, 1);
+ VdbeCoverage(v);
+ }
+ windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
+ windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
+ if( regEnd ) sqlite3VdbeJumpHere(v, addr);
}
}
+ }
- /* Otherwise, call windowCodeDefaultStep(). */
- if( bCache ){
- VdbeModuleComment((pParse->pVdbe, "Begin CacheStep()"));
- windowCodeCacheStep(pParse, p, pWInfo, regGosub, addrGosub);
- }else{
- VdbeModuleComment((pParse->pVdbe, "Begin DefaultStep()"));
- windowCodeDefaultStep(pParse, p, pWInfo, regGosub, addrGosub);
+ /* End of the main input loop */
+ sqlite3VdbeResolveLabel(v, lblWhereEnd);
+ sqlite3WhereEnd(pWInfo);
+
+ /* Fall through */
+ if( pMWin->pPartition ){
+ addrInteger = sqlite3VdbeAddOp2(v, OP_Integer, 0, regFlushPart);
+ sqlite3VdbeJumpHere(v, addrGosubFlush);
+ }
+
+ addrEmpty = sqlite3VdbeAddOp1(v, OP_Rewind, csrWrite);
+ VdbeCoverage(v);
+ if( pMWin->eEnd==TK_PRECEDING ){
+ int bRPS = (pMWin->eStart==TK_PRECEDING && pMWin->eFrmType==TK_RANGE);
+ windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0);
+ if( bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
+ windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0);
+ }else if( pMWin->eStart==TK_FOLLOWING ){
+ int addrStart;
+ int addrBreak1;
+ int addrBreak2;
+ int addrBreak3;
+ windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0);
+ if( pMWin->eFrmType==TK_RANGE ){
+ addrStart = sqlite3VdbeCurrentAddr(v);
+ addrBreak2 = windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 1);
+ addrBreak1 = windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 1);
+ }else
+ if( pMWin->eEnd==TK_UNBOUNDED ){
+ addrStart = sqlite3VdbeCurrentAddr(v);
+ addrBreak1 = windowCodeOp(&s, WINDOW_RETURN_ROW, regStart, 1);
+ addrBreak2 = windowCodeOp(&s, WINDOW_AGGINVERSE, 0, 1);
+ }else{
+ assert( pMWin->eEnd==TK_FOLLOWING );
+ addrStart = sqlite3VdbeCurrentAddr(v);
+ addrBreak1 = windowCodeOp(&s, WINDOW_RETURN_ROW, regEnd, 1);
+ addrBreak2 = windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 1);
+ }
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addrStart);
+ sqlite3VdbeJumpHere(v, addrBreak2);
+ addrStart = sqlite3VdbeCurrentAddr(v);
+ addrBreak3 = windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 1);
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addrStart);
+ sqlite3VdbeJumpHere(v, addrBreak1);
+ sqlite3VdbeJumpHere(v, addrBreak3);
+ }else{
+ int addrBreak;
+ int addrStart;
+ windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0);
+ addrStart = sqlite3VdbeCurrentAddr(v);
+ addrBreak = windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 1);
+ windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0);
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, addrStart);
+ sqlite3VdbeJumpHere(v, addrBreak);
+ }
+ sqlite3VdbeJumpHere(v, addrEmpty);
+
+ sqlite3VdbeAddOp1(v, OP_ResetSorter, s.current.csr);
+ if( pMWin->pPartition ){
+ if( pMWin->regStartRowid ){
+ sqlite3VdbeAddOp2(v, OP_Integer, 1, pMWin->regStartRowid);
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, pMWin->regEndRowid);
}
+ sqlite3VdbeChangeP1(v, addrInteger, sqlite3VdbeCurrentAddr(v));
+ sqlite3VdbeAddOp1(v, OP_Return, regFlushPart);
}
}
@@ -147488,6 +148874,10 @@ static void disableLookaside(Parse *pParse){
sqlite3ExprListSetName(pParse, p, pIdToken, 1);
return p;
}
+
+#if TK_SPAN>255
+# error too many tokens in the grammar
+#endif
/**************** End of %include directives **********************************/
/* These constants specify the various numeric values for terminal symbols
** in a format understandable to "makeheaders". This section is blank unless
@@ -147551,27 +148941,28 @@ static void disableLookaside(Parse *pParse){
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
-#define YYNOCODE 278
+#define YYNOCODE 302
#define YYACTIONTYPE unsigned short int
-#define YYWILDCARD 91
+#define YYWILDCARD 95
#define sqlite3ParserTOKENTYPE Token
typedef union {
int yyinit;
sqlite3ParserTOKENTYPE yy0;
- ExprList* yy42;
- int yy96;
- TriggerStep* yy119;
- Window* yy147;
- SrcList* yy167;
- Upsert* yy266;
- struct FrameBound yy317;
- IdList* yy336;
- struct TrigEvent yy350;
- struct {int value; int mask;} yy367;
- Select* yy423;
- const char* yy464;
- Expr* yy490;
- With* yy499;
+ TriggerStep* yy11;
+ IdList* yy76;
+ ExprList* yy94;
+ Upsert* yy95;
+ int yy100;
+ Expr* yy102;
+ struct {int value; int mask;} yy199;
+ u8 yy218;
+ With* yy243;
+ struct TrigEvent yy298;
+ Window* yy379;
+ struct FrameBound yy389;
+ Select* yy391;
+ SrcList* yy407;
+ const char* yy528;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
@@ -147587,17 +148978,17 @@ typedef union {
#define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse;
#define sqlite3ParserCTX_STORE yypParser->pParse=pParse;
#define YYFALLBACK 1
-#define YYNSTATE 524
-#define YYNRULE 369
-#define YYNTOKEN 155
-#define YY_MAX_SHIFT 523
-#define YY_MIN_SHIFTREDUCE 760
-#define YY_MAX_SHIFTREDUCE 1128
-#define YY_ERROR_ACTION 1129
-#define YY_ACCEPT_ACTION 1130
-#define YY_NO_ACTION 1131
-#define YY_MIN_REDUCE 1132
-#define YY_MAX_REDUCE 1500
+#define YYNSTATE 540
+#define YYNRULE 376
+#define YYNTOKEN 176
+#define YY_MAX_SHIFT 539
+#define YY_MIN_SHIFTREDUCE 783
+#define YY_MAX_SHIFTREDUCE 1158
+#define YY_ERROR_ACTION 1159
+#define YY_ACCEPT_ACTION 1160
+#define YY_NO_ACTION 1161
+#define YY_MIN_REDUCE 1162
+#define YY_MAX_REDUCE 1537
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
@@ -147664,569 +149055,601 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (2009)
+#define YY_ACTTAB_COUNT (2142)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 377, 518, 371, 107, 104, 200, 1293, 518, 1130, 1,
- /* 10 */ 1, 523, 2, 1134, 518, 1203, 1203, 1262, 277, 373,
- /* 20 */ 129, 495, 37, 37, 1397, 1201, 1201, 1211, 65, 65,
- /* 30 */ 480, 891, 107, 104, 200, 37, 37, 1043, 1494, 892,
- /* 40 */ 346, 1494, 342, 114, 115, 105, 1106, 1106, 957, 960,
- /* 50 */ 950, 950, 112, 112, 113, 113, 113, 113, 285, 254,
- /* 60 */ 254, 518, 254, 254, 500, 518, 495, 518, 107, 104,
- /* 70 */ 200, 1085, 515, 481, 386, 515, 1464, 442, 501, 230,
- /* 80 */ 197, 439, 37, 37, 1172, 210, 65, 65, 65, 65,
- /* 90 */ 254, 254, 111, 111, 111, 111, 110, 110, 109, 109,
- /* 100 */ 109, 108, 404, 515, 404, 155, 1041, 431, 401, 400,
- /* 110 */ 254, 254, 373, 1431, 1427, 408, 1110, 1085, 1086, 1087,
- /* 120 */ 284, 1112, 500, 515, 500, 368, 1433, 1421, 1428, 1111,
- /* 130 */ 1261, 499, 373, 502, 108, 404, 114, 115, 105, 1106,
- /* 140 */ 1106, 957, 960, 950, 950, 112, 112, 113, 113, 113,
- /* 150 */ 113, 276, 509, 1113, 369, 1113, 114, 115, 105, 1106,
- /* 160 */ 1106, 957, 960, 950, 950, 112, 112, 113, 113, 113,
- /* 170 */ 113, 496, 1420, 1431, 493, 1468, 1065, 260, 1063, 433,
- /* 180 */ 74, 107, 104, 200, 498, 111, 111, 111, 111, 110,
- /* 190 */ 110, 109, 109, 109, 108, 404, 373, 113, 113, 113,
- /* 200 */ 113, 106, 131, 91, 1361, 111, 111, 111, 111, 110,
- /* 210 */ 110, 109, 109, 109, 108, 404, 113, 113, 113, 113,
- /* 220 */ 114, 115, 105, 1106, 1106, 957, 960, 950, 950, 112,
- /* 230 */ 112, 113, 113, 113, 113, 111, 111, 111, 111, 110,
- /* 240 */ 110, 109, 109, 109, 108, 404, 116, 110, 110, 109,
- /* 250 */ 109, 109, 108, 404, 111, 111, 111, 111, 110, 110,
- /* 260 */ 109, 109, 109, 108, 404, 917, 512, 512, 512, 111,
- /* 270 */ 111, 111, 111, 110, 110, 109, 109, 109, 108, 404,
- /* 280 */ 517, 1198, 1177, 181, 109, 109, 109, 108, 404, 373,
- /* 290 */ 1198, 402, 402, 402, 75, 360, 111, 111, 111, 111,
- /* 300 */ 110, 110, 109, 109, 109, 108, 404, 382, 299, 419,
- /* 310 */ 287, 170, 518, 114, 115, 105, 1106, 1106, 957, 960,
- /* 320 */ 950, 950, 112, 112, 113, 113, 113, 113, 1444, 523,
- /* 330 */ 2, 1134, 518, 13, 13, 337, 277, 1085, 129, 226,
- /* 340 */ 937, 1058, 1000, 471, 917, 1211, 453, 384, 1085, 395,
- /* 350 */ 162, 1057, 155, 45, 45, 416, 928, 401, 400, 479,
- /* 360 */ 927, 12, 111, 111, 111, 111, 110, 110, 109, 109,
- /* 370 */ 109, 108, 404, 226, 286, 254, 254, 254, 254, 518,
- /* 380 */ 16, 16, 373, 1085, 1086, 1087, 314, 299, 515, 472,
- /* 390 */ 515, 927, 927, 929, 1085, 1086, 1087, 378, 276, 509,
- /* 400 */ 65, 65, 1113, 210, 1113, 1085, 114, 115, 105, 1106,
- /* 410 */ 1106, 957, 960, 950, 950, 112, 112, 113, 113, 113,
- /* 420 */ 113, 1448, 222, 1134, 1089, 461, 458, 457, 277, 180,
- /* 430 */ 129, 378, 392, 408, 423, 456, 500, 1211, 240, 257,
- /* 440 */ 324, 464, 319, 463, 227, 470, 12, 317, 424, 300,
- /* 450 */ 317, 1085, 1086, 1087, 485, 111, 111, 111, 111, 110,
- /* 460 */ 110, 109, 109, 109, 108, 404, 181, 118, 1085, 254,
- /* 470 */ 254, 1089, 518, 90, 351, 373, 518, 1181, 365, 798,
- /* 480 */ 1440, 339, 515, 248, 248, 77, 325, 133, 1085, 249,
- /* 490 */ 424, 300, 794, 49, 49, 210, 515, 65, 65, 114,
- /* 500 */ 115, 105, 1106, 1106, 957, 960, 950, 950, 112, 112,
- /* 510 */ 113, 113, 113, 113, 1085, 1086, 1087, 222, 1085, 438,
- /* 520 */ 461, 458, 457, 937, 787, 408, 171, 857, 362, 1021,
- /* 530 */ 456, 136, 198, 486, 1085, 1086, 1087, 448, 794, 928,
- /* 540 */ 5, 193, 192, 927, 1022, 107, 104, 200, 111, 111,
- /* 550 */ 111, 111, 110, 110, 109, 109, 109, 108, 404, 1023,
- /* 560 */ 254, 254, 803, 1085, 1085, 1086, 1087, 437, 373, 1085,
- /* 570 */ 344, 787, 791, 515, 927, 927, 929, 1085, 1408, 1396,
- /* 580 */ 832, 1085, 176, 3, 852, 1085, 518, 1439, 429, 851,
- /* 590 */ 833, 518, 114, 115, 105, 1106, 1106, 957, 960, 950,
- /* 600 */ 950, 112, 112, 113, 113, 113, 113, 13, 13, 1085,
- /* 610 */ 1086, 1087, 13, 13, 518, 1085, 1086, 1087, 1496, 358,
- /* 620 */ 1085, 389, 1234, 1085, 1086, 1087, 391, 1085, 1086, 1087,
- /* 630 */ 448, 1085, 1086, 1087, 518, 65, 65, 947, 947, 958,
- /* 640 */ 961, 111, 111, 111, 111, 110, 110, 109, 109, 109,
- /* 650 */ 108, 404, 518, 382, 878, 13, 13, 518, 877, 518,
- /* 660 */ 263, 373, 518, 431, 448, 1070, 1085, 1086, 1087, 267,
- /* 670 */ 448, 488, 1360, 64, 64, 431, 812, 155, 50, 50,
- /* 680 */ 65, 65, 518, 65, 65, 114, 115, 105, 1106, 1106,
- /* 690 */ 957, 960, 950, 950, 112, 112, 113, 113, 113, 113,
- /* 700 */ 518, 951, 382, 13, 13, 415, 411, 462, 414, 1085,
- /* 710 */ 1366, 777, 1210, 292, 297, 813, 399, 497, 181, 403,
- /* 720 */ 261, 15, 15, 276, 509, 414, 413, 1366, 1368, 410,
- /* 730 */ 372, 345, 1209, 264, 111, 111, 111, 111, 110, 110,
- /* 740 */ 109, 109, 109, 108, 404, 265, 254, 254, 229, 1405,
- /* 750 */ 268, 1215, 268, 1103, 373, 1085, 1086, 1087, 938, 515,
- /* 760 */ 393, 409, 876, 515, 254, 254, 1152, 482, 473, 262,
- /* 770 */ 422, 476, 325, 503, 289, 518, 291, 515, 114, 115,
- /* 780 */ 105, 1106, 1106, 957, 960, 950, 950, 112, 112, 113,
- /* 790 */ 113, 113, 113, 414, 1021, 1366, 39, 39, 254, 254,
- /* 800 */ 254, 254, 980, 254, 254, 254, 254, 255, 255, 1022,
- /* 810 */ 279, 515, 516, 515, 846, 846, 515, 138, 515, 518,
- /* 820 */ 515, 1043, 1495, 251, 1023, 1495, 876, 111, 111, 111,
- /* 830 */ 111, 110, 110, 109, 109, 109, 108, 404, 518, 1353,
- /* 840 */ 51, 51, 518, 199, 518, 506, 290, 373, 518, 276,
- /* 850 */ 509, 922, 9, 483, 233, 1005, 1005, 445, 189, 52,
- /* 860 */ 52, 325, 280, 53, 53, 54, 54, 373, 876, 55,
- /* 870 */ 55, 114, 115, 105, 1106, 1106, 957, 960, 950, 950,
- /* 880 */ 112, 112, 113, 113, 113, 113, 97, 518, 95, 1104,
- /* 890 */ 1041, 114, 115, 105, 1106, 1106, 957, 960, 950, 950,
- /* 900 */ 112, 112, 113, 113, 113, 113, 135, 199, 56, 56,
- /* 910 */ 765, 766, 767, 225, 224, 223, 518, 283, 437, 233,
- /* 920 */ 111, 111, 111, 111, 110, 110, 109, 109, 109, 108,
- /* 930 */ 404, 1002, 876, 326, 518, 1002, 1104, 40, 40, 518,
- /* 940 */ 111, 111, 111, 111, 110, 110, 109, 109, 109, 108,
- /* 950 */ 404, 518, 448, 518, 1104, 41, 41, 518, 17, 518,
- /* 960 */ 43, 43, 1155, 379, 518, 448, 518, 443, 518, 390,
- /* 970 */ 518, 194, 44, 44, 57, 57, 1247, 518, 58, 58,
- /* 980 */ 59, 59, 518, 466, 326, 14, 14, 60, 60, 120,
- /* 990 */ 120, 61, 61, 449, 1206, 93, 518, 425, 46, 46,
- /* 1000 */ 518, 1104, 518, 62, 62, 518, 437, 305, 518, 852,
- /* 1010 */ 518, 298, 518, 1246, 851, 373, 518, 63, 63, 1293,
- /* 1020 */ 397, 47, 47, 142, 142, 1467, 143, 143, 821, 70,
- /* 1030 */ 70, 48, 48, 66, 66, 373, 518, 121, 121, 114,
- /* 1040 */ 115, 105, 1106, 1106, 957, 960, 950, 950, 112, 112,
- /* 1050 */ 113, 113, 113, 113, 518, 418, 518, 67, 67, 114,
- /* 1060 */ 115, 105, 1106, 1106, 957, 960, 950, 950, 112, 112,
- /* 1070 */ 113, 113, 113, 113, 312, 122, 122, 123, 123, 1293,
- /* 1080 */ 518, 357, 1126, 88, 518, 435, 325, 387, 111, 111,
- /* 1090 */ 111, 111, 110, 110, 109, 109, 109, 108, 404, 266,
- /* 1100 */ 518, 119, 119, 518, 1293, 141, 141, 518, 111, 111,
- /* 1110 */ 111, 111, 110, 110, 109, 109, 109, 108, 404, 518,
- /* 1120 */ 801, 140, 140, 518, 127, 127, 511, 379, 126, 126,
- /* 1130 */ 518, 137, 518, 1308, 518, 307, 518, 310, 518, 203,
- /* 1140 */ 124, 124, 1307, 96, 125, 125, 207, 388, 1441, 468,
- /* 1150 */ 1127, 69, 69, 71, 71, 68, 68, 38, 38, 42,
- /* 1160 */ 42, 357, 1042, 373, 1293, 276, 509, 801, 185, 469,
- /* 1170 */ 494, 436, 444, 6, 380, 156, 253, 197, 469, 134,
- /* 1180 */ 426, 33, 1038, 373, 1121, 359, 1411, 114, 115, 105,
- /* 1190 */ 1106, 1106, 957, 960, 950, 950, 112, 112, 113, 113,
- /* 1200 */ 113, 113, 914, 296, 27, 293, 90, 114, 103, 105,
- /* 1210 */ 1106, 1106, 957, 960, 950, 950, 112, 112, 113, 113,
- /* 1220 */ 113, 113, 919, 275, 430, 232, 891, 232, 432, 256,
- /* 1230 */ 1127, 232, 398, 370, 892, 28, 111, 111, 111, 111,
- /* 1240 */ 110, 110, 109, 109, 109, 108, 404, 301, 454, 1385,
- /* 1250 */ 90, 228, 209, 987, 811, 810, 111, 111, 111, 111,
- /* 1260 */ 110, 110, 109, 109, 109, 108, 404, 315, 818, 819,
- /* 1270 */ 90, 323, 983, 931, 885, 228, 373, 232, 999, 849,
- /* 1280 */ 999, 322, 102, 998, 1384, 998, 785, 850, 440, 132,
- /* 1290 */ 102, 302, 1243, 306, 309, 311, 373, 313, 1194, 1180,
- /* 1300 */ 987, 115, 105, 1106, 1106, 957, 960, 950, 950, 112,
- /* 1310 */ 112, 113, 113, 113, 113, 1178, 1179, 318, 327, 328,
- /* 1320 */ 931, 1255, 105, 1106, 1106, 957, 960, 950, 950, 112,
- /* 1330 */ 112, 113, 113, 113, 113, 1292, 1230, 1457, 273, 1241,
- /* 1340 */ 504, 505, 1298, 100, 510, 246, 4, 1161, 1154, 111,
- /* 1350 */ 111, 111, 111, 110, 110, 109, 109, 109, 108, 404,
- /* 1360 */ 513, 1143, 187, 1142, 202, 1144, 1451, 356, 1227, 111,
- /* 1370 */ 111, 111, 111, 110, 110, 109, 109, 109, 108, 404,
- /* 1380 */ 11, 1277, 330, 405, 332, 334, 191, 1285, 364, 195,
- /* 1390 */ 295, 417, 288, 100, 510, 507, 4, 434, 459, 321,
- /* 1400 */ 1177, 349, 1357, 1356, 336, 155, 190, 1454, 1121, 158,
- /* 1410 */ 513, 508, 235, 1404, 937, 1402, 1118, 381, 77, 428,
- /* 1420 */ 98, 98, 8, 1282, 168, 30, 152, 99, 160, 405,
- /* 1430 */ 520, 519, 88, 405, 927, 1362, 1274, 420, 163, 73,
- /* 1440 */ 164, 76, 165, 166, 421, 507, 452, 212, 361, 363,
- /* 1450 */ 427, 276, 509, 31, 1288, 172, 491, 441, 216, 1351,
- /* 1460 */ 82, 490, 447, 1373, 937, 927, 927, 929, 930, 24,
- /* 1470 */ 98, 98, 304, 247, 218, 177, 308, 99, 219, 405,
- /* 1480 */ 520, 519, 450, 1145, 927, 220, 366, 1197, 100, 510,
- /* 1490 */ 465, 4, 1188, 1196, 1195, 394, 803, 1169, 1187, 367,
- /* 1500 */ 1168, 396, 484, 320, 1167, 513, 1466, 87, 475, 100,
- /* 1510 */ 510, 271, 4, 272, 478, 927, 927, 929, 930, 24,
- /* 1520 */ 1443, 1074, 407, 1238, 1239, 258, 513, 329, 405, 331,
- /* 1530 */ 355, 355, 354, 243, 352, 234, 489, 774, 498, 184,
- /* 1540 */ 507, 338, 1422, 339, 117, 1220, 10, 341, 333, 405,
- /* 1550 */ 204, 491, 282, 1219, 1237, 1236, 492, 335, 343, 937,
- /* 1560 */ 281, 507, 94, 1337, 186, 98, 98, 347, 89, 487,
- /* 1570 */ 348, 241, 99, 29, 405, 520, 519, 274, 1151, 927,
- /* 1580 */ 937, 521, 1080, 245, 242, 244, 98, 98, 856, 522,
- /* 1590 */ 206, 1140, 1135, 99, 144, 405, 520, 519, 147, 375,
- /* 1600 */ 927, 149, 376, 157, 1389, 1390, 1388, 1387, 205, 145,
- /* 1610 */ 927, 927, 929, 930, 24, 146, 130, 761, 1165, 1164,
- /* 1620 */ 72, 100, 510, 1162, 4, 269, 406, 188, 278, 201,
- /* 1630 */ 259, 927, 927, 929, 930, 24, 128, 911, 513, 997,
- /* 1640 */ 995, 159, 374, 208, 148, 161, 835, 276, 509, 211,
- /* 1650 */ 294, 1011, 915, 167, 150, 383, 169, 78, 385, 79,
- /* 1660 */ 80, 405, 81, 151, 1014, 213, 214, 1010, 139, 18,
- /* 1670 */ 412, 215, 303, 507, 232, 1115, 1003, 446, 173, 217,
- /* 1680 */ 174, 32, 776, 451, 491, 322, 221, 175, 814, 490,
- /* 1690 */ 83, 455, 937, 19, 460, 316, 20, 84, 98, 98,
- /* 1700 */ 270, 182, 85, 467, 153, 99, 154, 405, 520, 519,
- /* 1710 */ 1074, 407, 927, 183, 258, 963, 1046, 86, 34, 355,
- /* 1720 */ 355, 354, 243, 352, 474, 1047, 774, 35, 477, 196,
- /* 1730 */ 250, 100, 510, 252, 4, 884, 178, 231, 1060, 204,
- /* 1740 */ 21, 282, 102, 927, 927, 929, 930, 24, 513, 281,
- /* 1750 */ 879, 22, 1064, 1062, 1051, 7, 340, 23, 978, 179,
- /* 1760 */ 90, 92, 510, 964, 4, 236, 962, 966, 1020, 1019,
- /* 1770 */ 237, 405, 967, 25, 36, 514, 932, 786, 513, 206,
- /* 1780 */ 101, 26, 845, 507, 238, 239, 1459, 147, 350, 1458,
- /* 1790 */ 149, 353, 1075, 1131, 1131, 1131, 1131, 205, 1131, 1131,
- /* 1800 */ 1131, 405, 937, 1131, 1131, 1131, 1131, 1131, 98, 98,
- /* 1810 */ 1131, 1131, 1131, 507, 1131, 99, 1131, 405, 520, 519,
- /* 1820 */ 1131, 1131, 927, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- /* 1830 */ 1131, 374, 937, 1131, 1131, 1131, 276, 509, 98, 98,
- /* 1840 */ 1131, 1131, 1131, 1131, 1131, 99, 1131, 405, 520, 519,
- /* 1850 */ 1131, 1131, 927, 927, 927, 929, 930, 24, 1131, 412,
- /* 1860 */ 1131, 1131, 1131, 258, 1131, 1131, 1131, 1131, 355, 355,
- /* 1870 */ 354, 243, 352, 1131, 1131, 774, 1131, 1131, 1131, 1131,
- /* 1880 */ 1131, 1131, 1131, 927, 927, 929, 930, 24, 204, 1131,
- /* 1890 */ 282, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 281, 1131,
- /* 1900 */ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- /* 1910 */ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- /* 1920 */ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 206, 1131,
- /* 1930 */ 1131, 1131, 1131, 1131, 1131, 1131, 147, 1131, 1131, 149,
- /* 1940 */ 1131, 1131, 1131, 1131, 1131, 1131, 205, 1131, 1131, 1131,
- /* 1950 */ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- /* 1960 */ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- /* 1970 */ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- /* 1980 */ 374, 1131, 1131, 1131, 1131, 276, 509, 1131, 1131, 1131,
- /* 1990 */ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131,
- /* 2000 */ 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 412,
+ /* 0 */ 112, 109, 209, 112, 109, 209, 1160, 1, 1, 539,
+ /* 10 */ 2, 1164, 490, 1193, 1293, 534, 289, 1196, 134, 383,
+ /* 20 */ 1485, 1428, 1164, 1229, 1208, 1242, 1195, 289, 491, 134,
+ /* 30 */ 373, 915, 1229, 443, 16, 16, 1242, 70, 70, 916,
+ /* 40 */ 242, 1292, 296, 119, 120, 110, 1136, 1136, 981, 984,
+ /* 50 */ 974, 974, 117, 117, 118, 118, 118, 118, 264, 264,
+ /* 60 */ 190, 264, 264, 264, 264, 112, 109, 209, 362, 264,
+ /* 70 */ 264, 531, 376, 497, 531, 1134, 531, 1501, 239, 206,
+ /* 80 */ 338, 9, 531, 242, 219, 1203, 118, 118, 118, 118,
+ /* 90 */ 111, 439, 112, 109, 209, 219, 116, 116, 116, 116,
+ /* 100 */ 115, 115, 114, 114, 114, 113, 414, 115, 115, 114,
+ /* 110 */ 114, 114, 113, 414, 418, 12, 383, 400, 1134, 114,
+ /* 120 */ 114, 114, 113, 414, 1115, 418, 1134, 1392, 116, 116,
+ /* 130 */ 116, 116, 115, 115, 114, 114, 114, 113, 414, 961,
+ /* 140 */ 119, 120, 110, 1136, 1136, 981, 984, 974, 974, 117,
+ /* 150 */ 117, 118, 118, 118, 118, 952, 534, 414, 941, 951,
+ /* 160 */ 1481, 539, 2, 1164, 1505, 534, 160, 175, 289, 1134,
+ /* 170 */ 134, 434, 312, 297, 1115, 1116, 1117, 1242, 70, 70,
+ /* 180 */ 1089, 338, 1089, 118, 118, 118, 118, 42, 42, 448,
+ /* 190 */ 951, 951, 953, 116, 116, 116, 116, 115, 115, 114,
+ /* 200 */ 114, 114, 113, 414, 1115, 311, 264, 264, 82, 441,
+ /* 210 */ 264, 264, 190, 383, 284, 12, 288, 525, 407, 531,
+ /* 220 */ 96, 159, 458, 531, 371, 116, 116, 116, 116, 115,
+ /* 230 */ 115, 114, 114, 114, 113, 414, 219, 119, 120, 110,
+ /* 240 */ 1136, 1136, 981, 984, 974, 974, 117, 117, 118, 118,
+ /* 250 */ 118, 118, 511, 1477, 1115, 1116, 1117, 113, 414, 534,
+ /* 260 */ 528, 528, 528, 121, 534, 1427, 418, 116, 116, 116,
+ /* 270 */ 116, 115, 115, 114, 114, 114, 113, 414, 1464, 351,
+ /* 280 */ 270, 42, 42, 383, 187, 1115, 70, 70, 533, 433,
+ /* 290 */ 116, 116, 116, 116, 115, 115, 114, 114, 114, 113,
+ /* 300 */ 414, 534, 1339, 405, 159, 411, 410, 119, 120, 110,
+ /* 310 */ 1136, 1136, 981, 984, 974, 974, 117, 117, 118, 118,
+ /* 320 */ 118, 118, 285, 42, 42, 349, 411, 410, 514, 479,
+ /* 330 */ 1458, 79, 1084, 6, 1140, 1115, 1116, 1117, 480, 1142,
+ /* 340 */ 501, 1115, 1084, 123, 238, 1084, 136, 1141, 1234, 1234,
+ /* 350 */ 1143, 383, 1143, 1115, 167, 426, 80, 447, 512, 1451,
+ /* 360 */ 116, 116, 116, 116, 115, 115, 114, 114, 114, 113,
+ /* 370 */ 414, 1143, 1466, 1143, 350, 119, 120, 110, 1136, 1136,
+ /* 380 */ 981, 984, 974, 974, 117, 117, 118, 118, 118, 118,
+ /* 390 */ 402, 1115, 1116, 1117, 500, 534, 250, 267, 336, 474,
+ /* 400 */ 331, 473, 236, 1115, 1116, 1117, 231, 1115, 329, 471,
+ /* 410 */ 468, 467, 509, 1458, 1464, 505, 6, 70, 70, 466,
+ /* 420 */ 181, 380, 379, 534, 971, 971, 982, 985, 116, 116,
+ /* 430 */ 116, 116, 115, 115, 114, 114, 114, 113, 414, 1115,
+ /* 440 */ 412, 412, 412, 496, 1115, 69, 69, 235, 383, 288,
+ /* 450 */ 525, 273, 326, 516, 337, 458, 1084, 1115, 1116, 1117,
+ /* 460 */ 1232, 1232, 492, 160, 508, 441, 1084, 1067, 1531, 1084,
+ /* 470 */ 207, 1531, 119, 120, 110, 1136, 1136, 981, 984, 974,
+ /* 480 */ 974, 117, 117, 118, 118, 118, 118, 881, 534, 1115,
+ /* 490 */ 1116, 1117, 975, 534, 1115, 1116, 1117, 534, 421, 534,
+ /* 500 */ 141, 534, 176, 356, 517, 1119, 32, 511, 482, 388,
+ /* 510 */ 70, 70, 818, 288, 525, 70, 70, 441, 499, 50,
+ /* 520 */ 50, 70, 70, 70, 70, 116, 116, 116, 116, 115,
+ /* 530 */ 115, 114, 114, 114, 113, 414, 274, 264, 264, 1115,
+ /* 540 */ 1065, 264, 264, 1115, 355, 383, 409, 961, 1439, 822,
+ /* 550 */ 531, 516, 190, 419, 531, 483, 1119, 516, 337, 516,
+ /* 560 */ 518, 1115, 818, 952, 382, 458, 515, 951, 481, 119,
+ /* 570 */ 120, 110, 1136, 1136, 981, 984, 974, 974, 117, 117,
+ /* 580 */ 118, 118, 118, 118, 1338, 278, 1045, 278, 275, 1115,
+ /* 590 */ 1116, 1117, 259, 1115, 1116, 1117, 534, 5, 951, 951,
+ /* 600 */ 953, 1046, 231, 3, 143, 471, 468, 467, 1391, 463,
+ /* 610 */ 1115, 1115, 1116, 1117, 1452, 466, 1047, 836, 70, 70,
+ /* 620 */ 480, 534, 116, 116, 116, 116, 115, 115, 114, 114,
+ /* 630 */ 114, 113, 414, 95, 1115, 287, 235, 856, 902, 420,
+ /* 640 */ 1115, 534, 383, 13, 13, 381, 815, 857, 472, 112,
+ /* 650 */ 109, 209, 1115, 337, 413, 309, 837, 394, 1436, 534,
+ /* 660 */ 1115, 1116, 1117, 54, 54, 291, 119, 120, 110, 1136,
+ /* 670 */ 1136, 981, 984, 974, 974, 117, 117, 118, 118, 118,
+ /* 680 */ 118, 13, 13, 1084, 1115, 1116, 1117, 901, 264, 264,
+ /* 690 */ 1115, 1116, 1117, 1084, 292, 399, 1084, 800, 388, 140,
+ /* 700 */ 295, 531, 1115, 1116, 1117, 403, 447, 532, 534, 870,
+ /* 710 */ 870, 534, 1240, 534, 329, 534, 1185, 389, 534, 116,
+ /* 720 */ 116, 116, 116, 115, 115, 114, 114, 114, 113, 414,
+ /* 730 */ 13, 13, 1024, 13, 13, 13, 13, 13, 13, 383,
+ /* 740 */ 13, 13, 424, 1100, 401, 264, 264, 277, 160, 184,
+ /* 750 */ 1182, 185, 1533, 369, 513, 484, 432, 487, 531, 424,
+ /* 760 */ 423, 1397, 941, 119, 120, 110, 1136, 1136, 981, 984,
+ /* 770 */ 974, 974, 117, 117, 118, 118, 118, 118, 1397, 1399,
+ /* 780 */ 425, 519, 392, 264, 264, 1029, 1029, 455, 264, 264,
+ /* 790 */ 264, 264, 1004, 304, 261, 1278, 531, 900, 288, 525,
+ /* 800 */ 310, 531, 493, 531, 1067, 1532, 458, 387, 1532, 311,
+ /* 810 */ 429, 299, 534, 107, 264, 264, 116, 116, 116, 116,
+ /* 820 */ 115, 115, 114, 114, 114, 113, 414, 531, 424, 1384,
+ /* 830 */ 507, 258, 258, 1246, 55, 55, 383, 1277, 265, 265,
+ /* 840 */ 962, 324, 434, 312, 531, 531, 506, 1397, 1026, 1241,
+ /* 850 */ 298, 531, 1026, 445, 301, 1095, 303, 534, 368, 1156,
+ /* 860 */ 119, 120, 110, 1136, 1136, 981, 984, 974, 974, 117,
+ /* 870 */ 117, 118, 118, 118, 118, 1045, 534, 1065, 534, 15,
+ /* 880 */ 15, 1084, 208, 1324, 453, 452, 534, 1324, 534, 449,
+ /* 890 */ 1046, 1084, 494, 458, 1084, 234, 233, 232, 44, 44,
+ /* 900 */ 56, 56, 319, 1095, 322, 1047, 534, 900, 57, 57,
+ /* 910 */ 58, 58, 534, 116, 116, 116, 116, 115, 115, 114,
+ /* 920 */ 114, 114, 113, 414, 534, 514, 522, 534, 59, 59,
+ /* 930 */ 302, 1157, 534, 383, 60, 60, 1237, 946, 788, 789,
+ /* 940 */ 790, 1459, 1456, 446, 6, 6, 61, 61, 1212, 45,
+ /* 950 */ 45, 534, 396, 383, 46, 46, 397, 119, 120, 110,
+ /* 960 */ 1136, 1136, 981, 984, 974, 974, 117, 117, 118, 118,
+ /* 970 */ 118, 118, 428, 48, 48, 534, 392, 119, 120, 110,
+ /* 980 */ 1136, 1136, 981, 984, 974, 974, 117, 117, 118, 118,
+ /* 990 */ 118, 118, 1324, 368, 1066, 447, 825, 49, 49, 534,
+ /* 1000 */ 458, 357, 534, 353, 534, 138, 534, 337, 1478, 478,
+ /* 1010 */ 116, 116, 116, 116, 115, 115, 114, 114, 114, 113,
+ /* 1020 */ 414, 62, 62, 392, 63, 63, 64, 64, 14, 14,
+ /* 1030 */ 116, 116, 116, 116, 115, 115, 114, 114, 114, 113,
+ /* 1040 */ 414, 534, 810, 317, 271, 534, 1457, 825, 534, 6,
+ /* 1050 */ 534, 1324, 534, 142, 534, 1442, 534, 212, 534, 1324,
+ /* 1060 */ 534, 398, 305, 65, 65, 534, 1157, 125, 125, 476,
+ /* 1070 */ 66, 66, 51, 51, 67, 67, 68, 68, 52, 52,
+ /* 1080 */ 147, 147, 148, 148, 534, 98, 534, 75, 75, 276,
+ /* 1090 */ 534, 272, 534, 810, 534, 876, 534, 527, 389, 534,
+ /* 1100 */ 875, 534, 1151, 202, 534, 383, 53, 53, 71, 71,
+ /* 1110 */ 288, 525, 126, 126, 72, 72, 127, 127, 128, 128,
+ /* 1120 */ 454, 124, 124, 146, 146, 383, 145, 145, 408, 119,
+ /* 1130 */ 120, 110, 1136, 1136, 981, 984, 974, 974, 117, 117,
+ /* 1140 */ 118, 118, 118, 118, 534, 900, 534, 95, 534, 119,
+ /* 1150 */ 120, 110, 1136, 1136, 981, 984, 974, 974, 117, 117,
+ /* 1160 */ 118, 118, 118, 118, 390, 161, 132, 132, 131, 131,
+ /* 1170 */ 129, 129, 534, 915, 534, 1455, 534, 1454, 6, 1416,
+ /* 1180 */ 6, 916, 116, 116, 116, 116, 115, 115, 114, 114,
+ /* 1190 */ 114, 113, 414, 1415, 130, 130, 74, 74, 76, 76,
+ /* 1200 */ 534, 30, 116, 116, 116, 116, 115, 115, 114, 114,
+ /* 1210 */ 114, 113, 414, 534, 263, 206, 534, 1133, 1504, 93,
+ /* 1220 */ 876, 845, 73, 73, 102, 875, 100, 139, 17, 38,
+ /* 1230 */ 208, 1062, 31, 450, 370, 43, 43, 101, 47, 47,
+ /* 1240 */ 827, 216, 436, 308, 943, 440, 95, 241, 241, 442,
+ /* 1250 */ 313, 464, 241, 95, 237, 900, 327, 383, 266, 95,
+ /* 1260 */ 835, 834, 193, 335, 938, 314, 1011, 435, 842, 843,
+ /* 1270 */ 955, 1007, 909, 334, 237, 241, 873, 383, 1023, 107,
+ /* 1280 */ 1023, 119, 120, 110, 1136, 1136, 981, 984, 974, 974,
+ /* 1290 */ 117, 117, 118, 118, 118, 118, 1022, 808, 1022, 1274,
+ /* 1300 */ 137, 119, 108, 110, 1136, 1136, 981, 984, 974, 974,
+ /* 1310 */ 117, 117, 118, 118, 118, 118, 874, 1011, 318, 107,
+ /* 1320 */ 321, 955, 323, 325, 1225, 1211, 197, 1210, 1209, 330,
+ /* 1330 */ 339, 1265, 340, 283, 116, 116, 116, 116, 115, 115,
+ /* 1340 */ 114, 114, 114, 113, 414, 1286, 1323, 1261, 1471, 1272,
+ /* 1350 */ 520, 218, 521, 1329, 116, 116, 116, 116, 115, 115,
+ /* 1360 */ 114, 114, 114, 113, 414, 1192, 1184, 1173, 1172, 1174,
+ /* 1370 */ 1494, 1488, 459, 256, 383, 1258, 342, 199, 367, 344,
+ /* 1380 */ 211, 195, 307, 444, 11, 346, 469, 333, 1308, 1316,
+ /* 1390 */ 375, 427, 203, 360, 383, 1388, 188, 1387, 189, 120,
+ /* 1400 */ 110, 1136, 1136, 981, 984, 974, 974, 117, 117, 118,
+ /* 1410 */ 118, 118, 118, 1208, 1151, 300, 348, 1491, 245, 1148,
+ /* 1420 */ 110, 1136, 1136, 981, 984, 974, 974, 117, 117, 118,
+ /* 1430 */ 118, 118, 118, 198, 1435, 1433, 524, 78, 391, 163,
+ /* 1440 */ 82, 1393, 438, 173, 81, 105, 526, 1313, 4, 35,
+ /* 1450 */ 157, 116, 116, 116, 116, 115, 115, 114, 114, 114,
+ /* 1460 */ 113, 414, 529, 165, 93, 430, 1305, 168, 169, 431,
+ /* 1470 */ 462, 116, 116, 116, 116, 115, 115, 114, 114, 114,
+ /* 1480 */ 113, 414, 170, 171, 221, 415, 372, 437, 1319, 177,
+ /* 1490 */ 374, 36, 451, 225, 1382, 87, 457, 523, 257, 1404,
+ /* 1500 */ 316, 105, 526, 227, 4, 182, 460, 160, 320, 228,
+ /* 1510 */ 377, 1175, 475, 229, 1228, 404, 1227, 1226, 529, 827,
+ /* 1520 */ 961, 1219, 378, 1200, 1199, 406, 103, 103, 1218, 332,
+ /* 1530 */ 8, 281, 1198, 104, 1503, 415, 536, 535, 486, 282,
+ /* 1540 */ 951, 415, 489, 495, 92, 244, 1269, 341, 243, 122,
+ /* 1550 */ 1270, 343, 514, 523, 1268, 1462, 10, 288, 525, 345,
+ /* 1560 */ 1461, 354, 99, 352, 503, 94, 1267, 347, 1251, 502,
+ /* 1570 */ 498, 951, 951, 953, 954, 27, 961, 1250, 194, 358,
+ /* 1580 */ 251, 359, 103, 103, 1181, 34, 537, 1110, 252, 104,
+ /* 1590 */ 254, 415, 536, 535, 255, 1368, 951, 1420, 286, 538,
+ /* 1600 */ 1170, 1165, 1421, 135, 1419, 1418, 149, 150, 279, 784,
+ /* 1610 */ 416, 196, 151, 290, 210, 200, 77, 385, 269, 386,
+ /* 1620 */ 133, 162, 935, 1021, 201, 1019, 153, 951, 951, 953,
+ /* 1630 */ 954, 27, 1480, 1104, 417, 164, 217, 268, 859, 166,
+ /* 1640 */ 306, 1035, 366, 366, 365, 253, 363, 220, 172, 797,
+ /* 1650 */ 939, 155, 105, 526, 393, 4, 395, 174, 156, 83,
+ /* 1660 */ 1038, 84, 213, 85, 294, 222, 86, 223, 1034, 529,
+ /* 1670 */ 144, 18, 293, 224, 315, 456, 241, 1027, 1145, 178,
+ /* 1680 */ 226, 179, 37, 799, 334, 461, 230, 465, 470, 838,
+ /* 1690 */ 180, 88, 415, 19, 280, 328, 20, 89, 90, 158,
+ /* 1700 */ 191, 477, 215, 1097, 523, 204, 192, 987, 91, 1070,
+ /* 1710 */ 152, 39, 485, 154, 1071, 503, 40, 488, 205, 260,
+ /* 1720 */ 504, 262, 105, 526, 214, 4, 908, 961, 183, 240,
+ /* 1730 */ 903, 107, 1086, 103, 103, 21, 22, 1088, 23, 529,
+ /* 1740 */ 104, 24, 415, 536, 535, 1090, 1093, 951, 1094, 25,
+ /* 1750 */ 1074, 33, 7, 26, 510, 1002, 247, 186, 384, 95,
+ /* 1760 */ 988, 986, 415, 288, 525, 990, 1044, 246, 1043, 991,
+ /* 1770 */ 28, 41, 530, 956, 523, 809, 106, 29, 951, 951,
+ /* 1780 */ 953, 954, 27, 869, 361, 503, 422, 248, 364, 1105,
+ /* 1790 */ 502, 249, 1161, 1496, 1495, 1161, 1161, 961, 1161, 1161,
+ /* 1800 */ 1161, 1161, 1161, 103, 103, 1161, 1161, 1161, 1161, 1161,
+ /* 1810 */ 104, 1161, 415, 536, 535, 1104, 417, 951, 1161, 268,
+ /* 1820 */ 1161, 1161, 1161, 1161, 366, 366, 365, 253, 363, 1161,
+ /* 1830 */ 1161, 797, 1161, 1161, 1161, 1161, 105, 526, 1161, 4,
+ /* 1840 */ 1161, 1161, 1161, 1161, 213, 1161, 294, 1161, 951, 951,
+ /* 1850 */ 953, 954, 27, 529, 293, 1161, 1161, 1161, 1161, 1161,
+ /* 1860 */ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+ /* 1870 */ 1161, 1161, 1161, 1161, 1161, 1161, 415, 1161, 1161, 1161,
+ /* 1880 */ 1161, 1161, 1161, 1161, 215, 1161, 1161, 1161, 523, 1161,
+ /* 1890 */ 1161, 1161, 152, 1161, 1161, 154, 105, 526, 1161, 4,
+ /* 1900 */ 1161, 1161, 1161, 1161, 1161, 1161, 214, 1161, 1161, 1161,
+ /* 1910 */ 1161, 961, 1161, 529, 1161, 1161, 1161, 103, 103, 880,
+ /* 1920 */ 1161, 1161, 1161, 1161, 104, 1161, 415, 536, 535, 1161,
+ /* 1930 */ 1161, 951, 1161, 1161, 1161, 1161, 415, 1161, 1161, 1161,
+ /* 1940 */ 384, 1161, 1161, 1161, 1161, 288, 525, 1161, 523, 1161,
+ /* 1950 */ 1161, 1161, 1161, 1161, 1161, 1161, 97, 526, 1161, 4,
+ /* 1960 */ 1161, 1161, 951, 951, 953, 954, 27, 1161, 422, 1161,
+ /* 1970 */ 1161, 961, 1161, 529, 1161, 1161, 1161, 103, 103, 1161,
+ /* 1980 */ 1161, 1161, 1161, 1161, 104, 1161, 415, 536, 535, 1161,
+ /* 1990 */ 1161, 951, 268, 1161, 1161, 1161, 415, 366, 366, 365,
+ /* 2000 */ 253, 363, 1161, 1161, 797, 1161, 1161, 1161, 523, 1161,
+ /* 2010 */ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 213, 1161, 294,
+ /* 2020 */ 1161, 1161, 951, 951, 953, 954, 27, 293, 1161, 1161,
+ /* 2030 */ 1161, 961, 1161, 1161, 1161, 1161, 1161, 103, 103, 1161,
+ /* 2040 */ 1161, 1161, 1161, 1161, 104, 1161, 415, 536, 535, 1161,
+ /* 2050 */ 1161, 951, 1161, 1161, 1161, 1161, 1161, 215, 1161, 1161,
+ /* 2060 */ 1161, 1161, 1161, 1161, 1161, 152, 1161, 1161, 154, 1161,
+ /* 2070 */ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 214,
+ /* 2080 */ 1161, 1161, 951, 951, 953, 954, 27, 1161, 1161, 1161,
+ /* 2090 */ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+ /* 2100 */ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+ /* 2110 */ 1161, 1161, 1161, 384, 1161, 1161, 1161, 1161, 288, 525,
+ /* 2120 */ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+ /* 2130 */ 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
+ /* 2140 */ 1161, 422,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 168, 163, 184, 238, 239, 240, 163, 163, 155, 156,
- /* 10 */ 157, 158, 159, 160, 163, 202, 203, 187, 165, 19,
- /* 20 */ 167, 163, 184, 185, 259, 202, 203, 174, 184, 185,
- /* 30 */ 174, 31, 238, 239, 240, 184, 185, 22, 23, 39,
- /* 40 */ 216, 26, 218, 43, 44, 45, 46, 47, 48, 49,
- /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 174, 206,
- /* 60 */ 207, 163, 206, 207, 220, 163, 163, 163, 238, 239,
- /* 70 */ 240, 59, 219, 229, 231, 219, 183, 245, 174, 223,
- /* 80 */ 224, 249, 184, 185, 191, 232, 184, 185, 184, 185,
- /* 90 */ 206, 207, 92, 93, 94, 95, 96, 97, 98, 99,
- /* 100 */ 100, 101, 102, 219, 102, 81, 91, 163, 96, 97,
- /* 110 */ 206, 207, 19, 275, 276, 262, 104, 105, 106, 107,
- /* 120 */ 163, 109, 220, 219, 220, 184, 275, 269, 277, 117,
- /* 130 */ 187, 229, 19, 229, 101, 102, 43, 44, 45, 46,
- /* 140 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 150 */ 57, 127, 128, 141, 184, 143, 43, 44, 45, 46,
- /* 160 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 170 */ 57, 268, 269, 275, 276, 197, 83, 233, 85, 163,
- /* 180 */ 67, 238, 239, 240, 134, 92, 93, 94, 95, 96,
- /* 190 */ 97, 98, 99, 100, 101, 102, 19, 54, 55, 56,
- /* 200 */ 57, 58, 152, 26, 247, 92, 93, 94, 95, 96,
- /* 210 */ 97, 98, 99, 100, 101, 102, 54, 55, 56, 57,
- /* 220 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- /* 230 */ 53, 54, 55, 56, 57, 92, 93, 94, 95, 96,
- /* 240 */ 97, 98, 99, 100, 101, 102, 69, 96, 97, 98,
- /* 250 */ 99, 100, 101, 102, 92, 93, 94, 95, 96, 97,
- /* 260 */ 98, 99, 100, 101, 102, 73, 179, 180, 181, 92,
- /* 270 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- /* 280 */ 163, 191, 192, 163, 98, 99, 100, 101, 102, 19,
- /* 290 */ 200, 179, 180, 181, 24, 175, 92, 93, 94, 95,
- /* 300 */ 96, 97, 98, 99, 100, 101, 102, 163, 116, 117,
- /* 310 */ 118, 22, 163, 43, 44, 45, 46, 47, 48, 49,
- /* 320 */ 50, 51, 52, 53, 54, 55, 56, 57, 157, 158,
- /* 330 */ 159, 160, 163, 184, 185, 163, 165, 59, 167, 46,
- /* 340 */ 90, 76, 11, 174, 73, 174, 19, 198, 59, 19,
- /* 350 */ 72, 86, 81, 184, 185, 234, 106, 96, 97, 163,
- /* 360 */ 110, 182, 92, 93, 94, 95, 96, 97, 98, 99,
- /* 370 */ 100, 101, 102, 46, 230, 206, 207, 206, 207, 163,
- /* 380 */ 184, 185, 19, 105, 106, 107, 23, 116, 219, 220,
- /* 390 */ 219, 141, 142, 143, 105, 106, 107, 104, 127, 128,
- /* 400 */ 184, 185, 141, 232, 143, 59, 43, 44, 45, 46,
- /* 410 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- /* 420 */ 57, 158, 108, 160, 59, 111, 112, 113, 165, 250,
- /* 430 */ 167, 104, 102, 262, 255, 121, 220, 174, 108, 109,
- /* 440 */ 110, 111, 112, 113, 114, 229, 182, 120, 117, 118,
- /* 450 */ 120, 105, 106, 107, 163, 92, 93, 94, 95, 96,
- /* 460 */ 97, 98, 99, 100, 101, 102, 163, 22, 59, 206,
- /* 470 */ 207, 106, 163, 26, 171, 19, 163, 193, 175, 23,
- /* 480 */ 163, 22, 219, 206, 207, 139, 163, 22, 59, 182,
- /* 490 */ 117, 118, 59, 184, 185, 232, 219, 184, 185, 43,
- /* 500 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 510 */ 54, 55, 56, 57, 105, 106, 107, 108, 59, 255,
- /* 520 */ 111, 112, 113, 90, 59, 262, 22, 98, 174, 12,
- /* 530 */ 121, 208, 163, 220, 105, 106, 107, 163, 105, 106,
- /* 540 */ 22, 96, 97, 110, 27, 238, 239, 240, 92, 93,
- /* 550 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 42,
- /* 560 */ 206, 207, 115, 59, 105, 106, 107, 163, 19, 59,
- /* 570 */ 163, 106, 23, 219, 141, 142, 143, 59, 163, 205,
- /* 580 */ 63, 59, 72, 22, 124, 59, 163, 270, 234, 129,
- /* 590 */ 73, 163, 43, 44, 45, 46, 47, 48, 49, 50,
- /* 600 */ 51, 52, 53, 54, 55, 56, 57, 184, 185, 105,
- /* 610 */ 106, 107, 184, 185, 163, 105, 106, 107, 265, 266,
- /* 620 */ 59, 198, 225, 105, 106, 107, 198, 105, 106, 107,
- /* 630 */ 163, 105, 106, 107, 163, 184, 185, 46, 47, 48,
- /* 640 */ 49, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- /* 650 */ 101, 102, 163, 163, 132, 184, 185, 163, 132, 163,
- /* 660 */ 256, 19, 163, 163, 163, 23, 105, 106, 107, 198,
- /* 670 */ 163, 220, 205, 184, 185, 163, 35, 81, 184, 185,
- /* 680 */ 184, 185, 163, 184, 185, 43, 44, 45, 46, 47,
- /* 690 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- /* 700 */ 163, 110, 163, 184, 185, 109, 205, 66, 163, 59,
- /* 710 */ 163, 21, 205, 16, 174, 74, 220, 198, 163, 220,
- /* 720 */ 230, 184, 185, 127, 128, 180, 181, 180, 181, 163,
- /* 730 */ 175, 242, 174, 233, 92, 93, 94, 95, 96, 97,
- /* 740 */ 98, 99, 100, 101, 102, 233, 206, 207, 26, 163,
- /* 750 */ 195, 207, 197, 26, 19, 105, 106, 107, 23, 219,
- /* 760 */ 119, 260, 26, 219, 206, 207, 174, 19, 174, 230,
- /* 770 */ 80, 174, 163, 174, 77, 163, 79, 219, 43, 44,
- /* 780 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- /* 790 */ 55, 56, 57, 248, 12, 248, 184, 185, 206, 207,
- /* 800 */ 206, 207, 112, 206, 207, 206, 207, 206, 207, 27,
- /* 810 */ 163, 219, 123, 219, 125, 126, 219, 208, 219, 163,
- /* 820 */ 219, 22, 23, 23, 42, 26, 26, 92, 93, 94,
- /* 830 */ 95, 96, 97, 98, 99, 100, 101, 102, 163, 149,
- /* 840 */ 184, 185, 163, 107, 163, 63, 149, 19, 163, 127,
- /* 850 */ 128, 23, 22, 105, 24, 116, 117, 118, 131, 184,
- /* 860 */ 185, 163, 163, 184, 185, 184, 185, 19, 132, 184,
- /* 870 */ 185, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- /* 880 */ 52, 53, 54, 55, 56, 57, 146, 163, 148, 59,
- /* 890 */ 91, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- /* 900 */ 52, 53, 54, 55, 56, 57, 208, 107, 184, 185,
- /* 910 */ 7, 8, 9, 116, 117, 118, 163, 163, 163, 24,
- /* 920 */ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- /* 930 */ 102, 29, 132, 163, 163, 33, 106, 184, 185, 163,
- /* 940 */ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
- /* 950 */ 102, 163, 163, 163, 59, 184, 185, 163, 22, 163,
- /* 960 */ 184, 185, 177, 178, 163, 163, 163, 65, 163, 199,
- /* 970 */ 163, 26, 184, 185, 184, 185, 163, 163, 184, 185,
- /* 980 */ 184, 185, 163, 98, 163, 184, 185, 184, 185, 184,
- /* 990 */ 185, 184, 185, 252, 205, 147, 163, 61, 184, 185,
- /* 1000 */ 163, 106, 163, 184, 185, 163, 163, 205, 163, 124,
- /* 1010 */ 163, 256, 163, 163, 129, 19, 163, 184, 185, 163,
- /* 1020 */ 199, 184, 185, 184, 185, 23, 184, 185, 26, 184,
- /* 1030 */ 185, 184, 185, 184, 185, 19, 163, 184, 185, 43,
- /* 1040 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 1050 */ 54, 55, 56, 57, 163, 163, 163, 184, 185, 43,
- /* 1060 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- /* 1070 */ 54, 55, 56, 57, 16, 184, 185, 184, 185, 163,
- /* 1080 */ 163, 22, 23, 138, 163, 19, 163, 231, 92, 93,
- /* 1090 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 256,
- /* 1100 */ 163, 184, 185, 163, 163, 184, 185, 163, 92, 93,
- /* 1110 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 163,
- /* 1120 */ 59, 184, 185, 163, 184, 185, 177, 178, 184, 185,
- /* 1130 */ 163, 208, 163, 237, 163, 77, 163, 79, 163, 15,
- /* 1140 */ 184, 185, 237, 147, 184, 185, 24, 231, 153, 154,
- /* 1150 */ 91, 184, 185, 184, 185, 184, 185, 184, 185, 184,
- /* 1160 */ 185, 22, 23, 19, 163, 127, 128, 106, 24, 273,
- /* 1170 */ 271, 105, 231, 274, 263, 264, 223, 224, 273, 22,
- /* 1180 */ 118, 24, 23, 19, 60, 26, 163, 43, 44, 45,
- /* 1190 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- /* 1200 */ 56, 57, 140, 23, 22, 163, 26, 43, 44, 45,
- /* 1210 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- /* 1220 */ 56, 57, 23, 211, 23, 26, 31, 26, 23, 22,
- /* 1230 */ 91, 26, 231, 221, 39, 53, 92, 93, 94, 95,
- /* 1240 */ 96, 97, 98, 99, 100, 101, 102, 23, 23, 163,
- /* 1250 */ 26, 26, 130, 59, 109, 110, 92, 93, 94, 95,
- /* 1260 */ 96, 97, 98, 99, 100, 101, 102, 23, 7, 8,
- /* 1270 */ 26, 110, 23, 59, 23, 26, 19, 26, 141, 23,
- /* 1280 */ 143, 120, 26, 141, 163, 143, 23, 23, 163, 26,
- /* 1290 */ 26, 163, 163, 163, 163, 163, 19, 163, 163, 193,
- /* 1300 */ 106, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- /* 1310 */ 53, 54, 55, 56, 57, 163, 193, 163, 163, 163,
- /* 1320 */ 106, 163, 45, 46, 47, 48, 49, 50, 51, 52,
- /* 1330 */ 53, 54, 55, 56, 57, 163, 163, 130, 222, 163,
- /* 1340 */ 163, 203, 163, 19, 20, 251, 22, 163, 163, 92,
- /* 1350 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- /* 1360 */ 36, 163, 209, 163, 261, 163, 163, 161, 222, 92,
- /* 1370 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- /* 1380 */ 210, 213, 222, 59, 222, 222, 182, 213, 213, 196,
- /* 1390 */ 257, 226, 226, 19, 20, 71, 22, 257, 188, 187,
- /* 1400 */ 192, 212, 187, 187, 226, 81, 210, 166, 60, 261,
- /* 1410 */ 36, 244, 130, 170, 90, 170, 38, 170, 139, 104,
- /* 1420 */ 96, 97, 48, 236, 22, 235, 43, 103, 201, 105,
- /* 1430 */ 106, 107, 138, 59, 110, 247, 213, 18, 204, 258,
- /* 1440 */ 204, 258, 204, 204, 170, 71, 18, 169, 213, 236,
- /* 1450 */ 213, 127, 128, 235, 201, 201, 82, 170, 169, 213,
- /* 1460 */ 146, 87, 62, 254, 90, 141, 142, 143, 144, 145,
- /* 1470 */ 96, 97, 253, 170, 169, 22, 170, 103, 169, 105,
- /* 1480 */ 106, 107, 189, 170, 110, 169, 189, 186, 19, 20,
- /* 1490 */ 104, 22, 194, 186, 186, 64, 115, 186, 194, 189,
- /* 1500 */ 188, 102, 133, 186, 186, 36, 186, 104, 189, 19,
- /* 1510 */ 20, 246, 22, 246, 189, 141, 142, 143, 144, 145,
- /* 1520 */ 0, 1, 2, 228, 228, 5, 36, 227, 59, 227,
- /* 1530 */ 10, 11, 12, 13, 14, 170, 84, 17, 134, 216,
- /* 1540 */ 71, 272, 270, 22, 137, 217, 22, 216, 227, 59,
- /* 1550 */ 30, 82, 32, 217, 228, 228, 87, 227, 170, 90,
- /* 1560 */ 40, 71, 146, 241, 215, 96, 97, 214, 136, 135,
- /* 1570 */ 213, 25, 103, 26, 105, 106, 107, 243, 173, 110,
- /* 1580 */ 90, 172, 13, 6, 164, 164, 96, 97, 98, 162,
- /* 1590 */ 70, 162, 162, 103, 176, 105, 106, 107, 78, 267,
- /* 1600 */ 110, 81, 267, 264, 182, 182, 182, 182, 88, 176,
- /* 1610 */ 141, 142, 143, 144, 145, 176, 190, 4, 182, 182,
- /* 1620 */ 182, 19, 20, 182, 22, 190, 3, 22, 151, 15,
- /* 1630 */ 89, 141, 142, 143, 144, 145, 16, 128, 36, 23,
- /* 1640 */ 23, 139, 122, 24, 119, 131, 20, 127, 128, 133,
- /* 1650 */ 16, 1, 140, 131, 119, 61, 139, 53, 37, 53,
- /* 1660 */ 53, 59, 53, 119, 105, 34, 130, 1, 5, 22,
- /* 1670 */ 150, 104, 149, 71, 26, 75, 68, 41, 68, 130,
- /* 1680 */ 104, 24, 20, 19, 82, 120, 114, 22, 28, 87,
- /* 1690 */ 22, 67, 90, 22, 67, 23, 22, 22, 96, 97,
- /* 1700 */ 67, 23, 138, 22, 37, 103, 153, 105, 106, 107,
- /* 1710 */ 1, 2, 110, 23, 5, 23, 23, 26, 22, 10,
- /* 1720 */ 11, 12, 13, 14, 24, 23, 17, 22, 24, 130,
- /* 1730 */ 23, 19, 20, 23, 22, 105, 22, 34, 85, 30,
- /* 1740 */ 34, 32, 26, 141, 142, 143, 144, 145, 36, 40,
- /* 1750 */ 132, 34, 75, 83, 23, 44, 24, 34, 23, 26,
- /* 1760 */ 26, 19, 20, 23, 22, 26, 23, 23, 23, 23,
- /* 1770 */ 22, 59, 11, 22, 22, 26, 23, 23, 36, 70,
- /* 1780 */ 22, 22, 124, 71, 130, 130, 130, 78, 23, 130,
- /* 1790 */ 81, 15, 1, 278, 278, 278, 278, 88, 278, 278,
- /* 1800 */ 278, 59, 90, 278, 278, 278, 278, 278, 96, 97,
- /* 1810 */ 278, 278, 278, 71, 278, 103, 278, 105, 106, 107,
- /* 1820 */ 278, 278, 110, 278, 278, 278, 278, 278, 278, 278,
- /* 1830 */ 278, 122, 90, 278, 278, 278, 127, 128, 96, 97,
- /* 1840 */ 278, 278, 278, 278, 278, 103, 278, 105, 106, 107,
- /* 1850 */ 278, 278, 110, 141, 142, 143, 144, 145, 278, 150,
- /* 1860 */ 278, 278, 278, 5, 278, 278, 278, 278, 10, 11,
- /* 1870 */ 12, 13, 14, 278, 278, 17, 278, 278, 278, 278,
- /* 1880 */ 278, 278, 278, 141, 142, 143, 144, 145, 30, 278,
- /* 1890 */ 32, 278, 278, 278, 278, 278, 278, 278, 40, 278,
- /* 1900 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- /* 1910 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- /* 1920 */ 278, 278, 278, 278, 278, 278, 278, 278, 70, 278,
- /* 1930 */ 278, 278, 278, 278, 278, 278, 78, 278, 278, 81,
- /* 1940 */ 278, 278, 278, 278, 278, 278, 88, 278, 278, 278,
- /* 1950 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- /* 1960 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- /* 1970 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- /* 1980 */ 122, 278, 278, 278, 278, 127, 128, 278, 278, 278,
- /* 1990 */ 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- /* 2000 */ 278, 278, 278, 278, 278, 278, 278, 278, 150, 278,
- /* 2010 */ 278, 278, 278, 278, 278, 278, 278, 278, 278,
+ /* 0 */ 260, 261, 262, 260, 261, 262, 176, 177, 178, 179,
+ /* 10 */ 180, 181, 184, 206, 209, 184, 186, 206, 188, 19,
+ /* 20 */ 179, 281, 181, 213, 214, 195, 206, 186, 195, 188,
+ /* 30 */ 195, 31, 222, 184, 206, 207, 195, 206, 207, 39,
+ /* 40 */ 24, 209, 184, 43, 44, 45, 46, 47, 48, 49,
+ /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 228, 229,
+ /* 60 */ 184, 228, 229, 228, 229, 260, 261, 262, 192, 228,
+ /* 70 */ 229, 241, 196, 242, 241, 59, 241, 205, 245, 246,
+ /* 80 */ 184, 22, 241, 24, 254, 213, 54, 55, 56, 57,
+ /* 90 */ 58, 256, 260, 261, 262, 254, 96, 97, 98, 99,
+ /* 100 */ 100, 101, 102, 103, 104, 105, 106, 100, 101, 102,
+ /* 110 */ 103, 104, 105, 106, 284, 203, 19, 221, 59, 102,
+ /* 120 */ 103, 104, 105, 106, 59, 284, 110, 269, 96, 97,
+ /* 130 */ 98, 99, 100, 101, 102, 103, 104, 105, 106, 94,
+ /* 140 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 150 */ 53, 54, 55, 56, 57, 110, 184, 106, 73, 114,
+ /* 160 */ 178, 179, 180, 181, 219, 184, 81, 22, 186, 110,
+ /* 170 */ 188, 121, 122, 195, 109, 110, 111, 195, 206, 207,
+ /* 180 */ 83, 184, 85, 54, 55, 56, 57, 206, 207, 277,
+ /* 190 */ 145, 146, 147, 96, 97, 98, 99, 100, 101, 102,
+ /* 200 */ 103, 104, 105, 106, 59, 120, 228, 229, 143, 184,
+ /* 210 */ 228, 229, 184, 19, 242, 203, 131, 132, 221, 241,
+ /* 220 */ 26, 184, 184, 241, 196, 96, 97, 98, 99, 100,
+ /* 230 */ 101, 102, 103, 104, 105, 106, 254, 43, 44, 45,
+ /* 240 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ /* 250 */ 56, 57, 184, 184, 109, 110, 111, 105, 106, 184,
+ /* 260 */ 200, 201, 202, 69, 184, 227, 284, 96, 97, 98,
+ /* 270 */ 99, 100, 101, 102, 103, 104, 105, 106, 297, 298,
+ /* 280 */ 255, 206, 207, 19, 272, 59, 206, 207, 184, 277,
+ /* 290 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 300 */ 106, 184, 259, 19, 184, 100, 101, 43, 44, 45,
+ /* 310 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ /* 320 */ 56, 57, 242, 206, 207, 184, 100, 101, 138, 292,
+ /* 330 */ 293, 67, 76, 296, 108, 109, 110, 111, 295, 113,
+ /* 340 */ 84, 59, 86, 22, 26, 89, 156, 121, 224, 225,
+ /* 350 */ 145, 19, 147, 59, 72, 256, 24, 184, 290, 291,
+ /* 360 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 370 */ 106, 145, 297, 147, 299, 43, 44, 45, 46, 47,
+ /* 380 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ /* 390 */ 106, 109, 110, 111, 138, 184, 112, 113, 114, 115,
+ /* 400 */ 116, 117, 118, 109, 110, 111, 112, 59, 124, 115,
+ /* 410 */ 116, 117, 292, 293, 297, 298, 296, 206, 207, 125,
+ /* 420 */ 72, 100, 101, 184, 46, 47, 48, 49, 96, 97,
+ /* 430 */ 98, 99, 100, 101, 102, 103, 104, 105, 106, 59,
+ /* 440 */ 200, 201, 202, 184, 59, 206, 207, 46, 19, 131,
+ /* 450 */ 132, 278, 23, 242, 184, 184, 76, 109, 110, 111,
+ /* 460 */ 224, 225, 251, 81, 84, 184, 86, 22, 23, 89,
+ /* 470 */ 184, 26, 43, 44, 45, 46, 47, 48, 49, 50,
+ /* 480 */ 51, 52, 53, 54, 55, 56, 57, 102, 184, 109,
+ /* 490 */ 110, 111, 114, 184, 109, 110, 111, 184, 227, 184,
+ /* 500 */ 230, 184, 22, 264, 195, 59, 22, 184, 195, 108,
+ /* 510 */ 206, 207, 59, 131, 132, 206, 207, 184, 138, 206,
+ /* 520 */ 207, 206, 207, 206, 207, 96, 97, 98, 99, 100,
+ /* 530 */ 101, 102, 103, 104, 105, 106, 255, 228, 229, 59,
+ /* 540 */ 95, 228, 229, 59, 184, 19, 242, 94, 184, 23,
+ /* 550 */ 241, 242, 184, 282, 241, 242, 110, 242, 184, 242,
+ /* 560 */ 251, 59, 109, 110, 196, 184, 251, 114, 251, 43,
+ /* 570 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ /* 580 */ 54, 55, 56, 57, 259, 217, 12, 219, 255, 109,
+ /* 590 */ 110, 111, 203, 109, 110, 111, 184, 22, 145, 146,
+ /* 600 */ 147, 27, 112, 22, 230, 115, 116, 117, 227, 19,
+ /* 610 */ 59, 109, 110, 111, 291, 125, 42, 35, 206, 207,
+ /* 620 */ 295, 184, 96, 97, 98, 99, 100, 101, 102, 103,
+ /* 630 */ 104, 105, 106, 26, 59, 233, 46, 63, 136, 184,
+ /* 640 */ 59, 184, 19, 206, 207, 243, 23, 73, 66, 260,
+ /* 650 */ 261, 262, 59, 184, 242, 195, 74, 220, 184, 184,
+ /* 660 */ 109, 110, 111, 206, 207, 184, 43, 44, 45, 46,
+ /* 670 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ /* 680 */ 57, 206, 207, 76, 109, 110, 111, 136, 228, 229,
+ /* 690 */ 109, 110, 111, 86, 184, 220, 89, 21, 108, 230,
+ /* 700 */ 184, 241, 109, 110, 111, 123, 184, 127, 184, 129,
+ /* 710 */ 130, 184, 195, 184, 124, 184, 198, 199, 184, 96,
+ /* 720 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ /* 730 */ 206, 207, 11, 206, 207, 206, 207, 206, 207, 19,
+ /* 740 */ 206, 207, 184, 23, 220, 228, 229, 220, 81, 220,
+ /* 750 */ 195, 220, 287, 288, 220, 195, 80, 195, 241, 201,
+ /* 760 */ 202, 184, 73, 43, 44, 45, 46, 47, 48, 49,
+ /* 770 */ 50, 51, 52, 53, 54, 55, 56, 57, 201, 202,
+ /* 780 */ 113, 195, 184, 228, 229, 120, 121, 122, 228, 229,
+ /* 790 */ 228, 229, 116, 16, 23, 184, 241, 26, 131, 132,
+ /* 800 */ 278, 241, 19, 241, 22, 23, 184, 189, 26, 120,
+ /* 810 */ 121, 122, 184, 26, 228, 229, 96, 97, 98, 99,
+ /* 820 */ 100, 101, 102, 103, 104, 105, 106, 241, 270, 153,
+ /* 830 */ 66, 228, 229, 229, 206, 207, 19, 184, 228, 229,
+ /* 840 */ 23, 16, 121, 122, 241, 241, 82, 270, 29, 227,
+ /* 850 */ 252, 241, 33, 19, 77, 91, 79, 184, 22, 23,
+ /* 860 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 870 */ 53, 54, 55, 56, 57, 12, 184, 95, 184, 206,
+ /* 880 */ 207, 76, 111, 184, 65, 267, 184, 184, 184, 271,
+ /* 890 */ 27, 86, 109, 184, 89, 120, 121, 122, 206, 207,
+ /* 900 */ 206, 207, 77, 139, 79, 42, 184, 136, 206, 207,
+ /* 910 */ 206, 207, 184, 96, 97, 98, 99, 100, 101, 102,
+ /* 920 */ 103, 104, 105, 106, 184, 138, 63, 184, 206, 207,
+ /* 930 */ 153, 95, 184, 19, 206, 207, 227, 23, 7, 8,
+ /* 940 */ 9, 293, 293, 109, 296, 296, 206, 207, 215, 206,
+ /* 950 */ 207, 184, 253, 19, 206, 207, 253, 43, 44, 45,
+ /* 960 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ /* 970 */ 56, 57, 184, 206, 207, 184, 184, 43, 44, 45,
+ /* 980 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ /* 990 */ 56, 57, 184, 22, 23, 184, 59, 206, 207, 184,
+ /* 1000 */ 184, 238, 184, 240, 184, 22, 184, 184, 157, 158,
+ /* 1010 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 1020 */ 106, 206, 207, 184, 206, 207, 206, 207, 206, 207,
+ /* 1030 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 1040 */ 106, 184, 59, 227, 252, 184, 293, 110, 184, 296,
+ /* 1050 */ 184, 184, 184, 230, 184, 184, 184, 15, 184, 184,
+ /* 1060 */ 184, 253, 184, 206, 207, 184, 95, 206, 207, 102,
+ /* 1070 */ 206, 207, 206, 207, 206, 207, 206, 207, 206, 207,
+ /* 1080 */ 206, 207, 206, 207, 184, 151, 184, 206, 207, 278,
+ /* 1090 */ 184, 252, 184, 110, 184, 128, 184, 198, 199, 184,
+ /* 1100 */ 133, 184, 60, 26, 184, 19, 206, 207, 206, 207,
+ /* 1110 */ 131, 132, 206, 207, 206, 207, 206, 207, 206, 207,
+ /* 1120 */ 253, 206, 207, 206, 207, 19, 206, 207, 253, 43,
+ /* 1130 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ /* 1140 */ 54, 55, 56, 57, 184, 26, 184, 26, 184, 43,
+ /* 1150 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ /* 1160 */ 54, 55, 56, 57, 285, 286, 206, 207, 206, 207,
+ /* 1170 */ 206, 207, 184, 31, 184, 293, 184, 293, 296, 184,
+ /* 1180 */ 296, 39, 96, 97, 98, 99, 100, 101, 102, 103,
+ /* 1190 */ 104, 105, 106, 184, 206, 207, 206, 207, 206, 207,
+ /* 1200 */ 184, 22, 96, 97, 98, 99, 100, 101, 102, 103,
+ /* 1210 */ 104, 105, 106, 184, 245, 246, 184, 26, 23, 142,
+ /* 1220 */ 128, 26, 206, 207, 150, 133, 152, 22, 22, 24,
+ /* 1230 */ 111, 23, 53, 184, 26, 206, 207, 151, 206, 207,
+ /* 1240 */ 119, 24, 122, 23, 23, 23, 26, 26, 26, 23,
+ /* 1250 */ 23, 23, 26, 26, 26, 136, 23, 19, 22, 26,
+ /* 1260 */ 113, 114, 24, 114, 144, 184, 59, 61, 7, 8,
+ /* 1270 */ 59, 23, 23, 124, 26, 26, 23, 19, 145, 26,
+ /* 1280 */ 147, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 1290 */ 52, 53, 54, 55, 56, 57, 145, 23, 147, 184,
+ /* 1300 */ 26, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 1310 */ 52, 53, 54, 55, 56, 57, 23, 110, 184, 26,
+ /* 1320 */ 184, 110, 184, 184, 184, 215, 135, 215, 184, 184,
+ /* 1330 */ 184, 247, 184, 244, 96, 97, 98, 99, 100, 101,
+ /* 1340 */ 102, 103, 104, 105, 106, 184, 184, 184, 301, 184,
+ /* 1350 */ 184, 134, 225, 184, 96, 97, 98, 99, 100, 101,
+ /* 1360 */ 102, 103, 104, 105, 106, 184, 184, 184, 184, 184,
+ /* 1370 */ 134, 184, 274, 273, 19, 244, 244, 204, 182, 244,
+ /* 1380 */ 283, 231, 279, 279, 232, 244, 210, 209, 235, 235,
+ /* 1390 */ 235, 248, 218, 234, 19, 209, 238, 209, 238, 44,
+ /* 1400 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ /* 1410 */ 55, 56, 57, 214, 60, 248, 248, 187, 134, 38,
+ /* 1420 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ /* 1430 */ 55, 56, 57, 232, 191, 191, 266, 280, 191, 283,
+ /* 1440 */ 143, 269, 108, 22, 280, 19, 20, 258, 22, 257,
+ /* 1450 */ 43, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ /* 1460 */ 105, 106, 36, 223, 142, 18, 235, 226, 226, 191,
+ /* 1470 */ 18, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ /* 1480 */ 105, 106, 226, 226, 190, 59, 235, 235, 223, 223,
+ /* 1490 */ 258, 257, 191, 190, 235, 150, 62, 71, 191, 276,
+ /* 1500 */ 275, 19, 20, 190, 22, 22, 211, 81, 191, 190,
+ /* 1510 */ 211, 191, 108, 190, 208, 64, 208, 208, 36, 119,
+ /* 1520 */ 94, 216, 211, 208, 210, 106, 100, 101, 216, 208,
+ /* 1530 */ 48, 268, 208, 107, 208, 109, 110, 111, 211, 268,
+ /* 1540 */ 114, 59, 211, 137, 108, 88, 250, 249, 191, 141,
+ /* 1550 */ 250, 249, 138, 71, 250, 300, 22, 131, 132, 249,
+ /* 1560 */ 300, 191, 150, 238, 82, 140, 250, 249, 239, 87,
+ /* 1570 */ 139, 145, 146, 147, 148, 149, 94, 239, 237, 236,
+ /* 1580 */ 25, 235, 100, 101, 194, 26, 193, 13, 185, 107,
+ /* 1590 */ 185, 109, 110, 111, 6, 263, 114, 203, 265, 183,
+ /* 1600 */ 183, 183, 203, 212, 203, 203, 197, 197, 212, 4,
+ /* 1610 */ 3, 22, 197, 155, 15, 204, 203, 289, 93, 289,
+ /* 1620 */ 16, 286, 132, 23, 204, 23, 123, 145, 146, 147,
+ /* 1630 */ 148, 149, 0, 1, 2, 143, 24, 5, 20, 135,
+ /* 1640 */ 16, 1, 10, 11, 12, 13, 14, 137, 135, 17,
+ /* 1650 */ 144, 123, 19, 20, 61, 22, 37, 143, 123, 53,
+ /* 1660 */ 109, 53, 30, 53, 32, 34, 53, 134, 1, 36,
+ /* 1670 */ 5, 22, 40, 108, 153, 41, 26, 68, 75, 68,
+ /* 1680 */ 134, 108, 24, 20, 124, 19, 118, 67, 67, 28,
+ /* 1690 */ 22, 22, 59, 22, 67, 23, 22, 22, 142, 37,
+ /* 1700 */ 23, 22, 70, 23, 71, 157, 23, 23, 26, 23,
+ /* 1710 */ 78, 22, 24, 81, 23, 82, 22, 24, 134, 23,
+ /* 1720 */ 87, 23, 19, 20, 92, 22, 109, 94, 22, 34,
+ /* 1730 */ 136, 26, 85, 100, 101, 34, 34, 83, 34, 36,
+ /* 1740 */ 107, 34, 109, 110, 111, 75, 90, 114, 75, 34,
+ /* 1750 */ 23, 22, 44, 34, 24, 23, 22, 26, 126, 26,
+ /* 1760 */ 23, 23, 59, 131, 132, 23, 23, 26, 23, 11,
+ /* 1770 */ 22, 22, 26, 23, 71, 23, 22, 22, 145, 146,
+ /* 1780 */ 147, 148, 149, 128, 23, 82, 154, 134, 15, 1,
+ /* 1790 */ 87, 134, 302, 134, 134, 302, 302, 94, 302, 302,
+ /* 1800 */ 302, 302, 302, 100, 101, 302, 302, 302, 302, 302,
+ /* 1810 */ 107, 302, 109, 110, 111, 1, 2, 114, 302, 5,
+ /* 1820 */ 302, 302, 302, 302, 10, 11, 12, 13, 14, 302,
+ /* 1830 */ 302, 17, 302, 302, 302, 302, 19, 20, 302, 22,
+ /* 1840 */ 302, 302, 302, 302, 30, 302, 32, 302, 145, 146,
+ /* 1850 */ 147, 148, 149, 36, 40, 302, 302, 302, 302, 302,
+ /* 1860 */ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ /* 1870 */ 302, 302, 302, 302, 302, 302, 59, 302, 302, 302,
+ /* 1880 */ 302, 302, 302, 302, 70, 302, 302, 302, 71, 302,
+ /* 1890 */ 302, 302, 78, 302, 302, 81, 19, 20, 302, 22,
+ /* 1900 */ 302, 302, 302, 302, 302, 302, 92, 302, 302, 302,
+ /* 1910 */ 302, 94, 302, 36, 302, 302, 302, 100, 101, 102,
+ /* 1920 */ 302, 302, 302, 302, 107, 302, 109, 110, 111, 302,
+ /* 1930 */ 302, 114, 302, 302, 302, 302, 59, 302, 302, 302,
+ /* 1940 */ 126, 302, 302, 302, 302, 131, 132, 302, 71, 302,
+ /* 1950 */ 302, 302, 302, 302, 302, 302, 19, 20, 302, 22,
+ /* 1960 */ 302, 302, 145, 146, 147, 148, 149, 302, 154, 302,
+ /* 1970 */ 302, 94, 302, 36, 302, 302, 302, 100, 101, 302,
+ /* 1980 */ 302, 302, 302, 302, 107, 302, 109, 110, 111, 302,
+ /* 1990 */ 302, 114, 5, 302, 302, 302, 59, 10, 11, 12,
+ /* 2000 */ 13, 14, 302, 302, 17, 302, 302, 302, 71, 302,
+ /* 2010 */ 302, 302, 302, 302, 302, 302, 302, 30, 302, 32,
+ /* 2020 */ 302, 302, 145, 146, 147, 148, 149, 40, 302, 302,
+ /* 2030 */ 302, 94, 302, 302, 302, 302, 302, 100, 101, 302,
+ /* 2040 */ 302, 302, 302, 302, 107, 302, 109, 110, 111, 302,
+ /* 2050 */ 302, 114, 302, 302, 302, 302, 302, 70, 302, 302,
+ /* 2060 */ 302, 302, 302, 302, 302, 78, 302, 302, 81, 302,
+ /* 2070 */ 302, 302, 302, 302, 302, 302, 302, 302, 302, 92,
+ /* 2080 */ 302, 302, 145, 146, 147, 148, 149, 302, 302, 302,
+ /* 2090 */ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ /* 2100 */ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ /* 2110 */ 302, 302, 302, 126, 302, 302, 302, 302, 131, 132,
+ /* 2120 */ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ /* 2130 */ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ /* 2140 */ 302, 154, 302, 302, 302, 302, 302, 302, 302, 302,
+ /* 2150 */ 302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
+ /* 2160 */ 302, 302, 302, 302, 302, 302, 302, 302, 302,
};
-#define YY_SHIFT_COUNT (523)
+#define YY_SHIFT_COUNT (539)
#define YY_SHIFT_MIN (0)
-#define YY_SHIFT_MAX (1858)
+#define YY_SHIFT_MAX (1987)
static const unsigned short int yy_shift_ofst[] = {
- /* 0 */ 1709, 1520, 1858, 1324, 1324, 24, 1374, 1469, 1602, 1712,
- /* 10 */ 1712, 1712, 271, 0, 0, 113, 1016, 1712, 1712, 1712,
- /* 20 */ 1712, 1712, 1712, 1712, 1712, 1712, 1712, 12, 12, 409,
- /* 30 */ 596, 24, 24, 24, 24, 24, 24, 93, 177, 270,
- /* 40 */ 363, 456, 549, 642, 735, 828, 848, 996, 1144, 1016,
- /* 50 */ 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016,
- /* 60 */ 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1164, 1016, 1257,
- /* 70 */ 1277, 1277, 1490, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
- /* 80 */ 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
- /* 90 */ 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712,
- /* 100 */ 1712, 1712, 1712, 1712, 1712, 1742, 1712, 1712, 1712, 1712,
- /* 110 */ 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 143,
- /* 120 */ 162, 162, 162, 162, 162, 204, 151, 186, 650, 690,
- /* 130 */ 327, 650, 261, 261, 650, 722, 722, 722, 722, 373,
- /* 140 */ 33, 2, 2009, 2009, 330, 330, 330, 346, 289, 278,
- /* 150 */ 289, 289, 517, 517, 459, 510, 15, 799, 650, 650,
- /* 160 */ 650, 650, 650, 650, 650, 650, 650, 650, 650, 650,
- /* 170 */ 650, 650, 650, 650, 650, 650, 650, 650, 650, 650,
- /* 180 */ 331, 365, 995, 995, 265, 365, 50, 1038, 2009, 2009,
- /* 190 */ 2009, 433, 250, 250, 504, 314, 429, 518, 522, 526,
- /* 200 */ 561, 650, 650, 650, 650, 650, 650, 650, 650, 650,
- /* 210 */ 192, 650, 650, 650, 650, 650, 650, 650, 650, 650,
- /* 220 */ 650, 650, 650, 641, 641, 641, 650, 650, 650, 650,
- /* 230 */ 800, 650, 650, 650, 830, 650, 650, 782, 650, 650,
- /* 240 */ 650, 650, 650, 650, 650, 650, 739, 902, 689, 895,
- /* 250 */ 895, 895, 895, 736, 689, 689, 885, 445, 903, 1124,
- /* 260 */ 945, 748, 748, 1066, 945, 945, 1066, 447, 1002, 293,
- /* 270 */ 1195, 1195, 1195, 748, 740, 727, 460, 1157, 1348, 1282,
- /* 280 */ 1282, 1378, 1378, 1282, 1279, 1315, 1402, 1383, 1294, 1419,
- /* 290 */ 1419, 1419, 1419, 1282, 1428, 1294, 1294, 1315, 1402, 1383,
- /* 300 */ 1383, 1294, 1282, 1428, 1314, 1400, 1282, 1428, 1453, 1282,
- /* 310 */ 1428, 1282, 1428, 1453, 1386, 1386, 1386, 1431, 1453, 1386,
- /* 320 */ 1381, 1386, 1431, 1386, 1386, 1453, 1399, 1399, 1453, 1369,
- /* 330 */ 1403, 1369, 1403, 1369, 1403, 1369, 1403, 1282, 1404, 1452,
- /* 340 */ 1521, 1407, 1404, 1524, 1282, 1416, 1407, 1432, 1434, 1294,
- /* 350 */ 1546, 1547, 1569, 1569, 1577, 1577, 1577, 2009, 2009, 2009,
- /* 360 */ 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009,
- /* 370 */ 2009, 2009, 2009, 591, 697, 1059, 1139, 1058, 797, 465,
- /* 380 */ 1159, 1182, 1122, 1062, 1180, 936, 1199, 1201, 1205, 1224,
- /* 390 */ 1225, 1244, 1061, 1145, 1261, 1161, 1194, 1249, 1251, 1256,
- /* 400 */ 1137, 1142, 1263, 1264, 1214, 1207, 1613, 1623, 1605, 1477,
- /* 410 */ 1614, 1541, 1620, 1616, 1617, 1509, 1502, 1525, 1619, 1514,
- /* 420 */ 1626, 1516, 1634, 1650, 1522, 1512, 1535, 1594, 1621, 1517,
- /* 430 */ 1604, 1606, 1607, 1609, 1544, 1559, 1631, 1536, 1666, 1663,
- /* 440 */ 1647, 1567, 1523, 1608, 1648, 1610, 1600, 1636, 1549, 1576,
- /* 450 */ 1657, 1662, 1664, 1565, 1572, 1665, 1624, 1668, 1671, 1672,
- /* 460 */ 1674, 1627, 1660, 1675, 1633, 1667, 1678, 1564, 1681, 1553,
- /* 470 */ 1690, 1692, 1691, 1693, 1696, 1700, 1702, 1705, 1704, 1599,
- /* 480 */ 1707, 1710, 1630, 1703, 1714, 1618, 1716, 1706, 1716, 1717,
- /* 490 */ 1653, 1677, 1670, 1711, 1731, 1732, 1733, 1734, 1723, 1735,
- /* 500 */ 1716, 1740, 1743, 1744, 1745, 1739, 1746, 1748, 1761, 1751,
- /* 510 */ 1752, 1753, 1754, 1758, 1759, 1749, 1658, 1654, 1655, 1656,
- /* 520 */ 1659, 1765, 1776, 1791,
+ /* 0 */ 1814, 1632, 1987, 1426, 1426, 382, 1482, 1633, 1703, 1877,
+ /* 10 */ 1877, 1877, 85, 0, 0, 264, 1106, 1877, 1877, 1877,
+ /* 20 */ 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
+ /* 30 */ 226, 226, 380, 380, 294, 667, 382, 382, 382, 382,
+ /* 40 */ 382, 382, 97, 194, 332, 429, 526, 623, 720, 817,
+ /* 50 */ 914, 934, 1086, 1238, 1106, 1106, 1106, 1106, 1106, 1106,
+ /* 60 */ 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,
+ /* 70 */ 1106, 1106, 1258, 1106, 1355, 1375, 1375, 1817, 1877, 1877,
+ /* 80 */ 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
+ /* 90 */ 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
+ /* 100 */ 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
+ /* 110 */ 1937, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877,
+ /* 120 */ 1877, 1877, 1877, 1877, 32, 129, 129, 129, 129, 129,
+ /* 130 */ 171, 7, 17, 593, 676, 590, 593, 205, 205, 593,
+ /* 140 */ 318, 318, 318, 318, 50, 152, 51, 2142, 2142, 284,
+ /* 150 */ 284, 284, 65, 145, 282, 145, 145, 574, 574, 256,
+ /* 160 */ 348, 445, 782, 593, 593, 593, 593, 593, 593, 593,
+ /* 170 */ 593, 593, 593, 593, 593, 593, 593, 593, 593, 593,
+ /* 180 */ 593, 593, 593, 593, 607, 607, 593, 721, 805, 805,
+ /* 190 */ 446, 851, 851, 446, 190, 979, 2142, 2142, 2142, 453,
+ /* 200 */ 45, 45, 480, 490, 484, 385, 575, 502, 551, 581,
+ /* 210 */ 593, 593, 593, 593, 593, 593, 593, 593, 593, 689,
+ /* 220 */ 593, 593, 593, 593, 593, 593, 593, 593, 593, 593,
+ /* 230 */ 593, 593, 582, 582, 582, 593, 593, 593, 593, 771,
+ /* 240 */ 593, 593, 593, 59, 764, 593, 593, 863, 593, 593,
+ /* 250 */ 593, 593, 593, 593, 593, 593, 665, 819, 580, 16,
+ /* 260 */ 16, 16, 16, 1119, 580, 580, 967, 321, 931, 1042,
+ /* 270 */ 1077, 783, 783, 834, 1077, 1077, 834, 1121, 1195, 401,
+ /* 280 */ 1142, 1142, 1142, 783, 787, 787, 1074, 1191, 1092, 1205,
+ /* 290 */ 1354, 1284, 1284, 1381, 1381, 1284, 1297, 1334, 1421, 1407,
+ /* 300 */ 1322, 1447, 1447, 1447, 1447, 1284, 1452, 1322, 1322, 1334,
+ /* 310 */ 1421, 1407, 1407, 1322, 1284, 1452, 1345, 1434, 1284, 1452,
+ /* 320 */ 1483, 1284, 1452, 1284, 1452, 1483, 1404, 1404, 1404, 1451,
+ /* 330 */ 1483, 1404, 1400, 1404, 1451, 1404, 1404, 1483, 1419, 1419,
+ /* 340 */ 1483, 1406, 1436, 1406, 1436, 1406, 1436, 1406, 1436, 1284,
+ /* 350 */ 1457, 1457, 1408, 1414, 1534, 1284, 1412, 1408, 1425, 1431,
+ /* 360 */ 1322, 1555, 1559, 1574, 1574, 1588, 1588, 1588, 2142, 2142,
+ /* 370 */ 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142,
+ /* 380 */ 2142, 2142, 2142, 378, 777, 836, 971, 825, 775, 983,
+ /* 390 */ 1208, 1179, 1217, 1120, 1220, 1206, 1221, 1222, 1226, 1227,
+ /* 400 */ 1228, 1233, 937, 1147, 1261, 1149, 1207, 1248, 1249, 1253,
+ /* 410 */ 1133, 1151, 1274, 1293, 1211, 1236, 1605, 1607, 1589, 1458,
+ /* 420 */ 1599, 1525, 1604, 1600, 1602, 1490, 1492, 1503, 1612, 1504,
+ /* 430 */ 1618, 1510, 1624, 1640, 1513, 1506, 1528, 1593, 1619, 1514,
+ /* 440 */ 1606, 1608, 1610, 1613, 1535, 1551, 1631, 1533, 1667, 1665,
+ /* 450 */ 1649, 1565, 1521, 1609, 1650, 1611, 1603, 1634, 1546, 1573,
+ /* 460 */ 1658, 1663, 1666, 1560, 1568, 1668, 1620, 1669, 1671, 1672,
+ /* 470 */ 1674, 1621, 1661, 1675, 1627, 1662, 1677, 1556, 1679, 1680,
+ /* 480 */ 1548, 1683, 1684, 1682, 1686, 1689, 1688, 1691, 1694, 1693,
+ /* 490 */ 1584, 1696, 1698, 1617, 1695, 1706, 1594, 1705, 1701, 1702,
+ /* 500 */ 1704, 1707, 1647, 1670, 1654, 1708, 1673, 1656, 1715, 1727,
+ /* 510 */ 1729, 1730, 1731, 1733, 1719, 1732, 1705, 1737, 1738, 1742,
+ /* 520 */ 1743, 1741, 1745, 1734, 1758, 1748, 1749, 1750, 1752, 1754,
+ /* 530 */ 1755, 1746, 1655, 1653, 1657, 1659, 1660, 1761, 1773, 1788,
};
-#define YY_REDUCE_COUNT (372)
-#define YY_REDUCE_MIN (-235)
-#define YY_REDUCE_MAX (1441)
+#define YY_REDUCE_COUNT (382)
+#define YY_REDUCE_MIN (-260)
+#define YY_REDUCE_MAX (1420)
static const short yy_reduce_ofst[] = {
- /* 0 */ -147, 171, 263, -96, 169, -144, -162, -149, -102, -156,
- /* 10 */ -98, 216, 354, -170, -57, -235, 307, 149, 423, 428,
- /* 20 */ 471, 313, 451, 519, 489, 496, 499, 545, 547, 555,
- /* 30 */ -116, 540, 558, 592, 594, 597, 599, -206, -206, -206,
- /* 40 */ -206, -206, -206, -206, -206, -206, -206, -206, -206, -206,
- /* 50 */ -206, -206, -206, -206, -206, -206, -206, -206, -206, -206,
- /* 60 */ -206, -206, -206, -206, -206, -206, -206, -206, -206, -206,
- /* 70 */ -206, -206, 196, 309, 494, 537, 612, 656, 675, 679,
- /* 80 */ 681, 685, 724, 753, 771, 776, 788, 790, 794, 796,
- /* 90 */ 801, 803, 805, 807, 814, 819, 833, 837, 839, 842,
- /* 100 */ 845, 847, 849, 853, 873, 891, 893, 917, 921, 937,
- /* 110 */ 940, 944, 956, 960, 967, 969, 971, 973, 975, -206,
- /* 120 */ -206, -206, -206, -206, -206, -206, -206, -206, 501, -168,
- /* 130 */ 90, -97, 87, 112, 303, 277, 601, 277, 601, 179,
- /* 140 */ -206, -206, -206, -206, -107, -107, -107, -43, -56, 323,
- /* 150 */ 500, 512, -187, -177, 317, 609, 353, 353, 120, 144,
- /* 160 */ 490, 539, 698, 374, 467, 507, 789, 404, -157, 755,
- /* 170 */ 856, 916, 843, 941, 802, 770, 923, 821, 1001, -142,
- /* 180 */ 264, 785, 896, 905, 899, 949, -176, 544, 911, 953,
- /* 190 */ 1012, -182, -59, -30, 16, -22, 117, 172, 291, 369,
- /* 200 */ 407, 415, 566, 586, 647, 699, 754, 813, 850, 892,
- /* 210 */ 121, 1023, 1042, 1086, 1121, 1125, 1128, 1129, 1130, 1131,
- /* 220 */ 1132, 1134, 1135, 284, 1106, 1123, 1152, 1154, 1155, 1156,
- /* 230 */ 397, 1158, 1172, 1173, 1116, 1176, 1177, 1138, 1179, 117,
- /* 240 */ 1184, 1185, 1198, 1200, 1202, 1203, 741, 1094, 1153, 1146,
- /* 250 */ 1160, 1162, 1163, 397, 1153, 1153, 1170, 1204, 1206, 1103,
- /* 260 */ 1168, 1165, 1166, 1133, 1174, 1175, 1140, 1210, 1193, 1208,
- /* 270 */ 1212, 1215, 1216, 1178, 1167, 1189, 1196, 1241, 1148, 1243,
- /* 280 */ 1245, 1181, 1183, 1247, 1188, 1187, 1190, 1227, 1223, 1234,
- /* 290 */ 1236, 1238, 1239, 1274, 1278, 1235, 1237, 1213, 1218, 1253,
- /* 300 */ 1254, 1246, 1287, 1289, 1209, 1219, 1303, 1305, 1293, 1306,
- /* 310 */ 1309, 1313, 1316, 1297, 1301, 1307, 1308, 1298, 1310, 1311,
- /* 320 */ 1312, 1317, 1304, 1318, 1320, 1319, 1265, 1267, 1325, 1295,
- /* 330 */ 1300, 1296, 1302, 1326, 1321, 1327, 1330, 1365, 1323, 1269,
- /* 340 */ 1272, 1328, 1331, 1322, 1388, 1334, 1336, 1349, 1353, 1357,
- /* 350 */ 1405, 1409, 1420, 1421, 1427, 1429, 1430, 1332, 1335, 1339,
- /* 360 */ 1418, 1422, 1423, 1424, 1425, 1433, 1426, 1435, 1436, 1437,
- /* 370 */ 1438, 1441, 1439,
+ /* 0 */ -170, -18, -159, 309, 313, -167, -19, 75, 117, 211,
+ /* 10 */ 315, 317, -165, -195, -168, -260, 389, 437, 475, 524,
+ /* 20 */ 527, -169, 529, 531, -28, 80, 534, 239, 304, 412,
+ /* 30 */ 558, 577, 37, 120, 368, -22, 460, 517, 555, 560,
+ /* 40 */ 562, 586, -257, -257, -257, -257, -257, -257, -257, -257,
+ /* 50 */ -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
+ /* 60 */ -257, -257, -257, -257, -257, -257, -257, -257, -257, -257,
+ /* 70 */ -257, -257, -257, -257, -257, -257, -257, -172, 457, 628,
+ /* 80 */ 673, 692, 694, 702, 704, 722, 728, 740, 743, 748,
+ /* 90 */ 767, 791, 815, 818, 820, 822, 857, 861, 864, 866,
+ /* 100 */ 868, 870, 872, 874, 876, 881, 900, 902, 906, 908,
+ /* 110 */ 910, 912, 915, 917, 920, 960, 962, 964, 988, 990,
+ /* 120 */ 992, 1016, 1029, 1032, -257, -257, -257, -257, -257, -257,
+ /* 130 */ -257, -257, -257, 271, 618, -190, 68, 60, 240, -124,
+ /* 140 */ 603, 610, 603, 610, 12, -257, -257, -257, -257, -128,
+ /* 150 */ -128, -128, -142, 25, 270, 281, 333, 124, 236, 648,
+ /* 160 */ 374, 465, 465, 28, 598, 792, 839, 469, 38, 381,
+ /* 170 */ 622, 709, 173, 699, 522, 703, 808, 811, 867, 816,
+ /* 180 */ -104, 823, -3, 875, 649, 753, 323, -88, 882, 884,
+ /* 190 */ 518, 43, 325, 899, 763, 604, 879, 969, 402, -193,
+ /* 200 */ -189, -180, -151, -55, 69, 104, 141, 259, 286, 360,
+ /* 210 */ 364, 455, 474, 481, 510, 516, 611, 653, 788, 99,
+ /* 220 */ 871, 878, 995, 1009, 1049, 1081, 1115, 1134, 1136, 1138,
+ /* 230 */ 1139, 1140, 733, 1110, 1112, 1144, 1145, 1146, 1148, 1084,
+ /* 240 */ 1161, 1162, 1163, 1089, 1047, 1165, 1166, 1127, 1169, 104,
+ /* 250 */ 1181, 1182, 1183, 1184, 1185, 1187, 1098, 1100, 1150, 1131,
+ /* 260 */ 1132, 1135, 1141, 1084, 1150, 1150, 1152, 1173, 1196, 1097,
+ /* 270 */ 1153, 1143, 1167, 1103, 1154, 1155, 1104, 1176, 1174, 1199,
+ /* 280 */ 1178, 1186, 1188, 1168, 1158, 1160, 1170, 1159, 1201, 1230,
+ /* 290 */ 1156, 1243, 1244, 1157, 1164, 1247, 1172, 1189, 1192, 1240,
+ /* 300 */ 1231, 1241, 1242, 1256, 1257, 1278, 1294, 1251, 1252, 1232,
+ /* 310 */ 1234, 1265, 1266, 1259, 1301, 1303, 1223, 1225, 1307, 1313,
+ /* 320 */ 1295, 1317, 1319, 1320, 1323, 1299, 1306, 1308, 1309, 1305,
+ /* 330 */ 1311, 1315, 1314, 1321, 1312, 1324, 1326, 1327, 1263, 1271,
+ /* 340 */ 1331, 1296, 1298, 1300, 1302, 1304, 1310, 1316, 1318, 1357,
+ /* 350 */ 1255, 1260, 1329, 1325, 1332, 1370, 1333, 1338, 1341, 1343,
+ /* 360 */ 1346, 1390, 1393, 1403, 1405, 1416, 1417, 1418, 1328, 1330,
+ /* 370 */ 1335, 1409, 1394, 1399, 1401, 1402, 1410, 1391, 1396, 1411,
+ /* 380 */ 1420, 1413, 1415,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 1500, 1500, 1500, 1346, 1129, 1235, 1129, 1129, 1129, 1346,
- /* 10 */ 1346, 1346, 1129, 1265, 1265, 1399, 1160, 1129, 1129, 1129,
- /* 20 */ 1129, 1129, 1129, 1129, 1345, 1129, 1129, 1129, 1129, 1129,
- /* 30 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1271, 1129,
- /* 40 */ 1129, 1129, 1129, 1129, 1347, 1348, 1129, 1129, 1129, 1398,
- /* 50 */ 1400, 1363, 1281, 1280, 1279, 1278, 1381, 1252, 1276, 1269,
- /* 60 */ 1273, 1341, 1342, 1340, 1344, 1348, 1347, 1129, 1272, 1312,
- /* 70 */ 1326, 1311, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 80 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 90 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 100 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 110 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1320,
- /* 120 */ 1325, 1331, 1324, 1321, 1314, 1313, 1315, 1316, 1129, 1150,
- /* 130 */ 1199, 1129, 1129, 1129, 1129, 1417, 1416, 1129, 1129, 1160,
- /* 140 */ 1317, 1318, 1328, 1327, 1406, 1456, 1455, 1364, 1129, 1129,
- /* 150 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 160 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 170 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 180 */ 1160, 1156, 1306, 1305, 1426, 1156, 1259, 1129, 1412, 1235,
- /* 190 */ 1226, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 200 */ 1129, 1129, 1129, 1129, 1403, 1401, 1129, 1129, 1129, 1129,
- /* 210 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 220 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 230 */ 1129, 1129, 1129, 1129, 1231, 1129, 1129, 1129, 1129, 1129,
- /* 240 */ 1129, 1129, 1129, 1129, 1129, 1450, 1129, 1376, 1213, 1231,
- /* 250 */ 1231, 1231, 1231, 1233, 1214, 1212, 1225, 1160, 1136, 1492,
- /* 260 */ 1275, 1254, 1254, 1489, 1275, 1275, 1489, 1174, 1470, 1171,
- /* 270 */ 1265, 1265, 1265, 1254, 1343, 1232, 1225, 1129, 1492, 1240,
- /* 280 */ 1240, 1491, 1491, 1240, 1364, 1284, 1290, 1202, 1275, 1208,
- /* 290 */ 1208, 1208, 1208, 1240, 1147, 1275, 1275, 1284, 1290, 1202,
- /* 300 */ 1202, 1275, 1240, 1147, 1380, 1486, 1240, 1147, 1354, 1240,
- /* 310 */ 1147, 1240, 1147, 1354, 1200, 1200, 1200, 1189, 1354, 1200,
- /* 320 */ 1174, 1200, 1189, 1200, 1200, 1354, 1358, 1358, 1354, 1258,
- /* 330 */ 1253, 1258, 1253, 1258, 1253, 1258, 1253, 1240, 1259, 1425,
- /* 340 */ 1129, 1270, 1259, 1349, 1240, 1129, 1270, 1268, 1266, 1275,
- /* 350 */ 1153, 1192, 1453, 1453, 1449, 1449, 1449, 1497, 1497, 1412,
- /* 360 */ 1465, 1160, 1160, 1160, 1160, 1465, 1176, 1176, 1160, 1160,
- /* 370 */ 1160, 1160, 1465, 1129, 1129, 1129, 1129, 1129, 1129, 1460,
- /* 380 */ 1129, 1365, 1244, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 390 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 400 */ 1129, 1129, 1129, 1129, 1129, 1295, 1129, 1132, 1409, 1129,
- /* 410 */ 1129, 1407, 1129, 1129, 1129, 1129, 1129, 1129, 1245, 1129,
- /* 420 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 430 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1488, 1129, 1129,
- /* 440 */ 1129, 1129, 1129, 1129, 1379, 1378, 1129, 1129, 1242, 1129,
- /* 450 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 460 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 470 */ 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 480 */ 1129, 1129, 1129, 1129, 1129, 1129, 1267, 1129, 1424, 1129,
- /* 490 */ 1129, 1129, 1129, 1129, 1129, 1129, 1438, 1260, 1129, 1129,
- /* 500 */ 1479, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129,
- /* 510 */ 1129, 1129, 1129, 1129, 1129, 1474, 1216, 1297, 1129, 1296,
- /* 520 */ 1300, 1129, 1141, 1129,
+ /* 0 */ 1537, 1537, 1537, 1377, 1159, 1266, 1159, 1159, 1159, 1377,
+ /* 10 */ 1377, 1377, 1159, 1296, 1296, 1430, 1190, 1159, 1159, 1159,
+ /* 20 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1376, 1159, 1159,
+ /* 30 */ 1159, 1159, 1460, 1460, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 40 */ 1159, 1159, 1159, 1302, 1159, 1159, 1159, 1159, 1159, 1378,
+ /* 50 */ 1379, 1159, 1159, 1159, 1429, 1431, 1394, 1312, 1311, 1310,
+ /* 60 */ 1309, 1412, 1283, 1307, 1300, 1304, 1372, 1373, 1371, 1375,
+ /* 70 */ 1379, 1378, 1159, 1303, 1343, 1357, 1342, 1159, 1159, 1159,
+ /* 80 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 90 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 100 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 110 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 120 */ 1159, 1159, 1159, 1159, 1351, 1356, 1362, 1355, 1352, 1345,
+ /* 130 */ 1344, 1346, 1347, 1159, 1180, 1230, 1159, 1159, 1159, 1159,
+ /* 140 */ 1448, 1447, 1159, 1159, 1190, 1348, 1349, 1359, 1358, 1437,
+ /* 150 */ 1493, 1492, 1395, 1159, 1159, 1159, 1159, 1159, 1159, 1460,
+ /* 160 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 170 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 180 */ 1159, 1159, 1159, 1159, 1460, 1460, 1159, 1190, 1460, 1460,
+ /* 190 */ 1186, 1337, 1336, 1186, 1290, 1159, 1443, 1266, 1257, 1159,
+ /* 200 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 210 */ 1159, 1159, 1159, 1434, 1432, 1159, 1159, 1159, 1159, 1159,
+ /* 220 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 230 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 240 */ 1159, 1159, 1159, 1262, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 250 */ 1159, 1159, 1159, 1159, 1159, 1487, 1159, 1407, 1244, 1262,
+ /* 260 */ 1262, 1262, 1262, 1264, 1245, 1243, 1256, 1191, 1166, 1529,
+ /* 270 */ 1306, 1285, 1285, 1526, 1306, 1306, 1526, 1205, 1507, 1202,
+ /* 280 */ 1296, 1296, 1296, 1285, 1290, 1290, 1374, 1263, 1256, 1159,
+ /* 290 */ 1529, 1271, 1271, 1528, 1528, 1271, 1395, 1315, 1321, 1233,
+ /* 300 */ 1306, 1239, 1239, 1239, 1239, 1271, 1177, 1306, 1306, 1315,
+ /* 310 */ 1321, 1233, 1233, 1306, 1271, 1177, 1411, 1523, 1271, 1177,
+ /* 320 */ 1385, 1271, 1177, 1271, 1177, 1385, 1231, 1231, 1231, 1220,
+ /* 330 */ 1385, 1231, 1205, 1231, 1220, 1231, 1231, 1385, 1389, 1389,
+ /* 340 */ 1385, 1289, 1284, 1289, 1284, 1289, 1284, 1289, 1284, 1271,
+ /* 350 */ 1470, 1470, 1301, 1290, 1380, 1271, 1159, 1301, 1299, 1297,
+ /* 360 */ 1306, 1183, 1223, 1490, 1490, 1486, 1486, 1486, 1534, 1534,
+ /* 370 */ 1443, 1502, 1190, 1190, 1190, 1190, 1502, 1207, 1207, 1191,
+ /* 380 */ 1191, 1190, 1502, 1159, 1159, 1159, 1159, 1159, 1159, 1497,
+ /* 390 */ 1159, 1396, 1275, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 400 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 410 */ 1159, 1159, 1159, 1159, 1159, 1326, 1159, 1162, 1440, 1159,
+ /* 420 */ 1159, 1438, 1159, 1159, 1159, 1159, 1159, 1159, 1276, 1159,
+ /* 430 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 440 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1525, 1159, 1159,
+ /* 450 */ 1159, 1159, 1159, 1159, 1410, 1409, 1159, 1159, 1273, 1159,
+ /* 460 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 470 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 480 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 490 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1298, 1159, 1159,
+ /* 500 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 510 */ 1159, 1159, 1475, 1291, 1159, 1159, 1516, 1159, 1159, 1159,
+ /* 520 */ 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
+ /* 530 */ 1159, 1511, 1247, 1328, 1159, 1327, 1331, 1159, 1171, 1159,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -148334,6 +149757,10 @@ static const YYCODETYPE yyFallback[] = {
59, /* PRECEDING => ID */
59, /* RANGE => ID */
59, /* UNBOUNDED => ID */
+ 59, /* EXCLUDE => ID */
+ 59, /* GROUPS => ID */
+ 59, /* OTHERS => ID */
+ 59, /* TIES => ID */
59, /* REINDEX => ID */
59, /* RENAME => ID */
59, /* CTIME_KW => ID */
@@ -148512,196 +149939,220 @@ static const char *const yyTokenName[] = {
/* 85 */ "PRECEDING",
/* 86 */ "RANGE",
/* 87 */ "UNBOUNDED",
- /* 88 */ "REINDEX",
- /* 89 */ "RENAME",
- /* 90 */ "CTIME_KW",
- /* 91 */ "ANY",
- /* 92 */ "BITAND",
- /* 93 */ "BITOR",
- /* 94 */ "LSHIFT",
- /* 95 */ "RSHIFT",
- /* 96 */ "PLUS",
- /* 97 */ "MINUS",
- /* 98 */ "STAR",
- /* 99 */ "SLASH",
- /* 100 */ "REM",
- /* 101 */ "CONCAT",
- /* 102 */ "COLLATE",
- /* 103 */ "BITNOT",
- /* 104 */ "ON",
- /* 105 */ "INDEXED",
- /* 106 */ "STRING",
- /* 107 */ "JOIN_KW",
- /* 108 */ "CONSTRAINT",
- /* 109 */ "DEFAULT",
- /* 110 */ "NULL",
- /* 111 */ "PRIMARY",
- /* 112 */ "UNIQUE",
- /* 113 */ "CHECK",
- /* 114 */ "REFERENCES",
- /* 115 */ "AUTOINCR",
- /* 116 */ "INSERT",
- /* 117 */ "DELETE",
- /* 118 */ "UPDATE",
- /* 119 */ "SET",
- /* 120 */ "DEFERRABLE",
- /* 121 */ "FOREIGN",
- /* 122 */ "DROP",
- /* 123 */ "UNION",
- /* 124 */ "ALL",
- /* 125 */ "EXCEPT",
- /* 126 */ "INTERSECT",
- /* 127 */ "SELECT",
- /* 128 */ "VALUES",
- /* 129 */ "DISTINCT",
- /* 130 */ "DOT",
- /* 131 */ "FROM",
- /* 132 */ "JOIN",
- /* 133 */ "USING",
- /* 134 */ "ORDER",
- /* 135 */ "GROUP",
- /* 136 */ "HAVING",
- /* 137 */ "LIMIT",
- /* 138 */ "WHERE",
- /* 139 */ "INTO",
- /* 140 */ "NOTHING",
- /* 141 */ "FLOAT",
- /* 142 */ "BLOB",
- /* 143 */ "INTEGER",
- /* 144 */ "VARIABLE",
- /* 145 */ "CASE",
- /* 146 */ "WHEN",
- /* 147 */ "THEN",
- /* 148 */ "ELSE",
- /* 149 */ "INDEX",
- /* 150 */ "ALTER",
- /* 151 */ "ADD",
- /* 152 */ "WINDOW",
- /* 153 */ "OVER",
- /* 154 */ "FILTER",
- /* 155 */ "input",
- /* 156 */ "cmdlist",
- /* 157 */ "ecmd",
- /* 158 */ "cmdx",
- /* 159 */ "explain",
- /* 160 */ "cmd",
- /* 161 */ "transtype",
- /* 162 */ "trans_opt",
- /* 163 */ "nm",
- /* 164 */ "savepoint_opt",
- /* 165 */ "create_table",
- /* 166 */ "create_table_args",
- /* 167 */ "createkw",
- /* 168 */ "temp",
- /* 169 */ "ifnotexists",
- /* 170 */ "dbnm",
- /* 171 */ "columnlist",
- /* 172 */ "conslist_opt",
- /* 173 */ "table_options",
- /* 174 */ "select",
- /* 175 */ "columnname",
- /* 176 */ "carglist",
- /* 177 */ "typetoken",
- /* 178 */ "typename",
- /* 179 */ "signed",
- /* 180 */ "plus_num",
- /* 181 */ "minus_num",
- /* 182 */ "scanpt",
- /* 183 */ "ccons",
- /* 184 */ "term",
- /* 185 */ "expr",
- /* 186 */ "onconf",
- /* 187 */ "sortorder",
- /* 188 */ "autoinc",
- /* 189 */ "eidlist_opt",
- /* 190 */ "refargs",
- /* 191 */ "defer_subclause",
- /* 192 */ "refarg",
- /* 193 */ "refact",
- /* 194 */ "init_deferred_pred_opt",
- /* 195 */ "conslist",
- /* 196 */ "tconscomma",
- /* 197 */ "tcons",
- /* 198 */ "sortlist",
- /* 199 */ "eidlist",
- /* 200 */ "defer_subclause_opt",
- /* 201 */ "orconf",
- /* 202 */ "resolvetype",
- /* 203 */ "raisetype",
- /* 204 */ "ifexists",
- /* 205 */ "fullname",
- /* 206 */ "selectnowith",
- /* 207 */ "oneselect",
- /* 208 */ "wqlist",
- /* 209 */ "multiselect_op",
- /* 210 */ "distinct",
- /* 211 */ "selcollist",
- /* 212 */ "from",
- /* 213 */ "where_opt",
- /* 214 */ "groupby_opt",
- /* 215 */ "having_opt",
- /* 216 */ "orderby_opt",
- /* 217 */ "limit_opt",
- /* 218 */ "window_clause",
- /* 219 */ "values",
- /* 220 */ "nexprlist",
- /* 221 */ "sclp",
- /* 222 */ "as",
- /* 223 */ "seltablist",
- /* 224 */ "stl_prefix",
- /* 225 */ "joinop",
- /* 226 */ "indexed_opt",
- /* 227 */ "on_opt",
- /* 228 */ "using_opt",
- /* 229 */ "exprlist",
- /* 230 */ "xfullname",
- /* 231 */ "idlist",
- /* 232 */ "with",
- /* 233 */ "setlist",
- /* 234 */ "insert_cmd",
- /* 235 */ "idlist_opt",
- /* 236 */ "upsert",
- /* 237 */ "over_clause",
- /* 238 */ "likeop",
- /* 239 */ "between_op",
- /* 240 */ "in_op",
- /* 241 */ "paren_exprlist",
- /* 242 */ "case_operand",
- /* 243 */ "case_exprlist",
- /* 244 */ "case_else",
- /* 245 */ "uniqueflag",
- /* 246 */ "collate",
- /* 247 */ "vinto",
- /* 248 */ "nmnum",
- /* 249 */ "trigger_decl",
- /* 250 */ "trigger_cmd_list",
- /* 251 */ "trigger_time",
- /* 252 */ "trigger_event",
- /* 253 */ "foreach_clause",
- /* 254 */ "when_clause",
- /* 255 */ "trigger_cmd",
- /* 256 */ "trnm",
- /* 257 */ "tridxby",
- /* 258 */ "database_kw_opt",
- /* 259 */ "key_opt",
- /* 260 */ "add_column_fullname",
- /* 261 */ "kwcolumn_opt",
- /* 262 */ "create_vtab",
- /* 263 */ "vtabarglist",
- /* 264 */ "vtabarg",
- /* 265 */ "vtabargtoken",
- /* 266 */ "lp",
- /* 267 */ "anylist",
- /* 268 */ "windowdefn_list",
- /* 269 */ "windowdefn",
- /* 270 */ "window",
- /* 271 */ "frame_opt",
- /* 272 */ "part_opt",
- /* 273 */ "filter_opt",
- /* 274 */ "range_or_rows",
- /* 275 */ "frame_bound",
- /* 276 */ "frame_bound_s",
- /* 277 */ "frame_bound_e",
+ /* 88 */ "EXCLUDE",
+ /* 89 */ "GROUPS",
+ /* 90 */ "OTHERS",
+ /* 91 */ "TIES",
+ /* 92 */ "REINDEX",
+ /* 93 */ "RENAME",
+ /* 94 */ "CTIME_KW",
+ /* 95 */ "ANY",
+ /* 96 */ "BITAND",
+ /* 97 */ "BITOR",
+ /* 98 */ "LSHIFT",
+ /* 99 */ "RSHIFT",
+ /* 100 */ "PLUS",
+ /* 101 */ "MINUS",
+ /* 102 */ "STAR",
+ /* 103 */ "SLASH",
+ /* 104 */ "REM",
+ /* 105 */ "CONCAT",
+ /* 106 */ "COLLATE",
+ /* 107 */ "BITNOT",
+ /* 108 */ "ON",
+ /* 109 */ "INDEXED",
+ /* 110 */ "STRING",
+ /* 111 */ "JOIN_KW",
+ /* 112 */ "CONSTRAINT",
+ /* 113 */ "DEFAULT",
+ /* 114 */ "NULL",
+ /* 115 */ "PRIMARY",
+ /* 116 */ "UNIQUE",
+ /* 117 */ "CHECK",
+ /* 118 */ "REFERENCES",
+ /* 119 */ "AUTOINCR",
+ /* 120 */ "INSERT",
+ /* 121 */ "DELETE",
+ /* 122 */ "UPDATE",
+ /* 123 */ "SET",
+ /* 124 */ "DEFERRABLE",
+ /* 125 */ "FOREIGN",
+ /* 126 */ "DROP",
+ /* 127 */ "UNION",
+ /* 128 */ "ALL",
+ /* 129 */ "EXCEPT",
+ /* 130 */ "INTERSECT",
+ /* 131 */ "SELECT",
+ /* 132 */ "VALUES",
+ /* 133 */ "DISTINCT",
+ /* 134 */ "DOT",
+ /* 135 */ "FROM",
+ /* 136 */ "JOIN",
+ /* 137 */ "USING",
+ /* 138 */ "ORDER",
+ /* 139 */ "GROUP",
+ /* 140 */ "HAVING",
+ /* 141 */ "LIMIT",
+ /* 142 */ "WHERE",
+ /* 143 */ "INTO",
+ /* 144 */ "NOTHING",
+ /* 145 */ "FLOAT",
+ /* 146 */ "BLOB",
+ /* 147 */ "INTEGER",
+ /* 148 */ "VARIABLE",
+ /* 149 */ "CASE",
+ /* 150 */ "WHEN",
+ /* 151 */ "THEN",
+ /* 152 */ "ELSE",
+ /* 153 */ "INDEX",
+ /* 154 */ "ALTER",
+ /* 155 */ "ADD",
+ /* 156 */ "WINDOW",
+ /* 157 */ "OVER",
+ /* 158 */ "FILTER",
+ /* 159 */ "TRUEFALSE",
+ /* 160 */ "ISNOT",
+ /* 161 */ "FUNCTION",
+ /* 162 */ "COLUMN",
+ /* 163 */ "AGG_FUNCTION",
+ /* 164 */ "AGG_COLUMN",
+ /* 165 */ "UMINUS",
+ /* 166 */ "UPLUS",
+ /* 167 */ "TRUTH",
+ /* 168 */ "REGISTER",
+ /* 169 */ "VECTOR",
+ /* 170 */ "SELECT_COLUMN",
+ /* 171 */ "IF_NULL_ROW",
+ /* 172 */ "ASTERISK",
+ /* 173 */ "SPAN",
+ /* 174 */ "SPACE",
+ /* 175 */ "ILLEGAL",
+ /* 176 */ "input",
+ /* 177 */ "cmdlist",
+ /* 178 */ "ecmd",
+ /* 179 */ "cmdx",
+ /* 180 */ "explain",
+ /* 181 */ "cmd",
+ /* 182 */ "transtype",
+ /* 183 */ "trans_opt",
+ /* 184 */ "nm",
+ /* 185 */ "savepoint_opt",
+ /* 186 */ "create_table",
+ /* 187 */ "create_table_args",
+ /* 188 */ "createkw",
+ /* 189 */ "temp",
+ /* 190 */ "ifnotexists",
+ /* 191 */ "dbnm",
+ /* 192 */ "columnlist",
+ /* 193 */ "conslist_opt",
+ /* 194 */ "table_options",
+ /* 195 */ "select",
+ /* 196 */ "columnname",
+ /* 197 */ "carglist",
+ /* 198 */ "typetoken",
+ /* 199 */ "typename",
+ /* 200 */ "signed",
+ /* 201 */ "plus_num",
+ /* 202 */ "minus_num",
+ /* 203 */ "scanpt",
+ /* 204 */ "scantok",
+ /* 205 */ "ccons",
+ /* 206 */ "term",
+ /* 207 */ "expr",
+ /* 208 */ "onconf",
+ /* 209 */ "sortorder",
+ /* 210 */ "autoinc",
+ /* 211 */ "eidlist_opt",
+ /* 212 */ "refargs",
+ /* 213 */ "defer_subclause",
+ /* 214 */ "refarg",
+ /* 215 */ "refact",
+ /* 216 */ "init_deferred_pred_opt",
+ /* 217 */ "conslist",
+ /* 218 */ "tconscomma",
+ /* 219 */ "tcons",
+ /* 220 */ "sortlist",
+ /* 221 */ "eidlist",
+ /* 222 */ "defer_subclause_opt",
+ /* 223 */ "orconf",
+ /* 224 */ "resolvetype",
+ /* 225 */ "raisetype",
+ /* 226 */ "ifexists",
+ /* 227 */ "fullname",
+ /* 228 */ "selectnowith",
+ /* 229 */ "oneselect",
+ /* 230 */ "wqlist",
+ /* 231 */ "multiselect_op",
+ /* 232 */ "distinct",
+ /* 233 */ "selcollist",
+ /* 234 */ "from",
+ /* 235 */ "where_opt",
+ /* 236 */ "groupby_opt",
+ /* 237 */ "having_opt",
+ /* 238 */ "orderby_opt",
+ /* 239 */ "limit_opt",
+ /* 240 */ "window_clause",
+ /* 241 */ "values",
+ /* 242 */ "nexprlist",
+ /* 243 */ "sclp",
+ /* 244 */ "as",
+ /* 245 */ "seltablist",
+ /* 246 */ "stl_prefix",
+ /* 247 */ "joinop",
+ /* 248 */ "indexed_opt",
+ /* 249 */ "on_opt",
+ /* 250 */ "using_opt",
+ /* 251 */ "exprlist",
+ /* 252 */ "xfullname",
+ /* 253 */ "idlist",
+ /* 254 */ "with",
+ /* 255 */ "setlist",
+ /* 256 */ "insert_cmd",
+ /* 257 */ "idlist_opt",
+ /* 258 */ "upsert",
+ /* 259 */ "over_clause",
+ /* 260 */ "likeop",
+ /* 261 */ "between_op",
+ /* 262 */ "in_op",
+ /* 263 */ "paren_exprlist",
+ /* 264 */ "case_operand",
+ /* 265 */ "case_exprlist",
+ /* 266 */ "case_else",
+ /* 267 */ "uniqueflag",
+ /* 268 */ "collate",
+ /* 269 */ "vinto",
+ /* 270 */ "nmnum",
+ /* 271 */ "trigger_decl",
+ /* 272 */ "trigger_cmd_list",
+ /* 273 */ "trigger_time",
+ /* 274 */ "trigger_event",
+ /* 275 */ "foreach_clause",
+ /* 276 */ "when_clause",
+ /* 277 */ "trigger_cmd",
+ /* 278 */ "trnm",
+ /* 279 */ "tridxby",
+ /* 280 */ "database_kw_opt",
+ /* 281 */ "key_opt",
+ /* 282 */ "add_column_fullname",
+ /* 283 */ "kwcolumn_opt",
+ /* 284 */ "create_vtab",
+ /* 285 */ "vtabarglist",
+ /* 286 */ "vtabarg",
+ /* 287 */ "vtabargtoken",
+ /* 288 */ "lp",
+ /* 289 */ "anylist",
+ /* 290 */ "windowdefn_list",
+ /* 291 */ "windowdefn",
+ /* 292 */ "window",
+ /* 293 */ "frame_opt",
+ /* 294 */ "part_opt",
+ /* 295 */ "filter_opt",
+ /* 296 */ "range_or_rows",
+ /* 297 */ "frame_bound",
+ /* 298 */ "frame_bound_s",
+ /* 299 */ "frame_bound_e",
+ /* 300 */ "frame_exclude_opt",
+ /* 301 */ "frame_exclude",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
@@ -148738,346 +150189,353 @@ static const char *const yyRuleName[] = {
/* 26 */ "typetoken ::= typename LP signed COMMA signed RP",
/* 27 */ "typename ::= typename ID|STRING",
/* 28 */ "scanpt ::=",
- /* 29 */ "ccons ::= CONSTRAINT nm",
- /* 30 */ "ccons ::= DEFAULT scanpt term scanpt",
- /* 31 */ "ccons ::= DEFAULT LP expr RP",
- /* 32 */ "ccons ::= DEFAULT PLUS term scanpt",
- /* 33 */ "ccons ::= DEFAULT MINUS term scanpt",
- /* 34 */ "ccons ::= DEFAULT scanpt ID|INDEXED",
- /* 35 */ "ccons ::= NOT NULL onconf",
- /* 36 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
- /* 37 */ "ccons ::= UNIQUE onconf",
- /* 38 */ "ccons ::= CHECK LP expr RP",
- /* 39 */ "ccons ::= REFERENCES nm eidlist_opt refargs",
- /* 40 */ "ccons ::= defer_subclause",
- /* 41 */ "ccons ::= COLLATE ID|STRING",
- /* 42 */ "autoinc ::=",
- /* 43 */ "autoinc ::= AUTOINCR",
- /* 44 */ "refargs ::=",
- /* 45 */ "refargs ::= refargs refarg",
- /* 46 */ "refarg ::= MATCH nm",
- /* 47 */ "refarg ::= ON INSERT refact",
- /* 48 */ "refarg ::= ON DELETE refact",
- /* 49 */ "refarg ::= ON UPDATE refact",
- /* 50 */ "refact ::= SET NULL",
- /* 51 */ "refact ::= SET DEFAULT",
- /* 52 */ "refact ::= CASCADE",
- /* 53 */ "refact ::= RESTRICT",
- /* 54 */ "refact ::= NO ACTION",
- /* 55 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
- /* 56 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
- /* 57 */ "init_deferred_pred_opt ::=",
- /* 58 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
- /* 59 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
- /* 60 */ "conslist_opt ::=",
- /* 61 */ "tconscomma ::= COMMA",
- /* 62 */ "tcons ::= CONSTRAINT nm",
- /* 63 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf",
- /* 64 */ "tcons ::= UNIQUE LP sortlist RP onconf",
- /* 65 */ "tcons ::= CHECK LP expr RP onconf",
- /* 66 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt",
- /* 67 */ "defer_subclause_opt ::=",
- /* 68 */ "onconf ::=",
- /* 69 */ "onconf ::= ON CONFLICT resolvetype",
- /* 70 */ "orconf ::=",
- /* 71 */ "orconf ::= OR resolvetype",
- /* 72 */ "resolvetype ::= IGNORE",
- /* 73 */ "resolvetype ::= REPLACE",
- /* 74 */ "cmd ::= DROP TABLE ifexists fullname",
- /* 75 */ "ifexists ::= IF EXISTS",
- /* 76 */ "ifexists ::=",
- /* 77 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select",
- /* 78 */ "cmd ::= DROP VIEW ifexists fullname",
- /* 79 */ "cmd ::= select",
- /* 80 */ "select ::= WITH wqlist selectnowith",
- /* 81 */ "select ::= WITH RECURSIVE wqlist selectnowith",
- /* 82 */ "select ::= selectnowith",
- /* 83 */ "selectnowith ::= selectnowith multiselect_op oneselect",
- /* 84 */ "multiselect_op ::= UNION",
- /* 85 */ "multiselect_op ::= UNION ALL",
- /* 86 */ "multiselect_op ::= EXCEPT|INTERSECT",
- /* 87 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
- /* 88 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt",
- /* 89 */ "values ::= VALUES LP nexprlist RP",
- /* 90 */ "values ::= values COMMA LP nexprlist RP",
- /* 91 */ "distinct ::= DISTINCT",
- /* 92 */ "distinct ::= ALL",
- /* 93 */ "distinct ::=",
- /* 94 */ "sclp ::=",
- /* 95 */ "selcollist ::= sclp scanpt expr scanpt as",
- /* 96 */ "selcollist ::= sclp scanpt STAR",
- /* 97 */ "selcollist ::= sclp scanpt nm DOT STAR",
- /* 98 */ "as ::= AS nm",
- /* 99 */ "as ::=",
- /* 100 */ "from ::=",
- /* 101 */ "from ::= FROM seltablist",
- /* 102 */ "stl_prefix ::= seltablist joinop",
- /* 103 */ "stl_prefix ::=",
- /* 104 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt",
- /* 105 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt",
- /* 106 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt",
- /* 107 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
- /* 108 */ "dbnm ::=",
- /* 109 */ "dbnm ::= DOT nm",
- /* 110 */ "fullname ::= nm",
- /* 111 */ "fullname ::= nm DOT nm",
- /* 112 */ "xfullname ::= nm",
- /* 113 */ "xfullname ::= nm DOT nm",
- /* 114 */ "xfullname ::= nm DOT nm AS nm",
- /* 115 */ "xfullname ::= nm AS nm",
- /* 116 */ "joinop ::= COMMA|JOIN",
- /* 117 */ "joinop ::= JOIN_KW JOIN",
- /* 118 */ "joinop ::= JOIN_KW nm JOIN",
- /* 119 */ "joinop ::= JOIN_KW nm nm JOIN",
- /* 120 */ "on_opt ::= ON expr",
- /* 121 */ "on_opt ::=",
- /* 122 */ "indexed_opt ::=",
- /* 123 */ "indexed_opt ::= INDEXED BY nm",
- /* 124 */ "indexed_opt ::= NOT INDEXED",
- /* 125 */ "using_opt ::= USING LP idlist RP",
- /* 126 */ "using_opt ::=",
- /* 127 */ "orderby_opt ::=",
- /* 128 */ "orderby_opt ::= ORDER BY sortlist",
- /* 129 */ "sortlist ::= sortlist COMMA expr sortorder",
- /* 130 */ "sortlist ::= expr sortorder",
- /* 131 */ "sortorder ::= ASC",
- /* 132 */ "sortorder ::= DESC",
- /* 133 */ "sortorder ::=",
- /* 134 */ "groupby_opt ::=",
- /* 135 */ "groupby_opt ::= GROUP BY nexprlist",
- /* 136 */ "having_opt ::=",
- /* 137 */ "having_opt ::= HAVING expr",
- /* 138 */ "limit_opt ::=",
- /* 139 */ "limit_opt ::= LIMIT expr",
- /* 140 */ "limit_opt ::= LIMIT expr OFFSET expr",
- /* 141 */ "limit_opt ::= LIMIT expr COMMA expr",
- /* 142 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt",
- /* 143 */ "where_opt ::=",
- /* 144 */ "where_opt ::= WHERE expr",
- /* 145 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt",
- /* 146 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 147 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
- /* 148 */ "setlist ::= nm EQ expr",
- /* 149 */ "setlist ::= LP idlist RP EQ expr",
- /* 150 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert",
- /* 151 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES",
- /* 152 */ "upsert ::=",
- /* 153 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt",
- /* 154 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING",
- /* 155 */ "upsert ::= ON CONFLICT DO NOTHING",
- /* 156 */ "insert_cmd ::= INSERT orconf",
- /* 157 */ "insert_cmd ::= REPLACE",
- /* 158 */ "idlist_opt ::=",
- /* 159 */ "idlist_opt ::= LP idlist RP",
- /* 160 */ "idlist ::= idlist COMMA nm",
- /* 161 */ "idlist ::= nm",
- /* 162 */ "expr ::= LP expr RP",
- /* 163 */ "expr ::= ID|INDEXED",
- /* 164 */ "expr ::= JOIN_KW",
- /* 165 */ "expr ::= nm DOT nm",
- /* 166 */ "expr ::= nm DOT nm DOT nm",
- /* 167 */ "term ::= NULL|FLOAT|BLOB",
- /* 168 */ "term ::= STRING",
- /* 169 */ "term ::= INTEGER",
- /* 170 */ "expr ::= VARIABLE",
- /* 171 */ "expr ::= expr COLLATE ID|STRING",
- /* 172 */ "expr ::= CAST LP expr AS typetoken RP",
- /* 173 */ "expr ::= ID|INDEXED LP distinct exprlist RP",
- /* 174 */ "expr ::= ID|INDEXED LP STAR RP",
- /* 175 */ "expr ::= ID|INDEXED LP distinct exprlist RP over_clause",
- /* 176 */ "expr ::= ID|INDEXED LP STAR RP over_clause",
- /* 177 */ "term ::= CTIME_KW",
- /* 178 */ "expr ::= LP nexprlist COMMA expr RP",
- /* 179 */ "expr ::= expr AND expr",
- /* 180 */ "expr ::= expr OR expr",
- /* 181 */ "expr ::= expr LT|GT|GE|LE expr",
- /* 182 */ "expr ::= expr EQ|NE expr",
- /* 183 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
- /* 184 */ "expr ::= expr PLUS|MINUS expr",
- /* 185 */ "expr ::= expr STAR|SLASH|REM expr",
- /* 186 */ "expr ::= expr CONCAT expr",
- /* 187 */ "likeop ::= NOT LIKE_KW|MATCH",
- /* 188 */ "expr ::= expr likeop expr",
- /* 189 */ "expr ::= expr likeop expr ESCAPE expr",
- /* 190 */ "expr ::= expr ISNULL|NOTNULL",
- /* 191 */ "expr ::= expr NOT NULL",
- /* 192 */ "expr ::= expr IS expr",
- /* 193 */ "expr ::= expr IS NOT expr",
- /* 194 */ "expr ::= NOT expr",
- /* 195 */ "expr ::= BITNOT expr",
- /* 196 */ "expr ::= PLUS|MINUS expr",
- /* 197 */ "between_op ::= BETWEEN",
- /* 198 */ "between_op ::= NOT BETWEEN",
- /* 199 */ "expr ::= expr between_op expr AND expr",
- /* 200 */ "in_op ::= IN",
- /* 201 */ "in_op ::= NOT IN",
- /* 202 */ "expr ::= expr in_op LP exprlist RP",
- /* 203 */ "expr ::= LP select RP",
- /* 204 */ "expr ::= expr in_op LP select RP",
- /* 205 */ "expr ::= expr in_op nm dbnm paren_exprlist",
- /* 206 */ "expr ::= EXISTS LP select RP",
- /* 207 */ "expr ::= CASE case_operand case_exprlist case_else END",
- /* 208 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 209 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 210 */ "case_else ::= ELSE expr",
- /* 211 */ "case_else ::=",
- /* 212 */ "case_operand ::= expr",
- /* 213 */ "case_operand ::=",
- /* 214 */ "exprlist ::=",
- /* 215 */ "nexprlist ::= nexprlist COMMA expr",
- /* 216 */ "nexprlist ::= expr",
- /* 217 */ "paren_exprlist ::=",
- /* 218 */ "paren_exprlist ::= LP exprlist RP",
- /* 219 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
- /* 220 */ "uniqueflag ::= UNIQUE",
- /* 221 */ "uniqueflag ::=",
- /* 222 */ "eidlist_opt ::=",
- /* 223 */ "eidlist_opt ::= LP eidlist RP",
- /* 224 */ "eidlist ::= eidlist COMMA nm collate sortorder",
- /* 225 */ "eidlist ::= nm collate sortorder",
- /* 226 */ "collate ::=",
- /* 227 */ "collate ::= COLLATE ID|STRING",
- /* 228 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 229 */ "cmd ::= VACUUM vinto",
- /* 230 */ "cmd ::= VACUUM nm vinto",
- /* 231 */ "vinto ::= INTO expr",
- /* 232 */ "vinto ::=",
- /* 233 */ "cmd ::= PRAGMA nm dbnm",
- /* 234 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 235 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 236 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 237 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
- /* 238 */ "plus_num ::= PLUS INTEGER|FLOAT",
- /* 239 */ "minus_num ::= MINUS INTEGER|FLOAT",
- /* 240 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
- /* 241 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
- /* 242 */ "trigger_time ::= BEFORE|AFTER",
- /* 243 */ "trigger_time ::= INSTEAD OF",
- /* 244 */ "trigger_time ::=",
- /* 245 */ "trigger_event ::= DELETE|INSERT",
- /* 246 */ "trigger_event ::= UPDATE",
- /* 247 */ "trigger_event ::= UPDATE OF idlist",
- /* 248 */ "when_clause ::=",
- /* 249 */ "when_clause ::= WHEN expr",
- /* 250 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 251 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 252 */ "trnm ::= nm DOT nm",
- /* 253 */ "tridxby ::= INDEXED BY nm",
- /* 254 */ "tridxby ::= NOT INDEXED",
- /* 255 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt",
- /* 256 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt",
- /* 257 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
- /* 258 */ "trigger_cmd ::= scanpt select scanpt",
- /* 259 */ "expr ::= RAISE LP IGNORE RP",
- /* 260 */ "expr ::= RAISE LP raisetype COMMA nm RP",
- /* 261 */ "raisetype ::= ROLLBACK",
- /* 262 */ "raisetype ::= ABORT",
- /* 263 */ "raisetype ::= FAIL",
- /* 264 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 265 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 266 */ "cmd ::= DETACH database_kw_opt expr",
- /* 267 */ "key_opt ::=",
- /* 268 */ "key_opt ::= KEY expr",
- /* 269 */ "cmd ::= REINDEX",
- /* 270 */ "cmd ::= REINDEX nm dbnm",
- /* 271 */ "cmd ::= ANALYZE",
- /* 272 */ "cmd ::= ANALYZE nm dbnm",
- /* 273 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 274 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
- /* 275 */ "add_column_fullname ::= fullname",
- /* 276 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm",
- /* 277 */ "cmd ::= create_vtab",
- /* 278 */ "cmd ::= create_vtab LP vtabarglist RP",
- /* 279 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
- /* 280 */ "vtabarg ::=",
- /* 281 */ "vtabargtoken ::= ANY",
- /* 282 */ "vtabargtoken ::= lp anylist RP",
- /* 283 */ "lp ::= LP",
- /* 284 */ "with ::= WITH wqlist",
- /* 285 */ "with ::= WITH RECURSIVE wqlist",
- /* 286 */ "wqlist ::= nm eidlist_opt AS LP select RP",
- /* 287 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
- /* 288 */ "windowdefn_list ::= windowdefn",
- /* 289 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
- /* 290 */ "windowdefn ::= nm AS window",
- /* 291 */ "window ::= LP part_opt orderby_opt frame_opt RP",
- /* 292 */ "part_opt ::= PARTITION BY nexprlist",
- /* 293 */ "part_opt ::=",
- /* 294 */ "frame_opt ::=",
- /* 295 */ "frame_opt ::= range_or_rows frame_bound_s",
- /* 296 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e",
- /* 297 */ "range_or_rows ::= RANGE",
- /* 298 */ "range_or_rows ::= ROWS",
- /* 299 */ "frame_bound_s ::= frame_bound",
- /* 300 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
- /* 301 */ "frame_bound_e ::= frame_bound",
- /* 302 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
- /* 303 */ "frame_bound ::= expr PRECEDING",
- /* 304 */ "frame_bound ::= CURRENT ROW",
- /* 305 */ "frame_bound ::= expr FOLLOWING",
- /* 306 */ "window_clause ::= WINDOW windowdefn_list",
- /* 307 */ "over_clause ::= filter_opt OVER window",
- /* 308 */ "over_clause ::= filter_opt OVER nm",
- /* 309 */ "filter_opt ::=",
- /* 310 */ "filter_opt ::= FILTER LP WHERE expr RP",
- /* 311 */ "input ::= cmdlist",
- /* 312 */ "cmdlist ::= cmdlist ecmd",
- /* 313 */ "cmdlist ::= ecmd",
- /* 314 */ "ecmd ::= SEMI",
- /* 315 */ "ecmd ::= cmdx SEMI",
- /* 316 */ "ecmd ::= explain cmdx",
- /* 317 */ "trans_opt ::=",
- /* 318 */ "trans_opt ::= TRANSACTION",
- /* 319 */ "trans_opt ::= TRANSACTION nm",
- /* 320 */ "savepoint_opt ::= SAVEPOINT",
- /* 321 */ "savepoint_opt ::=",
- /* 322 */ "cmd ::= create_table create_table_args",
- /* 323 */ "columnlist ::= columnlist COMMA columnname carglist",
- /* 324 */ "columnlist ::= columnname carglist",
- /* 325 */ "nm ::= ID|INDEXED",
- /* 326 */ "nm ::= STRING",
- /* 327 */ "nm ::= JOIN_KW",
- /* 328 */ "typetoken ::= typename",
- /* 329 */ "typename ::= ID|STRING",
- /* 330 */ "signed ::= plus_num",
- /* 331 */ "signed ::= minus_num",
- /* 332 */ "carglist ::= carglist ccons",
- /* 333 */ "carglist ::=",
- /* 334 */ "ccons ::= NULL onconf",
- /* 335 */ "conslist_opt ::= COMMA conslist",
- /* 336 */ "conslist ::= conslist tconscomma tcons",
- /* 337 */ "conslist ::= tcons",
- /* 338 */ "tconscomma ::=",
- /* 339 */ "defer_subclause_opt ::= defer_subclause",
- /* 340 */ "resolvetype ::= raisetype",
- /* 341 */ "selectnowith ::= oneselect",
- /* 342 */ "oneselect ::= values",
- /* 343 */ "sclp ::= selcollist COMMA",
- /* 344 */ "as ::= ID|STRING",
- /* 345 */ "expr ::= term",
- /* 346 */ "likeop ::= LIKE_KW|MATCH",
- /* 347 */ "exprlist ::= nexprlist",
- /* 348 */ "nmnum ::= plus_num",
- /* 349 */ "nmnum ::= nm",
- /* 350 */ "nmnum ::= ON",
- /* 351 */ "nmnum ::= DELETE",
- /* 352 */ "nmnum ::= DEFAULT",
- /* 353 */ "plus_num ::= INTEGER|FLOAT",
- /* 354 */ "foreach_clause ::=",
- /* 355 */ "foreach_clause ::= FOR EACH ROW",
- /* 356 */ "trnm ::= nm",
- /* 357 */ "tridxby ::=",
- /* 358 */ "database_kw_opt ::= DATABASE",
- /* 359 */ "database_kw_opt ::=",
- /* 360 */ "kwcolumn_opt ::=",
- /* 361 */ "kwcolumn_opt ::= COLUMNKW",
- /* 362 */ "vtabarglist ::= vtabarg",
- /* 363 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 364 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 365 */ "anylist ::=",
- /* 366 */ "anylist ::= anylist LP anylist RP",
- /* 367 */ "anylist ::= anylist ANY",
- /* 368 */ "with ::=",
+ /* 29 */ "scantok ::=",
+ /* 30 */ "ccons ::= CONSTRAINT nm",
+ /* 31 */ "ccons ::= DEFAULT scantok term",
+ /* 32 */ "ccons ::= DEFAULT LP expr RP",
+ /* 33 */ "ccons ::= DEFAULT PLUS scantok term",
+ /* 34 */ "ccons ::= DEFAULT MINUS scantok term",
+ /* 35 */ "ccons ::= DEFAULT scantok ID|INDEXED",
+ /* 36 */ "ccons ::= NOT NULL onconf",
+ /* 37 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
+ /* 38 */ "ccons ::= UNIQUE onconf",
+ /* 39 */ "ccons ::= CHECK LP expr RP",
+ /* 40 */ "ccons ::= REFERENCES nm eidlist_opt refargs",
+ /* 41 */ "ccons ::= defer_subclause",
+ /* 42 */ "ccons ::= COLLATE ID|STRING",
+ /* 43 */ "autoinc ::=",
+ /* 44 */ "autoinc ::= AUTOINCR",
+ /* 45 */ "refargs ::=",
+ /* 46 */ "refargs ::= refargs refarg",
+ /* 47 */ "refarg ::= MATCH nm",
+ /* 48 */ "refarg ::= ON INSERT refact",
+ /* 49 */ "refarg ::= ON DELETE refact",
+ /* 50 */ "refarg ::= ON UPDATE refact",
+ /* 51 */ "refact ::= SET NULL",
+ /* 52 */ "refact ::= SET DEFAULT",
+ /* 53 */ "refact ::= CASCADE",
+ /* 54 */ "refact ::= RESTRICT",
+ /* 55 */ "refact ::= NO ACTION",
+ /* 56 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
+ /* 57 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
+ /* 58 */ "init_deferred_pred_opt ::=",
+ /* 59 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
+ /* 60 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
+ /* 61 */ "conslist_opt ::=",
+ /* 62 */ "tconscomma ::= COMMA",
+ /* 63 */ "tcons ::= CONSTRAINT nm",
+ /* 64 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf",
+ /* 65 */ "tcons ::= UNIQUE LP sortlist RP onconf",
+ /* 66 */ "tcons ::= CHECK LP expr RP onconf",
+ /* 67 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt",
+ /* 68 */ "defer_subclause_opt ::=",
+ /* 69 */ "onconf ::=",
+ /* 70 */ "onconf ::= ON CONFLICT resolvetype",
+ /* 71 */ "orconf ::=",
+ /* 72 */ "orconf ::= OR resolvetype",
+ /* 73 */ "resolvetype ::= IGNORE",
+ /* 74 */ "resolvetype ::= REPLACE",
+ /* 75 */ "cmd ::= DROP TABLE ifexists fullname",
+ /* 76 */ "ifexists ::= IF EXISTS",
+ /* 77 */ "ifexists ::=",
+ /* 78 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select",
+ /* 79 */ "cmd ::= DROP VIEW ifexists fullname",
+ /* 80 */ "cmd ::= select",
+ /* 81 */ "select ::= WITH wqlist selectnowith",
+ /* 82 */ "select ::= WITH RECURSIVE wqlist selectnowith",
+ /* 83 */ "select ::= selectnowith",
+ /* 84 */ "selectnowith ::= selectnowith multiselect_op oneselect",
+ /* 85 */ "multiselect_op ::= UNION",
+ /* 86 */ "multiselect_op ::= UNION ALL",
+ /* 87 */ "multiselect_op ::= EXCEPT|INTERSECT",
+ /* 88 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
+ /* 89 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt",
+ /* 90 */ "values ::= VALUES LP nexprlist RP",
+ /* 91 */ "values ::= values COMMA LP nexprlist RP",
+ /* 92 */ "distinct ::= DISTINCT",
+ /* 93 */ "distinct ::= ALL",
+ /* 94 */ "distinct ::=",
+ /* 95 */ "sclp ::=",
+ /* 96 */ "selcollist ::= sclp scanpt expr scanpt as",
+ /* 97 */ "selcollist ::= sclp scanpt STAR",
+ /* 98 */ "selcollist ::= sclp scanpt nm DOT STAR",
+ /* 99 */ "as ::= AS nm",
+ /* 100 */ "as ::=",
+ /* 101 */ "from ::=",
+ /* 102 */ "from ::= FROM seltablist",
+ /* 103 */ "stl_prefix ::= seltablist joinop",
+ /* 104 */ "stl_prefix ::=",
+ /* 105 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt",
+ /* 106 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt",
+ /* 107 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt",
+ /* 108 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
+ /* 109 */ "dbnm ::=",
+ /* 110 */ "dbnm ::= DOT nm",
+ /* 111 */ "fullname ::= nm",
+ /* 112 */ "fullname ::= nm DOT nm",
+ /* 113 */ "xfullname ::= nm",
+ /* 114 */ "xfullname ::= nm DOT nm",
+ /* 115 */ "xfullname ::= nm DOT nm AS nm",
+ /* 116 */ "xfullname ::= nm AS nm",
+ /* 117 */ "joinop ::= COMMA|JOIN",
+ /* 118 */ "joinop ::= JOIN_KW JOIN",
+ /* 119 */ "joinop ::= JOIN_KW nm JOIN",
+ /* 120 */ "joinop ::= JOIN_KW nm nm JOIN",
+ /* 121 */ "on_opt ::= ON expr",
+ /* 122 */ "on_opt ::=",
+ /* 123 */ "indexed_opt ::=",
+ /* 124 */ "indexed_opt ::= INDEXED BY nm",
+ /* 125 */ "indexed_opt ::= NOT INDEXED",
+ /* 126 */ "using_opt ::= USING LP idlist RP",
+ /* 127 */ "using_opt ::=",
+ /* 128 */ "orderby_opt ::=",
+ /* 129 */ "orderby_opt ::= ORDER BY sortlist",
+ /* 130 */ "sortlist ::= sortlist COMMA expr sortorder",
+ /* 131 */ "sortlist ::= expr sortorder",
+ /* 132 */ "sortorder ::= ASC",
+ /* 133 */ "sortorder ::= DESC",
+ /* 134 */ "sortorder ::=",
+ /* 135 */ "groupby_opt ::=",
+ /* 136 */ "groupby_opt ::= GROUP BY nexprlist",
+ /* 137 */ "having_opt ::=",
+ /* 138 */ "having_opt ::= HAVING expr",
+ /* 139 */ "limit_opt ::=",
+ /* 140 */ "limit_opt ::= LIMIT expr",
+ /* 141 */ "limit_opt ::= LIMIT expr OFFSET expr",
+ /* 142 */ "limit_opt ::= LIMIT expr COMMA expr",
+ /* 143 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt",
+ /* 144 */ "where_opt ::=",
+ /* 145 */ "where_opt ::= WHERE expr",
+ /* 146 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt",
+ /* 147 */ "setlist ::= setlist COMMA nm EQ expr",
+ /* 148 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
+ /* 149 */ "setlist ::= nm EQ expr",
+ /* 150 */ "setlist ::= LP idlist RP EQ expr",
+ /* 151 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert",
+ /* 152 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES",
+ /* 153 */ "upsert ::=",
+ /* 154 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt",
+ /* 155 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING",
+ /* 156 */ "upsert ::= ON CONFLICT DO NOTHING",
+ /* 157 */ "insert_cmd ::= INSERT orconf",
+ /* 158 */ "insert_cmd ::= REPLACE",
+ /* 159 */ "idlist_opt ::=",
+ /* 160 */ "idlist_opt ::= LP idlist RP",
+ /* 161 */ "idlist ::= idlist COMMA nm",
+ /* 162 */ "idlist ::= nm",
+ /* 163 */ "expr ::= LP expr RP",
+ /* 164 */ "expr ::= ID|INDEXED",
+ /* 165 */ "expr ::= JOIN_KW",
+ /* 166 */ "expr ::= nm DOT nm",
+ /* 167 */ "expr ::= nm DOT nm DOT nm",
+ /* 168 */ "term ::= NULL|FLOAT|BLOB",
+ /* 169 */ "term ::= STRING",
+ /* 170 */ "term ::= INTEGER",
+ /* 171 */ "expr ::= VARIABLE",
+ /* 172 */ "expr ::= expr COLLATE ID|STRING",
+ /* 173 */ "expr ::= CAST LP expr AS typetoken RP",
+ /* 174 */ "expr ::= ID|INDEXED LP distinct exprlist RP",
+ /* 175 */ "expr ::= ID|INDEXED LP STAR RP",
+ /* 176 */ "expr ::= ID|INDEXED LP distinct exprlist RP over_clause",
+ /* 177 */ "expr ::= ID|INDEXED LP STAR RP over_clause",
+ /* 178 */ "term ::= CTIME_KW",
+ /* 179 */ "expr ::= LP nexprlist COMMA expr RP",
+ /* 180 */ "expr ::= expr AND expr",
+ /* 181 */ "expr ::= expr OR expr",
+ /* 182 */ "expr ::= expr LT|GT|GE|LE expr",
+ /* 183 */ "expr ::= expr EQ|NE expr",
+ /* 184 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
+ /* 185 */ "expr ::= expr PLUS|MINUS expr",
+ /* 186 */ "expr ::= expr STAR|SLASH|REM expr",
+ /* 187 */ "expr ::= expr CONCAT expr",
+ /* 188 */ "likeop ::= NOT LIKE_KW|MATCH",
+ /* 189 */ "expr ::= expr likeop expr",
+ /* 190 */ "expr ::= expr likeop expr ESCAPE expr",
+ /* 191 */ "expr ::= expr ISNULL|NOTNULL",
+ /* 192 */ "expr ::= expr NOT NULL",
+ /* 193 */ "expr ::= expr IS expr",
+ /* 194 */ "expr ::= expr IS NOT expr",
+ /* 195 */ "expr ::= NOT expr",
+ /* 196 */ "expr ::= BITNOT expr",
+ /* 197 */ "expr ::= PLUS|MINUS expr",
+ /* 198 */ "between_op ::= BETWEEN",
+ /* 199 */ "between_op ::= NOT BETWEEN",
+ /* 200 */ "expr ::= expr between_op expr AND expr",
+ /* 201 */ "in_op ::= IN",
+ /* 202 */ "in_op ::= NOT IN",
+ /* 203 */ "expr ::= expr in_op LP exprlist RP",
+ /* 204 */ "expr ::= LP select RP",
+ /* 205 */ "expr ::= expr in_op LP select RP",
+ /* 206 */ "expr ::= expr in_op nm dbnm paren_exprlist",
+ /* 207 */ "expr ::= EXISTS LP select RP",
+ /* 208 */ "expr ::= CASE case_operand case_exprlist case_else END",
+ /* 209 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 210 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 211 */ "case_else ::= ELSE expr",
+ /* 212 */ "case_else ::=",
+ /* 213 */ "case_operand ::= expr",
+ /* 214 */ "case_operand ::=",
+ /* 215 */ "exprlist ::=",
+ /* 216 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 217 */ "nexprlist ::= expr",
+ /* 218 */ "paren_exprlist ::=",
+ /* 219 */ "paren_exprlist ::= LP exprlist RP",
+ /* 220 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
+ /* 221 */ "uniqueflag ::= UNIQUE",
+ /* 222 */ "uniqueflag ::=",
+ /* 223 */ "eidlist_opt ::=",
+ /* 224 */ "eidlist_opt ::= LP eidlist RP",
+ /* 225 */ "eidlist ::= eidlist COMMA nm collate sortorder",
+ /* 226 */ "eidlist ::= nm collate sortorder",
+ /* 227 */ "collate ::=",
+ /* 228 */ "collate ::= COLLATE ID|STRING",
+ /* 229 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 230 */ "cmd ::= VACUUM vinto",
+ /* 231 */ "cmd ::= VACUUM nm vinto",
+ /* 232 */ "vinto ::= INTO expr",
+ /* 233 */ "vinto ::=",
+ /* 234 */ "cmd ::= PRAGMA nm dbnm",
+ /* 235 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 236 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 237 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 238 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
+ /* 239 */ "plus_num ::= PLUS INTEGER|FLOAT",
+ /* 240 */ "minus_num ::= MINUS INTEGER|FLOAT",
+ /* 241 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
+ /* 242 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
+ /* 243 */ "trigger_time ::= BEFORE|AFTER",
+ /* 244 */ "trigger_time ::= INSTEAD OF",
+ /* 245 */ "trigger_time ::=",
+ /* 246 */ "trigger_event ::= DELETE|INSERT",
+ /* 247 */ "trigger_event ::= UPDATE",
+ /* 248 */ "trigger_event ::= UPDATE OF idlist",
+ /* 249 */ "when_clause ::=",
+ /* 250 */ "when_clause ::= WHEN expr",
+ /* 251 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 252 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 253 */ "trnm ::= nm DOT nm",
+ /* 254 */ "tridxby ::= INDEXED BY nm",
+ /* 255 */ "tridxby ::= NOT INDEXED",
+ /* 256 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt",
+ /* 257 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt",
+ /* 258 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
+ /* 259 */ "trigger_cmd ::= scanpt select scanpt",
+ /* 260 */ "expr ::= RAISE LP IGNORE RP",
+ /* 261 */ "expr ::= RAISE LP raisetype COMMA nm RP",
+ /* 262 */ "raisetype ::= ROLLBACK",
+ /* 263 */ "raisetype ::= ABORT",
+ /* 264 */ "raisetype ::= FAIL",
+ /* 265 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 266 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 267 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 268 */ "key_opt ::=",
+ /* 269 */ "key_opt ::= KEY expr",
+ /* 270 */ "cmd ::= REINDEX",
+ /* 271 */ "cmd ::= REINDEX nm dbnm",
+ /* 272 */ "cmd ::= ANALYZE",
+ /* 273 */ "cmd ::= ANALYZE nm dbnm",
+ /* 274 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 275 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
+ /* 276 */ "add_column_fullname ::= fullname",
+ /* 277 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm",
+ /* 278 */ "cmd ::= create_vtab",
+ /* 279 */ "cmd ::= create_vtab LP vtabarglist RP",
+ /* 280 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
+ /* 281 */ "vtabarg ::=",
+ /* 282 */ "vtabargtoken ::= ANY",
+ /* 283 */ "vtabargtoken ::= lp anylist RP",
+ /* 284 */ "lp ::= LP",
+ /* 285 */ "with ::= WITH wqlist",
+ /* 286 */ "with ::= WITH RECURSIVE wqlist",
+ /* 287 */ "wqlist ::= nm eidlist_opt AS LP select RP",
+ /* 288 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
+ /* 289 */ "windowdefn_list ::= windowdefn",
+ /* 290 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
+ /* 291 */ "windowdefn ::= nm AS LP window RP",
+ /* 292 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 293 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 294 */ "window ::= ORDER BY sortlist frame_opt",
+ /* 295 */ "window ::= nm ORDER BY sortlist frame_opt",
+ /* 296 */ "window ::= frame_opt",
+ /* 297 */ "window ::= nm frame_opt",
+ /* 298 */ "frame_opt ::=",
+ /* 299 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
+ /* 300 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
+ /* 301 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
+ /* 302 */ "frame_bound_s ::= frame_bound",
+ /* 303 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
+ /* 304 */ "frame_bound_e ::= frame_bound",
+ /* 305 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
+ /* 306 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
+ /* 307 */ "frame_bound ::= CURRENT ROW",
+ /* 308 */ "frame_exclude_opt ::=",
+ /* 309 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
+ /* 310 */ "frame_exclude ::= NO OTHERS",
+ /* 311 */ "frame_exclude ::= CURRENT ROW",
+ /* 312 */ "frame_exclude ::= GROUP|TIES",
+ /* 313 */ "window_clause ::= WINDOW windowdefn_list",
+ /* 314 */ "over_clause ::= filter_opt OVER LP window RP",
+ /* 315 */ "over_clause ::= filter_opt OVER nm",
+ /* 316 */ "filter_opt ::=",
+ /* 317 */ "filter_opt ::= FILTER LP WHERE expr RP",
+ /* 318 */ "input ::= cmdlist",
+ /* 319 */ "cmdlist ::= cmdlist ecmd",
+ /* 320 */ "cmdlist ::= ecmd",
+ /* 321 */ "ecmd ::= SEMI",
+ /* 322 */ "ecmd ::= cmdx SEMI",
+ /* 323 */ "ecmd ::= explain cmdx",
+ /* 324 */ "trans_opt ::=",
+ /* 325 */ "trans_opt ::= TRANSACTION",
+ /* 326 */ "trans_opt ::= TRANSACTION nm",
+ /* 327 */ "savepoint_opt ::= SAVEPOINT",
+ /* 328 */ "savepoint_opt ::=",
+ /* 329 */ "cmd ::= create_table create_table_args",
+ /* 330 */ "columnlist ::= columnlist COMMA columnname carglist",
+ /* 331 */ "columnlist ::= columnname carglist",
+ /* 332 */ "nm ::= ID|INDEXED",
+ /* 333 */ "nm ::= STRING",
+ /* 334 */ "nm ::= JOIN_KW",
+ /* 335 */ "typetoken ::= typename",
+ /* 336 */ "typename ::= ID|STRING",
+ /* 337 */ "signed ::= plus_num",
+ /* 338 */ "signed ::= minus_num",
+ /* 339 */ "carglist ::= carglist ccons",
+ /* 340 */ "carglist ::=",
+ /* 341 */ "ccons ::= NULL onconf",
+ /* 342 */ "conslist_opt ::= COMMA conslist",
+ /* 343 */ "conslist ::= conslist tconscomma tcons",
+ /* 344 */ "conslist ::= tcons",
+ /* 345 */ "tconscomma ::=",
+ /* 346 */ "defer_subclause_opt ::= defer_subclause",
+ /* 347 */ "resolvetype ::= raisetype",
+ /* 348 */ "selectnowith ::= oneselect",
+ /* 349 */ "oneselect ::= values",
+ /* 350 */ "sclp ::= selcollist COMMA",
+ /* 351 */ "as ::= ID|STRING",
+ /* 352 */ "expr ::= term",
+ /* 353 */ "likeop ::= LIKE_KW|MATCH",
+ /* 354 */ "exprlist ::= nexprlist",
+ /* 355 */ "nmnum ::= plus_num",
+ /* 356 */ "nmnum ::= nm",
+ /* 357 */ "nmnum ::= ON",
+ /* 358 */ "nmnum ::= DELETE",
+ /* 359 */ "nmnum ::= DEFAULT",
+ /* 360 */ "plus_num ::= INTEGER|FLOAT",
+ /* 361 */ "foreach_clause ::=",
+ /* 362 */ "foreach_clause ::= FOR EACH ROW",
+ /* 363 */ "trnm ::= nm",
+ /* 364 */ "tridxby ::=",
+ /* 365 */ "database_kw_opt ::= DATABASE",
+ /* 366 */ "database_kw_opt ::=",
+ /* 367 */ "kwcolumn_opt ::=",
+ /* 368 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 369 */ "vtabarglist ::= vtabarg",
+ /* 370 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 371 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 372 */ "anylist ::=",
+ /* 373 */ "anylist ::= anylist LP anylist RP",
+ /* 374 */ "anylist ::= anylist ANY",
+ /* 375 */ "with ::=",
};
#endif /* NDEBUG */
@@ -149203,97 +150661,97 @@ static void yy_destructor(
** inside the C code.
*/
/********* Begin destructor definitions ***************************************/
- case 174: /* select */
- case 206: /* selectnowith */
- case 207: /* oneselect */
- case 219: /* values */
+ case 195: /* select */
+ case 228: /* selectnowith */
+ case 229: /* oneselect */
+ case 241: /* values */
{
-sqlite3SelectDelete(pParse->db, (yypminor->yy423));
+sqlite3SelectDelete(pParse->db, (yypminor->yy391));
}
break;
- case 184: /* term */
- case 185: /* expr */
- case 213: /* where_opt */
- case 215: /* having_opt */
- case 227: /* on_opt */
- case 242: /* case_operand */
- case 244: /* case_else */
- case 247: /* vinto */
- case 254: /* when_clause */
- case 259: /* key_opt */
- case 273: /* filter_opt */
+ case 206: /* term */
+ case 207: /* expr */
+ case 235: /* where_opt */
+ case 237: /* having_opt */
+ case 249: /* on_opt */
+ case 264: /* case_operand */
+ case 266: /* case_else */
+ case 269: /* vinto */
+ case 276: /* when_clause */
+ case 281: /* key_opt */
+ case 295: /* filter_opt */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy490));
+sqlite3ExprDelete(pParse->db, (yypminor->yy102));
}
break;
- case 189: /* eidlist_opt */
- case 198: /* sortlist */
- case 199: /* eidlist */
- case 211: /* selcollist */
- case 214: /* groupby_opt */
- case 216: /* orderby_opt */
- case 220: /* nexprlist */
- case 221: /* sclp */
- case 229: /* exprlist */
- case 233: /* setlist */
- case 241: /* paren_exprlist */
- case 243: /* case_exprlist */
- case 272: /* part_opt */
+ case 211: /* eidlist_opt */
+ case 220: /* sortlist */
+ case 221: /* eidlist */
+ case 233: /* selcollist */
+ case 236: /* groupby_opt */
+ case 238: /* orderby_opt */
+ case 242: /* nexprlist */
+ case 243: /* sclp */
+ case 251: /* exprlist */
+ case 255: /* setlist */
+ case 263: /* paren_exprlist */
+ case 265: /* case_exprlist */
+ case 294: /* part_opt */
{
-sqlite3ExprListDelete(pParse->db, (yypminor->yy42));
+sqlite3ExprListDelete(pParse->db, (yypminor->yy94));
}
break;
- case 205: /* fullname */
- case 212: /* from */
- case 223: /* seltablist */
- case 224: /* stl_prefix */
- case 230: /* xfullname */
+ case 227: /* fullname */
+ case 234: /* from */
+ case 245: /* seltablist */
+ case 246: /* stl_prefix */
+ case 252: /* xfullname */
{
-sqlite3SrcListDelete(pParse->db, (yypminor->yy167));
+sqlite3SrcListDelete(pParse->db, (yypminor->yy407));
}
break;
- case 208: /* wqlist */
+ case 230: /* wqlist */
{
-sqlite3WithDelete(pParse->db, (yypminor->yy499));
+sqlite3WithDelete(pParse->db, (yypminor->yy243));
}
break;
- case 218: /* window_clause */
- case 268: /* windowdefn_list */
+ case 240: /* window_clause */
+ case 290: /* windowdefn_list */
{
-sqlite3WindowListDelete(pParse->db, (yypminor->yy147));
+sqlite3WindowListDelete(pParse->db, (yypminor->yy379));
}
break;
- case 228: /* using_opt */
- case 231: /* idlist */
- case 235: /* idlist_opt */
+ case 250: /* using_opt */
+ case 253: /* idlist */
+ case 257: /* idlist_opt */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy336));
+sqlite3IdListDelete(pParse->db, (yypminor->yy76));
}
break;
- case 237: /* over_clause */
- case 269: /* windowdefn */
- case 270: /* window */
- case 271: /* frame_opt */
+ case 259: /* over_clause */
+ case 291: /* windowdefn */
+ case 292: /* window */
+ case 293: /* frame_opt */
{
-sqlite3WindowDelete(pParse->db, (yypminor->yy147));
+sqlite3WindowDelete(pParse->db, (yypminor->yy379));
}
break;
- case 250: /* trigger_cmd_list */
- case 255: /* trigger_cmd */
+ case 272: /* trigger_cmd_list */
+ case 277: /* trigger_cmd */
{
-sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy119));
+sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy11));
}
break;
- case 252: /* trigger_event */
+ case 274: /* trigger_event */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy350).b);
+sqlite3IdListDelete(pParse->db, (yypminor->yy298).b);
}
break;
- case 275: /* frame_bound */
- case 276: /* frame_bound_s */
- case 277: /* frame_bound_e */
+ case 297: /* frame_bound */
+ case 298: /* frame_bound_s */
+ case 299: /* frame_bound_e */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy317).pExpr);
+sqlite3ExprDelete(pParse->db, (yypminor->yy389).pExpr);
}
break;
/********* End destructor definitions *****************************************/
@@ -149588,375 +151046,382 @@ static void yy_shift(
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
** of that rule */
static const YYCODETYPE yyRuleInfoLhs[] = {
- 159, /* (0) explain ::= EXPLAIN */
- 159, /* (1) explain ::= EXPLAIN QUERY PLAN */
- 158, /* (2) cmdx ::= cmd */
- 160, /* (3) cmd ::= BEGIN transtype trans_opt */
- 161, /* (4) transtype ::= */
- 161, /* (5) transtype ::= DEFERRED */
- 161, /* (6) transtype ::= IMMEDIATE */
- 161, /* (7) transtype ::= EXCLUSIVE */
- 160, /* (8) cmd ::= COMMIT|END trans_opt */
- 160, /* (9) cmd ::= ROLLBACK trans_opt */
- 160, /* (10) cmd ::= SAVEPOINT nm */
- 160, /* (11) cmd ::= RELEASE savepoint_opt nm */
- 160, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
- 165, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
- 167, /* (14) createkw ::= CREATE */
- 169, /* (15) ifnotexists ::= */
- 169, /* (16) ifnotexists ::= IF NOT EXISTS */
- 168, /* (17) temp ::= TEMP */
- 168, /* (18) temp ::= */
- 166, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_options */
- 166, /* (20) create_table_args ::= AS select */
- 173, /* (21) table_options ::= */
- 173, /* (22) table_options ::= WITHOUT nm */
- 175, /* (23) columnname ::= nm typetoken */
- 177, /* (24) typetoken ::= */
- 177, /* (25) typetoken ::= typename LP signed RP */
- 177, /* (26) typetoken ::= typename LP signed COMMA signed RP */
- 178, /* (27) typename ::= typename ID|STRING */
- 182, /* (28) scanpt ::= */
- 183, /* (29) ccons ::= CONSTRAINT nm */
- 183, /* (30) ccons ::= DEFAULT scanpt term scanpt */
- 183, /* (31) ccons ::= DEFAULT LP expr RP */
- 183, /* (32) ccons ::= DEFAULT PLUS term scanpt */
- 183, /* (33) ccons ::= DEFAULT MINUS term scanpt */
- 183, /* (34) ccons ::= DEFAULT scanpt ID|INDEXED */
- 183, /* (35) ccons ::= NOT NULL onconf */
- 183, /* (36) ccons ::= PRIMARY KEY sortorder onconf autoinc */
- 183, /* (37) ccons ::= UNIQUE onconf */
- 183, /* (38) ccons ::= CHECK LP expr RP */
- 183, /* (39) ccons ::= REFERENCES nm eidlist_opt refargs */
- 183, /* (40) ccons ::= defer_subclause */
- 183, /* (41) ccons ::= COLLATE ID|STRING */
- 188, /* (42) autoinc ::= */
- 188, /* (43) autoinc ::= AUTOINCR */
- 190, /* (44) refargs ::= */
- 190, /* (45) refargs ::= refargs refarg */
- 192, /* (46) refarg ::= MATCH nm */
- 192, /* (47) refarg ::= ON INSERT refact */
- 192, /* (48) refarg ::= ON DELETE refact */
- 192, /* (49) refarg ::= ON UPDATE refact */
- 193, /* (50) refact ::= SET NULL */
- 193, /* (51) refact ::= SET DEFAULT */
- 193, /* (52) refact ::= CASCADE */
- 193, /* (53) refact ::= RESTRICT */
- 193, /* (54) refact ::= NO ACTION */
- 191, /* (55) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
- 191, /* (56) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
- 194, /* (57) init_deferred_pred_opt ::= */
- 194, /* (58) init_deferred_pred_opt ::= INITIALLY DEFERRED */
- 194, /* (59) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
- 172, /* (60) conslist_opt ::= */
- 196, /* (61) tconscomma ::= COMMA */
- 197, /* (62) tcons ::= CONSTRAINT nm */
- 197, /* (63) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
- 197, /* (64) tcons ::= UNIQUE LP sortlist RP onconf */
- 197, /* (65) tcons ::= CHECK LP expr RP onconf */
- 197, /* (66) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
- 200, /* (67) defer_subclause_opt ::= */
- 186, /* (68) onconf ::= */
- 186, /* (69) onconf ::= ON CONFLICT resolvetype */
- 201, /* (70) orconf ::= */
- 201, /* (71) orconf ::= OR resolvetype */
- 202, /* (72) resolvetype ::= IGNORE */
- 202, /* (73) resolvetype ::= REPLACE */
- 160, /* (74) cmd ::= DROP TABLE ifexists fullname */
- 204, /* (75) ifexists ::= IF EXISTS */
- 204, /* (76) ifexists ::= */
- 160, /* (77) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
- 160, /* (78) cmd ::= DROP VIEW ifexists fullname */
- 160, /* (79) cmd ::= select */
- 174, /* (80) select ::= WITH wqlist selectnowith */
- 174, /* (81) select ::= WITH RECURSIVE wqlist selectnowith */
- 174, /* (82) select ::= selectnowith */
- 206, /* (83) selectnowith ::= selectnowith multiselect_op oneselect */
- 209, /* (84) multiselect_op ::= UNION */
- 209, /* (85) multiselect_op ::= UNION ALL */
- 209, /* (86) multiselect_op ::= EXCEPT|INTERSECT */
- 207, /* (87) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
- 207, /* (88) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
- 219, /* (89) values ::= VALUES LP nexprlist RP */
- 219, /* (90) values ::= values COMMA LP nexprlist RP */
- 210, /* (91) distinct ::= DISTINCT */
- 210, /* (92) distinct ::= ALL */
- 210, /* (93) distinct ::= */
- 221, /* (94) sclp ::= */
- 211, /* (95) selcollist ::= sclp scanpt expr scanpt as */
- 211, /* (96) selcollist ::= sclp scanpt STAR */
- 211, /* (97) selcollist ::= sclp scanpt nm DOT STAR */
- 222, /* (98) as ::= AS nm */
- 222, /* (99) as ::= */
- 212, /* (100) from ::= */
- 212, /* (101) from ::= FROM seltablist */
- 224, /* (102) stl_prefix ::= seltablist joinop */
- 224, /* (103) stl_prefix ::= */
- 223, /* (104) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
- 223, /* (105) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
- 223, /* (106) seltablist ::= stl_prefix LP select RP as on_opt using_opt */
- 223, /* (107) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
- 170, /* (108) dbnm ::= */
- 170, /* (109) dbnm ::= DOT nm */
- 205, /* (110) fullname ::= nm */
- 205, /* (111) fullname ::= nm DOT nm */
- 230, /* (112) xfullname ::= nm */
- 230, /* (113) xfullname ::= nm DOT nm */
- 230, /* (114) xfullname ::= nm DOT nm AS nm */
- 230, /* (115) xfullname ::= nm AS nm */
- 225, /* (116) joinop ::= COMMA|JOIN */
- 225, /* (117) joinop ::= JOIN_KW JOIN */
- 225, /* (118) joinop ::= JOIN_KW nm JOIN */
- 225, /* (119) joinop ::= JOIN_KW nm nm JOIN */
- 227, /* (120) on_opt ::= ON expr */
- 227, /* (121) on_opt ::= */
- 226, /* (122) indexed_opt ::= */
- 226, /* (123) indexed_opt ::= INDEXED BY nm */
- 226, /* (124) indexed_opt ::= NOT INDEXED */
- 228, /* (125) using_opt ::= USING LP idlist RP */
- 228, /* (126) using_opt ::= */
- 216, /* (127) orderby_opt ::= */
- 216, /* (128) orderby_opt ::= ORDER BY sortlist */
- 198, /* (129) sortlist ::= sortlist COMMA expr sortorder */
- 198, /* (130) sortlist ::= expr sortorder */
- 187, /* (131) sortorder ::= ASC */
- 187, /* (132) sortorder ::= DESC */
- 187, /* (133) sortorder ::= */
- 214, /* (134) groupby_opt ::= */
- 214, /* (135) groupby_opt ::= GROUP BY nexprlist */
- 215, /* (136) having_opt ::= */
- 215, /* (137) having_opt ::= HAVING expr */
- 217, /* (138) limit_opt ::= */
- 217, /* (139) limit_opt ::= LIMIT expr */
- 217, /* (140) limit_opt ::= LIMIT expr OFFSET expr */
- 217, /* (141) limit_opt ::= LIMIT expr COMMA expr */
- 160, /* (142) cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
- 213, /* (143) where_opt ::= */
- 213, /* (144) where_opt ::= WHERE expr */
- 160, /* (145) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */
- 233, /* (146) setlist ::= setlist COMMA nm EQ expr */
- 233, /* (147) setlist ::= setlist COMMA LP idlist RP EQ expr */
- 233, /* (148) setlist ::= nm EQ expr */
- 233, /* (149) setlist ::= LP idlist RP EQ expr */
- 160, /* (150) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
- 160, /* (151) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
- 236, /* (152) upsert ::= */
- 236, /* (153) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
- 236, /* (154) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
- 236, /* (155) upsert ::= ON CONFLICT DO NOTHING */
- 234, /* (156) insert_cmd ::= INSERT orconf */
- 234, /* (157) insert_cmd ::= REPLACE */
- 235, /* (158) idlist_opt ::= */
- 235, /* (159) idlist_opt ::= LP idlist RP */
- 231, /* (160) idlist ::= idlist COMMA nm */
- 231, /* (161) idlist ::= nm */
- 185, /* (162) expr ::= LP expr RP */
- 185, /* (163) expr ::= ID|INDEXED */
- 185, /* (164) expr ::= JOIN_KW */
- 185, /* (165) expr ::= nm DOT nm */
- 185, /* (166) expr ::= nm DOT nm DOT nm */
- 184, /* (167) term ::= NULL|FLOAT|BLOB */
- 184, /* (168) term ::= STRING */
- 184, /* (169) term ::= INTEGER */
- 185, /* (170) expr ::= VARIABLE */
- 185, /* (171) expr ::= expr COLLATE ID|STRING */
- 185, /* (172) expr ::= CAST LP expr AS typetoken RP */
- 185, /* (173) expr ::= ID|INDEXED LP distinct exprlist RP */
- 185, /* (174) expr ::= ID|INDEXED LP STAR RP */
- 185, /* (175) expr ::= ID|INDEXED LP distinct exprlist RP over_clause */
- 185, /* (176) expr ::= ID|INDEXED LP STAR RP over_clause */
- 184, /* (177) term ::= CTIME_KW */
- 185, /* (178) expr ::= LP nexprlist COMMA expr RP */
- 185, /* (179) expr ::= expr AND expr */
- 185, /* (180) expr ::= expr OR expr */
- 185, /* (181) expr ::= expr LT|GT|GE|LE expr */
- 185, /* (182) expr ::= expr EQ|NE expr */
- 185, /* (183) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
- 185, /* (184) expr ::= expr PLUS|MINUS expr */
- 185, /* (185) expr ::= expr STAR|SLASH|REM expr */
- 185, /* (186) expr ::= expr CONCAT expr */
- 238, /* (187) likeop ::= NOT LIKE_KW|MATCH */
- 185, /* (188) expr ::= expr likeop expr */
- 185, /* (189) expr ::= expr likeop expr ESCAPE expr */
- 185, /* (190) expr ::= expr ISNULL|NOTNULL */
- 185, /* (191) expr ::= expr NOT NULL */
- 185, /* (192) expr ::= expr IS expr */
- 185, /* (193) expr ::= expr IS NOT expr */
- 185, /* (194) expr ::= NOT expr */
- 185, /* (195) expr ::= BITNOT expr */
- 185, /* (196) expr ::= PLUS|MINUS expr */
- 239, /* (197) between_op ::= BETWEEN */
- 239, /* (198) between_op ::= NOT BETWEEN */
- 185, /* (199) expr ::= expr between_op expr AND expr */
- 240, /* (200) in_op ::= IN */
- 240, /* (201) in_op ::= NOT IN */
- 185, /* (202) expr ::= expr in_op LP exprlist RP */
- 185, /* (203) expr ::= LP select RP */
- 185, /* (204) expr ::= expr in_op LP select RP */
- 185, /* (205) expr ::= expr in_op nm dbnm paren_exprlist */
- 185, /* (206) expr ::= EXISTS LP select RP */
- 185, /* (207) expr ::= CASE case_operand case_exprlist case_else END */
- 243, /* (208) case_exprlist ::= case_exprlist WHEN expr THEN expr */
- 243, /* (209) case_exprlist ::= WHEN expr THEN expr */
- 244, /* (210) case_else ::= ELSE expr */
- 244, /* (211) case_else ::= */
- 242, /* (212) case_operand ::= expr */
- 242, /* (213) case_operand ::= */
- 229, /* (214) exprlist ::= */
- 220, /* (215) nexprlist ::= nexprlist COMMA expr */
- 220, /* (216) nexprlist ::= expr */
- 241, /* (217) paren_exprlist ::= */
- 241, /* (218) paren_exprlist ::= LP exprlist RP */
- 160, /* (219) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
- 245, /* (220) uniqueflag ::= UNIQUE */
- 245, /* (221) uniqueflag ::= */
- 189, /* (222) eidlist_opt ::= */
- 189, /* (223) eidlist_opt ::= LP eidlist RP */
- 199, /* (224) eidlist ::= eidlist COMMA nm collate sortorder */
- 199, /* (225) eidlist ::= nm collate sortorder */
- 246, /* (226) collate ::= */
- 246, /* (227) collate ::= COLLATE ID|STRING */
- 160, /* (228) cmd ::= DROP INDEX ifexists fullname */
- 160, /* (229) cmd ::= VACUUM vinto */
- 160, /* (230) cmd ::= VACUUM nm vinto */
- 247, /* (231) vinto ::= INTO expr */
- 247, /* (232) vinto ::= */
- 160, /* (233) cmd ::= PRAGMA nm dbnm */
- 160, /* (234) cmd ::= PRAGMA nm dbnm EQ nmnum */
- 160, /* (235) cmd ::= PRAGMA nm dbnm LP nmnum RP */
- 160, /* (236) cmd ::= PRAGMA nm dbnm EQ minus_num */
- 160, /* (237) cmd ::= PRAGMA nm dbnm LP minus_num RP */
- 180, /* (238) plus_num ::= PLUS INTEGER|FLOAT */
- 181, /* (239) minus_num ::= MINUS INTEGER|FLOAT */
- 160, /* (240) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
- 249, /* (241) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
- 251, /* (242) trigger_time ::= BEFORE|AFTER */
- 251, /* (243) trigger_time ::= INSTEAD OF */
- 251, /* (244) trigger_time ::= */
- 252, /* (245) trigger_event ::= DELETE|INSERT */
- 252, /* (246) trigger_event ::= UPDATE */
- 252, /* (247) trigger_event ::= UPDATE OF idlist */
- 254, /* (248) when_clause ::= */
- 254, /* (249) when_clause ::= WHEN expr */
- 250, /* (250) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
- 250, /* (251) trigger_cmd_list ::= trigger_cmd SEMI */
- 256, /* (252) trnm ::= nm DOT nm */
- 257, /* (253) tridxby ::= INDEXED BY nm */
- 257, /* (254) tridxby ::= NOT INDEXED */
- 255, /* (255) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */
- 255, /* (256) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
- 255, /* (257) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
- 255, /* (258) trigger_cmd ::= scanpt select scanpt */
- 185, /* (259) expr ::= RAISE LP IGNORE RP */
- 185, /* (260) expr ::= RAISE LP raisetype COMMA nm RP */
- 203, /* (261) raisetype ::= ROLLBACK */
- 203, /* (262) raisetype ::= ABORT */
- 203, /* (263) raisetype ::= FAIL */
- 160, /* (264) cmd ::= DROP TRIGGER ifexists fullname */
- 160, /* (265) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
- 160, /* (266) cmd ::= DETACH database_kw_opt expr */
- 259, /* (267) key_opt ::= */
- 259, /* (268) key_opt ::= KEY expr */
- 160, /* (269) cmd ::= REINDEX */
- 160, /* (270) cmd ::= REINDEX nm dbnm */
- 160, /* (271) cmd ::= ANALYZE */
- 160, /* (272) cmd ::= ANALYZE nm dbnm */
- 160, /* (273) cmd ::= ALTER TABLE fullname RENAME TO nm */
- 160, /* (274) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
- 260, /* (275) add_column_fullname ::= fullname */
- 160, /* (276) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
- 160, /* (277) cmd ::= create_vtab */
- 160, /* (278) cmd ::= create_vtab LP vtabarglist RP */
- 262, /* (279) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
- 264, /* (280) vtabarg ::= */
- 265, /* (281) vtabargtoken ::= ANY */
- 265, /* (282) vtabargtoken ::= lp anylist RP */
- 266, /* (283) lp ::= LP */
- 232, /* (284) with ::= WITH wqlist */
- 232, /* (285) with ::= WITH RECURSIVE wqlist */
- 208, /* (286) wqlist ::= nm eidlist_opt AS LP select RP */
- 208, /* (287) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
- 268, /* (288) windowdefn_list ::= windowdefn */
- 268, /* (289) windowdefn_list ::= windowdefn_list COMMA windowdefn */
- 269, /* (290) windowdefn ::= nm AS window */
- 270, /* (291) window ::= LP part_opt orderby_opt frame_opt RP */
- 272, /* (292) part_opt ::= PARTITION BY nexprlist */
- 272, /* (293) part_opt ::= */
- 271, /* (294) frame_opt ::= */
- 271, /* (295) frame_opt ::= range_or_rows frame_bound_s */
- 271, /* (296) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e */
- 274, /* (297) range_or_rows ::= RANGE */
- 274, /* (298) range_or_rows ::= ROWS */
- 276, /* (299) frame_bound_s ::= frame_bound */
- 276, /* (300) frame_bound_s ::= UNBOUNDED PRECEDING */
- 277, /* (301) frame_bound_e ::= frame_bound */
- 277, /* (302) frame_bound_e ::= UNBOUNDED FOLLOWING */
- 275, /* (303) frame_bound ::= expr PRECEDING */
- 275, /* (304) frame_bound ::= CURRENT ROW */
- 275, /* (305) frame_bound ::= expr FOLLOWING */
- 218, /* (306) window_clause ::= WINDOW windowdefn_list */
- 237, /* (307) over_clause ::= filter_opt OVER window */
- 237, /* (308) over_clause ::= filter_opt OVER nm */
- 273, /* (309) filter_opt ::= */
- 273, /* (310) filter_opt ::= FILTER LP WHERE expr RP */
- 155, /* (311) input ::= cmdlist */
- 156, /* (312) cmdlist ::= cmdlist ecmd */
- 156, /* (313) cmdlist ::= ecmd */
- 157, /* (314) ecmd ::= SEMI */
- 157, /* (315) ecmd ::= cmdx SEMI */
- 157, /* (316) ecmd ::= explain cmdx */
- 162, /* (317) trans_opt ::= */
- 162, /* (318) trans_opt ::= TRANSACTION */
- 162, /* (319) trans_opt ::= TRANSACTION nm */
- 164, /* (320) savepoint_opt ::= SAVEPOINT */
- 164, /* (321) savepoint_opt ::= */
- 160, /* (322) cmd ::= create_table create_table_args */
- 171, /* (323) columnlist ::= columnlist COMMA columnname carglist */
- 171, /* (324) columnlist ::= columnname carglist */
- 163, /* (325) nm ::= ID|INDEXED */
- 163, /* (326) nm ::= STRING */
- 163, /* (327) nm ::= JOIN_KW */
- 177, /* (328) typetoken ::= typename */
- 178, /* (329) typename ::= ID|STRING */
- 179, /* (330) signed ::= plus_num */
- 179, /* (331) signed ::= minus_num */
- 176, /* (332) carglist ::= carglist ccons */
- 176, /* (333) carglist ::= */
- 183, /* (334) ccons ::= NULL onconf */
- 172, /* (335) conslist_opt ::= COMMA conslist */
- 195, /* (336) conslist ::= conslist tconscomma tcons */
- 195, /* (337) conslist ::= tcons */
- 196, /* (338) tconscomma ::= */
- 200, /* (339) defer_subclause_opt ::= defer_subclause */
- 202, /* (340) resolvetype ::= raisetype */
- 206, /* (341) selectnowith ::= oneselect */
- 207, /* (342) oneselect ::= values */
- 221, /* (343) sclp ::= selcollist COMMA */
- 222, /* (344) as ::= ID|STRING */
- 185, /* (345) expr ::= term */
- 238, /* (346) likeop ::= LIKE_KW|MATCH */
- 229, /* (347) exprlist ::= nexprlist */
- 248, /* (348) nmnum ::= plus_num */
- 248, /* (349) nmnum ::= nm */
- 248, /* (350) nmnum ::= ON */
- 248, /* (351) nmnum ::= DELETE */
- 248, /* (352) nmnum ::= DEFAULT */
- 180, /* (353) plus_num ::= INTEGER|FLOAT */
- 253, /* (354) foreach_clause ::= */
- 253, /* (355) foreach_clause ::= FOR EACH ROW */
- 256, /* (356) trnm ::= nm */
- 257, /* (357) tridxby ::= */
- 258, /* (358) database_kw_opt ::= DATABASE */
- 258, /* (359) database_kw_opt ::= */
- 261, /* (360) kwcolumn_opt ::= */
- 261, /* (361) kwcolumn_opt ::= COLUMNKW */
- 263, /* (362) vtabarglist ::= vtabarg */
- 263, /* (363) vtabarglist ::= vtabarglist COMMA vtabarg */
- 264, /* (364) vtabarg ::= vtabarg vtabargtoken */
- 267, /* (365) anylist ::= */
- 267, /* (366) anylist ::= anylist LP anylist RP */
- 267, /* (367) anylist ::= anylist ANY */
- 232, /* (368) with ::= */
+ 180, /* (0) explain ::= EXPLAIN */
+ 180, /* (1) explain ::= EXPLAIN QUERY PLAN */
+ 179, /* (2) cmdx ::= cmd */
+ 181, /* (3) cmd ::= BEGIN transtype trans_opt */
+ 182, /* (4) transtype ::= */
+ 182, /* (5) transtype ::= DEFERRED */
+ 182, /* (6) transtype ::= IMMEDIATE */
+ 182, /* (7) transtype ::= EXCLUSIVE */
+ 181, /* (8) cmd ::= COMMIT|END trans_opt */
+ 181, /* (9) cmd ::= ROLLBACK trans_opt */
+ 181, /* (10) cmd ::= SAVEPOINT nm */
+ 181, /* (11) cmd ::= RELEASE savepoint_opt nm */
+ 181, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
+ 186, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
+ 188, /* (14) createkw ::= CREATE */
+ 190, /* (15) ifnotexists ::= */
+ 190, /* (16) ifnotexists ::= IF NOT EXISTS */
+ 189, /* (17) temp ::= TEMP */
+ 189, /* (18) temp ::= */
+ 187, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_options */
+ 187, /* (20) create_table_args ::= AS select */
+ 194, /* (21) table_options ::= */
+ 194, /* (22) table_options ::= WITHOUT nm */
+ 196, /* (23) columnname ::= nm typetoken */
+ 198, /* (24) typetoken ::= */
+ 198, /* (25) typetoken ::= typename LP signed RP */
+ 198, /* (26) typetoken ::= typename LP signed COMMA signed RP */
+ 199, /* (27) typename ::= typename ID|STRING */
+ 203, /* (28) scanpt ::= */
+ 204, /* (29) scantok ::= */
+ 205, /* (30) ccons ::= CONSTRAINT nm */
+ 205, /* (31) ccons ::= DEFAULT scantok term */
+ 205, /* (32) ccons ::= DEFAULT LP expr RP */
+ 205, /* (33) ccons ::= DEFAULT PLUS scantok term */
+ 205, /* (34) ccons ::= DEFAULT MINUS scantok term */
+ 205, /* (35) ccons ::= DEFAULT scantok ID|INDEXED */
+ 205, /* (36) ccons ::= NOT NULL onconf */
+ 205, /* (37) ccons ::= PRIMARY KEY sortorder onconf autoinc */
+ 205, /* (38) ccons ::= UNIQUE onconf */
+ 205, /* (39) ccons ::= CHECK LP expr RP */
+ 205, /* (40) ccons ::= REFERENCES nm eidlist_opt refargs */
+ 205, /* (41) ccons ::= defer_subclause */
+ 205, /* (42) ccons ::= COLLATE ID|STRING */
+ 210, /* (43) autoinc ::= */
+ 210, /* (44) autoinc ::= AUTOINCR */
+ 212, /* (45) refargs ::= */
+ 212, /* (46) refargs ::= refargs refarg */
+ 214, /* (47) refarg ::= MATCH nm */
+ 214, /* (48) refarg ::= ON INSERT refact */
+ 214, /* (49) refarg ::= ON DELETE refact */
+ 214, /* (50) refarg ::= ON UPDATE refact */
+ 215, /* (51) refact ::= SET NULL */
+ 215, /* (52) refact ::= SET DEFAULT */
+ 215, /* (53) refact ::= CASCADE */
+ 215, /* (54) refact ::= RESTRICT */
+ 215, /* (55) refact ::= NO ACTION */
+ 213, /* (56) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+ 213, /* (57) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ 216, /* (58) init_deferred_pred_opt ::= */
+ 216, /* (59) init_deferred_pred_opt ::= INITIALLY DEFERRED */
+ 216, /* (60) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+ 193, /* (61) conslist_opt ::= */
+ 218, /* (62) tconscomma ::= COMMA */
+ 219, /* (63) tcons ::= CONSTRAINT nm */
+ 219, /* (64) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
+ 219, /* (65) tcons ::= UNIQUE LP sortlist RP onconf */
+ 219, /* (66) tcons ::= CHECK LP expr RP onconf */
+ 219, /* (67) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
+ 222, /* (68) defer_subclause_opt ::= */
+ 208, /* (69) onconf ::= */
+ 208, /* (70) onconf ::= ON CONFLICT resolvetype */
+ 223, /* (71) orconf ::= */
+ 223, /* (72) orconf ::= OR resolvetype */
+ 224, /* (73) resolvetype ::= IGNORE */
+ 224, /* (74) resolvetype ::= REPLACE */
+ 181, /* (75) cmd ::= DROP TABLE ifexists fullname */
+ 226, /* (76) ifexists ::= IF EXISTS */
+ 226, /* (77) ifexists ::= */
+ 181, /* (78) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
+ 181, /* (79) cmd ::= DROP VIEW ifexists fullname */
+ 181, /* (80) cmd ::= select */
+ 195, /* (81) select ::= WITH wqlist selectnowith */
+ 195, /* (82) select ::= WITH RECURSIVE wqlist selectnowith */
+ 195, /* (83) select ::= selectnowith */
+ 228, /* (84) selectnowith ::= selectnowith multiselect_op oneselect */
+ 231, /* (85) multiselect_op ::= UNION */
+ 231, /* (86) multiselect_op ::= UNION ALL */
+ 231, /* (87) multiselect_op ::= EXCEPT|INTERSECT */
+ 229, /* (88) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ 229, /* (89) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
+ 241, /* (90) values ::= VALUES LP nexprlist RP */
+ 241, /* (91) values ::= values COMMA LP nexprlist RP */
+ 232, /* (92) distinct ::= DISTINCT */
+ 232, /* (93) distinct ::= ALL */
+ 232, /* (94) distinct ::= */
+ 243, /* (95) sclp ::= */
+ 233, /* (96) selcollist ::= sclp scanpt expr scanpt as */
+ 233, /* (97) selcollist ::= sclp scanpt STAR */
+ 233, /* (98) selcollist ::= sclp scanpt nm DOT STAR */
+ 244, /* (99) as ::= AS nm */
+ 244, /* (100) as ::= */
+ 234, /* (101) from ::= */
+ 234, /* (102) from ::= FROM seltablist */
+ 246, /* (103) stl_prefix ::= seltablist joinop */
+ 246, /* (104) stl_prefix ::= */
+ 245, /* (105) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
+ 245, /* (106) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
+ 245, /* (107) seltablist ::= stl_prefix LP select RP as on_opt using_opt */
+ 245, /* (108) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
+ 191, /* (109) dbnm ::= */
+ 191, /* (110) dbnm ::= DOT nm */
+ 227, /* (111) fullname ::= nm */
+ 227, /* (112) fullname ::= nm DOT nm */
+ 252, /* (113) xfullname ::= nm */
+ 252, /* (114) xfullname ::= nm DOT nm */
+ 252, /* (115) xfullname ::= nm DOT nm AS nm */
+ 252, /* (116) xfullname ::= nm AS nm */
+ 247, /* (117) joinop ::= COMMA|JOIN */
+ 247, /* (118) joinop ::= JOIN_KW JOIN */
+ 247, /* (119) joinop ::= JOIN_KW nm JOIN */
+ 247, /* (120) joinop ::= JOIN_KW nm nm JOIN */
+ 249, /* (121) on_opt ::= ON expr */
+ 249, /* (122) on_opt ::= */
+ 248, /* (123) indexed_opt ::= */
+ 248, /* (124) indexed_opt ::= INDEXED BY nm */
+ 248, /* (125) indexed_opt ::= NOT INDEXED */
+ 250, /* (126) using_opt ::= USING LP idlist RP */
+ 250, /* (127) using_opt ::= */
+ 238, /* (128) orderby_opt ::= */
+ 238, /* (129) orderby_opt ::= ORDER BY sortlist */
+ 220, /* (130) sortlist ::= sortlist COMMA expr sortorder */
+ 220, /* (131) sortlist ::= expr sortorder */
+ 209, /* (132) sortorder ::= ASC */
+ 209, /* (133) sortorder ::= DESC */
+ 209, /* (134) sortorder ::= */
+ 236, /* (135) groupby_opt ::= */
+ 236, /* (136) groupby_opt ::= GROUP BY nexprlist */
+ 237, /* (137) having_opt ::= */
+ 237, /* (138) having_opt ::= HAVING expr */
+ 239, /* (139) limit_opt ::= */
+ 239, /* (140) limit_opt ::= LIMIT expr */
+ 239, /* (141) limit_opt ::= LIMIT expr OFFSET expr */
+ 239, /* (142) limit_opt ::= LIMIT expr COMMA expr */
+ 181, /* (143) cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
+ 235, /* (144) where_opt ::= */
+ 235, /* (145) where_opt ::= WHERE expr */
+ 181, /* (146) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */
+ 255, /* (147) setlist ::= setlist COMMA nm EQ expr */
+ 255, /* (148) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ 255, /* (149) setlist ::= nm EQ expr */
+ 255, /* (150) setlist ::= LP idlist RP EQ expr */
+ 181, /* (151) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ 181, /* (152) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
+ 258, /* (153) upsert ::= */
+ 258, /* (154) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
+ 258, /* (155) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
+ 258, /* (156) upsert ::= ON CONFLICT DO NOTHING */
+ 256, /* (157) insert_cmd ::= INSERT orconf */
+ 256, /* (158) insert_cmd ::= REPLACE */
+ 257, /* (159) idlist_opt ::= */
+ 257, /* (160) idlist_opt ::= LP idlist RP */
+ 253, /* (161) idlist ::= idlist COMMA nm */
+ 253, /* (162) idlist ::= nm */
+ 207, /* (163) expr ::= LP expr RP */
+ 207, /* (164) expr ::= ID|INDEXED */
+ 207, /* (165) expr ::= JOIN_KW */
+ 207, /* (166) expr ::= nm DOT nm */
+ 207, /* (167) expr ::= nm DOT nm DOT nm */
+ 206, /* (168) term ::= NULL|FLOAT|BLOB */
+ 206, /* (169) term ::= STRING */
+ 206, /* (170) term ::= INTEGER */
+ 207, /* (171) expr ::= VARIABLE */
+ 207, /* (172) expr ::= expr COLLATE ID|STRING */
+ 207, /* (173) expr ::= CAST LP expr AS typetoken RP */
+ 207, /* (174) expr ::= ID|INDEXED LP distinct exprlist RP */
+ 207, /* (175) expr ::= ID|INDEXED LP STAR RP */
+ 207, /* (176) expr ::= ID|INDEXED LP distinct exprlist RP over_clause */
+ 207, /* (177) expr ::= ID|INDEXED LP STAR RP over_clause */
+ 206, /* (178) term ::= CTIME_KW */
+ 207, /* (179) expr ::= LP nexprlist COMMA expr RP */
+ 207, /* (180) expr ::= expr AND expr */
+ 207, /* (181) expr ::= expr OR expr */
+ 207, /* (182) expr ::= expr LT|GT|GE|LE expr */
+ 207, /* (183) expr ::= expr EQ|NE expr */
+ 207, /* (184) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ 207, /* (185) expr ::= expr PLUS|MINUS expr */
+ 207, /* (186) expr ::= expr STAR|SLASH|REM expr */
+ 207, /* (187) expr ::= expr CONCAT expr */
+ 260, /* (188) likeop ::= NOT LIKE_KW|MATCH */
+ 207, /* (189) expr ::= expr likeop expr */
+ 207, /* (190) expr ::= expr likeop expr ESCAPE expr */
+ 207, /* (191) expr ::= expr ISNULL|NOTNULL */
+ 207, /* (192) expr ::= expr NOT NULL */
+ 207, /* (193) expr ::= expr IS expr */
+ 207, /* (194) expr ::= expr IS NOT expr */
+ 207, /* (195) expr ::= NOT expr */
+ 207, /* (196) expr ::= BITNOT expr */
+ 207, /* (197) expr ::= PLUS|MINUS expr */
+ 261, /* (198) between_op ::= BETWEEN */
+ 261, /* (199) between_op ::= NOT BETWEEN */
+ 207, /* (200) expr ::= expr between_op expr AND expr */
+ 262, /* (201) in_op ::= IN */
+ 262, /* (202) in_op ::= NOT IN */
+ 207, /* (203) expr ::= expr in_op LP exprlist RP */
+ 207, /* (204) expr ::= LP select RP */
+ 207, /* (205) expr ::= expr in_op LP select RP */
+ 207, /* (206) expr ::= expr in_op nm dbnm paren_exprlist */
+ 207, /* (207) expr ::= EXISTS LP select RP */
+ 207, /* (208) expr ::= CASE case_operand case_exprlist case_else END */
+ 265, /* (209) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ 265, /* (210) case_exprlist ::= WHEN expr THEN expr */
+ 266, /* (211) case_else ::= ELSE expr */
+ 266, /* (212) case_else ::= */
+ 264, /* (213) case_operand ::= expr */
+ 264, /* (214) case_operand ::= */
+ 251, /* (215) exprlist ::= */
+ 242, /* (216) nexprlist ::= nexprlist COMMA expr */
+ 242, /* (217) nexprlist ::= expr */
+ 263, /* (218) paren_exprlist ::= */
+ 263, /* (219) paren_exprlist ::= LP exprlist RP */
+ 181, /* (220) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ 267, /* (221) uniqueflag ::= UNIQUE */
+ 267, /* (222) uniqueflag ::= */
+ 211, /* (223) eidlist_opt ::= */
+ 211, /* (224) eidlist_opt ::= LP eidlist RP */
+ 221, /* (225) eidlist ::= eidlist COMMA nm collate sortorder */
+ 221, /* (226) eidlist ::= nm collate sortorder */
+ 268, /* (227) collate ::= */
+ 268, /* (228) collate ::= COLLATE ID|STRING */
+ 181, /* (229) cmd ::= DROP INDEX ifexists fullname */
+ 181, /* (230) cmd ::= VACUUM vinto */
+ 181, /* (231) cmd ::= VACUUM nm vinto */
+ 269, /* (232) vinto ::= INTO expr */
+ 269, /* (233) vinto ::= */
+ 181, /* (234) cmd ::= PRAGMA nm dbnm */
+ 181, /* (235) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ 181, /* (236) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ 181, /* (237) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ 181, /* (238) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ 201, /* (239) plus_num ::= PLUS INTEGER|FLOAT */
+ 202, /* (240) minus_num ::= MINUS INTEGER|FLOAT */
+ 181, /* (241) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ 271, /* (242) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ 273, /* (243) trigger_time ::= BEFORE|AFTER */
+ 273, /* (244) trigger_time ::= INSTEAD OF */
+ 273, /* (245) trigger_time ::= */
+ 274, /* (246) trigger_event ::= DELETE|INSERT */
+ 274, /* (247) trigger_event ::= UPDATE */
+ 274, /* (248) trigger_event ::= UPDATE OF idlist */
+ 276, /* (249) when_clause ::= */
+ 276, /* (250) when_clause ::= WHEN expr */
+ 272, /* (251) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ 272, /* (252) trigger_cmd_list ::= trigger_cmd SEMI */
+ 278, /* (253) trnm ::= nm DOT nm */
+ 279, /* (254) tridxby ::= INDEXED BY nm */
+ 279, /* (255) tridxby ::= NOT INDEXED */
+ 277, /* (256) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */
+ 277, /* (257) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ 277, /* (258) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ 277, /* (259) trigger_cmd ::= scanpt select scanpt */
+ 207, /* (260) expr ::= RAISE LP IGNORE RP */
+ 207, /* (261) expr ::= RAISE LP raisetype COMMA nm RP */
+ 225, /* (262) raisetype ::= ROLLBACK */
+ 225, /* (263) raisetype ::= ABORT */
+ 225, /* (264) raisetype ::= FAIL */
+ 181, /* (265) cmd ::= DROP TRIGGER ifexists fullname */
+ 181, /* (266) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ 181, /* (267) cmd ::= DETACH database_kw_opt expr */
+ 281, /* (268) key_opt ::= */
+ 281, /* (269) key_opt ::= KEY expr */
+ 181, /* (270) cmd ::= REINDEX */
+ 181, /* (271) cmd ::= REINDEX nm dbnm */
+ 181, /* (272) cmd ::= ANALYZE */
+ 181, /* (273) cmd ::= ANALYZE nm dbnm */
+ 181, /* (274) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ 181, /* (275) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ 282, /* (276) add_column_fullname ::= fullname */
+ 181, /* (277) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ 181, /* (278) cmd ::= create_vtab */
+ 181, /* (279) cmd ::= create_vtab LP vtabarglist RP */
+ 284, /* (280) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ 286, /* (281) vtabarg ::= */
+ 287, /* (282) vtabargtoken ::= ANY */
+ 287, /* (283) vtabargtoken ::= lp anylist RP */
+ 288, /* (284) lp ::= LP */
+ 254, /* (285) with ::= WITH wqlist */
+ 254, /* (286) with ::= WITH RECURSIVE wqlist */
+ 230, /* (287) wqlist ::= nm eidlist_opt AS LP select RP */
+ 230, /* (288) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
+ 290, /* (289) windowdefn_list ::= windowdefn */
+ 290, /* (290) windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ 291, /* (291) windowdefn ::= nm AS LP window RP */
+ 292, /* (292) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ 292, /* (293) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ 292, /* (294) window ::= ORDER BY sortlist frame_opt */
+ 292, /* (295) window ::= nm ORDER BY sortlist frame_opt */
+ 292, /* (296) window ::= frame_opt */
+ 292, /* (297) window ::= nm frame_opt */
+ 293, /* (298) frame_opt ::= */
+ 293, /* (299) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ 293, /* (300) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ 296, /* (301) range_or_rows ::= RANGE|ROWS|GROUPS */
+ 298, /* (302) frame_bound_s ::= frame_bound */
+ 298, /* (303) frame_bound_s ::= UNBOUNDED PRECEDING */
+ 299, /* (304) frame_bound_e ::= frame_bound */
+ 299, /* (305) frame_bound_e ::= UNBOUNDED FOLLOWING */
+ 297, /* (306) frame_bound ::= expr PRECEDING|FOLLOWING */
+ 297, /* (307) frame_bound ::= CURRENT ROW */
+ 300, /* (308) frame_exclude_opt ::= */
+ 300, /* (309) frame_exclude_opt ::= EXCLUDE frame_exclude */
+ 301, /* (310) frame_exclude ::= NO OTHERS */
+ 301, /* (311) frame_exclude ::= CURRENT ROW */
+ 301, /* (312) frame_exclude ::= GROUP|TIES */
+ 240, /* (313) window_clause ::= WINDOW windowdefn_list */
+ 259, /* (314) over_clause ::= filter_opt OVER LP window RP */
+ 259, /* (315) over_clause ::= filter_opt OVER nm */
+ 295, /* (316) filter_opt ::= */
+ 295, /* (317) filter_opt ::= FILTER LP WHERE expr RP */
+ 176, /* (318) input ::= cmdlist */
+ 177, /* (319) cmdlist ::= cmdlist ecmd */
+ 177, /* (320) cmdlist ::= ecmd */
+ 178, /* (321) ecmd ::= SEMI */
+ 178, /* (322) ecmd ::= cmdx SEMI */
+ 178, /* (323) ecmd ::= explain cmdx */
+ 183, /* (324) trans_opt ::= */
+ 183, /* (325) trans_opt ::= TRANSACTION */
+ 183, /* (326) trans_opt ::= TRANSACTION nm */
+ 185, /* (327) savepoint_opt ::= SAVEPOINT */
+ 185, /* (328) savepoint_opt ::= */
+ 181, /* (329) cmd ::= create_table create_table_args */
+ 192, /* (330) columnlist ::= columnlist COMMA columnname carglist */
+ 192, /* (331) columnlist ::= columnname carglist */
+ 184, /* (332) nm ::= ID|INDEXED */
+ 184, /* (333) nm ::= STRING */
+ 184, /* (334) nm ::= JOIN_KW */
+ 198, /* (335) typetoken ::= typename */
+ 199, /* (336) typename ::= ID|STRING */
+ 200, /* (337) signed ::= plus_num */
+ 200, /* (338) signed ::= minus_num */
+ 197, /* (339) carglist ::= carglist ccons */
+ 197, /* (340) carglist ::= */
+ 205, /* (341) ccons ::= NULL onconf */
+ 193, /* (342) conslist_opt ::= COMMA conslist */
+ 217, /* (343) conslist ::= conslist tconscomma tcons */
+ 217, /* (344) conslist ::= tcons */
+ 218, /* (345) tconscomma ::= */
+ 222, /* (346) defer_subclause_opt ::= defer_subclause */
+ 224, /* (347) resolvetype ::= raisetype */
+ 228, /* (348) selectnowith ::= oneselect */
+ 229, /* (349) oneselect ::= values */
+ 243, /* (350) sclp ::= selcollist COMMA */
+ 244, /* (351) as ::= ID|STRING */
+ 207, /* (352) expr ::= term */
+ 260, /* (353) likeop ::= LIKE_KW|MATCH */
+ 251, /* (354) exprlist ::= nexprlist */
+ 270, /* (355) nmnum ::= plus_num */
+ 270, /* (356) nmnum ::= nm */
+ 270, /* (357) nmnum ::= ON */
+ 270, /* (358) nmnum ::= DELETE */
+ 270, /* (359) nmnum ::= DEFAULT */
+ 201, /* (360) plus_num ::= INTEGER|FLOAT */
+ 275, /* (361) foreach_clause ::= */
+ 275, /* (362) foreach_clause ::= FOR EACH ROW */
+ 278, /* (363) trnm ::= nm */
+ 279, /* (364) tridxby ::= */
+ 280, /* (365) database_kw_opt ::= DATABASE */
+ 280, /* (366) database_kw_opt ::= */
+ 283, /* (367) kwcolumn_opt ::= */
+ 283, /* (368) kwcolumn_opt ::= COLUMNKW */
+ 285, /* (369) vtabarglist ::= vtabarg */
+ 285, /* (370) vtabarglist ::= vtabarglist COMMA vtabarg */
+ 286, /* (371) vtabarg ::= vtabarg vtabargtoken */
+ 289, /* (372) anylist ::= */
+ 289, /* (373) anylist ::= anylist LP anylist RP */
+ 289, /* (374) anylist ::= anylist ANY */
+ 254, /* (375) with ::= */
};
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
@@ -149991,346 +151456,353 @@ static const signed char yyRuleInfoNRhs[] = {
-6, /* (26) typetoken ::= typename LP signed COMMA signed RP */
-2, /* (27) typename ::= typename ID|STRING */
0, /* (28) scanpt ::= */
- -2, /* (29) ccons ::= CONSTRAINT nm */
- -4, /* (30) ccons ::= DEFAULT scanpt term scanpt */
- -4, /* (31) ccons ::= DEFAULT LP expr RP */
- -4, /* (32) ccons ::= DEFAULT PLUS term scanpt */
- -4, /* (33) ccons ::= DEFAULT MINUS term scanpt */
- -3, /* (34) ccons ::= DEFAULT scanpt ID|INDEXED */
- -3, /* (35) ccons ::= NOT NULL onconf */
- -5, /* (36) ccons ::= PRIMARY KEY sortorder onconf autoinc */
- -2, /* (37) ccons ::= UNIQUE onconf */
- -4, /* (38) ccons ::= CHECK LP expr RP */
- -4, /* (39) ccons ::= REFERENCES nm eidlist_opt refargs */
- -1, /* (40) ccons ::= defer_subclause */
- -2, /* (41) ccons ::= COLLATE ID|STRING */
- 0, /* (42) autoinc ::= */
- -1, /* (43) autoinc ::= AUTOINCR */
- 0, /* (44) refargs ::= */
- -2, /* (45) refargs ::= refargs refarg */
- -2, /* (46) refarg ::= MATCH nm */
- -3, /* (47) refarg ::= ON INSERT refact */
- -3, /* (48) refarg ::= ON DELETE refact */
- -3, /* (49) refarg ::= ON UPDATE refact */
- -2, /* (50) refact ::= SET NULL */
- -2, /* (51) refact ::= SET DEFAULT */
- -1, /* (52) refact ::= CASCADE */
- -1, /* (53) refact ::= RESTRICT */
- -2, /* (54) refact ::= NO ACTION */
- -3, /* (55) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
- -2, /* (56) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
- 0, /* (57) init_deferred_pred_opt ::= */
- -2, /* (58) init_deferred_pred_opt ::= INITIALLY DEFERRED */
- -2, /* (59) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
- 0, /* (60) conslist_opt ::= */
- -1, /* (61) tconscomma ::= COMMA */
- -2, /* (62) tcons ::= CONSTRAINT nm */
- -7, /* (63) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
- -5, /* (64) tcons ::= UNIQUE LP sortlist RP onconf */
- -5, /* (65) tcons ::= CHECK LP expr RP onconf */
- -10, /* (66) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
- 0, /* (67) defer_subclause_opt ::= */
- 0, /* (68) onconf ::= */
- -3, /* (69) onconf ::= ON CONFLICT resolvetype */
- 0, /* (70) orconf ::= */
- -2, /* (71) orconf ::= OR resolvetype */
- -1, /* (72) resolvetype ::= IGNORE */
- -1, /* (73) resolvetype ::= REPLACE */
- -4, /* (74) cmd ::= DROP TABLE ifexists fullname */
- -2, /* (75) ifexists ::= IF EXISTS */
- 0, /* (76) ifexists ::= */
- -9, /* (77) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
- -4, /* (78) cmd ::= DROP VIEW ifexists fullname */
- -1, /* (79) cmd ::= select */
- -3, /* (80) select ::= WITH wqlist selectnowith */
- -4, /* (81) select ::= WITH RECURSIVE wqlist selectnowith */
- -1, /* (82) select ::= selectnowith */
- -3, /* (83) selectnowith ::= selectnowith multiselect_op oneselect */
- -1, /* (84) multiselect_op ::= UNION */
- -2, /* (85) multiselect_op ::= UNION ALL */
- -1, /* (86) multiselect_op ::= EXCEPT|INTERSECT */
- -9, /* (87) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
- -10, /* (88) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
- -4, /* (89) values ::= VALUES LP nexprlist RP */
- -5, /* (90) values ::= values COMMA LP nexprlist RP */
- -1, /* (91) distinct ::= DISTINCT */
- -1, /* (92) distinct ::= ALL */
- 0, /* (93) distinct ::= */
- 0, /* (94) sclp ::= */
- -5, /* (95) selcollist ::= sclp scanpt expr scanpt as */
- -3, /* (96) selcollist ::= sclp scanpt STAR */
- -5, /* (97) selcollist ::= sclp scanpt nm DOT STAR */
- -2, /* (98) as ::= AS nm */
- 0, /* (99) as ::= */
- 0, /* (100) from ::= */
- -2, /* (101) from ::= FROM seltablist */
- -2, /* (102) stl_prefix ::= seltablist joinop */
- 0, /* (103) stl_prefix ::= */
- -7, /* (104) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
- -9, /* (105) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
- -7, /* (106) seltablist ::= stl_prefix LP select RP as on_opt using_opt */
- -7, /* (107) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
- 0, /* (108) dbnm ::= */
- -2, /* (109) dbnm ::= DOT nm */
- -1, /* (110) fullname ::= nm */
- -3, /* (111) fullname ::= nm DOT nm */
- -1, /* (112) xfullname ::= nm */
- -3, /* (113) xfullname ::= nm DOT nm */
- -5, /* (114) xfullname ::= nm DOT nm AS nm */
- -3, /* (115) xfullname ::= nm AS nm */
- -1, /* (116) joinop ::= COMMA|JOIN */
- -2, /* (117) joinop ::= JOIN_KW JOIN */
- -3, /* (118) joinop ::= JOIN_KW nm JOIN */
- -4, /* (119) joinop ::= JOIN_KW nm nm JOIN */
- -2, /* (120) on_opt ::= ON expr */
- 0, /* (121) on_opt ::= */
- 0, /* (122) indexed_opt ::= */
- -3, /* (123) indexed_opt ::= INDEXED BY nm */
- -2, /* (124) indexed_opt ::= NOT INDEXED */
- -4, /* (125) using_opt ::= USING LP idlist RP */
- 0, /* (126) using_opt ::= */
- 0, /* (127) orderby_opt ::= */
- -3, /* (128) orderby_opt ::= ORDER BY sortlist */
- -4, /* (129) sortlist ::= sortlist COMMA expr sortorder */
- -2, /* (130) sortlist ::= expr sortorder */
- -1, /* (131) sortorder ::= ASC */
- -1, /* (132) sortorder ::= DESC */
- 0, /* (133) sortorder ::= */
- 0, /* (134) groupby_opt ::= */
- -3, /* (135) groupby_opt ::= GROUP BY nexprlist */
- 0, /* (136) having_opt ::= */
- -2, /* (137) having_opt ::= HAVING expr */
- 0, /* (138) limit_opt ::= */
- -2, /* (139) limit_opt ::= LIMIT expr */
- -4, /* (140) limit_opt ::= LIMIT expr OFFSET expr */
- -4, /* (141) limit_opt ::= LIMIT expr COMMA expr */
- -6, /* (142) cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
- 0, /* (143) where_opt ::= */
- -2, /* (144) where_opt ::= WHERE expr */
- -8, /* (145) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */
- -5, /* (146) setlist ::= setlist COMMA nm EQ expr */
- -7, /* (147) setlist ::= setlist COMMA LP idlist RP EQ expr */
- -3, /* (148) setlist ::= nm EQ expr */
- -5, /* (149) setlist ::= LP idlist RP EQ expr */
- -7, /* (150) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
- -7, /* (151) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
- 0, /* (152) upsert ::= */
- -11, /* (153) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
- -8, /* (154) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
- -4, /* (155) upsert ::= ON CONFLICT DO NOTHING */
- -2, /* (156) insert_cmd ::= INSERT orconf */
- -1, /* (157) insert_cmd ::= REPLACE */
- 0, /* (158) idlist_opt ::= */
- -3, /* (159) idlist_opt ::= LP idlist RP */
- -3, /* (160) idlist ::= idlist COMMA nm */
- -1, /* (161) idlist ::= nm */
- -3, /* (162) expr ::= LP expr RP */
- -1, /* (163) expr ::= ID|INDEXED */
- -1, /* (164) expr ::= JOIN_KW */
- -3, /* (165) expr ::= nm DOT nm */
- -5, /* (166) expr ::= nm DOT nm DOT nm */
- -1, /* (167) term ::= NULL|FLOAT|BLOB */
- -1, /* (168) term ::= STRING */
- -1, /* (169) term ::= INTEGER */
- -1, /* (170) expr ::= VARIABLE */
- -3, /* (171) expr ::= expr COLLATE ID|STRING */
- -6, /* (172) expr ::= CAST LP expr AS typetoken RP */
- -5, /* (173) expr ::= ID|INDEXED LP distinct exprlist RP */
- -4, /* (174) expr ::= ID|INDEXED LP STAR RP */
- -6, /* (175) expr ::= ID|INDEXED LP distinct exprlist RP over_clause */
- -5, /* (176) expr ::= ID|INDEXED LP STAR RP over_clause */
- -1, /* (177) term ::= CTIME_KW */
- -5, /* (178) expr ::= LP nexprlist COMMA expr RP */
- -3, /* (179) expr ::= expr AND expr */
- -3, /* (180) expr ::= expr OR expr */
- -3, /* (181) expr ::= expr LT|GT|GE|LE expr */
- -3, /* (182) expr ::= expr EQ|NE expr */
- -3, /* (183) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
- -3, /* (184) expr ::= expr PLUS|MINUS expr */
- -3, /* (185) expr ::= expr STAR|SLASH|REM expr */
- -3, /* (186) expr ::= expr CONCAT expr */
- -2, /* (187) likeop ::= NOT LIKE_KW|MATCH */
- -3, /* (188) expr ::= expr likeop expr */
- -5, /* (189) expr ::= expr likeop expr ESCAPE expr */
- -2, /* (190) expr ::= expr ISNULL|NOTNULL */
- -3, /* (191) expr ::= expr NOT NULL */
- -3, /* (192) expr ::= expr IS expr */
- -4, /* (193) expr ::= expr IS NOT expr */
- -2, /* (194) expr ::= NOT expr */
- -2, /* (195) expr ::= BITNOT expr */
- -2, /* (196) expr ::= PLUS|MINUS expr */
- -1, /* (197) between_op ::= BETWEEN */
- -2, /* (198) between_op ::= NOT BETWEEN */
- -5, /* (199) expr ::= expr between_op expr AND expr */
- -1, /* (200) in_op ::= IN */
- -2, /* (201) in_op ::= NOT IN */
- -5, /* (202) expr ::= expr in_op LP exprlist RP */
- -3, /* (203) expr ::= LP select RP */
- -5, /* (204) expr ::= expr in_op LP select RP */
- -5, /* (205) expr ::= expr in_op nm dbnm paren_exprlist */
- -4, /* (206) expr ::= EXISTS LP select RP */
- -5, /* (207) expr ::= CASE case_operand case_exprlist case_else END */
- -5, /* (208) case_exprlist ::= case_exprlist WHEN expr THEN expr */
- -4, /* (209) case_exprlist ::= WHEN expr THEN expr */
- -2, /* (210) case_else ::= ELSE expr */
- 0, /* (211) case_else ::= */
- -1, /* (212) case_operand ::= expr */
- 0, /* (213) case_operand ::= */
- 0, /* (214) exprlist ::= */
- -3, /* (215) nexprlist ::= nexprlist COMMA expr */
- -1, /* (216) nexprlist ::= expr */
- 0, /* (217) paren_exprlist ::= */
- -3, /* (218) paren_exprlist ::= LP exprlist RP */
- -12, /* (219) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
- -1, /* (220) uniqueflag ::= UNIQUE */
- 0, /* (221) uniqueflag ::= */
- 0, /* (222) eidlist_opt ::= */
- -3, /* (223) eidlist_opt ::= LP eidlist RP */
- -5, /* (224) eidlist ::= eidlist COMMA nm collate sortorder */
- -3, /* (225) eidlist ::= nm collate sortorder */
- 0, /* (226) collate ::= */
- -2, /* (227) collate ::= COLLATE ID|STRING */
- -4, /* (228) cmd ::= DROP INDEX ifexists fullname */
- -2, /* (229) cmd ::= VACUUM vinto */
- -3, /* (230) cmd ::= VACUUM nm vinto */
- -2, /* (231) vinto ::= INTO expr */
- 0, /* (232) vinto ::= */
- -3, /* (233) cmd ::= PRAGMA nm dbnm */
- -5, /* (234) cmd ::= PRAGMA nm dbnm EQ nmnum */
- -6, /* (235) cmd ::= PRAGMA nm dbnm LP nmnum RP */
- -5, /* (236) cmd ::= PRAGMA nm dbnm EQ minus_num */
- -6, /* (237) cmd ::= PRAGMA nm dbnm LP minus_num RP */
- -2, /* (238) plus_num ::= PLUS INTEGER|FLOAT */
- -2, /* (239) minus_num ::= MINUS INTEGER|FLOAT */
- -5, /* (240) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
- -11, /* (241) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
- -1, /* (242) trigger_time ::= BEFORE|AFTER */
- -2, /* (243) trigger_time ::= INSTEAD OF */
- 0, /* (244) trigger_time ::= */
- -1, /* (245) trigger_event ::= DELETE|INSERT */
- -1, /* (246) trigger_event ::= UPDATE */
- -3, /* (247) trigger_event ::= UPDATE OF idlist */
- 0, /* (248) when_clause ::= */
- -2, /* (249) when_clause ::= WHEN expr */
- -3, /* (250) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
- -2, /* (251) trigger_cmd_list ::= trigger_cmd SEMI */
- -3, /* (252) trnm ::= nm DOT nm */
- -3, /* (253) tridxby ::= INDEXED BY nm */
- -2, /* (254) tridxby ::= NOT INDEXED */
- -8, /* (255) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */
- -8, /* (256) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
- -6, /* (257) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
- -3, /* (258) trigger_cmd ::= scanpt select scanpt */
- -4, /* (259) expr ::= RAISE LP IGNORE RP */
- -6, /* (260) expr ::= RAISE LP raisetype COMMA nm RP */
- -1, /* (261) raisetype ::= ROLLBACK */
- -1, /* (262) raisetype ::= ABORT */
- -1, /* (263) raisetype ::= FAIL */
- -4, /* (264) cmd ::= DROP TRIGGER ifexists fullname */
- -6, /* (265) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
- -3, /* (266) cmd ::= DETACH database_kw_opt expr */
- 0, /* (267) key_opt ::= */
- -2, /* (268) key_opt ::= KEY expr */
- -1, /* (269) cmd ::= REINDEX */
- -3, /* (270) cmd ::= REINDEX nm dbnm */
- -1, /* (271) cmd ::= ANALYZE */
- -3, /* (272) cmd ::= ANALYZE nm dbnm */
- -6, /* (273) cmd ::= ALTER TABLE fullname RENAME TO nm */
- -7, /* (274) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
- -1, /* (275) add_column_fullname ::= fullname */
- -8, /* (276) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
- -1, /* (277) cmd ::= create_vtab */
- -4, /* (278) cmd ::= create_vtab LP vtabarglist RP */
- -8, /* (279) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
- 0, /* (280) vtabarg ::= */
- -1, /* (281) vtabargtoken ::= ANY */
- -3, /* (282) vtabargtoken ::= lp anylist RP */
- -1, /* (283) lp ::= LP */
- -2, /* (284) with ::= WITH wqlist */
- -3, /* (285) with ::= WITH RECURSIVE wqlist */
- -6, /* (286) wqlist ::= nm eidlist_opt AS LP select RP */
- -8, /* (287) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
- -1, /* (288) windowdefn_list ::= windowdefn */
- -3, /* (289) windowdefn_list ::= windowdefn_list COMMA windowdefn */
- -3, /* (290) windowdefn ::= nm AS window */
- -5, /* (291) window ::= LP part_opt orderby_opt frame_opt RP */
- -3, /* (292) part_opt ::= PARTITION BY nexprlist */
- 0, /* (293) part_opt ::= */
- 0, /* (294) frame_opt ::= */
- -2, /* (295) frame_opt ::= range_or_rows frame_bound_s */
- -5, /* (296) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e */
- -1, /* (297) range_or_rows ::= RANGE */
- -1, /* (298) range_or_rows ::= ROWS */
- -1, /* (299) frame_bound_s ::= frame_bound */
- -2, /* (300) frame_bound_s ::= UNBOUNDED PRECEDING */
- -1, /* (301) frame_bound_e ::= frame_bound */
- -2, /* (302) frame_bound_e ::= UNBOUNDED FOLLOWING */
- -2, /* (303) frame_bound ::= expr PRECEDING */
- -2, /* (304) frame_bound ::= CURRENT ROW */
- -2, /* (305) frame_bound ::= expr FOLLOWING */
- -2, /* (306) window_clause ::= WINDOW windowdefn_list */
- -3, /* (307) over_clause ::= filter_opt OVER window */
- -3, /* (308) over_clause ::= filter_opt OVER nm */
- 0, /* (309) filter_opt ::= */
- -5, /* (310) filter_opt ::= FILTER LP WHERE expr RP */
- -1, /* (311) input ::= cmdlist */
- -2, /* (312) cmdlist ::= cmdlist ecmd */
- -1, /* (313) cmdlist ::= ecmd */
- -1, /* (314) ecmd ::= SEMI */
- -2, /* (315) ecmd ::= cmdx SEMI */
- -2, /* (316) ecmd ::= explain cmdx */
- 0, /* (317) trans_opt ::= */
- -1, /* (318) trans_opt ::= TRANSACTION */
- -2, /* (319) trans_opt ::= TRANSACTION nm */
- -1, /* (320) savepoint_opt ::= SAVEPOINT */
- 0, /* (321) savepoint_opt ::= */
- -2, /* (322) cmd ::= create_table create_table_args */
- -4, /* (323) columnlist ::= columnlist COMMA columnname carglist */
- -2, /* (324) columnlist ::= columnname carglist */
- -1, /* (325) nm ::= ID|INDEXED */
- -1, /* (326) nm ::= STRING */
- -1, /* (327) nm ::= JOIN_KW */
- -1, /* (328) typetoken ::= typename */
- -1, /* (329) typename ::= ID|STRING */
- -1, /* (330) signed ::= plus_num */
- -1, /* (331) signed ::= minus_num */
- -2, /* (332) carglist ::= carglist ccons */
- 0, /* (333) carglist ::= */
- -2, /* (334) ccons ::= NULL onconf */
- -2, /* (335) conslist_opt ::= COMMA conslist */
- -3, /* (336) conslist ::= conslist tconscomma tcons */
- -1, /* (337) conslist ::= tcons */
- 0, /* (338) tconscomma ::= */
- -1, /* (339) defer_subclause_opt ::= defer_subclause */
- -1, /* (340) resolvetype ::= raisetype */
- -1, /* (341) selectnowith ::= oneselect */
- -1, /* (342) oneselect ::= values */
- -2, /* (343) sclp ::= selcollist COMMA */
- -1, /* (344) as ::= ID|STRING */
- -1, /* (345) expr ::= term */
- -1, /* (346) likeop ::= LIKE_KW|MATCH */
- -1, /* (347) exprlist ::= nexprlist */
- -1, /* (348) nmnum ::= plus_num */
- -1, /* (349) nmnum ::= nm */
- -1, /* (350) nmnum ::= ON */
- -1, /* (351) nmnum ::= DELETE */
- -1, /* (352) nmnum ::= DEFAULT */
- -1, /* (353) plus_num ::= INTEGER|FLOAT */
- 0, /* (354) foreach_clause ::= */
- -3, /* (355) foreach_clause ::= FOR EACH ROW */
- -1, /* (356) trnm ::= nm */
- 0, /* (357) tridxby ::= */
- -1, /* (358) database_kw_opt ::= DATABASE */
- 0, /* (359) database_kw_opt ::= */
- 0, /* (360) kwcolumn_opt ::= */
- -1, /* (361) kwcolumn_opt ::= COLUMNKW */
- -1, /* (362) vtabarglist ::= vtabarg */
- -3, /* (363) vtabarglist ::= vtabarglist COMMA vtabarg */
- -2, /* (364) vtabarg ::= vtabarg vtabargtoken */
- 0, /* (365) anylist ::= */
- -4, /* (366) anylist ::= anylist LP anylist RP */
- -2, /* (367) anylist ::= anylist ANY */
- 0, /* (368) with ::= */
+ 0, /* (29) scantok ::= */
+ -2, /* (30) ccons ::= CONSTRAINT nm */
+ -3, /* (31) ccons ::= DEFAULT scantok term */
+ -4, /* (32) ccons ::= DEFAULT LP expr RP */
+ -4, /* (33) ccons ::= DEFAULT PLUS scantok term */
+ -4, /* (34) ccons ::= DEFAULT MINUS scantok term */
+ -3, /* (35) ccons ::= DEFAULT scantok ID|INDEXED */
+ -3, /* (36) ccons ::= NOT NULL onconf */
+ -5, /* (37) ccons ::= PRIMARY KEY sortorder onconf autoinc */
+ -2, /* (38) ccons ::= UNIQUE onconf */
+ -4, /* (39) ccons ::= CHECK LP expr RP */
+ -4, /* (40) ccons ::= REFERENCES nm eidlist_opt refargs */
+ -1, /* (41) ccons ::= defer_subclause */
+ -2, /* (42) ccons ::= COLLATE ID|STRING */
+ 0, /* (43) autoinc ::= */
+ -1, /* (44) autoinc ::= AUTOINCR */
+ 0, /* (45) refargs ::= */
+ -2, /* (46) refargs ::= refargs refarg */
+ -2, /* (47) refarg ::= MATCH nm */
+ -3, /* (48) refarg ::= ON INSERT refact */
+ -3, /* (49) refarg ::= ON DELETE refact */
+ -3, /* (50) refarg ::= ON UPDATE refact */
+ -2, /* (51) refact ::= SET NULL */
+ -2, /* (52) refact ::= SET DEFAULT */
+ -1, /* (53) refact ::= CASCADE */
+ -1, /* (54) refact ::= RESTRICT */
+ -2, /* (55) refact ::= NO ACTION */
+ -3, /* (56) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+ -2, /* (57) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ 0, /* (58) init_deferred_pred_opt ::= */
+ -2, /* (59) init_deferred_pred_opt ::= INITIALLY DEFERRED */
+ -2, /* (60) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+ 0, /* (61) conslist_opt ::= */
+ -1, /* (62) tconscomma ::= COMMA */
+ -2, /* (63) tcons ::= CONSTRAINT nm */
+ -7, /* (64) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
+ -5, /* (65) tcons ::= UNIQUE LP sortlist RP onconf */
+ -5, /* (66) tcons ::= CHECK LP expr RP onconf */
+ -10, /* (67) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
+ 0, /* (68) defer_subclause_opt ::= */
+ 0, /* (69) onconf ::= */
+ -3, /* (70) onconf ::= ON CONFLICT resolvetype */
+ 0, /* (71) orconf ::= */
+ -2, /* (72) orconf ::= OR resolvetype */
+ -1, /* (73) resolvetype ::= IGNORE */
+ -1, /* (74) resolvetype ::= REPLACE */
+ -4, /* (75) cmd ::= DROP TABLE ifexists fullname */
+ -2, /* (76) ifexists ::= IF EXISTS */
+ 0, /* (77) ifexists ::= */
+ -9, /* (78) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
+ -4, /* (79) cmd ::= DROP VIEW ifexists fullname */
+ -1, /* (80) cmd ::= select */
+ -3, /* (81) select ::= WITH wqlist selectnowith */
+ -4, /* (82) select ::= WITH RECURSIVE wqlist selectnowith */
+ -1, /* (83) select ::= selectnowith */
+ -3, /* (84) selectnowith ::= selectnowith multiselect_op oneselect */
+ -1, /* (85) multiselect_op ::= UNION */
+ -2, /* (86) multiselect_op ::= UNION ALL */
+ -1, /* (87) multiselect_op ::= EXCEPT|INTERSECT */
+ -9, /* (88) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ -10, /* (89) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
+ -4, /* (90) values ::= VALUES LP nexprlist RP */
+ -5, /* (91) values ::= values COMMA LP nexprlist RP */
+ -1, /* (92) distinct ::= DISTINCT */
+ -1, /* (93) distinct ::= ALL */
+ 0, /* (94) distinct ::= */
+ 0, /* (95) sclp ::= */
+ -5, /* (96) selcollist ::= sclp scanpt expr scanpt as */
+ -3, /* (97) selcollist ::= sclp scanpt STAR */
+ -5, /* (98) selcollist ::= sclp scanpt nm DOT STAR */
+ -2, /* (99) as ::= AS nm */
+ 0, /* (100) as ::= */
+ 0, /* (101) from ::= */
+ -2, /* (102) from ::= FROM seltablist */
+ -2, /* (103) stl_prefix ::= seltablist joinop */
+ 0, /* (104) stl_prefix ::= */
+ -7, /* (105) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
+ -9, /* (106) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
+ -7, /* (107) seltablist ::= stl_prefix LP select RP as on_opt using_opt */
+ -7, /* (108) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
+ 0, /* (109) dbnm ::= */
+ -2, /* (110) dbnm ::= DOT nm */
+ -1, /* (111) fullname ::= nm */
+ -3, /* (112) fullname ::= nm DOT nm */
+ -1, /* (113) xfullname ::= nm */
+ -3, /* (114) xfullname ::= nm DOT nm */
+ -5, /* (115) xfullname ::= nm DOT nm AS nm */
+ -3, /* (116) xfullname ::= nm AS nm */
+ -1, /* (117) joinop ::= COMMA|JOIN */
+ -2, /* (118) joinop ::= JOIN_KW JOIN */
+ -3, /* (119) joinop ::= JOIN_KW nm JOIN */
+ -4, /* (120) joinop ::= JOIN_KW nm nm JOIN */
+ -2, /* (121) on_opt ::= ON expr */
+ 0, /* (122) on_opt ::= */
+ 0, /* (123) indexed_opt ::= */
+ -3, /* (124) indexed_opt ::= INDEXED BY nm */
+ -2, /* (125) indexed_opt ::= NOT INDEXED */
+ -4, /* (126) using_opt ::= USING LP idlist RP */
+ 0, /* (127) using_opt ::= */
+ 0, /* (128) orderby_opt ::= */
+ -3, /* (129) orderby_opt ::= ORDER BY sortlist */
+ -4, /* (130) sortlist ::= sortlist COMMA expr sortorder */
+ -2, /* (131) sortlist ::= expr sortorder */
+ -1, /* (132) sortorder ::= ASC */
+ -1, /* (133) sortorder ::= DESC */
+ 0, /* (134) sortorder ::= */
+ 0, /* (135) groupby_opt ::= */
+ -3, /* (136) groupby_opt ::= GROUP BY nexprlist */
+ 0, /* (137) having_opt ::= */
+ -2, /* (138) having_opt ::= HAVING expr */
+ 0, /* (139) limit_opt ::= */
+ -2, /* (140) limit_opt ::= LIMIT expr */
+ -4, /* (141) limit_opt ::= LIMIT expr OFFSET expr */
+ -4, /* (142) limit_opt ::= LIMIT expr COMMA expr */
+ -6, /* (143) cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
+ 0, /* (144) where_opt ::= */
+ -2, /* (145) where_opt ::= WHERE expr */
+ -8, /* (146) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */
+ -5, /* (147) setlist ::= setlist COMMA nm EQ expr */
+ -7, /* (148) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ -3, /* (149) setlist ::= nm EQ expr */
+ -5, /* (150) setlist ::= LP idlist RP EQ expr */
+ -7, /* (151) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ -7, /* (152) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
+ 0, /* (153) upsert ::= */
+ -11, /* (154) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
+ -8, /* (155) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
+ -4, /* (156) upsert ::= ON CONFLICT DO NOTHING */
+ -2, /* (157) insert_cmd ::= INSERT orconf */
+ -1, /* (158) insert_cmd ::= REPLACE */
+ 0, /* (159) idlist_opt ::= */
+ -3, /* (160) idlist_opt ::= LP idlist RP */
+ -3, /* (161) idlist ::= idlist COMMA nm */
+ -1, /* (162) idlist ::= nm */
+ -3, /* (163) expr ::= LP expr RP */
+ -1, /* (164) expr ::= ID|INDEXED */
+ -1, /* (165) expr ::= JOIN_KW */
+ -3, /* (166) expr ::= nm DOT nm */
+ -5, /* (167) expr ::= nm DOT nm DOT nm */
+ -1, /* (168) term ::= NULL|FLOAT|BLOB */
+ -1, /* (169) term ::= STRING */
+ -1, /* (170) term ::= INTEGER */
+ -1, /* (171) expr ::= VARIABLE */
+ -3, /* (172) expr ::= expr COLLATE ID|STRING */
+ -6, /* (173) expr ::= CAST LP expr AS typetoken RP */
+ -5, /* (174) expr ::= ID|INDEXED LP distinct exprlist RP */
+ -4, /* (175) expr ::= ID|INDEXED LP STAR RP */
+ -6, /* (176) expr ::= ID|INDEXED LP distinct exprlist RP over_clause */
+ -5, /* (177) expr ::= ID|INDEXED LP STAR RP over_clause */
+ -1, /* (178) term ::= CTIME_KW */
+ -5, /* (179) expr ::= LP nexprlist COMMA expr RP */
+ -3, /* (180) expr ::= expr AND expr */
+ -3, /* (181) expr ::= expr OR expr */
+ -3, /* (182) expr ::= expr LT|GT|GE|LE expr */
+ -3, /* (183) expr ::= expr EQ|NE expr */
+ -3, /* (184) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ -3, /* (185) expr ::= expr PLUS|MINUS expr */
+ -3, /* (186) expr ::= expr STAR|SLASH|REM expr */
+ -3, /* (187) expr ::= expr CONCAT expr */
+ -2, /* (188) likeop ::= NOT LIKE_KW|MATCH */
+ -3, /* (189) expr ::= expr likeop expr */
+ -5, /* (190) expr ::= expr likeop expr ESCAPE expr */
+ -2, /* (191) expr ::= expr ISNULL|NOTNULL */
+ -3, /* (192) expr ::= expr NOT NULL */
+ -3, /* (193) expr ::= expr IS expr */
+ -4, /* (194) expr ::= expr IS NOT expr */
+ -2, /* (195) expr ::= NOT expr */
+ -2, /* (196) expr ::= BITNOT expr */
+ -2, /* (197) expr ::= PLUS|MINUS expr */
+ -1, /* (198) between_op ::= BETWEEN */
+ -2, /* (199) between_op ::= NOT BETWEEN */
+ -5, /* (200) expr ::= expr between_op expr AND expr */
+ -1, /* (201) in_op ::= IN */
+ -2, /* (202) in_op ::= NOT IN */
+ -5, /* (203) expr ::= expr in_op LP exprlist RP */
+ -3, /* (204) expr ::= LP select RP */
+ -5, /* (205) expr ::= expr in_op LP select RP */
+ -5, /* (206) expr ::= expr in_op nm dbnm paren_exprlist */
+ -4, /* (207) expr ::= EXISTS LP select RP */
+ -5, /* (208) expr ::= CASE case_operand case_exprlist case_else END */
+ -5, /* (209) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ -4, /* (210) case_exprlist ::= WHEN expr THEN expr */
+ -2, /* (211) case_else ::= ELSE expr */
+ 0, /* (212) case_else ::= */
+ -1, /* (213) case_operand ::= expr */
+ 0, /* (214) case_operand ::= */
+ 0, /* (215) exprlist ::= */
+ -3, /* (216) nexprlist ::= nexprlist COMMA expr */
+ -1, /* (217) nexprlist ::= expr */
+ 0, /* (218) paren_exprlist ::= */
+ -3, /* (219) paren_exprlist ::= LP exprlist RP */
+ -12, /* (220) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ -1, /* (221) uniqueflag ::= UNIQUE */
+ 0, /* (222) uniqueflag ::= */
+ 0, /* (223) eidlist_opt ::= */
+ -3, /* (224) eidlist_opt ::= LP eidlist RP */
+ -5, /* (225) eidlist ::= eidlist COMMA nm collate sortorder */
+ -3, /* (226) eidlist ::= nm collate sortorder */
+ 0, /* (227) collate ::= */
+ -2, /* (228) collate ::= COLLATE ID|STRING */
+ -4, /* (229) cmd ::= DROP INDEX ifexists fullname */
+ -2, /* (230) cmd ::= VACUUM vinto */
+ -3, /* (231) cmd ::= VACUUM nm vinto */
+ -2, /* (232) vinto ::= INTO expr */
+ 0, /* (233) vinto ::= */
+ -3, /* (234) cmd ::= PRAGMA nm dbnm */
+ -5, /* (235) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ -6, /* (236) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ -5, /* (237) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ -6, /* (238) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ -2, /* (239) plus_num ::= PLUS INTEGER|FLOAT */
+ -2, /* (240) minus_num ::= MINUS INTEGER|FLOAT */
+ -5, /* (241) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ -11, /* (242) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ -1, /* (243) trigger_time ::= BEFORE|AFTER */
+ -2, /* (244) trigger_time ::= INSTEAD OF */
+ 0, /* (245) trigger_time ::= */
+ -1, /* (246) trigger_event ::= DELETE|INSERT */
+ -1, /* (247) trigger_event ::= UPDATE */
+ -3, /* (248) trigger_event ::= UPDATE OF idlist */
+ 0, /* (249) when_clause ::= */
+ -2, /* (250) when_clause ::= WHEN expr */
+ -3, /* (251) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ -2, /* (252) trigger_cmd_list ::= trigger_cmd SEMI */
+ -3, /* (253) trnm ::= nm DOT nm */
+ -3, /* (254) tridxby ::= INDEXED BY nm */
+ -2, /* (255) tridxby ::= NOT INDEXED */
+ -8, /* (256) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */
+ -8, /* (257) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ -6, /* (258) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ -3, /* (259) trigger_cmd ::= scanpt select scanpt */
+ -4, /* (260) expr ::= RAISE LP IGNORE RP */
+ -6, /* (261) expr ::= RAISE LP raisetype COMMA nm RP */
+ -1, /* (262) raisetype ::= ROLLBACK */
+ -1, /* (263) raisetype ::= ABORT */
+ -1, /* (264) raisetype ::= FAIL */
+ -4, /* (265) cmd ::= DROP TRIGGER ifexists fullname */
+ -6, /* (266) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ -3, /* (267) cmd ::= DETACH database_kw_opt expr */
+ 0, /* (268) key_opt ::= */
+ -2, /* (269) key_opt ::= KEY expr */
+ -1, /* (270) cmd ::= REINDEX */
+ -3, /* (271) cmd ::= REINDEX nm dbnm */
+ -1, /* (272) cmd ::= ANALYZE */
+ -3, /* (273) cmd ::= ANALYZE nm dbnm */
+ -6, /* (274) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ -7, /* (275) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ -1, /* (276) add_column_fullname ::= fullname */
+ -8, /* (277) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ -1, /* (278) cmd ::= create_vtab */
+ -4, /* (279) cmd ::= create_vtab LP vtabarglist RP */
+ -8, /* (280) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ 0, /* (281) vtabarg ::= */
+ -1, /* (282) vtabargtoken ::= ANY */
+ -3, /* (283) vtabargtoken ::= lp anylist RP */
+ -1, /* (284) lp ::= LP */
+ -2, /* (285) with ::= WITH wqlist */
+ -3, /* (286) with ::= WITH RECURSIVE wqlist */
+ -6, /* (287) wqlist ::= nm eidlist_opt AS LP select RP */
+ -8, /* (288) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
+ -1, /* (289) windowdefn_list ::= windowdefn */
+ -3, /* (290) windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ -5, /* (291) windowdefn ::= nm AS LP window RP */
+ -5, /* (292) window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ -6, /* (293) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ -4, /* (294) window ::= ORDER BY sortlist frame_opt */
+ -5, /* (295) window ::= nm ORDER BY sortlist frame_opt */
+ -1, /* (296) window ::= frame_opt */
+ -2, /* (297) window ::= nm frame_opt */
+ 0, /* (298) frame_opt ::= */
+ -3, /* (299) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ -6, /* (300) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ -1, /* (301) range_or_rows ::= RANGE|ROWS|GROUPS */
+ -1, /* (302) frame_bound_s ::= frame_bound */
+ -2, /* (303) frame_bound_s ::= UNBOUNDED PRECEDING */
+ -1, /* (304) frame_bound_e ::= frame_bound */
+ -2, /* (305) frame_bound_e ::= UNBOUNDED FOLLOWING */
+ -2, /* (306) frame_bound ::= expr PRECEDING|FOLLOWING */
+ -2, /* (307) frame_bound ::= CURRENT ROW */
+ 0, /* (308) frame_exclude_opt ::= */
+ -2, /* (309) frame_exclude_opt ::= EXCLUDE frame_exclude */
+ -2, /* (310) frame_exclude ::= NO OTHERS */
+ -2, /* (311) frame_exclude ::= CURRENT ROW */
+ -1, /* (312) frame_exclude ::= GROUP|TIES */
+ -2, /* (313) window_clause ::= WINDOW windowdefn_list */
+ -5, /* (314) over_clause ::= filter_opt OVER LP window RP */
+ -3, /* (315) over_clause ::= filter_opt OVER nm */
+ 0, /* (316) filter_opt ::= */
+ -5, /* (317) filter_opt ::= FILTER LP WHERE expr RP */
+ -1, /* (318) input ::= cmdlist */
+ -2, /* (319) cmdlist ::= cmdlist ecmd */
+ -1, /* (320) cmdlist ::= ecmd */
+ -1, /* (321) ecmd ::= SEMI */
+ -2, /* (322) ecmd ::= cmdx SEMI */
+ -2, /* (323) ecmd ::= explain cmdx */
+ 0, /* (324) trans_opt ::= */
+ -1, /* (325) trans_opt ::= TRANSACTION */
+ -2, /* (326) trans_opt ::= TRANSACTION nm */
+ -1, /* (327) savepoint_opt ::= SAVEPOINT */
+ 0, /* (328) savepoint_opt ::= */
+ -2, /* (329) cmd ::= create_table create_table_args */
+ -4, /* (330) columnlist ::= columnlist COMMA columnname carglist */
+ -2, /* (331) columnlist ::= columnname carglist */
+ -1, /* (332) nm ::= ID|INDEXED */
+ -1, /* (333) nm ::= STRING */
+ -1, /* (334) nm ::= JOIN_KW */
+ -1, /* (335) typetoken ::= typename */
+ -1, /* (336) typename ::= ID|STRING */
+ -1, /* (337) signed ::= plus_num */
+ -1, /* (338) signed ::= minus_num */
+ -2, /* (339) carglist ::= carglist ccons */
+ 0, /* (340) carglist ::= */
+ -2, /* (341) ccons ::= NULL onconf */
+ -2, /* (342) conslist_opt ::= COMMA conslist */
+ -3, /* (343) conslist ::= conslist tconscomma tcons */
+ -1, /* (344) conslist ::= tcons */
+ 0, /* (345) tconscomma ::= */
+ -1, /* (346) defer_subclause_opt ::= defer_subclause */
+ -1, /* (347) resolvetype ::= raisetype */
+ -1, /* (348) selectnowith ::= oneselect */
+ -1, /* (349) oneselect ::= values */
+ -2, /* (350) sclp ::= selcollist COMMA */
+ -1, /* (351) as ::= ID|STRING */
+ -1, /* (352) expr ::= term */
+ -1, /* (353) likeop ::= LIKE_KW|MATCH */
+ -1, /* (354) exprlist ::= nexprlist */
+ -1, /* (355) nmnum ::= plus_num */
+ -1, /* (356) nmnum ::= nm */
+ -1, /* (357) nmnum ::= ON */
+ -1, /* (358) nmnum ::= DELETE */
+ -1, /* (359) nmnum ::= DEFAULT */
+ -1, /* (360) plus_num ::= INTEGER|FLOAT */
+ 0, /* (361) foreach_clause ::= */
+ -3, /* (362) foreach_clause ::= FOR EACH ROW */
+ -1, /* (363) trnm ::= nm */
+ 0, /* (364) tridxby ::= */
+ -1, /* (365) database_kw_opt ::= DATABASE */
+ 0, /* (366) database_kw_opt ::= */
+ 0, /* (367) kwcolumn_opt ::= */
+ -1, /* (368) kwcolumn_opt ::= COLUMNKW */
+ -1, /* (369) vtabarglist ::= vtabarg */
+ -3, /* (370) vtabarglist ::= vtabarglist COMMA vtabarg */
+ -2, /* (371) vtabarg ::= vtabarg vtabargtoken */
+ 0, /* (372) anylist ::= */
+ -4, /* (373) anylist ::= anylist LP anylist RP */
+ -2, /* (374) anylist ::= anylist ANY */
+ 0, /* (375) with ::= */
};
static void yy_accept(yyParser*); /* Forward Declaration */
@@ -150427,15 +151899,16 @@ static YYACTIONTYPE yy_reduce(
{ sqlite3FinishCoding(pParse); }
break;
case 3: /* cmd ::= BEGIN transtype trans_opt */
-{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy96);}
+{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy100);}
break;
case 4: /* transtype ::= */
-{yymsp[1].minor.yy96 = TK_DEFERRED;}
+{yymsp[1].minor.yy100 = TK_DEFERRED;}
break;
case 5: /* transtype ::= DEFERRED */
case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6);
case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7);
-{yymsp[0].minor.yy96 = yymsp[0].major; /*A-overwrites-X*/}
+ case 301: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==301);
+{yymsp[0].minor.yy100 = yymsp[0].major; /*A-overwrites-X*/}
break;
case 8: /* cmd ::= COMMIT|END trans_opt */
case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9);
@@ -150458,7 +151931,7 @@ static YYACTIONTYPE yy_reduce(
break;
case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
{
- sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy96,0,0,yymsp[-2].minor.yy96);
+ sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy100,0,0,yymsp[-2].minor.yy100);
}
break;
case 14: /* createkw ::= CREATE */
@@ -150467,38 +151940,38 @@ static YYACTIONTYPE yy_reduce(
case 15: /* ifnotexists ::= */
case 18: /* temp ::= */ yytestcase(yyruleno==18);
case 21: /* table_options ::= */ yytestcase(yyruleno==21);
- case 42: /* autoinc ::= */ yytestcase(yyruleno==42);
- case 57: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==57);
- case 67: /* defer_subclause_opt ::= */ yytestcase(yyruleno==67);
- case 76: /* ifexists ::= */ yytestcase(yyruleno==76);
- case 93: /* distinct ::= */ yytestcase(yyruleno==93);
- case 226: /* collate ::= */ yytestcase(yyruleno==226);
-{yymsp[1].minor.yy96 = 0;}
+ case 43: /* autoinc ::= */ yytestcase(yyruleno==43);
+ case 58: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==58);
+ case 68: /* defer_subclause_opt ::= */ yytestcase(yyruleno==68);
+ case 77: /* ifexists ::= */ yytestcase(yyruleno==77);
+ case 94: /* distinct ::= */ yytestcase(yyruleno==94);
+ case 227: /* collate ::= */ yytestcase(yyruleno==227);
+{yymsp[1].minor.yy100 = 0;}
break;
case 16: /* ifnotexists ::= IF NOT EXISTS */
-{yymsp[-2].minor.yy96 = 1;}
+{yymsp[-2].minor.yy100 = 1;}
break;
case 17: /* temp ::= TEMP */
- case 43: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==43);
-{yymsp[0].minor.yy96 = 1;}
+ case 44: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==44);
+{yymsp[0].minor.yy100 = 1;}
break;
case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_options */
{
- sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy96,0);
+ sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy100,0);
}
break;
case 20: /* create_table_args ::= AS select */
{
- sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy423);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy423);
+ sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy391);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy391);
}
break;
case 22: /* table_options ::= WITHOUT nm */
{
if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){
- yymsp[-1].minor.yy96 = TF_WithoutRowid | TF_NoVisibleRowid;
+ yymsp[-1].minor.yy100 = TF_WithoutRowid | TF_NoVisibleRowid;
}else{
- yymsp[-1].minor.yy96 = 0;
+ yymsp[-1].minor.yy100 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
@@ -150507,8 +151980,8 @@ static YYACTIONTYPE yy_reduce(
{sqlite3AddColumn(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
break;
case 24: /* typetoken ::= */
- case 60: /* conslist_opt ::= */ yytestcase(yyruleno==60);
- case 99: /* as ::= */ yytestcase(yyruleno==99);
+ case 61: /* conslist_opt ::= */ yytestcase(yyruleno==61);
+ case 100: /* as ::= */ yytestcase(yyruleno==100);
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;}
break;
case 25: /* typetoken ::= typename LP signed RP */
@@ -150527,29 +152000,35 @@ static YYACTIONTYPE yy_reduce(
case 28: /* scanpt ::= */
{
assert( yyLookahead!=YYNOCODE );
- yymsp[1].minor.yy464 = yyLookaheadToken.z;
+ yymsp[1].minor.yy528 = yyLookaheadToken.z;
+}
+ break;
+ case 29: /* scantok ::= */
+{
+ assert( yyLookahead!=YYNOCODE );
+ yymsp[1].minor.yy0 = yyLookaheadToken;
}
break;
- case 29: /* ccons ::= CONSTRAINT nm */
- case 62: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==62);
+ case 30: /* ccons ::= CONSTRAINT nm */
+ case 63: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==63);
{pParse->constraintName = yymsp[0].minor.yy0;}
break;
- case 30: /* ccons ::= DEFAULT scanpt term scanpt */
-{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy490,yymsp[-2].minor.yy464,yymsp[0].minor.yy464);}
+ case 31: /* ccons ::= DEFAULT scantok term */
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy102,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
break;
- case 31: /* ccons ::= DEFAULT LP expr RP */
-{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy490,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
+ case 32: /* ccons ::= DEFAULT LP expr RP */
+{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy102,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
break;
- case 32: /* ccons ::= DEFAULT PLUS term scanpt */
-{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy490,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy464);}
+ case 33: /* ccons ::= DEFAULT PLUS scantok term */
+{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy102,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
break;
- case 33: /* ccons ::= DEFAULT MINUS term scanpt */
+ case 34: /* ccons ::= DEFAULT MINUS scantok term */
{
- Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[-1].minor.yy490, 0);
- sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy464);
+ Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy102, 0);
+ sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);
}
break;
- case 34: /* ccons ::= DEFAULT scanpt ID|INDEXED */
+ case 35: /* ccons ::= DEFAULT scantok ID|INDEXED */
{
Expr *p = tokenExpr(pParse, TK_STRING, yymsp[0].minor.yy0);
if( p ){
@@ -150559,171 +152038,171 @@ static YYACTIONTYPE yy_reduce(
sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n);
}
break;
- case 35: /* ccons ::= NOT NULL onconf */
-{sqlite3AddNotNull(pParse, yymsp[0].minor.yy96);}
+ case 36: /* ccons ::= NOT NULL onconf */
+{sqlite3AddNotNull(pParse, yymsp[0].minor.yy100);}
break;
- case 36: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
-{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy96,yymsp[0].minor.yy96,yymsp[-2].minor.yy96);}
+ case 37: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
+{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy100,yymsp[0].minor.yy100,yymsp[-2].minor.yy100);}
break;
- case 37: /* ccons ::= UNIQUE onconf */
-{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy96,0,0,0,0,
+ case 38: /* ccons ::= UNIQUE onconf */
+{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy100,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
break;
- case 38: /* ccons ::= CHECK LP expr RP */
-{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy490);}
+ case 39: /* ccons ::= CHECK LP expr RP */
+{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy102);}
break;
- case 39: /* ccons ::= REFERENCES nm eidlist_opt refargs */
-{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy42,yymsp[0].minor.yy96);}
+ case 40: /* ccons ::= REFERENCES nm eidlist_opt refargs */
+{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy94,yymsp[0].minor.yy100);}
break;
- case 40: /* ccons ::= defer_subclause */
-{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy96);}
+ case 41: /* ccons ::= defer_subclause */
+{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy100);}
break;
- case 41: /* ccons ::= COLLATE ID|STRING */
+ case 42: /* ccons ::= COLLATE ID|STRING */
{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
break;
- case 44: /* refargs ::= */
-{ yymsp[1].minor.yy96 = OE_None*0x0101; /* EV: R-19803-45884 */}
+ case 45: /* refargs ::= */
+{ yymsp[1].minor.yy100 = OE_None*0x0101; /* EV: R-19803-45884 */}
break;
- case 45: /* refargs ::= refargs refarg */
-{ yymsp[-1].minor.yy96 = (yymsp[-1].minor.yy96 & ~yymsp[0].minor.yy367.mask) | yymsp[0].minor.yy367.value; }
+ case 46: /* refargs ::= refargs refarg */
+{ yymsp[-1].minor.yy100 = (yymsp[-1].minor.yy100 & ~yymsp[0].minor.yy199.mask) | yymsp[0].minor.yy199.value; }
break;
- case 46: /* refarg ::= MATCH nm */
-{ yymsp[-1].minor.yy367.value = 0; yymsp[-1].minor.yy367.mask = 0x000000; }
+ case 47: /* refarg ::= MATCH nm */
+{ yymsp[-1].minor.yy199.value = 0; yymsp[-1].minor.yy199.mask = 0x000000; }
break;
- case 47: /* refarg ::= ON INSERT refact */
-{ yymsp[-2].minor.yy367.value = 0; yymsp[-2].minor.yy367.mask = 0x000000; }
+ case 48: /* refarg ::= ON INSERT refact */
+{ yymsp[-2].minor.yy199.value = 0; yymsp[-2].minor.yy199.mask = 0x000000; }
break;
- case 48: /* refarg ::= ON DELETE refact */
-{ yymsp[-2].minor.yy367.value = yymsp[0].minor.yy96; yymsp[-2].minor.yy367.mask = 0x0000ff; }
+ case 49: /* refarg ::= ON DELETE refact */
+{ yymsp[-2].minor.yy199.value = yymsp[0].minor.yy100; yymsp[-2].minor.yy199.mask = 0x0000ff; }
break;
- case 49: /* refarg ::= ON UPDATE refact */
-{ yymsp[-2].minor.yy367.value = yymsp[0].minor.yy96<<8; yymsp[-2].minor.yy367.mask = 0x00ff00; }
+ case 50: /* refarg ::= ON UPDATE refact */
+{ yymsp[-2].minor.yy199.value = yymsp[0].minor.yy100<<8; yymsp[-2].minor.yy199.mask = 0x00ff00; }
break;
- case 50: /* refact ::= SET NULL */
-{ yymsp[-1].minor.yy96 = OE_SetNull; /* EV: R-33326-45252 */}
+ case 51: /* refact ::= SET NULL */
+{ yymsp[-1].minor.yy100 = OE_SetNull; /* EV: R-33326-45252 */}
break;
- case 51: /* refact ::= SET DEFAULT */
-{ yymsp[-1].minor.yy96 = OE_SetDflt; /* EV: R-33326-45252 */}
+ case 52: /* refact ::= SET DEFAULT */
+{ yymsp[-1].minor.yy100 = OE_SetDflt; /* EV: R-33326-45252 */}
break;
- case 52: /* refact ::= CASCADE */
-{ yymsp[0].minor.yy96 = OE_Cascade; /* EV: R-33326-45252 */}
+ case 53: /* refact ::= CASCADE */
+{ yymsp[0].minor.yy100 = OE_Cascade; /* EV: R-33326-45252 */}
break;
- case 53: /* refact ::= RESTRICT */
-{ yymsp[0].minor.yy96 = OE_Restrict; /* EV: R-33326-45252 */}
+ case 54: /* refact ::= RESTRICT */
+{ yymsp[0].minor.yy100 = OE_Restrict; /* EV: R-33326-45252 */}
break;
- case 54: /* refact ::= NO ACTION */
-{ yymsp[-1].minor.yy96 = OE_None; /* EV: R-33326-45252 */}
+ case 55: /* refact ::= NO ACTION */
+{ yymsp[-1].minor.yy100 = OE_None; /* EV: R-33326-45252 */}
break;
- case 55: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
-{yymsp[-2].minor.yy96 = 0;}
+ case 56: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+{yymsp[-2].minor.yy100 = 0;}
break;
- case 56: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
- case 71: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==71);
- case 156: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==156);
-{yymsp[-1].minor.yy96 = yymsp[0].minor.yy96;}
+ case 57: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ case 72: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==72);
+ case 157: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==157);
+{yymsp[-1].minor.yy100 = yymsp[0].minor.yy100;}
break;
- case 58: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
- case 75: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==75);
- case 198: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==198);
- case 201: /* in_op ::= NOT IN */ yytestcase(yyruleno==201);
- case 227: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==227);
-{yymsp[-1].minor.yy96 = 1;}
+ case 59: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
+ case 76: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==76);
+ case 199: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==199);
+ case 202: /* in_op ::= NOT IN */ yytestcase(yyruleno==202);
+ case 228: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==228);
+{yymsp[-1].minor.yy100 = 1;}
break;
- case 59: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
-{yymsp[-1].minor.yy96 = 0;}
+ case 60: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+{yymsp[-1].minor.yy100 = 0;}
break;
- case 61: /* tconscomma ::= COMMA */
+ case 62: /* tconscomma ::= COMMA */
{pParse->constraintName.n = 0;}
break;
- case 63: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
-{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy42,yymsp[0].minor.yy96,yymsp[-2].minor.yy96,0);}
+ case 64: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
+{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy94,yymsp[0].minor.yy100,yymsp[-2].minor.yy100,0);}
break;
- case 64: /* tcons ::= UNIQUE LP sortlist RP onconf */
-{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy42,yymsp[0].minor.yy96,0,0,0,0,
+ case 65: /* tcons ::= UNIQUE LP sortlist RP onconf */
+{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy94,yymsp[0].minor.yy100,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
break;
- case 65: /* tcons ::= CHECK LP expr RP onconf */
-{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy490);}
+ case 66: /* tcons ::= CHECK LP expr RP onconf */
+{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy102);}
break;
- case 66: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
+ case 67: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
{
- sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy42, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy42, yymsp[-1].minor.yy96);
- sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy96);
+ sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy94, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy94, yymsp[-1].minor.yy100);
+ sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy100);
}
break;
- case 68: /* onconf ::= */
- case 70: /* orconf ::= */ yytestcase(yyruleno==70);
-{yymsp[1].minor.yy96 = OE_Default;}
+ case 69: /* onconf ::= */
+ case 71: /* orconf ::= */ yytestcase(yyruleno==71);
+{yymsp[1].minor.yy100 = OE_Default;}
break;
- case 69: /* onconf ::= ON CONFLICT resolvetype */
-{yymsp[-2].minor.yy96 = yymsp[0].minor.yy96;}
+ case 70: /* onconf ::= ON CONFLICT resolvetype */
+{yymsp[-2].minor.yy100 = yymsp[0].minor.yy100;}
break;
- case 72: /* resolvetype ::= IGNORE */
-{yymsp[0].minor.yy96 = OE_Ignore;}
+ case 73: /* resolvetype ::= IGNORE */
+{yymsp[0].minor.yy100 = OE_Ignore;}
break;
- case 73: /* resolvetype ::= REPLACE */
- case 157: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==157);
-{yymsp[0].minor.yy96 = OE_Replace;}
+ case 74: /* resolvetype ::= REPLACE */
+ case 158: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==158);
+{yymsp[0].minor.yy100 = OE_Replace;}
break;
- case 74: /* cmd ::= DROP TABLE ifexists fullname */
+ case 75: /* cmd ::= DROP TABLE ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy167, 0, yymsp[-1].minor.yy96);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy407, 0, yymsp[-1].minor.yy100);
}
break;
- case 77: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
+ case 78: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
{
- sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy42, yymsp[0].minor.yy423, yymsp[-7].minor.yy96, yymsp[-5].minor.yy96);
+ sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy94, yymsp[0].minor.yy391, yymsp[-7].minor.yy100, yymsp[-5].minor.yy100);
}
break;
- case 78: /* cmd ::= DROP VIEW ifexists fullname */
+ case 79: /* cmd ::= DROP VIEW ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy167, 1, yymsp[-1].minor.yy96);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy407, 1, yymsp[-1].minor.yy100);
}
break;
- case 79: /* cmd ::= select */
+ case 80: /* cmd ::= select */
{
SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
- sqlite3Select(pParse, yymsp[0].minor.yy423, &dest);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy423);
+ sqlite3Select(pParse, yymsp[0].minor.yy391, &dest);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy391);
}
break;
- case 80: /* select ::= WITH wqlist selectnowith */
+ case 81: /* select ::= WITH wqlist selectnowith */
{
- Select *p = yymsp[0].minor.yy423;
+ Select *p = yymsp[0].minor.yy391;
if( p ){
- p->pWith = yymsp[-1].minor.yy499;
+ p->pWith = yymsp[-1].minor.yy243;
parserDoubleLinkSelect(pParse, p);
}else{
- sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy499);
+ sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy243);
}
- yymsp[-2].minor.yy423 = p;
+ yymsp[-2].minor.yy391 = p;
}
break;
- case 81: /* select ::= WITH RECURSIVE wqlist selectnowith */
+ case 82: /* select ::= WITH RECURSIVE wqlist selectnowith */
{
- Select *p = yymsp[0].minor.yy423;
+ Select *p = yymsp[0].minor.yy391;
if( p ){
- p->pWith = yymsp[-1].minor.yy499;
+ p->pWith = yymsp[-1].minor.yy243;
parserDoubleLinkSelect(pParse, p);
}else{
- sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy499);
+ sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy243);
}
- yymsp[-3].minor.yy423 = p;
+ yymsp[-3].minor.yy391 = p;
}
break;
- case 82: /* select ::= selectnowith */
+ case 83: /* select ::= selectnowith */
{
- Select *p = yymsp[0].minor.yy423;
+ Select *p = yymsp[0].minor.yy391;
if( p ){
parserDoubleLinkSelect(pParse, p);
}
- yymsp[0].minor.yy423 = p; /*A-overwrites-X*/
+ yymsp[0].minor.yy391 = p; /*A-overwrites-X*/
}
break;
- case 83: /* selectnowith ::= selectnowith multiselect_op oneselect */
+ case 84: /* selectnowith ::= selectnowith multiselect_op oneselect */
{
- Select *pRhs = yymsp[0].minor.yy423;
- Select *pLhs = yymsp[-2].minor.yy423;
+ Select *pRhs = yymsp[0].minor.yy391;
+ Select *pLhs = yymsp[-2].minor.yy391;
if( pRhs && pRhs->pPrior ){
SrcList *pFrom;
Token x;
@@ -150733,142 +152212,142 @@ static YYACTIONTYPE yy_reduce(
pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
}
if( pRhs ){
- pRhs->op = (u8)yymsp[-1].minor.yy96;
+ pRhs->op = (u8)yymsp[-1].minor.yy100;
pRhs->pPrior = pLhs;
if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
pRhs->selFlags &= ~SF_MultiValue;
- if( yymsp[-1].minor.yy96!=TK_ALL ) pParse->hasCompound = 1;
+ if( yymsp[-1].minor.yy100!=TK_ALL ) pParse->hasCompound = 1;
}else{
sqlite3SelectDelete(pParse->db, pLhs);
}
- yymsp[-2].minor.yy423 = pRhs;
+ yymsp[-2].minor.yy391 = pRhs;
}
break;
- case 84: /* multiselect_op ::= UNION */
- case 86: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==86);
-{yymsp[0].minor.yy96 = yymsp[0].major; /*A-overwrites-OP*/}
+ case 85: /* multiselect_op ::= UNION */
+ case 87: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==87);
+{yymsp[0].minor.yy100 = yymsp[0].major; /*A-overwrites-OP*/}
break;
- case 85: /* multiselect_op ::= UNION ALL */
-{yymsp[-1].minor.yy96 = TK_ALL;}
+ case 86: /* multiselect_op ::= UNION ALL */
+{yymsp[-1].minor.yy100 = TK_ALL;}
break;
- case 87: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ case 88: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
{
- yymsp[-8].minor.yy423 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy42,yymsp[-5].minor.yy167,yymsp[-4].minor.yy490,yymsp[-3].minor.yy42,yymsp[-2].minor.yy490,yymsp[-1].minor.yy42,yymsp[-7].minor.yy96,yymsp[0].minor.yy490);
+ yymsp[-8].minor.yy391 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy94,yymsp[-5].minor.yy407,yymsp[-4].minor.yy102,yymsp[-3].minor.yy94,yymsp[-2].minor.yy102,yymsp[-1].minor.yy94,yymsp[-7].minor.yy100,yymsp[0].minor.yy102);
}
break;
- case 88: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
+ case 89: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
{
- yymsp[-9].minor.yy423 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy42,yymsp[-6].minor.yy167,yymsp[-5].minor.yy490,yymsp[-4].minor.yy42,yymsp[-3].minor.yy490,yymsp[-1].minor.yy42,yymsp[-8].minor.yy96,yymsp[0].minor.yy490);
- if( yymsp[-9].minor.yy423 ){
- yymsp[-9].minor.yy423->pWinDefn = yymsp[-2].minor.yy147;
+ yymsp[-9].minor.yy391 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy94,yymsp[-6].minor.yy407,yymsp[-5].minor.yy102,yymsp[-4].minor.yy94,yymsp[-3].minor.yy102,yymsp[-1].minor.yy94,yymsp[-8].minor.yy100,yymsp[0].minor.yy102);
+ if( yymsp[-9].minor.yy391 ){
+ yymsp[-9].minor.yy391->pWinDefn = yymsp[-2].minor.yy379;
}else{
- sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy147);
+ sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy379);
}
}
break;
- case 89: /* values ::= VALUES LP nexprlist RP */
+ case 90: /* values ::= VALUES LP nexprlist RP */
{
- yymsp[-3].minor.yy423 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy42,0,0,0,0,0,SF_Values,0);
+ yymsp[-3].minor.yy391 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy94,0,0,0,0,0,SF_Values,0);
}
break;
- case 90: /* values ::= values COMMA LP nexprlist RP */
+ case 91: /* values ::= values COMMA LP nexprlist RP */
{
- Select *pRight, *pLeft = yymsp[-4].minor.yy423;
- pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy42,0,0,0,0,0,SF_Values|SF_MultiValue,0);
+ Select *pRight, *pLeft = yymsp[-4].minor.yy391;
+ pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy94,0,0,0,0,0,SF_Values|SF_MultiValue,0);
if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
if( pRight ){
pRight->op = TK_ALL;
pRight->pPrior = pLeft;
- yymsp[-4].minor.yy423 = pRight;
+ yymsp[-4].minor.yy391 = pRight;
}else{
- yymsp[-4].minor.yy423 = pLeft;
+ yymsp[-4].minor.yy391 = pLeft;
}
}
break;
- case 91: /* distinct ::= DISTINCT */
-{yymsp[0].minor.yy96 = SF_Distinct;}
+ case 92: /* distinct ::= DISTINCT */
+{yymsp[0].minor.yy100 = SF_Distinct;}
break;
- case 92: /* distinct ::= ALL */
-{yymsp[0].minor.yy96 = SF_All;}
+ case 93: /* distinct ::= ALL */
+{yymsp[0].minor.yy100 = SF_All;}
break;
- case 94: /* sclp ::= */
- case 127: /* orderby_opt ::= */ yytestcase(yyruleno==127);
- case 134: /* groupby_opt ::= */ yytestcase(yyruleno==134);
- case 214: /* exprlist ::= */ yytestcase(yyruleno==214);
- case 217: /* paren_exprlist ::= */ yytestcase(yyruleno==217);
- case 222: /* eidlist_opt ::= */ yytestcase(yyruleno==222);
-{yymsp[1].minor.yy42 = 0;}
+ case 95: /* sclp ::= */
+ case 128: /* orderby_opt ::= */ yytestcase(yyruleno==128);
+ case 135: /* groupby_opt ::= */ yytestcase(yyruleno==135);
+ case 215: /* exprlist ::= */ yytestcase(yyruleno==215);
+ case 218: /* paren_exprlist ::= */ yytestcase(yyruleno==218);
+ case 223: /* eidlist_opt ::= */ yytestcase(yyruleno==223);
+{yymsp[1].minor.yy94 = 0;}
break;
- case 95: /* selcollist ::= sclp scanpt expr scanpt as */
+ case 96: /* selcollist ::= sclp scanpt expr scanpt as */
{
- yymsp[-4].minor.yy42 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy42, yymsp[-2].minor.yy490);
- if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy42, &yymsp[0].minor.yy0, 1);
- sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy42,yymsp[-3].minor.yy464,yymsp[-1].minor.yy464);
+ yymsp[-4].minor.yy94 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy94, yymsp[-2].minor.yy102);
+ if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy94, &yymsp[0].minor.yy0, 1);
+ sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy94,yymsp[-3].minor.yy528,yymsp[-1].minor.yy528);
}
break;
- case 96: /* selcollist ::= sclp scanpt STAR */
+ case 97: /* selcollist ::= sclp scanpt STAR */
{
Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
- yymsp[-2].minor.yy42 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy42, p);
+ yymsp[-2].minor.yy94 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy94, p);
}
break;
- case 97: /* selcollist ::= sclp scanpt nm DOT STAR */
+ case 98: /* selcollist ::= sclp scanpt nm DOT STAR */
{
Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
- yymsp[-4].minor.yy42 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy42, pDot);
+ yymsp[-4].minor.yy94 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy94, pDot);
}
break;
- case 98: /* as ::= AS nm */
- case 109: /* dbnm ::= DOT nm */ yytestcase(yyruleno==109);
- case 238: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==238);
- case 239: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==239);
+ case 99: /* as ::= AS nm */
+ case 110: /* dbnm ::= DOT nm */ yytestcase(yyruleno==110);
+ case 239: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==239);
+ case 240: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==240);
{yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
break;
- case 100: /* from ::= */
-{yymsp[1].minor.yy167 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy167));}
+ case 101: /* from ::= */
+{yymsp[1].minor.yy407 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy407));}
break;
- case 101: /* from ::= FROM seltablist */
+ case 102: /* from ::= FROM seltablist */
{
- yymsp[-1].minor.yy167 = yymsp[0].minor.yy167;
- sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy167);
+ yymsp[-1].minor.yy407 = yymsp[0].minor.yy407;
+ sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy407);
}
break;
- case 102: /* stl_prefix ::= seltablist joinop */
+ case 103: /* stl_prefix ::= seltablist joinop */
{
- if( ALWAYS(yymsp[-1].minor.yy167 && yymsp[-1].minor.yy167->nSrc>0) ) yymsp[-1].minor.yy167->a[yymsp[-1].minor.yy167->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy96;
+ if( ALWAYS(yymsp[-1].minor.yy407 && yymsp[-1].minor.yy407->nSrc>0) ) yymsp[-1].minor.yy407->a[yymsp[-1].minor.yy407->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy100;
}
break;
- case 103: /* stl_prefix ::= */
-{yymsp[1].minor.yy167 = 0;}
+ case 104: /* stl_prefix ::= */
+{yymsp[1].minor.yy407 = 0;}
break;
- case 104: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
+ case 105: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
{
- yymsp[-6].minor.yy167 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy167,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy490,yymsp[0].minor.yy336);
- sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy167, &yymsp[-2].minor.yy0);
+ yymsp[-6].minor.yy407 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy407,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy102,yymsp[0].minor.yy76);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy407, &yymsp[-2].minor.yy0);
}
break;
- case 105: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
+ case 106: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
{
- yymsp[-8].minor.yy167 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy167,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy490,yymsp[0].minor.yy336);
- sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy167, yymsp[-4].minor.yy42);
+ yymsp[-8].minor.yy407 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy407,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy102,yymsp[0].minor.yy76);
+ sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy407, yymsp[-4].minor.yy94);
}
break;
- case 106: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
+ case 107: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
{
- yymsp[-6].minor.yy167 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy167,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy423,yymsp[-1].minor.yy490,yymsp[0].minor.yy336);
+ yymsp[-6].minor.yy407 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy407,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy391,yymsp[-1].minor.yy102,yymsp[0].minor.yy76);
}
break;
- case 107: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
+ case 108: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
{
- if( yymsp[-6].minor.yy167==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy490==0 && yymsp[0].minor.yy336==0 ){
- yymsp[-6].minor.yy167 = yymsp[-4].minor.yy167;
- }else if( yymsp[-4].minor.yy167->nSrc==1 ){
- yymsp[-6].minor.yy167 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy167,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy490,yymsp[0].minor.yy336);
- if( yymsp[-6].minor.yy167 ){
- struct SrcList_item *pNew = &yymsp[-6].minor.yy167->a[yymsp[-6].minor.yy167->nSrc-1];
- struct SrcList_item *pOld = yymsp[-4].minor.yy167->a;
+ if( yymsp[-6].minor.yy407==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy102==0 && yymsp[0].minor.yy76==0 ){
+ yymsp[-6].minor.yy407 = yymsp[-4].minor.yy407;
+ }else if( yymsp[-4].minor.yy407->nSrc==1 ){
+ yymsp[-6].minor.yy407 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy407,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy102,yymsp[0].minor.yy76);
+ if( yymsp[-6].minor.yy407 ){
+ struct SrcList_item *pNew = &yymsp[-6].minor.yy407->a[yymsp[-6].minor.yy407->nSrc-1];
+ struct SrcList_item *pOld = yymsp[-4].minor.yy407->a;
pNew->zName = pOld->zName;
pNew->zDatabase = pOld->zDatabase;
pNew->pSelect = pOld->pSelect;
@@ -150881,201 +152360,201 @@ static YYACTIONTYPE yy_reduce(
pOld->zName = pOld->zDatabase = 0;
pOld->pSelect = 0;
}
- sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy167);
+ sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy407);
}else{
Select *pSubquery;
- sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy167);
- pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy167,0,0,0,0,SF_NestedFrom,0);
- yymsp[-6].minor.yy167 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy167,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy490,yymsp[0].minor.yy336);
+ sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy407);
+ pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy407,0,0,0,0,SF_NestedFrom,0);
+ yymsp[-6].minor.yy407 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy407,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy102,yymsp[0].minor.yy76);
}
}
break;
- case 108: /* dbnm ::= */
- case 122: /* indexed_opt ::= */ yytestcase(yyruleno==122);
+ case 109: /* dbnm ::= */
+ case 123: /* indexed_opt ::= */ yytestcase(yyruleno==123);
{yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;}
break;
- case 110: /* fullname ::= nm */
+ case 111: /* fullname ::= nm */
{
- yylhsminor.yy167 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
- if( IN_RENAME_OBJECT && yylhsminor.yy167 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy167->a[0].zName, &yymsp[0].minor.yy0);
+ yylhsminor.yy407 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
+ if( IN_RENAME_OBJECT && yylhsminor.yy407 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy407->a[0].zName, &yymsp[0].minor.yy0);
}
- yymsp[0].minor.yy167 = yylhsminor.yy167;
+ yymsp[0].minor.yy407 = yylhsminor.yy407;
break;
- case 111: /* fullname ::= nm DOT nm */
+ case 112: /* fullname ::= nm DOT nm */
{
- yylhsminor.yy167 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
- if( IN_RENAME_OBJECT && yylhsminor.yy167 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy167->a[0].zName, &yymsp[0].minor.yy0);
+ yylhsminor.yy407 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
+ if( IN_RENAME_OBJECT && yylhsminor.yy407 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy407->a[0].zName, &yymsp[0].minor.yy0);
}
- yymsp[-2].minor.yy167 = yylhsminor.yy167;
+ yymsp[-2].minor.yy407 = yylhsminor.yy407;
break;
- case 112: /* xfullname ::= nm */
-{yymsp[0].minor.yy167 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
+ case 113: /* xfullname ::= nm */
+{yymsp[0].minor.yy407 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
break;
- case 113: /* xfullname ::= nm DOT nm */
-{yymsp[-2].minor.yy167 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 114: /* xfullname ::= nm DOT nm */
+{yymsp[-2].minor.yy407 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 114: /* xfullname ::= nm DOT nm AS nm */
+ case 115: /* xfullname ::= nm DOT nm AS nm */
{
- yymsp[-4].minor.yy167 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
- if( yymsp[-4].minor.yy167 ) yymsp[-4].minor.yy167->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
+ yymsp[-4].minor.yy407 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
+ if( yymsp[-4].minor.yy407 ) yymsp[-4].minor.yy407->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
break;
- case 115: /* xfullname ::= nm AS nm */
+ case 116: /* xfullname ::= nm AS nm */
{
- yymsp[-2].minor.yy167 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
- if( yymsp[-2].minor.yy167 ) yymsp[-2].minor.yy167->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
+ yymsp[-2].minor.yy407 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
+ if( yymsp[-2].minor.yy407 ) yymsp[-2].minor.yy407->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
break;
- case 116: /* joinop ::= COMMA|JOIN */
-{ yymsp[0].minor.yy96 = JT_INNER; }
+ case 117: /* joinop ::= COMMA|JOIN */
+{ yymsp[0].minor.yy100 = JT_INNER; }
break;
- case 117: /* joinop ::= JOIN_KW JOIN */
-{yymsp[-1].minor.yy96 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
+ case 118: /* joinop ::= JOIN_KW JOIN */
+{yymsp[-1].minor.yy100 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
break;
- case 118: /* joinop ::= JOIN_KW nm JOIN */
-{yymsp[-2].minor.yy96 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
+ case 119: /* joinop ::= JOIN_KW nm JOIN */
+{yymsp[-2].minor.yy100 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
break;
- case 119: /* joinop ::= JOIN_KW nm nm JOIN */
-{yymsp[-3].minor.yy96 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
+ case 120: /* joinop ::= JOIN_KW nm nm JOIN */
+{yymsp[-3].minor.yy100 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
break;
- case 120: /* on_opt ::= ON expr */
- case 137: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==137);
- case 144: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==144);
- case 210: /* case_else ::= ELSE expr */ yytestcase(yyruleno==210);
- case 231: /* vinto ::= INTO expr */ yytestcase(yyruleno==231);
-{yymsp[-1].minor.yy490 = yymsp[0].minor.yy490;}
+ case 121: /* on_opt ::= ON expr */
+ case 138: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==138);
+ case 145: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==145);
+ case 211: /* case_else ::= ELSE expr */ yytestcase(yyruleno==211);
+ case 232: /* vinto ::= INTO expr */ yytestcase(yyruleno==232);
+{yymsp[-1].minor.yy102 = yymsp[0].minor.yy102;}
break;
- case 121: /* on_opt ::= */
- case 136: /* having_opt ::= */ yytestcase(yyruleno==136);
- case 138: /* limit_opt ::= */ yytestcase(yyruleno==138);
- case 143: /* where_opt ::= */ yytestcase(yyruleno==143);
- case 211: /* case_else ::= */ yytestcase(yyruleno==211);
- case 213: /* case_operand ::= */ yytestcase(yyruleno==213);
- case 232: /* vinto ::= */ yytestcase(yyruleno==232);
-{yymsp[1].minor.yy490 = 0;}
+ case 122: /* on_opt ::= */
+ case 137: /* having_opt ::= */ yytestcase(yyruleno==137);
+ case 139: /* limit_opt ::= */ yytestcase(yyruleno==139);
+ case 144: /* where_opt ::= */ yytestcase(yyruleno==144);
+ case 212: /* case_else ::= */ yytestcase(yyruleno==212);
+ case 214: /* case_operand ::= */ yytestcase(yyruleno==214);
+ case 233: /* vinto ::= */ yytestcase(yyruleno==233);
+{yymsp[1].minor.yy102 = 0;}
break;
- case 123: /* indexed_opt ::= INDEXED BY nm */
+ case 124: /* indexed_opt ::= INDEXED BY nm */
{yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}
break;
- case 124: /* indexed_opt ::= NOT INDEXED */
+ case 125: /* indexed_opt ::= NOT INDEXED */
{yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}
break;
- case 125: /* using_opt ::= USING LP idlist RP */
-{yymsp[-3].minor.yy336 = yymsp[-1].minor.yy336;}
+ case 126: /* using_opt ::= USING LP idlist RP */
+{yymsp[-3].minor.yy76 = yymsp[-1].minor.yy76;}
break;
- case 126: /* using_opt ::= */
- case 158: /* idlist_opt ::= */ yytestcase(yyruleno==158);
-{yymsp[1].minor.yy336 = 0;}
+ case 127: /* using_opt ::= */
+ case 159: /* idlist_opt ::= */ yytestcase(yyruleno==159);
+{yymsp[1].minor.yy76 = 0;}
break;
- case 128: /* orderby_opt ::= ORDER BY sortlist */
- case 135: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==135);
-{yymsp[-2].minor.yy42 = yymsp[0].minor.yy42;}
+ case 129: /* orderby_opt ::= ORDER BY sortlist */
+ case 136: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==136);
+{yymsp[-2].minor.yy94 = yymsp[0].minor.yy94;}
break;
- case 129: /* sortlist ::= sortlist COMMA expr sortorder */
+ case 130: /* sortlist ::= sortlist COMMA expr sortorder */
{
- yymsp[-3].minor.yy42 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy42,yymsp[-1].minor.yy490);
- sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy42,yymsp[0].minor.yy96);
+ yymsp[-3].minor.yy94 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy94,yymsp[-1].minor.yy102);
+ sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy94,yymsp[0].minor.yy100);
}
break;
- case 130: /* sortlist ::= expr sortorder */
+ case 131: /* sortlist ::= expr sortorder */
{
- yymsp[-1].minor.yy42 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy490); /*A-overwrites-Y*/
- sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy42,yymsp[0].minor.yy96);
+ yymsp[-1].minor.yy94 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy102); /*A-overwrites-Y*/
+ sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy94,yymsp[0].minor.yy100);
}
break;
- case 131: /* sortorder ::= ASC */
-{yymsp[0].minor.yy96 = SQLITE_SO_ASC;}
+ case 132: /* sortorder ::= ASC */
+{yymsp[0].minor.yy100 = SQLITE_SO_ASC;}
break;
- case 132: /* sortorder ::= DESC */
-{yymsp[0].minor.yy96 = SQLITE_SO_DESC;}
+ case 133: /* sortorder ::= DESC */
+{yymsp[0].minor.yy100 = SQLITE_SO_DESC;}
break;
- case 133: /* sortorder ::= */
-{yymsp[1].minor.yy96 = SQLITE_SO_UNDEFINED;}
+ case 134: /* sortorder ::= */
+{yymsp[1].minor.yy100 = SQLITE_SO_UNDEFINED;}
break;
- case 139: /* limit_opt ::= LIMIT expr */
-{yymsp[-1].minor.yy490 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy490,0);}
+ case 140: /* limit_opt ::= LIMIT expr */
+{yymsp[-1].minor.yy102 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy102,0);}
break;
- case 140: /* limit_opt ::= LIMIT expr OFFSET expr */
-{yymsp[-3].minor.yy490 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy490,yymsp[0].minor.yy490);}
+ case 141: /* limit_opt ::= LIMIT expr OFFSET expr */
+{yymsp[-3].minor.yy102 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy102,yymsp[0].minor.yy102);}
break;
- case 141: /* limit_opt ::= LIMIT expr COMMA expr */
-{yymsp[-3].minor.yy490 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy490,yymsp[-2].minor.yy490);}
+ case 142: /* limit_opt ::= LIMIT expr COMMA expr */
+{yymsp[-3].minor.yy102 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy102,yymsp[-2].minor.yy102);}
break;
- case 142: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
+ case 143: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
{
- sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy167, &yymsp[-1].minor.yy0);
- sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy167,yymsp[0].minor.yy490,0,0);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy407, &yymsp[-1].minor.yy0);
+ sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy407,yymsp[0].minor.yy102,0,0);
}
break;
- case 145: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */
+ case 146: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist where_opt */
{
- sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy167, &yymsp[-3].minor.yy0);
- sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy42,"set list");
- sqlite3Update(pParse,yymsp[-4].minor.yy167,yymsp[-1].minor.yy42,yymsp[0].minor.yy490,yymsp[-5].minor.yy96,0,0,0);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy407, &yymsp[-3].minor.yy0);
+ sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy94,"set list");
+ sqlite3Update(pParse,yymsp[-4].minor.yy407,yymsp[-1].minor.yy94,yymsp[0].minor.yy102,yymsp[-5].minor.yy100,0,0,0);
}
break;
- case 146: /* setlist ::= setlist COMMA nm EQ expr */
+ case 147: /* setlist ::= setlist COMMA nm EQ expr */
{
- yymsp[-4].minor.yy42 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy42, yymsp[0].minor.yy490);
- sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy42, &yymsp[-2].minor.yy0, 1);
+ yymsp[-4].minor.yy94 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy94, yymsp[0].minor.yy102);
+ sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy94, &yymsp[-2].minor.yy0, 1);
}
break;
- case 147: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
+ case 148: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
{
- yymsp[-6].minor.yy42 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy42, yymsp[-3].minor.yy336, yymsp[0].minor.yy490);
+ yymsp[-6].minor.yy94 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy94, yymsp[-3].minor.yy76, yymsp[0].minor.yy102);
}
break;
- case 148: /* setlist ::= nm EQ expr */
+ case 149: /* setlist ::= nm EQ expr */
{
- yylhsminor.yy42 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy490);
- sqlite3ExprListSetName(pParse, yylhsminor.yy42, &yymsp[-2].minor.yy0, 1);
+ yylhsminor.yy94 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy102);
+ sqlite3ExprListSetName(pParse, yylhsminor.yy94, &yymsp[-2].minor.yy0, 1);
}
- yymsp[-2].minor.yy42 = yylhsminor.yy42;
+ yymsp[-2].minor.yy94 = yylhsminor.yy94;
break;
- case 149: /* setlist ::= LP idlist RP EQ expr */
+ case 150: /* setlist ::= LP idlist RP EQ expr */
{
- yymsp[-4].minor.yy42 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy336, yymsp[0].minor.yy490);
+ yymsp[-4].minor.yy94 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy76, yymsp[0].minor.yy102);
}
break;
- case 150: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
+ case 151: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
{
- sqlite3Insert(pParse, yymsp[-3].minor.yy167, yymsp[-1].minor.yy423, yymsp[-2].minor.yy336, yymsp[-5].minor.yy96, yymsp[0].minor.yy266);
+ sqlite3Insert(pParse, yymsp[-3].minor.yy407, yymsp[-1].minor.yy391, yymsp[-2].minor.yy76, yymsp[-5].minor.yy100, yymsp[0].minor.yy95);
}
break;
- case 151: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
+ case 152: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
{
- sqlite3Insert(pParse, yymsp[-3].minor.yy167, 0, yymsp[-2].minor.yy336, yymsp[-5].minor.yy96, 0);
+ sqlite3Insert(pParse, yymsp[-3].minor.yy407, 0, yymsp[-2].minor.yy76, yymsp[-5].minor.yy100, 0);
}
break;
- case 152: /* upsert ::= */
-{ yymsp[1].minor.yy266 = 0; }
+ case 153: /* upsert ::= */
+{ yymsp[1].minor.yy95 = 0; }
break;
- case 153: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
-{ yymsp[-10].minor.yy266 = sqlite3UpsertNew(pParse->db,yymsp[-7].minor.yy42,yymsp[-5].minor.yy490,yymsp[-1].minor.yy42,yymsp[0].minor.yy490);}
+ case 154: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
+{ yymsp[-10].minor.yy95 = sqlite3UpsertNew(pParse->db,yymsp[-7].minor.yy94,yymsp[-5].minor.yy102,yymsp[-1].minor.yy94,yymsp[0].minor.yy102);}
break;
- case 154: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
-{ yymsp[-7].minor.yy266 = sqlite3UpsertNew(pParse->db,yymsp[-4].minor.yy42,yymsp[-2].minor.yy490,0,0); }
+ case 155: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
+{ yymsp[-7].minor.yy95 = sqlite3UpsertNew(pParse->db,yymsp[-4].minor.yy94,yymsp[-2].minor.yy102,0,0); }
break;
- case 155: /* upsert ::= ON CONFLICT DO NOTHING */
-{ yymsp[-3].minor.yy266 = sqlite3UpsertNew(pParse->db,0,0,0,0); }
+ case 156: /* upsert ::= ON CONFLICT DO NOTHING */
+{ yymsp[-3].minor.yy95 = sqlite3UpsertNew(pParse->db,0,0,0,0); }
break;
- case 159: /* idlist_opt ::= LP idlist RP */
-{yymsp[-2].minor.yy336 = yymsp[-1].minor.yy336;}
+ case 160: /* idlist_opt ::= LP idlist RP */
+{yymsp[-2].minor.yy76 = yymsp[-1].minor.yy76;}
break;
- case 160: /* idlist ::= idlist COMMA nm */
-{yymsp[-2].minor.yy336 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy336,&yymsp[0].minor.yy0);}
+ case 161: /* idlist ::= idlist COMMA nm */
+{yymsp[-2].minor.yy76 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy76,&yymsp[0].minor.yy0);}
break;
- case 161: /* idlist ::= nm */
-{yymsp[0].minor.yy336 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
+ case 162: /* idlist ::= nm */
+{yymsp[0].minor.yy76 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
break;
- case 162: /* expr ::= LP expr RP */
-{yymsp[-2].minor.yy490 = yymsp[-1].minor.yy490;}
+ case 163: /* expr ::= LP expr RP */
+{yymsp[-2].minor.yy102 = yymsp[-1].minor.yy102;}
break;
- case 163: /* expr ::= ID|INDEXED */
- case 164: /* expr ::= JOIN_KW */ yytestcase(yyruleno==164);
-{yymsp[0].minor.yy490=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 164: /* expr ::= ID|INDEXED */
+ case 165: /* expr ::= JOIN_KW */ yytestcase(yyruleno==165);
+{yymsp[0].minor.yy102=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 165: /* expr ::= nm DOT nm */
+ case 166: /* expr ::= nm DOT nm */
{
Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1);
@@ -151083,11 +152562,11 @@ static YYACTIONTYPE yy_reduce(
sqlite3RenameTokenMap(pParse, (void*)temp2, &yymsp[0].minor.yy0);
sqlite3RenameTokenMap(pParse, (void*)temp1, &yymsp[-2].minor.yy0);
}
- yylhsminor.yy490 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
+ yylhsminor.yy102 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
}
- yymsp[-2].minor.yy490 = yylhsminor.yy490;
+ yymsp[-2].minor.yy102 = yylhsminor.yy102;
break;
- case 166: /* expr ::= nm DOT nm DOT nm */
+ case 167: /* expr ::= nm DOT nm DOT nm */
{
Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-4].minor.yy0, 1);
Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
@@ -151097,26 +152576,26 @@ static YYACTIONTYPE yy_reduce(
sqlite3RenameTokenMap(pParse, (void*)temp3, &yymsp[0].minor.yy0);
sqlite3RenameTokenMap(pParse, (void*)temp2, &yymsp[-2].minor.yy0);
}
- yylhsminor.yy490 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
+ yylhsminor.yy102 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
}
- yymsp[-4].minor.yy490 = yylhsminor.yy490;
+ yymsp[-4].minor.yy102 = yylhsminor.yy102;
break;
- case 167: /* term ::= NULL|FLOAT|BLOB */
- case 168: /* term ::= STRING */ yytestcase(yyruleno==168);
-{yymsp[0].minor.yy490=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 168: /* term ::= NULL|FLOAT|BLOB */
+ case 169: /* term ::= STRING */ yytestcase(yyruleno==169);
+{yymsp[0].minor.yy102=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 169: /* term ::= INTEGER */
+ case 170: /* term ::= INTEGER */
{
- yylhsminor.yy490 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
+ yylhsminor.yy102 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
}
- yymsp[0].minor.yy490 = yylhsminor.yy490;
+ yymsp[0].minor.yy102 = yylhsminor.yy102;
break;
- case 170: /* expr ::= VARIABLE */
+ case 171: /* expr ::= VARIABLE */
{
if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){
u32 n = yymsp[0].minor.yy0.n;
- yymsp[0].minor.yy490 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
- sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy490, n);
+ yymsp[0].minor.yy102 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
+ sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy102, n);
}else{
/* When doing a nested parse, one can include terms in an expression
** that look like this: #1 #2 ... These terms refer to registers
@@ -151125,154 +152604,156 @@ static YYACTIONTYPE yy_reduce(
assert( t.n>=2 );
if( pParse->nested==0 ){
sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
- yymsp[0].minor.yy490 = 0;
+ yymsp[0].minor.yy102 = 0;
}else{
- yymsp[0].minor.yy490 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
- if( yymsp[0].minor.yy490 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy490->iTable);
+ yymsp[0].minor.yy102 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
+ if( yymsp[0].minor.yy102 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy102->iTable);
}
}
}
break;
- case 171: /* expr ::= expr COLLATE ID|STRING */
+ case 172: /* expr ::= expr COLLATE ID|STRING */
{
- yymsp[-2].minor.yy490 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy490, &yymsp[0].minor.yy0, 1);
+ yymsp[-2].minor.yy102 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy102, &yymsp[0].minor.yy0, 1);
}
break;
- case 172: /* expr ::= CAST LP expr AS typetoken RP */
+ case 173: /* expr ::= CAST LP expr AS typetoken RP */
{
- yymsp[-5].minor.yy490 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
- sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy490, yymsp[-3].minor.yy490, 0);
+ yymsp[-5].minor.yy102 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
+ sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy102, yymsp[-3].minor.yy102, 0);
}
break;
- case 173: /* expr ::= ID|INDEXED LP distinct exprlist RP */
+ case 174: /* expr ::= ID|INDEXED LP distinct exprlist RP */
{
- yylhsminor.yy490 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy42, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy96);
+ yylhsminor.yy102 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy94, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy100);
}
- yymsp[-4].minor.yy490 = yylhsminor.yy490;
+ yymsp[-4].minor.yy102 = yylhsminor.yy102;
break;
- case 174: /* expr ::= ID|INDEXED LP STAR RP */
+ case 175: /* expr ::= ID|INDEXED LP STAR RP */
{
- yylhsminor.yy490 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
+ yylhsminor.yy102 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
}
- yymsp[-3].minor.yy490 = yylhsminor.yy490;
+ yymsp[-3].minor.yy102 = yylhsminor.yy102;
break;
- case 175: /* expr ::= ID|INDEXED LP distinct exprlist RP over_clause */
+ case 176: /* expr ::= ID|INDEXED LP distinct exprlist RP over_clause */
{
- yylhsminor.yy490 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy42, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy96);
- sqlite3WindowAttach(pParse, yylhsminor.yy490, yymsp[0].minor.yy147);
+ yylhsminor.yy102 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy94, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy100);
+ sqlite3WindowAttach(pParse, yylhsminor.yy102, yymsp[0].minor.yy379);
}
- yymsp[-5].minor.yy490 = yylhsminor.yy490;
+ yymsp[-5].minor.yy102 = yylhsminor.yy102;
break;
- case 176: /* expr ::= ID|INDEXED LP STAR RP over_clause */
+ case 177: /* expr ::= ID|INDEXED LP STAR RP over_clause */
{
- yylhsminor.yy490 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
- sqlite3WindowAttach(pParse, yylhsminor.yy490, yymsp[0].minor.yy147);
+ yylhsminor.yy102 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
+ sqlite3WindowAttach(pParse, yylhsminor.yy102, yymsp[0].minor.yy379);
}
- yymsp[-4].minor.yy490 = yylhsminor.yy490;
+ yymsp[-4].minor.yy102 = yylhsminor.yy102;
break;
- case 177: /* term ::= CTIME_KW */
+ case 178: /* term ::= CTIME_KW */
{
- yylhsminor.yy490 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
+ yylhsminor.yy102 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
}
- yymsp[0].minor.yy490 = yylhsminor.yy490;
+ yymsp[0].minor.yy102 = yylhsminor.yy102;
break;
- case 178: /* expr ::= LP nexprlist COMMA expr RP */
+ case 179: /* expr ::= LP nexprlist COMMA expr RP */
{
- ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy42, yymsp[-1].minor.yy490);
- yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
- if( yymsp[-4].minor.yy490 ){
- yymsp[-4].minor.yy490->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy94, yymsp[-1].minor.yy102);
+ yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
+ if( yymsp[-4].minor.yy102 ){
+ yymsp[-4].minor.yy102->x.pList = pList;
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
}
break;
- case 179: /* expr ::= expr AND expr */
- case 180: /* expr ::= expr OR expr */ yytestcase(yyruleno==180);
- case 181: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==181);
- case 182: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==182);
- case 183: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==183);
- case 184: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==184);
- case 185: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==185);
- case 186: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==186);
-{yymsp[-2].minor.yy490=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy490,yymsp[0].minor.yy490);}
+ case 180: /* expr ::= expr AND expr */
+{yymsp[-2].minor.yy102=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy102,yymsp[0].minor.yy102);}
+ break;
+ case 181: /* expr ::= expr OR expr */
+ case 182: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==182);
+ case 183: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==183);
+ case 184: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==184);
+ case 185: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==185);
+ case 186: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==186);
+ case 187: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==187);
+{yymsp[-2].minor.yy102=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy102,yymsp[0].minor.yy102);}
break;
- case 187: /* likeop ::= NOT LIKE_KW|MATCH */
+ case 188: /* likeop ::= NOT LIKE_KW|MATCH */
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}
break;
- case 188: /* expr ::= expr likeop expr */
+ case 189: /* expr ::= expr likeop expr */
{
ExprList *pList;
int bNot = yymsp[-1].minor.yy0.n & 0x80000000;
yymsp[-1].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy490);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy490);
- yymsp[-2].minor.yy490 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
- if( bNot ) yymsp[-2].minor.yy490 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy490, 0);
- if( yymsp[-2].minor.yy490 ) yymsp[-2].minor.yy490->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy102);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy102);
+ yymsp[-2].minor.yy102 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
+ if( bNot ) yymsp[-2].minor.yy102 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy102, 0);
+ if( yymsp[-2].minor.yy102 ) yymsp[-2].minor.yy102->flags |= EP_InfixFunc;
}
break;
- case 189: /* expr ::= expr likeop expr ESCAPE expr */
+ case 190: /* expr ::= expr likeop expr ESCAPE expr */
{
ExprList *pList;
int bNot = yymsp[-3].minor.yy0.n & 0x80000000;
yymsp[-3].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy490);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy490);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy490);
- yymsp[-4].minor.yy490 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
- if( bNot ) yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy490, 0);
- if( yymsp[-4].minor.yy490 ) yymsp[-4].minor.yy490->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy102);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy102);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy102);
+ yymsp[-4].minor.yy102 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
+ if( bNot ) yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy102, 0);
+ if( yymsp[-4].minor.yy102 ) yymsp[-4].minor.yy102->flags |= EP_InfixFunc;
}
break;
- case 190: /* expr ::= expr ISNULL|NOTNULL */
-{yymsp[-1].minor.yy490 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy490,0);}
+ case 191: /* expr ::= expr ISNULL|NOTNULL */
+{yymsp[-1].minor.yy102 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy102,0);}
break;
- case 191: /* expr ::= expr NOT NULL */
-{yymsp[-2].minor.yy490 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy490,0);}
+ case 192: /* expr ::= expr NOT NULL */
+{yymsp[-2].minor.yy102 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy102,0);}
break;
- case 192: /* expr ::= expr IS expr */
+ case 193: /* expr ::= expr IS expr */
{
- yymsp[-2].minor.yy490 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy490,yymsp[0].minor.yy490);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy490, yymsp[-2].minor.yy490, TK_ISNULL);
+ yymsp[-2].minor.yy102 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy102,yymsp[0].minor.yy102);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy102, yymsp[-2].minor.yy102, TK_ISNULL);
}
break;
- case 193: /* expr ::= expr IS NOT expr */
+ case 194: /* expr ::= expr IS NOT expr */
{
- yymsp[-3].minor.yy490 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy490,yymsp[0].minor.yy490);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy490, yymsp[-3].minor.yy490, TK_NOTNULL);
+ yymsp[-3].minor.yy102 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy102,yymsp[0].minor.yy102);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy102, yymsp[-3].minor.yy102, TK_NOTNULL);
}
break;
- case 194: /* expr ::= NOT expr */
- case 195: /* expr ::= BITNOT expr */ yytestcase(yyruleno==195);
-{yymsp[-1].minor.yy490 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy490, 0);/*A-overwrites-B*/}
+ case 195: /* expr ::= NOT expr */
+ case 196: /* expr ::= BITNOT expr */ yytestcase(yyruleno==196);
+{yymsp[-1].minor.yy102 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy102, 0);/*A-overwrites-B*/}
break;
- case 196: /* expr ::= PLUS|MINUS expr */
+ case 197: /* expr ::= PLUS|MINUS expr */
{
- yymsp[-1].minor.yy490 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy490, 0);
+ yymsp[-1].minor.yy102 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy102, 0);
/*A-overwrites-B*/
}
break;
- case 197: /* between_op ::= BETWEEN */
- case 200: /* in_op ::= IN */ yytestcase(yyruleno==200);
-{yymsp[0].minor.yy96 = 0;}
+ case 198: /* between_op ::= BETWEEN */
+ case 201: /* in_op ::= IN */ yytestcase(yyruleno==201);
+{yymsp[0].minor.yy100 = 0;}
break;
- case 199: /* expr ::= expr between_op expr AND expr */
+ case 200: /* expr ::= expr between_op expr AND expr */
{
- ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy490);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy490);
- yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy490, 0);
- if( yymsp[-4].minor.yy490 ){
- yymsp[-4].minor.yy490->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy102);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy102);
+ yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy102, 0);
+ if( yymsp[-4].minor.yy102 ){
+ yymsp[-4].minor.yy102->x.pList = pList;
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
- if( yymsp[-3].minor.yy96 ) yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy490, 0);
+ if( yymsp[-3].minor.yy100 ) yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy102, 0);
}
break;
- case 202: /* expr ::= expr in_op LP exprlist RP */
+ case 203: /* expr ::= expr in_op LP exprlist RP */
{
- if( yymsp[-1].minor.yy42==0 ){
+ if( yymsp[-1].minor.yy94==0 ){
/* Expressions of the form
**
** expr1 IN ()
@@ -151281,11 +152762,9 @@ static YYACTIONTYPE yy_reduce(
** simplify to constants 0 (false) and 1 (true), respectively,
** regardless of the value of expr1.
*/
- if( IN_RENAME_OBJECT==0 ){
- sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy490);
- yymsp[-4].minor.yy490 = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy96],1);
- }
- }else if( yymsp[-1].minor.yy42->nExpr==1 ){
+ sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy102);
+ yymsp[-4].minor.yy102 = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy100],1);
+ }else if( yymsp[-1].minor.yy94->nExpr==1 ){
/* Expressions of the form:
**
** expr1 IN (?1)
@@ -151302,199 +152781,199 @@ static YYACTIONTYPE yy_reduce(
** affinity or the collating sequence to use for comparison. Otherwise,
** the semantics would be subtly different from IN or NOT IN.
*/
- Expr *pRHS = yymsp[-1].minor.yy42->a[0].pExpr;
- yymsp[-1].minor.yy42->a[0].pExpr = 0;
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy42);
+ Expr *pRHS = yymsp[-1].minor.yy94->a[0].pExpr;
+ yymsp[-1].minor.yy94->a[0].pExpr = 0;
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy94);
/* pRHS cannot be NULL because a malloc error would have been detected
** before now and control would have never reached this point */
if( ALWAYS(pRHS) ){
pRHS->flags &= ~EP_Collate;
pRHS->flags |= EP_Generic;
}
- yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, yymsp[-3].minor.yy96 ? TK_NE : TK_EQ, yymsp[-4].minor.yy490, pRHS);
+ yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, yymsp[-3].minor.yy100 ? TK_NE : TK_EQ, yymsp[-4].minor.yy102, pRHS);
}else{
- yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy490, 0);
- if( yymsp[-4].minor.yy490 ){
- yymsp[-4].minor.yy490->x.pList = yymsp[-1].minor.yy42;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy490);
+ yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy102, 0);
+ if( yymsp[-4].minor.yy102 ){
+ yymsp[-4].minor.yy102->x.pList = yymsp[-1].minor.yy94;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy102);
}else{
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy42);
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy94);
}
- if( yymsp[-3].minor.yy96 ) yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy490, 0);
+ if( yymsp[-3].minor.yy100 ) yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy102, 0);
}
}
break;
- case 203: /* expr ::= LP select RP */
+ case 204: /* expr ::= LP select RP */
{
- yymsp[-2].minor.yy490 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy490, yymsp[-1].minor.yy423);
+ yymsp[-2].minor.yy102 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy102, yymsp[-1].minor.yy391);
}
break;
- case 204: /* expr ::= expr in_op LP select RP */
+ case 205: /* expr ::= expr in_op LP select RP */
{
- yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy490, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy490, yymsp[-1].minor.yy423);
- if( yymsp[-3].minor.yy96 ) yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy490, 0);
+ yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy102, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy102, yymsp[-1].minor.yy391);
+ if( yymsp[-3].minor.yy100 ) yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy102, 0);
}
break;
- case 205: /* expr ::= expr in_op nm dbnm paren_exprlist */
+ case 206: /* expr ::= expr in_op nm dbnm paren_exprlist */
{
SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);
Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
- if( yymsp[0].minor.yy42 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy42);
- yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy490, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy490, pSelect);
- if( yymsp[-3].minor.yy96 ) yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy490, 0);
+ if( yymsp[0].minor.yy94 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy94);
+ yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy102, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy102, pSelect);
+ if( yymsp[-3].minor.yy100 ) yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy102, 0);
}
break;
- case 206: /* expr ::= EXISTS LP select RP */
+ case 207: /* expr ::= EXISTS LP select RP */
{
Expr *p;
- p = yymsp[-3].minor.yy490 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
- sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy423);
+ p = yymsp[-3].minor.yy102 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
+ sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy391);
}
break;
- case 207: /* expr ::= CASE case_operand case_exprlist case_else END */
+ case 208: /* expr ::= CASE case_operand case_exprlist case_else END */
{
- yymsp[-4].minor.yy490 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy490, 0);
- if( yymsp[-4].minor.yy490 ){
- yymsp[-4].minor.yy490->x.pList = yymsp[-1].minor.yy490 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy42,yymsp[-1].minor.yy490) : yymsp[-2].minor.yy42;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy490);
+ yymsp[-4].minor.yy102 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy102, 0);
+ if( yymsp[-4].minor.yy102 ){
+ yymsp[-4].minor.yy102->x.pList = yymsp[-1].minor.yy102 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy94,yymsp[-1].minor.yy102) : yymsp[-2].minor.yy94;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy102);
}else{
- sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy42);
- sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy490);
+ sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy94);
+ sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy102);
}
}
break;
- case 208: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 209: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
- yymsp[-4].minor.yy42 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy42, yymsp[-2].minor.yy490);
- yymsp[-4].minor.yy42 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy42, yymsp[0].minor.yy490);
+ yymsp[-4].minor.yy94 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy94, yymsp[-2].minor.yy102);
+ yymsp[-4].minor.yy94 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy94, yymsp[0].minor.yy102);
}
break;
- case 209: /* case_exprlist ::= WHEN expr THEN expr */
+ case 210: /* case_exprlist ::= WHEN expr THEN expr */
{
- yymsp[-3].minor.yy42 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy490);
- yymsp[-3].minor.yy42 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy42, yymsp[0].minor.yy490);
+ yymsp[-3].minor.yy94 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy102);
+ yymsp[-3].minor.yy94 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy94, yymsp[0].minor.yy102);
}
break;
- case 212: /* case_operand ::= expr */
-{yymsp[0].minor.yy490 = yymsp[0].minor.yy490; /*A-overwrites-X*/}
+ case 213: /* case_operand ::= expr */
+{yymsp[0].minor.yy102 = yymsp[0].minor.yy102; /*A-overwrites-X*/}
break;
- case 215: /* nexprlist ::= nexprlist COMMA expr */
-{yymsp[-2].minor.yy42 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy42,yymsp[0].minor.yy490);}
+ case 216: /* nexprlist ::= nexprlist COMMA expr */
+{yymsp[-2].minor.yy94 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy94,yymsp[0].minor.yy102);}
break;
- case 216: /* nexprlist ::= expr */
-{yymsp[0].minor.yy42 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy490); /*A-overwrites-Y*/}
+ case 217: /* nexprlist ::= expr */
+{yymsp[0].minor.yy94 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy102); /*A-overwrites-Y*/}
break;
- case 218: /* paren_exprlist ::= LP exprlist RP */
- case 223: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==223);
-{yymsp[-2].minor.yy42 = yymsp[-1].minor.yy42;}
+ case 219: /* paren_exprlist ::= LP exprlist RP */
+ case 224: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==224);
+{yymsp[-2].minor.yy94 = yymsp[-1].minor.yy94;}
break;
- case 219: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ case 220: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
{
sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0,
- sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy42, yymsp[-10].minor.yy96,
- &yymsp[-11].minor.yy0, yymsp[0].minor.yy490, SQLITE_SO_ASC, yymsp[-8].minor.yy96, SQLITE_IDXTYPE_APPDEF);
+ sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy94, yymsp[-10].minor.yy100,
+ &yymsp[-11].minor.yy0, yymsp[0].minor.yy102, SQLITE_SO_ASC, yymsp[-8].minor.yy100, SQLITE_IDXTYPE_APPDEF);
if( IN_RENAME_OBJECT && pParse->pNewIndex ){
sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0);
}
}
break;
- case 220: /* uniqueflag ::= UNIQUE */
- case 262: /* raisetype ::= ABORT */ yytestcase(yyruleno==262);
-{yymsp[0].minor.yy96 = OE_Abort;}
+ case 221: /* uniqueflag ::= UNIQUE */
+ case 263: /* raisetype ::= ABORT */ yytestcase(yyruleno==263);
+{yymsp[0].minor.yy100 = OE_Abort;}
break;
- case 221: /* uniqueflag ::= */
-{yymsp[1].minor.yy96 = OE_None;}
+ case 222: /* uniqueflag ::= */
+{yymsp[1].minor.yy100 = OE_None;}
break;
- case 224: /* eidlist ::= eidlist COMMA nm collate sortorder */
+ case 225: /* eidlist ::= eidlist COMMA nm collate sortorder */
{
- yymsp[-4].minor.yy42 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy42, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy96, yymsp[0].minor.yy96);
+ yymsp[-4].minor.yy94 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy94, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy100, yymsp[0].minor.yy100);
}
break;
- case 225: /* eidlist ::= nm collate sortorder */
+ case 226: /* eidlist ::= nm collate sortorder */
{
- yymsp[-2].minor.yy42 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy96, yymsp[0].minor.yy96); /*A-overwrites-Y*/
+ yymsp[-2].minor.yy94 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy100, yymsp[0].minor.yy100); /*A-overwrites-Y*/
}
break;
- case 228: /* cmd ::= DROP INDEX ifexists fullname */
-{sqlite3DropIndex(pParse, yymsp[0].minor.yy167, yymsp[-1].minor.yy96);}
+ case 229: /* cmd ::= DROP INDEX ifexists fullname */
+{sqlite3DropIndex(pParse, yymsp[0].minor.yy407, yymsp[-1].minor.yy100);}
break;
- case 229: /* cmd ::= VACUUM vinto */
-{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy490);}
+ case 230: /* cmd ::= VACUUM vinto */
+{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy102);}
break;
- case 230: /* cmd ::= VACUUM nm vinto */
-{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy490);}
+ case 231: /* cmd ::= VACUUM nm vinto */
+{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy102);}
break;
- case 233: /* cmd ::= PRAGMA nm dbnm */
+ case 234: /* cmd ::= PRAGMA nm dbnm */
{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
break;
- case 234: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
+ case 235: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
break;
- case 235: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ case 236: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
break;
- case 236: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
+ case 237: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
break;
- case 237: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ case 238: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
break;
- case 240: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ case 241: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
{
Token all;
all.z = yymsp[-3].minor.yy0.z;
all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
- sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy119, &all);
+ sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy11, &all);
}
break;
- case 241: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ case 242: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
{
- sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy96, yymsp[-4].minor.yy350.a, yymsp[-4].minor.yy350.b, yymsp[-2].minor.yy167, yymsp[0].minor.yy490, yymsp[-10].minor.yy96, yymsp[-8].minor.yy96);
+ sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy100, yymsp[-4].minor.yy298.a, yymsp[-4].minor.yy298.b, yymsp[-2].minor.yy407, yymsp[0].minor.yy102, yymsp[-10].minor.yy100, yymsp[-8].minor.yy100);
yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/
}
break;
- case 242: /* trigger_time ::= BEFORE|AFTER */
-{ yymsp[0].minor.yy96 = yymsp[0].major; /*A-overwrites-X*/ }
+ case 243: /* trigger_time ::= BEFORE|AFTER */
+{ yymsp[0].minor.yy100 = yymsp[0].major; /*A-overwrites-X*/ }
break;
- case 243: /* trigger_time ::= INSTEAD OF */
-{ yymsp[-1].minor.yy96 = TK_INSTEAD;}
+ case 244: /* trigger_time ::= INSTEAD OF */
+{ yymsp[-1].minor.yy100 = TK_INSTEAD;}
break;
- case 244: /* trigger_time ::= */
-{ yymsp[1].minor.yy96 = TK_BEFORE; }
+ case 245: /* trigger_time ::= */
+{ yymsp[1].minor.yy100 = TK_BEFORE; }
break;
- case 245: /* trigger_event ::= DELETE|INSERT */
- case 246: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==246);
-{yymsp[0].minor.yy350.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy350.b = 0;}
+ case 246: /* trigger_event ::= DELETE|INSERT */
+ case 247: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==247);
+{yymsp[0].minor.yy298.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy298.b = 0;}
break;
- case 247: /* trigger_event ::= UPDATE OF idlist */
-{yymsp[-2].minor.yy350.a = TK_UPDATE; yymsp[-2].minor.yy350.b = yymsp[0].minor.yy336;}
+ case 248: /* trigger_event ::= UPDATE OF idlist */
+{yymsp[-2].minor.yy298.a = TK_UPDATE; yymsp[-2].minor.yy298.b = yymsp[0].minor.yy76;}
break;
- case 248: /* when_clause ::= */
- case 267: /* key_opt ::= */ yytestcase(yyruleno==267);
- case 309: /* filter_opt ::= */ yytestcase(yyruleno==309);
-{ yymsp[1].minor.yy490 = 0; }
+ case 249: /* when_clause ::= */
+ case 268: /* key_opt ::= */ yytestcase(yyruleno==268);
+ case 316: /* filter_opt ::= */ yytestcase(yyruleno==316);
+{ yymsp[1].minor.yy102 = 0; }
break;
- case 249: /* when_clause ::= WHEN expr */
- case 268: /* key_opt ::= KEY expr */ yytestcase(yyruleno==268);
-{ yymsp[-1].minor.yy490 = yymsp[0].minor.yy490; }
+ case 250: /* when_clause ::= WHEN expr */
+ case 269: /* key_opt ::= KEY expr */ yytestcase(yyruleno==269);
+{ yymsp[-1].minor.yy102 = yymsp[0].minor.yy102; }
break;
- case 250: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 251: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
- assert( yymsp[-2].minor.yy119!=0 );
- yymsp[-2].minor.yy119->pLast->pNext = yymsp[-1].minor.yy119;
- yymsp[-2].minor.yy119->pLast = yymsp[-1].minor.yy119;
+ assert( yymsp[-2].minor.yy11!=0 );
+ yymsp[-2].minor.yy11->pLast->pNext = yymsp[-1].minor.yy11;
+ yymsp[-2].minor.yy11->pLast = yymsp[-1].minor.yy11;
}
break;
- case 251: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 252: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
- assert( yymsp[-1].minor.yy119!=0 );
- yymsp[-1].minor.yy119->pLast = yymsp[-1].minor.yy119;
+ assert( yymsp[-1].minor.yy11!=0 );
+ yymsp[-1].minor.yy11->pLast = yymsp[-1].minor.yy11;
}
break;
- case 252: /* trnm ::= nm DOT nm */
+ case 253: /* trnm ::= nm DOT nm */
{
yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;
sqlite3ErrorMsg(pParse,
@@ -151502,306 +152981,328 @@ static YYACTIONTYPE yy_reduce(
"statements within triggers");
}
break;
- case 253: /* tridxby ::= INDEXED BY nm */
+ case 254: /* tridxby ::= INDEXED BY nm */
{
sqlite3ErrorMsg(pParse,
"the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 254: /* tridxby ::= NOT INDEXED */
+ case 255: /* tridxby ::= NOT INDEXED */
{
sqlite3ErrorMsg(pParse,
"the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 255: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */
-{yylhsminor.yy119 = sqlite3TriggerUpdateStep(pParse, &yymsp[-5].minor.yy0, yymsp[-2].minor.yy42, yymsp[-1].minor.yy490, yymsp[-6].minor.yy96, yymsp[-7].minor.yy0.z, yymsp[0].minor.yy464);}
- yymsp[-7].minor.yy119 = yylhsminor.yy119;
+ case 256: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */
+{yylhsminor.yy11 = sqlite3TriggerUpdateStep(pParse, &yymsp[-5].minor.yy0, yymsp[-2].minor.yy94, yymsp[-1].minor.yy102, yymsp[-6].minor.yy100, yymsp[-7].minor.yy0.z, yymsp[0].minor.yy528);}
+ yymsp[-7].minor.yy11 = yylhsminor.yy11;
break;
- case 256: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
+ case 257: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
{
- yylhsminor.yy119 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy336,yymsp[-2].minor.yy423,yymsp[-6].minor.yy96,yymsp[-1].minor.yy266,yymsp[-7].minor.yy464,yymsp[0].minor.yy464);/*yylhsminor.yy119-overwrites-yymsp[-6].minor.yy96*/
+ yylhsminor.yy11 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy76,yymsp[-2].minor.yy391,yymsp[-6].minor.yy100,yymsp[-1].minor.yy95,yymsp[-7].minor.yy528,yymsp[0].minor.yy528);/*yylhsminor.yy11-overwrites-yymsp[-6].minor.yy100*/
}
- yymsp[-7].minor.yy119 = yylhsminor.yy119;
+ yymsp[-7].minor.yy11 = yylhsminor.yy11;
break;
- case 257: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
-{yylhsminor.yy119 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy490, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy464);}
- yymsp[-5].minor.yy119 = yylhsminor.yy119;
+ case 258: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+{yylhsminor.yy11 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy102, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy528);}
+ yymsp[-5].minor.yy11 = yylhsminor.yy11;
break;
- case 258: /* trigger_cmd ::= scanpt select scanpt */
-{yylhsminor.yy119 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy423, yymsp[-2].minor.yy464, yymsp[0].minor.yy464); /*yylhsminor.yy119-overwrites-yymsp[-1].minor.yy423*/}
- yymsp[-2].minor.yy119 = yylhsminor.yy119;
+ case 259: /* trigger_cmd ::= scanpt select scanpt */
+{yylhsminor.yy11 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy391, yymsp[-2].minor.yy528, yymsp[0].minor.yy528); /*yylhsminor.yy11-overwrites-yymsp[-1].minor.yy391*/}
+ yymsp[-2].minor.yy11 = yylhsminor.yy11;
break;
- case 259: /* expr ::= RAISE LP IGNORE RP */
+ case 260: /* expr ::= RAISE LP IGNORE RP */
{
- yymsp[-3].minor.yy490 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
- if( yymsp[-3].minor.yy490 ){
- yymsp[-3].minor.yy490->affinity = OE_Ignore;
+ yymsp[-3].minor.yy102 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
+ if( yymsp[-3].minor.yy102 ){
+ yymsp[-3].minor.yy102->affinity = OE_Ignore;
}
}
break;
- case 260: /* expr ::= RAISE LP raisetype COMMA nm RP */
+ case 261: /* expr ::= RAISE LP raisetype COMMA nm RP */
{
- yymsp[-5].minor.yy490 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
- if( yymsp[-5].minor.yy490 ) {
- yymsp[-5].minor.yy490->affinity = (char)yymsp[-3].minor.yy96;
+ yymsp[-5].minor.yy102 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
+ if( yymsp[-5].minor.yy102 ) {
+ yymsp[-5].minor.yy102->affinity = (char)yymsp[-3].minor.yy100;
}
}
break;
- case 261: /* raisetype ::= ROLLBACK */
-{yymsp[0].minor.yy96 = OE_Rollback;}
+ case 262: /* raisetype ::= ROLLBACK */
+{yymsp[0].minor.yy100 = OE_Rollback;}
break;
- case 263: /* raisetype ::= FAIL */
-{yymsp[0].minor.yy96 = OE_Fail;}
+ case 264: /* raisetype ::= FAIL */
+{yymsp[0].minor.yy100 = OE_Fail;}
break;
- case 264: /* cmd ::= DROP TRIGGER ifexists fullname */
+ case 265: /* cmd ::= DROP TRIGGER ifexists fullname */
{
- sqlite3DropTrigger(pParse,yymsp[0].minor.yy167,yymsp[-1].minor.yy96);
+ sqlite3DropTrigger(pParse,yymsp[0].minor.yy407,yymsp[-1].minor.yy100);
}
break;
- case 265: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ case 266: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
{
- sqlite3Attach(pParse, yymsp[-3].minor.yy490, yymsp[-1].minor.yy490, yymsp[0].minor.yy490);
+ sqlite3Attach(pParse, yymsp[-3].minor.yy102, yymsp[-1].minor.yy102, yymsp[0].minor.yy102);
}
break;
- case 266: /* cmd ::= DETACH database_kw_opt expr */
+ case 267: /* cmd ::= DETACH database_kw_opt expr */
{
- sqlite3Detach(pParse, yymsp[0].minor.yy490);
+ sqlite3Detach(pParse, yymsp[0].minor.yy102);
}
break;
- case 269: /* cmd ::= REINDEX */
+ case 270: /* cmd ::= REINDEX */
{sqlite3Reindex(pParse, 0, 0);}
break;
- case 270: /* cmd ::= REINDEX nm dbnm */
+ case 271: /* cmd ::= REINDEX nm dbnm */
{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 271: /* cmd ::= ANALYZE */
+ case 272: /* cmd ::= ANALYZE */
{sqlite3Analyze(pParse, 0, 0);}
break;
- case 272: /* cmd ::= ANALYZE nm dbnm */
+ case 273: /* cmd ::= ANALYZE nm dbnm */
{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 273: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+ case 274: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
{
- sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy167,&yymsp[0].minor.yy0);
+ sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy407,&yymsp[0].minor.yy0);
}
break;
- case 274: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ case 275: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
{
yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n;
sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0);
}
break;
- case 275: /* add_column_fullname ::= fullname */
+ case 276: /* add_column_fullname ::= fullname */
{
disableLookaside(pParse);
- sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy167);
+ sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy407);
}
break;
- case 276: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
+ case 277: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
{
- sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy167, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
+ sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy407, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
}
break;
- case 277: /* cmd ::= create_vtab */
+ case 278: /* cmd ::= create_vtab */
{sqlite3VtabFinishParse(pParse,0);}
break;
- case 278: /* cmd ::= create_vtab LP vtabarglist RP */
+ case 279: /* cmd ::= create_vtab LP vtabarglist RP */
{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
break;
- case 279: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ case 280: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
{
- sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy96);
+ sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy100);
}
break;
- case 280: /* vtabarg ::= */
+ case 281: /* vtabarg ::= */
{sqlite3VtabArgInit(pParse);}
break;
- case 281: /* vtabargtoken ::= ANY */
- case 282: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==282);
- case 283: /* lp ::= LP */ yytestcase(yyruleno==283);
+ case 282: /* vtabargtoken ::= ANY */
+ case 283: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==283);
+ case 284: /* lp ::= LP */ yytestcase(yyruleno==284);
{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
break;
- case 284: /* with ::= WITH wqlist */
- case 285: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==285);
-{ sqlite3WithPush(pParse, yymsp[0].minor.yy499, 1); }
+ case 285: /* with ::= WITH wqlist */
+ case 286: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==286);
+{ sqlite3WithPush(pParse, yymsp[0].minor.yy243, 1); }
break;
- case 286: /* wqlist ::= nm eidlist_opt AS LP select RP */
+ case 287: /* wqlist ::= nm eidlist_opt AS LP select RP */
{
- yymsp[-5].minor.yy499 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy42, yymsp[-1].minor.yy423); /*A-overwrites-X*/
+ yymsp[-5].minor.yy243 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy94, yymsp[-1].minor.yy391); /*A-overwrites-X*/
}
break;
- case 287: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
+ case 288: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
{
- yymsp[-7].minor.yy499 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy499, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy42, yymsp[-1].minor.yy423);
+ yymsp[-7].minor.yy243 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy243, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy94, yymsp[-1].minor.yy391);
}
break;
- case 288: /* windowdefn_list ::= windowdefn */
-{ yylhsminor.yy147 = yymsp[0].minor.yy147; }
- yymsp[0].minor.yy147 = yylhsminor.yy147;
+ case 289: /* windowdefn_list ::= windowdefn */
+{ yylhsminor.yy379 = yymsp[0].minor.yy379; }
+ yymsp[0].minor.yy379 = yylhsminor.yy379;
break;
- case 289: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ case 290: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
{
- assert( yymsp[0].minor.yy147!=0 );
- yymsp[0].minor.yy147->pNextWin = yymsp[-2].minor.yy147;
- yylhsminor.yy147 = yymsp[0].minor.yy147;
+ assert( yymsp[0].minor.yy379!=0 );
+ sqlite3WindowChain(pParse, yymsp[0].minor.yy379, yymsp[-2].minor.yy379);
+ yymsp[0].minor.yy379->pNextWin = yymsp[-2].minor.yy379;
+ yylhsminor.yy379 = yymsp[0].minor.yy379;
}
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
+ yymsp[-2].minor.yy379 = yylhsminor.yy379;
break;
- case 290: /* windowdefn ::= nm AS window */
+ case 291: /* windowdefn ::= nm AS LP window RP */
{
- if( ALWAYS(yymsp[0].minor.yy147) ){
- yymsp[0].minor.yy147->zName = sqlite3DbStrNDup(pParse->db, yymsp[-2].minor.yy0.z, yymsp[-2].minor.yy0.n);
+ if( ALWAYS(yymsp[-1].minor.yy379) ){
+ yymsp[-1].minor.yy379->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n);
}
- yylhsminor.yy147 = yymsp[0].minor.yy147;
+ yylhsminor.yy379 = yymsp[-1].minor.yy379;
}
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
+ yymsp[-4].minor.yy379 = yylhsminor.yy379;
break;
- case 291: /* window ::= LP part_opt orderby_opt frame_opt RP */
+ case 292: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
{
- yymsp[-4].minor.yy147 = yymsp[-1].minor.yy147;
- if( ALWAYS(yymsp[-4].minor.yy147) ){
- yymsp[-4].minor.yy147->pPartition = yymsp[-3].minor.yy42;
- yymsp[-4].minor.yy147->pOrderBy = yymsp[-2].minor.yy42;
- }
+ yymsp[-4].minor.yy379 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy379, yymsp[-2].minor.yy94, yymsp[-1].minor.yy94, 0);
+}
+ break;
+ case 293: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+{
+ yylhsminor.yy379 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy379, yymsp[-2].minor.yy94, yymsp[-1].minor.yy94, &yymsp[-5].minor.yy0);
+}
+ yymsp[-5].minor.yy379 = yylhsminor.yy379;
+ break;
+ case 294: /* window ::= ORDER BY sortlist frame_opt */
+{
+ yymsp[-3].minor.yy379 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy379, 0, yymsp[-1].minor.yy94, 0);
+}
+ break;
+ case 295: /* window ::= nm ORDER BY sortlist frame_opt */
+{
+ yylhsminor.yy379 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy379, 0, yymsp[-1].minor.yy94, &yymsp[-4].minor.yy0);
}
+ yymsp[-4].minor.yy379 = yylhsminor.yy379;
break;
- case 292: /* part_opt ::= PARTITION BY nexprlist */
-{ yymsp[-2].minor.yy42 = yymsp[0].minor.yy42; }
+ case 296: /* window ::= frame_opt */
+{
+ yylhsminor.yy379 = yymsp[0].minor.yy379;
+}
+ yymsp[0].minor.yy379 = yylhsminor.yy379;
break;
- case 293: /* part_opt ::= */
-{ yymsp[1].minor.yy42 = 0; }
+ case 297: /* window ::= nm frame_opt */
+{
+ yylhsminor.yy379 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy379, 0, 0, &yymsp[-1].minor.yy0);
+}
+ yymsp[-1].minor.yy379 = yylhsminor.yy379;
break;
- case 294: /* frame_opt ::= */
+ case 298: /* frame_opt ::= */
{
- yymsp[1].minor.yy147 = sqlite3WindowAlloc(pParse, TK_RANGE, TK_UNBOUNDED, 0, TK_CURRENT, 0);
+ yymsp[1].minor.yy379 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
}
break;
- case 295: /* frame_opt ::= range_or_rows frame_bound_s */
+ case 299: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
{
- yylhsminor.yy147 = sqlite3WindowAlloc(pParse, yymsp[-1].minor.yy96, yymsp[0].minor.yy317.eType, yymsp[0].minor.yy317.pExpr, TK_CURRENT, 0);
+ yylhsminor.yy379 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy100, yymsp[-1].minor.yy389.eType, yymsp[-1].minor.yy389.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy218);
}
- yymsp[-1].minor.yy147 = yylhsminor.yy147;
+ yymsp[-2].minor.yy379 = yylhsminor.yy379;
break;
- case 296: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e */
+ case 300: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
{
- yylhsminor.yy147 = sqlite3WindowAlloc(pParse, yymsp[-4].minor.yy96, yymsp[-2].minor.yy317.eType, yymsp[-2].minor.yy317.pExpr, yymsp[0].minor.yy317.eType, yymsp[0].minor.yy317.pExpr);
+ yylhsminor.yy379 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy100, yymsp[-3].minor.yy389.eType, yymsp[-3].minor.yy389.pExpr, yymsp[-1].minor.yy389.eType, yymsp[-1].minor.yy389.pExpr, yymsp[0].minor.yy218);
}
- yymsp[-4].minor.yy147 = yylhsminor.yy147;
+ yymsp[-5].minor.yy379 = yylhsminor.yy379;
break;
- case 297: /* range_or_rows ::= RANGE */
-{ yymsp[0].minor.yy96 = TK_RANGE; }
+ case 302: /* frame_bound_s ::= frame_bound */
+ case 304: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==304);
+{yylhsminor.yy389 = yymsp[0].minor.yy389;}
+ yymsp[0].minor.yy389 = yylhsminor.yy389;
break;
- case 298: /* range_or_rows ::= ROWS */
-{ yymsp[0].minor.yy96 = TK_ROWS; }
+ case 303: /* frame_bound_s ::= UNBOUNDED PRECEDING */
+ case 305: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==305);
+ case 307: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==307);
+{yylhsminor.yy389.eType = yymsp[-1].major; yylhsminor.yy389.pExpr = 0;}
+ yymsp[-1].minor.yy389 = yylhsminor.yy389;
break;
- case 299: /* frame_bound_s ::= frame_bound */
- case 301: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==301);
-{ yylhsminor.yy317 = yymsp[0].minor.yy317; }
- yymsp[0].minor.yy317 = yylhsminor.yy317;
+ case 306: /* frame_bound ::= expr PRECEDING|FOLLOWING */
+{yylhsminor.yy389.eType = yymsp[0].major; yylhsminor.yy389.pExpr = yymsp[-1].minor.yy102;}
+ yymsp[-1].minor.yy389 = yylhsminor.yy389;
break;
- case 300: /* frame_bound_s ::= UNBOUNDED PRECEDING */
- case 302: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==302);
-{yymsp[-1].minor.yy317.eType = TK_UNBOUNDED; yymsp[-1].minor.yy317.pExpr = 0;}
+ case 308: /* frame_exclude_opt ::= */
+{yymsp[1].minor.yy218 = 0;}
break;
- case 303: /* frame_bound ::= expr PRECEDING */
-{ yylhsminor.yy317.eType = TK_PRECEDING; yylhsminor.yy317.pExpr = yymsp[-1].minor.yy490; }
- yymsp[-1].minor.yy317 = yylhsminor.yy317;
+ case 309: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
+{yymsp[-1].minor.yy218 = yymsp[0].minor.yy218;}
break;
- case 304: /* frame_bound ::= CURRENT ROW */
-{ yymsp[-1].minor.yy317.eType = TK_CURRENT ; yymsp[-1].minor.yy317.pExpr = 0; }
+ case 310: /* frame_exclude ::= NO OTHERS */
+ case 311: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==311);
+{yymsp[-1].minor.yy218 = yymsp[-1].major; /*A-overwrites-X*/}
break;
- case 305: /* frame_bound ::= expr FOLLOWING */
-{ yylhsminor.yy317.eType = TK_FOLLOWING; yylhsminor.yy317.pExpr = yymsp[-1].minor.yy490; }
- yymsp[-1].minor.yy317 = yylhsminor.yy317;
+ case 312: /* frame_exclude ::= GROUP|TIES */
+{yymsp[0].minor.yy218 = yymsp[0].major; /*A-overwrites-X*/}
break;
- case 306: /* window_clause ::= WINDOW windowdefn_list */
-{ yymsp[-1].minor.yy147 = yymsp[0].minor.yy147; }
+ case 313: /* window_clause ::= WINDOW windowdefn_list */
+{ yymsp[-1].minor.yy379 = yymsp[0].minor.yy379; }
break;
- case 307: /* over_clause ::= filter_opt OVER window */
+ case 314: /* over_clause ::= filter_opt OVER LP window RP */
{
- yylhsminor.yy147 = yymsp[0].minor.yy147;
- assert( yylhsminor.yy147!=0 );
- yylhsminor.yy147->pFilter = yymsp[-2].minor.yy490;
+ yylhsminor.yy379 = yymsp[-1].minor.yy379;
+ assert( yylhsminor.yy379!=0 );
+ yylhsminor.yy379->pFilter = yymsp[-4].minor.yy102;
}
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
+ yymsp[-4].minor.yy379 = yylhsminor.yy379;
break;
- case 308: /* over_clause ::= filter_opt OVER nm */
+ case 315: /* over_clause ::= filter_opt OVER nm */
{
- yylhsminor.yy147 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
- if( yylhsminor.yy147 ){
- yylhsminor.yy147->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
- yylhsminor.yy147->pFilter = yymsp[-2].minor.yy490;
+ yylhsminor.yy379 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
+ if( yylhsminor.yy379 ){
+ yylhsminor.yy379->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
+ yylhsminor.yy379->pFilter = yymsp[-2].minor.yy102;
}else{
- sqlite3ExprDelete(pParse->db, yymsp[-2].minor.yy490);
+ sqlite3ExprDelete(pParse->db, yymsp[-2].minor.yy102);
}
}
- yymsp[-2].minor.yy147 = yylhsminor.yy147;
+ yymsp[-2].minor.yy379 = yylhsminor.yy379;
break;
- case 310: /* filter_opt ::= FILTER LP WHERE expr RP */
-{ yymsp[-4].minor.yy490 = yymsp[-1].minor.yy490; }
+ case 317: /* filter_opt ::= FILTER LP WHERE expr RP */
+{ yymsp[-4].minor.yy102 = yymsp[-1].minor.yy102; }
break;
default:
- /* (311) input ::= cmdlist */ yytestcase(yyruleno==311);
- /* (312) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==312);
- /* (313) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=313);
- /* (314) ecmd ::= SEMI */ yytestcase(yyruleno==314);
- /* (315) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==315);
- /* (316) ecmd ::= explain cmdx */ yytestcase(yyruleno==316);
- /* (317) trans_opt ::= */ yytestcase(yyruleno==317);
- /* (318) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==318);
- /* (319) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==319);
- /* (320) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==320);
- /* (321) savepoint_opt ::= */ yytestcase(yyruleno==321);
- /* (322) cmd ::= create_table create_table_args */ yytestcase(yyruleno==322);
- /* (323) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==323);
- /* (324) columnlist ::= columnname carglist */ yytestcase(yyruleno==324);
- /* (325) nm ::= ID|INDEXED */ yytestcase(yyruleno==325);
- /* (326) nm ::= STRING */ yytestcase(yyruleno==326);
- /* (327) nm ::= JOIN_KW */ yytestcase(yyruleno==327);
- /* (328) typetoken ::= typename */ yytestcase(yyruleno==328);
- /* (329) typename ::= ID|STRING */ yytestcase(yyruleno==329);
- /* (330) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=330);
- /* (331) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=331);
- /* (332) carglist ::= carglist ccons */ yytestcase(yyruleno==332);
- /* (333) carglist ::= */ yytestcase(yyruleno==333);
- /* (334) ccons ::= NULL onconf */ yytestcase(yyruleno==334);
- /* (335) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==335);
- /* (336) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==336);
- /* (337) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=337);
- /* (338) tconscomma ::= */ yytestcase(yyruleno==338);
- /* (339) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=339);
- /* (340) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=340);
- /* (341) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=341);
- /* (342) oneselect ::= values */ yytestcase(yyruleno==342);
- /* (343) sclp ::= selcollist COMMA */ yytestcase(yyruleno==343);
- /* (344) as ::= ID|STRING */ yytestcase(yyruleno==344);
- /* (345) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=345);
- /* (346) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==346);
- /* (347) exprlist ::= nexprlist */ yytestcase(yyruleno==347);
- /* (348) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=348);
- /* (349) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=349);
- /* (350) nmnum ::= ON */ yytestcase(yyruleno==350);
- /* (351) nmnum ::= DELETE */ yytestcase(yyruleno==351);
- /* (352) nmnum ::= DEFAULT */ yytestcase(yyruleno==352);
- /* (353) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==353);
- /* (354) foreach_clause ::= */ yytestcase(yyruleno==354);
- /* (355) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==355);
- /* (356) trnm ::= nm */ yytestcase(yyruleno==356);
- /* (357) tridxby ::= */ yytestcase(yyruleno==357);
- /* (358) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==358);
- /* (359) database_kw_opt ::= */ yytestcase(yyruleno==359);
- /* (360) kwcolumn_opt ::= */ yytestcase(yyruleno==360);
- /* (361) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==361);
- /* (362) vtabarglist ::= vtabarg */ yytestcase(yyruleno==362);
- /* (363) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==363);
- /* (364) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==364);
- /* (365) anylist ::= */ yytestcase(yyruleno==365);
- /* (366) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==366);
- /* (367) anylist ::= anylist ANY */ yytestcase(yyruleno==367);
- /* (368) with ::= */ yytestcase(yyruleno==368);
+ /* (318) input ::= cmdlist */ yytestcase(yyruleno==318);
+ /* (319) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==319);
+ /* (320) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=320);
+ /* (321) ecmd ::= SEMI */ yytestcase(yyruleno==321);
+ /* (322) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==322);
+ /* (323) ecmd ::= explain cmdx */ yytestcase(yyruleno==323);
+ /* (324) trans_opt ::= */ yytestcase(yyruleno==324);
+ /* (325) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==325);
+ /* (326) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==326);
+ /* (327) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==327);
+ /* (328) savepoint_opt ::= */ yytestcase(yyruleno==328);
+ /* (329) cmd ::= create_table create_table_args */ yytestcase(yyruleno==329);
+ /* (330) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==330);
+ /* (331) columnlist ::= columnname carglist */ yytestcase(yyruleno==331);
+ /* (332) nm ::= ID|INDEXED */ yytestcase(yyruleno==332);
+ /* (333) nm ::= STRING */ yytestcase(yyruleno==333);
+ /* (334) nm ::= JOIN_KW */ yytestcase(yyruleno==334);
+ /* (335) typetoken ::= typename */ yytestcase(yyruleno==335);
+ /* (336) typename ::= ID|STRING */ yytestcase(yyruleno==336);
+ /* (337) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=337);
+ /* (338) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=338);
+ /* (339) carglist ::= carglist ccons */ yytestcase(yyruleno==339);
+ /* (340) carglist ::= */ yytestcase(yyruleno==340);
+ /* (341) ccons ::= NULL onconf */ yytestcase(yyruleno==341);
+ /* (342) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==342);
+ /* (343) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==343);
+ /* (344) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=344);
+ /* (345) tconscomma ::= */ yytestcase(yyruleno==345);
+ /* (346) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=346);
+ /* (347) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=347);
+ /* (348) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=348);
+ /* (349) oneselect ::= values */ yytestcase(yyruleno==349);
+ /* (350) sclp ::= selcollist COMMA */ yytestcase(yyruleno==350);
+ /* (351) as ::= ID|STRING */ yytestcase(yyruleno==351);
+ /* (352) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=352);
+ /* (353) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==353);
+ /* (354) exprlist ::= nexprlist */ yytestcase(yyruleno==354);
+ /* (355) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=355);
+ /* (356) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=356);
+ /* (357) nmnum ::= ON */ yytestcase(yyruleno==357);
+ /* (358) nmnum ::= DELETE */ yytestcase(yyruleno==358);
+ /* (359) nmnum ::= DEFAULT */ yytestcase(yyruleno==359);
+ /* (360) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==360);
+ /* (361) foreach_clause ::= */ yytestcase(yyruleno==361);
+ /* (362) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==362);
+ /* (363) trnm ::= nm */ yytestcase(yyruleno==363);
+ /* (364) tridxby ::= */ yytestcase(yyruleno==364);
+ /* (365) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==365);
+ /* (366) database_kw_opt ::= */ yytestcase(yyruleno==366);
+ /* (367) kwcolumn_opt ::= */ yytestcase(yyruleno==367);
+ /* (368) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==368);
+ /* (369) vtabarglist ::= vtabarg */ yytestcase(yyruleno==369);
+ /* (370) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==370);
+ /* (371) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==371);
+ /* (372) anylist ::= */ yytestcase(yyruleno==372);
+ /* (373) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==373);
+ /* (374) anylist ::= anylist ANY */ yytestcase(yyruleno==374);
+ /* (375) with ::= */ yytestcase(yyruleno==375);
break;
/********** End reduce actions ************************************************/
};
@@ -152264,144 +153765,144 @@ const unsigned char ebcdicToAscii[] = {
** is substantially reduced. This is important for embedded applications
** on platforms with limited memory.
*/
-/* Hash score: 208 */
-/* zKWText[] encodes 923 bytes of keyword text in 614 bytes */
+/* Hash score: 214 */
+/* zKWText[] encodes 950 bytes of keyword text in 629 bytes */
/* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */
-/* ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE */
-/* XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY */
-/* UNIQUERYWITHOUTERELEASEATTACHAVINGROUPDATEBEGINNERANGEBETWEEN */
-/* OTHINGLOBYCASCADELETECASECOLLATECREATECURRENT_DATEDETACH */
-/* IMMEDIATEJOINSERTLIKEMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMIT */
-/* WHENOTNULLWHERECURSIVEAFTERENAMEANDEFAULTAUTOINCREMENTCAST */
-/* COLUMNCOMMITCONFLICTCROSSCURRENT_TIMESTAMPARTITIONDEFERRED */
-/* ISTINCTDROPRECEDINGFAILFILTEREPLACEFOLLOWINGFROMFULLIFISNULL */
-/* ORDERESTRICTOVERIGHTROLLBACKROWSUNBOUNDEDUNIONUSINGVACUUMVIEW */
-/* INDOWINITIALLYPRIMARY */
-static const char zKWText[613] = {
+/* ABLEFTHENDEFERRABLELSEXCLUDELETEMPORARYCONSTRAINTERSECTIES */
+/* AVEPOINTOFFSETRANSACTIONATURALTERAISEXCEPTRIGGEREFERENCES */
+/* UNIQUERYWITHOUTERELEASEXCLUSIVEXISTSATTACHAVINGLOBEGINNERANGE */
+/* BETWEENOTHINGROUPSCASCADETACHCASECOLLATECREATECURRENT_DATE */
+/* IMMEDIATEJOINSERTLIKEMATCHPLANALYZEPRAGMABORTUPDATEVALUES */
+/* VIRTUALIMITWHENOTNULLWHERECURSIVEAFTERENAMEANDEFAULT */
+/* AUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSSCURRENT_TIMESTAMP */
+/* ARTITIONDEFERREDISTINCTDROPRECEDINGFAILFILTEREPLACEFOLLOWING */
+/* FROMFULLIFISNULLORDERESTRICTOTHERSOVERIGHTROLLBACKROWS */
+/* UNBOUNDEDUNIONUSINGVACUUMVIEWINDOWBYINITIALLYPRIMARY */
+static const char zKWText[628] = {
'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H',
'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G',
'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A',
'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F',
- 'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N',
- 'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I',
- 'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E',
- 'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E',
- 'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T',
- 'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q',
- 'U','E','R','Y','W','I','T','H','O','U','T','E','R','E','L','E','A','S',
- 'E','A','T','T','A','C','H','A','V','I','N','G','R','O','U','P','D','A',
- 'T','E','B','E','G','I','N','N','E','R','A','N','G','E','B','E','T','W',
- 'E','E','N','O','T','H','I','N','G','L','O','B','Y','C','A','S','C','A',
- 'D','E','L','E','T','E','C','A','S','E','C','O','L','L','A','T','E','C',
- 'R','E','A','T','E','C','U','R','R','E','N','T','_','D','A','T','E','D',
- 'E','T','A','C','H','I','M','M','E','D','I','A','T','E','J','O','I','N',
- 'S','E','R','T','L','I','K','E','M','A','T','C','H','P','L','A','N','A',
- 'L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U',
- 'E','S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','O',
- 'T','N','U','L','L','W','H','E','R','E','C','U','R','S','I','V','E','A',
- 'F','T','E','R','E','N','A','M','E','A','N','D','E','F','A','U','L','T',
- 'A','U','T','O','I','N','C','R','E','M','E','N','T','C','A','S','T','C',
- 'O','L','U','M','N','C','O','M','M','I','T','C','O','N','F','L','I','C',
- 'T','C','R','O','S','S','C','U','R','R','E','N','T','_','T','I','M','E',
- 'S','T','A','M','P','A','R','T','I','T','I','O','N','D','E','F','E','R',
- 'R','E','D','I','S','T','I','N','C','T','D','R','O','P','R','E','C','E',
- 'D','I','N','G','F','A','I','L','F','I','L','T','E','R','E','P','L','A',
- 'C','E','F','O','L','L','O','W','I','N','G','F','R','O','M','F','U','L',
- 'L','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S','T','R',
- 'I','C','T','O','V','E','R','I','G','H','T','R','O','L','L','B','A','C',
- 'K','R','O','W','S','U','N','B','O','U','N','D','E','D','U','N','I','O',
- 'N','U','S','I','N','G','V','A','C','U','U','M','V','I','E','W','I','N',
- 'D','O','W','I','N','I','T','I','A','L','L','Y','P','R','I','M','A','R',
- 'Y',
+ 'E','R','R','A','B','L','E','L','S','E','X','C','L','U','D','E','L','E',
+ 'T','E','M','P','O','R','A','R','Y','C','O','N','S','T','R','A','I','N',
+ 'T','E','R','S','E','C','T','I','E','S','A','V','E','P','O','I','N','T',
+ 'O','F','F','S','E','T','R','A','N','S','A','C','T','I','O','N','A','T',
+ 'U','R','A','L','T','E','R','A','I','S','E','X','C','E','P','T','R','I',
+ 'G','G','E','R','E','F','E','R','E','N','C','E','S','U','N','I','Q','U',
+ 'E','R','Y','W','I','T','H','O','U','T','E','R','E','L','E','A','S','E',
+ 'X','C','L','U','S','I','V','E','X','I','S','T','S','A','T','T','A','C',
+ 'H','A','V','I','N','G','L','O','B','E','G','I','N','N','E','R','A','N',
+ 'G','E','B','E','T','W','E','E','N','O','T','H','I','N','G','R','O','U',
+ 'P','S','C','A','S','C','A','D','E','T','A','C','H','C','A','S','E','C',
+ 'O','L','L','A','T','E','C','R','E','A','T','E','C','U','R','R','E','N',
+ 'T','_','D','A','T','E','I','M','M','E','D','I','A','T','E','J','O','I',
+ 'N','S','E','R','T','L','I','K','E','M','A','T','C','H','P','L','A','N',
+ 'A','L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','U','P','D',
+ 'A','T','E','V','A','L','U','E','S','V','I','R','T','U','A','L','I','M',
+ 'I','T','W','H','E','N','O','T','N','U','L','L','W','H','E','R','E','C',
+ 'U','R','S','I','V','E','A','F','T','E','R','E','N','A','M','E','A','N',
+ 'D','E','F','A','U','L','T','A','U','T','O','I','N','C','R','E','M','E',
+ 'N','T','C','A','S','T','C','O','L','U','M','N','C','O','M','M','I','T',
+ 'C','O','N','F','L','I','C','T','C','R','O','S','S','C','U','R','R','E',
+ 'N','T','_','T','I','M','E','S','T','A','M','P','A','R','T','I','T','I',
+ 'O','N','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T','D',
+ 'R','O','P','R','E','C','E','D','I','N','G','F','A','I','L','F','I','L',
+ 'T','E','R','E','P','L','A','C','E','F','O','L','L','O','W','I','N','G',
+ 'F','R','O','M','F','U','L','L','I','F','I','S','N','U','L','L','O','R',
+ 'D','E','R','E','S','T','R','I','C','T','O','T','H','E','R','S','O','V',
+ 'E','R','I','G','H','T','R','O','L','L','B','A','C','K','R','O','W','S',
+ 'U','N','B','O','U','N','D','E','D','U','N','I','O','N','U','S','I','N',
+ 'G','V','A','C','U','U','M','V','I','E','W','I','N','D','O','W','B','Y',
+ 'I','N','I','T','I','A','L','L','Y','P','R','I','M','A','R','Y',
};
/* aKWHash[i] is the hash value for the i-th keyword */
static const unsigned char aKWHash[127] = {
- 74, 109, 124, 72, 106, 45, 0, 0, 81, 0, 76, 61, 0,
- 42, 12, 77, 15, 0, 123, 84, 54, 118, 125, 19, 0, 0,
- 130, 0, 128, 121, 0, 22, 96, 0, 9, 0, 0, 115, 69,
- 0, 67, 6, 0, 48, 93, 136, 0, 126, 104, 0, 0, 44,
- 0, 107, 24, 0, 17, 0, 131, 53, 23, 0, 5, 62, 132,
- 99, 0, 0, 135, 110, 60, 134, 57, 113, 55, 0, 94, 0,
- 103, 26, 0, 102, 0, 0, 0, 98, 95, 100, 105, 117, 14,
- 39, 116, 0, 80, 0, 133, 114, 92, 59, 0, 129, 79, 119,
- 86, 46, 83, 0, 0, 97, 40, 122, 120, 0, 127, 0, 0,
- 29, 0, 89, 87, 88, 0, 20, 85, 111, 56,
+ 75, 111, 127, 73, 108, 29, 0, 0, 83, 0, 77, 63, 0,
+ 37, 33, 78, 15, 0, 126, 86, 57, 120, 128, 19, 0, 0,
+ 133, 0, 131, 123, 0, 22, 98, 0, 9, 0, 0, 117, 71,
+ 0, 69, 6, 0, 49, 95, 140, 0, 129, 106, 0, 0, 54,
+ 0, 109, 24, 0, 17, 0, 134, 56, 23, 26, 5, 58, 135,
+ 101, 0, 0, 139, 112, 62, 138, 59, 115, 65, 0, 96, 0,
+ 105, 45, 0, 104, 0, 0, 0, 100, 97, 102, 107, 119, 14,
+ 31, 118, 0, 81, 0, 136, 116, 137, 61, 124, 132, 80, 121,
+ 88, 30, 85, 0, 0, 99, 35, 125, 122, 0, 130, 0, 0,
+ 41, 0, 91, 89, 90, 0, 20, 87, 113, 82,
};
/* aKWNext[] forms the hash collision chain. If aKWHash[i]==0
** then the i-th keyword has no more hash collisions. Otherwise,
** the next keyword with the same hash is aKWHash[i]-1. */
-static const unsigned char aKWNext[136] = {
+static const unsigned char aKWNext[140] = {
0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
0, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
- 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 33, 0, 21, 0, 0, 0, 0, 0, 50,
- 0, 43, 3, 47, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 0, 1, 64, 0, 0, 65, 0, 41, 0, 38, 0, 0, 0,
- 0, 0, 49, 75, 0, 0, 30, 0, 58, 0, 0, 0, 31,
- 63, 16, 34, 10, 0, 0, 0, 0, 0, 0, 0, 11, 70,
- 91, 0, 0, 8, 0, 108, 0, 101, 28, 52, 68, 0, 112,
- 0, 73, 51, 0, 90, 27, 37, 0, 71, 36, 82, 0, 35,
- 66, 25, 18, 0, 0, 78,
+ 0, 0, 0, 21, 0, 0, 12, 0, 0, 0, 0, 0, 0,
+ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 51, 28, 0, 0, 38, 0, 0, 0, 44, 0, 0, 0, 3,
+ 0, 0, 67, 1, 66, 0, 0, 0, 36, 0, 47, 0, 0,
+ 0, 0, 0, 48, 50, 76, 0, 0, 42, 0, 60, 0, 0,
+ 0, 43, 0, 16, 55, 10, 0, 0, 0, 0, 0, 0, 0,
+ 11, 72, 93, 0, 0, 8, 0, 110, 0, 103, 40, 53, 70,
+ 0, 114, 0, 74, 52, 0, 0, 92, 39, 46, 0, 68, 32,
+ 84, 0, 34, 27, 25, 18, 94, 0, 64, 79,
};
/* aKWLen[i] is the length (in bytes) of the i-th keyword */
-static const unsigned char aKWLen[136] = {
+static const unsigned char aKWLen[140] = {
7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6,
- 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 6,
- 11, 6, 2, 7, 5, 5, 9, 6, 9, 9, 7, 10, 10,
- 4, 6, 2, 3, 9, 4, 2, 6, 5, 7, 4, 5, 7,
- 6, 6, 5, 6, 5, 5, 5, 7, 7, 4, 2, 7, 3,
- 6, 4, 7, 6, 12, 6, 9, 4, 6, 4, 5, 4, 7,
- 6, 5, 6, 7, 5, 4, 7, 3, 2, 4, 5, 9, 5,
- 6, 3, 7, 13, 2, 2, 4, 6, 6, 8, 5, 17, 12,
- 7, 9, 8, 8, 2, 4, 9, 4, 6, 7, 9, 4, 4,
- 2, 6, 5, 8, 4, 5, 8, 4, 3, 9, 5, 5, 6,
- 4, 6, 2, 9, 3, 7,
+ 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 7,
+ 6, 9, 4, 2, 10, 9, 4, 9, 4, 6, 2, 3, 11,
+ 6, 2, 7, 5, 5, 6, 7, 10, 6, 5, 7, 4, 5,
+ 7, 9, 6, 6, 6, 4, 5, 5, 5, 7, 7, 6, 5,
+ 7, 3, 6, 4, 7, 6, 12, 9, 4, 6, 4, 5, 4,
+ 7, 6, 5, 6, 6, 7, 5, 4, 7, 3, 2, 4, 5,
+ 9, 5, 6, 3, 7, 13, 2, 2, 4, 6, 6, 8, 5,
+ 17, 12, 7, 9, 8, 8, 2, 4, 9, 4, 6, 7, 9,
+ 4, 4, 2, 6, 5, 8, 6, 4, 5, 8, 4, 3, 9,
+ 5, 5, 6, 4, 6, 2, 2, 9, 3, 7,
};
/* aKWOffset[i] is the index into zKWText[] of the start of
** the text for the i-th keyword. */
-static const unsigned short int aKWOffset[136] = {
+static const unsigned short int aKWOffset[140] = {
0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33,
36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81,
- 86, 91, 95, 96, 101, 105, 109, 117, 122, 128, 136, 142, 152,
- 159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 184, 188, 192,
- 199, 204, 209, 212, 218, 221, 225, 230, 236, 242, 245, 247, 248,
- 252, 258, 262, 269, 275, 287, 293, 302, 304, 310, 314, 319, 321,
- 328, 333, 338, 344, 350, 355, 358, 358, 358, 361, 365, 368, 377,
- 381, 387, 389, 396, 398, 400, 409, 413, 419, 425, 433, 438, 438,
- 438, 454, 463, 470, 471, 478, 481, 490, 494, 499, 506, 515, 519,
- 523, 525, 531, 535, 543, 546, 551, 559, 559, 563, 572, 577, 582,
- 588, 591, 594, 597, 602, 606,
+ 86, 90, 90, 94, 99, 106, 114, 117, 123, 126, 126, 129, 131,
+ 136, 140, 141, 146, 150, 154, 159, 165, 175, 178, 183, 183, 187,
+ 191, 197, 205, 211, 216, 221, 224, 227, 231, 236, 242, 248, 248,
+ 254, 255, 259, 265, 269, 276, 282, 294, 303, 305, 311, 315, 320,
+ 322, 329, 334, 339, 345, 351, 357, 362, 365, 365, 365, 368, 372,
+ 375, 384, 388, 394, 396, 403, 405, 407, 416, 420, 426, 432, 440,
+ 445, 445, 445, 461, 470, 477, 478, 485, 488, 497, 501, 506, 513,
+ 522, 526, 530, 532, 538, 542, 550, 556, 559, 564, 572, 572, 576,
+ 585, 590, 595, 601, 604, 607, 610, 612, 617, 621,
};
/* aKWCode[i] is the parser symbol code for the i-th keyword */
-static const unsigned char aKWCode[136] = {
+static const unsigned char aKWCode[140] = {
TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE,
TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN,
TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD,
TK_ADD, TK_DATABASE, TK_AS, TK_SELECT, TK_TABLE,
TK_JOIN_KW, TK_THEN, TK_END, TK_DEFERRABLE, TK_ELSE,
- TK_EXCEPT, TK_TRANSACTION,TK_ACTION, TK_ON, TK_JOIN_KW,
- TK_ALTER, TK_RAISE, TK_EXCLUSIVE, TK_EXISTS, TK_SAVEPOINT,
- TK_INTERSECT, TK_TRIGGER, TK_REFERENCES, TK_CONSTRAINT, TK_INTO,
- TK_OFFSET, TK_OF, TK_SET, TK_TEMP, TK_TEMP,
- TK_OR, TK_UNIQUE, TK_QUERY, TK_WITHOUT, TK_WITH,
- TK_JOIN_KW, TK_RELEASE, TK_ATTACH, TK_HAVING, TK_GROUP,
- TK_UPDATE, TK_BEGIN, TK_JOIN_KW, TK_RANGE, TK_BETWEEN,
- TK_NOTHING, TK_LIKE_KW, TK_BY, TK_CASCADE, TK_ASC,
- TK_DELETE, TK_CASE, TK_COLLATE, TK_CREATE, TK_CTIME_KW,
- TK_DETACH, TK_IMMEDIATE, TK_JOIN, TK_INSERT, TK_LIKE_KW,
- TK_MATCH, TK_PLAN, TK_ANALYZE, TK_PRAGMA, TK_ABORT,
- TK_VALUES, TK_VIRTUAL, TK_LIMIT, TK_WHEN, TK_NOTNULL,
- TK_NOT, TK_NO, TK_NULL, TK_WHERE, TK_RECURSIVE,
- TK_AFTER, TK_RENAME, TK_AND, TK_DEFAULT, TK_AUTOINCR,
- TK_TO, TK_IN, TK_CAST, TK_COLUMNKW, TK_COMMIT,
- TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, TK_CTIME_KW, TK_CURRENT,
- TK_PARTITION, TK_DEFERRED, TK_DISTINCT, TK_IS, TK_DROP,
- TK_PRECEDING, TK_FAIL, TK_FILTER, TK_REPLACE, TK_FOLLOWING,
- TK_FROM, TK_JOIN_KW, TK_IF, TK_ISNULL, TK_ORDER,
- TK_RESTRICT, TK_OVER, TK_JOIN_KW, TK_ROLLBACK, TK_ROWS,
- TK_ROW, TK_UNBOUNDED, TK_UNION, TK_USING, TK_VACUUM,
- TK_VIEW, TK_WINDOW, TK_DO, TK_INITIALLY, TK_ALL,
- TK_PRIMARY,
+ TK_EXCLUDE, TK_DELETE, TK_TEMP, TK_TEMP, TK_OR,
+ TK_CONSTRAINT, TK_INTERSECT, TK_TIES, TK_SAVEPOINT, TK_INTO,
+ TK_OFFSET, TK_OF, TK_SET, TK_TRANSACTION,TK_ACTION,
+ TK_ON, TK_JOIN_KW, TK_ALTER, TK_RAISE, TK_EXCEPT,
+ TK_TRIGGER, TK_REFERENCES, TK_UNIQUE, TK_QUERY, TK_WITHOUT,
+ TK_WITH, TK_JOIN_KW, TK_RELEASE, TK_EXCLUSIVE, TK_EXISTS,
+ TK_ATTACH, TK_HAVING, TK_LIKE_KW, TK_BEGIN, TK_JOIN_KW,
+ TK_RANGE, TK_BETWEEN, TK_NOTHING, TK_GROUPS, TK_GROUP,
+ TK_CASCADE, TK_ASC, TK_DETACH, TK_CASE, TK_COLLATE,
+ TK_CREATE, TK_CTIME_KW, TK_IMMEDIATE, TK_JOIN, TK_INSERT,
+ TK_LIKE_KW, TK_MATCH, TK_PLAN, TK_ANALYZE, TK_PRAGMA,
+ TK_ABORT, TK_UPDATE, TK_VALUES, TK_VIRTUAL, TK_LIMIT,
+ TK_WHEN, TK_NOTNULL, TK_NOT, TK_NO, TK_NULL,
+ TK_WHERE, TK_RECURSIVE, TK_AFTER, TK_RENAME, TK_AND,
+ TK_DEFAULT, TK_AUTOINCR, TK_TO, TK_IN, TK_CAST,
+ TK_COLUMNKW, TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW,
+ TK_CTIME_KW, TK_CURRENT, TK_PARTITION, TK_DEFERRED, TK_DISTINCT,
+ TK_IS, TK_DROP, TK_PRECEDING, TK_FAIL, TK_FILTER,
+ TK_REPLACE, TK_FOLLOWING, TK_FROM, TK_JOIN_KW, TK_IF,
+ TK_ISNULL, TK_ORDER, TK_RESTRICT, TK_OTHERS, TK_OVER,
+ TK_JOIN_KW, TK_ROLLBACK, TK_ROWS, TK_ROW, TK_UNBOUNDED,
+ TK_UNION, TK_USING, TK_VACUUM, TK_VIEW, TK_WINDOW,
+ TK_DO, TK_BY, TK_INITIALLY, TK_ALL, TK_PRIMARY,
};
/* Check to see if z[0..n-1] is a keyword. If it is, write the
** parser symbol code for that keyword into *pType. Always
@@ -152447,117 +153948,121 @@ static int keywordCode(const char *z, int n, int *pType){
testcase( i==22 ); /* END */
testcase( i==23 ); /* DEFERRABLE */
testcase( i==24 ); /* ELSE */
- testcase( i==25 ); /* EXCEPT */
- testcase( i==26 ); /* TRANSACTION */
- testcase( i==27 ); /* ACTION */
- testcase( i==28 ); /* ON */
- testcase( i==29 ); /* NATURAL */
- testcase( i==30 ); /* ALTER */
- testcase( i==31 ); /* RAISE */
- testcase( i==32 ); /* EXCLUSIVE */
- testcase( i==33 ); /* EXISTS */
- testcase( i==34 ); /* SAVEPOINT */
- testcase( i==35 ); /* INTERSECT */
- testcase( i==36 ); /* TRIGGER */
- testcase( i==37 ); /* REFERENCES */
- testcase( i==38 ); /* CONSTRAINT */
- testcase( i==39 ); /* INTO */
- testcase( i==40 ); /* OFFSET */
- testcase( i==41 ); /* OF */
- testcase( i==42 ); /* SET */
- testcase( i==43 ); /* TEMPORARY */
- testcase( i==44 ); /* TEMP */
- testcase( i==45 ); /* OR */
- testcase( i==46 ); /* UNIQUE */
- testcase( i==47 ); /* QUERY */
- testcase( i==48 ); /* WITHOUT */
- testcase( i==49 ); /* WITH */
- testcase( i==50 ); /* OUTER */
- testcase( i==51 ); /* RELEASE */
- testcase( i==52 ); /* ATTACH */
- testcase( i==53 ); /* HAVING */
- testcase( i==54 ); /* GROUP */
- testcase( i==55 ); /* UPDATE */
- testcase( i==56 ); /* BEGIN */
- testcase( i==57 ); /* INNER */
- testcase( i==58 ); /* RANGE */
- testcase( i==59 ); /* BETWEEN */
- testcase( i==60 ); /* NOTHING */
- testcase( i==61 ); /* GLOB */
- testcase( i==62 ); /* BY */
- testcase( i==63 ); /* CASCADE */
- testcase( i==64 ); /* ASC */
- testcase( i==65 ); /* DELETE */
- testcase( i==66 ); /* CASE */
- testcase( i==67 ); /* COLLATE */
- testcase( i==68 ); /* CREATE */
- testcase( i==69 ); /* CURRENT_DATE */
- testcase( i==70 ); /* DETACH */
- testcase( i==71 ); /* IMMEDIATE */
- testcase( i==72 ); /* JOIN */
- testcase( i==73 ); /* INSERT */
- testcase( i==74 ); /* LIKE */
- testcase( i==75 ); /* MATCH */
- testcase( i==76 ); /* PLAN */
- testcase( i==77 ); /* ANALYZE */
- testcase( i==78 ); /* PRAGMA */
- testcase( i==79 ); /* ABORT */
- testcase( i==80 ); /* VALUES */
- testcase( i==81 ); /* VIRTUAL */
- testcase( i==82 ); /* LIMIT */
- testcase( i==83 ); /* WHEN */
- testcase( i==84 ); /* NOTNULL */
- testcase( i==85 ); /* NOT */
- testcase( i==86 ); /* NO */
- testcase( i==87 ); /* NULL */
- testcase( i==88 ); /* WHERE */
- testcase( i==89 ); /* RECURSIVE */
- testcase( i==90 ); /* AFTER */
- testcase( i==91 ); /* RENAME */
- testcase( i==92 ); /* AND */
- testcase( i==93 ); /* DEFAULT */
- testcase( i==94 ); /* AUTOINCREMENT */
- testcase( i==95 ); /* TO */
- testcase( i==96 ); /* IN */
- testcase( i==97 ); /* CAST */
- testcase( i==98 ); /* COLUMN */
- testcase( i==99 ); /* COMMIT */
- testcase( i==100 ); /* CONFLICT */
- testcase( i==101 ); /* CROSS */
- testcase( i==102 ); /* CURRENT_TIMESTAMP */
- testcase( i==103 ); /* CURRENT_TIME */
- testcase( i==104 ); /* CURRENT */
- testcase( i==105 ); /* PARTITION */
- testcase( i==106 ); /* DEFERRED */
- testcase( i==107 ); /* DISTINCT */
- testcase( i==108 ); /* IS */
- testcase( i==109 ); /* DROP */
- testcase( i==110 ); /* PRECEDING */
- testcase( i==111 ); /* FAIL */
- testcase( i==112 ); /* FILTER */
- testcase( i==113 ); /* REPLACE */
- testcase( i==114 ); /* FOLLOWING */
- testcase( i==115 ); /* FROM */
- testcase( i==116 ); /* FULL */
- testcase( i==117 ); /* IF */
- testcase( i==118 ); /* ISNULL */
- testcase( i==119 ); /* ORDER */
- testcase( i==120 ); /* RESTRICT */
- testcase( i==121 ); /* OVER */
- testcase( i==122 ); /* RIGHT */
- testcase( i==123 ); /* ROLLBACK */
- testcase( i==124 ); /* ROWS */
- testcase( i==125 ); /* ROW */
- testcase( i==126 ); /* UNBOUNDED */
- testcase( i==127 ); /* UNION */
- testcase( i==128 ); /* USING */
- testcase( i==129 ); /* VACUUM */
- testcase( i==130 ); /* VIEW */
- testcase( i==131 ); /* WINDOW */
- testcase( i==132 ); /* DO */
- testcase( i==133 ); /* INITIALLY */
- testcase( i==134 ); /* ALL */
- testcase( i==135 ); /* PRIMARY */
+ testcase( i==25 ); /* EXCLUDE */
+ testcase( i==26 ); /* DELETE */
+ testcase( i==27 ); /* TEMPORARY */
+ testcase( i==28 ); /* TEMP */
+ testcase( i==29 ); /* OR */
+ testcase( i==30 ); /* CONSTRAINT */
+ testcase( i==31 ); /* INTERSECT */
+ testcase( i==32 ); /* TIES */
+ testcase( i==33 ); /* SAVEPOINT */
+ testcase( i==34 ); /* INTO */
+ testcase( i==35 ); /* OFFSET */
+ testcase( i==36 ); /* OF */
+ testcase( i==37 ); /* SET */
+ testcase( i==38 ); /* TRANSACTION */
+ testcase( i==39 ); /* ACTION */
+ testcase( i==40 ); /* ON */
+ testcase( i==41 ); /* NATURAL */
+ testcase( i==42 ); /* ALTER */
+ testcase( i==43 ); /* RAISE */
+ testcase( i==44 ); /* EXCEPT */
+ testcase( i==45 ); /* TRIGGER */
+ testcase( i==46 ); /* REFERENCES */
+ testcase( i==47 ); /* UNIQUE */
+ testcase( i==48 ); /* QUERY */
+ testcase( i==49 ); /* WITHOUT */
+ testcase( i==50 ); /* WITH */
+ testcase( i==51 ); /* OUTER */
+ testcase( i==52 ); /* RELEASE */
+ testcase( i==53 ); /* EXCLUSIVE */
+ testcase( i==54 ); /* EXISTS */
+ testcase( i==55 ); /* ATTACH */
+ testcase( i==56 ); /* HAVING */
+ testcase( i==57 ); /* GLOB */
+ testcase( i==58 ); /* BEGIN */
+ testcase( i==59 ); /* INNER */
+ testcase( i==60 ); /* RANGE */
+ testcase( i==61 ); /* BETWEEN */
+ testcase( i==62 ); /* NOTHING */
+ testcase( i==63 ); /* GROUPS */
+ testcase( i==64 ); /* GROUP */
+ testcase( i==65 ); /* CASCADE */
+ testcase( i==66 ); /* ASC */
+ testcase( i==67 ); /* DETACH */
+ testcase( i==68 ); /* CASE */
+ testcase( i==69 ); /* COLLATE */
+ testcase( i==70 ); /* CREATE */
+ testcase( i==71 ); /* CURRENT_DATE */
+ testcase( i==72 ); /* IMMEDIATE */
+ testcase( i==73 ); /* JOIN */
+ testcase( i==74 ); /* INSERT */
+ testcase( i==75 ); /* LIKE */
+ testcase( i==76 ); /* MATCH */
+ testcase( i==77 ); /* PLAN */
+ testcase( i==78 ); /* ANALYZE */
+ testcase( i==79 ); /* PRAGMA */
+ testcase( i==80 ); /* ABORT */
+ testcase( i==81 ); /* UPDATE */
+ testcase( i==82 ); /* VALUES */
+ testcase( i==83 ); /* VIRTUAL */
+ testcase( i==84 ); /* LIMIT */
+ testcase( i==85 ); /* WHEN */
+ testcase( i==86 ); /* NOTNULL */
+ testcase( i==87 ); /* NOT */
+ testcase( i==88 ); /* NO */
+ testcase( i==89 ); /* NULL */
+ testcase( i==90 ); /* WHERE */
+ testcase( i==91 ); /* RECURSIVE */
+ testcase( i==92 ); /* AFTER */
+ testcase( i==93 ); /* RENAME */
+ testcase( i==94 ); /* AND */
+ testcase( i==95 ); /* DEFAULT */
+ testcase( i==96 ); /* AUTOINCREMENT */
+ testcase( i==97 ); /* TO */
+ testcase( i==98 ); /* IN */
+ testcase( i==99 ); /* CAST */
+ testcase( i==100 ); /* COLUMN */
+ testcase( i==101 ); /* COMMIT */
+ testcase( i==102 ); /* CONFLICT */
+ testcase( i==103 ); /* CROSS */
+ testcase( i==104 ); /* CURRENT_TIMESTAMP */
+ testcase( i==105 ); /* CURRENT_TIME */
+ testcase( i==106 ); /* CURRENT */
+ testcase( i==107 ); /* PARTITION */
+ testcase( i==108 ); /* DEFERRED */
+ testcase( i==109 ); /* DISTINCT */
+ testcase( i==110 ); /* IS */
+ testcase( i==111 ); /* DROP */
+ testcase( i==112 ); /* PRECEDING */
+ testcase( i==113 ); /* FAIL */
+ testcase( i==114 ); /* FILTER */
+ testcase( i==115 ); /* REPLACE */
+ testcase( i==116 ); /* FOLLOWING */
+ testcase( i==117 ); /* FROM */
+ testcase( i==118 ); /* FULL */
+ testcase( i==119 ); /* IF */
+ testcase( i==120 ); /* ISNULL */
+ testcase( i==121 ); /* ORDER */
+ testcase( i==122 ); /* RESTRICT */
+ testcase( i==123 ); /* OTHERS */
+ testcase( i==124 ); /* OVER */
+ testcase( i==125 ); /* RIGHT */
+ testcase( i==126 ); /* ROLLBACK */
+ testcase( i==127 ); /* ROWS */
+ testcase( i==128 ); /* ROW */
+ testcase( i==129 ); /* UNBOUNDED */
+ testcase( i==130 ); /* UNION */
+ testcase( i==131 ); /* USING */
+ testcase( i==132 ); /* VACUUM */
+ testcase( i==133 ); /* VIEW */
+ testcase( i==134 ); /* WINDOW */
+ testcase( i==135 ); /* DO */
+ testcase( i==136 ); /* BY */
+ testcase( i==137 ); /* INITIALLY */
+ testcase( i==138 ); /* ALL */
+ testcase( i==139 ); /* PRIMARY */
*pType = aKWCode[i];
break;
}
@@ -152569,7 +154074,7 @@ SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){
keywordCode((char*)z, n, &id);
return id;
}
-#define SQLITE_N_KEYWORD 136
+#define SQLITE_N_KEYWORD 140
SQLITE_API int sqlite3_keyword_name(int i,const char **pzName,int *pnName){
if( i<0 || i>=SQLITE_N_KEYWORD ) return SQLITE_ERROR;
*pzName = zKWText + aKWOffset[i];
@@ -153002,6 +154507,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr
#ifdef sqlite3Parser_ENGINEALWAYSONSTACK
yyParser sEngine; /* Space to hold the Lemon-generated Parser object */
#endif
+ VVA_ONLY( u8 startedWithOom = db->mallocFailed );
assert( zSql!=0 );
mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
@@ -153033,6 +154539,8 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr
assert( pParse->pNewTrigger==0 );
assert( pParse->nVar==0 );
assert( pParse->pVList==0 );
+ pParse->pParentParse = db->pParse;
+ db->pParse = pParse;
while( 1 ){
n = sqlite3GetToken((u8*)zSql, &tokenType);
mxSqlLen -= n;
@@ -153089,7 +154597,8 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr
sqlite3Parser(pEngine, tokenType, pParse->sLastToken);
lastTokenParsed = tokenType;
zSql += n;
- if( pParse->rc!=SQLITE_OK || db->mallocFailed ) break;
+ assert( db->mallocFailed==0 || pParse->rc!=SQLITE_OK || startedWithOom );
+ if( pParse->rc!=SQLITE_OK ) break;
}
assert( nErr==0 );
#ifdef YYTRACKMAXSTACKDEPTH
@@ -153157,6 +154666,8 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr
pParse->pZombieTab = p->pNextZombie;
sqlite3DeleteTable(db, p);
}
+ db->pParse = pParse->pParentParse;
+ pParse->pParentParse = 0;
assert( nErr==0 || pParse->rc!=SQLITE_OK );
return nErr;
}
@@ -154393,7 +155904,7 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
pStart = 0;
}else if( pBuf==0 ){
sqlite3BeginBenignMalloc();
- pStart = sqlite3Malloc( sz*cnt ); /* IMP: R-61949-35727 */
+ pStart = sqlite3Malloc( sz*(sqlite3_int64)cnt ); /* IMP: R-61949-35727 */
sqlite3EndBenignMalloc();
if( pStart ) cnt = sqlite3MallocSize(pStart)/sz;
}else{
@@ -154531,6 +156042,11 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
{ SQLITE_DBCONFIG_TRIGGER_EQP, SQLITE_TriggerEQP },
{ SQLITE_DBCONFIG_RESET_DATABASE, SQLITE_ResetDatabase },
{ SQLITE_DBCONFIG_DEFENSIVE, SQLITE_Defensive },
+ { SQLITE_DBCONFIG_WRITABLE_SCHEMA, SQLITE_WriteSchema|
+ SQLITE_NoSchemaError },
+ { SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, SQLITE_LegacyAlter },
+ { SQLITE_DBCONFIG_DQS_DDL, SQLITE_DqsDDL },
+ { SQLITE_DBCONFIG_DQS_DML, SQLITE_DqsDML },
};
unsigned int i;
rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
@@ -154561,28 +156077,17 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
return rc;
}
-
-/*
-** Return true if the buffer z[0..n-1] contains all spaces.
-*/
-static int allSpaces(const char *z, int n){
- while( n>0 && z[n-1]==' ' ){ n--; }
- return n==0;
-}
-
/*
** This is the default collating function named "BINARY" which is always
** available.
-**
-** If the padFlag argument is not NULL then space padding at the end
-** of strings is ignored. This implements the RTRIM collation.
*/
static int binCollFunc(
- void *padFlag,
+ void *NotUsed,
int nKey1, const void *pKey1,
int nKey2, const void *pKey2
){
int rc, n;
+ UNUSED_PARAMETER(NotUsed);
n = nKey1<nKey2 ? nKey1 : nKey2;
/* EVIDENCE-OF: R-65033-28449 The built-in BINARY collation compares
** strings byte by byte using the memcmp() function from the standard C
@@ -154590,29 +156095,33 @@ static int binCollFunc(
assert( pKey1 && pKey2 );
rc = memcmp(pKey1, pKey2, n);
if( rc==0 ){
- if( padFlag
- && allSpaces(((char*)pKey1)+n, nKey1-n)
- && allSpaces(((char*)pKey2)+n, nKey2-n)
- ){
- /* EVIDENCE-OF: R-31624-24737 RTRIM is like BINARY except that extra
- ** spaces at the end of either string do not change the result. In other
- ** words, strings will compare equal to one another as long as they
- ** differ only in the number of spaces at the end.
- */
- }else{
- rc = nKey1 - nKey2;
- }
+ rc = nKey1 - nKey2;
}
return rc;
}
/*
+** This is the collating function named "RTRIM" which is always
+** available. Ignore trailing spaces.
+*/
+static int rtrimCollFunc(
+ void *pUser,
+ int nKey1, const void *pKey1,
+ int nKey2, const void *pKey2
+){
+ const u8 *pK1 = (const u8*)pKey1;
+ const u8 *pK2 = (const u8*)pKey2;
+ while( nKey1 && pK1[nKey1-1]==' ' ) nKey1--;
+ while( nKey2 && pK2[nKey2-1]==' ' ) nKey2--;
+ return binCollFunc(pUser, nKey1, pKey1, nKey2, pKey2);
+}
+
+/*
** Return true if CollSeq is the default built-in BINARY.
*/
SQLITE_PRIVATE int sqlite3IsBinary(const CollSeq *p){
- assert( p==0 || p->xCmp!=binCollFunc || p->pUser!=0
- || strcmp(p->zName,"BINARY")==0 );
- return p==0 || (p->xCmp==binCollFunc && p->pUser==0);
+ assert( p==0 || p->xCmp!=binCollFunc || strcmp(p->zName,"BINARY")==0 );
+ return p==0 || p->xCmp==binCollFunc;
}
/*
@@ -156763,7 +158272,35 @@ static int openDatabase(
db->szMmap = sqlite3GlobalConfig.szMmap;
db->nextPagesize = 0;
db->nMaxSorterMmap = 0x7FFFFFFF;
- db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_CacheSpill
+ db->flags |= SQLITE_ShortColNames
+ | SQLITE_EnableTrigger
+ | SQLITE_CacheSpill
+
+/* The SQLITE_DQS compile-time option determines the default settings
+** for SQLITE_DBCONFIG_DQS_DDL and SQLITE_DBCONFIG_DQS_DML.
+**
+** SQLITE_DQS SQLITE_DBCONFIG_DQS_DDL SQLITE_DBCONFIG_DQS_DML
+** ---------- ----------------------- -----------------------
+** undefined on on
+** 3 on on
+** 2 on off
+** 1 off on
+** 0 off off
+**
+** Legacy behavior is 3 (double-quoted string literals are allowed anywhere)
+** and so that is the default. But developers are encouranged to use
+** -DSQLITE_DQS=0 (best) or -DSQLITE_DQS=1 (second choice) if possible.
+*/
+#if !defined(SQLITE_DQS)
+# define SQLITE_DQS 3
+#endif
+#if (SQLITE_DQS&1)==1
+ | SQLITE_DqsDML
+#endif
+#if (SQLITE_DQS&2)==2
+ | SQLITE_DqsDDL
+#endif
+
#if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX
| SQLITE_AutoIndex
#endif
@@ -156814,7 +158351,7 @@ static int openDatabase(
createCollation(db, sqlite3StrBINARY, SQLITE_UTF16BE, 0, binCollFunc, 0);
createCollation(db, sqlite3StrBINARY, SQLITE_UTF16LE, 0, binCollFunc, 0);
createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
- createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
+ createCollation(db, "RTRIM", SQLITE_UTF8, 0, rtrimCollFunc, 0);
if( db->mallocFailed ){
goto opendb_out;
}
@@ -157790,6 +159327,22 @@ SQLITE_API int sqlite3_test_control(int op, ...){
break;
}
#endif /* defined(YYCOVERAGE) */
+
+ /* sqlite3_test_control(SQLITE_TESTCTRL_RESULT_INTREAL, sqlite3_context*);
+ **
+ ** This test-control causes the most recent sqlite3_result_int64() value
+ ** to be interpreted as a MEM_IntReal instead of as an MEM_Int. Normally,
+ ** MEM_IntReal values only arise during an INSERT operation of integer
+ ** values into a REAL column, so they can be challenging to test. This
+ ** test-control enables us to write an intreal() SQL function that can
+ ** inject an intreal() value at arbitrary places in an SQL statement,
+ ** for testing purposes.
+ */
+ case SQLITE_TESTCTRL_RESULT_INTREAL: {
+ sqlite3_context *pCtx = va_arg(ap, sqlite3_context*);
+ sqlite3ResultIntReal(pCtx);
+ break;
+ }
}
va_end(ap);
#endif /* SQLITE_UNTESTABLE */
@@ -161199,7 +162752,7 @@ static int fts3ScanInteriorNode(
zCsr += fts3GetVarint32(zCsr, &nSuffix);
assert( nPrefix>=0 && nSuffix>=0 );
- if( nPrefix>zCsr-zNode || nSuffix>zEnd-zCsr ){
+ if( nPrefix>zCsr-zNode || nSuffix>zEnd-zCsr || nSuffix==0 ){
rc = FTS_CORRUPT_VTAB;
goto finish_scan;
}
@@ -168312,7 +169865,7 @@ static void fts3TokenizerFunc(
nName = sqlite3_value_bytes(argv[0])+1;
if( argc==2 ){
- if( fts3TokenizerEnabled(context) ){
+ if( fts3TokenizerEnabled(context) || sqlite3_value_frombind(argv[1]) ){
void *pOld;
int n = sqlite3_value_bytes(argv[1]);
if( zName==0 || n!=sizeof(pPtr) ){
@@ -168339,7 +169892,9 @@ static void fts3TokenizerFunc(
return;
}
}
- sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
+ if( fts3TokenizerEnabled(context) || sqlite3_value_frombind(argv[0]) ){
+ sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
+ }
}
SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char c){
@@ -168427,8 +169982,8 @@ SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(
int iArg = 0;
z = &z[n+1];
while( z<zEnd && (NULL!=(z = (char *)sqlite3Fts3NextToken(z, &n))) ){
- int nNew = sizeof(char *)*(iArg+1);
- char const **aNew = (const char **)sqlite3_realloc((void *)aArg, nNew);
+ sqlite3_int64 nNew = sizeof(char *)*(iArg+1);
+ char const **aNew = (const char **)sqlite3_realloc64((void *)aArg, nNew);
if( !aNew ){
sqlite3_free(zCopy);
sqlite3_free((void *)aArg);
@@ -169335,7 +170890,7 @@ static int fts3tokFilterMethod(
if( idxNum==1 ){
const char *zByte = (const char *)sqlite3_value_text(apVal[0]);
int nByte = sqlite3_value_bytes(apVal[0]);
- pCsr->zInput = sqlite3_malloc(nByte+1);
+ pCsr->zInput = sqlite3_malloc64(nByte+1);
if( pCsr->zInput==0 ){
rc = SQLITE_NOMEM;
}else{
@@ -170795,7 +172350,9 @@ static int fts3SegReaderNext(
/* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf
** blocks have already been traversed. */
- assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock );
+#ifdef CORRUPT_DB
+ assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock || CORRUPT_DB );
+#endif
if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){
return SQLITE_OK;
}
@@ -171197,8 +172754,9 @@ SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
}
if( nElem>0 ){
- int nByte = sizeof(Fts3SegReader) + (nElem+1)*sizeof(Fts3HashElem *);
- pReader = (Fts3SegReader *)sqlite3_malloc(nByte);
+ sqlite3_int64 nByte;
+ nByte = sizeof(Fts3SegReader) + (nElem+1)*sizeof(Fts3HashElem *);
+ pReader = (Fts3SegReader *)sqlite3_malloc64(nByte);
if( !pReader ){
rc = SQLITE_NOMEM;
}else{
@@ -172063,14 +173621,14 @@ static void fts3ColumnFilter(
nList -= (int)(p - pList);
pList = p;
- if( nList==0 ){
+ if( nList<=0 ){
break;
}
p = &pList[1];
p += fts3GetVarint32(p, &iCurrent);
}
- if( bZero && &pList[nList]!=pEnd ){
+ if( bZero && (pEnd - &pList[nList])>0){
memset(&pList[nList], 0, pEnd - &pList[nList]);
}
*ppList = pList;
@@ -172682,8 +174240,10 @@ static int fts3SegmentMerge(
if( rc!=SQLITE_OK ) goto finished;
assert( csr.nSegment>0 );
- assert( iNewLevel>=getAbsoluteLevel(p, iLangid, iIndex, 0) );
- assert( iNewLevel<getAbsoluteLevel(p, iLangid, iIndex,FTS3_SEGDIR_MAXLEVEL) );
+ assert_fts3_nc( iNewLevel>=getAbsoluteLevel(p, iLangid, iIndex, 0) );
+ assert_fts3_nc(
+ iNewLevel<getAbsoluteLevel(p, iLangid, iIndex,FTS3_SEGDIR_MAXLEVEL)
+ );
memset(&filter, 0, sizeof(Fts3SegFilter));
filter.flags = FTS3_SEGMENT_REQUIRE_POS;
@@ -172810,7 +174370,7 @@ static void fts3InsertDocsize(
int rc; /* Result code from subfunctions */
if( *pRC ) return;
- pBlob = sqlite3_malloc( 10*p->nColumn );
+ pBlob = sqlite3_malloc64( 10*(sqlite3_int64)p->nColumn );
if( pBlob==0 ){
*pRC = SQLITE_NOMEM;
return;
@@ -172860,7 +174420,7 @@ static void fts3UpdateDocTotals(
const int nStat = p->nColumn+2;
if( *pRC ) return;
- a = sqlite3_malloc( (sizeof(u32)+10)*nStat );
+ a = sqlite3_malloc64( (sizeof(u32)+10)*(sqlite3_int64)nStat );
if( a==0 ){
*pRC = SQLITE_NOMEM;
return;
@@ -172981,8 +174541,8 @@ static int fts3DoRebuild(Fts3Table *p){
}
if( rc==SQLITE_OK ){
- int nByte = sizeof(u32) * (p->nColumn+1)*3;
- aSz = (u32 *)sqlite3_malloc(nByte);
+ sqlite3_int64 nByte = sizeof(u32) * ((sqlite3_int64)p->nColumn+1)*3;
+ aSz = (u32 *)sqlite3_malloc64(nByte);
if( aSz==0 ){
rc = SQLITE_NOMEM;
}else{
@@ -173048,12 +174608,12 @@ static int fts3IncrmergeCsr(
){
int rc; /* Return Code */
sqlite3_stmt *pStmt = 0; /* Statement used to read %_segdir entry */
- int nByte; /* Bytes allocated at pCsr->apSegment[] */
+ sqlite3_int64 nByte; /* Bytes allocated at pCsr->apSegment[] */
/* Allocate space for the Fts3MultiSegReader.aCsr[] array */
memset(pCsr, 0, sizeof(*pCsr));
nByte = sizeof(Fts3SegReader *) * nSeg;
- pCsr->apSegment = (Fts3SegReader **)sqlite3_malloc(nByte);
+ pCsr->apSegment = (Fts3SegReader **)sqlite3_malloc64(nByte);
if( pCsr->apSegment==0 ){
rc = SQLITE_NOMEM;
@@ -173196,7 +174756,7 @@ static int nodeReaderNext(NodeReader *p){
}
p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &nSuffix);
- if( nPrefix>p->iOff || nSuffix>p->nNode-p->iOff ){
+ if( nPrefix>p->term.n || nSuffix>p->nNode-p->iOff || nSuffix==0 ){
return FTS_CORRUPT_VTAB;
}
blobGrowBuffer(&p->term, nPrefix+nSuffix, &rc);
@@ -173215,7 +174775,7 @@ static int nodeReaderNext(NodeReader *p){
}
}
- assert( p->iOff<=p->nNode );
+ assert_fts3_nc( p->iOff<=p->nNode );
return rc;
}
@@ -173376,7 +174936,7 @@ static int fts3AppendToNode(
/* Node must have already been started. There must be a doclist for a
** leaf node, and there must not be a doclist for an internal node. */
assert( pNode->n>0 );
- assert( (pNode->a[0]=='\0')==(aDoclist!=0) );
+ assert_fts3_nc( (pNode->a[0]=='\0')==(aDoclist!=0) );
blobGrowBuffer(pPrev, nTerm, &rc);
if( rc!=SQLITE_OK ) return rc;
@@ -173592,7 +175152,7 @@ static int fts3TermCmp(
int nCmp = MIN(nLhs, nRhs);
int res;
- res = memcmp(zLhs, zRhs, nCmp);
+ res = (nCmp ? memcmp(zLhs, zRhs, nCmp) : 0);
if( res==0 ) res = nLhs - nRhs;
return res;
@@ -173724,10 +175284,13 @@ static int fts3IncrmergeLoad(
pNode = &pWriter->aNodeWriter[nHeight];
pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight;
- blobGrowBuffer(&pNode->block, MAX(nRoot, p->nNodeSize), &rc);
+ blobGrowBuffer(&pNode->block,
+ MAX(nRoot, p->nNodeSize)+FTS3_NODE_PADDING, &rc
+ );
if( rc==SQLITE_OK ){
memcpy(pNode->block.a, aRoot, nRoot);
pNode->block.n = nRoot;
+ memset(&pNode->block.a[nRoot], 0, FTS3_NODE_PADDING);
}
for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){
@@ -173735,23 +175298,28 @@ static int fts3IncrmergeLoad(
pNode = &pWriter->aNodeWriter[i];
rc = nodeReaderInit(&reader, pNode->block.a, pNode->block.n);
- while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader);
- blobGrowBuffer(&pNode->key, reader.term.n, &rc);
- if( rc==SQLITE_OK ){
- memcpy(pNode->key.a, reader.term.a, reader.term.n);
- pNode->key.n = reader.term.n;
- if( i>0 ){
- char *aBlock = 0;
- int nBlock = 0;
- pNode = &pWriter->aNodeWriter[i-1];
- pNode->iBlock = reader.iChild;
- rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock, 0);
- blobGrowBuffer(&pNode->block, MAX(nBlock, p->nNodeSize), &rc);
- if( rc==SQLITE_OK ){
- memcpy(pNode->block.a, aBlock, nBlock);
- pNode->block.n = nBlock;
+ if( reader.aNode ){
+ while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader);
+ blobGrowBuffer(&pNode->key, reader.term.n, &rc);
+ if( rc==SQLITE_OK ){
+ memcpy(pNode->key.a, reader.term.a, reader.term.n);
+ pNode->key.n = reader.term.n;
+ if( i>0 ){
+ char *aBlock = 0;
+ int nBlock = 0;
+ pNode = &pWriter->aNodeWriter[i-1];
+ pNode->iBlock = reader.iChild;
+ rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock, 0);
+ blobGrowBuffer(&pNode->block,
+ MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc
+ );
+ if( rc==SQLITE_OK ){
+ memcpy(pNode->block.a, aBlock, nBlock);
+ pNode->block.n = nBlock;
+ memset(&pNode->block.a[nBlock], 0, FTS3_NODE_PADDING);
+ }
+ sqlite3_free(aBlock);
}
- sqlite3_free(aBlock);
}
}
nodeReaderRelease(&reader);
@@ -173994,7 +175562,10 @@ static int fts3TruncateNode(
NodeReader reader; /* Reader object */
Blob prev = {0, 0, 0}; /* Previous term written to new node */
int rc = SQLITE_OK; /* Return code */
- int bLeaf = aNode[0]=='\0'; /* True for a leaf node */
+ int bLeaf; /* True for a leaf node */
+
+ if( nNode<1 ) return FTS_CORRUPT_VTAB;
+ bLeaf = aNode[0]=='\0';
/* Allocate required output space */
blobGrowBuffer(pNew, nNode, &rc);
@@ -175033,7 +176604,7 @@ SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(
}
/* Allocate space to hold the change in document sizes */
- aSzDel = sqlite3_malloc( sizeof(aSzDel[0])*(p->nColumn+1)*2 );
+ aSzDel = sqlite3_malloc64(sizeof(aSzDel[0])*((sqlite3_int64)p->nColumn+1)*2);
if( aSzDel==0 ){
rc = SQLITE_NOMEM;
goto update_out;
@@ -175287,17 +176858,19 @@ struct StrBuffer {
/*
** Allocate a two-slot MatchinfoBuffer object.
*/
-static MatchinfoBuffer *fts3MIBufferNew(int nElem, const char *zMatchinfo){
+static MatchinfoBuffer *fts3MIBufferNew(size_t nElem, const char *zMatchinfo){
MatchinfoBuffer *pRet;
- int nByte = sizeof(u32) * (2*nElem + 1) + sizeof(MatchinfoBuffer);
- int nStr = (int)strlen(zMatchinfo);
+ sqlite3_int64 nByte = sizeof(u32) * (2*(sqlite3_int64)nElem + 1)
+ + sizeof(MatchinfoBuffer);
+ sqlite3_int64 nStr = strlen(zMatchinfo);
- pRet = sqlite3_malloc(nByte + nStr+1);
+ pRet = sqlite3_malloc64(nByte + nStr+1);
if( pRet ){
memset(pRet, 0, nByte);
pRet->aMatchinfo[0] = (u8*)(&pRet->aMatchinfo[1]) - (u8*)pRet;
- pRet->aMatchinfo[1+nElem] = pRet->aMatchinfo[0] + sizeof(u32)*(nElem+1);
- pRet->nElem = nElem;
+ pRet->aMatchinfo[1+nElem] = pRet->aMatchinfo[0]
+ + sizeof(u32)*((int)nElem+1);
+ pRet->nElem = (int)nElem;
pRet->zMatchinfo = ((char*)pRet) + nByte;
memcpy(pRet->zMatchinfo, zMatchinfo, nStr+1);
pRet->aRef[0] = 1;
@@ -175588,7 +177161,7 @@ static void fts3SnippetDetails(
char *pCsr = pPhrase->pTail;
int iCsr = pPhrase->iTail;
- while( iCsr<(iStart+pIter->nSnippet) ){
+ while( iCsr<(iStart+pIter->nSnippet) && iCsr>=iStart ){
int j;
u64 mPhrase = (u64)1 << i;
u64 mPos = (u64)1 << (iCsr - iStart);
@@ -176158,8 +177731,8 @@ static int fts3MatchinfoCheck(
return SQLITE_ERROR;
}
-static int fts3MatchinfoSize(MatchInfo *pInfo, char cArg){
- int nVal; /* Number of integers output by cArg */
+static size_t fts3MatchinfoSize(MatchInfo *pInfo, char cArg){
+ size_t nVal; /* Number of integers output by cArg */
switch( cArg ){
case FTS3_MATCHINFO_NDOC:
@@ -176443,7 +178016,7 @@ static int fts3MatchinfoValues(
case FTS3_MATCHINFO_LHITS_BM:
case FTS3_MATCHINFO_LHITS: {
- int nZero = fts3MatchinfoSize(pInfo, zArg[i]) * sizeof(u32);
+ size_t nZero = fts3MatchinfoSize(pInfo, zArg[i]) * sizeof(u32);
memset(pInfo->aMatchinfo, 0, nZero);
rc = fts3ExprLHitGather(pCsr->pExpr, pInfo);
break;
@@ -176512,7 +178085,7 @@ static void fts3GetMatchinfo(
** initialize those elements that are constant for every row.
*/
if( pCsr->pMIBuffer==0 ){
- int nMatchinfo = 0; /* Number of u32 elements in match-info */
+ size_t nMatchinfo = 0; /* Number of u32 elements in match-info */
int i; /* Used to iterate through zArg */
/* Determine the number of phrases in the query */
@@ -176702,7 +178275,7 @@ static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){
nTerm = pExpr->pPhrase->nToken;
if( pList ){
fts3GetDeltaPosition(&pList, &iPos);
- assert( iPos>=0 );
+ assert_fts3_nc( iPos>=0 );
}
for(iTerm=0; iTerm<nTerm; iTerm++){
@@ -176812,7 +178385,7 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets(
/* All offsets for this column have been gathered. */
rc = SQLITE_DONE;
}else{
- assert( iCurrent<=iMinPos );
+ assert_fts3_nc( iCurrent<=iMinPos );
if( 0==(0xFE&*pTerm->pList) ){
pTerm->pList = 0;
}else{
@@ -178794,7 +180367,7 @@ static JsonNode *jsonLookupStep(
u32 iStart, iLabel;
JsonNode *pNode;
iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0);
- iLabel = jsonParseAddNode(pParse, JSON_STRING, i, zPath);
+ iLabel = jsonParseAddNode(pParse, JSON_STRING, nKey, zKey);
zPath += i;
pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr);
if( pParse->oom ) return 0;
@@ -180278,10 +181851,6 @@ SQLITE_API int sqlite3_json_init(
/* #include "sqlite3.h" */
#endif
-/* #include <string.h> */
-/* #include <assert.h> */
-/* #include <stdio.h> */
-
#ifndef SQLITE_AMALGAMATION
#include "sqlite3rtree.h"
typedef sqlite3_int64 i64;
@@ -180289,7 +181858,17 @@ typedef sqlite3_uint64 u64;
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
+#if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
+# define NDEBUG 1
#endif
+#if defined(NDEBUG) && defined(SQLITE_DEBUG)
+# undef NDEBUG
+#endif
+#endif
+
+/* #include <string.h> */
+/* #include <stdio.h> */
+/* #include <assert.h> */
/* The following macro is used to suppress compiler warnings.
*/
@@ -183970,49 +185549,45 @@ rtreeInit_fail:
** <num-dimension>*2 coordinates.
*/
static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
- char *zText = 0;
RtreeNode node;
Rtree tree;
int ii;
+ int nData;
+ int errCode;
+ sqlite3_str *pOut;
UNUSED_PARAMETER(nArg);
memset(&node, 0, sizeof(RtreeNode));
memset(&tree, 0, sizeof(Rtree));
tree.nDim = (u8)sqlite3_value_int(apArg[0]);
+ if( tree.nDim<1 || tree.nDim>5 ) return;
tree.nDim2 = tree.nDim*2;
tree.nBytesPerCell = 8 + 8 * tree.nDim;
node.zData = (u8 *)sqlite3_value_blob(apArg[1]);
+ nData = sqlite3_value_bytes(apArg[1]);
+ if( nData<4 ) return;
+ if( nData<NCELL(&node)*tree.nBytesPerCell ) return;
+ pOut = sqlite3_str_new(0);
for(ii=0; ii<NCELL(&node); ii++){
- char zCell[512];
- int nCell = 0;
RtreeCell cell;
int jj;
nodeGetCell(&tree, &node, ii, &cell);
- sqlite3_snprintf(512-nCell,&zCell[nCell],"%lld", cell.iRowid);
- nCell = (int)strlen(zCell);
+ if( ii>0 ) sqlite3_str_append(pOut, " ", 1);
+ sqlite3_str_appendf(pOut, "{%lld", cell.iRowid);
for(jj=0; jj<tree.nDim2; jj++){
#ifndef SQLITE_RTREE_INT_ONLY
- sqlite3_snprintf(512-nCell,&zCell[nCell], " %g",
- (double)cell.aCoord[jj].f);
+ sqlite3_str_appendf(pOut, " %g", (double)cell.aCoord[jj].f);
#else
- sqlite3_snprintf(512-nCell,&zCell[nCell], " %d",
- cell.aCoord[jj].i);
+ sqlite3_str_appendf(pOut, " %d", cell.aCoord[jj].i);
#endif
- nCell = (int)strlen(zCell);
- }
-
- if( zText ){
- char *zTextNew = sqlite3_mprintf("%s {%s}", zText, zCell);
- sqlite3_free(zText);
- zText = zTextNew;
- }else{
- zText = sqlite3_mprintf("{%s}", zCell);
}
+ sqlite3_str_append(pOut, "}", 1);
}
-
- sqlite3_result_text(ctx, zText, -1, sqlite3_free);
+ errCode = sqlite3_str_errcode(pOut);
+ sqlite3_result_text(ctx, sqlite3_str_finish(pOut), -1, sqlite3_free);
+ sqlite3_result_error_code(ctx, errCode);
}
/* This routine implements an SQL function that returns the "depth" parameter
@@ -184777,7 +186352,7 @@ static GeoPoly *geopolyParseJson(const unsigned char *z, int *pRc){
GeoPoly *pOut;
int x = 1;
s.nVertex--; /* Remove the redundant vertex at the end */
- pOut = sqlite3_malloc64( GEOPOLY_SZ(s.nVertex) );
+ pOut = sqlite3_malloc64( GEOPOLY_SZ((sqlite3_int64)s.nVertex) );
x = 1;
if( pOut==0 ) goto parse_json_err;
pOut->nVertex = s.nVertex;
@@ -185163,7 +186738,7 @@ static GeoPoly *geopolyBBox(
if( pRc ) *pRc = SQLITE_OK;
if( aCoord==0 ){
geopolyBboxFill:
- pOut = sqlite3_realloc(p, GEOPOLY_SZ(4));
+ pOut = sqlite3_realloc64(p, GEOPOLY_SZ(4));
if( pOut==0 ){
sqlite3_free(p);
if( context ) sqlite3_result_error_nomem(context);
@@ -185559,9 +187134,9 @@ static GeoSegment *geopolySortSegmentsByYAndC(GeoSegment *pList){
** Determine the overlap between two polygons
*/
static int geopolyOverlap(GeoPoly *p1, GeoPoly *p2){
- int nVertex = p1->nVertex + p2->nVertex + 2;
+ sqlite3_int64 nVertex = p1->nVertex + p2->nVertex + 2;
GeoOverlap *p;
- int nByte;
+ sqlite3_int64 nByte;
GeoEvent *pThisEvent;
double rX;
int rc = 0;
@@ -185573,7 +187148,7 @@ static int geopolyOverlap(GeoPoly *p1, GeoPoly *p2){
nByte = sizeof(GeoEvent)*nVertex*2
+ sizeof(GeoSegment)*nVertex
+ sizeof(GeoOverlap);
- p = sqlite3_malloc( nByte );
+ p = sqlite3_malloc64( nByte );
if( p==0 ) return -1;
p->aEvent = (GeoEvent*)&p[1];
p->aSegment = (GeoSegment*)&p->aEvent[nVertex*2];
@@ -185732,8 +187307,8 @@ static int geopolyInit(
){
int rc = SQLITE_OK;
Rtree *pRtree;
- int nDb; /* Length of string argv[1] */
- int nName; /* Length of string argv[2] */
+ sqlite3_int64 nDb; /* Length of string argv[1] */
+ sqlite3_int64 nName; /* Length of string argv[2] */
sqlite3_str *pSql;
char *zSql;
int ii;
@@ -185741,9 +187316,9 @@ static int geopolyInit(
sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
/* Allocate the sqlite3_vtab structure */
- nDb = (int)strlen(argv[1]);
- nName = (int)strlen(argv[2]);
- pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2);
+ nDb = strlen(argv[1]);
+ nName = strlen(argv[2]);
+ pRtree = (Rtree *)sqlite3_malloc64(sizeof(Rtree)+nDb+nName+2);
if( !pRtree ){
return SQLITE_NOMEM;
}
@@ -188168,6 +189743,11 @@ struct RbuUpdateStmt {
** it points to an array of flags nTblCol elements in size. The flag is
** set for each column that is either a part of the PK or a part of an
** index. Or clear otherwise.
+**
+** If there are one or more partial indexes on the table, all fields of
+** this array set set to 1. This is because in that case, the module has
+** no way to tell which fields will be required to add and remove entries
+** from the partial indexes.
**
*/
struct RbuObjIter {
@@ -188612,6 +190192,7 @@ static void rbuFossilDeltaFunc(
}else{
nOut2 = rbuDeltaApply(aOrig, nOrig, aDelta, nDelta, aOut);
if( nOut2!=nOut ){
+ sqlite3_free(aOut);
sqlite3_result_error(context, "corrupt fossil delta", -1);
}else{
sqlite3_result_blob(context, aOut, nOut, sqlite3_free);
@@ -188852,7 +190433,8 @@ static void rbuTargetNameFunc(
zIn = (const char*)sqlite3_value_text(argv[0]);
if( zIn ){
if( rbuIsVacuum(p) ){
- if( argc==1 || 0==sqlite3_value_int(argv[1]) ){
+ assert( argc==2 );
+ if( 0==sqlite3_value_int(argv[1]) ){
sqlite3_result_text(pCtx, zIn, -1, SQLITE_STATIC);
}
}else{
@@ -188962,7 +190544,7 @@ static int rbuMPrintfExec(sqlite3rbu *p, sqlite3 *db, const char *zFmt, ...){
** immediately without attempting the allocation or modifying the stored
** error code.
*/
-static void *rbuMalloc(sqlite3rbu *p, int nByte){
+static void *rbuMalloc(sqlite3rbu *p, sqlite3_int64 nByte){
void *pRet = 0;
if( p->rc==SQLITE_OK ){
assert( nByte>0 );
@@ -188983,7 +190565,7 @@ static void *rbuMalloc(sqlite3rbu *p, int nByte){
** error code in the RBU handle passed as the first argument.
*/
static void rbuAllocateIterArrays(sqlite3rbu *p, RbuObjIter *pIter, int nCol){
- int nByte = (2*sizeof(char*) + sizeof(int) + 3*sizeof(u8)) * nCol;
+ sqlite3_int64 nByte = (2*sizeof(char*) + sizeof(int) + 3*sizeof(u8)) * nCol;
char **azNew;
azNew = (char**)rbuMalloc(p, nByte);
@@ -189177,8 +190759,12 @@ static void rbuObjIterCacheIndexedCols(sqlite3rbu *p, RbuObjIter *pIter){
pIter->nIndex = 0;
while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pList) ){
const char *zIdx = (const char*)sqlite3_column_text(pList, 1);
+ int bPartial = sqlite3_column_int(pList, 4);
sqlite3_stmt *pXInfo = 0;
if( zIdx==0 ) break;
+ if( bPartial ){
+ memset(pIter->abIndexed, 0x01, sizeof(u8)*pIter->nTblCol);
+ }
p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg,
sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", zIdx)
);
@@ -189299,7 +190885,8 @@ static int rbuObjIterCacheTableInfo(sqlite3rbu *p, RbuObjIter *pIter){
}
pIter->azTblType[iOrder] = rbuStrndup(zType, &p->rc);
- pIter->abTblPk[iOrder] = (iPk!=0);
+ assert( iPk>=0 );
+ pIter->abTblPk[iOrder] = (u8)iPk;
pIter->abNotNull[iOrder] = (u8)bNotNull || (iPk!=0);
iOrder++;
}
@@ -189335,6 +190922,213 @@ static char *rbuObjIterGetCollist(
}
/*
+** Return a comma separated list of the quoted PRIMARY KEY column names,
+** in order, for the current table. Before each column name, add the text
+** zPre. After each column name, add the zPost text. Use zSeparator as
+** the separator text (usually ", ").
+*/
+static char *rbuObjIterGetPkList(
+ sqlite3rbu *p, /* RBU object */
+ RbuObjIter *pIter, /* Object iterator for column names */
+ const char *zPre, /* Before each quoted column name */
+ const char *zSeparator, /* Separator to use between columns */
+ const char *zPost /* After each quoted column name */
+){
+ int iPk = 1;
+ char *zRet = 0;
+ const char *zSep = "";
+ while( 1 ){
+ int i;
+ for(i=0; i<pIter->nTblCol; i++){
+ if( (int)pIter->abTblPk[i]==iPk ){
+ const char *zCol = pIter->azTblCol[i];
+ zRet = rbuMPrintf(p, "%z%s%s\"%w\"%s", zRet, zSep, zPre, zCol, zPost);
+ zSep = zSeparator;
+ break;
+ }
+ }
+ if( i==pIter->nTblCol ) break;
+ iPk++;
+ }
+ return zRet;
+}
+
+/*
+** This function is called as part of restarting an RBU vacuum within
+** stage 1 of the process (while the *-oal file is being built) while
+** updating a table (not an index). The table may be a rowid table or
+** a WITHOUT ROWID table. It queries the target database to find the
+** largest key that has already been written to the target table and
+** constructs a WHERE clause that can be used to extract the remaining
+** rows from the source table. For a rowid table, the WHERE clause
+** is of the form:
+**
+** "WHERE _rowid_ > ?"
+**
+** and for WITHOUT ROWID tables:
+**
+** "WHERE (key1, key2) > (?, ?)"
+**
+** Instead of "?" placeholders, the actual WHERE clauses created by
+** this function contain literal SQL values.
+*/
+static char *rbuVacuumTableStart(
+ sqlite3rbu *p, /* RBU handle */
+ RbuObjIter *pIter, /* RBU iterator object */
+ int bRowid, /* True for a rowid table */
+ const char *zWrite /* Target table name prefix */
+){
+ sqlite3_stmt *pMax = 0;
+ char *zRet = 0;
+ if( bRowid ){
+ p->rc = prepareFreeAndCollectError(p->dbMain, &pMax, &p->zErrmsg,
+ sqlite3_mprintf(
+ "SELECT max(_rowid_) FROM \"%s%w\"", zWrite, pIter->zTbl
+ )
+ );
+ if( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pMax) ){
+ sqlite3_int64 iMax = sqlite3_column_int64(pMax, 0);
+ zRet = rbuMPrintf(p, " WHERE _rowid_ > %lld ", iMax);
+ }
+ rbuFinalize(p, pMax);
+ }else{
+ char *zOrder = rbuObjIterGetPkList(p, pIter, "", ", ", " DESC");
+ char *zSelect = rbuObjIterGetPkList(p, pIter, "quote(", "||','||", ")");
+ char *zList = rbuObjIterGetPkList(p, pIter, "", ", ", "");
+
+ if( p->rc==SQLITE_OK ){
+ p->rc = prepareFreeAndCollectError(p->dbMain, &pMax, &p->zErrmsg,
+ sqlite3_mprintf(
+ "SELECT %s FROM \"%s%w\" ORDER BY %s LIMIT 1",
+ zSelect, zWrite, pIter->zTbl, zOrder
+ )
+ );
+ if( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pMax) ){
+ const char *zVal = (const char*)sqlite3_column_text(pMax, 0);
+ zRet = rbuMPrintf(p, " WHERE (%s) > (%s) ", zList, zVal);
+ }
+ rbuFinalize(p, pMax);
+ }
+
+ sqlite3_free(zOrder);
+ sqlite3_free(zSelect);
+ sqlite3_free(zList);
+ }
+ return zRet;
+}
+
+/*
+** This function is called as part of restating an RBU vacuum when the
+** current operation is writing content to an index. If possible, it
+** queries the target index b-tree for the largest key already written to
+** it, then composes and returns an expression that can be used in a WHERE
+** clause to select the remaining required rows from the source table.
+** It is only possible to return such an expression if:
+**
+** * The index contains no DESC columns, and
+** * The last key written to the index before the operation was
+** suspended does not contain any NULL values.
+**
+** The expression is of the form:
+**
+** (index-field1, index-field2, ...) > (?, ?, ...)
+**
+** except that the "?" placeholders are replaced with literal values.
+**
+** If the expression cannot be created, NULL is returned. In this case,
+** the caller has to use an OFFSET clause to extract only the required
+** rows from the sourct table, just as it does for an RBU update operation.
+*/
+char *rbuVacuumIndexStart(
+ sqlite3rbu *p, /* RBU handle */
+ RbuObjIter *pIter /* RBU iterator object */
+){
+ char *zOrder = 0;
+ char *zLhs = 0;
+ char *zSelect = 0;
+ char *zVector = 0;
+ char *zRet = 0;
+ int bFailed = 0;
+ const char *zSep = "";
+ int iCol = 0;
+ sqlite3_stmt *pXInfo = 0;
+
+ p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg,
+ sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", pIter->zIdx)
+ );
+ while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){
+ int iCid = sqlite3_column_int(pXInfo, 1);
+ const char *zCollate = (const char*)sqlite3_column_text(pXInfo, 4);
+ const char *zCol;
+ if( sqlite3_column_int(pXInfo, 3) ){
+ bFailed = 1;
+ break;
+ }
+
+ if( iCid<0 ){
+ if( pIter->eType==RBU_PK_IPK ){
+ int i;
+ for(i=0; pIter->abTblPk[i]==0; i++);
+ assert( i<pIter->nTblCol );
+ zCol = pIter->azTblCol[i];
+ }else{
+ zCol = "_rowid_";
+ }
+ }else{
+ zCol = pIter->azTblCol[iCid];
+ }
+
+ zLhs = rbuMPrintf(p, "%z%s \"%w\" COLLATE %Q",
+ zLhs, zSep, zCol, zCollate
+ );
+ zOrder = rbuMPrintf(p, "%z%s \"rbu_imp_%d%w\" COLLATE %Q DESC",
+ zOrder, zSep, iCol, zCol, zCollate
+ );
+ zSelect = rbuMPrintf(p, "%z%s quote(\"rbu_imp_%d%w\")",
+ zSelect, zSep, iCol, zCol
+ );
+ zSep = ", ";
+ iCol++;
+ }
+ rbuFinalize(p, pXInfo);
+ if( bFailed ) goto index_start_out;
+
+ if( p->rc==SQLITE_OK ){
+ sqlite3_stmt *pSel = 0;
+
+ p->rc = prepareFreeAndCollectError(p->dbMain, &pSel, &p->zErrmsg,
+ sqlite3_mprintf("SELECT %s FROM \"rbu_imp_%w\" ORDER BY %s LIMIT 1",
+ zSelect, pIter->zTbl, zOrder
+ )
+ );
+ if( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSel) ){
+ zSep = "";
+ for(iCol=0; iCol<pIter->nCol; iCol++){
+ const char *zQuoted = (const char*)sqlite3_column_text(pSel, iCol);
+ if( zQuoted[0]=='N' ){
+ bFailed = 1;
+ break;
+ }
+ zVector = rbuMPrintf(p, "%z%s%s", zVector, zSep, zQuoted);
+ zSep = ", ";
+ }
+
+ if( !bFailed ){
+ zRet = rbuMPrintf(p, "(%s) > (%s)", zLhs, zVector);
+ }
+ }
+ rbuFinalize(p, pSel);
+ }
+
+ index_start_out:
+ sqlite3_free(zOrder);
+ sqlite3_free(zSelect);
+ sqlite3_free(zVector);
+ sqlite3_free(zLhs);
+ return zRet;
+}
+
+/*
** This function is used to create a SELECT list (the list of SQL
** expressions that follows a SELECT keyword) for a SELECT statement
** used to read from an data_xxx or rbu_tmp_xxx table while updating the
@@ -189623,7 +191417,7 @@ static char *rbuObjIterGetSetlist(
*/
static char *rbuObjIterGetBindlist(sqlite3rbu *p, int nBind){
char *zRet = 0;
- int nByte = nBind*2 + 1;
+ sqlite3_int64 nByte = 2*(sqlite3_int64)nBind + 1;
zRet = (char*)rbuMalloc(p, nByte);
if( zRet ){
@@ -189885,6 +191679,62 @@ static void rbuTmpInsertFunc(
}
}
+static char *rbuObjIterGetIndexWhere(sqlite3rbu *p, RbuObjIter *pIter){
+ sqlite3_stmt *pStmt = 0;
+ int rc = p->rc;
+ char *zRet = 0;
+
+ if( rc==SQLITE_OK ){
+ rc = prepareAndCollectError(p->dbMain, &pStmt, &p->zErrmsg,
+ "SELECT trim(sql) FROM sqlite_master WHERE type='index' AND name=?"
+ );
+ }
+ if( rc==SQLITE_OK ){
+ int rc2;
+ rc = sqlite3_bind_text(pStmt, 1, pIter->zIdx, -1, SQLITE_STATIC);
+ if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
+ const char *zSql = (const char*)sqlite3_column_text(pStmt, 0);
+ if( zSql ){
+ int nParen = 0; /* Number of open parenthesis */
+ int i;
+ for(i=0; zSql[i]; i++){
+ char c = zSql[i];
+ if( c=='(' ){
+ nParen++;
+ }
+ else if( c==')' ){
+ nParen--;
+ if( nParen==0 ){
+ i++;
+ break;
+ }
+ }else if( c=='"' || c=='\'' || c=='`' ){
+ for(i++; 1; i++){
+ if( zSql[i]==c ){
+ if( zSql[i+1]!=c ) break;
+ i++;
+ }
+ }
+ }else if( c=='[' ){
+ for(i++; 1; i++){
+ if( zSql[i]==']' ) break;
+ }
+ }
+ }
+ if( zSql[i] ){
+ zRet = rbuStrndup(&zSql[i], &rc);
+ }
+ }
+ }
+
+ rc2 = sqlite3_finalize(pStmt);
+ if( rc==SQLITE_OK ) rc = rc2;
+ }
+
+ p->rc = rc;
+ return zRet;
+}
+
/*
** Ensure that the SQLite statement handles required to update the
** target database object currently indicated by the iterator passed
@@ -189914,6 +191764,7 @@ static int rbuObjIterPrepareAll(
char *zImposterPK = 0; /* Primary key declaration for imposter */
char *zWhere = 0; /* WHERE clause on PK columns */
char *zBind = 0;
+ char *zPart = 0;
int nBind = 0;
assert( pIter->eType!=RBU_PK_VTAB );
@@ -189921,6 +191772,7 @@ static int rbuObjIterPrepareAll(
p, pIter, &zImposterCols, &zImposterPK, &zWhere, &nBind
);
zBind = rbuObjIterGetBindlist(p, nBind);
+ zPart = rbuObjIterGetIndexWhere(p, pIter);
/* Create the imposter table used to write to this index. */
sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 1);
@@ -189952,39 +191804,58 @@ static int rbuObjIterPrepareAll(
if( p->rc==SQLITE_OK ){
char *zSql;
if( rbuIsVacuum(p) ){
+ char *zStart = 0;
+ if( nOffset ){
+ zStart = rbuVacuumIndexStart(p, pIter);
+ if( zStart ){
+ sqlite3_free(zLimit);
+ zLimit = 0;
+ }
+ }
+
zSql = sqlite3_mprintf(
- "SELECT %s, 0 AS rbu_control FROM '%q' ORDER BY %s%s",
+ "SELECT %s, 0 AS rbu_control FROM '%q' %s %s %s ORDER BY %s%s",
zCollist,
pIter->zDataTbl,
+ zPart,
+ (zStart ? (zPart ? "AND" : "WHERE") : ""), zStart,
zCollist, zLimit
);
+ sqlite3_free(zStart);
}else
if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){
zSql = sqlite3_mprintf(
- "SELECT %s, rbu_control FROM %s.'rbu_tmp_%q' ORDER BY %s%s",
+ "SELECT %s, rbu_control FROM %s.'rbu_tmp_%q' %s ORDER BY %s%s",
zCollist, p->zStateDb, pIter->zDataTbl,
- zCollist, zLimit
+ zPart, zCollist, zLimit
);
}else{
zSql = sqlite3_mprintf(
- "SELECT %s, rbu_control FROM %s.'rbu_tmp_%q' "
+ "SELECT %s, rbu_control FROM %s.'rbu_tmp_%q' %s "
"UNION ALL "
"SELECT %s, rbu_control FROM '%q' "
- "WHERE typeof(rbu_control)='integer' AND rbu_control!=1 "
+ "%s %s typeof(rbu_control)='integer' AND rbu_control!=1 "
"ORDER BY %s%s",
- zCollist, p->zStateDb, pIter->zDataTbl,
+ zCollist, p->zStateDb, pIter->zDataTbl, zPart,
zCollist, pIter->zDataTbl,
+ zPart,
+ (zPart ? "AND" : "WHERE"),
zCollist, zLimit
);
}
- p->rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pSelect, pz, zSql);
+ if( p->rc==SQLITE_OK ){
+ p->rc = prepareFreeAndCollectError(p->dbRbu,&pIter->pSelect,pz,zSql);
+ }else{
+ sqlite3_free(zSql);
+ }
}
sqlite3_free(zImposterCols);
sqlite3_free(zImposterPK);
sqlite3_free(zWhere);
sqlite3_free(zBind);
+ sqlite3_free(zPart);
}else{
int bRbuRowid = (pIter->eType==RBU_PK_VTAB)
||(pIter->eType==RBU_PK_NONE)
@@ -190077,18 +191948,42 @@ static int rbuObjIterPrepareAll(
/* Create the SELECT statement to read keys from data_xxx */
if( p->rc==SQLITE_OK ){
const char *zRbuRowid = "";
+ char *zStart = 0;
+ char *zOrder = 0;
if( bRbuRowid ){
zRbuRowid = rbuIsVacuum(p) ? ",_rowid_ " : ",rbu_rowid";
}
- p->rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pSelect, pz,
- sqlite3_mprintf(
- "SELECT %s,%s rbu_control%s FROM '%q'%s",
- zCollist,
- (rbuIsVacuum(p) ? "0 AS " : ""),
- zRbuRowid,
- pIter->zDataTbl, zLimit
- )
- );
+
+ if( rbuIsVacuum(p) ){
+ if( nOffset ){
+ zStart = rbuVacuumTableStart(p, pIter, bRbuRowid, zWrite);
+ if( zStart ){
+ sqlite3_free(zLimit);
+ zLimit = 0;
+ }
+ }
+ if( bRbuRowid ){
+ zOrder = rbuMPrintf(p, "_rowid_");
+ }else{
+ zOrder = rbuObjIterGetPkList(p, pIter, "", ", ", "");
+ }
+ }
+
+ if( p->rc==SQLITE_OK ){
+ p->rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pSelect, pz,
+ sqlite3_mprintf(
+ "SELECT %s,%s rbu_control%s FROM '%q'%s %s %s %s",
+ zCollist,
+ (rbuIsVacuum(p) ? "0 AS " : ""),
+ zRbuRowid,
+ pIter->zDataTbl, (zStart ? zStart : ""),
+ (zOrder ? "ORDER BY" : ""), zOrder,
+ zLimit
+ )
+ );
+ }
+ sqlite3_free(zStart);
+ sqlite3_free(zOrder);
}
sqlite3_free(zWhere);
@@ -192315,9 +194210,7 @@ static int rbuVfsFileControl(sqlite3_file *pFile, int op, void *pArg){
}else if( rc==SQLITE_NOTFOUND ){
pRbu->pTargetFd = p;
p->pRbu = pRbu;
- if( p->openFlags & SQLITE_OPEN_MAIN_DB ){
- rbuMainlistAdd(p);
- }
+ rbuMainlistAdd(p);
if( p->pWalFd ) p->pWalFd->pRbu = pRbu;
rc = SQLITE_OK;
}
@@ -192380,10 +194273,7 @@ static int rbuVfsShmLock(sqlite3_file *pFile, int ofst, int n, int flags){
if( ofst==WAL_LOCK_CKPT && n==1 ) rc = SQLITE_BUSY;
}else{
int bCapture = 0;
- if( n==1 && (flags & SQLITE_SHM_EXCLUSIVE)
- && pRbu && pRbu->eStage==RBU_STAGE_CAPTURE
- && (ofst==WAL_LOCK_WRITE || ofst==WAL_LOCK_CKPT || ofst==WAL_LOCK_READ0)
- ){
+ if( pRbu && pRbu->eStage==RBU_STAGE_CAPTURE ){
bCapture = 1;
}
@@ -192416,20 +194306,24 @@ static int rbuVfsShmMap(
** rbu is in the RBU_STAGE_OAL state, use heap memory for *-shm space
** instead of a file on disk. */
assert( p->openFlags & (SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_TEMP_DB) );
- if( eStage==RBU_STAGE_OAL || eStage==RBU_STAGE_MOVE ){
- if( iRegion<=p->nShm ){
- int nByte = (iRegion+1) * sizeof(char*);
- char **apNew = (char**)sqlite3_realloc64(p->apShm, nByte);
- if( apNew==0 ){
- rc = SQLITE_NOMEM;
- }else{
- memset(&apNew[p->nShm], 0, sizeof(char*) * (1 + iRegion - p->nShm));
- p->apShm = apNew;
- p->nShm = iRegion+1;
- }
+ if( eStage==RBU_STAGE_OAL ){
+ sqlite3_int64 nByte = (iRegion+1) * sizeof(char*);
+ char **apNew = (char**)sqlite3_realloc64(p->apShm, nByte);
+
+ /* This is an RBU connection that uses its own heap memory for the
+ ** pages of the *-shm file. Since no other process can have run
+ ** recovery, the connection must request *-shm pages in order
+ ** from start to finish. */
+ assert( iRegion==p->nShm );
+ if( apNew==0 ){
+ rc = SQLITE_NOMEM;
+ }else{
+ memset(&apNew[p->nShm], 0, sizeof(char*) * (1 + iRegion - p->nShm));
+ p->apShm = apNew;
+ p->nShm = iRegion+1;
}
- if( rc==SQLITE_OK && p->apShm[iRegion]==0 ){
+ if( rc==SQLITE_OK ){
char *pNew = (char*)sqlite3_malloc64(szRegion);
if( pNew==0 ){
rc = SQLITE_NOMEM;
@@ -192658,7 +194552,8 @@ static int rbuVfsAccess(
*/
if( rc==SQLITE_OK && flags==SQLITE_ACCESS_EXISTS ){
rbu_file *pDb = rbuFindMaindb(pRbuVfs, zPath, 1);
- if( pDb && pDb->pRbu && pDb->pRbu->eStage==RBU_STAGE_OAL ){
+ if( pDb && pDb->pRbu->eStage==RBU_STAGE_OAL ){
+ assert( pDb->pRbu );
if( *pResOut ){
rc = SQLITE_CANTOPEN;
}else{
@@ -194929,7 +196824,7 @@ static int sessionGrowHash(int bPatchset, SessionTable *pTab){
if( pTab->nChange==0 || pTab->nEntry>=(pTab->nChange/2) ){
int i;
SessionChange **apNew;
- int nNew = (pTab->nChange ? pTab->nChange : 128) * 2;
+ sqlite3_int64 nNew = 2*(sqlite3_int64)(pTab->nChange ? pTab->nChange : 128);
apNew = (SessionChange **)sqlite3_malloc64(sizeof(SessionChange *) * nNew);
if( apNew==0 ){
@@ -195651,7 +197546,9 @@ SQLITE_API int sqlite3session_diff(
}
sqlite3_free((char*)azCol);
if( bMismatch ){
- *pzErrMsg = sqlite3_mprintf("table schemas do not match");
+ if( pzErrMsg ){
+ *pzErrMsg = sqlite3_mprintf("table schemas do not match");
+ }
rc = SQLITE_SCHEMA;
}
if( bHasPk==0 ){
@@ -195856,8 +197753,8 @@ SQLITE_API int sqlite3session_attach(
** If successful, return zero. Otherwise, if an OOM condition is encountered,
** set *pRc to SQLITE_NOMEM and return non-zero.
*/
-static int sessionBufferGrow(SessionBuffer *p, int nByte, int *pRc){
- if( *pRc==SQLITE_OK && p->nAlloc-p->nBuf<nByte ){
+static int sessionBufferGrow(SessionBuffer *p, size_t nByte, int *pRc){
+ if( *pRc==SQLITE_OK && (size_t)(p->nAlloc-p->nBuf)<nByte ){
u8 *aNew;
i64 nNew = p->nAlloc ? p->nAlloc : 128;
do {
@@ -196974,7 +198871,7 @@ static int sessionChangesetReadTblhdr(sqlite3_changeset_iter *p){
}
if( rc==SQLITE_OK ){
- int iPK = sizeof(sqlite3_value*)*p->nCol*2;
+ size_t iPK = sizeof(sqlite3_value*)*p->nCol*2;
memset(p->tblhdr.aBuf, 0, iPK);
memcpy(&p->tblhdr.aBuf[iPK], &p->in.aData[p->in.iNext], nCopy);
p->in.iNext += nCopy;
@@ -197889,7 +199786,7 @@ static int sessionSeekToRow(
}
/*
-** This function is called from within sqlite3changset_apply_v2() when
+** This function is called from within sqlite3changeset_apply_v2() when
** a conflict is encountered and resolved using conflict resolution
** mode eType (either SQLITE_CHANGESET_OMIT or SQLITE_CHANGESET_REPLACE)..
** It adds a conflict resolution record to the buffer in
@@ -198278,7 +200175,7 @@ static int sessionRetryConstraints(
rc = sessionChangesetStart(&pIter2, 0, 0, cons.nBuf, cons.aBuf, 0);
if( rc==SQLITE_OK ){
- int nByte = 2*pApply->nCol*sizeof(sqlite3_value*);
+ size_t nByte = 2*pApply->nCol*sizeof(sqlite3_value*);
int rc2;
pIter2->bPatchset = bPatchset;
pIter2->zTab = (char*)zTab;
@@ -199671,7 +201568,7 @@ struct Fts5PhraseIter {
** Save the pointer passed as the second argument as the extension functions
** "auxiliary data". The pointer may then be retrieved by the current or any
** future invocation of the same fts5 extension function made as part of
-** of the same MATCH query using the xGetAuxdata() API.
+** the same MATCH query using the xGetAuxdata() API.
**
** Each extension function is allocated a single auxiliary data slot for
** each FTS query (MATCH expression). If the extension function is invoked
@@ -199686,7 +201583,7 @@ struct Fts5PhraseIter {
** The xDelete callback, if one is specified, is also invoked on the
** auxiliary data pointer after the FTS5 query has finished.
**
-** If an error (e.g. an OOM condition) occurs within this function, an
+** If an error (e.g. an OOM condition) occurs within this function,
** the auxiliary data is set to NULL and an error code returned. If the
** xDelete parameter was not NULL, it is invoked on the auxiliary data
** pointer before returning.
@@ -200668,8 +202565,9 @@ static void sqlite3Fts5HashClear(Fts5Hash*);
static int sqlite3Fts5HashQuery(
Fts5Hash*, /* Hash table to query */
+ int nPre,
const char *pTerm, int nTerm, /* Query term */
- const u8 **ppDoclist, /* OUT: Pointer to doclist for pTerm */
+ void **ppObj, /* OUT: Pointer to doclist for pTerm */
int *pnDoclist /* OUT: Size of doclist in bytes */
);
@@ -202739,7 +204637,7 @@ static int fts5SnippetScore(
sqlite3_int64 iAdj = iFirst - (nToken - (iLast-iFirst)) / 2;
if( (iAdj+nToken)>nDocsize ) iAdj = nDocsize - nToken;
if( iAdj<0 ) iAdj = 0;
- *piPos = iAdj;
+ *piPos = (int)iAdj;
}
return rc;
@@ -202967,7 +204865,7 @@ static int fts5Bm25GetData(
if( p==0 ){
rc = SQLITE_NOMEM;
}else{
- memset(p, 0, nByte);
+ memset(p, 0, (size_t)nByte);
p->nPhrase = nPhrase;
p->aIDF = (double*)&p[1];
p->aFreq = &p->aIDF[nPhrase];
@@ -203130,7 +205028,7 @@ static int sqlite3Fts5BufferSize(int *pRc, Fts5Buffer *pBuf, u32 nByte){
*pRc = SQLITE_NOMEM;
return 1;
}else{
- pBuf->nSpace = nNew;
+ pBuf->nSpace = (int)nNew;
pBuf->p = pNew;
}
}
@@ -203281,10 +205179,19 @@ static int sqlite3Fts5PoslistNext64(
i64 iOff = *piOff;
int iVal;
fts5FastGetVarint32(a, i, iVal);
- if( iVal==1 ){
+ if( iVal<=1 ){
+ if( iVal==0 ){
+ *pi = i;
+ return 0;
+ }
fts5FastGetVarint32(a, i, iVal);
iOff = ((i64)iVal) << 32;
fts5FastGetVarint32(a, i, iVal);
+ if( iVal<2 ){
+ /* This is a corrupt record. So stop parsing it here. */
+ *piOff = -1;
+ return 1;
+ }
}
*piOff = iOff + ((iVal-2) & 0x7FFFFFFF);
*pi = i;
@@ -203354,7 +205261,7 @@ static void *sqlite3Fts5MallocZero(int *pRc, sqlite3_int64 nByte){
if( pRet==0 ){
if( nByte>0 ) *pRc = SQLITE_NOMEM;
}else{
- memset(pRet, 0, nByte);
+ memset(pRet, 0, (size_t)nByte);
}
}
return pRet;
@@ -203823,7 +205730,7 @@ static int fts5ConfigParseSpecial(
rc = SQLITE_ERROR;
}else{
rc = sqlite3Fts5GetTokenizer(pGlobal,
- (const char**)azArg, nArg, &pConfig->pTok, &pConfig->pTokApi,
+ (const char**)azArg, (int)nArg, &pConfig->pTok, &pConfig->pTokApi,
pzErr
);
}
@@ -203933,7 +205840,7 @@ static const char *fts5ConfigGobbleWord(
if( zOut==0 ){
*pRc = SQLITE_NOMEM;
}else{
- memcpy(zOut, zIn, nIn+1);
+ memcpy(zOut, zIn, (size_t)(nIn+1));
if( fts5_isopenquote(zOut[0]) ){
int ii = fts5Dequote(zOut);
zRet = &zIn[ii];
@@ -205947,7 +207854,7 @@ static Fts5ExprNearset *sqlite3Fts5ParseNearset(
if( pRet==0 ){
pParse->rc = SQLITE_NOMEM;
}else{
- memset(pRet, 0, nByte);
+ memset(pRet, 0, (size_t)nByte);
}
}else if( (pNear->nPhrase % SZALLOC)==0 ){
int nNew = pNear->nPhrase + SZALLOC;
@@ -206023,7 +207930,7 @@ static int fts5ParseTokenize(
if( pSyn==0 ){
rc = SQLITE_NOMEM;
}else{
- memset(pSyn, 0, nByte);
+ memset(pSyn, 0, (size_t)nByte);
pSyn->zTerm = ((char*)pSyn) + sizeof(Fts5ExprTerm) + sizeof(Fts5Buffer);
memcpy(pSyn->zTerm, pToken, nToken);
pSyn->pSynonym = pPhrase->aTerm[pPhrase->nTerm-1].pSynonym;
@@ -206183,7 +208090,7 @@ static int sqlite3Fts5ExprClonePhrase(
nByte = sizeof(Fts5Colset) + (pColsetOrig->nCol-1) * sizeof(int);
pColset = (Fts5Colset*)sqlite3Fts5MallocZero(&rc, nByte);
if( pColset ){
- memcpy(pColset, pColsetOrig, nByte);
+ memcpy(pColset, pColsetOrig, (size_t)nByte);
}
pNew->pRoot->pNear->pColset = pColset;
}
@@ -206400,7 +208307,7 @@ static Fts5Colset *fts5CloneColset(int *pRc, Fts5Colset *pOrig){
sqlite3_int64 nByte = sizeof(Fts5Colset) + (pOrig->nCol-1) * sizeof(int);
pRet = (Fts5Colset*)sqlite3Fts5MallocZero(pRc, nByte);
if( pRet ){
- memcpy(pRet, pOrig, nByte);
+ memcpy(pRet, pOrig, (size_t)nByte);
}
}else{
pRet = 0;
@@ -207417,7 +209324,7 @@ static int sqlite3Fts5HashNew(Fts5Config *pConfig, Fts5Hash **ppNew, int *pnByte
*ppNew = 0;
rc = SQLITE_NOMEM;
}else{
- memset(pNew->aSlot, 0, nByte);
+ memset(pNew->aSlot, 0, (size_t)nByte);
}
}
return rc;
@@ -207501,19 +209408,25 @@ static int fts5HashResize(Fts5Hash *pHash){
return SQLITE_OK;
}
-static void fts5HashAddPoslistSize(Fts5Hash *pHash, Fts5HashEntry *p){
+static int fts5HashAddPoslistSize(
+ Fts5Hash *pHash,
+ Fts5HashEntry *p,
+ Fts5HashEntry *p2
+){
+ int nRet = 0;
if( p->iSzPoslist ){
- u8 *pPtr = (u8*)p;
+ u8 *pPtr = p2 ? (u8*)p2 : (u8*)p;
+ int nData = p->nData;
if( pHash->eDetail==FTS5_DETAIL_NONE ){
- assert( p->nData==p->iSzPoslist );
+ assert( nData==p->iSzPoslist );
if( p->bDel ){
- pPtr[p->nData++] = 0x00;
+ pPtr[nData++] = 0x00;
if( p->bContent ){
- pPtr[p->nData++] = 0x00;
+ pPtr[nData++] = 0x00;
}
}
}else{
- int nSz = (p->nData - p->iSzPoslist - 1); /* Size in bytes */
+ int nSz = (nData - p->iSzPoslist - 1); /* Size in bytes */
int nPos = nSz*2 + p->bDel; /* Value of nPos field */
assert( p->bDel==0 || p->bDel==1 );
@@ -207523,14 +209436,19 @@ static void fts5HashAddPoslistSize(Fts5Hash *pHash, Fts5HashEntry *p){
int nByte = sqlite3Fts5GetVarintLen((u32)nPos);
memmove(&pPtr[p->iSzPoslist + nByte], &pPtr[p->iSzPoslist + 1], nSz);
sqlite3Fts5PutVarint(&pPtr[p->iSzPoslist], nPos);
- p->nData += (nByte-1);
+ nData += (nByte-1);
}
}
- p->iSzPoslist = 0;
- p->bDel = 0;
- p->bContent = 0;
+ nRet = nData - p->nData;
+ if( p2==0 ){
+ p->iSzPoslist = 0;
+ p->bDel = 0;
+ p->bContent = 0;
+ p->nData = nData;
+ }
}
+ return nRet;
}
/*
@@ -207587,7 +209505,7 @@ static int sqlite3Fts5HashWrite(
p = (Fts5HashEntry*)sqlite3_malloc64(nByte);
if( !p ) return SQLITE_NOMEM;
memset(p, 0, sizeof(Fts5HashEntry));
- p->nAlloc = nByte;
+ p->nAlloc = (int)nByte;
zKey = fts5EntryKey(p);
zKey[0] = bByte;
memcpy(&zKey[1], pToken, nToken);
@@ -207642,7 +209560,7 @@ static int sqlite3Fts5HashWrite(
/* If this is a new rowid, append the 4-byte size field for the previous
** entry, and the new rowid for this entry. */
if( iRowid!=p->iRowid ){
- fts5HashAddPoslistSize(pHash, p);
+ fts5HashAddPoslistSize(pHash, p, 0);
p->nData += sqlite3Fts5PutVarint(&pPtr[p->nData], iRowid - p->iRowid);
p->iRowid = iRowid;
bNew = 1;
@@ -207759,7 +209677,9 @@ static int fts5HashEntrySort(
for(iSlot=0; iSlot<pHash->nSlot; iSlot++){
Fts5HashEntry *pIter;
for(pIter=pHash->aSlot[iSlot]; pIter; pIter=pIter->pHashNext){
- if( pTerm==0 || 0==memcmp(fts5EntryKey(pIter), pTerm, nTerm) ){
+ if( pTerm==0
+ || (pIter->nKey+1>=nTerm && 0==memcmp(fts5EntryKey(pIter), pTerm, nTerm))
+ ){
Fts5HashEntry *pEntry = pIter;
pEntry->pScanNext = 0;
for(i=0; ap[i]; i++){
@@ -207787,8 +209707,9 @@ static int fts5HashEntrySort(
*/
static int sqlite3Fts5HashQuery(
Fts5Hash *pHash, /* Hash table to query */
+ int nPre,
const char *pTerm, int nTerm, /* Query term */
- const u8 **ppDoclist, /* OUT: Pointer to doclist for pTerm */
+ void **ppOut, /* OUT: Pointer to new object */
int *pnDoclist /* OUT: Size of doclist in bytes */
){
unsigned int iHash = fts5HashKey(pHash->nSlot, (const u8*)pTerm, nTerm);
@@ -207802,11 +209723,20 @@ static int sqlite3Fts5HashQuery(
}
if( p ){
- fts5HashAddPoslistSize(pHash, p);
- *ppDoclist = (const u8*)&zKey[nTerm+1];
- *pnDoclist = p->nData - (sizeof(Fts5HashEntry) + nTerm + 1);
+ int nHashPre = sizeof(Fts5HashEntry) + nTerm + 1;
+ int nList = p->nData - nHashPre;
+ u8 *pRet = (u8*)(*ppOut = sqlite3_malloc64(nPre + nList + 10));
+ if( pRet ){
+ Fts5HashEntry *pFaux = (Fts5HashEntry*)&pRet[nPre-nHashPre];
+ memcpy(&pRet[nPre], &((u8*)p)[nHashPre], nList);
+ nList += fts5HashAddPoslistSize(pHash, p, pFaux);
+ *pnDoclist = nList;
+ }else{
+ *pnDoclist = 0;
+ return SQLITE_NOMEM;
+ }
}else{
- *ppDoclist = 0;
+ *ppOut = 0;
*pnDoclist = 0;
}
@@ -207839,7 +209769,7 @@ static void sqlite3Fts5HashScanEntry(
if( (p = pHash->pScan) ){
char *zKey = fts5EntryKey(p);
int nTerm = (int)strlen(zKey);
- fts5HashAddPoslistSize(pHash, p);
+ fts5HashAddPoslistSize(pHash, p, 0);
*pzTerm = zKey;
*ppDoclist = (const u8*)&zKey[nTerm+1];
*pnDoclist = p->nData - (sizeof(Fts5HashEntry) + nTerm + 1);
@@ -208844,7 +210774,7 @@ static Fts5Structure *fts5StructureReadUncached(Fts5Index *p){
/* TODO: Do we need this if the leaf-index is appended? Probably... */
memset(&pData->p[pData->nn], 0, FTS5_DATA_PADDING);
p->rc = fts5StructureDecode(pData->p, pData->nn, &iCookie, &pRet);
- if( p->rc==SQLITE_OK && pConfig->iCookie!=iCookie ){
+ if( p->rc==SQLITE_OK && (pConfig->pgsz==0 || pConfig->iCookie!=iCookie) ){
p->rc = sqlite3Fts5ConfigLoad(pConfig, iCookie);
}
fts5DataRelease(pData);
@@ -210309,31 +212239,40 @@ static void fts5SegIterHashInit(
int flags, /* Mask of FTS5INDEX_XXX flags */
Fts5SegIter *pIter /* Object to populate */
){
- const u8 *pList = 0;
int nList = 0;
const u8 *z = 0;
int n = 0;
+ Fts5Data *pLeaf = 0;
assert( p->pHash );
assert( p->rc==SQLITE_OK );
if( pTerm==0 || (flags & FTS5INDEX_QUERY_SCAN) ){
+ const u8 *pList = 0;
+
p->rc = sqlite3Fts5HashScanInit(p->pHash, (const char*)pTerm, nTerm);
sqlite3Fts5HashScanEntry(p->pHash, (const char**)&z, &pList, &nList);
n = (z ? (int)strlen((const char*)z) : 0);
+ if( pList ){
+ pLeaf = fts5IdxMalloc(p, sizeof(Fts5Data));
+ if( pLeaf ){
+ pLeaf->p = (u8*)pList;
+ }
+ }
}else{
- pIter->flags |= FTS5_SEGITER_ONETERM;
- sqlite3Fts5HashQuery(p->pHash, (const char*)pTerm, nTerm, &pList, &nList);
+ p->rc = sqlite3Fts5HashQuery(p->pHash, sizeof(Fts5Data),
+ (const char*)pTerm, nTerm, (void**)&pLeaf, &nList
+ );
+ if( pLeaf ){
+ pLeaf->p = (u8*)&pLeaf[1];
+ }
z = pTerm;
n = nTerm;
+ pIter->flags |= FTS5_SEGITER_ONETERM;
}
- if( pList ){
- Fts5Data *pLeaf;
+ if( pLeaf ){
sqlite3Fts5BufferSet(&p->rc, &pIter->term, n, z);
- pLeaf = fts5IdxMalloc(p, sizeof(Fts5Data));
- if( pLeaf==0 ) return;
- pLeaf->p = (u8*)pList;
pLeaf->nn = pLeaf->szLeaf = nList;
pIter->pLeaf = pLeaf;
pIter->iLeafOffset = fts5GetVarint(pLeaf->p, (u64*)&pIter->iRowid);
@@ -210486,8 +212425,8 @@ static int fts5MultiIterDoCompare(Fts5Iter *pIter, int iOut){
}else{
int res = fts5BufferCompare(&p1->term, &p2->term);
if( res==0 ){
- assert( i2>i1 );
- assert( i2!=0 );
+ assert_nc( i2>i1 );
+ assert_nc( i2!=0 );
pRes->bTermEq = 1;
if( p1->iRowid==p2->iRowid ){
p1->bDel = p2->bDel;
@@ -211534,7 +213473,7 @@ static int fts5WriteDlidxGrow(
if( aDlidx==0 ){
p->rc = SQLITE_NOMEM;
}else{
- int nByte = sizeof(Fts5DlidxWriter) * (nLvl - pWriter->nDlidx);
+ size_t nByte = sizeof(Fts5DlidxWriter) * (nLvl - pWriter->nDlidx);
memset(&aDlidx[pWriter->nDlidx], 0, nByte);
pWriter->aDlidx = aDlidx;
pWriter->nDlidx = nLvl;
@@ -212021,13 +213960,14 @@ static void fts5TrimSegments(Fts5Index *p, Fts5Iter *pIter){
/* Set up the new page-index array */
fts5BufferAppendVarint(&p->rc, &buf, 4);
if( pSeg->iLeafPgno==pSeg->iTermLeafPgno
- && pSeg->iEndofDoclist<pData->szLeaf
- ){
+ && pSeg->iEndofDoclist<pData->szLeaf
+ && pSeg->iPgidxOff<=pData->nn
+ ){
int nDiff = pData->szLeaf - pSeg->iEndofDoclist;
fts5BufferAppendVarint(&p->rc, &buf, buf.n - 1 - nDiff - 4);
fts5BufferAppendBlob(&p->rc, &buf,
pData->nn - pSeg->iPgidxOff, &pData->p[pSeg->iPgidxOff]
- );
+ );
}
pSeg->pSeg->pgnoFirst = pSeg->iTermLeafPgno;
@@ -212795,8 +214735,14 @@ static void fts5MergePrefixLists(
** first rowid in one input is a large negative number, and the first in
** the other a non-negative number, the delta for the non-negative
** number will be larger on disk than the literal integer value
- ** was. */
- if( sqlite3Fts5BufferSize(&p->rc, &out, p1->n + p2->n + 9) ) return;
+ ** was.
+ **
+ ** Or, if the input position-lists are corrupt, then the output might
+ ** include up to 2 extra 10-byte positions created by interpreting -1
+ ** (the value PoslistNext64() uses for EOF) as a position and appending
+ ** it to the output. This can happen at most once for each input
+ ** position-list, hence two 10 byte paddings. */
+ if( sqlite3Fts5BufferSize(&p->rc, &out, p1->n + p2->n + 9+10+10) ) return;
fts5DoclistIterInit(p1, &i1);
fts5DoclistIterInit(p2, &i2);
@@ -212807,6 +214753,7 @@ static void fts5MergePrefixLists(
fts5BufferSafeAppendBlob(&out, i1.aPoslist, i1.nPoslist+i1.nSize);
fts5DoclistIterNext(&i1);
if( i1.aPoslist==0 ) break;
+ assert( out.n<=((i1.aPoslist-p1->p) + (i2.aPoslist-p2->p)+9+10+10) );
}
else if( i2.iRowid!=i1.iRowid ){
/* Copy entry from i2 */
@@ -212814,6 +214761,7 @@ static void fts5MergePrefixLists(
fts5BufferSafeAppendBlob(&out, i2.aPoslist, i2.nPoslist+i2.nSize);
fts5DoclistIterNext(&i2);
if( i2.aPoslist==0 ) break;
+ assert( out.n<=((i1.aPoslist-p1->p) + (i2.aPoslist-p2->p)+9+10+10) );
}
else{
/* Merge the two position lists. */
@@ -212837,7 +214785,7 @@ static void fts5MergePrefixLists(
sqlite3Fts5PoslistNext64(a1, i1.nPoslist, &iOff1, &iPos1);
sqlite3Fts5PoslistNext64(a2, i2.nPoslist, &iOff2, &iPos2);
- assert( iPos1>=0 && iPos2>=0 );
+ assert_nc( iPos1>=0 && iPos2>=0 );
if( iPos1<iPos2 ){
sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos1);
@@ -212846,7 +214794,6 @@ static void fts5MergePrefixLists(
sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos2);
sqlite3Fts5PoslistNext64(a2, i2.nPoslist, &iOff2, &iPos2);
}
-
if( iPos1>=0 && iPos2>=0 ){
while( 1 ){
if( iPos1<iPos2 ){
@@ -212871,7 +214818,7 @@ static void fts5MergePrefixLists(
aCopy = &a1[iOff1];
nCopy = i1.nPoslist - iOff1;
}else{
- assert( iPos2>=0 && iPos2!=iPrev );
+ assert_nc( iPos2>=0 && iPos2!=iPrev );
sqlite3Fts5PoslistSafeAppend(&tmp, &iPrev, iPos2);
aCopy = &a2[iOff2];
nCopy = i2.nPoslist - iOff2;
@@ -212885,8 +214832,9 @@ static void fts5MergePrefixLists(
fts5BufferSafeAppendBlob(&out, tmp.p, tmp.n);
fts5DoclistIterNext(&i1);
fts5DoclistIterNext(&i2);
- assert( out.n<=(p1->n+p2->n+9) );
+ assert_nc( out.n<=(p1->n+p2->n+9) );
if( i1.aPoslist==0 || i2.aPoslist==0 ) break;
+ assert( out.n<=((i1.aPoslist-p1->p) + (i2.aPoslist-p2->p)+9+10+10) );
}
}
@@ -212898,7 +214846,7 @@ static void fts5MergePrefixLists(
fts5MergeAppendDocid(&out, iLastRowid, i2.iRowid);
fts5BufferSafeAppendBlob(&out, i2.aPoslist, i2.aEof - i2.aPoslist);
}
- assert( out.n<=(p1->n+p2->n+9) );
+ assert_nc( out.n<=(p1->n+p2->n+9) );
fts5BufferSet(&p->rc, p1, out.n, out.p);
fts5BufferFree(&tmp);
@@ -215049,7 +216997,7 @@ static int fts5OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
pCsr = (Fts5Cursor*)sqlite3_malloc64(nByte);
if( pCsr ){
Fts5Global *pGlobal = pTab->pGlobal;
- memset(pCsr, 0, nByte);
+ memset(pCsr, 0, (size_t)nByte);
pCsr->aColumnSize = (int*)&pCsr[1];
pCsr->pNext = pGlobal->pCsr;
pGlobal->pCsr = pCsr;
@@ -215330,7 +217278,7 @@ static int fts5CursorFirstSorted(
nByte = sizeof(Fts5Sorter) + sizeof(int) * (nPhrase-1);
pSorter = (Fts5Sorter*)sqlite3_malloc64(nByte);
if( pSorter==0 ) return SQLITE_NOMEM;
- memset(pSorter, 0, nByte);
+ memset(pSorter, 0, (size_t)nByte);
pSorter->nIdx = nPhrase;
/* TODO: It would be better to have some system for reusing statement
@@ -216884,14 +218832,14 @@ static int fts5CreateAux(
int rc = sqlite3_overload_function(pGlobal->db, zName, -1);
if( rc==SQLITE_OK ){
Fts5Auxiliary *pAux;
- int nName; /* Size of zName in bytes, including \0 */
- int nByte; /* Bytes of space to allocate */
+ sqlite3_int64 nName; /* Size of zName in bytes, including \0 */
+ sqlite3_int64 nByte; /* Bytes of space to allocate */
- nName = (int)strlen(zName) + 1;
+ nName = strlen(zName) + 1;
nByte = sizeof(Fts5Auxiliary) + nName;
- pAux = (Fts5Auxiliary*)sqlite3_malloc(nByte);
+ pAux = (Fts5Auxiliary*)sqlite3_malloc64(nByte);
if( pAux ){
- memset(pAux, 0, nByte);
+ memset(pAux, 0, (size_t)nByte);
pAux->zFunc = (char*)&pAux[1];
memcpy(pAux->zFunc, zName, nName);
pAux->pGlobal = pGlobal;
@@ -216921,15 +218869,15 @@ static int fts5CreateTokenizer(
){
Fts5Global *pGlobal = (Fts5Global*)pApi;
Fts5TokenizerModule *pNew;
- int nName; /* Size of zName and its \0 terminator */
- int nByte; /* Bytes of space to allocate */
+ sqlite3_int64 nName; /* Size of zName and its \0 terminator */
+ sqlite3_int64 nByte; /* Bytes of space to allocate */
int rc = SQLITE_OK;
- nName = (int)strlen(zName) + 1;
+ nName = strlen(zName) + 1;
nByte = sizeof(Fts5TokenizerModule) + nName;
- pNew = (Fts5TokenizerModule*)sqlite3_malloc(nByte);
+ pNew = (Fts5TokenizerModule*)sqlite3_malloc64(nByte);
if( pNew ){
- memset(pNew, 0, nByte);
+ memset(pNew, 0, (size_t)nByte);
pNew->zName = (char*)&pNew[1];
memcpy(pNew->zName, zName, nName);
pNew->pUserData = pUserData;
@@ -217064,7 +219012,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
- sqlite3_result_text(pCtx, "fts5: 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6", -1, SQLITE_TRANSIENT);
}
/*
@@ -217487,7 +219435,7 @@ static int sqlite3Fts5StorageOpen(
*pp = p = (Fts5Storage*)sqlite3_malloc64(nByte);
if( !p ) return SQLITE_NOMEM;
- memset(p, 0, nByte);
+ memset(p, 0, (size_t)nByte);
p->aTotalSize = (i64*)&p[1];
p->pConfig = pConfig;
p->pIndex = pIndex;
@@ -218709,7 +220657,7 @@ static int fts5UnicodeCreate(
p->eRemoveDiacritic = FTS5_REMOVE_DIACRITICS_SIMPLE;
p->nFold = 64;
- p->aFold = sqlite3_malloc(p->nFold * sizeof(char));
+ p->aFold = sqlite3_malloc64(p->nFold * sizeof(char));
if( p->aFold==0 ){
rc = SQLITE_NOMEM;
}
@@ -220397,7 +222345,7 @@ static void sqlite3Fts5UnicodeAscii(u8 *aArray, u8 *aAscii){
int bToken = aArray[ aFts5UnicodeData[iTbl] & 0x1F ];
int n = (aFts5UnicodeData[iTbl] >> 5) + i;
for(; i<128 && i<n; i++){
- aAscii[i] = bToken;
+ aAscii[i] = (u8)bToken;
}
iTbl++;
}
@@ -221323,8 +223271,10 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
}
if( rc==SQLITE_OK && pCsr->bEof==0 && pTab->eType==FTS5_VOCAB_COL ){
- while( pCsr->aDoc[pCsr->iCol]==0 ) pCsr->iCol++;
- assert( pCsr->iCol<pCsr->pFts5->pConfig->nCol );
+ for(/* noop */; pCsr->iCol<nCol && pCsr->aDoc[pCsr->iCol]==0; pCsr->iCol++);
+ if( pCsr->iCol==nCol ){
+ rc = FTS5_CORRUPT;
+ }
}
return rc;
}
@@ -221828,9 +223778,9 @@ SQLITE_API int sqlite3_stmt_init(
#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
/************** End of stmt.c ************************************************/
-#if __LINE__!=221831
+#if __LINE__!=223781
#undef SQLITE_SOURCE_ID
-#define SQLITE_SOURCE_ID "2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0alt2"
+#define SQLITE_SOURCE_ID "2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88alt2"
#endif
/* Return the source-id for this library */
SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
diff --git a/db/sqlite3/src/sqlite3.h b/db/sqlite3/src/sqlite3.h
index 348db7466..a4bab0ad6 100644
--- a/db/sqlite3/src/sqlite3.h
+++ b/db/sqlite3/src/sqlite3.h
@@ -123,9 +123,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.27.2"
-#define SQLITE_VERSION_NUMBER 3027002
-#define SQLITE_SOURCE_ID "2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7"
+#define SQLITE_VERSION "3.29.0"
+#define SQLITE_VERSION_NUMBER 3029000
+#define SQLITE_SOURCE_ID "2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -189,6 +189,9 @@ SQLITE_API int sqlite3_libversion_number(void);
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
SQLITE_API const char *sqlite3_compileoption_get(int N);
+#else
+# define sqlite3_compileoption_used(X) 0
+# define sqlite3_compileoption_get(X) ((void*)0)
#endif
/*
@@ -1293,8 +1296,14 @@ typedef struct sqlite3_api_routines sqlite3_api_routines;
** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
-** to test whether a file is at least readable. The file can be a
-** directory.
+** to test whether a file is at least readable. The SQLITE_ACCESS_READ
+** flag is never actually used and is not implemented in the built-in
+** VFSes of SQLite. The file is named by the second argument and can be a
+** directory. The xAccess method returns [SQLITE_OK] on success or some
+** non-zero error code if there is an I/O error or if the name of
+** the file given in the second argument is illegal. If SQLITE_OK
+** is returned, then non-zero or zero is written into *pResOut to indicate
+** whether or not the file is accessible.
**
** ^SQLite will always allocate at least mxPathname+1 bytes for the
** output buffer xFullPathname. The exact size of the output buffer
@@ -2086,8 +2095,8 @@ struct sqlite3_mem_methods {
**
** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]]
** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
-** <dd> ^This option is used to enable or disable the two-argument
-** version of the [fts3_tokenizer()] function which is part of the
+** <dd> ^This option is used to enable or disable the
+** [fts3_tokenizer()] function which is part of the
** [FTS3] full-text search engine extension.
** There should be two additional arguments.
** The first argument is an integer which is 0 to disable fts3_tokenizer() or
@@ -2195,10 +2204,50 @@ struct sqlite3_mem_methods {
** features include but are not limited to the following:
** <ul>
** <li> The [PRAGMA writable_schema=ON] statement.
+** <li> The [PRAGMA journal_mode=OFF] statement.
** <li> Writes to the [sqlite_dbpage] virtual table.
** <li> Direct writes to [shadow tables].
** </ul>
** </dd>
+**
+** [[SQLITE_DBCONFIG_WRITABLE_SCHEMA]] <dt>SQLITE_DBCONFIG_WRITABLE_SCHEMA</dt>
+** <dd>The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the
+** "writable_schema" flag. This has the same effect and is logically equivalent
+** to setting [PRAGMA writable_schema=ON] or [PRAGMA writable_schema=OFF].
+** The first argument to this setting is an integer which is 0 to disable
+** the writable_schema, positive to enable writable_schema, or negative to
+** leave the setting unchanged. The second parameter is a pointer to an
+** integer into which is written 0 or 1 to indicate whether the writable_schema
+** is enabled or disabled following this call.
+** </dd>
+**
+** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
+** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
+** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
+** the legacy behavior of the [ALTER TABLE RENAME] command such it
+** behaves as it did prior to [version 3.24.0] (2018-06-04). See the
+** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
+** additional information. This feature can also be turned on and off
+** using the [PRAGMA legacy_alter_table] statement.
+** </dd>
+**
+** [[SQLITE_DBCONFIG_DQS_DML]]
+** <dt>SQLITE_DBCONFIG_DQS_DML</td>
+** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
+** the legacy [double-quoted string literal] misfeature for DML statement
+** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
+** default value of this setting is determined by the [-DSQLITE_DQS]
+** compile-time option.
+** </dd>
+**
+** [[SQLITE_DBCONFIG_DQS_DDL]]
+** <dt>SQLITE_DBCONFIG_DQS_DDL</td>
+** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
+** the legacy [double-quoted string literal] misfeature for DDL statements,
+** such as CREATE TABLE and CREATE INDEX. The
+** default value of this setting is determined by the [-DSQLITE_DQS]
+** compile-time option.
+** </dd>
** </dl>
*/
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
@@ -2212,7 +2261,11 @@ struct sqlite3_mem_methods {
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
-#define SQLITE_DBCONFIG_MAX 1010 /* Largest DBCONFIG */
+#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
+#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
+#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
+#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1014 /* Largest DBCONFIG */
/*
** CAPI3REF: Enable Or Disable Extended Result Codes
@@ -3895,6 +3948,18 @@ SQLITE_API const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt);
SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
/*
+** CAPI3REF: Query The EXPLAIN Setting For A Prepared Statement
+** METHOD: sqlite3_stmt
+**
+** ^The sqlite3_stmt_isexplain(S) interface returns 1 if the
+** prepared statement S is an EXPLAIN statement, or 2 if the
+** statement S is an EXPLAIN QUERY PLAN.
+** ^The sqlite3_stmt_isexplain(S) interface returns 0 if S is
+** an ordinary statement or a NULL pointer.
+*/
+SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
+
+/*
** CAPI3REF: Determine If A Prepared Statement Has Been Reset
** METHOD: sqlite3_stmt
**
@@ -4033,7 +4098,9 @@ typedef struct sqlite3_context sqlite3_context;
** ^The fifth argument to the BLOB and string binding interfaces
** is a destructor used to dispose of the BLOB or
** string after SQLite has finished with it. ^The destructor is called
-** to dispose of the BLOB or string even if the call to bind API fails.
+** to dispose of the BLOB or string even if the call to the bind API fails,
+** except the destructor is not called if the third parameter is a NULL
+** pointer or the fourth parameter is negative.
** ^If the fifth argument is
** the special value [SQLITE_STATIC], then SQLite assumes that the
** information is in static, unmanaged space and does not need to be freed.
@@ -4950,6 +5017,8 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** <tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
** <td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
** against a virtual table.
+** <tr><td><b>sqlite3_value_frombind&nbsp;&nbsp;</b>
+** <td>&rarr;&nbsp;&nbsp;<td>True if value originated from a [bound parameter]
** </table></blockquote>
**
** <b>Details:</b>
@@ -5011,6 +5080,11 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** than within an [xUpdate] method call for an UPDATE statement, then
** the return value is arbitrary and meaningless.
**
+** ^The sqlite3_value_frombind(X) interface returns non-zero if the
+** value X originated from one of the [sqlite3_bind_int|sqlite3_bind()]
+** interfaces. ^If X comes from an SQL literal value, or a table column,
+** and expression, then sqlite3_value_frombind(X) returns zero.
+**
** Please pay particular attention to the fact that the pointer returned
** from [sqlite3_value_blob()], [sqlite3_value_text()], or
** [sqlite3_value_text16()] can be invalidated by a subsequent call to
@@ -5056,6 +5130,7 @@ SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
SQLITE_API int sqlite3_value_type(sqlite3_value*);
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
+SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
/*
** CAPI3REF: Finding The Subtype Of SQL Values
@@ -5791,7 +5866,7 @@ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
** associated with database N of connection D. ^The main database file
** has the name "main". If there is no attached database N on the database
** connection D, or if database N is a temporary or in-memory database, then
-** a NULL pointer is returned.
+** this function will return either a NULL pointer or an empty string.
**
** ^The filename returned by this function is the output of the
** xFullPathname method of the [VFS]. ^In other words, the filename
@@ -7282,7 +7357,8 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_SORTER_MMAP 24
#define SQLITE_TESTCTRL_IMPOSTER 25
#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
-#define SQLITE_TESTCTRL_LAST 26 /* Largest TESTCTRL */
+#define SQLITE_TESTCTRL_RESULT_INTREAL 27
+#define SQLITE_TESTCTRL_LAST 27 /* Largest TESTCTRL */
/*
** CAPI3REF: SQL Keyword Checking
@@ -10892,7 +10968,7 @@ SQLITE_API int sqlite3rebaser_configure(
** in size. This function allocates and populates a buffer with a copy
** of the changeset rebased rebased according to the configuration of the
** rebaser object passed as the first argument. If successful, (*ppOut)
-** is set to point to the new buffer containing the rebased changset and
+** is set to point to the new buffer containing the rebased changeset and
** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the
** responsibility of the caller to eventually free the new buffer using
** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut)
@@ -11301,7 +11377,7 @@ struct Fts5PhraseIter {
** Save the pointer passed as the second argument as the extension functions
** "auxiliary data". The pointer may then be retrieved by the current or any
** future invocation of the same fts5 extension function made as part of
-** of the same MATCH query using the xGetAuxdata() API.
+** the same MATCH query using the xGetAuxdata() API.
**
** Each extension function is allocated a single auxiliary data slot for
** each FTS query (MATCH expression). If the extension function is invoked
@@ -11316,7 +11392,7 @@ struct Fts5PhraseIter {
** The xDelete callback, if one is specified, is also invoked on the
** auxiliary data pointer after the FTS5 query has finished.
**
-** If an error (e.g. an OOM condition) occurs within this function, an
+** If an error (e.g. an OOM condition) occurs within this function,
** the auxiliary data is set to NULL and an error code returned. If the
** xDelete parameter was not NULL, it is invoked on the auxiliary data
** pointer before returning.
diff --git a/devtools/client/framework/devtools-browser.js b/devtools/client/framework/devtools-browser.js
index 4d7176b4c..83a888ab9 100644
--- a/devtools/client/framework/devtools-browser.js
+++ b/devtools/client/framework/devtools-browser.js
@@ -123,23 +123,6 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
win.DeveloperToolbar.show(false).catch(console.error);
}
- // Enable WebIDE?
- let webIDEEnabled = Services.prefs.getBoolPref("devtools.webide.enabled");
- idEls = [
- "appmenu_webide",
- "menu_webide"
- ];
- idEls.forEach(function (idEl) {
- toggleMenuItem(idEl, webIDEEnabled);
- });
-
- let showWebIDEWidget = Services.prefs.getBoolPref("devtools.webide.widget.enabled");
- if (webIDEEnabled && showWebIDEWidget) {
- gDevToolsBrowser.installWebIDEWidget();
- } else {
- gDevToolsBrowser.uninstallWebIDEWidget();
- }
-
// Enable Browser Toolbox?
let chromeEnabled = Services.prefs.getBoolPref("devtools.chrome.enabled");
let devtoolsRemoteEnabled = Services.prefs.getBoolPref("devtools.debugger.remote-enabled");
@@ -347,9 +330,7 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
viewId: "PanelUI-developer",
shortcutId: "key_devToolboxMenuItem",
tooltiptext: "developer-button.tooltiptext2",
- defaultArea: AppConstants.MOZ_DEV_EDITION ?
- CustomizableUI.AREA_NAVBAR :
- CustomizableUI.AREA_PANEL,
+ defaultArea: CustomizableUI.AREA_PANEL,
onViewShowing: function (aEvent) {
// Populate the subview with whatever menuitems are in the developer
// menu. We skip menu elements, because the menu panel has no way
diff --git a/devtools/client/framework/gDevTools.jsm b/devtools/client/framework/gDevTools.jsm
index d825c0eaa..6e0dc5e83 100644
--- a/devtools/client/framework/gDevTools.jsm
+++ b/devtools/client/framework/gDevTools.jsm
@@ -127,15 +127,8 @@ let gDevToolsBrowserMethods = [
"openConnectScreen",
// Used by browser-sets.inc, command
- // itself, webide widget
- "openWebIDE",
-
- // Used by browser-sets.inc, command
"openContentProcessToolbox",
- // Used by webide.js
- "moveWebIDEWidgetInNavbar",
-
// Used by browser.js
"registerBrowserWindow",
@@ -146,10 +139,6 @@ let gDevToolsBrowserMethods = [
"forgetBrowserWindow"
];
this.gDevToolsBrowser = {
- // Used by webide.js
- get isWebIDEInitialized() {
- return browser.isWebIDEInitialized;
- },
// Used by a test (should be removed)
get _trackedBrowserWindows() {
return browser._trackedBrowserWindows;
diff --git a/devtools/client/jsonview/converter-child.js b/devtools/client/jsonview/converter-child.js
index 61aa0c9a3..65327c395 100644
--- a/devtools/client/jsonview/converter-child.js
+++ b/devtools/client/jsonview/converter-child.js
@@ -23,10 +23,6 @@ const childProcessMessageManager =
Cc["@mozilla.org/childprocessmessagemanager;1"]
.getService(Ci.nsISyncMessageSender);
-// Amount of space that will be allocated for the stream's backing-store.
-// Must be power of 2. Used to copy the data stream in onStopRequest.
-const SEGMENT_SIZE = Math.pow(2, 17);
-
const JSON_VIEW_MIME_TYPE = "application/vnd.mozilla.json.view";
const CONTRACT_ID = "@mozilla.org/streamconv;1?from=" +
JSON_VIEW_MIME_TYPE + "&to=*/*";
@@ -61,9 +57,8 @@ let Converter = Class({
* 1. asyncConvertData captures the listener
* 2. onStartRequest fires, initializes stuff, modifies the listener
* to match our output type
- * 3. onDataAvailable transcodes the data into a UTF-8 string
- * 4. onStopRequest gets the collected data and converts it,
- * spits it to the listener
+ * 3. onDataAvailable spits it back to the listener
+ * 4. onStopRequest spits it back to the listener
* 5. convert does nothing, it's just the synchronous version
* of asyncConvertData
*/
@@ -76,243 +71,221 @@ let Converter = Class({
},
onDataAvailable: function (request, context, inputStream, offset, count) {
- // From https://developer.mozilla.org/en/Reading_textual_data
- let is = Cc["@mozilla.org/intl/converter-input-stream;1"]
- .createInstance(Ci.nsIConverterInputStream);
- is.init(inputStream, this.charset, -1,
- Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
-
- // Seed it with something positive
- while (count) {
- let str = {};
- let bytesRead = is.readString(count, str);
- if (!bytesRead) {
- break;
- }
- count -= bytesRead;
- this.data += str.value;
- }
+ this.listener.onDataAvailable(...arguments);
},
onStartRequest: function (request, context) {
- this.data = "";
- this.uri = request.QueryInterface(Ci.nsIChannel).URI.spec;
+ // Set the content type to HTML in order to parse the doctype, styles
+ // and scripts, but later a <plaintext> element will switch the tokenizer
+ // to the plaintext state in order to parse the JSON.
+ request.QueryInterface(Ci.nsIChannel);
+ request.contentType = "text/html";
- // Sets the charset if it is available. (For documents loaded from the
- // filesystem, this is not set.)
- this.charset =
- request.QueryInterface(Ci.nsIChannel).contentCharset || "UTF-8";
+ // JSON enforces UTF-8 charset (see bug 741776).
+ request.contentCharset = "UTF-8";
+
+ // Changing the content type breaks saving functionality. Fix it.
+ fixSave(request);
- this.channel = request;
- this.channel.contentType = "text/html";
- this.channel.contentCharset = "UTF-8";
// Because content might still have a reference to this window,
// force setting it to a null principal to avoid it being same-
// origin with (other) content.
- this.channel.loadInfo.resetPrincipalsToNullPrincipal();
+ request.loadInfo.resetPrincipalsToNullPrincipal();
- this.listener.onStartRequest(this.channel, context);
- },
-
- /**
- * This should go something like this:
- * 1. Make sure we have a unicode string.
- * 2. Convert it to a Javascript object.
- * 2.1 Removes the callback
- * 3. Convert that to HTML? Or XUL?
- * 4. Spit it back out at the listener
- */
- onStopRequest: function (request, context, statusCode) {
- let headers = {
- response: [],
- request: []
- };
+ // Start the request.
+ this.listener.onStartRequest(request, context);
+ // Initialize stuff.
let win = NetworkHelper.getWindowForRequest(request);
+ exportData(win, request);
+ win.addEventListener("DOMContentLoaded", event => {
+ win.addEventListener("contentMessage", onContentMessage, false, true);
+ }, {once: true});
+
+ // Insert the initial HTML code.
+ let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
+ .createInstance(Ci.nsIScriptableUnicodeConverter);
+ converter.charset = "UTF-8";
+ let stream = converter.convertToInputStream(initialHTML(win.document));
+ this.listener.onDataAvailable(request, context, stream, 0, stream.available());
+ },
- let Locale = {
- $STR: key => {
- try {
- return jsonViewStrings.GetStringFromName(key);
- } catch (err) {
- console.error(err);
- return undefined;
- }
- }
- };
-
- JsonViewUtils.exportIntoContentScope(win, Locale, "Locale");
-
- Events.once(win, "DOMContentLoaded", event => {
- win.addEventListener("contentMessage",
- this.onContentMessage.bind(this), false, true);
- });
-
- // The request doesn't have to be always nsIHttpChannel
- // (e.g. in case of data: URLs)
- if (request instanceof Ci.nsIHttpChannel) {
- request.visitResponseHeaders({
- visitHeader: function (name, value) {
- headers.response.push({name: name, value: value});
- }
- });
-
- request.visitRequestHeaders({
- visitHeader: function (name, value) {
- headers.request.push({name: name, value: value});
- }
- });
- }
-
- let outputDoc = "";
+ onStopRequest: function (request, context, statusCode) {
+ this.listener.onStopRequest(request, context, statusCode);
+ this.listener = null;
+ }
+});
+// Lets "save as" save the original JSON, not the viewer.
+// To save with the proper extension we need the original content type,
+// which has been replaced by application/vnd.mozilla.json.view
+function fixSave(request) {
+ let originalType;
+ if (request instanceof Ci.nsIHttpChannel) {
try {
- headers = JSON.stringify(headers);
- outputDoc = this.toHTML(this.data, headers, this.uri);
- } catch (e) {
- console.error("JSON Viewer ERROR " + e);
- outputDoc = this.toErrorPage(e, this.data, this.uri);
+ let header = request.getResponseHeader("Content-Type");
+ originalType = header.split(";")[0];
+ } catch (err) {
+ // Handled below
}
-
- let storage = Cc["@mozilla.org/storagestream;1"]
- .createInstance(Ci.nsIStorageStream);
-
- storage.init(SEGMENT_SIZE, 0xffffffff, null);
- let out = storage.getOutputStream(0);
-
- let binout = Cc["@mozilla.org/binaryoutputstream;1"]
- .createInstance(Ci.nsIBinaryOutputStream);
-
- binout.setOutputStream(out);
- binout.writeUtf8Z(outputDoc);
- binout.close();
-
- // We need to trim 4 bytes off the front (this could be underlying bug).
- let trunc = 4;
- let instream = storage.newInputStream(trunc);
-
- // Pass the data to the main content listener
- this.listener.onDataAvailable(this.channel, context, instream, 0,
- instream.available());
-
- this.listener.onStopRequest(this.channel, context, statusCode);
-
- this.listener = null;
- },
-
- htmlEncode: function (t) {
- return t !== null ? t.toString()
- .replace(/&/g, "&amp;")
- .replace(/"/g, "&quot;")
- .replace(/</g, "&lt;")
- .replace(/>/g, "&gt;") : "";
- },
-
- toHTML: function (json, headers, title) {
- let themeClassName = "theme-" + JsonViewUtils.getCurrentTheme();
- let clientBaseUrl = "resource://devtools/client/";
- let baseUrl = clientBaseUrl + "jsonview/";
- let themeVarsUrl = clientBaseUrl + "themes/variables.css";
- let commonUrl = clientBaseUrl + "themes/common.css";
- let toolbarsUrl = clientBaseUrl + "themes/toolbars.css";
-
- let os;
- let platform = Services.appinfo.OS;
- if (platform.startsWith("WINNT")) {
- os = "win";
- } else if (platform.startsWith("Darwin")) {
- os = "mac";
- } else {
- os = "linux";
+ } else {
+ let uri = request.QueryInterface(Ci.nsIChannel).URI.spec;
+ let match = uri.match(/^data:(.*?)[,;]/);
+ if (match) {
+ originalType = match[1];
}
+ }
+ const JSON_TYPES = ["application/json", "application/manifest+json"];
+ if (!JSON_TYPES.includes(originalType)) {
+ originalType = JSON_TYPES[0];
+ }
+ request.QueryInterface(Ci.nsIWritablePropertyBag);
+ request.setProperty("contentType", originalType);
+}
- return "<!DOCTYPE html>\n" +
- "<html platform=\"" + os + "\" class=\"" + themeClassName + "\">" +
- "<head><title>" + this.htmlEncode(title) + "</title>" +
- "<base href=\"" + this.htmlEncode(baseUrl) + "\">" +
- "<link rel=\"stylesheet\" type=\"text/css\" href=\"" +
- themeVarsUrl + "\">" +
- "<link rel=\"stylesheet\" type=\"text/css\" href=\"" +
- commonUrl + "\">" +
- "<link rel=\"stylesheet\" type=\"text/css\" href=\"" +
- toolbarsUrl + "\">" +
- "<link rel=\"stylesheet\" type=\"text/css\" href=\"css/main.css\">" +
- "<script data-main=\"viewer-config\" src=\"lib/require.js\"></script>" +
- "</head><body>" +
- "<div id=\"content\"></div>" +
- "<div id=\"json\">" + this.htmlEncode(json) + "</div>" +
- "<div id=\"headers\">" + this.htmlEncode(headers) + "</div>" +
- "</body></html>";
- },
-
- toErrorPage: function (error, data, uri) {
- // Escape unicode nulls
- data = data.replace("\u0000", "\uFFFD");
+// Exports variables that will be accessed by the non-privileged scripts.
+function exportData(win, request) {
+ let Locale = {
+ $STR: key => {
+ try {
+ return jsonViewStrings.GetStringFromName(key);
+ } catch (err) {
+ console.error(err);
+ return undefined;
+ }
+ }
+ };
+ JsonViewUtils.exportIntoContentScope(win, Locale, "Locale");
+
+ let headers = {
+ response: [],
+ request: []
+ };
+ // The request doesn't have to be always nsIHttpChannel
+ // (e.g. in case of data: URLs)
+ if (request instanceof Ci.nsIHttpChannel) {
+ request.visitResponseHeaders({
+ visitHeader: function (name, value) {
+ headers.response.push({name: name, value: value});
+ }
+ });
+ request.visitRequestHeaders({
+ visitHeader: function (name, value) {
+ headers.request.push({name: name, value: value});
+ }
+ });
+ }
+ JsonViewUtils.exportIntoContentScope(win, headers, "headers");
+}
- let errorInfo = error + "";
+// Serializes a qualifiedName and an optional set of attributes into an HTML
+// start tag. Be aware qualifiedName and attribute names are not validated.
+// Attribute values are escaped with escapingString algorithm in attribute mode
+// (https://html.spec.whatwg.org/multipage/syntax.html#escapingString).
+function startTag(qualifiedName, attributes = {}) {
+ return Object.entries(attributes).reduce(function (prev, [attr, value]) {
+ return prev + " " + attr + "=\"" +
+ value.replace(/&/g, "&amp;")
+ .replace(/\u00a0/g, "&nbsp;")
+ .replace(/"/g, "&quot;") +
+ "\"";
+ }, "<" + qualifiedName) + ">";
+}
- let output = "<div id=\"error\">" + "error parsing";
- if (errorInfo.message) {
- output += "<div class=\"errormessage\">" + errorInfo.message + "</div>";
- }
+// Builds an HTML string that will be used to load stylesheets and scripts,
+// and switch the parser to plaintext state.
+function initialHTML(doc) {
+ let os;
+ let platform = Services.appinfo.OS;
+ if (platform.startsWith("WINNT")) {
+ os = "win";
+ } else if (platform.startsWith("Darwin")) {
+ os = "mac";
+ } else {
+ os = "linux";
+ }
- output += "</div><div id=\"json\">" + this.highlightError(data,
- errorInfo.line, errorInfo.column) + "</div>";
+ let base = doc.createElement("base");
+ base.href = "resource://devtools/client/jsonview/";
+
+ let style = doc.createElement("link");
+ style.rel = "stylesheet";
+ style.type = "text/css";
+ style.href = "css/main.css";
+
+ let script = doc.createElement("script");
+ script.src = "lib/require.js";
+ script.dataset.main = "viewer-config";
+ script.defer = true;
+
+ let head = doc.createElement("head");
+ head.append(base, style, script);
+
+ return "<!DOCTYPE html>\n" +
+ startTag("html", {
+ "platform": os,
+ "class": "theme-" + JsonViewUtils.getCurrentTheme(),
+ "dir": Services.locale.isAppLocaleRTL ? "rtl" : "ltr"
+ }) +
+ head.outerHTML +
+ startTag("body") +
+ startTag("div", {"id": "content"}) +
+ startTag("plaintext", {"id": "json"});
+}
- return "<!DOCTYPE html>\n" +
- "<html><head><title>" + this.htmlEncode(uri + " - Error") + "</title>" +
- "<base href=\"" + this.htmlEncode(this.data.url()) + "\">" +
- "</head><body>" +
- output +
- "</body></html>";
- },
+// Chrome <-> Content communication
+function onContentMessage(e) {
+ // Do not handle events from different documents.
+ let win = this;
+ if (win != e.target) {
+ return;
+ }
- // Chrome <-> Content communication
+ let value = e.detail.value;
+ switch (e.detail.type) {
+ case "copy":
+ copyString(win, value);
+ break;
- onContentMessage: function (e) {
- // Do not handle events from different documents.
- let win = NetworkHelper.getWindowForRequest(this.channel);
- if (win != e.target) {
- return;
- }
+ case "copy-headers":
+ copyHeaders(win, value);
+ break;
- let value = e.detail.value;
- switch (e.detail.type) {
- case "copy":
- Clipboard.set(value, "text");
- break;
+ case "save":
+ childProcessMessageManager.sendAsyncMessage(
+ "devtools:jsonview:save", value);
+ }
+}
- case "copy-headers":
- this.copyHeaders(value);
- break;
+function copyHeaders(win, headers) {
+ let value = "";
+ let eol = (Services.appinfo.OS !== "WINNT") ? "\n" : "\r\n";
- case "save":
- childProcessMessageManager.sendAsyncMessage(
- "devtools:jsonview:save", value);
- }
- },
+ let responseHeaders = headers.response;
+ for (let i = 0; i < responseHeaders.length; i++) {
+ let header = responseHeaders[i];
+ value += header.name + ": " + header.value + eol;
+ }
- copyHeaders: function (headers) {
- let value = "";
- let eol = (Services.appinfo.OS !== "WINNT") ? "\n" : "\r\n";
+ value += eol;
- let responseHeaders = headers.response;
- for (let i = 0; i < responseHeaders.length; i++) {
- let header = responseHeaders[i];
- value += header.name + ": " + header.value + eol;
- }
+ let requestHeaders = headers.request;
+ for (let i = 0; i < requestHeaders.length; i++) {
+ let header = requestHeaders[i];
+ value += header.name + ": " + header.value + eol;
+ }
- value += eol;
+ copyString(win, value);
+}
- let requestHeaders = headers.request;
- for (let i = 0; i < requestHeaders.length; i++) {
- let header = requestHeaders[i];
- value += header.name + ": " + header.value + eol;
- }
+function copyString(win, string) {
+ win.document.addEventListener("copy", event => {
+ event.clipboardData.setData("text/plain", string);
+ event.preventDefault();
+ }, {once: true});
- Clipboard.set(value, "text");
- }
-});
+ win.document.execCommand("copy", false, null);
+}
// Stream converter component definition
let service = xpcom.Service({
diff --git a/devtools/client/jsonview/css/general.css b/devtools/client/jsonview/css/general.css
index 0c68d65e7..d80720f4f 100644
--- a/devtools/client/jsonview/css/general.css
+++ b/devtools/client/jsonview/css/general.css
@@ -28,9 +28,9 @@ pre {
font-family: var(--monospace-font-family);
}
-#json,
-#headers {
+#json {
display: none;
+ white-space: pre-wrap;
}
/******************************************************************************/
diff --git a/devtools/client/jsonview/css/main.css b/devtools/client/jsonview/css/main.css
index 04f3cb87c..c75d7cea0 100644
--- a/devtools/client/jsonview/css/main.css
+++ b/devtools/client/jsonview/css/main.css
@@ -3,7 +3,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-@import "resource://devtools/client/shared/components/reps/reps.css";
+@import "resource://devtools/client/themes/variables.css";
+@import "resource://devtools/client/themes/common.css";
+@import "resource://devtools/client/themes/toolbars.css";
@import "resource://devtools/client/shared/components/tree/tree-view.css";
@import "resource://devtools/client/shared/components/tabs/tabs.css";
diff --git a/devtools/client/jsonview/json-viewer.js b/devtools/client/jsonview/json-viewer.js
index d96081da2..38cb6d7ec 100644
--- a/devtools/client/jsonview/json-viewer.js
+++ b/devtools/client/jsonview/json-viewer.js
@@ -12,28 +12,28 @@ define(function (require, exports, module) {
const { MainTabbedArea } = createFactories(require("./components/main-tabbed-area"));
const json = document.getElementById("json");
- const headers = document.getElementById("headers");
-
- let jsonData;
-
- try {
- jsonData = JSON.parse(json.textContent);
- } catch (err) {
- jsonData = err + "";
- }
// Application state object.
let input = {
jsonText: json.textContent,
jsonPretty: null,
- json: jsonData,
- headers: JSON.parse(headers.textContent),
+ headers: window.headers,
tabActive: 0,
prettified: false
};
+ // Remove BOM, if present.
+ if (input.jsonText.startsWith("\ufeff")) {
+ input.jsonText = input.jsonText.slice(1);
+ }
+
+ try {
+ input.json = JSON.parse(input.jsonText);
+ } catch (err) {
+ input.json = err;
+ }
+
json.remove();
- headers.remove();
/**
* Application actions/commands. This list implements all commands
@@ -61,7 +61,7 @@ define(function (require, exports, module) {
theApp.setState({jsonText: input.jsonText});
} else {
if (!input.jsonPretty) {
- input.jsonPretty = JSON.stringify(jsonData, null, " ");
+ input.jsonPretty = JSON.stringify(input.json, null, " ");
}
theApp.setState({jsonText: input.jsonPretty});
}
diff --git a/devtools/client/jsonview/utils.js b/devtools/client/jsonview/utils.js
index a70afdc68..6ab697c89 100644
--- a/devtools/client/jsonview/utils.js
+++ b/devtools/client/jsonview/utils.js
@@ -96,6 +96,8 @@ exports.exportIntoContentScope = function (win, obj, defineAs) {
Cu.exportFunction(propValue, clone, {
defineAs: propName
});
+ } else {
+ clone[propName] = Cu.cloneInto(propValue, win);
}
}
};
diff --git a/devtools/client/locales/en-US/menus.properties b/devtools/client/locales/en-US/menus.properties
index 66e158cbd..7030fe17d 100644
--- a/devtools/client/locales/en-US/menus.properties
+++ b/devtools/client/locales/en-US/menus.properties
@@ -54,11 +54,6 @@ devToolbarMenu.accesskey = v
devToolbarMenu.key = VK_F2
devToolbarMenu.keytext = F2
-webide.label = WebIDE
-webide.accesskey = W
-webide.key = VK_F8
-webide.keytext = F8
-
devToolboxMenuItem.label = Toggle Tools
devToolboxMenuItem.accesskey = T
devToolboxMenuItem.key = I
diff --git a/devtools/client/locales/en-US/webide.dtd b/devtools/client/locales/en-US/webide.dtd
deleted file mode 100644
index 554488f6d..000000000
--- a/devtools/client/locales/en-US/webide.dtd
+++ /dev/null
@@ -1,222 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!ENTITY % brandDTD
- SYSTEM "chrome://branding/locale/brand.dtd">
- %brandDTD;
-
-<!ENTITY windowTitle "&brandShortName; WebIDE">
-
-<!ENTITY projectMenu_label "Project">
-<!ENTITY projectMenu_accesskey "P">
-<!ENTITY projectMenu_newApp_label "New App…">
-<!ENTITY projectMenu_newApp_accesskey "N">
-<!ENTITY projectMenu_importPackagedApp_label "Open Packaged App…">
-<!ENTITY projectMenu_importPackagedApp_accesskey "P">
-<!ENTITY projectMenu_importHostedApp_label "Open Hosted App…">
-<!ENTITY projectMenu_importHostedApp_accesskey "H">
-<!ENTITY projectMenu_selectApp_label "Open App…">
-<!ENTITY projectMenu_selectApp_accesskey "O">
-<!ENTITY projectMenu_play_label "Install and Run">
-<!ENTITY projectMenu_play_accesskey "I">
-<!ENTITY projectMenu_stop_label "Stop App">
-<!ENTITY projectMenu_stop_accesskey "S">
-<!ENTITY projectMenu_debug_label "Debug App">
-<!ENTITY projectMenu_debug_accesskey "D">
-<!ENTITY projectMenu_remove_label "Remove Project">
-<!ENTITY projectMenu_remove_accesskey "R">
-<!ENTITY projectMenu_showPrefs_label "Preferences">
-<!ENTITY projectMenu_showPrefs_accesskey "e">
-<!ENTITY projectMenu_manageComponents_label "Manage Extra Components">
-<!ENTITY projectMenu_manageComponents_accesskey "M">
-<!ENTITY projectMenu_refreshTabs_label "Refresh Tabs">
-
-<!ENTITY runtimeMenu_label "Runtime">
-<!ENTITY runtimeMenu_accesskey "R">
-<!ENTITY runtimeMenu_disconnect_label "Disconnect">
-<!ENTITY runtimeMenu_disconnect_accesskey "D">
-<!ENTITY runtimeMenu_showPermissionTable_label "Permissions Table">
-<!ENTITY runtimeMenu_showPermissionTable_accesskey "P">
-<!ENTITY runtimeMenu_takeScreenshot_label "Screenshot">
-<!ENTITY runtimeMenu_takeScreenshot_accesskey "S">
-<!ENTITY runtimeMenu_showDetails_label "Runtime Info">
-<!ENTITY runtimeMenu_showDetails_accesskey "E">
-<!ENTITY runtimeMenu_showMonitor_label "Monitor">
-<!ENTITY runtimeMenu_showMonitor_accesskey "M">
-<!ENTITY runtimeMenu_showDevicePrefs_label "Device Preferences">
-<!ENTITY runtimeMenu_showDevicePrefs_accesskey "D">
-<!ENTITY runtimeMenu_showSettings_label "Device Settings">
-<!ENTITY runtimeMenu_showSettings_accesskey "s">
-
-<!ENTITY viewMenu_label "View">
-<!ENTITY viewMenu_accesskey "V">
-<!ENTITY viewMenu_toggleEditor_label "Toggle Editor">
-<!ENTITY viewMenu_toggleEditor_accesskey "E">
-<!ENTITY viewMenu_zoomin_label "Zoom In">
-<!ENTITY viewMenu_zoomin_accesskey "I">
-<!ENTITY viewMenu_zoomout_label "Zoom Out">
-<!ENTITY viewMenu_zoomout_accesskey "O">
-<!ENTITY viewMenu_resetzoom_label "Reset Zoom">
-<!ENTITY viewMenu_resetzoom_accesskey "R">
-
-<!ENTITY projectButton_label "Open App">
-<!ENTITY runtimeButton_label "Select Runtime">
-
-<!-- We try to repicate browser' bindings: -->
-<!-- quit app -->
-<!ENTITY key_quit "W">
-<!-- open menu -->
-<!ENTITY key_showProjectPanel "O">
-<!-- reload app -->
-<!ENTITY key_play "R">
-<!-- show toolbox -->
-<!ENTITY key_toggleToolbox "VK_F12">
-<!-- toggle sidebar -->
-<!ENTITY key_toggleEditor "B">
-<!-- zoom -->
-<!ENTITY key_zoomin "+">
-<!ENTITY key_zoomin2 "=">
-<!ENTITY key_zoomout "-">
-<!ENTITY key_resetzoom "0">
-
-<!ENTITY projectPanel_myProjects "My Projects">
-<!ENTITY projectPanel_runtimeApps "Runtime Apps">
-<!ENTITY projectPanel_tabs "Tabs">
-<!ENTITY runtimePanel_usb "USB Devices">
-<!ENTITY runtimePanel_wifi "Wi-Fi Devices">
-<!ENTITY runtimePanel_simulator "Simulators">
-<!ENTITY runtimePanel_other "Other">
-<!ENTITY runtimePanel_installsimulator "Install Simulator">
-<!ENTITY runtimePanel_noadbhelper "Install ADB Helper">
-<!ENTITY runtimePanel_nousbdevice "Can’t see your device?">
-<!ENTITY runtimePanel_refreshDevices_label "Refresh Devices">
-
-<!-- Lense -->
-<!ENTITY details_valid_header "valid">
-<!ENTITY details_warning_header "warnings">
-<!ENTITY details_error_header "errors">
-<!ENTITY details_description "Description">
-<!ENTITY details_location "Location">
-<!ENTITY details_manifestURL "App ID">
-<!ENTITY details_removeProject_button "Remove Project">
-<!ENTITY details_showPrepackageLog_button "Show Pre-package Log">
-
-<!-- New App -->
-<!ENTITY newAppWindowTitle "New App">
-<!ENTITY newAppHeader "Select template">
-<!ENTITY newAppLoadingTemplate "Loading templates…">
-<!ENTITY newAppProjectName "Project Name:">
-
-
-<!-- Decks -->
-
-<!ENTITY deck_close "Close">
-
-<!-- Addons -->
-<!ENTITY addons_title "Extra Components">
-<!ENTITY addons_aboutaddons "Open Add-ons Manager">
-
-<!-- Prefs -->
-<!ENTITY prefs_title "Preferences">
-<!ENTITY prefs_editor_title "Editor">
-<!ENTITY prefs_general_title "General">
-<!ENTITY prefs_restore "Restore Defaults">
-<!ENTITY prefs_manage_components "Manage Extra Components">
-<!ENTITY prefs_options_autoconnectruntime "Reconnect to previous runtime">
-<!ENTITY prefs_options_autoconnectruntime_tooltip "Reconnect to previous runtime when WebIDE starts">
-<!ENTITY prefs_options_rememberlastproject "Remember last project">
-<!ENTITY prefs_options_rememberlastproject_tooltip "Restore previous project when WebIDE starts">
-<!ENTITY prefs_options_templatesurl "Templates URL">
-<!ENTITY prefs_options_templatesurl_tooltip "Index of available templates">
-<!ENTITY prefs_options_showeditor "Show editor">
-<!ENTITY prefs_options_showeditor_tooltip "Show internal editor">
-<!ENTITY prefs_options_tabsize "Tab size">
-<!ENTITY prefs_options_expandtab "Soft tabs">
-<!ENTITY prefs_options_expandtab_tooltip "Use spaces instead of the tab character">
-<!ENTITY prefs_options_detectindentation "Autoindent">
-<!ENTITY prefs_options_detectindentation_tooltip "Guess indentation based on source content">
-<!ENTITY prefs_options_autocomplete "Autocomplete">
-<!ENTITY prefs_options_autocomplete_tooltip "Enable code autocompletion">
-<!ENTITY prefs_options_autoclosebrackets "Autoclose brackets">
-<!ENTITY prefs_options_autoclosebrackets_tooltip "Automatically insert closing brackets">
-<!ENTITY prefs_options_keybindings "Keybindings">
-<!ENTITY prefs_options_keybindings_default "Default">
-<!ENTITY prefs_options_autosavefiles "Autosave files">
-<!ENTITY prefs_options_autosavefiles_tooltip "Automatically save edited files before running project">
-
-<!-- Permissions Table -->
-<!ENTITY permissionstable_title "Permissions Table">
-<!ENTITY permissionstable_name_header "Name">
-
-<!-- Runtime Details -->
-<!ENTITY runtimedetails_title "Runtime Info">
-<!ENTITY runtimedetails_adbIsRoot "ADB is root: ">
-<!ENTITY runtimedetails_summonADBRoot "root device">
-<!ENTITY runtimedetails_ADBRootWarning "(requires unlocked bootloader)">
-<!ENTITY runtimedetails_unrestrictedPrivileges "Unrestricted DevTools privileges: ">
-<!ENTITY runtimedetails_requestPrivileges "request higher privileges">
-<!ENTITY runtimedetails_privilegesWarning "(Will reboot device. Requires root access.)">
-
-<!-- Device Preferences and Settings -->
-<!ENTITY device_typeboolean "Boolean">
-<!ENTITY device_typenumber "Integer">
-<!ENTITY device_typestring "String">
-<!ENTITY device_typeobject "Object">
-<!ENTITY device_typenone "Select a type">
-
-<!-- Device Preferences -->
-<!ENTITY devicepreference_title "Device Preferences">
-<!ENTITY devicepreference_search "Search preferences">
-<!ENTITY devicepreference_newname "New preference name">
-<!ENTITY devicepreference_newtext "Preference value">
-<!ENTITY devicepreference_addnew "Add new preference">
-
-<!-- Device Settings -->
-<!ENTITY devicesetting_title "Device Settings">
-<!ENTITY devicesetting_search "Search settings">
-<!ENTITY devicesetting_newname "New setting name">
-<!ENTITY devicesetting_newtext "Setting value">
-<!ENTITY devicesetting_addnew "Add new setting">
-
-<!-- Monitor -->
-<!ENTITY monitor_title "Monitor">
-<!ENTITY monitor_help "Help">
-
-<!-- WiFi Authentication -->
-<!-- LOCALIZATION NOTE (wifi_auth_header): The header displayed on the dialog
- that instructs the user to transfer an authentication token to the
- server. -->
-<!ENTITY wifi_auth_header "Client Identification">
-<!-- LOCALIZATION NOTE (wifi_auth_scan_request): Instructions requesting the
- user to transfer authentication info by scanning a QR code. -->
-<!ENTITY wifi_auth_scan_request "The endpoint you are connecting to needs more information to authenticate this connection. Please scan the QR code below via the prompt on your other device.">
-<!-- LOCALIZATION NOTE (wifi_auth_no_scanner): Link text to assist users with
- devices that can't scan a QR code. -->
-<!ENTITY wifi_auth_no_scanner "No QR scanner prompt?">
-<!-- LOCALIZATION NOTE (wifi_auth_yes_scanner): Link text to assist users with
- devices that can scan a QR code. -->
-<!ENTITY wifi_auth_yes_scanner "Have a QR scanner prompt?">
-<!-- LOCALIZATION NOTE (wifi_auth_token_request): Instructions requesting the
- user to transfer authentication info by transferring a token. -->
-<!ENTITY wifi_auth_token_request "If your other device asks for a token instead of scanning a QR code, please copy the value below to the other device:">
-<!ENTITY wifi_auth_qr_size_note "If the QR code appears too small for the connection to be successfully established, try zooming or enlarging the window.">
-
-<!-- Logs panel -->
-<!ENTITY logs_title "Pre-packaging Command Logs">
-
-<!-- Simulator Options -->
-<!ENTITY simulator_title "Simulator Options">
-<!ENTITY simulator_remove "Delete Simulator">
-<!ENTITY simulator_reset "Restore Defaults">
-<!ENTITY simulator_name "Name">
-<!ENTITY simulator_software "Software">
-<!ENTITY simulator_version "Version">
-<!ENTITY simulator_profile "Profile">
-<!ENTITY simulator_hardware "Hardware">
-<!ENTITY simulator_device "Device">
-<!ENTITY simulator_screenSize "Screen">
-<!ENTITY simulator_pixelRatio "Pixel Ratio">
-<!ENTITY simulator_tv_data "TV Simulation">
-<!ENTITY simulator_tv_data_open "Config Data">
-<!ENTITY simulator_tv_data_open_button "Open Config Directory…">
diff --git a/devtools/client/locales/en-US/webide.properties b/devtools/client/locales/en-US/webide.properties
deleted file mode 100644
index 154094906..000000000
--- a/devtools/client/locales/en-US/webide.properties
+++ /dev/null
@@ -1,92 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-title_noApp=WebIDE
-title_app=WebIDE: %S
-
-runtimeButton_label=Select Runtime
-projectButton_label=Open App
-
-mainProcess_label=Main Process
-
-local_runtime=Local Runtime
-remote_runtime=Remote Runtime
-remote_runtime_promptTitle=Remote Runtime
-remote_runtime_promptMessage=hostname:port
-
-importPackagedApp_title=Select Directory
-importHostedApp_title=Open Hosted App
-importHostedApp_header=Enter Manifest URL
-
-selectCustomBinary_title=Select custom B2G binary
-selectCustomProfile_title=Select custom Gaia profile
-
-notification_showTroubleShooting_label=Troubleshooting
-notification_showTroubleShooting_accesskey=T
-
-# LOCALIZATION NOTE (project_tab_loading): This is shown as a temporary tab
-# title for browser tab projects when the tab is still loading.
-project_tab_loading=Loading…
-
-# These messages appear in a notification box when an error occur.
-
-error_cantInstallNotFullyConnected=Can’t install project. Not fully connected.
-error_cantInstallValidationErrors=Can’t install project. Validation errors.
-error_listRunningApps=Can’t get app list from device
-
-# Variable: name of the operation (in english)
-error_operationTimeout=Operation timed out: %1$S
-error_operationFail=Operation failed: %1$S
-
-# Variable: app name
-error_cantConnectToApp=Can’t connect to app: %1$S
-
-# Variable: error message (in english)
-error_cantFetchAddonsJSON=Can’t fetch the add-on list: %S
-
-error_appProjectsLoadFailed=Unable to load project list. This can occur if you’ve used this profile with a newer version of the browser.
-error_folderCreationFailed=Unable to create project folder in the selected directory.
-
-# Variable: runtime app build ID (looks like this %Y%M%D format) and firefox build ID (same format)
-error_runtimeVersionTooRecent=The connected runtime has a more recent build date (%1$S) than your desktop browser (%2$S) does. This is an unsupported setup and may cause DevTools to fail. Please update the browser.
-
-addons_stable=stable
-addons_unstable=unstable
-# LOCALIZATION NOTE (addons_simulator_label): This label is shown as the name of
-# a given simulator version in the "Manage Simulators" pane. %1$S: Firefox OS
-# version in the simulator, ex. 1.3. %2$S: Simulator stability label, ex.
-# "stable" or "unstable".
-addons_simulator_label=Firefox OS %1$S Simulator (%2$S)
-addons_install_button=install
-addons_uninstall_button=uninstall
-addons_adb_label=ADB Helper Add-on
-addons_adapters_label=Tools Adapters Add-on
-addons_adb_warning=USB devices won’t be detected without this add-on
-addons_status_unknown=?
-addons_status_installed=Installed
-addons_status_uninstalled=Not Installed
-addons_status_preparing=preparing
-addons_status_downloading=downloading
-addons_status_installing=installing
-
-runtimedetails_checkno=no
-runtimedetails_checkyes=yes
-runtimedetails_checkunknown=unknown (requires ADB Helper 0.4.0 or later)
-runtimedetails_notUSBDevice=Not a USB device
-
-# Validation status
-status_tooltip=Validation status: %1$S
-status_valid=VALID
-status_warning=WARNINGS
-status_error=ERRORS
-status_unknown=UNKNOWN
-
-# Device preferences and settings
-device_reset_default=Reset to default
-
-# Simulator options
-simulator_custom_device=Custom
-simulator_custom_binary=Custom B2G binary…
-simulator_custom_profile=Custom Gaia profile…
-simulator_default_profile=Use default
diff --git a/devtools/client/menus.js b/devtools/client/menus.js
index dbacb367d..23f024f04 100644
--- a/devtools/client/menus.js
+++ b/devtools/client/menus.js
@@ -86,17 +86,6 @@ exports.menuitems = [
},
checkbox: true
},
- { id: "menu_webide",
- l10nKey: "webide",
- disabled: true,
- oncommand() {
- gDevToolsBrowser.openWebIDE();
- },
- key: {
- id: "webide",
- modifiers: "shift"
- }
- },
{ id: "menu_browserToolbox",
l10nKey: "browserToolboxMenu",
disabled: true,
diff --git a/devtools/client/moz.build b/devtools/client/moz.build
index b55aa5380..9699ec726 100644
--- a/devtools/client/moz.build
+++ b/devtools/client/moz.build
@@ -34,7 +34,6 @@ DIRS += [
'themes',
'webaudioeditor',
'webconsole',
- 'webide',
]
# Shim old theme paths used by DevTools add-ons
diff --git a/devtools/client/preferences/devtools.js b/devtools/client/preferences/devtools.js
index 2f6ca2104..e817b3a18 100644
--- a/devtools/client/preferences/devtools.js
+++ b/devtools/client/preferences/devtools.js
@@ -21,9 +21,6 @@ pref("devtools.loader.hotreload", false);
pref("devtools.toolbar.enabled", true);
pref("devtools.toolbar.visible", false);
-// Enable DevTools WebIDE by default
-pref("devtools.webide.enabled", true);
-
// Toolbox preferences
pref("devtools.toolbox.footer.height", 250);
pref("devtools.toolbox.sidebar.width", 500);
@@ -234,11 +231,7 @@ pref("devtools.dom.enabled", false);
pref("devtools.webaudioeditor.inspectorWidth", 300);
// Default theme ("dark" or "light")
-#ifdef MOZ_DEV_EDITION
-sticky_pref("devtools.theme", "dark");
-#else
sticky_pref("devtools.theme", "light");
-#endif
// Web console filters
pref("devtools.webconsole.filter.error", true);
@@ -356,13 +349,8 @@ pref("devtools.editor.autocomplete", true);
// version for each user.
pref("devtools.telemetry.tools.opened.version", "{}");
-// Enable the JSON View tool (an inspector for application/json documents) on
-// Nightly and Dev. Edition.
-#ifdef RELEASE_OR_BETA
-pref("devtools.jsonview.enabled", false);
-#else
+// Enable the JSON View tool (an inspector for application/json documents)
pref("devtools.jsonview.enabled", true);
-#endif
// Enable the HTML responsive design mode for all channels.
pref("devtools.responsive.html.enabled", true);
diff --git a/devtools/client/projecteditor/lib/plugins/app-manager/app-project-editor.js b/devtools/client/projecteditor/lib/plugins/app-manager/app-project-editor.js
deleted file mode 100644
index 9a66770b0..000000000
--- a/devtools/client/projecteditor/lib/plugins/app-manager/app-project-editor.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const { Cu } = require("chrome");
-const { Class } = require("sdk/core/heritage");
-const promise = require("promise");
-const { ItchEditor } = require("devtools/client/projecteditor/lib/editors");
-
-var AppProjectEditor = Class({
- extends: ItchEditor,
-
- hidesToolbar: true,
-
- initialize: function (host) {
- ItchEditor.prototype.initialize.apply(this, arguments);
- this.appended = promise.resolve();
- this.host = host;
- this.label = "app-manager";
- },
-
- destroy: function () {
- this.elt.remove();
- this.elt = null;
- },
-
- load: function (resource) {
- let {appManagerOpts} = this.host.project;
-
- // Only load the frame the first time it is selected
- if (!this.iframe || this.iframe.getAttribute("src") !== appManagerOpts.projectOverviewURL) {
-
- this.elt.textContent = "";
- let iframe = this.iframe = this.elt.ownerDocument.createElement("iframe");
- let iframeLoaded = this.iframeLoaded = promise.defer();
-
- iframe.addEventListener("load", function onLoad() {
- iframe.removeEventListener("load", onLoad);
- iframeLoaded.resolve();
- });
-
- iframe.setAttribute("flex", "1");
- iframe.setAttribute("src", appManagerOpts.projectOverviewURL);
- this.elt.appendChild(iframe);
-
- }
-
- promise.all([this.iframeLoaded.promise, this.appended]).then(() => {
- this.emit("load");
- });
- }
-});
-
-exports.AppProjectEditor = AppProjectEditor;
diff --git a/devtools/client/projecteditor/lib/plugins/app-manager/moz.build b/devtools/client/projecteditor/lib/plugins/app-manager/moz.build
deleted file mode 100644
index 8aae52725..000000000
--- a/devtools/client/projecteditor/lib/plugins/app-manager/moz.build
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DevToolsModules(
- 'app-project-editor.js',
- 'plugin.js',
-)
diff --git a/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js b/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js
deleted file mode 100644
index 82bbab34b..000000000
--- a/devtools/client/projecteditor/lib/plugins/app-manager/plugin.js
+++ /dev/null
@@ -1,77 +0,0 @@
-const { Cu } = require("chrome");
-const { Class } = require("sdk/core/heritage");
-const { EventTarget } = require("sdk/event/target");
-const { emit } = require("sdk/event/core");
-const promise = require("promise");
-var { registerPlugin, Plugin } = require("devtools/client/projecteditor/lib/plugins/core");
-const { AppProjectEditor } = require("./app-project-editor");
-const OPTION_URL = "chrome://devtools/skin/images/tool-options.svg";
-const Services = require("Services");
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-var AppManagerRenderer = Class({
- extends: Plugin,
-
- isAppManagerProject: function () {
- return !!this.host.project.appManagerOpts;
- },
- editorForResource: function (resource) {
- if (!resource.parent && this.isAppManagerProject()) {
- return AppProjectEditor;
- }
- },
- getUI: function (parent) {
- let doc = parent.ownerDocument;
- if (parent.childElementCount == 0) {
- let image = doc.createElement("image");
- let optionImage = doc.createElement("image");
- let flexElement = doc.createElement("div");
- let nameLabel = doc.createElement("span");
- let statusElement = doc.createElement("div");
-
- image.className = "project-image";
- optionImage.className = "project-options";
- optionImage.setAttribute("src", OPTION_URL);
- nameLabel.className = "project-name-label";
- statusElement.className = "project-status";
- flexElement.className = "project-flex";
-
- parent.appendChild(image);
- parent.appendChild(nameLabel);
- parent.appendChild(flexElement);
- parent.appendChild(statusElement);
- parent.appendChild(optionImage);
- }
-
- return {
- image: parent.querySelector(".project-image"),
- nameLabel: parent.querySelector(".project-name-label"),
- statusElement: parent.querySelector(".project-status")
- };
- },
- onAnnotate: function (resource, editor, elt) {
- if (resource.parent || !this.isAppManagerProject()) {
- return;
- }
-
- let {appManagerOpts} = this.host.project;
- let doc = elt.ownerDocument;
-
- let {image, nameLabel, statusElement} = this.getUI(elt);
- let name = appManagerOpts.name || resource.basename;
- let url = appManagerOpts.iconUrl || "icon-sample.png";
- let status = appManagerOpts.validationStatus || "unknown";
- let tooltip = Strings.formatStringFromName("status_tooltip",
- [Strings.GetStringFromName("status_" + status)], 1);
-
- nameLabel.textContent = name;
- image.setAttribute("src", url);
- statusElement.setAttribute("status", status);
- statusElement.setAttribute("tooltiptext", tooltip);
-
- return true;
- }
-});
-
-exports.AppManagerRenderer = AppManagerRenderer;
-registerPlugin(AppManagerRenderer);
diff --git a/devtools/client/projecteditor/lib/plugins/moz.build b/devtools/client/projecteditor/lib/plugins/moz.build
index 17bff7ce0..99d864e13 100644
--- a/devtools/client/projecteditor/lib/plugins/moz.build
+++ b/devtools/client/projecteditor/lib/plugins/moz.build
@@ -5,7 +5,6 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
DIRS += [
- 'app-manager',
'delete',
'dirty',
'image-view',
diff --git a/devtools/client/projecteditor/lib/projecteditor.js b/devtools/client/projecteditor/lib/projecteditor.js
index a3ef06249..27127b0a0 100644
--- a/devtools/client/projecteditor/lib/projecteditor.js
+++ b/devtools/client/projecteditor/lib/projecteditor.js
@@ -31,7 +31,6 @@ require("devtools/client/projecteditor/lib/plugins/new/new");
require("devtools/client/projecteditor/lib/plugins/rename/rename");
require("devtools/client/projecteditor/lib/plugins/save/save");
require("devtools/client/projecteditor/lib/plugins/image-view/plugin");
-require("devtools/client/projecteditor/lib/plugins/app-manager/plugin");
require("devtools/client/projecteditor/lib/plugins/status-bar/plugin");
// Uncomment to enable logging.
diff --git a/devtools/client/shared/telemetry.js b/devtools/client/shared/telemetry.js
index 38a21cef6..547b1c07f 100644
--- a/devtools/client/shared/telemetry.js
+++ b/devtools/client/shared/telemetry.js
@@ -177,23 +177,6 @@ Telemetry.prototype = {
histogram: "DEVTOOLS_ABOUTDEBUGGING_OPENED_COUNT",
timerHistogram: "DEVTOOLS_ABOUTDEBUGGING_TIME_ACTIVE_SECONDS"
},
- webide: {
- histogram: "DEVTOOLS_WEBIDE_OPENED_COUNT",
- timerHistogram: "DEVTOOLS_WEBIDE_TIME_ACTIVE_SECONDS"
- },
- webideProjectEditor: {
- histogram: "DEVTOOLS_WEBIDE_PROJECT_EDITOR_OPENED_COUNT",
- timerHistogram: "DEVTOOLS_WEBIDE_PROJECT_EDITOR_TIME_ACTIVE_SECONDS"
- },
- webideProjectEditorSave: {
- histogram: "DEVTOOLS_WEBIDE_PROJECT_EDITOR_SAVE_COUNT",
- },
- webideNewProject: {
- histogram: "DEVTOOLS_WEBIDE_NEW_PROJECT_COUNT",
- },
- webideImportProject: {
- histogram: "DEVTOOLS_WEBIDE_IMPORT_PROJECT_COUNT",
- },
custom: {
histogram: "DEVTOOLS_CUSTOM_OPENED_COUNT",
timerHistogram: "DEVTOOLS_CUSTOM_TIME_ACTIVE_SECONDS"
diff --git a/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js b/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js
index 992dc62cf..824bdb3fb 100644
--- a/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js
+++ b/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js
@@ -34,6 +34,7 @@ function EvaluationResult(props) {
id: messageId,
exceptionDocURL,
frame,
+ notes,
} = message;
let messageBody;
@@ -57,6 +58,7 @@ function EvaluationResult(props) {
serviceContainer,
exceptionDocURL,
frame,
+ notes,
};
return Message(childProps);
}
diff --git a/devtools/client/webconsole/new-console-output/components/message-types/page-error.js b/devtools/client/webconsole/new-console-output/components/message-types/page-error.js
index 77ea75ff7..c68b850bd 100644
--- a/devtools/client/webconsole/new-console-output/components/message-types/page-error.js
+++ b/devtools/client/webconsole/new-console-output/components/message-types/page-error.js
@@ -44,6 +44,7 @@ function PageError(props) {
stacktrace,
frame,
exceptionDocURL,
+ notes,
} = message;
const childProps = {
@@ -62,6 +63,7 @@ function PageError(props) {
stacktrace,
serviceContainer,
exceptionDocURL,
+ notes,
};
return Message(childProps);
}
diff --git a/devtools/client/webconsole/new-console-output/components/message.js b/devtools/client/webconsole/new-console-output/components/message.js
index f36bff7e4..1ffa4e12d 100644
--- a/devtools/client/webconsole/new-console-output/components/message.js
+++ b/devtools/client/webconsole/new-console-output/components/message.js
@@ -47,6 +47,10 @@ const Message = createClass({
onViewSourceInDebugger: PropTypes.func.isRequired,
sourceMapService: PropTypes.any,
}),
+ notes: PropTypes.arrayOf(PropTypes.shape({
+ messageBody: PropTypes.string.isRequired,
+ frame: PropTypes.any,
+ })),
},
getDefaultProps: function () {
@@ -90,6 +94,7 @@ const Message = createClass({
serviceContainer,
dispatch,
exceptionDocURL,
+ notes,
} = this.props;
topLevelClasses.push("message", source, type, level);
@@ -127,6 +132,29 @@ const Message = createClass({
});
}
+ let notesNodes;
+ if (notes) {
+ notesNodes = notes.map(note => dom.span(
+ { className: "message-flex-body error-note" },
+ dom.span({ className: "message-body devtools-monospace" },
+ "note: " + note.messageBody
+ ),
+ dom.span({ className: "message-location devtools-monospace" },
+ note.frame ? FrameView({
+ frame: note.frame,
+ onClick: serviceContainer
+ ? serviceContainer.onViewSourceInDebugger
+ : undefined,
+ showEmptyPathAsHost: true,
+ sourceMapService: serviceContainer
+ ? serviceContainer.sourceMapService
+ : undefined
+ }) : null
+ )));
+ } else {
+ notesNodes = [];
+ }
+
const repeat = this.props.repeat ? MessageRepeat({repeat: this.props.repeat}) : null;
// Configure the location.
@@ -167,7 +195,8 @@ const Message = createClass({
repeat,
location
),
- attachment
+ attachment,
+ ...notesNodes
)
);
}
diff --git a/devtools/client/webconsole/new-console-output/selectors/messages.js b/devtools/client/webconsole/new-console-output/selectors/messages.js
index c4b1aee28..e405be2f8 100644
--- a/devtools/client/webconsole/new-console-output/selectors/messages.js
+++ b/devtools/client/webconsole/new-console-output/selectors/messages.js
@@ -126,6 +126,15 @@ function matchSearchFilters(message, filters) {
|| (message.parameters !== null
&& message.parameters.join("").toLocaleLowerCase()
.includes(text.toLocaleLowerCase()))
+ // Look for a match in notes.
+ || (Array.isArray(message.notes) && message.notes.some(note =>
+ // Look for a match in location.
+ isTextInFrame(text, note.frame)
+ // Look for a match in messageBody.
+ || (note.messageBody !== null
+ && note.messageBody.toLocaleLowerCase()
+ .includes(text.toLocaleLowerCase()))
+ ))
);
}
diff --git a/devtools/client/webconsole/new-console-output/test/components/page-error.test.js b/devtools/client/webconsole/new-console-output/test/components/page-error.test.js
index 93f3a9ea5..5bc5fe0f0 100644
--- a/devtools/client/webconsole/new-console-output/test/components/page-error.test.js
+++ b/devtools/client/webconsole/new-console-output/test/components/page-error.test.js
@@ -123,4 +123,118 @@ describe("PageError component:", () => {
wrapper = render(PageError({ message, serviceContainer}));
expect(wrapper.find(".indent").prop("style").width).toBe(`0`);
});
+
+ it("has empty error notes", () => {
+ const message = stubPreparedMessages.get("ReferenceError: asdf is not defined");
+ let wrapper = render(PageError({ message, serviceContainer }));
+
+ const notes = wrapper.find(".error-note");
+
+ expect(notes.length).toBe(0);
+ });
+
+ it("can show an error note", () => {
+ const origMessage = stubPreparedMessages.get("ReferenceError: asdf is not defined");
+ const message = origMessage.set("notes", [
+ {
+ "messageBody": "test note",
+ "frame": {
+ "source": "http://example.com/test.js",
+ "line": 2,
+ "column": 6
+ }
+ }
+ ]);
+
+ let wrapper = render(PageError({ message, serviceContainer }));
+
+ const notes = wrapper.find(".error-note");
+ expect(notes.length).toBe(1);
+
+ const note = notes.eq(0);
+ expect(note.find(".message-body").text())
+ .toBe("note: test note");
+
+ // There should be the location.
+ const locationLink = note.find(`.message-location`);
+ expect(locationLink.length).toBe(1);
+ expect(locationLink.text()).toBe("test.js:2:6");
+ });
+
+ it("can show multiple error notes", () => {
+ const origMessage = stubPreparedMessages.get("ReferenceError: asdf is not defined");
+ const message = origMessage.set("notes", [
+ {
+ "messageBody": "test note 1",
+ "frame": {
+ "source": "http://example.com/test1.js",
+ "line": 2,
+ "column": 6
+ }
+ },
+ {
+ "messageBody": "test note 2",
+ "frame": {
+ "source": "http://example.com/test2.js",
+ "line": 10,
+ "column": 18
+ }
+ },
+ {
+ "messageBody": "test note 3",
+ "frame": {
+ "source": "http://example.com/test3.js",
+ "line": 9,
+ "column": 4
+ }
+ }
+ ]);
+
+ let wrapper = render(PageError({ message, serviceContainer }));
+
+ const notes = wrapper.find(".error-note");
+ expect(notes.length).toBe(3);
+
+ const note1 = notes.eq(0);
+ expect(note1.find(".message-body").text())
+ .toBe("note: test note 1");
+
+ const locationLink1 = note1.find(`.message-location`);
+ expect(locationLink1.length).toBe(1);
+ expect(locationLink1.text()).toBe("test1.js:2:6");
+
+ const note2 = notes.eq(1);
+ expect(note2.find(".message-body").text())
+ .toBe("note: test note 2");
+
+ const locationLink2 = note2.find(`.message-location`);
+ expect(locationLink2.length).toBe(1);
+ expect(locationLink2.text()).toBe("test2.js:10:18");
+
+ const note3 = notes.eq(2);
+ expect(note3.find(".message-body").text())
+ .toBe("note: test note 3");
+
+ const locationLink3 = note3.find(`.message-location`);
+ expect(locationLink3.length).toBe(1);
+ expect(locationLink3.text()).toBe("test3.js:9:4");
+ });
+
+ it("displays error notes", () => {
+ const message = stubPreparedMessages.get("SyntaxError: redeclaration of let a");
+
+ let wrapper = render(PageError({ message, serviceContainer }));
+
+ const notes = wrapper.find(".error-note");
+ expect(notes.length).toBe(1);
+
+ const note = notes.eq(0);
+ expect(note.find(".message-body").text())
+ .toBe("note: Previously declared at line 2, column 6");
+
+ // There should be the location.
+ const locationLink = note.find(`.message-location`);
+ expect(locationLink.length).toBe(1);
+ expect(locationLink.text()).toBe("test-console-api.html:2:6");
+ });
});
diff --git a/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/stub-snippets.js b/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/stub-snippets.js
index f79548e7b..f0f01a561 100644
--- a/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/stub-snippets.js
+++ b/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/stub-snippets.js
@@ -140,6 +140,10 @@ pageError.set("Reference Error", `
foo()
`);
+pageError.set("Redeclaration Error", `
+ let a, a;
+`);
+
module.exports = {
consoleApi,
evaluationResult,
diff --git a/devtools/client/webconsole/new-console-output/test/fixtures/stubs/consoleApi.js b/devtools/client/webconsole/new-console-output/test/fixtures/stubs/consoleApi.js
index d9662c4fd..bec3abd70 100644
--- a/devtools/client/webconsole/new-console-output/test/fixtures/stubs/consoleApi.js
+++ b/devtools/client/webconsole/new-console-output/test/fixtures/stubs/consoleApi.js
@@ -11,8 +11,6 @@ const { ConsoleMessage, NetworkEventMessage } = require("devtools/client/webcons
let stubPreparedMessages = new Map();
let stubPackets = new Map();
-
-
stubPreparedMessages.set("console.log('foobar', 'test')", new ConsoleMessage({
"id": "1",
"allowRepeating": true,
@@ -34,7 +32,8 @@ stubPreparedMessages.set("console.log('foobar', 'test')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.log(undefined)", new ConsoleMessage({
@@ -50,7 +49,7 @@ stubPreparedMessages.set("console.log(undefined)", new ConsoleMessage({
}
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"undefined\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(undefined)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"undefined\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(undefined)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(undefined)",
@@ -59,7 +58,8 @@ stubPreparedMessages.set("console.log(undefined)", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.warn('danger, will robinson!')", new ConsoleMessage({
@@ -73,7 +73,7 @@ stubPreparedMessages.set("console.warn('danger, will robinson!')", new ConsoleMe
"danger, will robinson!"
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"warn\",\"level\":\"warn\",\"messageText\":null,\"parameters\":[\"danger, will robinson!\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.warn(%27danger%2C%20will%20robinson!%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"warn\",\"level\":\"warn\",\"messageText\":null,\"parameters\":[\"danger, will robinson!\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.warn(%27danger%2C%20will%20robinson!%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.warn(%27danger%2C%20will%20robinson!%27)",
@@ -82,7 +82,8 @@ stubPreparedMessages.set("console.warn('danger, will robinson!')", new ConsoleMe
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.log(NaN)", new ConsoleMessage({
@@ -98,7 +99,7 @@ stubPreparedMessages.set("console.log(NaN)", new ConsoleMessage({
}
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"NaN\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(NaN)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"NaN\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(NaN)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(NaN)",
@@ -107,7 +108,8 @@ stubPreparedMessages.set("console.log(NaN)", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.log(null)", new ConsoleMessage({
@@ -123,7 +125,7 @@ stubPreparedMessages.set("console.log(null)", new ConsoleMessage({
}
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"null\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(null)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"null\"}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(null)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(null)",
@@ -132,7 +134,8 @@ stubPreparedMessages.set("console.log(null)", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.log('鼬')", new ConsoleMessage({
@@ -146,7 +149,7 @@ stubPreparedMessages.set("console.log('鼬')", new ConsoleMessage({
"鼬"
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"鼬\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%E9%BC%AC%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"鼬\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%E9%BC%AC%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%E9%BC%AC%27)",
@@ -155,7 +158,8 @@ stubPreparedMessages.set("console.log('鼬')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.clear()", new ConsoleMessage({
@@ -169,8 +173,7 @@ stubPreparedMessages.set("console.clear()", new ConsoleMessage({
"Console was cleared."
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"clear\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"Console was cleared.\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.clear()\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
- "stacktrace": null,
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"clear\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"Console was cleared.\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.clear()\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.clear()",
"line": 1,
@@ -178,7 +181,8 @@ stubPreparedMessages.set("console.clear()", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.count('bar')", new ConsoleMessage({
@@ -190,7 +194,7 @@ stubPreparedMessages.set("console.count('bar')", new ConsoleMessage({
"messageText": "bar: 1",
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"debug\",\"messageText\":\"bar: 1\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.count(%27bar%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"debug\",\"messageText\":\"bar: 1\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.count(%27bar%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.count(%27bar%27)",
@@ -199,7 +203,8 @@ stubPreparedMessages.set("console.count('bar')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.assert(false, {message: 'foobar'})", new ConsoleMessage({
@@ -234,7 +239,7 @@ stubPreparedMessages.set("console.assert(false, {message: 'foobar'})", new Conso
}
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"assert\",\"level\":\"error\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn8.child1/obj31\",\"class\":\"Object\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":1,\"preview\":{\"kind\":\"Object\",\"ownProperties\":{\"message\":{\"configurable\":true,\"enumerable\":true,\"writable\":true,\"value\":\"foobar\"}},\"ownPropertiesLength\":1,\"safeGetterValues\":{}}}],\"repeatId\":null,\"stacktrace\":[{\"columnNumber\":27,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.assert(false%2C%20%7Bmessage%3A%20%27foobar%27%7D)\",\"functionName\":\"triggerPacket\",\"language\":2,\"lineNumber\":1}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.assert(false%2C%20%7Bmessage%3A%20%27foobar%27%7D)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"assert\",\"level\":\"error\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn8.child1/obj31\",\"class\":\"Object\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":1,\"preview\":{\"kind\":\"Object\",\"ownProperties\":{\"message\":{\"configurable\":true,\"enumerable\":true,\"writable\":true,\"value\":\"foobar\"}},\"ownPropertiesLength\":1,\"safeGetterValues\":{}}}],\"repeatId\":null,\"stacktrace\":[{\"columnNumber\":27,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.assert(false%2C%20%7Bmessage%3A%20%27foobar%27%7D)\",\"functionName\":\"triggerPacket\",\"language\":2,\"lineNumber\":1}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.assert(false%2C%20%7Bmessage%3A%20%27foobar%27%7D)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": [
{
"columnNumber": 27,
@@ -251,7 +256,8 @@ stubPreparedMessages.set("console.assert(false, {message: 'foobar'})", new Conso
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.log('hello \nfrom \rthe \"string world!')", new ConsoleMessage({
@@ -265,7 +271,7 @@ stubPreparedMessages.set("console.log('hello \nfrom \rthe \"string world!')", ne
"hello \nfrom \rthe \"string world!"
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"hello \\nfrom \\rthe \\\"string world!\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27hello%20%5Cnfrom%20%5Crthe%20%5C%22string%20world!%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"hello \\nfrom \\rthe \\\"string world!\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27hello%20%5Cnfrom%20%5Crthe%20%5C%22string%20world!%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27hello%20%5Cnfrom%20%5Crthe%20%5C%22string%20world!%27)",
@@ -274,7 +280,8 @@ stubPreparedMessages.set("console.log('hello \nfrom \rthe \"string world!')", ne
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.log('úṇĩçödê țĕșť')", new ConsoleMessage({
@@ -288,7 +295,7 @@ stubPreparedMessages.set("console.log('úṇĩçödê țĕșť')", new ConsoleMe
"úṇĩçödê țĕșť"
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"úṇĩçödê țĕșť\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%C3%BA%E1%B9%87%C4%A9%C3%A7%C3%B6d%C3%AA%20%C8%9B%C4%95%C8%99%C5%A5%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"úṇĩçödê țĕșť\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%C3%BA%E1%B9%87%C4%A9%C3%A7%C3%B6d%C3%AA%20%C8%9B%C4%95%C8%99%C5%A5%27)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%27%C3%BA%E1%B9%87%C4%A9%C3%A7%C3%B6d%C3%AA%20%C8%9B%C4%95%C8%99%C5%A5%27)",
@@ -297,7 +304,8 @@ stubPreparedMessages.set("console.log('úṇĩçödê țĕșť')", new ConsoleMe
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.dirxml(window)", new ConsoleMessage({
@@ -315,7 +323,7 @@ stubPreparedMessages.set("console.dirxml(window)", new ConsoleMessage({
"extensible": true,
"frozen": false,
"sealed": false,
- "ownPropertyLength": 804,
+ "ownPropertyLength": 815,
"preview": {
"kind": "ObjectWithURL",
"url": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html"
@@ -323,7 +331,7 @@ stubPreparedMessages.set("console.dirxml(window)", new ConsoleMessage({
}
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn11.child1/obj31\",\"class\":\"Window\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":804,\"preview\":{\"kind\":\"ObjectWithURL\",\"url\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\"}}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.dirxml(window)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn11.child1/obj31\",\"class\":\"Window\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":804,\"preview\":{\"kind\":\"ObjectWithURL\",\"url\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\"}}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.dirxml(window)\",\"line\":1,\"column\":27},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.dirxml(window)",
@@ -332,7 +340,8 @@ stubPreparedMessages.set("console.dirxml(window)", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.trace()", new ConsoleMessage({
@@ -344,7 +353,7 @@ stubPreparedMessages.set("console.trace()", new ConsoleMessage({
"messageText": null,
"parameters": [],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"trace\",\"level\":\"log\",\"messageText\":null,\"parameters\":[],\"repeatId\":null,\"stacktrace\":[{\"columnNumber\":3,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"testStacktraceFiltering\",\"language\":2,\"lineNumber\":3},{\"columnNumber\":3,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"foo\",\"language\":2,\"lineNumber\":6},{\"columnNumber\":1,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"triggerPacket\",\"language\":2,\"lineNumber\":9}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"line\":3,\"column\":3},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"trace\",\"level\":\"log\",\"messageText\":null,\"parameters\":[],\"repeatId\":null,\"stacktrace\":[{\"columnNumber\":3,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"testStacktraceFiltering\",\"language\":2,\"lineNumber\":3},{\"columnNumber\":3,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"foo\",\"language\":2,\"lineNumber\":6},{\"columnNumber\":1,\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"functionName\":\"triggerPacket\",\"language\":2,\"lineNumber\":9}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.trace()\",\"line\":3,\"column\":3},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": [
{
"columnNumber": 3,
@@ -375,7 +384,8 @@ stubPreparedMessages.set("console.trace()", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.time('bar')", new ConsoleMessage({
@@ -387,7 +397,7 @@ stubPreparedMessages.set("console.time('bar')", new ConsoleMessage({
"messageText": null,
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"nullMessage\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"nullMessage\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)",
@@ -396,7 +406,8 @@ stubPreparedMessages.set("console.time('bar')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.timeEnd('bar')", new ConsoleMessage({
@@ -408,7 +419,7 @@ stubPreparedMessages.set("console.timeEnd('bar')", new ConsoleMessage({
"messageText": "bar: 1.36ms",
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"timeEnd\",\"level\":\"log\",\"messageText\":\"bar: 1.36ms\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"timeEnd\",\"level\":\"log\",\"messageText\":\"bar: 1.36ms\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.time(%27bar%27)",
@@ -417,7 +428,8 @@ stubPreparedMessages.set("console.timeEnd('bar')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.table('bar')", new ConsoleMessage({
@@ -431,7 +443,7 @@ stubPreparedMessages.set("console.table('bar')", new ConsoleMessage({
"bar"
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"bar\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"bar\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%27bar%27)",
@@ -440,7 +452,8 @@ stubPreparedMessages.set("console.table('bar')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.table(['a', 'b', 'c'])", new ConsoleMessage({
@@ -471,7 +484,7 @@ stubPreparedMessages.set("console.table(['a', 'b', 'c'])", new ConsoleMessage({
}
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"table\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn15.child1/obj31\",\"class\":\"Array\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":4,\"preview\":{\"kind\":\"ArrayLike\",\"length\":3,\"items\":[\"a\",\"b\",\"c\"]}}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%5B%27a%27%2C%20%27b%27%2C%20%27c%27%5D)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"table\",\"level\":\"log\",\"messageText\":null,\"parameters\":[{\"type\":\"object\",\"actor\":\"server1.conn15.child1/obj31\",\"class\":\"Array\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":4,\"preview\":{\"kind\":\"ArrayLike\",\"length\":3,\"items\":[\"a\",\"b\",\"c\"]}}],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%5B%27a%27%2C%20%27b%27%2C%20%27c%27%5D)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.table(%5B%27a%27%2C%20%27b%27%2C%20%27c%27%5D)",
@@ -480,7 +493,8 @@ stubPreparedMessages.set("console.table(['a', 'b', 'c'])", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.group('bar')", new ConsoleMessage({
@@ -492,7 +506,7 @@ stubPreparedMessages.set("console.group('bar')", new ConsoleMessage({
"messageText": "bar",
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroup\",\"level\":\"log\",\"messageText\":\"bar\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroup\",\"level\":\"log\",\"messageText\":\"bar\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)",
@@ -501,7 +515,8 @@ stubPreparedMessages.set("console.group('bar')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.groupEnd('bar')", new ConsoleMessage({
@@ -513,7 +528,7 @@ stubPreparedMessages.set("console.groupEnd('bar')", new ConsoleMessage({
"messageText": null,
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group(%27bar%27)",
@@ -522,7 +537,8 @@ stubPreparedMessages.set("console.groupEnd('bar')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.groupCollapsed('foo')", new ConsoleMessage({
@@ -534,7 +550,7 @@ stubPreparedMessages.set("console.groupCollapsed('foo')", new ConsoleMessage({
"messageText": "foo",
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroupCollapsed\",\"level\":\"log\",\"messageText\":\"foo\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroupCollapsed\",\"level\":\"log\",\"messageText\":\"foo\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)",
@@ -543,7 +559,8 @@ stubPreparedMessages.set("console.groupCollapsed('foo')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.groupEnd('foo')", new ConsoleMessage({
@@ -555,7 +572,7 @@ stubPreparedMessages.set("console.groupEnd('foo')", new ConsoleMessage({
"messageText": null,
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.groupCollapsed(%27foo%27)",
@@ -564,7 +581,8 @@ stubPreparedMessages.set("console.groupEnd('foo')", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.group()", new ConsoleMessage({
@@ -576,7 +594,7 @@ stubPreparedMessages.set("console.group()", new ConsoleMessage({
"messageText": "<no group label>",
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroup\",\"level\":\"log\",\"messageText\":\"<no group label>\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"startGroup\",\"level\":\"log\",\"messageText\":\"<no group label>\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()",
@@ -585,7 +603,8 @@ stubPreparedMessages.set("console.group()", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.groupEnd()", new ConsoleMessage({
@@ -597,7 +616,7 @@ stubPreparedMessages.set("console.groupEnd()", new ConsoleMessage({
"messageText": null,
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"endGroup\",\"level\":\"log\",\"messageText\":null,\"parameters\":null,\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()\",\"line\":3,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.group()",
@@ -606,7 +625,8 @@ stubPreparedMessages.set("console.groupEnd()", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": null,
- "userProvidedStyles": []
+ "userProvidedStyles": [],
+ "notes": null
}));
stubPreparedMessages.set("console.log(%cfoobar)", new ConsoleMessage({
@@ -621,7 +641,7 @@ stubPreparedMessages.set("console.log(%cfoobar)", new ConsoleMessage({
"bar"
],
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"foo\",\"bar\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%25cfoobar)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[\"color:blue;font-size:1.3em;background:url('http://example.com/test');position:absolute;top:10px\",\"color:red;background:url('http://example.com/test')\"]}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"console-api\",\"type\":\"log\",\"level\":\"log\",\"messageText\":null,\"parameters\":[\"foo\",\"bar\"],\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%25cfoobar)\",\"line\":2,\"column\":1},\"groupId\":null,\"exceptionDocURL\":null,\"userProvidedStyles\":[\"color:blue;font-size:1.3em;background:url('http://example.com/test');position:absolute;top:10px\",\"color:red;background:url('http://example.com/test')\"],\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=console.log(%25cfoobar)",
@@ -633,10 +653,10 @@ stubPreparedMessages.set("console.log(%cfoobar)", new ConsoleMessage({
"userProvidedStyles": [
"color:blue;font-size:1.3em;background:url('http://example.com/test');position:absolute;top:10px",
"color:red;background:url('http://example.com/test')"
- ]
+ ],
+ "notes": null
}));
-
stubPackets.set("console.log('foobar', 'test')", {
"from": "server1.conn0.child1/consoleActor2",
"type": "consoleAPICall",
@@ -1017,7 +1037,7 @@ stubPackets.set("console.dirxml(window)", {
"extensible": true,
"frozen": false,
"sealed": false,
- "ownPropertyLength": 804,
+ "ownPropertyLength": 815,
"preview": {
"kind": "ObjectWithURL",
"url": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html"
@@ -1451,8 +1471,7 @@ stubPackets.set("console.log(%cfoobar)", {
}
});
-
module.exports = {
stubPreparedMessages,
stubPackets,
-} \ No newline at end of file
+};
diff --git a/devtools/client/webconsole/new-console-output/test/fixtures/stubs/evaluationResult.js b/devtools/client/webconsole/new-console-output/test/fixtures/stubs/evaluationResult.js
index 098086044..0682d9134 100644
--- a/devtools/client/webconsole/new-console-output/test/fixtures/stubs/evaluationResult.js
+++ b/devtools/client/webconsole/new-console-output/test/fixtures/stubs/evaluationResult.js
@@ -11,8 +11,6 @@ const { ConsoleMessage, NetworkEventMessage } = require("devtools/client/webcons
let stubPreparedMessages = new Map();
let stubPackets = new Map();
-
-
stubPreparedMessages.set("new Date(0)", new ConsoleMessage({
"id": "1",
"allowRepeating": true,
@@ -32,11 +30,12 @@ stubPreparedMessages.set("new Date(0)", new ConsoleMessage({
}
},
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"log\",\"parameters\":{\"type\":\"object\",\"actor\":\"server1.conn0.child1/obj30\",\"class\":\"Date\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":0,\"preview\":{\"timestamp\":0}},\"repeatId\":null,\"stacktrace\":null,\"frame\":null,\"groupId\":null,\"userProvidedStyles\":null}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"log\",\"parameters\":{\"type\":\"object\",\"actor\":\"server1.conn0.child1/obj30\",\"class\":\"Date\",\"extensible\":true,\"frozen\":false,\"sealed\":false,\"ownPropertyLength\":0,\"preview\":{\"timestamp\":0}},\"repeatId\":null,\"stacktrace\":null,\"frame\":null,\"groupId\":null,\"userProvidedStyles\":null,\"notes\":null}",
"stacktrace": null,
"frame": null,
"groupId": null,
- "userProvidedStyles": null
+ "userProvidedStyles": null,
+ "notes": null
}));
stubPreparedMessages.set("asdf()", new ConsoleMessage({
@@ -50,7 +49,7 @@ stubPreparedMessages.set("asdf()", new ConsoleMessage({
"type": "undefined"
},
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"error\",\"messageText\":\"ReferenceError: asdf is not defined\",\"parameters\":{\"type\":\"undefined\"},\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"debugger eval code\",\"line\":1,\"column\":1},\"groupId\":null,\"exceptionDocURL\":\"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default\",\"userProvidedStyles\":null}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"error\",\"messageText\":\"ReferenceError: asdf is not defined\",\"parameters\":{\"type\":\"undefined\"},\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"debugger eval code\",\"line\":1,\"column\":1},\"groupId\":null,\"exceptionDocURL\":\"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default\",\"userProvidedStyles\":null,\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "debugger eval code",
@@ -59,7 +58,8 @@ stubPreparedMessages.set("asdf()", new ConsoleMessage({
},
"groupId": null,
"exceptionDocURL": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default",
- "userProvidedStyles": null
+ "userProvidedStyles": null,
+ "notes": null
}));
stubPreparedMessages.set("1 + @", new ConsoleMessage({
@@ -73,7 +73,7 @@ stubPreparedMessages.set("1 + @", new ConsoleMessage({
"type": "undefined"
},
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"error\",\"messageText\":\"SyntaxError: illegal character\",\"parameters\":{\"type\":\"undefined\"},\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"debugger eval code\",\"line\":1,\"column\":4},\"groupId\":null,\"userProvidedStyles\":null}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"result\",\"level\":\"error\",\"messageText\":\"SyntaxError: illegal character\",\"parameters\":{\"type\":\"undefined\"},\"repeatId\":null,\"stacktrace\":null,\"frame\":{\"source\":\"debugger eval code\",\"line\":1,\"column\":4},\"groupId\":null,\"userProvidedStyles\":null,\"notes\":null}",
"stacktrace": null,
"frame": {
"source": "debugger eval code",
@@ -81,10 +81,10 @@ stubPreparedMessages.set("1 + @", new ConsoleMessage({
"column": 4
},
"groupId": null,
- "userProvidedStyles": null
+ "userProvidedStyles": null,
+ "notes": null
}));
-
stubPackets.set("new Date(0)", {
"from": "server1.conn0.child1/consoleActor2",
"input": "new Date(0)",
@@ -103,7 +103,8 @@ stubPackets.set("new Date(0)", {
"timestamp": 1476573073424,
"exception": null,
"frame": null,
- "helperResult": null
+ "helperResult": null,
+ "notes": null
});
stubPackets.set("asdf()", {
@@ -138,7 +139,8 @@ stubPackets.set("asdf()", {
"line": 1,
"column": 1
},
- "helperResult": null
+ "helperResult": null,
+ "notes": null
});
stubPackets.set("1 + @", {
@@ -172,11 +174,11 @@ stubPackets.set("1 + @", {
"line": 1,
"column": 4
},
- "helperResult": null
+ "helperResult": null,
+ "notes": null
});
-
module.exports = {
stubPreparedMessages,
stubPackets,
-} \ No newline at end of file
+};
diff --git a/devtools/client/webconsole/new-console-output/test/fixtures/stubs/pageError.js b/devtools/client/webconsole/new-console-output/test/fixtures/stubs/pageError.js
index eda8e8b83..80147e7dd 100644
--- a/devtools/client/webconsole/new-console-output/test/fixtures/stubs/pageError.js
+++ b/devtools/client/webconsole/new-console-output/test/fixtures/stubs/pageError.js
@@ -11,8 +11,6 @@ const { ConsoleMessage, NetworkEventMessage } = require("devtools/client/webcons
let stubPreparedMessages = new Map();
let stubPackets = new Map();
-
-
stubPreparedMessages.set("ReferenceError: asdf is not defined", new ConsoleMessage({
"id": "1",
"allowRepeating": true,
@@ -22,7 +20,7 @@ stubPreparedMessages.set("ReferenceError: asdf is not defined", new ConsoleMessa
"messageText": "ReferenceError: asdf is not defined",
"parameters": null,
"repeat": 1,
- "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"log\",\"level\":\"error\",\"messageText\":\"ReferenceError: asdf is not defined\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":[{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":3,\"columnNumber\":5,\"functionName\":\"bar\"},{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":6,\"columnNumber\":5,\"functionName\":\"foo\"},{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":9,\"columnNumber\":3,\"functionName\":null}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"line\":3,\"column\":5},\"groupId\":null,\"exceptionDocURL\":\"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default\"}",
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"log\",\"level\":\"error\",\"messageText\":\"ReferenceError: asdf is not defined\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":[{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":3,\"columnNumber\":5,\"functionName\":\"bar\"},{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":6,\"columnNumber\":5,\"functionName\":\"foo\"},{\"filename\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"lineNumber\":9,\"columnNumber\":3,\"functionName\":null}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error\",\"line\":3,\"column\":5},\"groupId\":null,\"exceptionDocURL\":\"https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default\",\"userProvidedStyles\":null,\"notes\":null}",
"stacktrace": [
{
"filename": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-tempfile.js?key=Reference%20Error",
@@ -49,9 +47,53 @@ stubPreparedMessages.set("ReferenceError: asdf is not defined", new ConsoleMessa
"column": 5
},
"groupId": null,
- "exceptionDocURL": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default"
+ "exceptionDocURL": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_defined?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default",
+ "userProvidedStyles": null,
+ "notes": null
}));
+stubPreparedMessages.set("SyntaxError: redeclaration of let a", new ConsoleMessage({
+ "id": "1",
+ "allowRepeating": true,
+ "source": "javascript",
+ "type": "log",
+ "level": "error",
+ "messageText": "SyntaxError: redeclaration of let a",
+ "parameters": null,
+ "repeat": 1,
+ "repeatId": "{\"id\":null,\"allowRepeating\":true,\"source\":\"javascript\",\"type\":\"log\",\"level\":\"error\",\"messageText\":\"SyntaxError: redeclaration of let a\",\"parameters\":null,\"repeatId\":null,\"stacktrace\":[{\"filename\":\"chrome://mochikit/content/tests/BrowserTestUtils/content-task.js line 52 > eval\",\"lineNumber\":6,\"columnNumber\":9,\"functionName\":null},{\"filename\":\"chrome://mochikit/content/tests/BrowserTestUtils/content-task.js\",\"lineNumber\":53,\"columnNumber\":20,\"functionName\":null}],\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":2,\"column\":9},\"groupId\":null,\"userProvidedStyles\":null,\"notes\":[{\"messageBody\":\"Previously declared at line 2, column 6\",\"frame\":{\"source\":\"http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html\",\"line\":2,\"column\":6}}]}",
+ "stacktrace": [
+ {
+ "filename": "chrome://mochikit/content/tests/BrowserTestUtils/content-task.js line 52 > eval",
+ "lineNumber": 6,
+ "columnNumber": 9,
+ "functionName": null
+ },
+ {
+ "filename": "chrome://mochikit/content/tests/BrowserTestUtils/content-task.js",
+ "lineNumber": 53,
+ "columnNumber": 20,
+ "functionName": null
+ }
+ ],
+ "frame": {
+ "source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
+ "line": 2,
+ "column": 9
+ },
+ "groupId": null,
+ "userProvidedStyles": null,
+ "notes": [
+ {
+ "messageBody": "Previously declared at line 2, column 6",
+ "frame": {
+ "source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
+ "line": 2,
+ "column": 6
+ }
+ }
+ ]
+}));
stubPackets.set("ReferenceError: asdf is not defined", {
"from": "server1.conn0.child1/consoleActor2",
@@ -91,12 +133,56 @@ stubPackets.set("ReferenceError: asdf is not defined", {
"columnNumber": 3,
"functionName": null
}
- ]
+ ],
+ "notes": null
}
});
+stubPackets.set("SyntaxError: redeclaration of let a", {
+ "from": "server1.conn0.child1/consoleActor2",
+ "type": "pageError",
+ "pageError": {
+ "errorMessage": "SyntaxError: redeclaration of let a",
+ "errorMessageName": "JSMSG_REDECLARED_VAR",
+ "sourceName": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
+ "lineText": " let a, a;\n",
+ "lineNumber": 2,
+ "columnNumber": 9,
+ "category": "content javascript",
+ "warning": false,
+ "error": false,
+ "exception": true,
+ "strict": false,
+ "info": false,
+ "private": false,
+ "stacktrace": [
+ {
+ "filename": "chrome://mochikit/content/tests/BrowserTestUtils/content-task.js line 52 > eval",
+ "lineNumber": 6,
+ "columnNumber": 9,
+ "functionName": null
+ },
+ {
+ "filename": "chrome://mochikit/content/tests/BrowserTestUtils/content-task.js",
+ "lineNumber": 53,
+ "columnNumber": 20,
+ "functionName": null
+ }
+ ],
+ "notes": [
+ {
+ "messageBody": "Previously declared at line 2, column 6",
+ "frame": {
+ "source": "http://example.com/browser/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/test-console-api.html",
+ "line": 2,
+ "column": 6
+ }
+ }
+ ]
+ }
+});
module.exports = {
stubPreparedMessages,
stubPackets,
-} \ No newline at end of file
+};
diff --git a/devtools/client/webconsole/new-console-output/types.js b/devtools/client/webconsole/new-console-output/types.js
index 897ae5d3a..cb27aedab 100644
--- a/devtools/client/webconsole/new-console-output/types.js
+++ b/devtools/client/webconsole/new-console-output/types.js
@@ -38,6 +38,7 @@ exports.ConsoleMessage = Immutable.Record({
groupId: null,
exceptionDocURL: null,
userProvidedStyles: null,
+ notes: null,
});
exports.NetworkEventMessage = Immutable.Record({
diff --git a/devtools/client/webconsole/new-console-output/utils/messages.js b/devtools/client/webconsole/new-console-output/utils/messages.js
index f91209e9d..119bc7fba 100644
--- a/devtools/client/webconsole/new-console-output/utils/messages.js
+++ b/devtools/client/webconsole/new-console-output/utils/messages.js
@@ -165,6 +165,7 @@ function transformPacket(packet) {
stacktrace: pageError.stacktrace ? pageError.stacktrace : null,
frame,
exceptionDocURL: pageError.exceptionDocURL,
+ notes: pageError.notes,
});
}
@@ -185,7 +186,8 @@ function transformPacket(packet) {
exceptionMessage: messageText,
exceptionDocURL,
frame,
- result: parameters
+ result: parameters,
+ notes,
} = packet;
const level = messageText ? MESSAGE_LEVEL.ERROR : MESSAGE_LEVEL.LOG;
@@ -197,6 +199,7 @@ function transformPacket(packet) {
parameters,
exceptionDocURL,
frame,
+ notes,
});
}
}
diff --git a/devtools/client/webide/components/moz.build b/devtools/client/webide/components/moz.build
deleted file mode 100644
index d4047c295..000000000
--- a/devtools/client/webide/components/moz.build
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-EXTRA_COMPONENTS += [
- 'webideCli.js',
- 'webideComponents.manifest',
-]
diff --git a/devtools/client/webide/components/webideCli.js b/devtools/client/webide/components/webideCli.js
deleted file mode 100644
index 0f75da2c4..000000000
--- a/devtools/client/webide/components/webideCli.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-const Ci = Components.interfaces;
-const Cu = Components.utils;
-
-const { XPCOMUtils } = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
-
-XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm");
-
-/**
- * Handles --webide command line option.
- */
-
-function webideCli() { }
-
-webideCli.prototype = {
- handle: function (cmdLine) {
- if (!cmdLine.handleFlag("webide", false)) {
- return;
- }
-
- // If --webide is used remotely, we don't want to open
- // a new tab.
- //
- // If --webide is used for a new Firefox instance, we
- // want to open webide only.
- cmdLine.preventDefault = true;
-
- let win = Services.wm.getMostRecentWindow("devtools:webide");
- if (win) {
- win.focus();
- } else {
- win = Services.ww.openWindow(null,
- "chrome://webide/content/",
- "webide",
- "chrome,centerscreen,resizable,dialog=no",
- null);
- }
-
- if (cmdLine.state == Ci.nsICommandLine.STATE_INITIAL_LAUNCH) {
- // If this is a new Firefox instance, and because we will only start
- // webide, we need to notify "sessionstore-windows-restored" to trigger
- // addons registration (for simulators and adb helper).
- Services.obs.notifyObservers(null, "sessionstore-windows-restored", "");
- }
- },
-
- helpInfo: "",
-
- classID: Components.ID("{79b7b44e-de5e-4e4c-b7a2-044003c615d9}"),
- QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler]),
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([webideCli]);
diff --git a/devtools/client/webide/components/webideComponents.manifest b/devtools/client/webide/components/webideComponents.manifest
deleted file mode 100644
index 03af9758c..000000000
--- a/devtools/client/webide/components/webideComponents.manifest
+++ /dev/null
@@ -1,4 +0,0 @@
-# webide components
-component {79b7b44e-de5e-4e4c-b7a2-044003c615d9} webideCli.js
-contract @mozilla.org/browser/webide-clh;1 {79b7b44e-de5e-4e4c-b7a2-044003c615d9}
-category command-line-handler a-webide @mozilla.org/browser/webide-clh;1
diff --git a/devtools/client/webide/content/addons.js b/devtools/client/webide/content/addons.js
deleted file mode 100644
index 3948b040f..000000000
--- a/devtools/client/webide/content/addons.js
+++ /dev/null
@@ -1,135 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const Services = require("Services");
-const {gDevTools} = require("devtools/client/framework/devtools");
-const {GetAvailableAddons, ForgetAddonsList} = require("devtools/client/webide/modules/addons");
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- document.querySelector("#aboutaddons").onclick = function () {
- let browserWin = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
- if (browserWin && browserWin.BrowserOpenAddonsMgr) {
- browserWin.BrowserOpenAddonsMgr("addons://list/extension");
- }
- };
- document.querySelector("#close").onclick = CloseUI;
- GetAvailableAddons().then(BuildUI, (e) => {
- console.error(e);
- window.alert(Strings.formatStringFromName("error_cantFetchAddonsJSON", [e], 1));
- });
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- ForgetAddonsList();
-}, true);
-
-function CloseUI() {
- window.parent.UI.openProject();
-}
-
-function BuildUI(addons) {
- BuildItem(addons.adb, "adb");
- BuildItem(addons.adapters, "adapters");
- for (let addon of addons.simulators) {
- BuildItem(addon, "simulator");
- }
-}
-
-function BuildItem(addon, type) {
-
- function onAddonUpdate(event, arg) {
- switch (event) {
- case "update":
- progress.removeAttribute("value");
- li.setAttribute("status", addon.status);
- status.textContent = Strings.GetStringFromName("addons_status_" + addon.status);
- break;
- case "failure":
- window.parent.UI.reportError("error_operationFail", arg);
- break;
- case "progress":
- if (arg == -1) {
- progress.removeAttribute("value");
- } else {
- progress.value = arg;
- }
- break;
- }
- }
-
- let events = ["update", "failure", "progress"];
- for (let e of events) {
- addon.on(e, onAddonUpdate);
- }
- window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- for (let e of events) {
- addon.off(e, onAddonUpdate);
- }
- });
-
- let li = document.createElement("li");
- li.setAttribute("status", addon.status);
-
- let name = document.createElement("span");
- name.className = "name";
-
- switch (type) {
- case "adb":
- li.setAttribute("addon", type);
- name.textContent = Strings.GetStringFromName("addons_adb_label");
- break;
- case "adapters":
- li.setAttribute("addon", type);
- try {
- name.textContent = Strings.GetStringFromName("addons_adapters_label");
- } catch (e) {
- // This code (bug 1081093) will be backported to Aurora, which doesn't
- // contain this string.
- name.textContent = "Tools Adapters Add-on";
- }
- break;
- case "simulator":
- li.setAttribute("addon", "simulator-" + addon.version);
- let stability = Strings.GetStringFromName("addons_" + addon.stability);
- name.textContent = Strings.formatStringFromName("addons_simulator_label", [addon.version, stability], 2);
- break;
- }
-
- li.appendChild(name);
-
- let status = document.createElement("span");
- status.className = "status";
- status.textContent = Strings.GetStringFromName("addons_status_" + addon.status);
- li.appendChild(status);
-
- let installButton = document.createElement("button");
- installButton.className = "install-button";
- installButton.onclick = () => addon.install();
- installButton.textContent = Strings.GetStringFromName("addons_install_button");
- li.appendChild(installButton);
-
- let uninstallButton = document.createElement("button");
- uninstallButton.className = "uninstall-button";
- uninstallButton.onclick = () => addon.uninstall();
- uninstallButton.textContent = Strings.GetStringFromName("addons_uninstall_button");
- li.appendChild(uninstallButton);
-
- let progress = document.createElement("progress");
- li.appendChild(progress);
-
- if (type == "adb") {
- let warning = document.createElement("p");
- warning.textContent = Strings.GetStringFromName("addons_adb_warning");
- warning.className = "warning";
- li.appendChild(warning);
- }
-
- document.querySelector("ul").appendChild(li);
-}
diff --git a/devtools/client/webide/content/addons.xhtml b/devtools/client/webide/content/addons.xhtml
deleted file mode 100644
index 6f3bc1e7c..000000000
--- a/devtools/client/webide/content/addons.xhtml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/addons.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/addons.js"></script>
- </head>
- <body>
-
- <div id="controls">
- <a id="aboutaddons">&addons_aboutaddons;</a>
- <a id="close">&deck_close;</a>
- </div>
-
- <h1>&addons_title;</h1>
-
- <ul></ul>
-
- </body>
-</html>
diff --git a/devtools/client/webide/content/details.js b/devtools/client/webide/content/details.js
deleted file mode 100644
index 9097cd8c5..000000000
--- a/devtools/client/webide/content/details.js
+++ /dev/null
@@ -1,139 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const Services = require("Services");
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {ProjectBuilding} = require("devtools/client/webide/modules/build");
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- document.addEventListener("visibilitychange", updateUI, true);
- AppManager.on("app-manager-update", onAppManagerUpdate);
- updateUI();
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- AppManager.off("app-manager-update", onAppManagerUpdate);
-}, true);
-
-function onAppManagerUpdate(event, what, details) {
- if (what == "project" ||
- what == "project-validated") {
- updateUI();
- }
-}
-
-function resetUI() {
- document.querySelector("#toolbar").classList.add("hidden");
- document.querySelector("#type").classList.add("hidden");
- document.querySelector("#descriptionHeader").classList.add("hidden");
- document.querySelector("#manifestURLHeader").classList.add("hidden");
- document.querySelector("#locationHeader").classList.add("hidden");
-
- document.body.className = "";
- document.querySelector("#icon").src = "";
- document.querySelector("h1").textContent = "";
- document.querySelector("#description").textContent = "";
- document.querySelector("#type").textContent = "";
- document.querySelector("#manifestURL").textContent = "";
- document.querySelector("#location").textContent = "";
-
- document.querySelector("#prePackageLog").hidden = true;
-
- document.querySelector("#errorslist").innerHTML = "";
- document.querySelector("#warningslist").innerHTML = "";
-
-}
-
-function updateUI() {
- resetUI();
-
- let project = AppManager.selectedProject;
- if (!project) {
- return;
- }
-
- if (project.type != "runtimeApp" && project.type != "mainProcess") {
- document.querySelector("#toolbar").classList.remove("hidden");
- document.querySelector("#locationHeader").classList.remove("hidden");
- document.querySelector("#location").textContent = project.location;
- }
-
- document.body.className = project.validationStatus;
- document.querySelector("#icon").src = project.icon;
- document.querySelector("h1").textContent = project.name;
-
- let manifest;
- if (project.type == "runtimeApp") {
- manifest = project.app.manifest;
- } else {
- manifest = project.manifest;
- }
-
- if (manifest) {
- if (manifest.description) {
- document.querySelector("#descriptionHeader").classList.remove("hidden");
- document.querySelector("#description").textContent = manifest.description;
- }
-
- document.querySelector("#type").classList.remove("hidden");
-
- if (project.type == "runtimeApp") {
- let manifestURL = AppManager.getProjectManifestURL(project);
- document.querySelector("#type").textContent = manifest.type || "web";
- document.querySelector("#manifestURLHeader").classList.remove("hidden");
- document.querySelector("#manifestURL").textContent = manifestURL;
- } else if (project.type == "mainProcess") {
- document.querySelector("#type").textContent = project.name;
- } else {
- document.querySelector("#type").textContent = project.type + " " + (manifest.type || "web");
- }
-
- if (project.type == "packaged") {
- let manifestURL = AppManager.getProjectManifestURL(project);
- if (manifestURL) {
- document.querySelector("#manifestURLHeader").classList.remove("hidden");
- document.querySelector("#manifestURL").textContent = manifestURL;
- }
- }
- }
-
- if (project.type != "runtimeApp" && project.type != "mainProcess") {
- ProjectBuilding.hasPrepackage(project).then(hasPrepackage => {
- document.querySelector("#prePackageLog").hidden = !hasPrepackage;
- });
- }
-
- let errorsNode = document.querySelector("#errorslist");
- let warningsNode = document.querySelector("#warningslist");
-
- if (project.errors) {
- for (let e of project.errors) {
- let li = document.createElement("li");
- li.textContent = e;
- errorsNode.appendChild(li);
- }
- }
-
- if (project.warnings) {
- for (let w of project.warnings) {
- let li = document.createElement("li");
- li.textContent = w;
- warningsNode.appendChild(li);
- }
- }
-
- AppManager.update("details");
-}
-
-function showPrepackageLog() {
- window.top.UI.selectDeckPanel("logs");
-}
-
-function removeProject() {
- AppManager.removeSelectedProject();
-}
diff --git a/devtools/client/webide/content/details.xhtml b/devtools/client/webide/content/details.xhtml
deleted file mode 100644
index a04c37b0c..000000000
--- a/devtools/client/webide/content/details.xhtml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/details.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/details.js"></script>
- </head>
- <body>
-
- <div id="toolbar">
- <button onclick="removeProject()">&details_removeProject_button;</button>
- <p id="validation_status">
- <span class="valid">&details_valid_header;</span>
- <span class="warning">&details_warning_header;</span>
- <span class="error">&details_error_header;</span>
- </p>
- </div>
-
- <header>
- <img id="icon"></img>
- <div>
- <h1></h1>
- <p id="type"></p>
- </div>
- </header>
-
- <main>
- <h3 id="descriptionHeader">&details_description;</h3>
- <p id="description"></p>
-
- <h3 id="locationHeader">&details_location;</h3>
- <p id="location"></p>
-
- <h3 id="manifestURLHeader">&details_manifestURL;</h3>
- <p id="manifestURL"></p>
-
- <button id="prePackageLog" onclick="showPrepackageLog()" hidden="true">&details_showPrepackageLog_button;</button>
- </main>
-
- <ul class="validation_messages" id="errorslist"></ul>
- <ul class="validation_messages" id="warningslist"></ul>
-
- </body>
-</html>
diff --git a/devtools/client/webide/content/devicepreferences.js b/devtools/client/webide/content/devicepreferences.js
deleted file mode 100644
index 14c020f12..000000000
--- a/devtools/client/webide/content/devicepreferences.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {Connection} = require("devtools/shared/client/connection-manager");
-const ConfigView = require("devtools/client/webide/modules/config-view");
-
-var configView = new ConfigView(window);
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- AppManager.on("app-manager-update", OnAppManagerUpdate);
- document.getElementById("close").onclick = CloseUI;
- document.getElementById("device-fields").onchange = UpdateField;
- document.getElementById("device-fields").onclick = CheckReset;
- document.getElementById("search-bar").onkeyup = document.getElementById("search-bar").onclick = SearchField;
- document.getElementById("custom-value").onclick = UpdateNewField;
- document.getElementById("custom-value-type").onchange = ClearNewFields;
- document.getElementById("add-custom-field").onkeyup = CheckNewFieldSubmit;
- BuildUI();
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- AppManager.off("app-manager-update", OnAppManagerUpdate);
-});
-
-function CloseUI() {
- window.parent.UI.openProject();
-}
-
-function OnAppManagerUpdate(event, what) {
- if (what == "connection" || what == "runtime-global-actors") {
- BuildUI();
- }
-}
-
-function CheckNewFieldSubmit(event) {
- configView.checkNewFieldSubmit(event);
-}
-
-function UpdateNewField() {
- configView.updateNewField();
-}
-
-function ClearNewFields() {
- configView.clearNewFields();
-}
-
-function CheckReset(event) {
- configView.checkReset(event);
-}
-
-function UpdateField(event) {
- configView.updateField(event);
-}
-
-function SearchField(event) {
- configView.search(event);
-}
-
-var getAllPrefs; // Used by tests
-function BuildUI() {
- configView.resetTable();
-
- if (AppManager.connection &&
- AppManager.connection.status == Connection.Status.CONNECTED &&
- AppManager.preferenceFront) {
- configView.front = AppManager.preferenceFront;
- configView.kind = "Pref";
- configView.includeTypeName = true;
-
- getAllPrefs = AppManager.preferenceFront.getAllPrefs()
- .then(json => configView.generateDisplay(json));
- } else {
- CloseUI();
- }
-}
diff --git a/devtools/client/webide/content/devicepreferences.xhtml b/devtools/client/webide/content/devicepreferences.xhtml
deleted file mode 100644
index dafb6f15f..000000000
--- a/devtools/client/webide/content/devicepreferences.xhtml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/config-view.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/devicepreferences.js"></script>
- </head>
- <body>
- <header>
- <div id="controls">
- <a id="close">&deck_close;</a>
- </div>
- <h1>&devicepreference_title;</h1>
- <div id="search">
- <input type="text" id="search-bar" placeholder="&devicepreference_search;"/>
- </div>
- </header>
- <table id="device-fields">
- <tr id="add-custom-field">
- <td>
- <select id="custom-value-type">
- <option value="" selected="selected">&device_typenone;</option>
- <option value="boolean">&device_typeboolean;</option>
- <option value="number">&device_typenumber;</option>
- <option value="string">&device_typestring;</option>
- </select>
- <input type="text" id="custom-value-name" placeholder="&devicepreference_newname;"/>
- </td>
- <td class="custom-input">
- <input type="text" id="custom-value-text" placeholder="&devicepreference_newtext;"/>
- </td>
- <td>
- <button id="custom-value" class="new-editable">&devicepreference_addnew;</button>
- </td>
- </tr>
- </table>
- </body>
-</html>
diff --git a/devtools/client/webide/content/devicesettings.js b/devtools/client/webide/content/devicesettings.js
deleted file mode 100644
index 987df5995..000000000
--- a/devtools/client/webide/content/devicesettings.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {Connection} = require("devtools/shared/client/connection-manager");
-const ConfigView = require("devtools/client/webide/modules/config-view");
-
-var configView = new ConfigView(window);
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- AppManager.on("app-manager-update", OnAppManagerUpdate);
- document.getElementById("close").onclick = CloseUI;
- document.getElementById("device-fields").onchange = UpdateField;
- document.getElementById("device-fields").onclick = CheckReset;
- document.getElementById("search-bar").onkeyup = document.getElementById("search-bar").onclick = SearchField;
- document.getElementById("custom-value").onclick = UpdateNewField;
- document.getElementById("custom-value-type").onchange = ClearNewFields;
- document.getElementById("add-custom-field").onkeyup = CheckNewFieldSubmit;
- BuildUI();
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- AppManager.off("app-manager-update", OnAppManagerUpdate);
-});
-
-function CloseUI() {
- window.parent.UI.openProject();
-}
-
-function OnAppManagerUpdate(event, what) {
- if (what == "connection" || what == "runtime-global-actors") {
- BuildUI();
- }
-}
-
-function CheckNewFieldSubmit(event) {
- configView.checkNewFieldSubmit(event);
-}
-
-function UpdateNewField() {
- configView.updateNewField();
-}
-
-function ClearNewFields() {
- configView.clearNewFields();
-}
-
-function CheckReset(event) {
- configView.checkReset(event);
-}
-
-function UpdateField(event) {
- configView.updateField(event);
-}
-
-function SearchField(event) {
- configView.search(event);
-}
-
-var getAllSettings; // Used by tests
-function BuildUI() {
- configView.resetTable();
-
- if (AppManager.connection &&
- AppManager.connection.status == Connection.Status.CONNECTED &&
- AppManager.settingsFront) {
- configView.front = AppManager.settingsFront;
- configView.kind = "Setting";
- configView.includeTypeName = false;
-
- getAllSettings = AppManager.settingsFront.getAllSettings()
- .then(json => configView.generateDisplay(json));
- } else {
- CloseUI();
- }
-}
diff --git a/devtools/client/webide/content/devicesettings.xhtml b/devtools/client/webide/content/devicesettings.xhtml
deleted file mode 100644
index 0406c6f07..000000000
--- a/devtools/client/webide/content/devicesettings.xhtml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/config-view.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/devicesettings.js"></script>
- </head>
- <body>
- <header>
- <div id="controls">
- <a id="close">&deck_close;</a>
- </div>
- <h1>&devicesetting_title;</h1>
- <div id="search">
- <input type="text" id="search-bar" placeholder="&devicesetting_search;"/>
- </div>
- </header>
- <table id="device-fields">
- <tr id="add-custom-field">
- <td>
- <select id="custom-value-type">
- <option value="" selected="selected">&device_typenone;</option>
- <option value="boolean">&device_typeboolean;</option>
- <option value="number">&device_typenumber;</option>
- <option value="string">&device_typestring;</option>
- <option value="object">&device_typeobject;</option>
- </select>
- <input type="text" id="custom-value-name" placeholder="&devicesetting_newname;"/>
- </td>
- <td class="custom-input">
- <input type="text" id="custom-value-text" placeholder="&devicesetting_newtext;"/>
- </td>
- <td>
- <button id="custom-value" class="new-editable">&devicesetting_addnew;</button>
- </td>
- </tr>
- </table>
- </body>
-</html>
diff --git a/devtools/client/webide/content/jar.mn b/devtools/client/webide/content/jar.mn
deleted file mode 100644
index db79fdb51..000000000
--- a/devtools/client/webide/content/jar.mn
+++ /dev/null
@@ -1,38 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-webide.jar:
-% content webide %content/
- content/webide.xul (webide.xul)
- content/webide.js (webide.js)
- content/newapp.xul (newapp.xul)
- content/newapp.js (newapp.js)
- content/details.xhtml (details.xhtml)
- content/details.js (details.js)
- content/addons.js (addons.js)
- content/addons.xhtml (addons.xhtml)
- content/permissionstable.js (permissionstable.js)
- content/permissionstable.xhtml (permissionstable.xhtml)
- content/runtimedetails.js (runtimedetails.js)
- content/runtimedetails.xhtml (runtimedetails.xhtml)
- content/prefs.js (prefs.js)
- content/prefs.xhtml (prefs.xhtml)
- content/monitor.xhtml (monitor.xhtml)
- content/monitor.js (monitor.js)
- content/devicepreferences.js (devicepreferences.js)
- content/devicepreferences.xhtml (devicepreferences.xhtml)
- content/devicesettings.js (devicesettings.js)
- content/devicesettings.xhtml (devicesettings.xhtml)
- content/wifi-auth.js (wifi-auth.js)
- content/wifi-auth.xhtml (wifi-auth.xhtml)
- content/logs.xhtml (logs.xhtml)
- content/logs.js (logs.js)
- content/project-listing.xhtml (project-listing.xhtml)
- content/project-listing.js (project-listing.js)
- content/project-panel.js (project-panel.js)
- content/runtime-panel.js (runtime-panel.js)
- content/runtime-listing.xhtml (runtime-listing.xhtml)
- content/runtime-listing.js (runtime-listing.js)
- content/simulator.js (simulator.js)
- content/simulator.xhtml (simulator.xhtml)
diff --git a/devtools/client/webide/content/logs.js b/devtools/client/webide/content/logs.js
deleted file mode 100644
index 157d83b67..000000000
--- a/devtools/client/webide/content/logs.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
-
- Logs.init();
-});
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
-
- Logs.uninit();
-});
-
-const Logs = {
- init: function () {
- this.list = document.getElementById("logs");
-
- Logs.onAppManagerUpdate = Logs.onAppManagerUpdate.bind(this);
- AppManager.on("app-manager-update", Logs.onAppManagerUpdate);
-
- document.getElementById("close").onclick = Logs.close.bind(this);
- },
-
- uninit: function () {
- AppManager.off("app-manager-update", Logs.onAppManagerUpdate);
- },
-
- onAppManagerUpdate: function (event, what, details) {
- switch (what) {
- case "pre-package":
- this.prePackageLog(details);
- break;
- }
- },
-
- close: function () {
- window.parent.UI.openProject();
- },
-
- prePackageLog: function (msg, details) {
- if (msg == "start") {
- this.clear();
- } else if (msg == "succeed") {
- setTimeout(function () {
- Logs.close();
- }, 1000);
- } else if (msg == "failed") {
- this.log(details);
- } else {
- this.log(msg);
- }
- },
-
- clear: function () {
- this.list.innerHTML = "";
- },
-
- log: function (msg) {
- let line = document.createElement("li");
- line.textContent = msg;
- this.list.appendChild(line);
- }
-};
diff --git a/devtools/client/webide/content/logs.xhtml b/devtools/client/webide/content/logs.xhtml
deleted file mode 100644
index 8d003e509..000000000
--- a/devtools/client/webide/content/logs.xhtml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="resource://devtools/client/themes/common.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/logs.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"></script>
- <script type="application/javascript;version=1.8" src="logs.js"></script>
- </head>
- <body>
-
- <div id="controls">
- <a id="close">&deck_close;</a>
- </div>
-
- <h1>&logs_title;</h1>
-
- <ul id="logs" class="devtools-monospace">
- </ul>
-
- </body>
-</html>
diff --git a/devtools/client/webide/content/monitor.js b/devtools/client/webide/content/monitor.js
deleted file mode 100644
index a5d80d460..000000000
--- a/devtools/client/webide/content/monitor.js
+++ /dev/null
@@ -1,741 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const Services = require("Services");
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {AppActorFront} = require("devtools/shared/apps/app-actor-front");
-const {Connection} = require("devtools/shared/client/connection-manager");
-const EventEmitter = require("devtools/shared/event-emitter");
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- window.addEventListener("resize", Monitor.resize);
- window.addEventListener("unload", Monitor.unload);
-
- document.querySelector("#close").onclick = () => {
- window.parent.UI.openProject();
- };
-
- Monitor.load();
-});
-
-
-/**
- * The Monitor is a WebIDE tool used to display any kind of time-based data in
- * the form of graphs.
- *
- * The data can come from a Firefox OS device, simulator, or from a WebSockets
- * server running locally.
- *
- * The format of a data update is typically an object like:
- *
- * { graph: 'mygraph', curve: 'mycurve', value: 42, time: 1234 }
- *
- * or an array of such objects. For more details on the data format, see the
- * `Graph.update(data)` method.
- */
-var Monitor = {
-
- apps: new Map(),
- graphs: new Map(),
- front: null,
- socket: null,
- wstimeout: null,
- b2ginfo: false,
- b2gtimeout: null,
-
- /**
- * Add new data to the graphs, create a new graph if necessary.
- */
- update: function (data, fallback) {
- if (Array.isArray(data)) {
- data.forEach(d => Monitor.update(d, fallback));
- return;
- }
-
- if (Monitor.b2ginfo && data.graph === "USS") {
- // If we're polling b2g-info, ignore USS updates from the device's
- // USSAgents (see Monitor.pollB2GInfo()).
- return;
- }
-
- if (fallback) {
- for (let key in fallback) {
- if (!data[key]) {
- data[key] = fallback[key];
- }
- }
- }
-
- let graph = Monitor.graphs.get(data.graph);
- if (!graph) {
- let element = document.createElement("div");
- element.classList.add("graph");
- document.body.appendChild(element);
-
- graph = new Graph(data.graph, element);
- Monitor.resize(); // a scrollbar might have dis/reappeared
- Monitor.graphs.set(data.graph, graph);
- }
- graph.update(data);
- },
-
- /**
- * Initialize the Monitor.
- */
- load: function () {
- AppManager.on("app-manager-update", Monitor.onAppManagerUpdate);
- Monitor.connectToRuntime();
- Monitor.connectToWebSocket();
- },
-
- /**
- * Clean up the Monitor.
- */
- unload: function () {
- AppManager.off("app-manager-update", Monitor.onAppManagerUpdate);
- Monitor.disconnectFromRuntime();
- Monitor.disconnectFromWebSocket();
- },
-
- /**
- * Resize all the graphs.
- */
- resize: function () {
- for (let graph of Monitor.graphs.values()) {
- graph.resize();
- }
- },
-
- /**
- * When WebIDE connects to a new runtime, start its data forwarders.
- */
- onAppManagerUpdate: function (event, what, details) {
- switch (what) {
- case "runtime-global-actors":
- Monitor.connectToRuntime();
- break;
- case "connection":
- if (AppManager.connection.status == Connection.Status.DISCONNECTED) {
- Monitor.disconnectFromRuntime();
- }
- break;
- }
- },
-
- /**
- * Use an AppActorFront on a runtime to watch track its apps.
- */
- connectToRuntime: function () {
- Monitor.pollB2GInfo();
- let client = AppManager.connection && AppManager.connection.client;
- let resp = AppManager._listTabsResponse;
- if (client && resp && !Monitor.front) {
- Monitor.front = new AppActorFront(client, resp);
- Monitor.front.watchApps(Monitor.onRuntimeAppEvent);
- }
- },
-
- /**
- * Destroy our AppActorFront.
- */
- disconnectFromRuntime: function () {
- Monitor.unpollB2GInfo();
- if (Monitor.front) {
- Monitor.front.unwatchApps(Monitor.onRuntimeAppEvent);
- Monitor.front = null;
- }
- },
-
- /**
- * Try connecting to a local websockets server and accept updates from it.
- */
- connectToWebSocket: function () {
- let webSocketURL = Services.prefs.getCharPref("devtools.webide.monitorWebSocketURL");
- try {
- Monitor.socket = new WebSocket(webSocketURL);
- Monitor.socket.onmessage = function (event) {
- Monitor.update(JSON.parse(event.data));
- };
- Monitor.socket.onclose = function () {
- Monitor.wstimeout = setTimeout(Monitor.connectToWebsocket, 1000);
- };
- } catch (e) {
- Monitor.wstimeout = setTimeout(Monitor.connectToWebsocket, 1000);
- }
- },
-
- /**
- * Used when cleaning up.
- */
- disconnectFromWebSocket: function () {
- clearTimeout(Monitor.wstimeout);
- if (Monitor.socket) {
- Monitor.socket.onclose = () => {};
- Monitor.socket.close();
- }
- },
-
- /**
- * When an app starts on the runtime, start a monitor actor for its process.
- */
- onRuntimeAppEvent: function (type, app) {
- if (type !== "appOpen" && type !== "appClose") {
- return;
- }
-
- let client = AppManager.connection.client;
- app.getForm().then(form => {
- if (type === "appOpen") {
- app.monitorClient = new MonitorClient(client, form);
- app.monitorClient.start();
- app.monitorClient.on("update", Monitor.onRuntimeUpdate);
- Monitor.apps.set(form.monitorActor, app);
- } else {
- let app = Monitor.apps.get(form.monitorActor);
- if (app) {
- app.monitorClient.stop(() => app.monitorClient.destroy());
- Monitor.apps.delete(form.monitorActor);
- }
- }
- });
- },
-
- /**
- * Accept data updates from the monitor actors of a runtime.
- */
- onRuntimeUpdate: function (type, packet) {
- let fallback = {}, app = Monitor.apps.get(packet.from);
- if (app) {
- fallback.curve = app.manifest.name;
- }
- Monitor.update(packet.data, fallback);
- },
-
- /**
- * Bug 1047355: If possible, parsing the output of `b2g-info` has several
- * benefits over bug 1037465's multi-process USSAgent approach, notably:
- * - Works for older Firefox OS devices (pre-2.1),
- * - Doesn't need certified-apps debugging,
- * - Polling time is synchronized for all processes.
- * TODO: After bug 1043324 lands, consider removing this hack.
- */
- pollB2GInfo: function () {
- if (AppManager.selectedRuntime) {
- let device = AppManager.selectedRuntime.device;
- if (device && device.shell) {
- device.shell("b2g-info").then(s => {
- let lines = s.split("\n");
- let line = "";
-
- // Find the header row to locate NAME and USS, looks like:
- // ' NAME PID NICE USS PSS RSS VSIZE OOM_ADJ USER '.
- while (line.indexOf("NAME") < 0) {
- if (lines.length < 1) {
- // Something is wrong with this output, don't trust b2g-info.
- Monitor.unpollB2GInfo();
- return;
- }
- line = lines.shift();
- }
- let namelength = line.indexOf("NAME") + "NAME".length;
- let ussindex = line.slice(namelength).split(/\s+/).indexOf("USS");
-
- // Get the NAME and USS in each following line, looks like:
- // 'Homescreen 375 18 12.6 16.3 27.1 67.8 4 app_375'.
- while (lines.length > 0 && lines[0].length > namelength) {
- line = lines.shift();
- let name = line.slice(0, namelength);
- let uss = line.slice(namelength).split(/\s+/)[ussindex];
- Monitor.update({
- curve: name.trim(),
- value: 1024 * 1024 * parseFloat(uss) // Convert MB to bytes.
- }, {
- // Note: We use the fallback object to set the graph name to 'USS'
- // so that Monitor.update() can ignore USSAgent updates.
- graph: "USS"
- });
- }
- });
- }
- }
- Monitor.b2ginfo = true;
- Monitor.b2gtimeout = setTimeout(Monitor.pollB2GInfo, 350);
- },
-
- /**
- * Polling b2g-info doesn't work or is no longer needed.
- */
- unpollB2GInfo: function () {
- clearTimeout(Monitor.b2gtimeout);
- Monitor.b2ginfo = false;
- }
-
-};
-
-
-/**
- * A MonitorClient is used as an actor client of a runtime's monitor actors,
- * receiving its updates.
- */
-function MonitorClient(client, form) {
- this.client = client;
- this.actor = form.monitorActor;
- this.events = ["update"];
-
- EventEmitter.decorate(this);
- this.client.registerClient(this);
-}
-MonitorClient.prototype.destroy = function () {
- this.client.unregisterClient(this);
-};
-MonitorClient.prototype.start = function () {
- this.client.request({
- to: this.actor,
- type: "start"
- });
-};
-MonitorClient.prototype.stop = function (callback) {
- this.client.request({
- to: this.actor,
- type: "stop"
- }, callback);
-};
-
-
-/**
- * A Graph populates a container DOM element with an SVG graph and a legend.
- */
-function Graph(name, element) {
- this.name = name;
- this.element = element;
- this.curves = new Map();
- this.events = new Map();
- this.ignored = new Set();
- this.enabled = true;
- this.request = null;
-
- this.x = d3.time.scale();
- this.y = d3.scale.linear();
-
- this.xaxis = d3.svg.axis().scale(this.x).orient("bottom");
- this.yaxis = d3.svg.axis().scale(this.y).orient("left");
-
- this.xformat = d3.time.format("%I:%M:%S");
- this.yformat = this.formatter(1);
- this.yaxis.tickFormat(this.formatter(0));
-
- this.line = d3.svg.line().interpolate("linear")
- .x(function (d) { return this.x(d.time); })
- .y(function (d) { return this.y(d.value); });
-
- this.color = d3.scale.category10();
-
- this.svg = d3.select(element).append("svg").append("g")
- .attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
-
- this.xelement = this.svg.append("g").attr("class", "x axis").call(this.xaxis);
- this.yelement = this.svg.append("g").attr("class", "y axis").call(this.yaxis);
-
- // RULERS on axes
- let xruler = this.xruler = this.svg.select(".x.axis").append("g").attr("class", "x ruler");
- xruler.append("line").attr("y2", 6);
- xruler.append("line").attr("stroke-dasharray", "1,1");
- xruler.append("text").attr("y", 9).attr("dy", ".71em");
-
- let yruler = this.yruler = this.svg.select(".y.axis").append("g").attr("class", "y ruler");
- yruler.append("line").attr("x2", -6);
- yruler.append("line").attr("stroke-dasharray", "1,1");
- yruler.append("text").attr("x", -9).attr("dy", ".32em");
-
- let self = this;
-
- d3.select(element).select("svg")
- .on("mousemove", function () {
- let mouse = d3.mouse(this);
- self.mousex = mouse[0] - self.margin.left,
- self.mousey = mouse[1] - self.margin.top;
-
- xruler.attr("transform", "translate(" + self.mousex + ",0)");
- yruler.attr("transform", "translate(0," + self.mousey + ")");
- });
- /* .on('mouseout', function() {
- self.xruler.attr('transform', 'translate(-500,0)');
- self.yruler.attr('transform', 'translate(0,-500)');
- });*/
- this.mousex = this.mousey = -500;
-
- let sidebar = d3.select(this.element).append("div").attr("class", "sidebar");
- let title = sidebar.append("label").attr("class", "graph-title");
-
- title.append("input")
- .attr("type", "checkbox")
- .attr("checked", "true")
- .on("click", function () { self.toggle(); });
- title.append("span").text(this.name);
-
- this.legend = sidebar.append("div").attr("class", "legend");
-
- this.resize = this.resize.bind(this);
- this.render = this.render.bind(this);
- this.averages = this.averages.bind(this);
-
- setInterval(this.averages, 1000);
-
- this.resize();
-}
-
-Graph.prototype = {
-
- /**
- * These margin are used to properly position the SVG graph items inside the
- * container element.
- */
- margin: {
- top: 10,
- right: 150,
- bottom: 20,
- left: 50
- },
-
- /**
- * A Graph can be collapsed by the user.
- */
- toggle: function () {
- if (this.enabled) {
- this.element.classList.add("disabled");
- this.enabled = false;
- } else {
- this.element.classList.remove("disabled");
- this.enabled = true;
- }
- Monitor.resize();
- },
-
- /**
- * If the container element is resized (e.g. because the window was resized or
- * a scrollbar dis/appeared), the graph needs to be resized as well.
- */
- resize: function () {
- let style = getComputedStyle(this.element),
- height = parseFloat(style.height) - this.margin.top - this.margin.bottom,
- width = parseFloat(style.width) - this.margin.left - this.margin.right;
-
- d3.select(this.element).select("svg")
- .attr("width", width + this.margin.left)
- .attr("height", height + this.margin.top + this.margin.bottom);
-
- this.x.range([0, width]);
- this.y.range([height, 0]);
-
- this.xelement.attr("transform", "translate(0," + height + ")");
- this.xruler.select("line[stroke-dasharray]").attr("y2", -height);
- this.yruler.select("line[stroke-dasharray]").attr("x2", width);
- },
-
- /**
- * If the domain of the Graph's data changes (on the time axis and/or on the
- * value axis), the axes' domains need to be updated and the graph items need
- * to be rescaled in order to represent all the data.
- */
- rescale: function () {
- let gettime = v => { return v.time; },
- getvalue = v => { return v.value; },
- ignored = c => { return this.ignored.has(c.id); };
-
- let xmin = null, xmax = null, ymin = null, ymax = null;
- for (let curve of this.curves.values()) {
- if (ignored(curve)) {
- continue;
- }
- if (xmax == null || curve.xmax > xmax) {
- xmax = curve.xmax;
- }
- if (xmin == null || curve.xmin < xmin) {
- xmin = curve.xmin;
- }
- if (ymax == null || curve.ymax > ymax) {
- ymax = curve.ymax;
- }
- if (ymin == null || curve.ymin < ymin) {
- ymin = curve.ymin;
- }
- }
- for (let event of this.events.values()) {
- if (ignored(event)) {
- continue;
- }
- if (xmax == null || event.xmax > xmax) {
- xmax = event.xmax;
- }
- if (xmin == null || event.xmin < xmin) {
- xmin = event.xmin;
- }
- }
-
- let oldxdomain = this.x.domain();
- if (xmin != null && xmax != null) {
- this.x.domain([xmin, xmax]);
- let newxdomain = this.x.domain();
- if (newxdomain[0] !== oldxdomain[0] || newxdomain[1] !== oldxdomain[1]) {
- this.xelement.call(this.xaxis);
- }
- }
-
- let oldydomain = this.y.domain();
- if (ymin != null && ymax != null) {
- this.y.domain([ymin, ymax]).nice();
- let newydomain = this.y.domain();
- if (newydomain[0] !== oldydomain[0] || newydomain[1] !== oldydomain[1]) {
- this.yelement.call(this.yaxis);
- }
- }
- },
-
- /**
- * Add new values to the graph.
- */
- update: function (data) {
- delete data.graph;
-
- let time = data.time || Date.now();
- delete data.time;
-
- let curve = data.curve;
- delete data.curve;
-
- // Single curve value, e.g. { curve: 'memory', value: 42, time: 1234 }.
- if ("value" in data) {
- this.push(this.curves, curve, [{time: time, value: data.value}]);
- delete data.value;
- }
-
- // Several curve values, e.g. { curve: 'memory', values: [{value: 42, time: 1234}] }.
- if ("values" in data) {
- this.push(this.curves, curve, data.values);
- delete data.values;
- }
-
- // Punctual event, e.g. { event: 'gc', time: 1234 },
- // event with duration, e.g. { event: 'jank', duration: 425, time: 1234 }.
- if ("event" in data) {
- this.push(this.events, data.event, [{time: time, value: data.duration}]);
- delete data.event;
- delete data.duration;
- }
-
- // Remaining keys are curves, e.g. { time: 1234, memory: 42, battery: 13, temperature: 45 }.
- for (let key in data) {
- this.push(this.curves, key, [{time: time, value: data[key]}]);
- }
-
- // If no render is currently pending, request one.
- if (this.enabled && !this.request) {
- this.request = requestAnimationFrame(this.render);
- }
- },
-
- /**
- * Insert new data into the graph's data structures.
- */
- push: function (collection, id, values) {
-
- // Note: collection is either `this.curves` or `this.events`.
- let item = collection.get(id);
- if (!item) {
- item = { id: id, values: [], xmin: null, xmax: null, ymin: 0, ymax: null, average: 0 };
- collection.set(id, item);
- }
-
- for (let v of values) {
- let time = new Date(v.time), value = +v.value;
- // Update the curve/event's domain values.
- if (item.xmax == null || time > item.xmax) {
- item.xmax = time;
- }
- if (item.xmin == null || time < item.xmin) {
- item.xmin = time;
- }
- if (item.ymax == null || value > item.ymax) {
- item.ymax = value;
- }
- if (item.ymin == null || value < item.ymin) {
- item.ymin = value;
- }
- // Note: A curve's average is not computed here. Call `graph.averages()`.
- item.values.push({ time: time, value: value });
- }
- },
-
- /**
- * Render the SVG graph with curves, events, crosshair and legend.
- */
- render: function () {
- this.request = null;
- this.rescale();
-
-
- // DATA
-
- let self = this,
- getid = d => { return d.id; },
- gettime = d => { return d.time.getTime(); },
- getline = d => { return self.line(d.values); },
- getcolor = d => { return self.color(d.id); },
- getvalues = d => { return d.values; },
- ignored = d => { return self.ignored.has(d.id); };
-
- // Convert our maps to arrays for d3.
- let curvedata = [...this.curves.values()],
- eventdata = [...this.events.values()],
- data = curvedata.concat(eventdata);
-
-
- // CURVES
-
- // Map curve data to curve elements.
- let curves = this.svg.selectAll(".curve").data(curvedata, getid);
-
- // Create new curves (no element corresponding to the data).
- curves.enter().append("g").attr("class", "curve").append("path")
- .style("stroke", getcolor);
-
- // Delete old curves (elements corresponding to data not present anymore).
- curves.exit().remove();
-
- // Update all curves from data.
- this.svg.selectAll(".curve").select("path")
- .attr("d", d => { return ignored(d) ? "" : getline(d); });
-
- let height = parseFloat(getComputedStyle(this.element).height) - this.margin.top - this.margin.bottom;
-
-
- // EVENTS
-
- // Map event data to event elements.
- let events = this.svg.selectAll(".event-slot").data(eventdata, getid);
-
- // Create new events.
- events.enter().append("g").attr("class", "event-slot");
-
- // Remove old events.
- events.exit().remove();
-
- // Get all occurences of an event, and map its data to them.
- let lines = this.svg.selectAll(".event-slot")
- .style("stroke", d => { return ignored(d) ? "none" : getcolor(d); })
- .selectAll(".event")
- .data(getvalues, gettime);
-
- // Create new event occurrence.
- lines.enter().append("line").attr("class", "event").attr("y2", height);
-
- // Delete old event occurrence.
- lines.exit().remove();
-
- // Update all event occurrences from data.
- this.svg.selectAll(".event")
- .attr("transform", d => { return "translate(" + self.x(d.time) + ",0)"; });
-
-
- // CROSSHAIR
-
- // TODO select curves and events, intersect with curves and show values/hovers
- // e.g. look like http://code.shutterstock.com/rickshaw/examples/lines.html
-
- // Update crosshair labels on each axis.
- this.xruler.select("text").text(self.xformat(self.x.invert(self.mousex)));
- this.yruler.select("text").text(self.yformat(self.y.invert(self.mousey)));
-
-
- // LEGEND
-
- // Map data to legend elements.
- let legends = this.legend.selectAll("label").data(data, getid);
-
- // Update averages.
- legends.attr("title", c => { return "Average: " + self.yformat(c.average); });
-
- // Create new legends.
- let newlegend = legends.enter().append("label");
- newlegend.append("input").attr("type", "checkbox").attr("checked", "true").on("click", function (c) {
- if (ignored(c)) {
- this.parentElement.classList.remove("disabled");
- self.ignored.delete(c.id);
- } else {
- this.parentElement.classList.add("disabled");
- self.ignored.add(c.id);
- }
- self.update({}); // if no re-render is pending, request one.
- });
- newlegend.append("span").attr("class", "legend-color").style("background-color", getcolor);
- newlegend.append("span").attr("class", "legend-id").text(getid);
-
- // Delete old legends.
- legends.exit().remove();
- },
-
- /**
- * Returns a SI value formatter with a given precision.
- */
- formatter: function (decimals) {
- return value => {
- // Don't use sub-unit SI prefixes (milli, micro, etc.).
- if (Math.abs(value) < 1) return value.toFixed(decimals);
- // SI prefix, e.g. 1234567 will give '1.2M' at precision 1.
- let prefix = d3.formatPrefix(value);
- return prefix.scale(value).toFixed(decimals) + prefix.symbol;
- };
- },
-
- /**
- * Compute the average of each time series.
- */
- averages: function () {
- for (let c of this.curves.values()) {
- let length = c.values.length;
- if (length > 0) {
- let total = 0;
- c.values.forEach(v => total += v.value);
- c.average = (total / length);
- }
- }
- },
-
- /**
- * Bisect a time serie to find the data point immediately left of `time`.
- */
- bisectTime: d3.bisector(d => d.time).left,
-
- /**
- * Get all curve values at a given time.
- */
- valuesAt: function (time) {
- let values = { time: time };
-
- for (let id of this.curves.keys()) {
- let curve = this.curves.get(id);
-
- // Find the closest value just before `time`.
- let i = this.bisectTime(curve.values, time);
- if (i < 0) {
- // Curve starts after `time`, use first value.
- values[id] = curve.values[0].value;
- } else if (i > curve.values.length - 2) {
- // Curve ends before `time`, use last value.
- values[id] = curve.values[curve.values.length - 1].value;
- } else {
- // Curve has two values around `time`, interpolate.
- let v1 = curve.values[i],
- v2 = curve.values[i + 1],
- delta = (time - v1.time) / (v2.time - v1.time);
- values[id] = v1.value + (v2.value - v1.time) * delta;
- }
- }
- return values;
- }
-
-};
diff --git a/devtools/client/webide/content/monitor.xhtml b/devtools/client/webide/content/monitor.xhtml
deleted file mode 100644
index 552f3826c..000000000
--- a/devtools/client/webide/content/monitor.xhtml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/monitor.css" type="text/css"/>
- <script src="chrome://devtools/content/shared/vendor/d3.js"></script>
- <script type="application/javascript;version=1.8" src="monitor.js"></script>
- </head>
- <body>
-
- <div id="controls">
- <a href="https://developer.mozilla.org/docs/Tools/WebIDE/Monitor" target="_blank">&monitor_help;</a>
- <a id="close">&deck_close;</a>
- </div>
-
- <h1>&monitor_title;</h1>
-
- </body>
-</html>
diff --git a/devtools/client/webide/content/moz.build b/devtools/client/webide/content/moz.build
deleted file mode 100644
index aac3a838c..000000000
--- a/devtools/client/webide/content/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-JAR_MANIFESTS += ['jar.mn']
diff --git a/devtools/client/webide/content/newapp.js b/devtools/client/webide/content/newapp.js
deleted file mode 100644
index d47bfabec..000000000
--- a/devtools/client/webide/content/newapp.js
+++ /dev/null
@@ -1,175 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-var Cc = Components.classes;
-var Cu = Components.utils;
-var Ci = Components.interfaces;
-
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
-const Services = require("Services");
-const {FileUtils} = require("resource://gre/modules/FileUtils.jsm");
-const {AppProjects} = require("devtools/client/webide/modules/app-projects");
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {getJSON} = require("devtools/client/shared/getjson");
-
-XPCOMUtils.defineLazyModuleGetter(this, "ZipUtils", "resource://gre/modules/ZipUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Downloads", "resource://gre/modules/Downloads.jsm");
-
-const TEMPLATES_URL = "devtools.webide.templatesURL";
-
-var gTemplateList = null;
-
-// See bug 989619
-console.log = console.log.bind(console);
-console.warn = console.warn.bind(console);
-console.error = console.error.bind(console);
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- let projectNameNode = document.querySelector("#project-name");
- projectNameNode.addEventListener("input", canValidate, true);
- getTemplatesJSON();
-}, true);
-
-function getTemplatesJSON() {
- getJSON(TEMPLATES_URL).then(list => {
- if (!Array.isArray(list)) {
- throw new Error("JSON response not an array");
- }
- if (list.length == 0) {
- throw new Error("JSON response is an empty array");
- }
- gTemplateList = list;
- let templatelistNode = document.querySelector("#templatelist");
- templatelistNode.innerHTML = "";
- for (let template of list) {
- let richlistitemNode = document.createElement("richlistitem");
- let imageNode = document.createElement("image");
- imageNode.setAttribute("src", template.icon);
- let labelNode = document.createElement("label");
- labelNode.setAttribute("value", template.name);
- let descriptionNode = document.createElement("description");
- descriptionNode.textContent = template.description;
- let vboxNode = document.createElement("vbox");
- vboxNode.setAttribute("flex", "1");
- richlistitemNode.appendChild(imageNode);
- vboxNode.appendChild(labelNode);
- vboxNode.appendChild(descriptionNode);
- richlistitemNode.appendChild(vboxNode);
- templatelistNode.appendChild(richlistitemNode);
- }
- templatelistNode.selectedIndex = 0;
-
- /* Chrome mochitest support */
- let testOptions = window.arguments[0].testOptions;
- if (testOptions) {
- templatelistNode.selectedIndex = testOptions.index;
- document.querySelector("#project-name").value = testOptions.name;
- doOK();
- }
- }, (e) => {
- failAndBail("Can't download app templates: " + e);
- });
-}
-
-function failAndBail(msg) {
- let promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService);
- promptService.alert(window, "error", msg);
- window.close();
-}
-
-function canValidate() {
- let projectNameNode = document.querySelector("#project-name");
- let dialogNode = document.querySelector("dialog");
- if (projectNameNode.value.length > 0) {
- dialogNode.removeAttribute("buttondisabledaccept");
- } else {
- dialogNode.setAttribute("buttondisabledaccept", "true");
- }
-}
-
-function doOK() {
- let projectName = document.querySelector("#project-name").value;
-
- if (!projectName) {
- console.error("No project name");
- return false;
- }
-
- if (!gTemplateList) {
- console.error("No template index");
- return false;
- }
-
- let templatelistNode = document.querySelector("#templatelist");
- if (templatelistNode.selectedIndex < 0) {
- console.error("No template selected");
- return false;
- }
-
- let folder;
-
- /* Chrome mochitest support */
- let testOptions = window.arguments[0].testOptions;
- if (testOptions) {
- folder = testOptions.folder;
- } else {
- let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- fp.init(window, "Select directory where to create app directory", Ci.nsIFilePicker.modeGetFolder);
- let res = fp.show();
- if (res == Ci.nsIFilePicker.returnCancel) {
- console.error("No directory selected");
- return false;
- }
- folder = fp.file;
- }
-
- // Create subfolder with fs-friendly name of project
- let subfolder = projectName.replace(/[\\/:*?"<>|]/g, "").toLowerCase();
- let win = Services.wm.getMostRecentWindow("devtools:webide");
- folder.append(subfolder);
-
- try {
- folder.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
- } catch (e) {
- win.UI.reportError("error_folderCreationFailed");
- window.close();
- return false;
- }
-
- // Download boilerplate zip
- let template = gTemplateList[templatelistNode.selectedIndex];
- let source = template.file;
- let target = folder.clone();
- target.append(subfolder + ".zip");
-
- let bail = (e) => {
- console.error(e);
- window.close();
- };
-
- Downloads.fetch(source, target).then(() => {
- ZipUtils.extractFiles(target, folder);
- target.remove(false);
- AppProjects.addPackaged(folder).then((project) => {
- window.arguments[0].location = project.location;
- AppManager.validateAndUpdateProject(project).then(() => {
- if (project.manifest) {
- project.manifest.name = projectName;
- AppManager.writeManifest(project).then(() => {
- AppManager.validateAndUpdateProject(project).then(
- () => {window.close();}, bail);
- }, bail);
- } else {
- bail("Manifest not found");
- }
- }, bail);
- }, bail);
- }, bail);
-
- return false;
-}
diff --git a/devtools/client/webide/content/newapp.xul b/devtools/client/webide/content/newapp.xul
deleted file mode 100644
index 7ff083519..000000000
--- a/devtools/client/webide/content/newapp.xul
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE window [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<?xml-stylesheet href="chrome://global/skin/global.css"?>
-<?xml-stylesheet href="chrome://webide/skin/newapp.css"?>
-
-<dialog id="webide:newapp" title="&newAppWindowTitle;"
- width="600" height="400"
- buttons="accept,cancel"
- ondialogaccept="return doOK();"
- buttondisabledaccept="true"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- <script type="application/javascript" src="newapp.js"></script>
- <label class="header-name" value="&newAppHeader;"/>
-
- <richlistbox id="templatelist" flex="1">
- <description>&newAppLoadingTemplate;</description>
- </richlistbox>
- <vbox>
- <label class="header-name" control="project-name" value="&newAppProjectName;"/>
- <textbox id="project-name"/>
- </vbox>
-
-</dialog>
diff --git a/devtools/client/webide/content/permissionstable.js b/devtools/client/webide/content/permissionstable.js
deleted file mode 100644
index 22c74bd0d..000000000
--- a/devtools/client/webide/content/permissionstable.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const Services = require("Services");
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {Connection} = require("devtools/shared/client/connection-manager");
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- document.querySelector("#close").onclick = CloseUI;
- AppManager.on("app-manager-update", OnAppManagerUpdate);
- BuildUI();
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- AppManager.off("app-manager-update", OnAppManagerUpdate);
-});
-
-function CloseUI() {
- window.parent.UI.openProject();
-}
-
-function OnAppManagerUpdate(event, what) {
- if (what == "connection" || what == "runtime-global-actors") {
- BuildUI();
- }
-}
-
-function generateFields(json) {
- let table = document.querySelector("table");
- let permissionsTable = json.rawPermissionsTable;
- for (let name in permissionsTable) {
- let tr = document.createElement("tr");
- tr.className = "line";
- let td = document.createElement("td");
- td.textContent = name;
- tr.appendChild(td);
- for (let type of ["app", "privileged", "certified"]) {
- let td = document.createElement("td");
- if (permissionsTable[name][type] == json.ALLOW_ACTION) {
- td.textContent = "✓";
- td.className = "permallow";
- }
- if (permissionsTable[name][type] == json.PROMPT_ACTION) {
- td.textContent = "!";
- td.className = "permprompt";
- }
- if (permissionsTable[name][type] == json.DENY_ACTION) {
- td.textContent = "✕";
- td.className = "permdeny";
- }
- tr.appendChild(td);
- }
- table.appendChild(tr);
- }
-}
-
-var getRawPermissionsTablePromise; // Used by tests
-function BuildUI() {
- let table = document.querySelector("table");
- let lines = table.querySelectorAll(".line");
- for (let line of lines) {
- line.remove();
- }
-
- if (AppManager.connection &&
- AppManager.connection.status == Connection.Status.CONNECTED &&
- AppManager.deviceFront) {
- getRawPermissionsTablePromise = AppManager.deviceFront.getRawPermissionsTable()
- .then(json => generateFields(json));
- } else {
- CloseUI();
- }
-}
diff --git a/devtools/client/webide/content/permissionstable.xhtml b/devtools/client/webide/content/permissionstable.xhtml
deleted file mode 100644
index 361cfece8..000000000
--- a/devtools/client/webide/content/permissionstable.xhtml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/permissionstable.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/permissionstable.js"></script>
- </head>
- <body>
-
- <div id="controls">
- <a id="close">&deck_close;</a>
- </div>
-
- <h1>&permissionstable_title;</h1>
-
- <table class="permissionstable">
- <tr>
- <th>&permissionstable_name_header;</th>
- <th>type:web</th>
- <th>type:privileged</th>
- <th>type:certified</th>
- </tr>
- </table>
- </body>
-</html>
diff --git a/devtools/client/webide/content/prefs.js b/devtools/client/webide/content/prefs.js
deleted file mode 100644
index 75f6233ba..000000000
--- a/devtools/client/webide/content/prefs.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-const Cu = Components.utils;
-const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
-
- // Listen to preference changes
- let inputs = document.querySelectorAll("[data-pref]");
- for (let i of inputs) {
- let pref = i.dataset.pref;
- Services.prefs.addObserver(pref, FillForm, false);
- i.addEventListener("change", SaveForm, false);
- }
-
- // Buttons
- document.querySelector("#close").onclick = CloseUI;
- document.querySelector("#restore").onclick = RestoreDefaults;
- document.querySelector("#manageComponents").onclick = ShowAddons;
-
- // Initialize the controls
- FillForm();
-
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- let inputs = document.querySelectorAll("[data-pref]");
- for (let i of inputs) {
- let pref = i.dataset.pref;
- i.removeEventListener("change", SaveForm, false);
- Services.prefs.removeObserver(pref, FillForm, false);
- }
-}, true);
-
-function CloseUI() {
- window.parent.UI.openProject();
-}
-
-function ShowAddons() {
- window.parent.Cmds.showAddons();
-}
-
-function FillForm() {
- let inputs = document.querySelectorAll("[data-pref]");
- for (let i of inputs) {
- let pref = i.dataset.pref;
- let val = GetPref(pref);
- if (i.type == "checkbox") {
- i.checked = val;
- } else {
- i.value = val;
- }
- }
-}
-
-function SaveForm(e) {
- let inputs = document.querySelectorAll("[data-pref]");
- for (let i of inputs) {
- let pref = i.dataset.pref;
- if (i.type == "checkbox") {
- SetPref(pref, i.checked);
- } else {
- SetPref(pref, i.value);
- }
- }
-}
-
-function GetPref(name) {
- let type = Services.prefs.getPrefType(name);
- switch (type) {
- case Services.prefs.PREF_STRING:
- return Services.prefs.getCharPref(name);
- case Services.prefs.PREF_INT:
- return Services.prefs.getIntPref(name);
- case Services.prefs.PREF_BOOL:
- return Services.prefs.getBoolPref(name);
- default:
- throw new Error("Unknown type");
- }
-}
-
-function SetPref(name, value) {
- let type = Services.prefs.getPrefType(name);
- switch (type) {
- case Services.prefs.PREF_STRING:
- return Services.prefs.setCharPref(name, value);
- case Services.prefs.PREF_INT:
- return Services.prefs.setIntPref(name, value);
- case Services.prefs.PREF_BOOL:
- return Services.prefs.setBoolPref(name, value);
- default:
- throw new Error("Unknown type");
- }
-}
-
-function RestoreDefaults() {
- let inputs = document.querySelectorAll("[data-pref]");
- for (let i of inputs) {
- let pref = i.dataset.pref;
- Services.prefs.clearUserPref(pref);
- }
-}
diff --git a/devtools/client/webide/content/prefs.xhtml b/devtools/client/webide/content/prefs.xhtml
deleted file mode 100644
index 726ca772c..000000000
--- a/devtools/client/webide/content/prefs.xhtml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/prefs.js"></script>
- </head>
- <body>
-
- <div id="controls">
- <a id="restore">&prefs_restore;</a>
- <a id="manageComponents">&prefs_manage_components;</a>
- <a id="close">&deck_close;</a>
- </div>
-
- <h1>&prefs_title;</h1>
-
- <h2>&prefs_general_title;</h2>
-
- <ul>
- <li>
- <label title="&prefs_options_showeditor_tooltip;">
- <input type="checkbox" data-pref="devtools.webide.showProjectEditor"/>
- <span>&prefs_options_showeditor;</span>
- </label>
- </li>
- <li>
- <label title="&prefs_options_rememberlastproject_tooltip;">
- <input type="checkbox" data-pref="devtools.webide.restoreLastProject"/>
- <span>&prefs_options_rememberlastproject;</span>
- </label>
- </li>
- <li>
- <label title="&prefs_options_autoconnectruntime_tooltip;">
- <input type="checkbox" data-pref="devtools.webide.autoConnectRuntime"/>
- <span>&prefs_options_autoconnectruntime;</span>
- </label>
- </li>
- <li>
- <label class="text-input" title="&prefs_options_templatesurl_tooltip;">
- <span>&prefs_options_templatesurl;</span>
- <input data-pref="devtools.webide.templatesURL"/>
- </label>
- </li>
- </ul>
-
- <h2>&prefs_editor_title;</h2>
-
- <ul>
- <li>
- <label><span>&prefs_options_tabsize;</span>
- <select data-pref="devtools.editor.tabsize">
- <option value="2">2</option>
- <option value="4">4</option>
- <option value="8">8</option>
- </select>
- </label>
- </li>
- <li>
- <label title="&prefs_options_expandtab_tooltip;">
- <input type="checkbox" data-pref="devtools.editor.expandtab"/>
- <span>&prefs_options_expandtab;</span>
- </label>
- </li>
- <li>
- <label title="&prefs_options_detectindentation_tooltip;">
- <input type="checkbox" data-pref="devtools.editor.detectindentation"/>
- <span>&prefs_options_detectindentation;</span>
- </label>
- </li>
- <li>
- <label title="&prefs_options_autocomplete_tooltip;">
- <input type="checkbox" data-pref="devtools.editor.autocomplete"/>
- <span>&prefs_options_autocomplete;</span>
- </label>
- </li>
- <li>
- <label title="&prefs_options_autoclosebrackets_tooltip;">
- <input type="checkbox" data-pref="devtools.editor.autoclosebrackets"/>
- <span>&prefs_options_autoclosebrackets;</span>
- </label>
- </li>
- <li>
- <label title="&prefs_options_autosavefiles_tooltip;">
- <input type="checkbox" data-pref="devtools.webide.autosaveFiles"/>
- <span>&prefs_options_autosavefiles;</span>
- </label>
- </li>
- <li>
- <label><span>&prefs_options_keybindings;</span>
- <select data-pref="devtools.editor.keymap">
- <option value="default">&prefs_options_keybindings_default;</option>
- <option value="vim">Vim</option>
- <option value="emacs">Emacs</option>
- <option value="sublime">Sublime</option>
- </select>
- </label>
- </li>
- </ul>
-
- </body>
-</html>
diff --git a/devtools/client/webide/content/project-listing.js b/devtools/client/webide/content/project-listing.js
deleted file mode 100644
index 5641f6c0c..000000000
--- a/devtools/client/webide/content/project-listing.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* eslint-env browser */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const ProjectList = require("devtools/client/webide/modules/project-list");
-
-var projectList = new ProjectList(window, window.parent);
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad, true);
- document.getElementById("new-app").onclick = CreateNewApp;
- document.getElementById("hosted-app").onclick = ImportHostedApp;
- document.getElementById("packaged-app").onclick = ImportPackagedApp;
- document.getElementById("refresh-tabs").onclick = RefreshTabs;
- projectList.update();
- projectList.updateCommands();
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- projectList.destroy();
-});
-
-function RefreshTabs() {
- projectList.refreshTabs();
-}
-
-function CreateNewApp() {
- projectList.newApp();
-}
-
-function ImportHostedApp() {
- projectList.importHostedApp();
-}
-
-function ImportPackagedApp() {
- projectList.importPackagedApp();
-}
diff --git a/devtools/client/webide/content/project-listing.xhtml b/devtools/client/webide/content/project-listing.xhtml
deleted file mode 100644
index 337befe5d..000000000
--- a/devtools/client/webide/content/project-listing.xhtml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/panel-listing.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/project-listing.js"></script>
- </head>
- <body>
- <div id="project-panel">
- <div id="project-panel-box">
- <button class="panel-item project-panel-item-newapp" id="new-app">&projectMenu_newApp_label;</button>
- <button class="panel-item project-panel-item-openpackaged" id="packaged-app">&projectMenu_importPackagedApp_label;</button>
- <button class="panel-item project-panel-item-openhosted" id="hosted-app">&projectMenu_importHostedApp_label;</button>
- <label class="panel-header">&projectPanel_myProjects;</label>
- <div id="project-panel-projects"></div>
- <label class="panel-header" id="panel-header-runtimeapps" hidden="true">&projectPanel_runtimeApps;</label>
- <div id="project-panel-runtimeapps"/>
- <label class="panel-header" id="panel-header-tabs" hidden="true">&projectPanel_tabs;
- <button class="project-panel-item-refreshtabs refresh-icon" id="refresh-tabs" title="&projectMenu_refreshTabs_label;"></button>
- </label>
- <div id="project-panel-tabs"/>
- </div>
- </div>
- </body>
-</html>
diff --git a/devtools/client/webide/content/project-panel.js b/devtools/client/webide/content/project-panel.js
deleted file mode 100644
index 54eab8251..000000000
--- a/devtools/client/webide/content/project-panel.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var ProjectPanel = {
- // TODO: Expand function to save toggle state.
- toggleSidebar: function () {
- document.querySelector("#project-listing-panel").setAttribute("sidebar-displayed", true);
- document.querySelector("#project-listing-splitter").setAttribute("sidebar-displayed", true);
- }
-};
diff --git a/devtools/client/webide/content/runtime-listing.js b/devtools/client/webide/content/runtime-listing.js
deleted file mode 100644
index 0a1a40a2a..000000000
--- a/devtools/client/webide/content/runtime-listing.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const RuntimeList = require("devtools/client/webide/modules/runtime-list");
-
-var runtimeList = new RuntimeList(window, window.parent);
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad, true);
- document.getElementById("runtime-screenshot").onclick = TakeScreenshot;
- document.getElementById("runtime-permissions").onclick = ShowPermissionsTable;
- document.getElementById("runtime-details").onclick = ShowRuntimeDetails;
- document.getElementById("runtime-disconnect").onclick = DisconnectRuntime;
- document.getElementById("runtime-preferences").onclick = ShowDevicePreferences;
- document.getElementById("runtime-settings").onclick = ShowSettings;
- document.getElementById("runtime-panel-installsimulator").onclick = ShowAddons;
- document.getElementById("runtime-panel-noadbhelper").onclick = ShowAddons;
- document.getElementById("runtime-panel-nousbdevice").onclick = ShowTroubleShooting;
- document.getElementById("refresh-devices").onclick = RefreshScanners;
- runtimeList.update();
- runtimeList.updateCommands();
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- runtimeList.destroy();
-});
-
-function TakeScreenshot() {
- runtimeList.takeScreenshot();
-}
-
-function ShowRuntimeDetails() {
- runtimeList.showRuntimeDetails();
-}
-
-function ShowPermissionsTable() {
- runtimeList.showPermissionsTable();
-}
-
-function ShowDevicePreferences() {
- runtimeList.showDevicePreferences();
-}
-
-function ShowSettings() {
- runtimeList.showSettings();
-}
-
-function RefreshScanners() {
- runtimeList.refreshScanners();
-}
-
-function DisconnectRuntime() {
- window.parent.Cmds.disconnectRuntime();
-}
-
-function ShowAddons() {
- runtimeList.showAddons();
-}
-
-function ShowTroubleShooting() {
- runtimeList.showTroubleShooting();
-}
diff --git a/devtools/client/webide/content/runtime-listing.xhtml b/devtools/client/webide/content/runtime-listing.xhtml
deleted file mode 100644
index f648fac12..000000000
--- a/devtools/client/webide/content/runtime-listing.xhtml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/panel-listing.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/runtime-listing.js"></script>
- </head>
- <body>
- <div id="runtime-panel">
- <div id="runtime-panel-box">
- <label class="panel-header">&runtimePanel_usb;
- <button class="runtime-panel-item-refreshdevices refresh-icon" id="refresh-devices" title="&runtimePanel_refreshDevices_label;"></button>
- </label>
- <button class="panel-item" id="runtime-panel-nousbdevice">&runtimePanel_nousbdevice;</button>
- <button class="panel-item" id="runtime-panel-noadbhelper">&runtimePanel_noadbhelper;</button>
- <div id="runtime-panel-usb"></div>
- <label class="panel-header" id="runtime-header-wifi">&runtimePanel_wifi;</label>
- <div id="runtime-panel-wifi"></div>
- <label class="panel-header">&runtimePanel_simulator;</label>
- <div id="runtime-panel-simulator"></div>
- <button class="panel-item" id="runtime-panel-installsimulator">&runtimePanel_installsimulator;</button>
- <label class="panel-header">&runtimePanel_other;</label>
- <div id="runtime-panel-other"></div>
- <div id="runtime-actions">
- <button class="panel-item" id="runtime-details">&runtimeMenu_showDetails_label;</button>
- <button class="panel-item" id="runtime-permissions">&runtimeMenu_showPermissionTable_label;</button>
- <button class="panel-item" id="runtime-preferences">&runtimeMenu_showDevicePrefs_label;</button>
- <button class="panel-item" id="runtime-settings">&runtimeMenu_showSettings_label;</button>
- <button class="panel-item" id="runtime-screenshot">&runtimeMenu_takeScreenshot_label;</button>
- <button class="panel-item" id="runtime-disconnect">&runtimeMenu_disconnect_label;</button>
- </div>
- </div>
- </div>
- </body>
-</html>
diff --git a/devtools/client/webide/content/runtime-panel.js b/devtools/client/webide/content/runtime-panel.js
deleted file mode 100644
index 3646fa15c..000000000
--- a/devtools/client/webide/content/runtime-panel.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var RuntimePanel = {
- // TODO: Expand function to save toggle state.
- toggleSidebar: function () {
- document.querySelector("#runtime-listing-panel").setAttribute("sidebar-displayed", true);
- document.querySelector("#runtime-listing-splitter").setAttribute("sidebar-displayed", true);
- }
-};
diff --git a/devtools/client/webide/content/runtimedetails.js b/devtools/client/webide/content/runtimedetails.js
deleted file mode 100644
index dea423e81..000000000
--- a/devtools/client/webide/content/runtimedetails.js
+++ /dev/null
@@ -1,153 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const Services = require("Services");
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {Connection} = require("devtools/shared/client/connection-manager");
-const {RuntimeTypes} = require("devtools/client/webide/modules/runtimes");
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-const UNRESTRICTED_HELP_URL = "https://developer.mozilla.org/docs/Tools/WebIDE/Running_and_debugging_apps#Unrestricted_app_debugging_%28including_certified_apps_main_process_etc.%29";
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- document.querySelector("#close").onclick = CloseUI;
- document.querySelector("#devtools-check button").onclick = EnableCertApps;
- document.querySelector("#adb-check button").onclick = RootADB;
- document.querySelector("#unrestricted-privileges").onclick = function () {
- window.parent.UI.openInBrowser(UNRESTRICTED_HELP_URL);
- };
- AppManager.on("app-manager-update", OnAppManagerUpdate);
- BuildUI();
- CheckLockState();
-}, true);
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- AppManager.off("app-manager-update", OnAppManagerUpdate);
-});
-
-function CloseUI() {
- window.parent.UI.openProject();
-}
-
-function OnAppManagerUpdate(event, what) {
- if (what == "connection" || what == "runtime-global-actors") {
- BuildUI();
- CheckLockState();
- }
-}
-
-function generateFields(json) {
- let table = document.querySelector("table");
- for (let name in json) {
- let tr = document.createElement("tr");
- let td = document.createElement("td");
- td.textContent = name;
- tr.appendChild(td);
- td = document.createElement("td");
- td.textContent = json[name];
- tr.appendChild(td);
- table.appendChild(tr);
- }
-}
-
-var getDescriptionPromise; // Used by tests
-function BuildUI() {
- let table = document.querySelector("table");
- table.innerHTML = "";
- if (AppManager.connection &&
- AppManager.connection.status == Connection.Status.CONNECTED &&
- AppManager.deviceFront) {
- getDescriptionPromise = AppManager.deviceFront.getDescription()
- .then(json => generateFields(json));
- } else {
- CloseUI();
- }
-}
-
-function CheckLockState() {
- let adbCheckResult = document.querySelector("#adb-check > .yesno");
- let devtoolsCheckResult = document.querySelector("#devtools-check > .yesno");
- let flipCertPerfButton = document.querySelector("#devtools-check button");
- let adbRootButton = document.querySelector("#adb-check button");
- let flipCertPerfAction = document.querySelector("#devtools-check > .action");
- let adbRootAction = document.querySelector("#adb-check > .action");
-
- let sYes = Strings.GetStringFromName("runtimedetails_checkyes");
- let sNo = Strings.GetStringFromName("runtimedetails_checkno");
- let sUnknown = Strings.GetStringFromName("runtimedetails_checkunknown");
- let sNotUSB = Strings.GetStringFromName("runtimedetails_notUSBDevice");
-
- flipCertPerfButton.setAttribute("disabled", "true");
- flipCertPerfAction.setAttribute("hidden", "true");
- adbRootAction.setAttribute("hidden", "true");
-
- adbCheckResult.textContent = sUnknown;
- devtoolsCheckResult.textContent = sUnknown;
-
- if (AppManager.connection &&
- AppManager.connection.status == Connection.Status.CONNECTED) {
-
- // ADB check
- if (AppManager.selectedRuntime.type === RuntimeTypes.USB) {
- let device = AppManager.selectedRuntime.device;
- if (device && device.summonRoot) {
- device.isRoot().then(isRoot => {
- if (isRoot) {
- adbCheckResult.textContent = sYes;
- flipCertPerfButton.removeAttribute("disabled");
- } else {
- adbCheckResult.textContent = sNo;
- adbRootAction.removeAttribute("hidden");
- }
- }, e => console.error(e));
- } else {
- adbCheckResult.textContent = sUnknown;
- }
- } else {
- adbCheckResult.textContent = sNotUSB;
- }
-
- // forbid-certified-apps check
- try {
- let prefFront = AppManager.preferenceFront;
- prefFront.getBoolPref("devtools.debugger.forbid-certified-apps").then(isForbidden => {
- if (isForbidden) {
- devtoolsCheckResult.textContent = sNo;
- flipCertPerfAction.removeAttribute("hidden");
- } else {
- devtoolsCheckResult.textContent = sYes;
- }
- }, e => console.error(e));
- } catch (e) {
- // Exception. pref actor is only accessible if forbird-certified-apps is false
- devtoolsCheckResult.textContent = sNo;
- flipCertPerfAction.removeAttribute("hidden");
- }
-
- }
-
-}
-
-function EnableCertApps() {
- let device = AppManager.selectedRuntime.device;
- // TODO: Remove `network.disable.ipc.security` once bug 1125916 is fixed.
- device.shell(
- "stop b2g && " +
- "cd /data/b2g/mozilla/*.default/ && " +
- "echo 'user_pref(\"devtools.debugger.forbid-certified-apps\", false);' >> prefs.js && " +
- "echo 'user_pref(\"dom.apps.developer_mode\", true);' >> prefs.js && " +
- "echo 'user_pref(\"network.disable.ipc.security\", true);' >> prefs.js && " +
- "echo 'user_pref(\"dom.webcomponents.enabled\", true);' >> prefs.js && " +
- "start b2g"
- );
-}
-
-function RootADB() {
- let device = AppManager.selectedRuntime.device;
- device.summonRoot().then(CheckLockState, (e) => console.error(e));
-}
diff --git a/devtools/client/webide/content/runtimedetails.xhtml b/devtools/client/webide/content/runtimedetails.xhtml
deleted file mode 100644
index b2f74728a..000000000
--- a/devtools/client/webide/content/runtimedetails.xhtml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/runtimedetails.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/runtimedetails.js"></script>
- </head>
- <body>
-
- <div id="controls">
- <a id="close">&deck_close;</a>
- </div>
-
- <h1>&runtimedetails_title;</h1>
-
- <div id="devicePrivileges">
- <p id="adb-check">
- &runtimedetails_adbIsRoot;<span class="yesno"></span>
- <div class="action">
- <button>&runtimedetails_summonADBRoot;</button>
- <em>&runtimedetails_ADBRootWarning;</em>
- </div>
- </p>
- <p id="devtools-check">
- <a id="unrestricted-privileges">&runtimedetails_unrestrictedPrivileges;</a><span class="yesno"></span>
- <div class="action">
- <button>&runtimedetails_requestPrivileges;</button>
- <em>&runtimedetails_privilegesWarning;</em>
- </div>
- </p>
- </div>
-
- <table></table>
- </body>
-</html>
diff --git a/devtools/client/webide/content/simulator.js b/devtools/client/webide/content/simulator.js
deleted file mode 100644
index ddc1cbed1..000000000
--- a/devtools/client/webide/content/simulator.js
+++ /dev/null
@@ -1,352 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cu = Components.utils;
-var Ci = Components.interfaces;
-
-const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const { getDevices, getDeviceString } = require("devtools/client/shared/devices");
-const { Simulators, Simulator } = require("devtools/client/webide/modules/simulators");
-const Services = require("Services");
-const EventEmitter = require("devtools/shared/event-emitter");
-const promise = require("promise");
-const utils = require("devtools/client/webide/modules/utils");
-
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-var SimulatorEditor = {
-
- // Available Firefox OS Simulator addons (key: `addon.id`).
- _addons: {},
-
- // Available device simulation profiles (key: `device.name`).
- _devices: {},
-
- // The names of supported simulation options.
- _deviceOptions: [],
-
- // The <form> element used to edit Simulator options.
- _form: null,
-
- // The Simulator object being edited.
- _simulator: null,
-
- // Generate the dynamic form elements.
- init() {
- let promises = [];
-
- // Grab the <form> element.
- let form = this._form;
- if (!form) {
- // This is the first time we run `init()`, bootstrap some things.
- form = this._form = document.querySelector("#simulator-editor");
- form.addEventListener("change", this.update.bind(this));
- Simulators.on("configure", (e, simulator) => { this.edit(simulator); });
- // Extract the list of device simulation options we'll support.
- let deviceFields = form.querySelectorAll("*[data-device]");
- this._deviceOptions = Array.map(deviceFields, field => field.name);
- }
-
- // Append a new <option> to a <select> (or <optgroup>) element.
- function opt(select, value, text) {
- let option = document.createElement("option");
- option.value = value;
- option.textContent = text;
- select.appendChild(option);
- }
-
- // Generate B2G version selector.
- promises.push(Simulators.findSimulatorAddons().then(addons => {
- this._addons = {};
- form.version.innerHTML = "";
- form.version.classList.remove("custom");
- addons.forEach(addon => {
- this._addons[addon.id] = addon;
- opt(form.version, addon.id, addon.name);
- });
- opt(form.version, "custom", "");
- opt(form.version, "pick", Strings.GetStringFromName("simulator_custom_binary"));
- }));
-
- // Generate profile selector.
- form.profile.innerHTML = "";
- form.profile.classList.remove("custom");
- opt(form.profile, "default", Strings.GetStringFromName("simulator_default_profile"));
- opt(form.profile, "custom", "");
- opt(form.profile, "pick", Strings.GetStringFromName("simulator_custom_profile"));
-
- // Generate example devices list.
- form.device.innerHTML = "";
- form.device.classList.remove("custom");
- opt(form.device, "custom", Strings.GetStringFromName("simulator_custom_device"));
- promises.push(getDevices().then(devices => {
- devices.TYPES.forEach(type => {
- let b2gDevices = devices[type].filter(d => d.firefoxOS);
- if (b2gDevices.length < 1) {
- return;
- }
- let optgroup = document.createElement("optgroup");
- optgroup.label = getDeviceString(type);
- b2gDevices.forEach(device => {
- this._devices[device.name] = device;
- opt(optgroup, device.name, device.name);
- });
- form.device.appendChild(optgroup);
- });
- }));
-
- return promise.all(promises);
- },
-
- // Edit the configuration of an existing Simulator, or create a new one.
- edit(simulator) {
- // If no Simulator was given to edit, we're creating a new one.
- if (!simulator) {
- simulator = new Simulator(); // Default options.
- Simulators.add(simulator);
- }
-
- this._simulator = null;
-
- return this.init().then(() => {
- this._simulator = simulator;
-
- // Update the form fields.
- this._form.name.value = simulator.name;
-
- this.updateVersionSelector();
- this.updateProfileSelector();
- this.updateDeviceSelector();
- this.updateDeviceFields();
-
- // Change visibility of 'TV Simulator Menu'.
- let tvSimMenu = document.querySelector("#tv_simulator_menu");
- tvSimMenu.style.visibility = (this._simulator.type === "television") ?
- "visible" : "hidden";
-
- // Trigger any listener waiting for this update
- let change = document.createEvent("HTMLEvents");
- change.initEvent("change", true, true);
- this._form.dispatchEvent(change);
- });
- },
-
- // Open the directory of TV Simulator config.
- showTVConfigDirectory() {
- let profD = Services.dirsvc.get("ProfD", Ci.nsIFile);
- profD.append("extensions");
- profD.append(this._simulator.addon.id);
- profD.append("profile");
- profD.append("dummy");
- let profileDir = profD.path;
-
- // Show the profile directory.
- let nsLocalFile = Components.Constructor("@mozilla.org/file/local;1",
- "nsILocalFile", "initWithPath");
- new nsLocalFile(profileDir).reveal();
- },
-
- // Close the configuration panel.
- close() {
- this._simulator = null;
- window.parent.UI.openProject();
- },
-
- // Restore the simulator to its default configuration.
- restoreDefaults() {
- let simulator = this._simulator;
- this.version = simulator.addon.id;
- this.profile = "default";
- simulator.restoreDefaults();
- Simulators.emitUpdated();
- return this.edit(simulator);
- },
-
- // Delete this simulator.
- deleteSimulator() {
- Simulators.remove(this._simulator);
- this.close();
- },
-
- // Select an available option, or set the "custom" option.
- updateSelector(selector, value) {
- selector.value = value;
- if (selector.selectedIndex == -1) {
- selector.value = "custom";
- selector.classList.add("custom");
- selector[selector.selectedIndex].textContent = value;
- }
- },
-
- // VERSION: Can be an installed `addon.id` or a custom binary path.
-
- get version() {
- return this._simulator.options.b2gBinary || this._simulator.addon.id;
- },
-
- set version(value) {
- let form = this._form;
- let simulator = this._simulator;
- let oldVer = simulator.version;
- if (this._addons[value]) {
- // `value` is a simulator addon ID.
- simulator.addon = this._addons[value];
- simulator.options.b2gBinary = null;
- } else {
- // `value` is a custom binary path.
- simulator.options.b2gBinary = value;
- // TODO (Bug 1146531) Indicate that a custom profile is now required.
- }
- // If `form.name` contains the old version, update its last occurrence.
- if (form.name.value.includes(oldVer) && simulator.version !== oldVer) {
- let regex = new RegExp("(.*)" + oldVer);
- let name = form.name.value.replace(regex, "$1" + simulator.version);
- simulator.options.name = form.name.value = Simulators.uniqueName(name);
- }
- },
-
- updateVersionSelector() {
- this.updateSelector(this._form.version, this.version);
- },
-
- // PROFILE. Can be "default" or a custom profile directory path.
-
- get profile() {
- return this._simulator.options.gaiaProfile || "default";
- },
-
- set profile(value) {
- this._simulator.options.gaiaProfile = (value == "default" ? null : value);
- },
-
- updateProfileSelector() {
- this.updateSelector(this._form.profile, this.profile);
- },
-
- // DEVICE. Can be an existing `device.name` or "custom".
-
- get device() {
- let devices = this._devices;
- let simulator = this._simulator;
-
- // Search for the name of a device matching current simulator options.
- for (let name in devices) {
- let match = true;
- for (let option of this._deviceOptions) {
- if (simulator.options[option] === devices[name][option]) {
- continue;
- }
- match = false;
- break;
- }
- if (match) {
- return name;
- }
- }
- return "custom";
- },
-
- set device(name) {
- let device = this._devices[name];
- if (!device) {
- return;
- }
- let form = this._form;
- let simulator = this._simulator;
- this._deviceOptions.forEach(option => {
- simulator.options[option] = form[option].value = device[option] || null;
- });
- // TODO (Bug 1146531) Indicate when a custom profile is required (e.g. for
- // tablet, TV…).
- },
-
- updateDeviceSelector() {
- this.updateSelector(this._form.device, this.device);
- },
-
- // Erase any current values, trust only the `simulator.options`.
- updateDeviceFields() {
- let form = this._form;
- let simulator = this._simulator;
- this._deviceOptions.forEach(option => {
- form[option].value = simulator.options[option];
- });
- },
-
- // Handle a change in our form's fields.
- update(event) {
- let simulator = this._simulator;
- if (!simulator) {
- return;
- }
- let form = this._form;
- let input = event.target;
- switch (input.name) {
- case "name":
- simulator.options.name = input.value;
- break;
- case "version":
- switch (input.value) {
- case "pick":
- let file = utils.getCustomBinary(window);
- if (file) {
- this.version = file.path;
- }
- // Whatever happens, don't stay on the "pick" option.
- this.updateVersionSelector();
- break;
- case "custom":
- this.version = input[input.selectedIndex].textContent;
- break;
- default:
- this.version = input.value;
- }
- break;
- case "profile":
- switch (input.value) {
- case "pick":
- let directory = utils.getCustomProfile(window);
- if (directory) {
- this.profile = directory.path;
- }
- // Whatever happens, don't stay on the "pick" option.
- this.updateProfileSelector();
- break;
- case "custom":
- this.profile = input[input.selectedIndex].textContent;
- break;
- default:
- this.profile = input.value;
- }
- break;
- case "device":
- this.device = input.value;
- break;
- default:
- simulator.options[input.name] = input.value || null;
- this.updateDeviceSelector();
- }
- Simulators.emitUpdated();
- },
-};
-
-window.addEventListener("load", function onLoad() {
- document.querySelector("#close").onclick = e => {
- SimulatorEditor.close();
- };
- document.querySelector("#reset").onclick = e => {
- SimulatorEditor.restoreDefaults();
- };
- document.querySelector("#remove").onclick = e => {
- SimulatorEditor.deleteSimulator();
- };
-
- // We just loaded, so we probably missed the first configure request.
- SimulatorEditor.edit(Simulators._lastConfiguredSimulator);
-
- document.querySelector("#open-tv-dummy-directory").onclick = e => {
- SimulatorEditor.showTVConfigDirectory();
- e.preventDefault();
- };
-});
diff --git a/devtools/client/webide/content/simulator.xhtml b/devtools/client/webide/content/simulator.xhtml
deleted file mode 100644
index 3ab916248..000000000
--- a/devtools/client/webide/content/simulator.xhtml
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/simulator.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/simulator.js"></script>
- </head>
- <body>
-
- <div id="controls">
- <a id="remove" class="hidden">&simulator_remove;</a>
- <a id="reset">&simulator_reset;</a>
- <a id="close">&deck_close;</a>
- </div>
-
- <form id="simulator-editor">
-
- <h1>&simulator_title;</h1>
-
- <h2>&simulator_software;</h2>
-
- <ul>
- <li>
- <label>
- <span class="label">&simulator_name;</span>
- <input type="text" name="name"/>
- </label>
- </li>
- <li>
- <label>
- <span class="label">&simulator_version;</span>
- <select name="version"/>
- </label>
- </li>
- <li>
- <label>
- <span class="label">&simulator_profile;</span>
- <select name="profile"/>
- </label>
- </li>
- </ul>
-
- <h2>&simulator_hardware;</h2>
-
- <ul>
- <li>
- <label>
- <span class="label">&simulator_device;</span>
- <select name="device"/>
- </label>
- </li>
- <li>
- <label>
- <span class="label">&simulator_screenSize;</span>
- <input name="width" data-device="" type="number"/>
- <span>×</span>
- <input name="height" data-device="" type="number"/>
- </label>
- </li>
- <li class="hidden">
- <label>
- <span class="label">&simulator_pixelRatio;</span>
- <input name="pixelRatio" data-device="" type="number" step="0.05"/>
- </label>
- </li>
- </ul>
-
- <!-- This menu is shown when simulator type is television-->
- <p id="tv_simulator_menu" style="visibility:hidden;">
- <h2>&simulator_tv_data;</h2>
-
- <ul>
- <li>
- <label>
- <span class="label">&simulator_tv_data_open;</span>
- <button id="open-tv-dummy-directory">
- &simulator_tv_data_open_button;
- </button>
- </label>
- </li>
- </ul>
-
- </p>
-
- </form>
-
- </body>
-</html>
diff --git a/devtools/client/webide/content/webide.js b/devtools/client/webide/content/webide.js
deleted file mode 100644
index c222332e3..000000000
--- a/devtools/client/webide/content/webide.js
+++ /dev/null
@@ -1,1157 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-var Cc = Components.classes;
-var Cu = Components.utils;
-var Ci = Components.interfaces;
-
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const {gDevTools} = require("devtools/client/framework/devtools");
-const {gDevToolsBrowser} = require("devtools/client/framework/devtools-browser");
-const {Toolbox} = require("devtools/client/framework/toolbox");
-const Services = require("Services");
-const {AppProjects} = require("devtools/client/webide/modules/app-projects");
-const {Connection} = require("devtools/shared/client/connection-manager");
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const EventEmitter = require("devtools/shared/event-emitter");
-const promise = require("promise");
-const ProjectEditor = require("devtools/client/projecteditor/lib/projecteditor");
-const {GetAvailableAddons} = require("devtools/client/webide/modules/addons");
-const {getJSON} = require("devtools/client/shared/getjson");
-const utils = require("devtools/client/webide/modules/utils");
-const Telemetry = require("devtools/client/shared/telemetry");
-const {RuntimeScanners} = require("devtools/client/webide/modules/runtimes");
-const {showDoorhanger} = require("devtools/client/shared/doorhanger");
-const {Simulators} = require("devtools/client/webide/modules/simulators");
-const {Task} = require("devtools/shared/task");
-
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-const HTML = "http://www.w3.org/1999/xhtml";
-const HELP_URL = "https://developer.mozilla.org/docs/Tools/WebIDE/Troubleshooting";
-
-const MAX_ZOOM = 1.4;
-const MIN_ZOOM = 0.6;
-
-const MS_PER_DAY = 86400000;
-
-[["AppManager", AppManager],
- ["AppProjects", AppProjects],
- ["Connection", Connection]].forEach(([key, value]) => {
- Object.defineProperty(this, key, {
- value: value,
- enumerable: true,
- writable: false
- });
- });
-
-// Download remote resources early
-getJSON("devtools.webide.addonsURL");
-getJSON("devtools.webide.templatesURL");
-getJSON("devtools.devices.url");
-
-// See bug 989619
-console.log = console.log.bind(console);
-console.warn = console.warn.bind(console);
-console.error = console.error.bind(console);
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- UI.init();
-});
-
-window.addEventListener("unload", function onUnload() {
- window.removeEventListener("unload", onUnload);
- UI.destroy();
-});
-
-var UI = {
- init: function () {
- this._telemetry = new Telemetry();
- this._telemetry.toolOpened("webide");
-
- AppManager.init();
-
- this.appManagerUpdate = this.appManagerUpdate.bind(this);
- AppManager.on("app-manager-update", this.appManagerUpdate);
-
- Cmds.showProjectPanel();
- Cmds.showRuntimePanel();
-
- this.updateCommands();
-
- this.onfocus = this.onfocus.bind(this);
- window.addEventListener("focus", this.onfocus, true);
-
- AppProjects.load().then(() => {
- this.autoSelectProject();
- }, e => {
- console.error(e);
- this.reportError("error_appProjectsLoadFailed");
- });
-
- // Auto install the ADB Addon Helper and Tools Adapters. Only once.
- // If the user decides to uninstall any of this addon, we won't install it again.
- let autoinstallADBHelper = Services.prefs.getBoolPref("devtools.webide.autoinstallADBHelper");
- let autoinstallFxdtAdapters = Services.prefs.getBoolPref("devtools.webide.autoinstallFxdtAdapters");
- if (autoinstallADBHelper) {
- GetAvailableAddons().then(addons => {
- addons.adb.install();
- }, console.error);
- }
- if (autoinstallFxdtAdapters) {
- GetAvailableAddons().then(addons => {
- addons.adapters.install();
- }, console.error);
- }
- Services.prefs.setBoolPref("devtools.webide.autoinstallADBHelper", false);
- Services.prefs.setBoolPref("devtools.webide.autoinstallFxdtAdapters", false);
-
- if (Services.prefs.getBoolPref("devtools.webide.widget.autoinstall") &&
- !Services.prefs.getBoolPref("devtools.webide.widget.enabled")) {
- Services.prefs.setBoolPref("devtools.webide.widget.enabled", true);
- gDevToolsBrowser.moveWebIDEWidgetInNavbar();
- }
-
- this.setupDeck();
-
- this.contentViewer = window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIWebNavigation)
- .QueryInterface(Ci.nsIDocShell)
- .contentViewer;
- this.contentViewer.fullZoom = Services.prefs.getCharPref("devtools.webide.zoom");
-
- gDevToolsBrowser.isWebIDEInitialized.resolve();
-
- this.configureSimulator = this.configureSimulator.bind(this);
- Simulators.on("configure", this.configureSimulator);
- },
-
- destroy: function () {
- window.removeEventListener("focus", this.onfocus, true);
- AppManager.off("app-manager-update", this.appManagerUpdate);
- AppManager.destroy();
- Simulators.off("configure", this.configureSimulator);
- this.updateConnectionTelemetry();
- this._telemetry.toolClosed("webide");
- this._telemetry.toolClosed("webideProjectEditor");
- this._telemetry.destroy();
- },
-
- canCloseProject: function () {
- if (this.projecteditor) {
- return this.projecteditor.confirmUnsaved();
- }
- return true;
- },
-
- onfocus: function () {
- // Because we can't track the activity in the folder project,
- // we need to validate the project regularly. Let's assume that
- // if a modification happened, it happened when the window was
- // not focused.
- if (AppManager.selectedProject &&
- AppManager.selectedProject.type != "mainProcess" &&
- AppManager.selectedProject.type != "runtimeApp" &&
- AppManager.selectedProject.type != "tab") {
- AppManager.validateAndUpdateProject(AppManager.selectedProject);
- }
-
- // Hook to display promotional Developer Edition doorhanger. Only displayed once.
- // Hooked into the `onfocus` event because sometimes does not work
- // when run at the end of `init`. ¯\(°_o)/¯
- showDoorhanger({ window, type: "deveditionpromo", anchor: document.querySelector("#deck") });
- },
-
- appManagerUpdate: function (event, what, details) {
- // Got a message from app-manager.js
- // See AppManager.update() for descriptions of what these events mean.
- switch (what) {
- case "runtime-list":
- this.autoConnectRuntime();
- break;
- case "connection":
- this.updateRuntimeButton();
- this.updateCommands();
- this.updateConnectionTelemetry();
- break;
- case "before-project":
- if (!this.canCloseProject()) {
- details.cancel();
- }
- break;
- case "project":
- this._updatePromise = Task.spawn(function* () {
- UI.updateTitle();
- yield UI.destroyToolbox();
- UI.updateCommands();
- UI.openProject();
- yield UI.autoStartProject();
- UI.autoOpenToolbox();
- UI.saveLastSelectedProject();
- UI.updateRemoveProjectButton();
- });
- return;
- case "project-started":
- this.updateCommands();
- UI.autoOpenToolbox();
- break;
- case "project-stopped":
- UI.destroyToolbox();
- this.updateCommands();
- break;
- case "runtime-global-actors":
- // Check runtime version only on runtime-global-actors,
- // as we expect to use device actor
- this.checkRuntimeVersion();
- this.updateCommands();
- break;
- case "runtime-details":
- this.updateRuntimeButton();
- break;
- case "runtime":
- this.updateRuntimeButton();
- this.saveLastConnectedRuntime();
- break;
- case "project-validated":
- this.updateTitle();
- this.updateCommands();
- this.updateProjectEditorHeader();
- break;
- case "install-progress":
- this.updateProgress(Math.round(100 * details.bytesSent / details.totalBytes));
- break;
- case "runtime-targets":
- this.autoSelectProject();
- break;
- case "pre-package":
- this.prePackageLog(details);
- break;
- }
- this._updatePromise = promise.resolve();
- },
-
- configureSimulator: function (event, simulator) {
- UI.selectDeckPanel("simulator");
- },
-
- openInBrowser: function (url) {
- // Open a URL in a Firefox window
- let mainWindow = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
- if (mainWindow) {
- mainWindow.openUILinkIn(url, "tab");
- mainWindow.focus()
- } else {
- window.open(url);
- }
- },
-
- updateTitle: function () {
- let project = AppManager.selectedProject;
- if (project) {
- window.document.title = Strings.formatStringFromName("title_app", [project.name], 1);
- } else {
- window.document.title = Strings.GetStringFromName("title_noApp");
- }
- },
-
- /** ******** BUSY UI **********/
-
- _busyTimeout: null,
- _busyOperationDescription: null,
- _busyPromise: null,
-
- updateProgress: function (percent) {
- let progress = document.querySelector("#action-busy-determined");
- progress.mode = "determined";
- progress.value = percent;
- this.setupBusyTimeout();
- },
-
- busy: function () {
- let win = document.querySelector("window");
- win.classList.add("busy");
- win.classList.add("busy-undetermined");
- this.updateCommands();
- this.update("busy");
- },
-
- unbusy: function () {
- let win = document.querySelector("window");
- win.classList.remove("busy");
- win.classList.remove("busy-determined");
- win.classList.remove("busy-undetermined");
- this.updateCommands();
- this.update("unbusy");
- this._busyPromise = null;
- },
-
- setupBusyTimeout: function () {
- this.cancelBusyTimeout();
- this._busyTimeout = setTimeout(() => {
- this.unbusy();
- UI.reportError("error_operationTimeout", this._busyOperationDescription);
- }, Services.prefs.getIntPref("devtools.webide.busyTimeout"));
- },
-
- cancelBusyTimeout: function () {
- clearTimeout(this._busyTimeout);
- },
-
- busyWithProgressUntil: function (promise, operationDescription) {
- let busy = this.busyUntil(promise, operationDescription);
- let win = document.querySelector("window");
- let progress = document.querySelector("#action-busy-determined");
- progress.mode = "undetermined";
- win.classList.add("busy-determined");
- win.classList.remove("busy-undetermined");
- return busy;
- },
-
- busyUntil: function (promise, operationDescription) {
- // Freeze the UI until the promise is resolved. A timeout will unfreeze the
- // UI, just in case the promise never gets resolved.
- this._busyPromise = promise;
- this._busyOperationDescription = operationDescription;
- this.setupBusyTimeout();
- this.busy();
- promise.then(() => {
- this.cancelBusyTimeout();
- this.unbusy();
- }, (e) => {
- let message;
- if (e && e.error && e.message) {
- // Some errors come from fronts that are not based on protocol.js.
- // Errors are not translated to strings.
- message = operationDescription + " (" + e.error + "): " + e.message;
- } else {
- message = operationDescription + (e ? (": " + e) : "");
- }
- this.cancelBusyTimeout();
- let operationCanceled = e && e.canceled;
- if (!operationCanceled) {
- UI.reportError("error_operationFail", message);
- if (e) {
- console.error(e);
- }
- }
- this.unbusy();
- });
- return promise;
- },
-
- reportError: function (l10nProperty, ...l10nArgs) {
- let text;
-
- if (l10nArgs.length > 0) {
- text = Strings.formatStringFromName(l10nProperty, l10nArgs, l10nArgs.length);
- } else {
- text = Strings.GetStringFromName(l10nProperty);
- }
-
- console.error(text);
-
- let buttons = [{
- label: Strings.GetStringFromName("notification_showTroubleShooting_label"),
- accessKey: Strings.GetStringFromName("notification_showTroubleShooting_accesskey"),
- callback: function () {
- Cmds.showTroubleShooting();
- }
- }];
-
- let nbox = document.querySelector("#notificationbox");
- nbox.removeAllNotifications(true);
- nbox.appendNotification(text, "webide:errornotification", null,
- nbox.PRIORITY_WARNING_LOW, buttons);
- },
-
- dismissErrorNotification: function () {
- let nbox = document.querySelector("#notificationbox");
- nbox.removeAllNotifications(true);
- },
-
- /** ******** COMMANDS **********/
-
- /**
- * This module emits various events when state changes occur.
- *
- * The events this module may emit include:
- * busy:
- * The window is currently busy and certain UI functions may be disabled.
- * unbusy:
- * The window is not busy and certain UI functions may be re-enabled.
- */
- update: function (what, details) {
- this.emit("webide-update", what, details);
- },
-
- updateCommands: function () {
- // Action commands
- let playCmd = document.querySelector("#cmd_play");
- let stopCmd = document.querySelector("#cmd_stop");
- let debugCmd = document.querySelector("#cmd_toggleToolbox");
- let playButton = document.querySelector("#action-button-play");
- let projectPanelCmd = document.querySelector("#cmd_showProjectPanel");
-
- if (document.querySelector("window").classList.contains("busy")) {
- playCmd.setAttribute("disabled", "true");
- stopCmd.setAttribute("disabled", "true");
- debugCmd.setAttribute("disabled", "true");
- projectPanelCmd.setAttribute("disabled", "true");
- return;
- }
-
- if (!AppManager.selectedProject || !AppManager.connected) {
- playCmd.setAttribute("disabled", "true");
- stopCmd.setAttribute("disabled", "true");
- debugCmd.setAttribute("disabled", "true");
- } else {
- let isProjectRunning = AppManager.isProjectRunning();
- if (isProjectRunning) {
- playButton.classList.add("reload");
- stopCmd.removeAttribute("disabled");
- debugCmd.removeAttribute("disabled");
- } else {
- playButton.classList.remove("reload");
- stopCmd.setAttribute("disabled", "true");
- debugCmd.setAttribute("disabled", "true");
- }
-
- // If connected and a project is selected
- if (AppManager.selectedProject.type == "runtimeApp") {
- playCmd.removeAttribute("disabled");
- } else if (AppManager.selectedProject.type == "tab") {
- playCmd.removeAttribute("disabled");
- stopCmd.setAttribute("disabled", "true");
- } else if (AppManager.selectedProject.type == "mainProcess") {
- playCmd.setAttribute("disabled", "true");
- stopCmd.setAttribute("disabled", "true");
- } else {
- if (AppManager.selectedProject.errorsCount == 0 &&
- AppManager.runtimeCanHandleApps()) {
- playCmd.removeAttribute("disabled");
- } else {
- playCmd.setAttribute("disabled", "true");
- }
- }
- }
-
- // Runtime commands
- let monitorCmd = document.querySelector("#cmd_showMonitor");
- let screenshotCmd = document.querySelector("#cmd_takeScreenshot");
- let permissionsCmd = document.querySelector("#cmd_showPermissionsTable");
- let detailsCmd = document.querySelector("#cmd_showRuntimeDetails");
- let disconnectCmd = document.querySelector("#cmd_disconnectRuntime");
- let devicePrefsCmd = document.querySelector("#cmd_showDevicePrefs");
- let settingsCmd = document.querySelector("#cmd_showSettings");
-
- if (AppManager.connected) {
- if (AppManager.deviceFront) {
- monitorCmd.removeAttribute("disabled");
- detailsCmd.removeAttribute("disabled");
- permissionsCmd.removeAttribute("disabled");
- screenshotCmd.removeAttribute("disabled");
- }
- if (AppManager.preferenceFront) {
- devicePrefsCmd.removeAttribute("disabled");
- }
- if (AppManager.settingsFront) {
- settingsCmd.removeAttribute("disabled");
- }
- disconnectCmd.removeAttribute("disabled");
- } else {
- monitorCmd.setAttribute("disabled", "true");
- detailsCmd.setAttribute("disabled", "true");
- permissionsCmd.setAttribute("disabled", "true");
- screenshotCmd.setAttribute("disabled", "true");
- disconnectCmd.setAttribute("disabled", "true");
- devicePrefsCmd.setAttribute("disabled", "true");
- settingsCmd.setAttribute("disabled", "true");
- }
-
- let runtimePanelButton = document.querySelector("#runtime-panel-button");
-
- if (AppManager.connected) {
- runtimePanelButton.setAttribute("active", "true");
- runtimePanelButton.removeAttribute("hidden");
- } else {
- runtimePanelButton.removeAttribute("active");
- runtimePanelButton.setAttribute("hidden", "true");
- }
-
- projectPanelCmd.removeAttribute("disabled");
- },
-
- updateRemoveProjectButton: function () {
- // Remove command
- let removeCmdNode = document.querySelector("#cmd_removeProject");
- if (AppManager.selectedProject) {
- removeCmdNode.removeAttribute("disabled");
- } else {
- removeCmdNode.setAttribute("disabled", "true");
- }
- },
-
- /** ******** RUNTIME **********/
-
- get lastConnectedRuntime() {
- return Services.prefs.getCharPref("devtools.webide.lastConnectedRuntime");
- },
-
- set lastConnectedRuntime(runtime) {
- Services.prefs.setCharPref("devtools.webide.lastConnectedRuntime", runtime);
- },
-
- autoConnectRuntime: function () {
- // Automatically reconnect to the previously selected runtime,
- // if available and has an ID and feature is enabled
- if (AppManager.selectedRuntime ||
- !Services.prefs.getBoolPref("devtools.webide.autoConnectRuntime") ||
- !this.lastConnectedRuntime) {
- return;
- }
- let [_, type, id] = this.lastConnectedRuntime.match(/^(\w+):(.+)$/);
-
- type = type.toLowerCase();
-
- // Local connection is mapped to AppManager.runtimeList.other array
- if (type == "local") {
- type = "other";
- }
-
- // We support most runtimes except simulator, that needs to be manually
- // launched
- if (type == "usb" || type == "wifi" || type == "other") {
- for (let runtime of AppManager.runtimeList[type]) {
- // Some runtimes do not expose an id and don't support autoconnect (like
- // remote connection)
- if (runtime.id == id) {
- // Only want one auto-connect attempt, so clear last runtime value
- this.lastConnectedRuntime = "";
- this.connectToRuntime(runtime);
- }
- }
- }
- },
-
- connectToRuntime: function (runtime) {
- let name = runtime.name;
- let promise = AppManager.connectToRuntime(runtime);
- promise.then(() => this.initConnectionTelemetry())
- .catch(() => {
- // Empty rejection handler to silence uncaught rejection warnings
- // |busyUntil| will listen for rejections.
- // Bug 1121100 may find a better way to silence these.
- });
- promise = this.busyUntil(promise, "Connecting to " + name);
- // Stop busy timeout for runtimes that take unknown or long amounts of time
- // to connect.
- if (runtime.prolongedConnection) {
- this.cancelBusyTimeout();
- }
- return promise;
- },
-
- updateRuntimeButton: function () {
- let labelNode = document.querySelector("#runtime-panel-button > .panel-button-label");
- if (!AppManager.selectedRuntime) {
- labelNode.setAttribute("value", Strings.GetStringFromName("runtimeButton_label"));
- } else {
- let name = AppManager.selectedRuntime.name;
- labelNode.setAttribute("value", name);
- }
- },
-
- saveLastConnectedRuntime: function () {
- if (AppManager.selectedRuntime &&
- AppManager.selectedRuntime.id !== undefined) {
- this.lastConnectedRuntime = AppManager.selectedRuntime.type + ":" +
- AppManager.selectedRuntime.id;
- } else {
- this.lastConnectedRuntime = "";
- }
- },
-
- /** ******** ACTIONS **********/
-
- _actionsToLog: new Set(),
-
- /**
- * For each new connection, track whether play and debug were ever used. Only
- * one value is collected for each button, even if they are used multiple
- * times during a connection.
- */
- initConnectionTelemetry: function () {
- this._actionsToLog.add("play");
- this._actionsToLog.add("debug");
- },
-
- /**
- * Action occurred. Log that it happened, and remove it from the loggable
- * set.
- */
- onAction: function (action) {
- if (!this._actionsToLog.has(action)) {
- return;
- }
- this.logActionState(action, true);
- this._actionsToLog.delete(action);
- },
-
- /**
- * Connection status changed or we are shutting down. Record any loggable
- * actions as having not occurred.
- */
- updateConnectionTelemetry: function () {
- for (let action of this._actionsToLog.values()) {
- this.logActionState(action, false);
- }
- this._actionsToLog.clear();
- },
-
- logActionState: function (action, state) {
- let histogramId = "DEVTOOLS_WEBIDE_CONNECTION_" +
- action.toUpperCase() + "_USED";
- this._telemetry.log(histogramId, state);
- },
-
- /** ******** PROJECTS **********/
-
- // ProjectEditor & details screen
-
- destroyProjectEditor: function () {
- if (this.projecteditor) {
- this.projecteditor.destroy();
- this.projecteditor = null;
- }
- },
-
- /**
- * Called when selecting or deselecting the project editor panel.
- */
- onChangeProjectEditorSelected: function () {
- if (this.projecteditor) {
- let panel = document.querySelector("#deck").selectedPanel;
- if (panel && panel.id == "deck-panel-projecteditor") {
- this.projecteditor.menuEnabled = true;
- this._telemetry.toolOpened("webideProjectEditor");
- } else {
- this.projecteditor.menuEnabled = false;
- this._telemetry.toolClosed("webideProjectEditor");
- }
- }
- },
-
- getProjectEditor: function () {
- if (this.projecteditor) {
- return this.projecteditor.loaded;
- }
-
- let projecteditorIframe = document.querySelector("#deck-panel-projecteditor");
- this.projecteditor = ProjectEditor.ProjectEditor(projecteditorIframe, {
- menubar: document.querySelector("#main-menubar"),
- menuindex: 1
- });
- this.projecteditor.on("onEditorSave", () => {
- AppManager.validateAndUpdateProject(AppManager.selectedProject);
- this._telemetry.actionOccurred("webideProjectEditorSave");
- });
- return this.projecteditor.loaded;
- },
-
- updateProjectEditorHeader: function () {
- let project = AppManager.selectedProject;
- if (!project || !this.projecteditor) {
- return;
- }
- let status = project.validationStatus || "unknown";
- if (status == "error warning") {
- status = "error";
- }
- this.getProjectEditor().then((projecteditor) => {
- projecteditor.setProjectToAppPath(project.location, {
- name: project.name,
- iconUrl: project.icon,
- projectOverviewURL: "chrome://webide/content/details.xhtml",
- validationStatus: status
- }).then(null, console.error);
- }, console.error);
- },
-
- isProjectEditorEnabled: function () {
- return Services.prefs.getBoolPref("devtools.webide.showProjectEditor");
- },
-
- openProject: function () {
- let project = AppManager.selectedProject;
-
- // Nothing to show
-
- if (!project) {
- this.resetDeck();
- return;
- }
-
- // Make sure the directory exist before we show Project Editor
-
- let forceDetailsOnly = false;
- if (project.type == "packaged") {
- forceDetailsOnly = !utils.doesFileExist(project.location);
- }
-
- // Show only the details screen
-
- if (project.type != "packaged" ||
- !this.isProjectEditorEnabled() ||
- forceDetailsOnly) {
- this.selectDeckPanel("details");
- return;
- }
-
- // Show ProjectEditor
-
- this.getProjectEditor().then(() => {
- this.updateProjectEditorHeader();
- }, console.error);
-
- this.selectDeckPanel("projecteditor");
- },
-
- autoStartProject: Task.async(function* () {
- let project = AppManager.selectedProject;
-
- if (!project) {
- return;
- }
- if (!(project.type == "runtimeApp" ||
- project.type == "mainProcess" ||
- project.type == "tab")) {
- return; // For something that is not an editable app, we're done.
- }
-
- // Do not force opening apps that are already running, as they may have
- // some activity being opened and don't want to dismiss them.
- if (project.type == "runtimeApp" && !AppManager.isProjectRunning()) {
- yield UI.busyUntil(AppManager.launchRuntimeApp(), "running app");
- }
- }),
-
- autoOpenToolbox: Task.async(function* () {
- let project = AppManager.selectedProject;
-
- if (!project) {
- return;
- }
- if (!(project.type == "runtimeApp" ||
- project.type == "mainProcess" ||
- project.type == "tab")) {
- return; // For something that is not an editable app, we're done.
- }
-
- yield UI.createToolbox();
- }),
-
- importAndSelectApp: Task.async(function* (source) {
- let isPackaged = !!source.path;
- let project;
- try {
- project = yield AppProjects[isPackaged ? "addPackaged" : "addHosted"](source);
- } catch (e) {
- if (e === "Already added") {
- // Select project that's already been added,
- // and allow it to be revalidated and selected
- project = AppProjects.get(isPackaged ? source.path : source);
- } else {
- throw e;
- }
- }
-
- // Select project
- AppManager.selectedProject = project;
-
- this._telemetry.actionOccurred("webideImportProject");
- }),
-
- // Remember the last selected project on the runtime
- saveLastSelectedProject: function () {
- let shouldRestore = Services.prefs.getBoolPref("devtools.webide.restoreLastProject");
- if (!shouldRestore) {
- return;
- }
-
- // Ignore unselection of project on runtime disconnection
- if (!AppManager.connected) {
- return;
- }
-
- let project = "", type = "";
- let selected = AppManager.selectedProject;
- if (selected) {
- if (selected.type == "runtimeApp") {
- type = "runtimeApp";
- project = selected.app.manifestURL;
- } else if (selected.type == "mainProcess") {
- type = "mainProcess";
- } else if (selected.type == "packaged" ||
- selected.type == "hosted") {
- type = "local";
- project = selected.location;
- }
- }
- if (type) {
- Services.prefs.setCharPref("devtools.webide.lastSelectedProject",
- type + ":" + project);
- } else {
- Services.prefs.clearUserPref("devtools.webide.lastSelectedProject");
- }
- },
-
- autoSelectProject: function () {
- if (AppManager.selectedProject) {
- return;
- }
- let shouldRestore = Services.prefs.getBoolPref("devtools.webide.restoreLastProject");
- if (!shouldRestore) {
- return;
- }
- let pref = Services.prefs.getCharPref("devtools.webide.lastSelectedProject");
- if (!pref) {
- return;
- }
- let m = pref.match(/^(\w+):(.*)$/);
- if (!m) {
- return;
- }
- let [_, type, project] = m;
-
- if (type == "local") {
- let lastProject = AppProjects.get(project);
- if (lastProject) {
- AppManager.selectedProject = lastProject;
- }
- }
-
- // For other project types, we need to be connected to the runtime
- if (!AppManager.connected) {
- return;
- }
-
- if (type == "mainProcess" && AppManager.isMainProcessDebuggable()) {
- AppManager.selectedProject = {
- type: "mainProcess",
- name: Strings.GetStringFromName("mainProcess_label"),
- icon: AppManager.DEFAULT_PROJECT_ICON
- };
- } else if (type == "runtimeApp") {
- let app = AppManager.apps.get(project);
- if (app) {
- AppManager.selectedProject = {
- type: "runtimeApp",
- app: app.manifest,
- icon: app.iconURL,
- name: app.manifest.name
- };
- }
- }
- },
-
- /** ******** DECK **********/
-
- setupDeck: function () {
- let iframes = document.querySelectorAll("#deck > iframe");
- for (let iframe of iframes) {
- iframe.tooltip = "aHTMLTooltip";
- }
- },
-
- resetFocus: function () {
- document.commandDispatcher.focusedElement = document.documentElement;
- },
-
- selectDeckPanel: function (id) {
- let deck = document.querySelector("#deck");
- if (deck.selectedPanel && deck.selectedPanel.id === "deck-panel-" + id) {
- // This panel is already displayed.
- return;
- }
- this.resetFocus();
- let panel = deck.querySelector("#deck-panel-" + id);
- let lazysrc = panel.getAttribute("lazysrc");
- if (lazysrc) {
- panel.removeAttribute("lazysrc");
- panel.setAttribute("src", lazysrc);
- }
- deck.selectedPanel = panel;
- this.onChangeProjectEditorSelected();
- },
-
- resetDeck: function () {
- this.resetFocus();
- let deck = document.querySelector("#deck");
- deck.selectedPanel = null;
- this.onChangeProjectEditorSelected();
- },
-
- buildIDToDate(buildID) {
- let fields = buildID.match(/(\d{4})(\d{2})(\d{2})/);
- // Date expects 0 - 11 for months
- return new Date(fields[1], Number.parseInt(fields[2]) - 1, fields[3]);
- },
-
- checkRuntimeVersion: Task.async(function* () {
- if (AppManager.connected && AppManager.deviceFront) {
- let desc = yield AppManager.deviceFront.getDescription();
- // Compare device and firefox build IDs
- // and only compare by day (strip hours/minutes) to prevent
- // warning against builds of the same day.
- let deviceID = desc.appbuildid.substr(0, 8);
- let localID = Services.appinfo.appBuildID.substr(0, 8);
- let deviceDate = this.buildIDToDate(deviceID);
- let localDate = this.buildIDToDate(localID);
- // Allow device to be newer by up to a week. This accommodates those with
- // local device builds, since their devices will almost always be newer
- // than the client.
- if (deviceDate - localDate > 7 * MS_PER_DAY) {
- this.reportError("error_runtimeVersionTooRecent", deviceID, localID);
- }
- }
- }),
-
- /** ******** TOOLBOX **********/
-
- /**
- * There are many ways to close a toolbox:
- * * Close button inside the toolbox
- * * Toggle toolbox wrench in WebIDE
- * * Disconnect the current runtime gracefully
- * * Yank cord out of device
- * * Close or crash the app/tab
- * We can't know for sure which one was used here, so reset the
- * |toolboxPromise| since someone must be destroying it to reach here,
- * and call our own close method.
- */
- _onToolboxClosed: function (promise, iframe) {
- // Only save toolbox size, disable wrench button, workaround focus issue...
- // if we are closing the last toolbox:
- // - toolboxPromise is nullified by destroyToolbox and is still null here
- // if no other toolbox has been opened in between,
- // - having two distinct promise means we are receiving closed event
- // for a previous, non-current, toolbox.
- if (!this.toolboxPromise || this.toolboxPromise === promise) {
- this.toolboxPromise = null;
- this.resetFocus();
- Services.prefs.setIntPref("devtools.toolbox.footer.height", iframe.height);
-
- let splitter = document.querySelector(".devtools-horizontal-splitter");
- splitter.setAttribute("hidden", "true");
- document.querySelector("#action-button-debug").removeAttribute("active");
- }
- // We have to destroy the iframe, otherwise, the keybindings of webide don't work
- // properly anymore.
- iframe.remove();
- },
-
- destroyToolbox: function () {
- // Only have a live toolbox if |this.toolboxPromise| exists
- if (this.toolboxPromise) {
- let toolboxPromise = this.toolboxPromise;
- this.toolboxPromise = null;
- return toolboxPromise.then(toolbox => toolbox.destroy());
- }
- return promise.resolve();
- },
-
- createToolbox: function () {
- // If |this.toolboxPromise| exists, there is already a live toolbox
- if (this.toolboxPromise) {
- return this.toolboxPromise;
- }
-
- let iframe = document.createElement("iframe");
- iframe.id = "toolbox";
-
- // Compute a uid on the iframe in order to identify toolbox iframe
- // when receiving toolbox-close event
- iframe.uid = new Date().getTime();
-
- let height = Services.prefs.getIntPref("devtools.toolbox.footer.height");
- iframe.height = height;
-
- let promise = this.toolboxPromise = AppManager.getTarget().then(target => {
- return this._showToolbox(target, iframe);
- }).then(toolbox => {
- // Destroy the toolbox on WebIDE side before
- // toolbox.destroy's promise resolves.
- toolbox.once("destroyed", this._onToolboxClosed.bind(this, promise, iframe));
- return toolbox;
- }, console.error);
-
- return this.busyUntil(this.toolboxPromise, "opening toolbox");
- },
-
- _showToolbox: function (target, iframe) {
- let splitter = document.querySelector(".devtools-horizontal-splitter");
- splitter.removeAttribute("hidden");
-
- document.querySelector("notificationbox").insertBefore(iframe, splitter.nextSibling);
- let host = Toolbox.HostType.CUSTOM;
- let options = { customIframe: iframe, zoom: false, uid: iframe.uid };
-
- document.querySelector("#action-button-debug").setAttribute("active", "true");
-
- return gDevTools.showToolbox(target, null, host, options);
- },
-
- prePackageLog: function (msg) {
- if (msg == "start") {
- UI.selectDeckPanel("logs");
- }
- }
-};
-
-EventEmitter.decorate(UI);
-
-var Cmds = {
- quit: function () {
- if (UI.canCloseProject()) {
- window.close();
- }
- },
-
- showProjectPanel: function () {
- ProjectPanel.toggleSidebar();
- return promise.resolve();
- },
-
- showRuntimePanel: function () {
- RuntimeScanners.scan();
- RuntimePanel.toggleSidebar();
- },
-
- disconnectRuntime: function () {
- let disconnecting = Task.spawn(function* () {
- yield UI.destroyToolbox();
- yield AppManager.disconnectRuntime();
- });
- return UI.busyUntil(disconnecting, "disconnecting from runtime");
- },
-
- takeScreenshot: function () {
- let url = AppManager.deviceFront.screenshotToDataURL();
- return UI.busyUntil(url.then(longstr => {
- return longstr.string().then(dataURL => {
- longstr.release().then(null, console.error);
- UI.openInBrowser(dataURL);
- });
- }), "taking screenshot");
- },
-
- showPermissionsTable: function () {
- UI.selectDeckPanel("permissionstable");
- },
-
- showRuntimeDetails: function () {
- UI.selectDeckPanel("runtimedetails");
- },
-
- showDevicePrefs: function () {
- UI.selectDeckPanel("devicepreferences");
- },
-
- showSettings: function () {
- UI.selectDeckPanel("devicesettings");
- },
-
- showMonitor: function () {
- UI.selectDeckPanel("monitor");
- },
-
- play: Task.async(function* () {
- let busy;
- switch (AppManager.selectedProject.type) {
- case "packaged":
- let autosave =
- Services.prefs.getBoolPref("devtools.webide.autosaveFiles");
- if (autosave && UI.projecteditor) {
- yield UI.projecteditor.saveAllFiles();
- }
- busy = UI.busyWithProgressUntil(AppManager.installAndRunProject(),
- "installing and running app");
- break;
- case "hosted":
- busy = UI.busyUntil(AppManager.installAndRunProject(),
- "installing and running app");
- break;
- case "runtimeApp":
- busy = UI.busyUntil(AppManager.launchOrReloadRuntimeApp(), "launching / reloading app");
- break;
- case "tab":
- busy = UI.busyUntil(AppManager.reloadTab(), "reloading tab");
- break;
- }
- if (!busy) {
- return promise.reject();
- }
- UI.onAction("play");
- return busy;
- }),
-
- stop: function () {
- return UI.busyUntil(AppManager.stopRunningApp(), "stopping app");
- },
-
- toggleToolbox: function () {
- UI.onAction("debug");
- if (UI.toolboxPromise) {
- UI.destroyToolbox();
- return promise.resolve();
- } else {
- return UI.createToolbox();
- }
- },
-
- removeProject: function () {
- AppManager.removeSelectedProject();
- },
-
- toggleEditors: function () {
- let isNowEnabled = !UI.isProjectEditorEnabled();
- Services.prefs.setBoolPref("devtools.webide.showProjectEditor", isNowEnabled);
- if (!isNowEnabled) {
- UI.destroyProjectEditor();
- }
- UI.openProject();
- },
-
- showTroubleShooting: function () {
- UI.openInBrowser(HELP_URL);
- },
-
- showAddons: function () {
- UI.selectDeckPanel("addons");
- },
-
- showPrefs: function () {
- UI.selectDeckPanel("prefs");
- },
-
- zoomIn: function () {
- if (UI.contentViewer.fullZoom < MAX_ZOOM) {
- UI.contentViewer.fullZoom += 0.1;
- Services.prefs.setCharPref("devtools.webide.zoom", UI.contentViewer.fullZoom);
- }
- },
-
- zoomOut: function () {
- if (UI.contentViewer.fullZoom > MIN_ZOOM) {
- UI.contentViewer.fullZoom -= 0.1;
- Services.prefs.setCharPref("devtools.webide.zoom", UI.contentViewer.fullZoom);
- }
- },
-
- resetZoom: function () {
- UI.contentViewer.fullZoom = 1;
- Services.prefs.setCharPref("devtools.webide.zoom", 1);
- }
-};
diff --git a/devtools/client/webide/content/webide.xul b/devtools/client/webide/content/webide.xul
deleted file mode 100644
index a3e4355b9..000000000
--- a/devtools/client/webide/content/webide.xul
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE window [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?>
-
-<?xml-stylesheet href="chrome://global/skin/global.css"?>
-<?xml-stylesheet href="resource://devtools/client/themes/common.css"?>
-<?xml-stylesheet href="chrome://webide/skin/webide.css"?>
-
-<window id="webide" onclose="return UI.canCloseProject();"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:html="http://www.w3.org/1999/xhtml"
- title="&windowTitle;"
- windowtype="devtools:webide"
- macanimationtype="document"
- fullscreenbutton="true"
- screenX="4" screenY="4"
- width="800" height="600"
- persist="screenX screenY width height sizemode">
-
- <script type="application/javascript" src="chrome://global/content/globalOverlay.js"></script>
- <script type="application/javascript" src="project-panel.js"></script>
- <script type="application/javascript" src="runtime-panel.js"></script>
- <script type="application/javascript" src="webide.js"></script>
-
- <commandset id="mainCommandSet">
- <commandset id="editMenuCommands"/>
- <commandset id="webideCommands">
- <command id="cmd_quit" oncommand="Cmds.quit()"/>
- <command id="cmd_newApp" oncommand="Cmds.newApp()" label="&projectMenu_newApp_label;"/>
- <command id="cmd_importPackagedApp" oncommand="Cmds.importPackagedApp()" label="&projectMenu_importPackagedApp_label;"/>
- <command id="cmd_importHostedApp" oncommand="Cmds.importHostedApp()" label="&projectMenu_importHostedApp_label;"/>
- <command id="cmd_showDevicePrefs" label="&runtimeMenu_showDevicePrefs_label;" oncommand="Cmds.showDevicePrefs()"/>
- <command id="cmd_showSettings" label="&runtimeMenu_showSettings_label;" oncommand="Cmds.showSettings()"/>
- <command id="cmd_removeProject" oncommand="Cmds.removeProject()" label="&projectMenu_remove_label;"/>
- <command id="cmd_showProjectPanel" oncommand="Cmds.showProjectPanel()"/>
- <command id="cmd_showRuntimePanel" oncommand="Cmds.showRuntimePanel()"/>
- <command id="cmd_disconnectRuntime" oncommand="Cmds.disconnectRuntime()" label="&runtimeMenu_disconnect_label;"/>
- <command id="cmd_showMonitor" oncommand="Cmds.showMonitor()" label="&runtimeMenu_showMonitor_label;"/>
- <command id="cmd_showPermissionsTable" oncommand="Cmds.showPermissionsTable()" label="&runtimeMenu_showPermissionTable_label;"/>
- <command id="cmd_showRuntimeDetails" oncommand="Cmds.showRuntimeDetails()" label="&runtimeMenu_showDetails_label;"/>
- <command id="cmd_takeScreenshot" oncommand="Cmds.takeScreenshot()" label="&runtimeMenu_takeScreenshot_label;"/>
- <command id="cmd_toggleEditor" oncommand="Cmds.toggleEditors()" label="&viewMenu_toggleEditor_label;"/>
- <command id="cmd_showAddons" oncommand="Cmds.showAddons()"/>
- <command id="cmd_showPrefs" oncommand="Cmds.showPrefs()"/>
- <command id="cmd_showTroubleShooting" oncommand="Cmds.showTroubleShooting()"/>
- <command id="cmd_play" oncommand="Cmds.play()"/>
- <command id="cmd_stop" oncommand="Cmds.stop()" label="&projectMenu_stop_label;"/>
- <command id="cmd_toggleToolbox" oncommand="Cmds.toggleToolbox()"/>
- <command id="cmd_zoomin" label="&viewMenu_zoomin_label;" oncommand="Cmds.zoomIn()"/>
- <command id="cmd_zoomout" label="&viewMenu_zoomout_label;" oncommand="Cmds.zoomOut()"/>
- <command id="cmd_resetzoom" label="&viewMenu_resetzoom_label;" oncommand="Cmds.resetZoom()"/>
- </commandset>
- </commandset>
-
- <menubar id="main-menubar">
- <menu id="menu-project" label="&projectMenu_label;" accesskey="&projectMenu_accesskey;">
- <menupopup id="menu-project-popup">
- <menuitem command="cmd_newApp" accesskey="&projectMenu_newApp_accesskey;"/>
- <menuitem command="cmd_importPackagedApp" accesskey="&projectMenu_importPackagedApp_accesskey;"/>
- <menuitem command="cmd_importHostedApp" accesskey="&projectMenu_importHostedApp_accesskey;"/>
- <menuitem id="menuitem-show_projectPanel" command="cmd_showProjectPanel" key="key_showProjectPanel" label="&projectMenu_selectApp_label;" accesskey="&projectMenu_selectApp_accesskey;"/>
- <menuseparator/>
- <menuitem command="cmd_play" key="key_play" label="&projectMenu_play_label;" accesskey="&projectMenu_play_accesskey;"/>
- <menuitem command="cmd_stop" accesskey="&projectMenu_stop_accesskey;"/>
- <menuitem command="cmd_toggleToolbox" key="key_toggleToolbox" label="&projectMenu_debug_label;" accesskey="&projectMenu_debug_accesskey;"/>
- <menuseparator/>
- <menuitem command="cmd_removeProject" accesskey="&projectMenu_remove_accesskey;"/>
- <menuseparator/>
- <menuitem command="cmd_showPrefs" label="&projectMenu_showPrefs_label;" accesskey="&projectMenu_showPrefs_accesskey;"/>
- <menuitem command="cmd_showAddons" label="&projectMenu_manageComponents_label;" accesskey="&projectMenu_manageComponents_accesskey;"/>
- </menupopup>
- </menu>
-
- <menu id="menu-runtime" label="&runtimeMenu_label;" accesskey="&runtimeMenu_accesskey;">
- <menupopup id="menu-runtime-popup">
- <menuitem command="cmd_showMonitor" accesskey="&runtimeMenu_showMonitor_accesskey;"/>
- <menuitem command="cmd_takeScreenshot" accesskey="&runtimeMenu_takeScreenshot_accesskey;"/>
- <menuitem command="cmd_showPermissionsTable" accesskey="&runtimeMenu_showPermissionTable_accesskey;"/>
- <menuitem command="cmd_showRuntimeDetails" accesskey="&runtimeMenu_showDetails_accesskey;"/>
- <menuitem command="cmd_showDevicePrefs" accesskey="&runtimeMenu_showDevicePrefs_accesskey;"/>
- <menuitem command="cmd_showSettings" accesskey="&runtimeMenu_showSettings_accesskey;"/>
- <menuseparator/>
- <menuitem command="cmd_disconnectRuntime" accesskey="&runtimeMenu_disconnect_accesskey;"/>
- </menupopup>
- </menu>
-
- <menu id="menu-view" label="&viewMenu_label;" accesskey="&viewMenu_accesskey;">
- <menupopup id="menu-ViewPopup">
- <menuitem command="cmd_toggleEditor" key="key_toggleEditor" accesskey="&viewMenu_toggleEditor_accesskey;"/>
- <menuseparator/>
- <menuitem command="cmd_zoomin" key="key_zoomin" accesskey="&viewMenu_zoomin_accesskey;"/>
- <menuitem command="cmd_zoomout" key="key_zoomout" accesskey="&viewMenu_zoomout_accesskey;"/>
- <menuitem command="cmd_resetzoom" key="key_resetzoom" accesskey="&viewMenu_resetzoom_accesskey;"/>
- </menupopup>
- </menu>
-
- </menubar>
-
- <keyset id="mainKeyset">
- <key key="&key_quit;" id="key_quit" command="cmd_quit" modifiers="accel"/>
- <key key="&key_showProjectPanel;" id="key_showProjectPanel" command="cmd_showProjectPanel" modifiers="accel"/>
- <key key="&key_play;" id="key_play" command="cmd_play" modifiers="accel"/>
- <key key="&key_toggleEditor;" id="key_toggleEditor" command="cmd_toggleEditor" modifiers="accel"/>
- <key keycode="&key_toggleToolbox;" id="key_toggleToolbox" command="cmd_toggleToolbox"/>
- <key key="&key_zoomin;" id="key_zoomin" command="cmd_zoomin" modifiers="accel"/>
- <key key="&key_zoomin2;" id="key_zoomin2" command="cmd_zoomin" modifiers="accel"/>
- <key key="&key_zoomout;" id="key_zoomout" command="cmd_zoomout" modifiers="accel"/>
- <key key="&key_resetzoom;" id="key_resetzoom" command="cmd_resetzoom" modifiers="accel"/>
- </keyset>
-
- <tooltip id="aHTMLTooltip" page="true"/>
-
- <toolbar id="main-toolbar">
-
- <vbox flex="1">
- <hbox id="action-buttons-container" class="busy">
- <toolbarbutton id="action-button-play" class="action-button" command="cmd_play" tooltiptext="&projectMenu_play_label;"/>
- <toolbarbutton id="action-button-stop" class="action-button" command="cmd_stop" tooltiptext="&projectMenu_stop_label;"/>
- <toolbarbutton id="action-button-debug" class="action-button" command="cmd_toggleToolbox" tooltiptext="&projectMenu_debug_label;"/>
- <hbox id="action-busy" align="center">
- <html:img id="action-busy-undetermined" src="chrome://webide/skin/throbber.svg"/>
- <progressmeter id="action-busy-determined"/>
- </hbox>
- </hbox>
-
- <hbox id="panel-buttons-container">
- <spacer flex="1"/>
- <toolbarbutton id="runtime-panel-button" class="panel-button">
- <image class="panel-button-image"/>
- <label class="panel-button-label" value="&runtimeButton_label;"/>
- </toolbarbutton>
- </hbox>
-
- </vbox>
- </toolbar>
-
- <notificationbox flex="1" id="notificationbox">
- <div flex="1" id="deck-panels">
- <vbox id="project-listing-panel" class="project-listing panel-list" flex="1">
- <div id="project-listing-wrapper" class="panel-list-wrapper">
- <iframe id="project-listing-panel-details" flex="1" src="project-listing.xhtml" tooltip="aHTMLTooltip"/>
- </div>
- </vbox>
- <splitter class="devtools-side-splitter" id="project-listing-splitter"/>
- <deck flex="1" id="deck" selectedIndex="-1">
- <iframe id="deck-panel-details" flex="1" src="details.xhtml"/>
- <iframe id="deck-panel-projecteditor" flex="1"/>
- <iframe id="deck-panel-addons" flex="1" src="addons.xhtml"/>
- <iframe id="deck-panel-prefs" flex="1" src="prefs.xhtml"/>
- <iframe id="deck-panel-permissionstable" flex="1" lazysrc="permissionstable.xhtml"/>
- <iframe id="deck-panel-runtimedetails" flex="1" lazysrc="runtimedetails.xhtml"/>
- <iframe id="deck-panel-monitor" flex="1" lazysrc="monitor.xhtml"/>
- <iframe id="deck-panel-devicepreferences" flex="1" lazysrc="devicepreferences.xhtml"/>
- <iframe id="deck-panel-devicesettings" flex="1" lazysrc="devicesettings.xhtml"/>
- <iframe id="deck-panel-logs" flex="1" src="logs.xhtml"/>
- <iframe id="deck-panel-simulator" flex="1" lazysrc="simulator.xhtml"/>
- </deck>
- <splitter class="devtools-side-splitter" id="runtime-listing-splitter"/>
- <vbox id="runtime-listing-panel" class="runtime-listing panel-list" flex="1">
- <div id="runtime-listing-wrapper" class="panel-list-wrapper">
- <iframe id="runtime-listing-panel-details" flex="1" src="runtime-listing.xhtml" tooltip="aHTMLTooltip"/>
- </div>
- </vbox>
- </div>
- <splitter hidden="true" class="devtools-horizontal-splitter" orient="vertical"/>
- <!-- toolbox iframe will be inserted here -->
- </notificationbox>
-
-</window>
diff --git a/devtools/client/webide/content/wifi-auth.js b/devtools/client/webide/content/wifi-auth.js
deleted file mode 100644
index 5ae5d824c..000000000
--- a/devtools/client/webide/content/wifi-auth.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-var Cu = Components.utils;
-const { require } =
- Cu.import("resource://devtools/shared/Loader.jsm", {});
-const Services = require("Services");
-const QR = require("devtools/shared/qrcode/index");
-
-window.addEventListener("load", function onLoad() {
- window.removeEventListener("load", onLoad);
- document.getElementById("close").onclick = () => window.close();
- document.getElementById("no-scanner").onclick = showToken;
- document.getElementById("yes-scanner").onclick = hideToken;
- buildUI();
-});
-
-function buildUI() {
- let { oob } = window.arguments[0];
- createQR(oob);
- createToken(oob);
-}
-
-function createQR(oob) {
- let oobData = JSON.stringify(oob);
- let imgData = QR.encodeToDataURI(oobData, "L" /* low quality */);
- document.querySelector("#qr-code img").src = imgData.src;
-}
-
-function createToken(oob) {
- let token = oob.sha256.replace(/:/g, "").toLowerCase() + oob.k;
- document.querySelector("#token pre").textContent = token;
-}
-
-function showToken() {
- document.querySelector("body").setAttribute("token", "true");
-}
-
-function hideToken() {
- document.querySelector("body").removeAttribute("token");
-}
diff --git a/devtools/client/webide/content/wifi-auth.xhtml b/devtools/client/webide/content/wifi-auth.xhtml
deleted file mode 100644
index cfeec3c96..000000000
--- a/devtools/client/webide/content/wifi-auth.xhtml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE html [
- <!ENTITY % webideDTD SYSTEM "chrome://devtools/locale/webide.dtd" >
- %webideDTD;
-]>
-
-<html id="devtools:wifi-auth" xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf8"/>
- <link rel="stylesheet" href="chrome://webide/skin/deck.css" type="text/css"/>
- <link rel="stylesheet" href="chrome://webide/skin/wifi-auth.css" type="text/css"/>
- <script type="application/javascript;version=1.8" src="chrome://webide/content/wifi-auth.js"></script>
- </head>
- <body>
-
- <div id="controls">
- <a id="close">&deck_close;</a>
- </div>
-
- <h3 id="header">&wifi_auth_header;</h3>
- <div id="scan-request">&wifi_auth_scan_request;</div>
-
- <div id="qr-code">
- <div id="qr-code-wrapper">
- <img/>
- </div>
- <a id="no-scanner" class="toggle-scanner">&wifi_auth_no_scanner;</a>
- <div id="qr-size-note">
- <h5>&wifi_auth_qr_size_note;</h5>
- </div>
- </div>
-
- <div id="token">
- <div>&wifi_auth_token_request;</div>
- <pre id="token-value"/>
- <a id="yes-scanner" class="toggle-scanner">&wifi_auth_yes_scanner;</a>
- </div>
-
- </body>
-</html>
diff --git a/devtools/client/webide/modules/addons.js b/devtools/client/webide/modules/addons.js
deleted file mode 100644
index 4dc09f1ca..000000000
--- a/devtools/client/webide/modules/addons.js
+++ /dev/null
@@ -1,197 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-const promise = require("promise");
-const {AddonManager} = require("resource://gre/modules/AddonManager.jsm");
-const Services = require("Services");
-const {getJSON} = require("devtools/client/shared/getjson");
-const EventEmitter = require("devtools/shared/event-emitter");
-
-const ADDONS_URL = "devtools.webide.addonsURL";
-
-var SIMULATOR_LINK = Services.prefs.getCharPref("devtools.webide.simulatorAddonsURL");
-var ADB_LINK = Services.prefs.getCharPref("devtools.webide.adbAddonURL");
-var ADAPTERS_LINK = Services.prefs.getCharPref("devtools.webide.adaptersAddonURL");
-var SIMULATOR_ADDON_ID = Services.prefs.getCharPref("devtools.webide.simulatorAddonID");
-var ADB_ADDON_ID = Services.prefs.getCharPref("devtools.webide.adbAddonID");
-var ADAPTERS_ADDON_ID = Services.prefs.getCharPref("devtools.webide.adaptersAddonID");
-
-var platform = Services.appShell.hiddenDOMWindow.navigator.platform;
-var OS = "";
-if (platform.indexOf("Win") != -1) {
- OS = "win32";
-} else if (platform.indexOf("Mac") != -1) {
- OS = "mac64";
-} else if (platform.indexOf("Linux") != -1) {
- if (platform.indexOf("x86_64") != -1) {
- OS = "linux64";
- } else {
- OS = "linux32";
- }
-}
-
-var addonsListener = {};
-addonsListener.onEnabled =
-addonsListener.onDisabled =
-addonsListener.onInstalled =
-addonsListener.onUninstalled = (updatedAddon) => {
- GetAvailableAddons().then(addons => {
- for (let a of [...addons.simulators, addons.adb, addons.adapters]) {
- if (a.addonID == updatedAddon.id) {
- a.updateInstallStatus();
- }
- }
- });
-};
-AddonManager.addAddonListener(addonsListener);
-
-var GetAvailableAddons_promise = null;
-var GetAvailableAddons = exports.GetAvailableAddons = function () {
- if (!GetAvailableAddons_promise) {
- let deferred = promise.defer();
- GetAvailableAddons_promise = deferred.promise;
- let addons = {
- simulators: [],
- adb: null
- };
- getJSON(ADDONS_URL).then(json => {
- for (let stability in json) {
- for (let version of json[stability]) {
- addons.simulators.push(new SimulatorAddon(stability, version));
- }
- }
- addons.adb = new ADBAddon();
- addons.adapters = new AdaptersAddon();
- deferred.resolve(addons);
- }, e => {
- GetAvailableAddons_promise = null;
- deferred.reject(e);
- });
- }
- return GetAvailableAddons_promise;
-};
-
-exports.ForgetAddonsList = function () {
- GetAvailableAddons_promise = null;
-};
-
-function Addon() {}
-Addon.prototype = {
- _status: "unknown",
- set status(value) {
- if (this._status != value) {
- this._status = value;
- this.emit("update");
- }
- },
- get status() {
- return this._status;
- },
-
- updateInstallStatus: function () {
- AddonManager.getAddonByID(this.addonID, (addon) => {
- if (addon && !addon.userDisabled) {
- this.status = "installed";
- } else {
- this.status = "uninstalled";
- }
- });
- },
-
- install: function () {
- AddonManager.getAddonByID(this.addonID, (addon) => {
- if (addon && !addon.userDisabled) {
- this.status = "installed";
- return;
- }
- this.status = "preparing";
- if (addon && addon.userDisabled) {
- addon.userDisabled = false;
- } else {
- AddonManager.getInstallForURL(this.xpiLink, (install) => {
- install.addListener(this);
- install.install();
- }, "application/x-xpinstall");
- }
- });
- },
-
- uninstall: function () {
- AddonManager.getAddonByID(this.addonID, (addon) => {
- addon.uninstall();
- });
- },
-
- installFailureHandler: function (install, message) {
- this.status = "uninstalled";
- this.emit("failure", message);
- },
-
- onDownloadStarted: function () {
- this.status = "downloading";
- },
-
- onInstallStarted: function () {
- this.status = "installing";
- },
-
- onDownloadProgress: function (install) {
- if (install.maxProgress == -1) {
- this.emit("progress", -1);
- } else {
- this.emit("progress", install.progress / install.maxProgress);
- }
- },
-
- onInstallEnded: function ({addon}) {
- addon.userDisabled = false;
- },
-
- onDownloadCancelled: function (install) {
- this.installFailureHandler(install, "Download cancelled");
- },
- onDownloadFailed: function (install) {
- this.installFailureHandler(install, "Download failed");
- },
- onInstallCancelled: function (install) {
- this.installFailureHandler(install, "Install cancelled");
- },
- onInstallFailed: function (install) {
- this.installFailureHandler(install, "Install failed");
- },
-};
-
-function SimulatorAddon(stability, version) {
- EventEmitter.decorate(this);
- this.stability = stability;
- this.version = version;
- // This addon uses the string "linux" for "linux32"
- let fixedOS = OS == "linux32" ? "linux" : OS;
- this.xpiLink = SIMULATOR_LINK.replace(/#OS#/g, fixedOS)
- .replace(/#VERSION#/g, version)
- .replace(/#SLASHED_VERSION#/g, version.replace(/\./g, "_"));
- this.addonID = SIMULATOR_ADDON_ID.replace(/#SLASHED_VERSION#/g, version.replace(/\./g, "_"));
- this.updateInstallStatus();
-}
-SimulatorAddon.prototype = Object.create(Addon.prototype);
-
-function ADBAddon() {
- EventEmitter.decorate(this);
- // This addon uses the string "linux" for "linux32"
- let fixedOS = OS == "linux32" ? "linux" : OS;
- this.xpiLink = ADB_LINK.replace(/#OS#/g, fixedOS);
- this.addonID = ADB_ADDON_ID;
- this.updateInstallStatus();
-}
-ADBAddon.prototype = Object.create(Addon.prototype);
-
-function AdaptersAddon() {
- EventEmitter.decorate(this);
- this.xpiLink = ADAPTERS_LINK.replace(/#OS#/g, OS);
- this.addonID = ADAPTERS_ADDON_ID;
- this.updateInstallStatus();
-}
-AdaptersAddon.prototype = Object.create(Addon.prototype);
diff --git a/devtools/client/webide/modules/app-manager.js b/devtools/client/webide/modules/app-manager.js
deleted file mode 100644
index 88dfcdd44..000000000
--- a/devtools/client/webide/modules/app-manager.js
+++ /dev/null
@@ -1,850 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const {Cu} = require("chrome");
-
-const promise = require("promise");
-const {TargetFactory} = require("devtools/client/framework/target");
-const Services = require("Services");
-const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
-const EventEmitter = require("devtools/shared/event-emitter");
-const {TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
-const {AppProjects} = require("devtools/client/webide/modules/app-projects");
-const TabStore = require("devtools/client/webide/modules/tab-store");
-const {AppValidator} = require("devtools/client/webide/modules/app-validator");
-const {ConnectionManager, Connection} = require("devtools/shared/client/connection-manager");
-const {AppActorFront} = require("devtools/shared/apps/app-actor-front");
-const {getDeviceFront} = require("devtools/shared/fronts/device");
-const {getPreferenceFront} = require("devtools/shared/fronts/preference");
-const {getSettingsFront} = require("devtools/shared/fronts/settings");
-const {Task} = require("devtools/shared/task");
-const {RuntimeScanners, RuntimeTypes} = require("devtools/client/webide/modules/runtimes");
-const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {});
-const Telemetry = require("devtools/client/shared/telemetry");
-const {ProjectBuilding} = require("./build");
-
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-var AppManager = exports.AppManager = {
-
- DEFAULT_PROJECT_ICON: "chrome://webide/skin/default-app-icon.png",
- DEFAULT_PROJECT_NAME: "--",
-
- _initialized: false,
-
- init: function () {
- if (this._initialized) {
- return;
- }
- this._initialized = true;
-
- let port = Services.prefs.getIntPref("devtools.debugger.remote-port");
- this.connection = ConnectionManager.createConnection("localhost", port);
- this.onConnectionChanged = this.onConnectionChanged.bind(this);
- this.connection.on(Connection.Events.STATUS_CHANGED, this.onConnectionChanged);
-
- this.tabStore = new TabStore(this.connection);
- this.onTabList = this.onTabList.bind(this);
- this.onTabNavigate = this.onTabNavigate.bind(this);
- this.onTabClosed = this.onTabClosed.bind(this);
- this.tabStore.on("tab-list", this.onTabList);
- this.tabStore.on("navigate", this.onTabNavigate);
- this.tabStore.on("closed", this.onTabClosed);
-
- this._clearRuntimeList();
- this._rebuildRuntimeList = this._rebuildRuntimeList.bind(this);
- RuntimeScanners.on("runtime-list-updated", this._rebuildRuntimeList);
- RuntimeScanners.enable();
- this._rebuildRuntimeList();
-
- this.onInstallProgress = this.onInstallProgress.bind(this);
-
- this._telemetry = new Telemetry();
- },
-
- destroy: function () {
- if (!this._initialized) {
- return;
- }
- this._initialized = false;
-
- this.selectedProject = null;
- this.selectedRuntime = null;
- RuntimeScanners.off("runtime-list-updated", this._rebuildRuntimeList);
- RuntimeScanners.disable();
- this.runtimeList = null;
- this.tabStore.off("tab-list", this.onTabList);
- this.tabStore.off("navigate", this.onTabNavigate);
- this.tabStore.off("closed", this.onTabClosed);
- this.tabStore.destroy();
- this.tabStore = null;
- this.connection.off(Connection.Events.STATUS_CHANGED, this.onConnectionChanged);
- this._listTabsResponse = null;
- this.connection.disconnect();
- this.connection = null;
- },
-
- /**
- * This module emits various events when state changes occur. The basic event
- * naming scheme is that event "X" means "X has changed" or "X is available".
- * Some names are more detailed to clarify their precise meaning.
- *
- * The events this module may emit include:
- * before-project:
- * The selected project is about to change. The event includes a special
- * |cancel| callback that will abort the project change if desired.
- * connection:
- * The connection status has changed (connected, disconnected, etc.)
- * install-progress:
- * A project being installed to a runtime has made further progress. This
- * event contains additional details about exactly how far the process is
- * when such information is available.
- * project:
- * The selected project has changed.
- * project-started:
- * The selected project started running on the connected runtime.
- * project-stopped:
- * The selected project stopped running on the connected runtime.
- * project-removed:
- * The selected project was removed from the project list.
- * project-validated:
- * The selected project just completed validation. As part of validation,
- * many pieces of metadata about the project are refreshed, including its
- * name, manifest details, etc.
- * runtime:
- * The selected runtime has changed.
- * runtime-apps-icons:
- * The list of URLs for the runtime app icons are available.
- * runtime-global-actors:
- * The list of global actors for the entire runtime (but not actors for a
- * specific tab or app) are now available, so we can test for features
- * like preferences and settings.
- * runtime-details:
- * The selected runtime's details have changed, such as its user-visible
- * name.
- * runtime-list:
- * The list of available runtimes has changed, or any of the user-visible
- * details (like names) for the non-selected runtimes has changed.
- * runtime-telemetry:
- * Detailed runtime telemetry has been recorded. Used by tests.
- * runtime-targets:
- * The list of remote runtime targets available from the currently
- * connected runtime (such as tabs or apps) has changed, or any of the
- * user-visible details (like names) for the non-selected runtime targets
- * has changed. This event includes |type| in the details, to distinguish
- * "apps" and "tabs".
- */
- update: function (what, details) {
- // Anything we want to forward to the UI
- this.emit("app-manager-update", what, details);
- },
-
- reportError: function (l10nProperty, ...l10nArgs) {
- let win = Services.wm.getMostRecentWindow("devtools:webide");
- if (win) {
- win.UI.reportError(l10nProperty, ...l10nArgs);
- } else {
- let text;
- if (l10nArgs.length > 0) {
- text = Strings.formatStringFromName(l10nProperty, l10nArgs, l10nArgs.length);
- } else {
- text = Strings.GetStringFromName(l10nProperty);
- }
- console.error(text);
- }
- },
-
- onConnectionChanged: function () {
- console.log("Connection status changed: " + this.connection.status);
-
- if (this.connection.status == Connection.Status.DISCONNECTED) {
- this.selectedRuntime = null;
- }
-
- if (!this.connected) {
- if (this._appsFront) {
- this._appsFront.off("install-progress", this.onInstallProgress);
- this._appsFront.unwatchApps();
- this._appsFront = null;
- }
- this._listTabsResponse = null;
- } else {
- this.connection.client.listTabs((response) => {
- if (response.webappsActor) {
- let front = new AppActorFront(this.connection.client,
- response);
- front.on("install-progress", this.onInstallProgress);
- front.watchApps(() => this.checkIfProjectIsRunning())
- .then(() => {
- // This can't be done earlier as many operations
- // in the apps actor require watchApps to be called
- // first.
- this._appsFront = front;
- this._listTabsResponse = response;
- this._recordRuntimeInfo();
- this.update("runtime-global-actors");
- })
- .then(() => {
- this.checkIfProjectIsRunning();
- this.update("runtime-targets", { type: "apps" });
- front.fetchIcons().then(() => this.update("runtime-apps-icons"));
- });
- } else {
- this._listTabsResponse = response;
- this._recordRuntimeInfo();
- this.update("runtime-global-actors");
- }
- });
- }
-
- this.update("connection");
- },
-
- get connected() {
- return this.connection &&
- this.connection.status == Connection.Status.CONNECTED;
- },
-
- get apps() {
- if (this._appsFront) {
- return this._appsFront.apps;
- } else {
- return new Map();
- }
- },
-
- onInstallProgress: function (event, details) {
- this.update("install-progress", details);
- },
-
- isProjectRunning: function () {
- if (this.selectedProject.type == "mainProcess" ||
- this.selectedProject.type == "tab") {
- return true;
- }
-
- let app = this._getProjectFront(this.selectedProject);
- return app && app.running;
- },
-
- checkIfProjectIsRunning: function () {
- if (this.selectedProject) {
- if (this.isProjectRunning()) {
- this.update("project-started");
- } else {
- this.update("project-stopped");
- }
- }
- },
-
- listTabs: function () {
- return this.tabStore.listTabs();
- },
-
- onTabList: function () {
- this.update("runtime-targets", { type: "tabs" });
- },
-
- // TODO: Merge this into TabProject as part of project-agnostic work
- onTabNavigate: function () {
- this.update("runtime-targets", { type: "tabs" });
- if (this.selectedProject.type !== "tab") {
- return;
- }
- let tab = this.selectedProject.app = this.tabStore.selectedTab;
- let uri = NetUtil.newURI(tab.url);
- // Wanted to use nsIFaviconService here, but it only works for visited
- // tabs, so that's no help for any remote tabs. Maybe some favicon wizard
- // knows how to get high-res favicons easily, or we could offer actor
- // support for this (bug 1061654).
- tab.favicon = uri.prePath + "/favicon.ico";
- tab.name = tab.title || Strings.GetStringFromName("project_tab_loading");
- if (uri.scheme.startsWith("http")) {
- tab.name = uri.host + ": " + tab.name;
- }
- this.selectedProject.location = tab.url;
- this.selectedProject.name = tab.name;
- this.selectedProject.icon = tab.favicon;
- this.update("project-validated");
- },
-
- onTabClosed: function () {
- if (this.selectedProject.type !== "tab") {
- return;
- }
- this.selectedProject = null;
- },
-
- reloadTab: function () {
- if (this.selectedProject && this.selectedProject.type != "tab") {
- return promise.reject("tried to reload non-tab project");
- }
- return this.getTarget().then(target => {
- target.activeTab.reload();
- }, console.error.bind(console));
- },
-
- getTarget: function () {
- if (this.selectedProject.type == "mainProcess") {
- // Fx >=39 exposes a ChromeActor to debug the main process
- if (this.connection.client.mainRoot.traits.allowChromeProcess) {
- return this.connection.client.getProcess()
- .then(aResponse => {
- return TargetFactory.forRemoteTab({
- form: aResponse.form,
- client: this.connection.client,
- chrome: true
- });
- });
- } else {
- // Fx <39 exposes tab actors on the root actor
- return TargetFactory.forRemoteTab({
- form: this._listTabsResponse,
- client: this.connection.client,
- chrome: true,
- isTabActor: false
- });
- }
- }
-
- if (this.selectedProject.type == "tab") {
- return this.tabStore.getTargetForTab();
- }
-
- let app = this._getProjectFront(this.selectedProject);
- if (!app) {
- return promise.reject("Can't find app front for selected project");
- }
-
- return Task.spawn(function* () {
- // Once we asked the app to launch, the app isn't necessary completely loaded.
- // launch request only ask the app to launch and immediatly returns.
- // We have to keep trying to get app tab actors required to create its target.
-
- for (let i = 0; i < 10; i++) {
- try {
- return yield app.getTarget();
- } catch (e) {}
- let deferred = promise.defer();
- setTimeout(deferred.resolve, 500);
- yield deferred.promise;
- }
-
- AppManager.reportError("error_cantConnectToApp", app.manifest.manifestURL);
- throw new Error("can't connect to app");
- });
- },
-
- getProjectManifestURL: function (project) {
- let manifest = null;
- if (project.type == "runtimeApp") {
- manifest = project.app.manifestURL;
- }
-
- if (project.type == "hosted") {
- manifest = project.location;
- }
-
- if (project.type == "packaged" && project.packagedAppOrigin) {
- manifest = "app://" + project.packagedAppOrigin + "/manifest.webapp";
- }
-
- return manifest;
- },
-
- _getProjectFront: function (project) {
- let manifest = this.getProjectManifestURL(project);
- if (manifest && this._appsFront) {
- return this._appsFront.apps.get(manifest);
- }
- return null;
- },
-
- _selectedProject: null,
- set selectedProject(project) {
- // A regular comparison doesn't work as we recreate a new object every time
- let prev = this._selectedProject;
- if (!prev && !project) {
- return;
- } else if (prev && project && prev.type === project.type) {
- let type = project.type;
- if (type === "runtimeApp") {
- if (prev.app.manifestURL === project.app.manifestURL) {
- return;
- }
- } else if (type === "tab") {
- if (prev.app.actor === project.app.actor) {
- return;
- }
- } else if (type === "packaged" || type === "hosted") {
- if (prev.location === project.location) {
- return;
- }
- } else if (type === "mainProcess") {
- return;
- } else {
- throw new Error("Unsupported project type: " + type);
- }
- }
-
- let cancelled = false;
- this.update("before-project", { cancel: () => { cancelled = true; } });
- if (cancelled) {
- return;
- }
-
- this._selectedProject = project;
-
- // Clear out tab store's selected state, if any
- this.tabStore.selectedTab = null;
-
- if (project) {
- if (project.type == "packaged" ||
- project.type == "hosted") {
- this.validateAndUpdateProject(project);
- }
- if (project.type == "tab") {
- this.tabStore.selectedTab = project.app;
- }
- }
-
- this.update("project");
- this.checkIfProjectIsRunning();
- },
- get selectedProject() {
- return this._selectedProject;
- },
-
- removeSelectedProject: Task.async(function* () {
- let location = this.selectedProject.location;
- AppManager.selectedProject = null;
- // If the user cancels the removeProject operation, don't remove the project
- if (AppManager.selectedProject != null) {
- return;
- }
-
- yield AppProjects.remove(location);
- AppManager.update("project-removed");
- }),
-
- packageProject: Task.async(function* (project) {
- if (!project) {
- return;
- }
- if (project.type == "packaged" ||
- project.type == "hosted") {
- yield ProjectBuilding.build({
- project: project,
- logger: this.update.bind(this, "pre-package")
- });
- }
- }),
-
- _selectedRuntime: null,
- set selectedRuntime(value) {
- this._selectedRuntime = value;
- if (!value && this.selectedProject &&
- (this.selectedProject.type == "mainProcess" ||
- this.selectedProject.type == "runtimeApp" ||
- this.selectedProject.type == "tab")) {
- this.selectedProject = null;
- }
- this.update("runtime");
- },
-
- get selectedRuntime() {
- return this._selectedRuntime;
- },
-
- connectToRuntime: function (runtime) {
-
- if (this.connected && this.selectedRuntime === runtime) {
- // Already connected
- return promise.resolve();
- }
-
- let deferred = promise.defer();
-
- this.disconnectRuntime().then(() => {
- this.selectedRuntime = runtime;
-
- let onConnectedOrDisconnected = () => {
- this.connection.off(Connection.Events.CONNECTED, onConnectedOrDisconnected);
- this.connection.off(Connection.Events.DISCONNECTED, onConnectedOrDisconnected);
- if (this.connected) {
- deferred.resolve();
- } else {
- deferred.reject();
- }
- };
- this.connection.on(Connection.Events.CONNECTED, onConnectedOrDisconnected);
- this.connection.on(Connection.Events.DISCONNECTED, onConnectedOrDisconnected);
- try {
- // Reset the connection's state to defaults
- this.connection.resetOptions();
- // Only watch for errors here. Final resolution occurs above, once
- // we've reached the CONNECTED state.
- this.selectedRuntime.connect(this.connection)
- .then(null, e => deferred.reject(e));
- } catch (e) {
- deferred.reject(e);
- }
- }, deferred.reject);
-
- // Record connection result in telemetry
- let logResult = result => {
- this._telemetry.log("DEVTOOLS_WEBIDE_CONNECTION_RESULT", result);
- if (runtime.type) {
- this._telemetry.log("DEVTOOLS_WEBIDE_" + runtime.type +
- "_CONNECTION_RESULT", result);
- }
- };
- deferred.promise.then(() => logResult(true), () => logResult(false));
-
- // If successful, record connection time in telemetry
- deferred.promise.then(() => {
- const timerId = "DEVTOOLS_WEBIDE_CONNECTION_TIME_SECONDS";
- this._telemetry.startTimer(timerId);
- this.connection.once(Connection.Events.STATUS_CHANGED, () => {
- this._telemetry.stopTimer(timerId);
- });
- }).catch(() => {
- // Empty rejection handler to silence uncaught rejection warnings
- // |connectToRuntime| caller should listen for rejections.
- // Bug 1121100 may find a better way to silence these.
- });
-
- return deferred.promise;
- },
-
- _recordRuntimeInfo: Task.async(function* () {
- if (!this.connected) {
- return;
- }
- let runtime = this.selectedRuntime;
- this._telemetry.logKeyed("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE",
- runtime.type || "UNKNOWN", true);
- this._telemetry.logKeyed("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_ID",
- runtime.id || "unknown", true);
- if (!this.deviceFront) {
- this.update("runtime-telemetry");
- return;
- }
- let d = yield this.deviceFront.getDescription();
- this._telemetry.logKeyed("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_PROCESSOR",
- d.processor, true);
- this._telemetry.logKeyed("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_OS",
- d.os, true);
- this._telemetry.logKeyed("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_PLATFORM_VERSION",
- d.platformversion, true);
- this._telemetry.logKeyed("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_APP_TYPE",
- d.apptype, true);
- this._telemetry.logKeyed("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_VERSION",
- d.version, true);
- this.update("runtime-telemetry");
- }),
-
- isMainProcessDebuggable: function () {
- // Fx <39 exposes chrome tab actors on RootActor
- // Fx >=39 exposes a dedicated actor via getProcess request
- return this.connection.client &&
- this.connection.client.mainRoot &&
- this.connection.client.mainRoot.traits.allowChromeProcess ||
- (this._listTabsResponse &&
- this._listTabsResponse.consoleActor);
- },
-
- get deviceFront() {
- if (!this._listTabsResponse) {
- return null;
- }
- return getDeviceFront(this.connection.client, this._listTabsResponse);
- },
-
- get preferenceFront() {
- if (!this._listTabsResponse) {
- return null;
- }
- return getPreferenceFront(this.connection.client, this._listTabsResponse);
- },
-
- get settingsFront() {
- if (!this._listTabsResponse) {
- return null;
- }
- return getSettingsFront(this.connection.client, this._listTabsResponse);
- },
-
- disconnectRuntime: function () {
- if (!this.connected) {
- return promise.resolve();
- }
- let deferred = promise.defer();
- this.connection.once(Connection.Events.DISCONNECTED, () => deferred.resolve());
- this.connection.disconnect();
- return deferred.promise;
- },
-
- launchRuntimeApp: function () {
- if (this.selectedProject && this.selectedProject.type != "runtimeApp") {
- return promise.reject("attempting to launch a non-runtime app");
- }
- let app = this._getProjectFront(this.selectedProject);
- return app.launch();
- },
-
- launchOrReloadRuntimeApp: function () {
- if (this.selectedProject && this.selectedProject.type != "runtimeApp") {
- return promise.reject("attempting to launch / reload a non-runtime app");
- }
- let app = this._getProjectFront(this.selectedProject);
- if (!app.running) {
- return app.launch();
- } else {
- return app.reload();
- }
- },
-
- runtimeCanHandleApps: function () {
- return !!this._appsFront;
- },
-
- installAndRunProject: function () {
- let project = this.selectedProject;
-
- if (!project || (project.type != "packaged" && project.type != "hosted")) {
- console.error("Can't install project. Unknown type of project.");
- return promise.reject("Can't install");
- }
-
- if (!this._listTabsResponse) {
- this.reportError("error_cantInstallNotFullyConnected");
- return promise.reject("Can't install");
- }
-
- if (!this._appsFront) {
- console.error("Runtime doesn't have a webappsActor");
- return promise.reject("Can't install");
- }
-
- return Task.spawn(function* () {
- let self = AppManager;
-
- // Package and validate project
- yield self.packageProject(project);
- yield self.validateAndUpdateProject(project);
-
- if (project.errorsCount > 0) {
- self.reportError("error_cantInstallValidationErrors");
- return;
- }
-
- let installPromise;
-
- if (project.type != "packaged" && project.type != "hosted") {
- return promise.reject("Don't know how to install project");
- }
-
- let response;
- if (project.type == "packaged") {
- let packageDir = yield ProjectBuilding.getPackageDir(project);
- console.log("Installing app from " + packageDir);
-
- response = yield self._appsFront.installPackaged(packageDir,
- project.packagedAppOrigin);
-
- // If the packaged app specified a custom origin override,
- // we need to update the local project origin
- project.packagedAppOrigin = response.appId;
- // And ensure the indexed db on disk is also updated
- AppProjects.update(project);
- }
-
- if (project.type == "hosted") {
- let manifestURLObject = Services.io.newURI(project.location, null, null);
- let origin = Services.io.newURI(manifestURLObject.prePath, null, null);
- let appId = origin.host;
- let metadata = {
- origin: origin.spec,
- manifestURL: project.location
- };
- response = yield self._appsFront.installHosted(appId,
- metadata,
- project.manifest);
- }
-
- // Addons don't have any document to load (yet?)
- // So that there is no need to run them, installing is enough
- if (project.manifest.manifest_version || project.manifest.role === "addon") {
- return;
- }
-
- let {app} = response;
- if (!app.running) {
- let deferred = promise.defer();
- self.on("app-manager-update", function onUpdate(event, what) {
- if (what == "project-started") {
- self.off("app-manager-update", onUpdate);
- deferred.resolve();
- }
- });
- yield app.launch();
- yield deferred.promise;
- } else {
- yield app.reload();
- }
- });
- },
-
- stopRunningApp: function () {
- let app = this._getProjectFront(this.selectedProject);
- return app.close();
- },
-
- /* PROJECT VALIDATION */
-
- validateAndUpdateProject: function (project) {
- if (!project) {
- return promise.reject();
- }
-
- return Task.spawn(function* () {
-
- let packageDir = yield ProjectBuilding.getPackageDir(project);
- let validation = new AppValidator({
- type: project.type,
- // Build process may place the manifest in a non-root directory
- location: packageDir
- });
-
- yield validation.validate();
-
- if (validation.manifest) {
- let manifest = validation.manifest;
- let iconPath;
- if (manifest.icons) {
- let size = Object.keys(manifest.icons).sort((a, b) => b - a)[0];
- if (size) {
- iconPath = manifest.icons[size];
- }
- }
- if (!iconPath) {
- project.icon = AppManager.DEFAULT_PROJECT_ICON;
- } else {
- if (project.type == "hosted") {
- let manifestURL = Services.io.newURI(project.location, null, null);
- let origin = Services.io.newURI(manifestURL.prePath, null, null);
- project.icon = Services.io.newURI(iconPath, null, origin).spec;
- } else if (project.type == "packaged") {
- let projectFolder = FileUtils.File(packageDir);
- let folderURI = Services.io.newFileURI(projectFolder).spec;
- project.icon = folderURI + iconPath.replace(/^\/|\\/, "");
- }
- }
- project.manifest = validation.manifest;
-
- if ("name" in project.manifest) {
- project.name = project.manifest.name;
- } else {
- project.name = AppManager.DEFAULT_PROJECT_NAME;
- }
- } else {
- project.manifest = null;
- project.icon = AppManager.DEFAULT_PROJECT_ICON;
- project.name = AppManager.DEFAULT_PROJECT_NAME;
- }
-
- project.validationStatus = "valid";
-
- if (validation.warnings.length > 0) {
- project.warningsCount = validation.warnings.length;
- project.warnings = validation.warnings;
- project.validationStatus = "warning";
- } else {
- project.warnings = "";
- project.warningsCount = 0;
- }
-
- if (validation.errors.length > 0) {
- project.errorsCount = validation.errors.length;
- project.errors = validation.errors;
- project.validationStatus = "error";
- } else {
- project.errors = "";
- project.errorsCount = 0;
- }
-
- if (project.warningsCount && project.errorsCount) {
- project.validationStatus = "error warning";
- }
-
- if (project.type === "hosted" && project.location !== validation.manifestURL) {
- yield AppProjects.updateLocation(project, validation.manifestURL);
- } else if (AppProjects.get(project.location)) {
- yield AppProjects.update(project);
- }
-
- if (AppManager.selectedProject === project) {
- AppManager.update("project-validated");
- }
- });
- },
-
- /* RUNTIME LIST */
-
- _clearRuntimeList: function () {
- this.runtimeList = {
- usb: [],
- wifi: [],
- simulator: [],
- other: []
- };
- },
-
- _rebuildRuntimeList: function () {
- let runtimes = RuntimeScanners.listRuntimes();
- this._clearRuntimeList();
-
- // Reorganize runtimes by type
- for (let runtime of runtimes) {
- switch (runtime.type) {
- case RuntimeTypes.USB:
- this.runtimeList.usb.push(runtime);
- break;
- case RuntimeTypes.WIFI:
- this.runtimeList.wifi.push(runtime);
- break;
- case RuntimeTypes.SIMULATOR:
- this.runtimeList.simulator.push(runtime);
- break;
- default:
- this.runtimeList.other.push(runtime);
- }
- }
-
- this.update("runtime-details");
- this.update("runtime-list");
- },
-
- /* MANIFEST UTILS */
-
- writeManifest: function (project) {
- if (project.type != "packaged") {
- return promise.reject("Not a packaged app");
- }
-
- if (!project.manifest) {
- project.manifest = {};
- }
-
- let folder = project.location;
- let manifestPath = OS.Path.join(folder, "manifest.webapp");
- let text = JSON.stringify(project.manifest, null, 2);
- let encoder = new TextEncoder();
- let array = encoder.encode(text);
- return OS.File.writeAtomic(manifestPath, array, {tmpPath: manifestPath + ".tmp"});
- },
-};
-
-EventEmitter.decorate(AppManager);
diff --git a/devtools/client/webide/modules/app-projects.js b/devtools/client/webide/modules/app-projects.js
deleted file mode 100644
index 691d09064..000000000
--- a/devtools/client/webide/modules/app-projects.js
+++ /dev/null
@@ -1,235 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const {Cc, Ci, Cu, Cr} = require("chrome");
-const promise = require("promise");
-
-const EventEmitter = require("devtools/shared/event-emitter");
-const {generateUUID} = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
-const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
-
-/**
- * IndexedDB wrapper that just save project objects
- *
- * The only constraint is that project objects have to have
- * a unique `location` object.
- */
-
-const IDB = {
- _db: null,
- databaseName: "AppProjects",
-
- open: function () {
- let deferred = promise.defer();
-
- let request = indexedDB.open(IDB.databaseName, 5);
- request.onerror = function (event) {
- deferred.reject("Unable to open AppProjects indexedDB: " +
- this.error.name + " - " + this.error.message);
- };
- request.onupgradeneeded = function (event) {
- let db = event.target.result;
- db.createObjectStore("projects", { keyPath: "location" });
- };
-
- request.onsuccess = function () {
- let db = IDB._db = request.result;
- let objectStore = db.transaction("projects").objectStore("projects");
- let projects = [];
- let toRemove = [];
- objectStore.openCursor().onsuccess = function (event) {
- let cursor = event.target.result;
- if (cursor) {
- if (cursor.value.location) {
-
- // We need to make sure this object has a `.location` property.
- // The UI depends on this property.
- // This should not be needed as we make sure to register valid
- // projects, but in the past (before bug 924568), we might have
- // registered invalid objects.
-
-
- // We also want to make sure the location is valid.
- // If the location doesn't exist, we remove the project.
-
- try {
- let file = FileUtils.File(cursor.value.location);
- if (file.exists()) {
- projects.push(cursor.value);
- } else {
- toRemove.push(cursor.value.location);
- }
- } catch (e) {
- if (e.result == Cr.NS_ERROR_FILE_UNRECOGNIZED_PATH) {
- // A URL
- projects.push(cursor.value);
- }
- }
- }
- cursor.continue();
- } else {
- let removePromises = [];
- for (let location of toRemove) {
- removePromises.push(IDB.remove(location));
- }
- promise.all(removePromises).then(() => {
- deferred.resolve(projects);
- });
- }
- };
- };
-
- return deferred.promise;
- },
-
- add: function (project) {
- let deferred = promise.defer();
-
- if (!project.location) {
- // We need to make sure this object has a `.location` property.
- deferred.reject("Missing location property on project object.");
- } else {
- let transaction = IDB._db.transaction(["projects"], "readwrite");
- let objectStore = transaction.objectStore("projects");
- let request = objectStore.add(project);
- request.onerror = function (event) {
- deferred.reject("Unable to add project to the AppProjects indexedDB: " +
- this.error.name + " - " + this.error.message);
- };
- request.onsuccess = function () {
- deferred.resolve();
- };
- }
-
- return deferred.promise;
- },
-
- update: function (project) {
- let deferred = promise.defer();
-
- var transaction = IDB._db.transaction(["projects"], "readwrite");
- var objectStore = transaction.objectStore("projects");
- var request = objectStore.put(project);
- request.onerror = function (event) {
- deferred.reject("Unable to update project to the AppProjects indexedDB: " +
- this.error.name + " - " + this.error.message);
- };
- request.onsuccess = function () {
- deferred.resolve();
- };
-
- return deferred.promise;
- },
-
- remove: function (location) {
- let deferred = promise.defer();
-
- let request = IDB._db.transaction(["projects"], "readwrite")
- .objectStore("projects")
- .delete(location);
- request.onsuccess = function (event) {
- deferred.resolve();
- };
- request.onerror = function () {
- deferred.reject("Unable to delete project to the AppProjects indexedDB: " +
- this.error.name + " - " + this.error.message);
- };
-
- return deferred.promise;
- }
-};
-
-var loadDeferred = promise.defer();
-
-loadDeferred.resolve(IDB.open().then(function (projects) {
- AppProjects.projects = projects;
- AppProjects.emit("ready", projects);
-}));
-
-const AppProjects = {
- load: function () {
- return loadDeferred.promise;
- },
-
- addPackaged: function (folder) {
- let file = FileUtils.File(folder.path);
- if (!file.exists()) {
- return promise.reject("path doesn't exist");
- }
- let existingProject = this.get(folder.path);
- if (existingProject) {
- return promise.reject("Already added");
- }
- let project = {
- type: "packaged",
- location: folder.path,
- // We need a unique id, that is the app origin,
- // in order to identify the app when being installed on the device.
- // The packaged app local path is a valid id, but only on the client.
- // This origin will be used to generate the true id of an app:
- // its manifest URL.
- // If the app ends up specifying an explicit origin in its manifest,
- // we will override this random UUID on app install.
- packagedAppOrigin: generateUUID().toString().slice(1, -1)
- };
- return IDB.add(project).then(() => {
- this.projects.push(project);
- return project;
- });
- },
-
- addHosted: function (manifestURL) {
- let existingProject = this.get(manifestURL);
- if (existingProject) {
- return promise.reject("Already added");
- }
- let project = {
- type: "hosted",
- location: manifestURL
- };
- return IDB.add(project).then(() => {
- this.projects.push(project);
- return project;
- });
- },
-
- update: function (project) {
- return IDB.update(project);
- },
-
- updateLocation: function (project, newLocation) {
- return IDB.remove(project.location)
- .then(() => {
- project.location = newLocation;
- return IDB.add(project);
- });
- },
-
- remove: function (location) {
- return IDB.remove(location).then(() => {
- for (let i = 0; i < this.projects.length; i++) {
- if (this.projects[i].location == location) {
- this.projects.splice(i, 1);
- return;
- }
- }
- throw new Error("Unable to find project in AppProjects store");
- });
- },
-
- get: function (location) {
- for (let i = 0; i < this.projects.length; i++) {
- if (this.projects[i].location == location) {
- return this.projects[i];
- }
- }
- return null;
- },
-
- projects: []
-};
-
-EventEmitter.decorate(AppProjects);
-
-exports.AppProjects = AppProjects;
diff --git a/devtools/client/webide/modules/app-validator.js b/devtools/client/webide/modules/app-validator.js
deleted file mode 100644
index 750720110..000000000
--- a/devtools/client/webide/modules/app-validator.js
+++ /dev/null
@@ -1,292 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-var {Ci, Cu, CC} = require("chrome");
-const promise = require("promise");
-
-const {FileUtils} = Cu.import("resource://gre/modules/FileUtils.jsm", {});
-const Services = require("Services");
-const {Task} = require("devtools/shared/task");
-var XMLHttpRequest = CC("@mozilla.org/xmlextras/xmlhttprequest;1");
-var strings = Services.strings.createBundle("chrome://devtools/locale/app-manager.properties");
-
-function AppValidator({ type, location }) {
- this.type = type;
- this.location = location;
- this.errors = [];
- this.warnings = [];
-}
-
-AppValidator.prototype.error = function (message) {
- this.errors.push(message);
-};
-
-AppValidator.prototype.warning = function (message) {
- this.warnings.push(message);
-};
-
-AppValidator.prototype._getPackagedManifestFile = function () {
- let manifestFile = FileUtils.File(this.location);
- if (!manifestFile.exists()) {
- this.error(strings.GetStringFromName("validator.nonExistingFolder"));
- return null;
- }
- if (!manifestFile.isDirectory()) {
- this.error(strings.GetStringFromName("validator.expectProjectFolder"));
- return null;
- }
-
- let appManifestFile = manifestFile.clone();
- appManifestFile.append("manifest.webapp");
-
- let jsonManifestFile = manifestFile.clone();
- jsonManifestFile.append("manifest.json");
-
- let hasAppManifest = appManifestFile.exists() && appManifestFile.isFile();
- let hasJsonManifest = jsonManifestFile.exists() && jsonManifestFile.isFile();
-
- if (!hasAppManifest && !hasJsonManifest) {
- this.error(strings.GetStringFromName("validator.noManifestFile"));
- return null;
- }
-
- return hasAppManifest ? appManifestFile : jsonManifestFile;
-};
-
-AppValidator.prototype._getPackagedManifestURL = function () {
- let manifestFile = this._getPackagedManifestFile();
- if (!manifestFile) {
- return null;
- }
- return Services.io.newFileURI(manifestFile).spec;
-};
-
-AppValidator.checkManifest = function (manifestURL) {
- let deferred = promise.defer();
- let error;
-
- let req = new XMLHttpRequest();
- req.overrideMimeType("text/plain");
-
- try {
- req.open("GET", manifestURL, true);
- req.channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE | Ci.nsIRequest.INHIBIT_CACHING;
- } catch (e) {
- error = strings.formatStringFromName("validator.invalidManifestURL", [manifestURL], 1);
- deferred.reject(error);
- return deferred.promise;
- }
-
- req.onload = function () {
- let manifest = null;
- try {
- manifest = JSON.parse(req.responseText);
- } catch (e) {
- error = strings.formatStringFromName("validator.invalidManifestJSON", [e, manifestURL], 2);
- deferred.reject(error);
- }
-
- deferred.resolve({manifest, manifestURL});
- };
-
- req.onerror = function () {
- error = strings.formatStringFromName("validator.noAccessManifestURL", [req.statusText, manifestURL], 2);
- deferred.reject(error);
- };
-
- try {
- req.send(null);
- } catch (e) {
- error = strings.formatStringFromName("validator.noAccessManifestURL", [e, manifestURL], 2);
- deferred.reject(error);
- }
-
- return deferred.promise;
-};
-
-AppValidator.findManifestAtOrigin = function (manifestURL) {
- let fixedManifest = Services.io.newURI(manifestURL, null, null).prePath + "/manifest.webapp";
- return AppValidator.checkManifest(fixedManifest);
-};
-
-AppValidator.findManifestPath = function (manifestURL) {
- let deferred = promise.defer();
-
- if (manifestURL.endsWith("manifest.webapp")) {
- deferred.reject();
- } else {
- let fixedManifest = manifestURL + "/manifest.webapp";
- deferred.resolve(AppValidator.checkManifest(fixedManifest));
- }
-
- return deferred.promise;
-};
-
-AppValidator.checkAlternateManifest = function (manifestURL) {
- return Task.spawn(function* () {
- let result;
- try {
- result = yield AppValidator.findManifestPath(manifestURL);
- } catch (e) {
- result = yield AppValidator.findManifestAtOrigin(manifestURL);
- }
-
- return result;
- });
-};
-
-AppValidator.prototype._fetchManifest = function (manifestURL) {
- let deferred = promise.defer();
- this.manifestURL = manifestURL;
-
- AppValidator.checkManifest(manifestURL)
- .then(({manifest, manifestURL}) => {
- deferred.resolve(manifest);
- }, error => {
- AppValidator.checkAlternateManifest(manifestURL)
- .then(({manifest, manifestURL}) => {
- this.manifestURL = manifestURL;
- deferred.resolve(manifest);
- }, () => {
- this.error(error);
- deferred.resolve(null);
- });
- });
-
- return deferred.promise;
-};
-
-AppValidator.prototype._getManifest = function () {
- let manifestURL;
- if (this.type == "packaged") {
- manifestURL = this._getPackagedManifestURL();
- if (!manifestURL)
- return promise.resolve(null);
- } else if (this.type == "hosted") {
- manifestURL = this.location;
- try {
- Services.io.newURI(manifestURL, null, null);
- } catch (e) {
- this.error(strings.formatStringFromName("validator.invalidHostedManifestURL", [manifestURL, e.message], 2));
- return promise.resolve(null);
- }
- } else {
- this.error(strings.formatStringFromName("validator.invalidProjectType", [this.type], 1));
- return promise.resolve(null);
- }
- return this._fetchManifest(manifestURL);
-};
-
-AppValidator.prototype.validateManifest = function (manifest) {
- if (!manifest.name) {
- this.error(strings.GetStringFromName("validator.missNameManifestProperty"));
- }
-
- if (!manifest.icons || Object.keys(manifest.icons).length === 0) {
- this.warning(strings.GetStringFromName("validator.missIconsManifestProperty"));
- } else if (!manifest.icons["128"]) {
- this.warning(strings.GetStringFromName("validator.missIconMarketplace2"));
- }
-};
-
-AppValidator.prototype._getOriginURL = function () {
- if (this.type == "packaged") {
- let manifestURL = Services.io.newURI(this.manifestURL, null, null);
- return Services.io.newURI(".", null, manifestURL).spec;
- } else if (this.type == "hosted") {
- return Services.io.newURI(this.location, null, null).prePath;
- }
-};
-
-AppValidator.prototype.validateLaunchPath = function (manifest) {
- let deferred = promise.defer();
- // The launch_path field has to start with a `/`
- if (manifest.launch_path && manifest.launch_path[0] !== "/") {
- this.error(strings.formatStringFromName("validator.nonAbsoluteLaunchPath", [manifest.launch_path], 1));
- deferred.resolve();
- return deferred.promise;
- }
- let origin = this._getOriginURL();
- let path;
- if (this.type == "packaged") {
- path = "." + (manifest.launch_path || "/index.html");
- } else if (this.type == "hosted") {
- path = manifest.launch_path || "/";
- }
- let indexURL;
- try {
- indexURL = Services.io.newURI(path, null, Services.io.newURI(origin, null, null)).spec;
- } catch (e) {
- this.error(strings.formatStringFromName("validator.accessFailedLaunchPath", [origin + path], 1));
- deferred.resolve();
- return deferred.promise;
- }
-
- let req = new XMLHttpRequest();
- req.overrideMimeType("text/plain");
- try {
- req.open("HEAD", indexURL, true);
- req.channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE | Ci.nsIRequest.INHIBIT_CACHING;
- } catch (e) {
- this.error(strings.formatStringFromName("validator.accessFailedLaunchPath", [indexURL], 1));
- deferred.resolve();
- return deferred.promise;
- }
- req.onload = () => {
- if (req.status >= 400)
- this.error(strings.formatStringFromName("validator.accessFailedLaunchPathBadHttpCode", [indexURL, req.status], 2));
- deferred.resolve();
- };
- req.onerror = () => {
- this.error(strings.formatStringFromName("validator.accessFailedLaunchPath", [indexURL], 1));
- deferred.resolve();
- };
-
- try {
- req.send(null);
- } catch (e) {
- this.error(strings.formatStringFromName("validator.accessFailedLaunchPath", [indexURL], 1));
- deferred.resolve();
- }
-
- return deferred.promise;
-};
-
-AppValidator.prototype.validateType = function (manifest) {
- let appType = manifest.type || "web";
- if (["web", "privileged", "certified"].indexOf(appType) === -1) {
- this.error(strings.formatStringFromName("validator.invalidAppType", [appType], 1));
- } else if (this.type == "hosted" &&
- ["certified", "privileged"].indexOf(appType) !== -1) {
- this.error(strings.formatStringFromName("validator.invalidHostedPriviledges", [appType], 1));
- }
-
- // certified app are not fully supported on the simulator
- if (appType === "certified") {
- this.warning(strings.GetStringFromName("validator.noCertifiedSupport"));
- }
-};
-
-AppValidator.prototype.validate = function () {
- this.errors = [];
- this.warnings = [];
- return this._getManifest().
- then((manifest) => {
- if (manifest) {
- this.manifest = manifest;
-
- // Skip validations for add-ons
- if (manifest.role === "addon" || manifest.manifest_version) {
- return promise.resolve();
- }
-
- this.validateManifest(manifest);
- this.validateType(manifest);
- return this.validateLaunchPath(manifest);
- }
- });
-};
-
-exports.AppValidator = AppValidator;
diff --git a/devtools/client/webide/modules/build.js b/devtools/client/webide/modules/build.js
deleted file mode 100644
index 34cbcc0b7..000000000
--- a/devtools/client/webide/modules/build.js
+++ /dev/null
@@ -1,199 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const {Cu, Cc, Ci} = require("chrome");
-
-const promise = require("promise");
-const { Task } = require("devtools/shared/task");
-const { TextDecoder, OS } = Cu.import("resource://gre/modules/osfile.jsm", {});
-const Subprocess = require("sdk/system/child_process/subprocess");
-
-const ProjectBuilding = exports.ProjectBuilding = {
- fetchPackageManifest: Task.async(function* (project) {
- let manifestPath = OS.Path.join(project.location, "package.json");
- let exists = yield OS.File.exists(manifestPath);
- if (!exists) {
- // No explicit manifest, try to generate one if possible
- return this.generatePackageManifest(project);
- }
-
- let data = yield OS.File.read(manifestPath);
- data = new TextDecoder().decode(data);
- let manifest;
- try {
- manifest = JSON.parse(data);
- } catch (e) {
- throw new Error("Error while reading WebIDE manifest at: '" + manifestPath +
- "', invalid JSON: " + e.message);
- }
- return manifest;
- }),
-
- /**
- * For common frameworks in the community, attempt to detect the build
- * settings if none are defined. This makes it much easier to get started
- * with WebIDE. Later on, perhaps an add-on could define such things for
- * different frameworks.
- */
- generatePackageManifest: Task.async(function* (project) {
- // Cordova
- let cordovaConfigPath = OS.Path.join(project.location, "config.xml");
- let exists = yield OS.File.exists(cordovaConfigPath);
- if (!exists) {
- return;
- }
- let data = yield OS.File.read(cordovaConfigPath);
- data = new TextDecoder().decode(data);
- if (data.contains("cordova.apache.org")) {
- return {
- "webide": {
- "prepackage": "cordova prepare",
- "packageDir": "./platforms/firefoxos/www"
- }
- };
- }
- }),
-
- hasPrepackage: Task.async(function* (project) {
- let manifest = yield ProjectBuilding.fetchPackageManifest(project);
- return manifest && manifest.webide && "prepackage" in manifest.webide;
- }),
-
- // If the app depends on some build step, run it before pushing the app
- build: Task.async(function* ({ project, logger }) {
- if (!(yield this.hasPrepackage(project))) {
- return;
- }
-
- let manifest = yield ProjectBuilding.fetchPackageManifest(project);
-
- logger("start");
- try {
- yield this._build(project, manifest, logger);
- logger("succeed");
- } catch (e) {
- logger("failed", e);
- }
- }),
-
- _build: Task.async(function* (project, manifest, logger) {
- // Look for `webide` property
- manifest = manifest.webide;
-
- let command, cwd, args = [], env = [];
-
- // Copy frequently used env vars
- let envService = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment);
- ["HOME", "PATH"].forEach(key => {
- let value = envService.get(key);
- if (value) {
- env.push(key + "=" + value);
- }
- });
-
- if (typeof (manifest.prepackage) === "string") {
- command = manifest.prepackage.replace(/%project%/g, project.location);
- } else if (manifest.prepackage.command) {
- command = manifest.prepackage.command;
-
- args = manifest.prepackage.args || [];
- args = args.map(a => a.replace(/%project%/g, project.location));
-
- env = env.concat(manifest.prepackage.env || []);
- env = env.map(a => a.replace(/%project%/g, project.location));
-
- if (manifest.prepackage.cwd) {
- // Normalize path for Windows support (converts / to \)
- let path = OS.Path.normalize(manifest.prepackage.cwd);
- // Note that Path.join also support absolute path and argument.
- // So that if cwd is absolute, it will return cwd.
- let rel = OS.Path.join(project.location, path);
- let exists = yield OS.File.exists(rel);
- if (exists) {
- cwd = rel;
- }
- }
- } else {
- throw new Error("pre-package manifest is invalid, missing or invalid " +
- "`prepackage` attribute");
- }
-
- if (!cwd) {
- cwd = project.location;
- }
-
- logger("Running pre-package hook '" + command + "' " +
- args.join(" ") +
- " with ENV=[" + env.join(", ") + "]" +
- " at " + cwd);
-
- // Run the command through a shell command in order to support non absolute
- // paths.
- // On Windows `ComSpec` env variable is going to refer to cmd.exe,
- // Otherwise, on Linux and Mac, SHELL env variable should refer to
- // the user chosen shell program.
- // (We do not check for OS, as on windows, with cygwin, ComSpec isn't set)
- let shell = envService.get("ComSpec") || envService.get("SHELL");
- args.unshift(command);
-
- // For cmd.exe, we have to pass the `/C` option,
- // but for unix shells we need -c.
- // That to interpret next argument as a shell command.
- if (envService.exists("ComSpec")) {
- args.unshift("/C");
- } else {
- args.unshift("-c");
- }
-
- // Subprocess changes CWD, we have to save and restore it.
- let originalCwd = yield OS.File.getCurrentDirectory();
- try {
- let defer = promise.defer();
- Subprocess.call({
- command: shell,
- arguments: args,
- environment: env,
- workdir: cwd,
-
- stdout: data =>
- logger(data),
- stderr: data =>
- logger(data),
-
- done: result => {
- logger("Terminated with error code: " + result.exitCode);
- if (result.exitCode == 0) {
- defer.resolve();
- } else {
- defer.reject("pre-package command failed with error code " + result.exitCode);
- }
- }
- });
- defer.promise.then(() => {
- OS.File.setCurrentDirectory(originalCwd);
- });
- yield defer.promise;
- } catch (e) {
- throw new Error("Unable to run pre-package command '" + command + "' " +
- args.join(" ") + ":\n" + (e.message || e));
- }
- }),
-
- getPackageDir: Task.async(function* (project) {
- let manifest = yield ProjectBuilding.fetchPackageManifest(project);
- if (!manifest || !manifest.webide || !manifest.webide.packageDir) {
- return project.location;
- }
- manifest = manifest.webide;
-
- let packageDir = OS.Path.join(project.location, manifest.packageDir);
- // On Windows, replace / by \\
- packageDir = OS.Path.normalize(packageDir);
- let exists = yield OS.File.exists(packageDir);
- if (exists) {
- return packageDir;
- }
- throw new Error("Unable to resolve application package directory: '" + manifest.packageDir + "'");
- })
-};
diff --git a/devtools/client/webide/modules/config-view.js b/devtools/client/webide/modules/config-view.js
deleted file mode 100644
index 5fb07e235..000000000
--- a/devtools/client/webide/modules/config-view.js
+++ /dev/null
@@ -1,373 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const {Cu} = require("chrome");
-
-const EventEmitter = require("devtools/shared/event-emitter");
-const Services = require("Services");
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-var ConfigView;
-
-module.exports = ConfigView = function (window) {
- EventEmitter.decorate(this);
- this._doc = window.document;
- this._keys = [];
- return this;
-};
-
-ConfigView.prototype = {
- _renderByType: function (input, name, value, customType) {
- value = customType || typeof value;
-
- switch (value) {
- case "boolean":
- input.setAttribute("data-type", "boolean");
- input.setAttribute("type", "checkbox");
- break;
- case "number":
- input.setAttribute("data-type", "number");
- input.setAttribute("type", "number");
- break;
- case "object":
- input.setAttribute("data-type", "object");
- input.setAttribute("type", "text");
- break;
- default:
- input.setAttribute("data-type", "string");
- input.setAttribute("type", "text");
- break;
- }
- return input;
- },
-
- set front(front) {
- this._front = front;
- },
-
- set keys(keys) {
- this._keys = keys;
- },
-
- get keys() {
- return this._keys;
- },
-
- set kind(kind) {
- this._kind = kind;
- },
-
- set includeTypeName(include) {
- this._includeTypeName = include;
- },
-
- search: function (event) {
- if (event.target.value.length) {
- let stringMatch = new RegExp(event.target.value, "i");
-
- for (let i = 0; i < this._keys.length; i++) {
- let key = this._keys[i];
- let row = this._doc.getElementById("row-" + key);
- if (key.match(stringMatch)) {
- row.classList.remove("hide");
- } else if (row) {
- row.classList.add("hide");
- }
- }
- } else {
- var trs = this._doc.getElementById("device-fields").querySelectorAll("tr");
-
- for (let i = 0; i < trs.length; i++) {
- trs[i].classList.remove("hide");
- }
- }
- },
-
- generateDisplay: function (json) {
- let deviceItems = Object.keys(json);
- deviceItems.sort();
- this.keys = deviceItems;
- for (let i = 0; i < this.keys.length; i++) {
- let key = this.keys[i];
- this.generateField(key, json[key].value, json[key].hasUserValue);
- }
- },
-
- generateField: function (name, value, hasUserValue, customType, newRow) {
- let table = this._doc.querySelector("table");
- let sResetDefault = Strings.GetStringFromName("device_reset_default");
-
- if (this._keys.indexOf(name) === -1) {
- this._keys.push(name);
- }
-
- let input = this._doc.createElement("input");
- let tr = this._doc.createElement("tr");
- tr.setAttribute("id", "row-" + name);
- tr.classList.add("edit-row");
- let td = this._doc.createElement("td");
- td.classList.add("field-name");
- td.textContent = name;
- tr.appendChild(td);
- td = this._doc.createElement("td");
- input.classList.add("editable");
- input.setAttribute("id", name);
- input = this._renderByType(input, name, value, customType);
-
- if (customType === "boolean" || input.type === "checkbox") {
- input.checked = value;
- } else {
- if (typeof value === "object") {
- value = JSON.stringify(value);
- }
- input.value = value;
- }
-
- if (!(this._includeTypeName || isNaN(parseInt(value, 10)))) {
- input.type = "number";
- }
-
- td.appendChild(input);
- tr.appendChild(td);
- td = this._doc.createElement("td");
- td.setAttribute("id", "td-" + name);
-
- let button = this._doc.createElement("button");
- button.setAttribute("data-id", name);
- button.setAttribute("id", "btn-" + name);
- button.classList.add("reset");
- button.textContent = sResetDefault;
- td.appendChild(button);
-
- if (!hasUserValue) {
- button.classList.add("hide");
- }
-
- tr.appendChild(td);
-
- // If this is a new field, add it to the top of the table.
- if (newRow) {
- let existing = table.querySelector("#" + name);
-
- if (!existing) {
- table.insertBefore(tr, newRow);
- } else {
- existing.value = value;
- }
- } else {
- table.appendChild(tr);
- }
- },
-
- resetTable: function () {
- let table = this._doc.querySelector("table");
- let trs = table.querySelectorAll("tr:not(#add-custom-field)");
-
- for (var i = 0; i < trs.length; i++) {
- table.removeChild(trs[i]);
- }
-
- return table;
- },
-
- _getCallType: function (type, name) {
- let frontName = "get";
-
- if (this._includeTypeName) {
- frontName += type;
- }
-
- return this._front[frontName + this._kind](name);
- },
-
- _setCallType: function (type, name, value) {
- let frontName = "set";
-
- if (this._includeTypeName) {
- frontName += type;
- }
-
- return this._front[frontName + this._kind](name, value);
- },
-
- _saveByType: function (options) {
- let fieldName = options.id;
- let inputType = options.type;
- let value = options.value;
- let input = this._doc.getElementById(fieldName);
-
- switch (inputType) {
- case "boolean":
- this._setCallType("Bool", fieldName, input.checked);
- break;
- case "number":
- this._setCallType("Int", fieldName, value);
- break;
- case "object":
- try {
- value = JSON.parse(value);
- } catch (e) {}
- this._setCallType("Object", fieldName, value);
- break;
- default:
- this._setCallType("Char", fieldName, value);
- break;
- }
- },
-
- updateField: function (event) {
- if (event.target) {
- let inputType = event.target.getAttribute("data-type");
- let inputValue = event.target.checked || event.target.value;
-
- if (event.target.nodeName == "input" &&
- event.target.validity.valid &&
- event.target.classList.contains("editable")) {
- let id = event.target.id;
- if (inputType === "boolean") {
- if (event.target.checked) {
- inputValue = true;
- } else {
- inputValue = false;
- }
- }
-
- this._saveByType({
- id: id,
- type: inputType,
- value: inputValue
- });
- this._doc.getElementById("btn-" + id).classList.remove("hide");
- }
- }
- },
-
- _resetToDefault: function (name, input, button) {
- this._front["clearUser" + this._kind](name);
- let dataType = input.getAttribute("data-type");
- let tr = this._doc.getElementById("row-" + name);
-
- switch (dataType) {
- case "boolean":
- this._defaultField = this._getCallType("Bool", name);
- this._defaultField.then(boolean => {
- input.checked = boolean;
- }, () => {
- input.checked = false;
- tr.parentNode.removeChild(tr);
- });
- break;
- case "number":
- this._defaultField = this._getCallType("Int", name);
- this._defaultField.then(number => {
- input.value = number;
- }, () => {
- tr.parentNode.removeChild(tr);
- });
- break;
- case "object":
- this._defaultField = this._getCallType("Object", name);
- this._defaultField.then(object => {
- input.value = JSON.stringify(object);
- }, () => {
- tr.parentNode.removeChild(tr);
- });
- break;
- default:
- this._defaultField = this._getCallType("Char", name);
- this._defaultField.then(string => {
- input.value = string;
- }, () => {
- tr.parentNode.removeChild(tr);
- });
- break;
- }
-
- button.classList.add("hide");
- },
-
- checkReset: function (event) {
- if (event.target.classList.contains("reset")) {
- let btnId = event.target.getAttribute("data-id");
- let input = this._doc.getElementById(btnId);
- this._resetToDefault(btnId, input, event.target);
- }
- },
-
- updateFieldType: function () {
- let table = this._doc.querySelector("table");
- let customValueType = table.querySelector("#custom-value-type").value;
- let customTextEl = table.querySelector("#custom-value-text");
- let customText = customTextEl.value;
-
- if (customValueType.length === 0) {
- return false;
- }
-
- switch (customValueType) {
- case "boolean":
- customTextEl.type = "checkbox";
- customText = customTextEl.checked;
- break;
- case "number":
- customText = parseInt(customText, 10) || 0;
- customTextEl.type = "number";
- break;
- default:
- customTextEl.type = "text";
- break;
- }
-
- return customValueType;
- },
-
- clearNewFields: function () {
- let table = this._doc.querySelector("table");
- let customTextEl = table.querySelector("#custom-value-text");
- if (customTextEl.checked) {
- customTextEl.checked = false;
- } else {
- customTextEl.value = "";
- }
-
- this.updateFieldType();
- },
-
- updateNewField: function () {
- let table = this._doc.querySelector("table");
- let customValueType = this.updateFieldType();
-
- if (!customValueType) {
- return;
- }
-
- let customRow = table.querySelector("tr:nth-of-type(2)");
- let customTextEl = table.querySelector("#custom-value-text");
- let customTextNameEl = table.querySelector("#custom-value-name");
-
- if (customTextEl.validity.valid) {
- let customText = customTextEl.value;
-
- if (customValueType === "boolean") {
- customText = customTextEl.checked;
- }
-
- let customTextName = customTextNameEl.value.replace(/[^A-Za-z0-9\.\-_]/gi, "");
- this.generateField(customTextName, customText, true, customValueType, customRow);
- this._saveByType({
- id: customTextName,
- type: customValueType,
- value: customText
- });
- customTextNameEl.value = "";
- this.clearNewFields();
- }
- },
-
- checkNewFieldSubmit: function (event) {
- if (event.keyCode === 13) {
- this._doc.getElementById("custom-value").click();
- }
- }
-};
diff --git a/devtools/client/webide/modules/moz.build b/devtools/client/webide/modules/moz.build
deleted file mode 100644
index c4072b703..000000000
--- a/devtools/client/webide/modules/moz.build
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DevToolsModules(
- 'addons.js',
- 'app-manager.js',
- 'app-projects.js',
- 'app-validator.js',
- 'build.js',
- 'config-view.js',
- 'project-list.js',
- 'runtime-list.js',
- 'runtimes.js',
- 'simulator-process.js',
- 'simulators.js',
- 'tab-store.js',
- 'utils.js'
-)
diff --git a/devtools/client/webide/modules/project-list.js b/devtools/client/webide/modules/project-list.js
deleted file mode 100644
index 10766dd4f..000000000
--- a/devtools/client/webide/modules/project-list.js
+++ /dev/null
@@ -1,375 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
-* License, v. 2.0. If a copy of the MPL was not distributed with this
-* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const {Cu} = require("chrome");
-
-const Services = require("Services");
-const {AppProjects} = require("devtools/client/webide/modules/app-projects");
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const promise = require("promise");
-const EventEmitter = require("devtools/shared/event-emitter");
-const {Task} = require("devtools/shared/task");
-const utils = require("devtools/client/webide/modules/utils");
-const Telemetry = require("devtools/client/shared/telemetry");
-
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-var ProjectList;
-
-module.exports = ProjectList = function (win, parentWindow) {
- EventEmitter.decorate(this);
- this._doc = win.document;
- this._UI = parentWindow.UI;
- this._parentWindow = parentWindow;
- this._telemetry = new Telemetry();
- this._panelNodeEl = "div";
-
- this.onWebIDEUpdate = this.onWebIDEUpdate.bind(this);
- this._UI.on("webide-update", this.onWebIDEUpdate);
-
- AppManager.init();
- this.appManagerUpdate = this.appManagerUpdate.bind(this);
- AppManager.on("app-manager-update", this.appManagerUpdate);
-};
-
-ProjectList.prototype = {
- get doc() {
- return this._doc;
- },
-
- appManagerUpdate: function (event, what, details) {
- // Got a message from app-manager.js
- // See AppManager.update() for descriptions of what these events mean.
- switch (what) {
- case "project-removed":
- case "runtime-apps-icons":
- case "runtime-targets":
- case "connection":
- this.update(details);
- break;
- case "project":
- this.updateCommands();
- this.update(details);
- break;
- }
- },
-
- onWebIDEUpdate: function (event, what, details) {
- if (what == "busy" || what == "unbusy") {
- this.updateCommands();
- }
- },
-
- /**
- * testOptions: { chrome mochitest support
- * folder: nsIFile, where to store the app
- * index: Number, index of the app in the template list
- * name: String name of the app
- * }
- */
- newApp: function (testOptions) {
- let parentWindow = this._parentWindow;
- let self = this;
- return this._UI.busyUntil(Task.spawn(function* () {
- // Open newapp.xul, which will feed ret.location
- let ret = {location: null, testOptions: testOptions};
- parentWindow.openDialog("chrome://webide/content/newapp.xul", "newapp", "chrome,modal", ret);
- if (!ret.location)
- return;
-
- // Retrieve added project
- let project = AppProjects.get(ret.location);
-
- // Select project
- AppManager.selectedProject = project;
-
- self._telemetry.actionOccurred("webideNewProject");
- }), "creating new app");
- },
-
- importPackagedApp: function (location) {
- let parentWindow = this._parentWindow;
- let UI = this._UI;
- return UI.busyUntil(Task.spawn(function* () {
- let directory = utils.getPackagedDirectory(parentWindow, location);
-
- if (!directory) {
- // User cancelled directory selection
- return;
- }
-
- yield UI.importAndSelectApp(directory);
- }), "importing packaged app");
- },
-
- importHostedApp: function (location) {
- let parentWindow = this._parentWindow;
- let UI = this._UI;
- return UI.busyUntil(Task.spawn(function* () {
- let url = utils.getHostedURL(parentWindow, location);
-
- if (!url) {
- return;
- }
-
- yield UI.importAndSelectApp(url);
- }), "importing hosted app");
- },
-
- /**
- * opts: {
- * panel: Object, currenl project panel node
- * name: String, name of the project
- * icon: String path of the project icon
- * }
- */
- _renderProjectItem: function (opts) {
- let span = opts.panel.querySelector("span") || this._doc.createElement("span");
- span.textContent = opts.name;
- let icon = opts.panel.querySelector("img") || this._doc.createElement("img");
- icon.className = "project-image";
- icon.setAttribute("src", opts.icon);
- opts.panel.appendChild(icon);
- opts.panel.appendChild(span);
- opts.panel.setAttribute("title", opts.name);
- },
-
- refreshTabs: function () {
- if (AppManager.connected) {
- return AppManager.listTabs().then(() => {
- this.updateTabs();
- }).catch(console.error);
- }
- },
-
- updateTabs: function () {
- let tabsHeaderNode = this._doc.querySelector("#panel-header-tabs");
- let tabsNode = this._doc.querySelector("#project-panel-tabs");
-
- while (tabsNode.hasChildNodes()) {
- tabsNode.firstChild.remove();
- }
-
- if (!AppManager.connected) {
- tabsHeaderNode.setAttribute("hidden", "true");
- return;
- }
-
- let tabs = AppManager.tabStore.tabs;
-
- tabsHeaderNode.removeAttribute("hidden");
-
- for (let i = 0; i < tabs.length; i++) {
- let tab = tabs[i];
- let URL = this._parentWindow.URL;
- let url;
- try {
- url = new URL(tab.url);
- } catch (e) {
- // Don't try to handle invalid URLs, especially from Valence.
- continue;
- }
- // Wanted to use nsIFaviconService here, but it only works for visited
- // tabs, so that's no help for any remote tabs. Maybe some favicon wizard
- // knows how to get high-res favicons easily, or we could offer actor
- // support for this (bug 1061654).
- if (url.origin) {
- tab.favicon = url.origin + "/favicon.ico";
- }
- tab.name = tab.title || Strings.GetStringFromName("project_tab_loading");
- if (url.protocol.startsWith("http")) {
- tab.name = url.hostname + ": " + tab.name;
- }
- let panelItemNode = this._doc.createElement(this._panelNodeEl);
- panelItemNode.className = "panel-item";
- tabsNode.appendChild(panelItemNode);
- this._renderProjectItem({
- panel: panelItemNode,
- name: tab.name,
- icon: tab.favicon || AppManager.DEFAULT_PROJECT_ICON
- });
- panelItemNode.addEventListener("click", () => {
- AppManager.selectedProject = {
- type: "tab",
- app: tab,
- icon: tab.favicon || AppManager.DEFAULT_PROJECT_ICON,
- location: tab.url,
- name: tab.name
- };
- }, true);
- }
-
- return promise.resolve();
- },
-
- updateApps: function () {
- let doc = this._doc;
- let runtimeappsHeaderNode = doc.querySelector("#panel-header-runtimeapps");
- let sortedApps = [];
- for (let [manifestURL, app] of AppManager.apps) {
- sortedApps.push(app);
- }
- sortedApps = sortedApps.sort((a, b) => {
- return a.manifest.name > b.manifest.name;
- });
- let mainProcess = AppManager.isMainProcessDebuggable();
- if (AppManager.connected && (sortedApps.length > 0 || mainProcess)) {
- runtimeappsHeaderNode.removeAttribute("hidden");
- } else {
- runtimeappsHeaderNode.setAttribute("hidden", "true");
- }
-
- let runtimeAppsNode = doc.querySelector("#project-panel-runtimeapps");
- while (runtimeAppsNode.hasChildNodes()) {
- runtimeAppsNode.firstChild.remove();
- }
-
- if (mainProcess) {
- let panelItemNode = doc.createElement(this._panelNodeEl);
- panelItemNode.className = "panel-item";
- this._renderProjectItem({
- panel: panelItemNode,
- name: Strings.GetStringFromName("mainProcess_label"),
- icon: AppManager.DEFAULT_PROJECT_ICON
- });
- runtimeAppsNode.appendChild(panelItemNode);
- panelItemNode.addEventListener("click", () => {
- AppManager.selectedProject = {
- type: "mainProcess",
- name: Strings.GetStringFromName("mainProcess_label"),
- icon: AppManager.DEFAULT_PROJECT_ICON
- };
- }, true);
- }
-
- for (let i = 0; i < sortedApps.length; i++) {
- let app = sortedApps[i];
- let panelItemNode = doc.createElement(this._panelNodeEl);
- panelItemNode.className = "panel-item";
- this._renderProjectItem({
- panel: panelItemNode,
- name: app.manifest.name,
- icon: app.iconURL || AppManager.DEFAULT_PROJECT_ICON
- });
- runtimeAppsNode.appendChild(panelItemNode);
- panelItemNode.addEventListener("click", () => {
- AppManager.selectedProject = {
- type: "runtimeApp",
- app: app.manifest,
- icon: app.iconURL || AppManager.DEFAULT_PROJECT_ICON,
- name: app.manifest.name
- };
- }, true);
- }
-
- return promise.resolve();
- },
-
- updateCommands: function () {
- let doc = this._doc;
- let newAppCmd;
- let packagedAppCmd;
- let hostedAppCmd;
-
- newAppCmd = doc.querySelector("#new-app");
- packagedAppCmd = doc.querySelector("#packaged-app");
- hostedAppCmd = doc.querySelector("#hosted-app");
-
- if (!newAppCmd || !packagedAppCmd || !hostedAppCmd) {
- return;
- }
-
- if (this._parentWindow.document.querySelector("window").classList.contains("busy")) {
- newAppCmd.setAttribute("disabled", "true");
- packagedAppCmd.setAttribute("disabled", "true");
- hostedAppCmd.setAttribute("disabled", "true");
- return;
- }
-
- newAppCmd.removeAttribute("disabled");
- packagedAppCmd.removeAttribute("disabled");
- hostedAppCmd.removeAttribute("disabled");
- },
-
- /**
- * Trigger an update of the project and remote runtime list.
- * @param options object (optional)
- * An |options| object containing a type of |apps| or |tabs| will limit
- * what is updated to only those sections.
- */
- update: function (options) {
- let deferred = promise.defer();
-
- if (options && options.type === "apps") {
- return this.updateApps();
- } else if (options && options.type === "tabs") {
- return this.updateTabs();
- }
-
- let doc = this._doc;
- let projectsNode = doc.querySelector("#project-panel-projects");
-
- while (projectsNode.hasChildNodes()) {
- projectsNode.firstChild.remove();
- }
-
- AppProjects.load().then(() => {
- let projects = AppProjects.projects;
- for (let i = 0; i < projects.length; i++) {
- let project = projects[i];
- let panelItemNode = doc.createElement(this._panelNodeEl);
- panelItemNode.className = "panel-item";
- projectsNode.appendChild(panelItemNode);
- if (!project.validationStatus) {
- // The result of the validation process (storing names, icons, …) is not stored in
- // the IndexedDB database when App Manager v1 is used.
- // We need to run the validation again and update the name and icon of the app.
- AppManager.validateAndUpdateProject(project).then(() => {
- this._renderProjectItem({
- panel: panelItemNode,
- name: project.name,
- icon: project.icon
- });
- });
- } else {
- this._renderProjectItem({
- panel: panelItemNode,
- name: project.name || AppManager.DEFAULT_PROJECT_NAME,
- icon: project.icon || AppManager.DEFAULT_PROJECT_ICON
- });
- }
- panelItemNode.addEventListener("click", () => {
- AppManager.selectedProject = project;
- }, true);
- }
-
- deferred.resolve();
- }, deferred.reject);
-
- // List remote apps and the main process, if they exist
- this.updateApps();
-
- // Build the tab list right now, so it's fast...
- this.updateTabs();
-
- // But re-list them and rebuild, in case any tabs navigated since the last
- // time they were listed.
- if (AppManager.connected) {
- AppManager.listTabs().then(() => {
- this.updateTabs();
- }).catch(console.error);
- }
-
- return deferred.promise;
- },
-
- destroy: function () {
- this._doc = null;
- AppManager.off("app-manager-update", this.appManagerUpdate);
- this._UI.off("webide-update", this.onWebIDEUpdate);
- this._UI = null;
- this._parentWindow = null;
- this._panelNodeEl = null;
- }
-};
diff --git a/devtools/client/webide/modules/runtime-list.js b/devtools/client/webide/modules/runtime-list.js
deleted file mode 100644
index 295dd1705..000000000
--- a/devtools/client/webide/modules/runtime-list.js
+++ /dev/null
@@ -1,207 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
-* License, v. 2.0. If a copy of the MPL was not distributed with this
-* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-const Services = require("Services");
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const EventEmitter = require("devtools/shared/event-emitter");
-const {RuntimeScanners, WiFiScanner} = require("devtools/client/webide/modules/runtimes");
-const {Devices} = require("resource://devtools/shared/apps/Devices.jsm");
-const {Task} = require("devtools/shared/task");
-const utils = require("devtools/client/webide/modules/utils");
-
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-var RuntimeList;
-
-module.exports = RuntimeList = function (window, parentWindow) {
- EventEmitter.decorate(this);
- this._doc = window.document;
- this._UI = parentWindow.UI;
- this._Cmds = parentWindow.Cmds;
- this._parentWindow = parentWindow;
- this._panelNodeEl = "button";
- this._panelBoxEl = "div";
-
- this.onWebIDEUpdate = this.onWebIDEUpdate.bind(this);
- this._UI.on("webide-update", this.onWebIDEUpdate);
-
- AppManager.init();
- this.appManagerUpdate = this.appManagerUpdate.bind(this);
- AppManager.on("app-manager-update", this.appManagerUpdate);
-};
-
-RuntimeList.prototype = {
- get doc() {
- return this._doc;
- },
-
- appManagerUpdate: function (event, what, details) {
- // Got a message from app-manager.js
- // See AppManager.update() for descriptions of what these events mean.
- switch (what) {
- case "runtime-list":
- this.update();
- break;
- case "connection":
- case "runtime-global-actors":
- this.updateCommands();
- break;
- }
- },
-
- onWebIDEUpdate: function (event, what, details) {
- if (what == "busy" || what == "unbusy") {
- this.updateCommands();
- }
- },
-
- takeScreenshot: function () {
- this._Cmds.takeScreenshot();
- },
-
- showRuntimeDetails: function () {
- this._Cmds.showRuntimeDetails();
- },
-
- showPermissionsTable: function () {
- this._Cmds.showPermissionsTable();
- },
-
- showDevicePreferences: function () {
- this._Cmds.showDevicePrefs();
- },
-
- showSettings: function () {
- this._Cmds.showSettings();
- },
-
- showTroubleShooting: function () {
- this._Cmds.showTroubleShooting();
- },
-
- showAddons: function () {
- this._Cmds.showAddons();
- },
-
- refreshScanners: function () {
- RuntimeScanners.scan();
- },
-
- updateCommands: function () {
- let doc = this._doc;
-
- // Runtime commands
- let screenshotCmd = doc.querySelector("#runtime-screenshot");
- let permissionsCmd = doc.querySelector("#runtime-permissions");
- let detailsCmd = doc.querySelector("#runtime-details");
- let disconnectCmd = doc.querySelector("#runtime-disconnect");
- let devicePrefsCmd = doc.querySelector("#runtime-preferences");
- let settingsCmd = doc.querySelector("#runtime-settings");
-
- if (AppManager.connected) {
- if (AppManager.deviceFront) {
- detailsCmd.removeAttribute("disabled");
- permissionsCmd.removeAttribute("disabled");
- screenshotCmd.removeAttribute("disabled");
- }
- if (AppManager.preferenceFront) {
- devicePrefsCmd.removeAttribute("disabled");
- }
- if (AppManager.settingsFront) {
- settingsCmd.removeAttribute("disabled");
- }
- disconnectCmd.removeAttribute("disabled");
- } else {
- detailsCmd.setAttribute("disabled", "true");
- permissionsCmd.setAttribute("disabled", "true");
- screenshotCmd.setAttribute("disabled", "true");
- disconnectCmd.setAttribute("disabled", "true");
- devicePrefsCmd.setAttribute("disabled", "true");
- settingsCmd.setAttribute("disabled", "true");
- }
- },
-
- update: function () {
- let doc = this._doc;
- let wifiHeaderNode = doc.querySelector("#runtime-header-wifi");
-
- if (WiFiScanner.allowed) {
- wifiHeaderNode.removeAttribute("hidden");
- } else {
- wifiHeaderNode.setAttribute("hidden", "true");
- }
-
- let usbListNode = doc.querySelector("#runtime-panel-usb");
- let wifiListNode = doc.querySelector("#runtime-panel-wifi");
- let simulatorListNode = doc.querySelector("#runtime-panel-simulator");
- let otherListNode = doc.querySelector("#runtime-panel-other");
- let noHelperNode = doc.querySelector("#runtime-panel-noadbhelper");
- let noUSBNode = doc.querySelector("#runtime-panel-nousbdevice");
-
- if (Devices.helperAddonInstalled) {
- noHelperNode.setAttribute("hidden", "true");
- } else {
- noHelperNode.removeAttribute("hidden");
- }
-
- let runtimeList = AppManager.runtimeList;
-
- if (!runtimeList) {
- return;
- }
-
- if (runtimeList.usb.length === 0 && Devices.helperAddonInstalled) {
- noUSBNode.removeAttribute("hidden");
- } else {
- noUSBNode.setAttribute("hidden", "true");
- }
-
- for (let [type, parent] of [
- ["usb", usbListNode],
- ["wifi", wifiListNode],
- ["simulator", simulatorListNode],
- ["other", otherListNode],
- ]) {
- while (parent.hasChildNodes()) {
- parent.firstChild.remove();
- }
- for (let runtime of runtimeList[type]) {
- let r = runtime;
- let panelItemNode = doc.createElement(this._panelBoxEl);
- panelItemNode.className = "panel-item-complex";
-
- let connectButton = doc.createElement(this._panelNodeEl);
- connectButton.className = "panel-item runtime-panel-item-" + type;
- connectButton.textContent = r.name;
-
- connectButton.addEventListener("click", () => {
- this._UI.dismissErrorNotification();
- this._UI.connectToRuntime(r);
- }, true);
- panelItemNode.appendChild(connectButton);
-
- if (r.configure) {
- let configButton = doc.createElement(this._panelNodeEl);
- configButton.className = "configure-button";
- configButton.addEventListener("click", r.configure.bind(r), true);
- panelItemNode.appendChild(configButton);
- }
-
- parent.appendChild(panelItemNode);
- }
- }
- },
-
- destroy: function () {
- this._doc = null;
- AppManager.off("app-manager-update", this.appManagerUpdate);
- this._UI.off("webide-update", this.onWebIDEUpdate);
- this._UI = null;
- this._Cmds = null;
- this._parentWindow = null;
- this._panelNodeEl = null;
- }
-};
diff --git a/devtools/client/webide/modules/runtimes.js b/devtools/client/webide/modules/runtimes.js
deleted file mode 100644
index a23337359..000000000
--- a/devtools/client/webide/modules/runtimes.js
+++ /dev/null
@@ -1,673 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-const {Ci} = require("chrome");
-const Services = require("Services");
-const {Devices} = require("resource://devtools/shared/apps/Devices.jsm");
-const {Connection} = require("devtools/shared/client/connection-manager");
-const {DebuggerServer} = require("devtools/server/main");
-const {Simulators} = require("devtools/client/webide/modules/simulators");
-const discovery = require("devtools/shared/discovery/discovery");
-const EventEmitter = require("devtools/shared/event-emitter");
-const promise = require("promise");
-loader.lazyRequireGetter(this, "AuthenticationResult",
- "devtools/shared/security/auth", true);
-loader.lazyRequireGetter(this, "DevToolsUtils",
- "devtools/shared/DevToolsUtils");
-
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-/**
- * Runtime and Scanner API
- *
- * |RuntimeScanners| maintains a set of |Scanner| objects that produce one or
- * more |Runtime|s to connect to. Add-ons can extend the set of known runtimes
- * by registering additional |Scanner|s that emit them.
- *
- * Each |Scanner| must support the following API:
- *
- * enable()
- * Bind any event handlers and start any background work the scanner needs to
- * maintain an updated set of |Runtime|s.
- * Called when the first consumer (such as WebIDE) actively interested in
- * maintaining the |Runtime| list enables the registry.
- * disable()
- * Unbind any event handlers and stop any background work the scanner needs to
- * maintain an updated set of |Runtime|s.
- * Called when the last consumer (such as WebIDE) actively interested in
- * maintaining the |Runtime| list disables the registry.
- * emits "runtime-list-updated"
- * If the set of runtimes a |Scanner| manages has changed, it must emit this
- * event to notify consumers of changes.
- * scan()
- * Actively refreshes the list of runtimes the scanner knows about. If your
- * scanner uses an active scanning approach (as opposed to listening for
- * events when changes occur), the bulk of the work would be done here.
- * @return Promise
- * Should be resolved when scanning is complete. If scanning has no
- * well-defined end point, you can resolve immediately, as long as
- * update event is emitted later when changes are noticed.
- * listRuntimes()
- * Return the current list of runtimes known to the |Scanner| instance.
- * @return Iterable
- *
- * Each |Runtime| must support the following API:
- *
- * |type| field
- * The |type| must be one of the values from the |RuntimeTypes| object. This
- * is used for Telemetry and to support displaying sets of |Runtime|s
- * categorized by type.
- * |id| field
- * An identifier that is unique in the set of all runtimes with the same
- * |type|. WebIDE tries to save the last used runtime via type + id, and
- * tries to locate it again in the next session, so this value should attempt
- * to be stable across Firefox sessions.
- * |name| field
- * A user-visible label to identify the runtime that will be displayed in a
- * runtime list.
- * |prolongedConnection| field
- * A boolean value which should be |true| if the connection process is
- * expected to take a unknown or large amount of time. A UI may use this as a
- * hint to skip timeouts or other time-based code paths.
- * connect()
- * Configure the passed |connection| object with any settings need to
- * successfully connect to the runtime, and call the |connection|'s connect()
- * method.
- * @param Connection connection
- * A |Connection| object from the DevTools |ConnectionManager|.
- * @return Promise
- * Resolved once you've called the |connection|'s connect() method.
- * configure() OPTIONAL
- * Show a configuration screen if the runtime is configurable.
- */
-
-/* SCANNER REGISTRY */
-
-var RuntimeScanners = {
-
- _enabledCount: 0,
- _scanners: new Set(),
-
- get enabled() {
- return !!this._enabledCount;
- },
-
- add(scanner) {
- if (this.enabled) {
- // Enable any scanner added while globally enabled
- this._enableScanner(scanner);
- }
- this._scanners.add(scanner);
- this._emitUpdated();
- },
-
- remove(scanner) {
- this._scanners.delete(scanner);
- if (this.enabled) {
- // Disable any scanner removed while globally enabled
- this._disableScanner(scanner);
- }
- this._emitUpdated();
- },
-
- has(scanner) {
- return this._scanners.has(scanner);
- },
-
- scan() {
- if (!this.enabled) {
- return promise.resolve();
- }
-
- if (this._scanPromise) {
- return this._scanPromise;
- }
-
- let promises = [];
-
- for (let scanner of this._scanners) {
- promises.push(scanner.scan());
- }
-
- this._scanPromise = promise.all(promises);
-
- // Reset pending promise
- this._scanPromise.then(() => {
- this._scanPromise = null;
- }, () => {
- this._scanPromise = null;
- });
-
- return this._scanPromise;
- },
-
- listRuntimes: function* () {
- for (let scanner of this._scanners) {
- for (let runtime of scanner.listRuntimes()) {
- yield runtime;
- }
- }
- },
-
- _emitUpdated() {
- this.emit("runtime-list-updated");
- },
-
- enable() {
- if (this._enabledCount++ !== 0) {
- // Already enabled scanners during a previous call
- return;
- }
- this._emitUpdated = this._emitUpdated.bind(this);
- for (let scanner of this._scanners) {
- this._enableScanner(scanner);
- }
- },
-
- _enableScanner(scanner) {
- scanner.enable();
- scanner.on("runtime-list-updated", this._emitUpdated);
- },
-
- disable() {
- if (--this._enabledCount !== 0) {
- // Already disabled scanners during a previous call
- return;
- }
- for (let scanner of this._scanners) {
- this._disableScanner(scanner);
- }
- },
-
- _disableScanner(scanner) {
- scanner.off("runtime-list-updated", this._emitUpdated);
- scanner.disable();
- },
-
-};
-
-EventEmitter.decorate(RuntimeScanners);
-
-exports.RuntimeScanners = RuntimeScanners;
-
-/* SCANNERS */
-
-var SimulatorScanner = {
-
- _runtimes: [],
-
- enable() {
- this._updateRuntimes = this._updateRuntimes.bind(this);
- Simulators.on("updated", this._updateRuntimes);
- this._updateRuntimes();
- },
-
- disable() {
- Simulators.off("updated", this._updateRuntimes);
- },
-
- _emitUpdated() {
- this.emit("runtime-list-updated");
- },
-
- _updateRuntimes() {
- Simulators.findSimulators().then(simulators => {
- this._runtimes = [];
- for (let simulator of simulators) {
- this._runtimes.push(new SimulatorRuntime(simulator));
- }
- this._emitUpdated();
- });
- },
-
- scan() {
- return promise.resolve();
- },
-
- listRuntimes: function () {
- return this._runtimes;
- }
-
-};
-
-EventEmitter.decorate(SimulatorScanner);
-RuntimeScanners.add(SimulatorScanner);
-
-/**
- * TODO: Remove this comaptibility layer in the future (bug 1085393)
- * This runtime exists to support the ADB Helper add-on below version 0.7.0.
- *
- * This scanner will list all ADB devices as runtimes, even if they may or may
- * not actually connect (since the |DeprecatedUSBRuntime| assumes a Firefox OS
- * device).
- */
-var DeprecatedAdbScanner = {
-
- _runtimes: [],
-
- enable() {
- this._updateRuntimes = this._updateRuntimes.bind(this);
- Devices.on("register", this._updateRuntimes);
- Devices.on("unregister", this._updateRuntimes);
- Devices.on("addon-status-updated", this._updateRuntimes);
- this._updateRuntimes();
- },
-
- disable() {
- Devices.off("register", this._updateRuntimes);
- Devices.off("unregister", this._updateRuntimes);
- Devices.off("addon-status-updated", this._updateRuntimes);
- },
-
- _emitUpdated() {
- this.emit("runtime-list-updated");
- },
-
- _updateRuntimes() {
- this._runtimes = [];
- for (let id of Devices.available()) {
- let runtime = new DeprecatedUSBRuntime(id);
- this._runtimes.push(runtime);
- runtime.updateNameFromADB().then(() => {
- this._emitUpdated();
- }, () => {});
- }
- this._emitUpdated();
- },
-
- scan() {
- return promise.resolve();
- },
-
- listRuntimes: function () {
- return this._runtimes;
- }
-
-};
-
-EventEmitter.decorate(DeprecatedAdbScanner);
-RuntimeScanners.add(DeprecatedAdbScanner);
-
-// ADB Helper 0.7.0 and later will replace this scanner on startup
-exports.DeprecatedAdbScanner = DeprecatedAdbScanner;
-
-/**
- * This is a lazy ADB scanner shim which only tells the ADB Helper to start and
- * stop as needed. The real scanner that lists devices lives in ADB Helper.
- * ADB Helper 0.8.0 and later wait until these signals are received before
- * starting ADB polling. For earlier versions, they have no effect.
- */
-var LazyAdbScanner = {
-
- enable() {
- Devices.emit("adb-start-polling");
- },
-
- disable() {
- Devices.emit("adb-stop-polling");
- },
-
- scan() {
- return promise.resolve();
- },
-
- listRuntimes: function () {
- return [];
- }
-
-};
-
-EventEmitter.decorate(LazyAdbScanner);
-RuntimeScanners.add(LazyAdbScanner);
-
-var WiFiScanner = {
-
- _runtimes: [],
-
- init() {
- this.updateRegistration();
- Services.prefs.addObserver(this.ALLOWED_PREF, this, false);
- },
-
- enable() {
- this._updateRuntimes = this._updateRuntimes.bind(this);
- discovery.on("devtools-device-added", this._updateRuntimes);
- discovery.on("devtools-device-updated", this._updateRuntimes);
- discovery.on("devtools-device-removed", this._updateRuntimes);
- this._updateRuntimes();
- },
-
- disable() {
- discovery.off("devtools-device-added", this._updateRuntimes);
- discovery.off("devtools-device-updated", this._updateRuntimes);
- discovery.off("devtools-device-removed", this._updateRuntimes);
- },
-
- _emitUpdated() {
- this.emit("runtime-list-updated");
- },
-
- _updateRuntimes() {
- this._runtimes = [];
- for (let device of discovery.getRemoteDevicesWithService("devtools")) {
- this._runtimes.push(new WiFiRuntime(device));
- }
- this._emitUpdated();
- },
-
- scan() {
- discovery.scan();
- return promise.resolve();
- },
-
- listRuntimes: function () {
- return this._runtimes;
- },
-
- ALLOWED_PREF: "devtools.remote.wifi.scan",
-
- get allowed() {
- return Services.prefs.getBoolPref(this.ALLOWED_PREF);
- },
-
- updateRegistration() {
- if (this.allowed) {
- RuntimeScanners.add(WiFiScanner);
- } else {
- RuntimeScanners.remove(WiFiScanner);
- }
- this._emitUpdated();
- },
-
- observe(subject, topic, data) {
- if (data !== WiFiScanner.ALLOWED_PREF) {
- return;
- }
- WiFiScanner.updateRegistration();
- }
-
-};
-
-EventEmitter.decorate(WiFiScanner);
-WiFiScanner.init();
-
-exports.WiFiScanner = WiFiScanner;
-
-var StaticScanner = {
- enable() {},
- disable() {},
- scan() { return promise.resolve(); },
- listRuntimes() {
- let runtimes = [gRemoteRuntime];
- if (Services.prefs.getBoolPref("devtools.webide.enableLocalRuntime")) {
- runtimes.push(gLocalRuntime);
- }
- return runtimes;
- }
-};
-
-EventEmitter.decorate(StaticScanner);
-RuntimeScanners.add(StaticScanner);
-
-/* RUNTIMES */
-
-// These type strings are used for logging events to Telemetry.
-// You must update Histograms.json if new types are added.
-var RuntimeTypes = exports.RuntimeTypes = {
- USB: "USB",
- WIFI: "WIFI",
- SIMULATOR: "SIMULATOR",
- REMOTE: "REMOTE",
- LOCAL: "LOCAL",
- OTHER: "OTHER"
-};
-
-/**
- * TODO: Remove this comaptibility layer in the future (bug 1085393)
- * This runtime exists to support the ADB Helper add-on below version 0.7.0.
- *
- * This runtime assumes it is connecting to a Firefox OS device.
- */
-function DeprecatedUSBRuntime(id) {
- this._id = id;
-}
-
-DeprecatedUSBRuntime.prototype = {
- type: RuntimeTypes.USB,
- get device() {
- return Devices.getByName(this._id);
- },
- connect: function (connection) {
- if (!this.device) {
- return promise.reject(new Error("Can't find device: " + this.name));
- }
- return this.device.connect().then((port) => {
- connection.host = "localhost";
- connection.port = port;
- connection.connect();
- });
- },
- get id() {
- return this._id;
- },
- get name() {
- return this._productModel || this._id;
- },
- updateNameFromADB: function () {
- if (this._productModel) {
- return promise.reject();
- }
- let deferred = promise.defer();
- if (this.device && this.device.shell) {
- this.device.shell("getprop ro.product.model").then(stdout => {
- this._productModel = stdout;
- deferred.resolve();
- }, () => {});
- } else {
- this._productModel = null;
- deferred.reject();
- }
- return deferred.promise;
- },
-};
-
-// For testing use only
-exports._DeprecatedUSBRuntime = DeprecatedUSBRuntime;
-
-function WiFiRuntime(deviceName) {
- this.deviceName = deviceName;
-}
-
-WiFiRuntime.prototype = {
- type: RuntimeTypes.WIFI,
- // Mark runtime as taking a long time to connect
- prolongedConnection: true,
- connect: function (connection) {
- let service = discovery.getRemoteService("devtools", this.deviceName);
- if (!service) {
- return promise.reject(new Error("Can't find device: " + this.name));
- }
- connection.advertisement = service;
- connection.authenticator.sendOOB = this.sendOOB;
- // Disable the default connection timeout, since QR scanning can take an
- // unknown amount of time. This prevents spurious errors (even after
- // eventual success) from being shown.
- connection.timeoutDelay = 0;
- connection.connect();
- return promise.resolve();
- },
- get id() {
- return this.deviceName;
- },
- get name() {
- return this.deviceName;
- },
-
- /**
- * During OOB_CERT authentication, a notification dialog like this is used to
- * to display a token which the user must transfer through some mechanism to the
- * server to authenticate the devices.
- *
- * This implementation presents the token as text for the user to transfer
- * manually. For a mobile device, you should override this implementation with
- * something more convenient, such as displaying a QR code.
- *
- * This method receives an object containing:
- * @param host string
- * The host name or IP address of the debugger server.
- * @param port number
- * The port number of the debugger server.
- * @param cert object (optional)
- * The server's cert details.
- * @param authResult AuthenticationResult
- * Authentication result sent from the server.
- * @param oob object (optional)
- * The token data to be transferred during OOB_CERT step 8:
- * * sha256: hash(ClientCert)
- * * k : K(random 128-bit number)
- * @return object containing:
- * * close: Function to hide the notification
- */
- sendOOB(session) {
- const WINDOW_ID = "devtools:wifi-auth";
- let { authResult } = session;
- // Only show in the PENDING state
- if (authResult != AuthenticationResult.PENDING) {
- throw new Error("Expected PENDING result, got " + authResult);
- }
-
- // Listen for the window our prompt opens, so we can close it programatically
- let promptWindow;
- let windowListener = {
- onOpenWindow(xulWindow) {
- let win = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindow);
- win.addEventListener("load", function listener() {
- win.removeEventListener("load", listener, false);
- if (win.document.documentElement.getAttribute("id") != WINDOW_ID) {
- return;
- }
- // Found the window
- promptWindow = win;
- Services.wm.removeListener(windowListener);
- }, false);
- },
- onCloseWindow() {},
- onWindowTitleChange() {}
- };
- Services.wm.addListener(windowListener);
-
- // |openDialog| is typically a blocking API, so |executeSoon| to get around this
- DevToolsUtils.executeSoon(() => {
- // Height determines the size of the QR code. Force a minimum size to
- // improve scanability.
- const MIN_HEIGHT = 600;
- let win = Services.wm.getMostRecentWindow("devtools:webide");
- let width = win.outerWidth * 0.8;
- let height = Math.max(win.outerHeight * 0.5, MIN_HEIGHT);
- win.openDialog("chrome://webide/content/wifi-auth.xhtml",
- WINDOW_ID,
- "modal=yes,width=" + width + ",height=" + height, session);
- });
-
- return {
- close() {
- if (!promptWindow) {
- return;
- }
- promptWindow.close();
- promptWindow = null;
- }
- };
- }
-};
-
-// For testing use only
-exports._WiFiRuntime = WiFiRuntime;
-
-function SimulatorRuntime(simulator) {
- this.simulator = simulator;
-}
-
-SimulatorRuntime.prototype = {
- type: RuntimeTypes.SIMULATOR,
- connect: function (connection) {
- return this.simulator.launch().then(port => {
- connection.host = "localhost";
- connection.port = port;
- connection.keepConnecting = true;
- connection.once(Connection.Events.DISCONNECTED, e => this.simulator.kill());
- connection.connect();
- });
- },
- configure() {
- Simulators.emit("configure", this.simulator);
- },
- get id() {
- return this.simulator.id;
- },
- get name() {
- return this.simulator.name;
- },
-};
-
-// For testing use only
-exports._SimulatorRuntime = SimulatorRuntime;
-
-var gLocalRuntime = {
- type: RuntimeTypes.LOCAL,
- connect: function (connection) {
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
- DebuggerServer.allowChromeProcess = true;
- connection.host = null; // Force Pipe transport
- connection.port = null;
- connection.connect();
- return promise.resolve();
- },
- get id() {
- return "local";
- },
- get name() {
- return Strings.GetStringFromName("local_runtime");
- },
-};
-
-// For testing use only
-exports._gLocalRuntime = gLocalRuntime;
-
-var gRemoteRuntime = {
- type: RuntimeTypes.REMOTE,
- connect: function (connection) {
- let win = Services.wm.getMostRecentWindow("devtools:webide");
- if (!win) {
- return promise.reject(new Error("No WebIDE window found"));
- }
- let ret = {value: connection.host + ":" + connection.port};
- let title = Strings.GetStringFromName("remote_runtime_promptTitle");
- let message = Strings.GetStringFromName("remote_runtime_promptMessage");
- let ok = Services.prompt.prompt(win, title, message, ret, null, {});
- let [host, port] = ret.value.split(":");
- if (!ok) {
- return promise.reject({canceled: true});
- }
- if (!host || !port) {
- return promise.reject(new Error("Invalid host or port"));
- }
- connection.host = host;
- connection.port = port;
- connection.connect();
- return promise.resolve();
- },
- get name() {
- return Strings.GetStringFromName("remote_runtime");
- },
-};
-
-// For testing use only
-exports._gRemoteRuntime = gRemoteRuntime;
diff --git a/devtools/client/webide/modules/simulator-process.js b/devtools/client/webide/modules/simulator-process.js
deleted file mode 100644
index 7d0b57cc6..000000000
--- a/devtools/client/webide/modules/simulator-process.js
+++ /dev/null
@@ -1,325 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-"use strict";
-
-const { Cc, Ci, Cu } = require("chrome");
-
-const Environment = require("sdk/system/environment").env;
-const EventEmitter = require("devtools/shared/event-emitter");
-const promise = require("promise");
-const Subprocess = require("sdk/system/child_process/subprocess");
-const Services = require("Services");
-
-loader.lazyGetter(this, "OS", () => {
- const Runtime = require("sdk/system/runtime");
- switch (Runtime.OS) {
- case "Darwin":
- return "mac64";
- case "Linux":
- if (Runtime.XPCOMABI.indexOf("x86_64") === 0) {
- return "linux64";
- } else {
- return "linux32";
- }
- case "WINNT":
- return "win32";
- default:
- return "";
- }
-});
-
-function SimulatorProcess() {}
-SimulatorProcess.prototype = {
-
- // Check if B2G is running.
- get isRunning() {
- return !!this.process;
- },
-
- // Start the process and connect the debugger client.
- run() {
-
- // Resolve B2G binary.
- let b2g = this.b2gBinary;
- if (!b2g || !b2g.exists()) {
- throw Error("B2G executable not found.");
- }
-
- // Ensure Gaia profile exists.
- let gaia = this.gaiaProfile;
- if (!gaia || !gaia.exists()) {
- throw Error("Gaia profile directory not found.");
- }
-
- this.once("stdout", function () {
- if (OS == "mac64") {
- console.debug("WORKAROUND run osascript to show b2g-desktop window on OS=='mac64'");
- // Escape double quotes and escape characters for use in AppleScript.
- let path = b2g.path.replace(/\\/g, "\\\\").replace(/\"/g, '\\"');
-
- Subprocess.call({
- command: "/usr/bin/osascript",
- arguments: ["-e", 'tell application "' + path + '" to activate'],
- });
- }
- });
-
- let logHandler = (e, data) => this.log(e, data.trim());
- this.on("stdout", logHandler);
- this.on("stderr", logHandler);
- this.once("exit", () => {
- this.off("stdout", logHandler);
- this.off("stderr", logHandler);
- });
-
- let environment;
- if (OS.indexOf("linux") > -1) {
- environment = ["TMPDIR=" + Services.dirsvc.get("TmpD", Ci.nsIFile).path];
- ["DISPLAY", "XAUTHORITY"].forEach(key => {
- if (key in Environment) {
- environment.push(key + "=" + Environment[key]);
- }
- });
- }
-
- // Spawn a B2G instance.
- this.process = Subprocess.call({
- command: b2g,
- arguments: this.args,
- environment: environment,
- stdout: data => this.emit("stdout", data),
- stderr: data => this.emit("stderr", data),
- // On B2G instance exit, reset tracked process, remote debugger port and
- // shuttingDown flag, then finally emit an exit event.
- done: result => {
- console.log("B2G terminated with " + result.exitCode);
- this.process = null;
- this.emit("exit", result.exitCode);
- }
- });
- },
-
- // Request a B2G instance kill.
- kill() {
- let deferred = promise.defer();
- if (this.process) {
- this.once("exit", (e, exitCode) => {
- this.shuttingDown = false;
- deferred.resolve(exitCode);
- });
- if (!this.shuttingDown) {
- this.shuttingDown = true;
- this.emit("kill", null);
- this.process.kill();
- }
- return deferred.promise;
- } else {
- return promise.resolve(undefined);
- }
- },
-
- // Maybe log output messages.
- log(level, message) {
- if (!Services.prefs.getBoolPref("devtools.webide.logSimulatorOutput")) {
- return;
- }
- if (level === "stderr" || level === "error") {
- console.error(message);
- return;
- }
- console.log(message);
- },
-
- // Compute B2G CLI arguments.
- get args() {
- let args = [];
-
- // Gaia profile.
- args.push("-profile", this.gaiaProfile.path);
-
- // Debugger server port.
- let port = parseInt(this.options.port);
- args.push("-start-debugger-server", "" + port);
-
- // Screen size.
- let width = parseInt(this.options.width);
- let height = parseInt(this.options.height);
- if (width && height) {
- args.push("-screen", width + "x" + height);
- }
-
- // Ignore eventual zombie instances of b2g that are left over.
- args.push("-no-remote");
-
- // If we are running a simulator based on Mulet,
- // we have to override the default chrome URL
- // in order to prevent the Browser UI to appear.
- if (this.b2gBinary.leafName.includes("firefox")) {
- args.push("-chrome", "chrome://b2g/content/shell.html");
- }
-
- return args;
- },
-};
-
-EventEmitter.decorate(SimulatorProcess.prototype);
-
-
-function CustomSimulatorProcess(options) {
- this.options = options;
-}
-
-var CSPp = CustomSimulatorProcess.prototype = Object.create(SimulatorProcess.prototype);
-
-// Compute B2G binary file handle.
-Object.defineProperty(CSPp, "b2gBinary", {
- get: function () {
- let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
- file.initWithPath(this.options.b2gBinary);
- return file;
- }
-});
-
-// Compute Gaia profile file handle.
-Object.defineProperty(CSPp, "gaiaProfile", {
- get: function () {
- let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
- file.initWithPath(this.options.gaiaProfile);
- return file;
- }
-});
-
-exports.CustomSimulatorProcess = CustomSimulatorProcess;
-
-
-function AddonSimulatorProcess(addon, options) {
- this.addon = addon;
- this.options = options;
-}
-
-var ASPp = AddonSimulatorProcess.prototype = Object.create(SimulatorProcess.prototype);
-
-// Compute B2G binary file handle.
-Object.defineProperty(ASPp, "b2gBinary", {
- get: function () {
- let file;
- try {
- let pref = "extensions." + this.addon.id + ".customRuntime";
- file = Services.prefs.getComplexValue(pref, Ci.nsIFile);
- } catch (e) {}
-
- if (!file) {
- file = this.addon.getResourceURI().QueryInterface(Ci.nsIFileURL).file;
- file.append("b2g");
- let binaries = {
- win32: "b2g-bin.exe",
- mac64: "B2G.app/Contents/MacOS/b2g-bin",
- linux32: "b2g-bin",
- linux64: "b2g-bin",
- };
- binaries[OS].split("/").forEach(node => file.append(node));
- }
- // If the binary doesn't exists, it may be because of a simulator
- // based on mulet, which has a different binary name.
- if (!file.exists()) {
- file = this.addon.getResourceURI().QueryInterface(Ci.nsIFileURL).file;
- file.append("firefox");
- let binaries = {
- win32: "firefox.exe",
- mac64: "FirefoxNightly.app/Contents/MacOS/firefox-bin",
- linux32: "firefox-bin",
- linux64: "firefox-bin",
- };
- binaries[OS].split("/").forEach(node => file.append(node));
- }
- return file;
- }
-});
-
-// Compute Gaia profile file handle.
-Object.defineProperty(ASPp, "gaiaProfile", {
- get: function () {
- let file;
-
- // Custom profile from simulator configuration.
- if (this.options.gaiaProfile) {
- file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
- file.initWithPath(this.options.gaiaProfile);
- return file;
- }
-
- // Custom profile from addon prefs.
- try {
- let pref = "extensions." + this.addon.id + ".gaiaProfile";
- file = Services.prefs.getComplexValue(pref, Ci.nsIFile);
- return file;
- } catch (e) {}
-
- // Default profile from addon.
- file = this.addon.getResourceURI().QueryInterface(Ci.nsIFileURL).file;
- file.append("profile");
- return file;
- }
-});
-
-exports.AddonSimulatorProcess = AddonSimulatorProcess;
-
-
-function OldAddonSimulatorProcess(addon, options) {
- this.addon = addon;
- this.options = options;
-}
-
-var OASPp = OldAddonSimulatorProcess.prototype = Object.create(AddonSimulatorProcess.prototype);
-
-// Compute B2G binary file handle.
-Object.defineProperty(OASPp, "b2gBinary", {
- get: function () {
- let file;
- try {
- let pref = "extensions." + this.addon.id + ".customRuntime";
- file = Services.prefs.getComplexValue(pref, Ci.nsIFile);
- } catch (e) {}
-
- if (!file) {
- file = this.addon.getResourceURI().QueryInterface(Ci.nsIFileURL).file;
- let version = this.addon.name.match(/\d+\.\d+/)[0].replace(/\./, "_");
- file.append("resources");
- file.append("fxos_" + version + "_simulator");
- file.append("data");
- file.append(OS == "linux32" ? "linux" : OS);
- let binaries = {
- win32: "b2g/b2g-bin.exe",
- mac64: "B2G.app/Contents/MacOS/b2g-bin",
- linux32: "b2g/b2g-bin",
- linux64: "b2g/b2g-bin",
- };
- binaries[OS].split("/").forEach(node => file.append(node));
- }
- return file;
- }
-});
-
-// Compute B2G CLI arguments.
-Object.defineProperty(OASPp, "args", {
- get: function () {
- let args = [];
-
- // Gaia profile.
- args.push("-profile", this.gaiaProfile.path);
-
- // Debugger server port.
- let port = parseInt(this.options.port);
- args.push("-dbgport", "" + port);
-
- // Ignore eventual zombie instances of b2g that are left over.
- args.push("-no-remote");
-
- return args;
- }
-});
-
-exports.OldAddonSimulatorProcess = OldAddonSimulatorProcess;
diff --git a/devtools/client/webide/modules/simulators.js b/devtools/client/webide/modules/simulators.js
deleted file mode 100644
index f09df9e05..000000000
--- a/devtools/client/webide/modules/simulators.js
+++ /dev/null
@@ -1,368 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-const { AddonManager } = require("resource://gre/modules/AddonManager.jsm");
-const { Task } = require("devtools/shared/task");
-loader.lazyRequireGetter(this, "ConnectionManager", "devtools/shared/client/connection-manager", true);
-loader.lazyRequireGetter(this, "AddonSimulatorProcess", "devtools/client/webide/modules/simulator-process", true);
-loader.lazyRequireGetter(this, "OldAddonSimulatorProcess", "devtools/client/webide/modules/simulator-process", true);
-loader.lazyRequireGetter(this, "CustomSimulatorProcess", "devtools/client/webide/modules/simulator-process", true);
-const asyncStorage = require("devtools/shared/async-storage");
-const EventEmitter = require("devtools/shared/event-emitter");
-const promise = require("promise");
-const Services = require("Services");
-
-const SimulatorRegExp = new RegExp(Services.prefs.getCharPref("devtools.webide.simulatorAddonRegExp"));
-const LocaleCompare = (a, b) => {
- return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
-};
-
-var Simulators = {
-
- // The list of simulator configurations.
- _simulators: [],
-
- /**
- * Load a previously saved list of configurations (only once).
- *
- * @return Promise.
- */
- _load() {
- if (this._loadingPromise) {
- return this._loadingPromise;
- }
-
- this._loadingPromise = Task.spawn(function* () {
- let jobs = [];
-
- let value = yield asyncStorage.getItem("simulators");
- if (Array.isArray(value)) {
- value.forEach(options => {
- let simulator = new Simulator(options);
- Simulators.add(simulator, true);
-
- // If the simulator had a reference to an addon, fix it.
- if (options.addonID) {
- let deferred = promise.defer();
- AddonManager.getAddonByID(options.addonID, addon => {
- simulator.addon = addon;
- delete simulator.options.addonID;
- deferred.resolve();
- });
- jobs.push(deferred.promise);
- }
- });
- }
-
- yield promise.all(jobs);
- yield Simulators._addUnusedAddons();
- Simulators.emitUpdated();
- return Simulators._simulators;
- });
-
- return this._loadingPromise;
- },
-
- /**
- * Add default simulators to the list for each new (unused) addon.
- *
- * @return Promise.
- */
- _addUnusedAddons: Task.async(function* () {
- let jobs = [];
-
- let addons = yield Simulators.findSimulatorAddons();
- addons.forEach(addon => {
- jobs.push(Simulators.addIfUnusedAddon(addon, true));
- });
-
- yield promise.all(jobs);
- }),
-
- /**
- * Save the current list of configurations.
- *
- * @return Promise.
- */
- _save: Task.async(function* () {
- yield this._load();
-
- let value = Simulators._simulators.map(simulator => {
- let options = JSON.parse(JSON.stringify(simulator.options));
- if (simulator.addon != null) {
- options.addonID = simulator.addon.id;
- }
- return options;
- });
-
- yield asyncStorage.setItem("simulators", value);
- }),
-
- /**
- * List all available simulators.
- *
- * @return Promised simulator list.
- */
- findSimulators: Task.async(function* () {
- yield this._load();
- return Simulators._simulators;
- }),
-
- /**
- * List all installed simulator addons.
- *
- * @return Promised addon list.
- */
- findSimulatorAddons() {
- let deferred = promise.defer();
- AddonManager.getAllAddons(all => {
- let addons = [];
- for (let addon of all) {
- if (Simulators.isSimulatorAddon(addon)) {
- addons.push(addon);
- }
- }
- // Sort simulator addons by name.
- addons.sort(LocaleCompare);
- deferred.resolve(addons);
- });
- return deferred.promise;
- },
-
- /**
- * Add a new simulator for `addon` if no other simulator uses it.
- */
- addIfUnusedAddon(addon, silently = false) {
- let simulators = this._simulators;
- let matching = simulators.filter(s => s.addon && s.addon.id == addon.id);
- if (matching.length > 0) {
- return promise.resolve();
- }
- let options = {};
- options.name = addon.name.replace(" Simulator", "");
- // Some addons specify a simulator type at the end of their version string,
- // e.g. "2_5_tv".
- let type = this.simulatorAddonVersion(addon).split("_")[2];
- if (type) {
- // "tv" is shorthand for type "television".
- options.type = (type === "tv" ? "television" : type);
- }
- return this.add(new Simulator(options, addon), silently);
- },
-
- // TODO (Bug 1146521) Maybe find a better way to deal with removed addons?
- removeIfUsingAddon(addon) {
- let simulators = this._simulators;
- let remaining = simulators.filter(s => !s.addon || s.addon.id != addon.id);
- this._simulators = remaining;
- if (remaining.length !== simulators.length) {
- this.emitUpdated();
- }
- },
-
- /**
- * Add a new simulator to the list. Caution: `simulator.name` may be modified.
- *
- * @return Promise to added simulator.
- */
- add(simulator, silently = false) {
- let simulators = this._simulators;
- let uniqueName = this.uniqueName(simulator.options.name);
- simulator.options.name = uniqueName;
- simulators.push(simulator);
- if (!silently) {
- this.emitUpdated();
- }
- return promise.resolve(simulator);
- },
-
- /**
- * Remove a simulator from the list.
- */
- remove(simulator) {
- let simulators = this._simulators;
- let remaining = simulators.filter(s => s !== simulator);
- this._simulators = remaining;
- if (remaining.length !== simulators.length) {
- this.emitUpdated();
- }
- },
-
- /**
- * Get a unique name for a simulator (may add a suffix, e.g. "MyName (1)").
- */
- uniqueName(name) {
- let simulators = this._simulators;
-
- let names = {};
- simulators.forEach(simulator => names[simulator.name] = true);
-
- // Strip any previous suffix, add a new suffix if necessary.
- let stripped = name.replace(/ \(\d+\)$/, "");
- let unique = stripped;
- for (let i = 1; names[unique]; i++) {
- unique = stripped + " (" + i + ")";
- }
- return unique;
- },
-
- /**
- * Compare an addon's ID against the expected form of a simulator addon ID,
- * and try to extract its version if there is a match.
- *
- * Note: If a simulator addon is recognized, but no version can be extracted
- * (e.g. custom RegExp pref value), we return "Unknown" to keep the returned
- * value 'truthy'.
- */
- simulatorAddonVersion(addon) {
- let match = SimulatorRegExp.exec(addon.id);
- if (!match) {
- return null;
- }
- let version = match[1];
- return version || "Unknown";
- },
-
- /**
- * Detect simulator addons, including "unofficial" ones.
- */
- isSimulatorAddon(addon) {
- return !!this.simulatorAddonVersion(addon);
- },
-
- emitUpdated() {
- this.emit("updated", { length: this._simulators.length });
- this._simulators.sort(LocaleCompare);
- this._save();
- },
-
- onConfigure(e, simulator) {
- this._lastConfiguredSimulator = simulator;
- },
-
- onInstalled(addon) {
- if (this.isSimulatorAddon(addon)) {
- this.addIfUnusedAddon(addon);
- }
- },
-
- onEnabled(addon) {
- if (this.isSimulatorAddon(addon)) {
- this.addIfUnusedAddon(addon);
- }
- },
-
- onDisabled(addon) {
- if (this.isSimulatorAddon(addon)) {
- this.removeIfUsingAddon(addon);
- }
- },
-
- onUninstalled(addon) {
- if (this.isSimulatorAddon(addon)) {
- this.removeIfUsingAddon(addon);
- }
- },
-};
-exports.Simulators = Simulators;
-AddonManager.addAddonListener(Simulators);
-EventEmitter.decorate(Simulators);
-Simulators.on("configure", Simulators.onConfigure.bind(Simulators));
-
-function Simulator(options = {}, addon = null) {
- this.addon = addon;
- this.options = options;
-
- // Fill `this.options` with default values where needed.
- let defaults = this.defaults;
- for (let option in defaults) {
- if (this.options[option] == null) {
- this.options[option] = defaults[option];
- }
- }
-}
-Simulator.prototype = {
-
- // Default simulation options.
- _defaults: {
- // Based on the Firefox OS Flame.
- phone: {
- width: 320,
- height: 570,
- pixelRatio: 1.5
- },
- // Based on a 720p HD TV.
- television: {
- width: 1280,
- height: 720,
- pixelRatio: 1,
- }
- },
- _defaultType: "phone",
-
- restoreDefaults() {
- let defaults = this.defaults;
- let options = this.options;
- for (let option in defaults) {
- options[option] = defaults[option];
- }
- },
-
- launch() {
- // Close already opened simulation.
- if (this.process) {
- return this.kill().then(this.launch.bind(this));
- }
-
- this.options.port = ConnectionManager.getFreeTCPPort();
-
- // Choose simulator process type.
- if (this.options.b2gBinary) {
- // Custom binary.
- this.process = new CustomSimulatorProcess(this.options);
- } else if (this.version > "1.3") {
- // Recent simulator addon.
- this.process = new AddonSimulatorProcess(this.addon, this.options);
- } else {
- // Old simulator addon.
- this.process = new OldAddonSimulatorProcess(this.addon, this.options);
- }
- this.process.run();
-
- return promise.resolve(this.options.port);
- },
-
- kill() {
- let process = this.process;
- if (!process) {
- return promise.resolve();
- }
- this.process = null;
- return process.kill();
- },
-
- get defaults() {
- let defaults = this._defaults;
- return defaults[this.type] || defaults[this._defaultType];
- },
-
- get id() {
- return this.name;
- },
-
- get name() {
- return this.options.name;
- },
-
- get type() {
- return this.options.type || this._defaultType;
- },
-
- get version() {
- return this.options.b2gBinary ? "Custom" : this.addon.name.match(/\d+\.\d+/)[0];
- },
-};
-exports.Simulator = Simulator;
diff --git a/devtools/client/webide/modules/tab-store.js b/devtools/client/webide/modules/tab-store.js
deleted file mode 100644
index 0fed366cc..000000000
--- a/devtools/client/webide/modules/tab-store.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const { Cu } = require("chrome");
-
-const { TargetFactory } = require("devtools/client/framework/target");
-const EventEmitter = require("devtools/shared/event-emitter");
-const { Connection } = require("devtools/shared/client/connection-manager");
-const promise = require("promise");
-const { Task } = require("devtools/shared/task");
-
-const _knownTabStores = new WeakMap();
-
-var TabStore;
-
-module.exports = TabStore = function (connection) {
- // If we already know about this connection,
- // let's re-use the existing store.
- if (_knownTabStores.has(connection)) {
- return _knownTabStores.get(connection);
- }
-
- _knownTabStores.set(connection, this);
-
- EventEmitter.decorate(this);
-
- this._resetStore();
-
- this.destroy = this.destroy.bind(this);
- this._onStatusChanged = this._onStatusChanged.bind(this);
-
- this._connection = connection;
- this._connection.once(Connection.Events.DESTROYED, this.destroy);
- this._connection.on(Connection.Events.STATUS_CHANGED, this._onStatusChanged);
- this._onTabListChanged = this._onTabListChanged.bind(this);
- this._onTabNavigated = this._onTabNavigated.bind(this);
- this._onStatusChanged();
- return this;
-};
-
-TabStore.prototype = {
-
- destroy: function () {
- if (this._connection) {
- // While this.destroy is bound using .once() above, that event may not
- // have occurred when the TabStore client calls destroy, so we
- // manually remove it here.
- this._connection.off(Connection.Events.DESTROYED, this.destroy);
- this._connection.off(Connection.Events.STATUS_CHANGED, this._onStatusChanged);
- _knownTabStores.delete(this._connection);
- this._connection = null;
- }
- },
-
- _resetStore: function () {
- this.response = null;
- this.tabs = [];
- this._selectedTab = null;
- this._selectedTabTargetPromise = null;
- },
-
- _onStatusChanged: function () {
- if (this._connection.status == Connection.Status.CONNECTED) {
- // Watch for changes to remote browser tabs
- this._connection.client.addListener("tabListChanged",
- this._onTabListChanged);
- this._connection.client.addListener("tabNavigated",
- this._onTabNavigated);
- this.listTabs();
- } else {
- if (this._connection.client) {
- this._connection.client.removeListener("tabListChanged",
- this._onTabListChanged);
- this._connection.client.removeListener("tabNavigated",
- this._onTabNavigated);
- }
- this._resetStore();
- }
- },
-
- _onTabListChanged: function () {
- this.listTabs().then(() => this.emit("tab-list"))
- .catch(console.error);
- },
-
- _onTabNavigated: function (e, { from, title, url }) {
- if (!this._selectedTab || from !== this._selectedTab.actor) {
- return;
- }
- this._selectedTab.url = url;
- this._selectedTab.title = title;
- this.emit("navigate");
- },
-
- listTabs: function () {
- if (!this._connection || !this._connection.client) {
- return promise.reject(new Error("Can't listTabs, not connected."));
- }
- let deferred = promise.defer();
- this._connection.client.listTabs(response => {
- if (response.error) {
- this._connection.disconnect();
- deferred.reject(response.error);
- return;
- }
- let tabsChanged = JSON.stringify(this.tabs) !== JSON.stringify(response.tabs);
- this.response = response;
- this.tabs = response.tabs;
- this._checkSelectedTab();
- if (tabsChanged) {
- this.emit("tab-list");
- }
- deferred.resolve(response);
- });
- return deferred.promise;
- },
-
- // TODO: Tab "selection" should really take place by creating a TabProject
- // which is the selected project. This should be done as part of the
- // project-agnostic work.
- _selectedTab: null,
- _selectedTabTargetPromise: null,
- get selectedTab() {
- return this._selectedTab;
- },
- set selectedTab(tab) {
- if (this._selectedTab === tab) {
- return;
- }
- this._selectedTab = tab;
- this._selectedTabTargetPromise = null;
- // Attach to the tab to follow navigation events
- if (this._selectedTab) {
- this.getTargetForTab();
- }
- },
-
- _checkSelectedTab: function () {
- if (!this._selectedTab) {
- return;
- }
- let alive = this.tabs.some(tab => {
- return tab.actor === this._selectedTab.actor;
- });
- if (!alive) {
- this._selectedTab = null;
- this._selectedTabTargetPromise = null;
- this.emit("closed");
- }
- },
-
- getTargetForTab: function () {
- if (this._selectedTabTargetPromise) {
- return this._selectedTabTargetPromise;
- }
- let store = this;
- this._selectedTabTargetPromise = Task.spawn(function* () {
- // If you connect to a tab, then detach from it, the root actor may have
- // de-listed the actors that belong to the tab. This breaks the toolbox
- // if you try to connect to the same tab again. To work around this
- // issue, we force a "listTabs" request before connecting to a tab.
- yield store.listTabs();
- return TargetFactory.forRemoteTab({
- form: store._selectedTab,
- client: store._connection.client,
- chrome: false
- });
- });
- this._selectedTabTargetPromise.then(target => {
- target.once("close", () => {
- this._selectedTabTargetPromise = null;
- });
- });
- return this._selectedTabTargetPromise;
- },
-
-};
diff --git a/devtools/client/webide/modules/utils.js b/devtools/client/webide/modules/utils.js
deleted file mode 100644
index 7a19c7044..000000000
--- a/devtools/client/webide/modules/utils.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-const { Cc, Cu, Ci } = require("chrome");
-const { FileUtils } = Cu.import("resource://gre/modules/FileUtils.jsm", {});
-const Services = require("Services");
-const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
-
-function doesFileExist(location) {
- let file = new FileUtils.File(location);
- return file.exists();
-}
-exports.doesFileExist = doesFileExist;
-
-function _getFile(location, ...pickerParams) {
- if (location) {
- return new FileUtils.File(location);
- }
- let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- fp.init(...pickerParams);
- let res = fp.show();
- if (res == Ci.nsIFilePicker.returnCancel) {
- return null;
- }
- return fp.file;
-}
-
-function getCustomBinary(window, location) {
- return _getFile(location, window, Strings.GetStringFromName("selectCustomBinary_title"), Ci.nsIFilePicker.modeOpen);
-}
-exports.getCustomBinary = getCustomBinary;
-
-function getCustomProfile(window, location) {
- return _getFile(location, window, Strings.GetStringFromName("selectCustomProfile_title"), Ci.nsIFilePicker.modeGetFolder);
-}
-exports.getCustomProfile = getCustomProfile;
-
-function getPackagedDirectory(window, location) {
- return _getFile(location, window, Strings.GetStringFromName("importPackagedApp_title"), Ci.nsIFilePicker.modeGetFolder);
-}
-exports.getPackagedDirectory = getPackagedDirectory;
-
-function getHostedURL(window, location) {
- let ret = { value: null };
-
- if (!location) {
- Services.prompt.prompt(window,
- Strings.GetStringFromName("importHostedApp_title"),
- Strings.GetStringFromName("importHostedApp_header"),
- ret, null, {});
- location = ret.value;
- }
-
- if (!location) {
- return null;
- }
-
- // Clean location string and add "http://" if missing
- location = location.trim();
- try { // Will fail if no scheme
- Services.io.extractScheme(location);
- } catch (e) {
- location = "http://" + location;
- }
- return location;
-}
-exports.getHostedURL = getHostedURL;
diff --git a/devtools/client/webide/moz.build b/devtools/client/webide/moz.build
deleted file mode 100644
index c5dcb07a9..000000000
--- a/devtools/client/webide/moz.build
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-DIRS += [
- 'content',
- 'components',
- 'modules',
- 'themes',
-]
-
-BROWSER_CHROME_MANIFESTS += [
- 'test/browser.ini'
-]
-MOCHITEST_CHROME_MANIFESTS += [
- 'test/chrome.ini'
-]
-
-JS_PREFERENCE_PP_FILES += [
- 'webide-prefs.js',
-]
diff --git a/devtools/client/webide/test/.eslintrc.js b/devtools/client/webide/test/.eslintrc.js
deleted file mode 100644
index 8d15a76d9..000000000
--- a/devtools/client/webide/test/.eslintrc.js
+++ /dev/null
@@ -1,6 +0,0 @@
-"use strict";
-
-module.exports = {
- // Extend from the shared list of defined globals for mochitests.
- "extends": "../../../.eslintrc.mochitests.js"
-};
diff --git a/devtools/client/webide/test/addons/adbhelper-linux.xpi b/devtools/client/webide/test/addons/adbhelper-linux.xpi
deleted file mode 100644
index b56cc03e3..000000000
--- a/devtools/client/webide/test/addons/adbhelper-linux.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/adbhelper-linux64.xpi b/devtools/client/webide/test/addons/adbhelper-linux64.xpi
deleted file mode 100644
index b56cc03e3..000000000
--- a/devtools/client/webide/test/addons/adbhelper-linux64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/adbhelper-mac64.xpi b/devtools/client/webide/test/addons/adbhelper-mac64.xpi
deleted file mode 100644
index b56cc03e3..000000000
--- a/devtools/client/webide/test/addons/adbhelper-mac64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/adbhelper-win32.xpi b/devtools/client/webide/test/addons/adbhelper-win32.xpi
deleted file mode 100644
index b56cc03e3..000000000
--- a/devtools/client/webide/test/addons/adbhelper-win32.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxdt-adapters-linux32.xpi b/devtools/client/webide/test/addons/fxdt-adapters-linux32.xpi
deleted file mode 100644
index 5a512ae3d..000000000
--- a/devtools/client/webide/test/addons/fxdt-adapters-linux32.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxdt-adapters-linux64.xpi b/devtools/client/webide/test/addons/fxdt-adapters-linux64.xpi
deleted file mode 100644
index 5a512ae3d..000000000
--- a/devtools/client/webide/test/addons/fxdt-adapters-linux64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxdt-adapters-mac64.xpi b/devtools/client/webide/test/addons/fxdt-adapters-mac64.xpi
deleted file mode 100644
index 5a512ae3d..000000000
--- a/devtools/client/webide/test/addons/fxdt-adapters-mac64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxdt-adapters-win32.xpi b/devtools/client/webide/test/addons/fxdt-adapters-win32.xpi
deleted file mode 100644
index 5a512ae3d..000000000
--- a/devtools/client/webide/test/addons/fxdt-adapters-win32.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_1_0_simulator-linux.xpi b/devtools/client/webide/test/addons/fxos_1_0_simulator-linux.xpi
deleted file mode 100644
index 238c97562..000000000
--- a/devtools/client/webide/test/addons/fxos_1_0_simulator-linux.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_1_0_simulator-linux64.xpi b/devtools/client/webide/test/addons/fxos_1_0_simulator-linux64.xpi
deleted file mode 100644
index 2f86c4d4d..000000000
--- a/devtools/client/webide/test/addons/fxos_1_0_simulator-linux64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_1_0_simulator-mac64.xpi b/devtools/client/webide/test/addons/fxos_1_0_simulator-mac64.xpi
deleted file mode 100644
index 6da2fcbad..000000000
--- a/devtools/client/webide/test/addons/fxos_1_0_simulator-mac64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_1_0_simulator-win32.xpi b/devtools/client/webide/test/addons/fxos_1_0_simulator-win32.xpi
deleted file mode 100644
index 546deacaf..000000000
--- a/devtools/client/webide/test/addons/fxos_1_0_simulator-win32.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_2_0_simulator-linux.xpi b/devtools/client/webide/test/addons/fxos_2_0_simulator-linux.xpi
deleted file mode 100644
index e2335e3a0..000000000
--- a/devtools/client/webide/test/addons/fxos_2_0_simulator-linux.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_2_0_simulator-linux64.xpi b/devtools/client/webide/test/addons/fxos_2_0_simulator-linux64.xpi
deleted file mode 100644
index 75fe209ea..000000000
--- a/devtools/client/webide/test/addons/fxos_2_0_simulator-linux64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_2_0_simulator-mac64.xpi b/devtools/client/webide/test/addons/fxos_2_0_simulator-mac64.xpi
deleted file mode 100644
index 58749f724..000000000
--- a/devtools/client/webide/test/addons/fxos_2_0_simulator-mac64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_2_0_simulator-win32.xpi b/devtools/client/webide/test/addons/fxos_2_0_simulator-win32.xpi
deleted file mode 100644
index 60cffd46e..000000000
--- a/devtools/client/webide/test/addons/fxos_2_0_simulator-win32.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_3_0_simulator-linux.xpi b/devtools/client/webide/test/addons/fxos_3_0_simulator-linux.xpi
deleted file mode 100644
index c54cae3aa..000000000
--- a/devtools/client/webide/test/addons/fxos_3_0_simulator-linux.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_3_0_simulator-linux64.xpi b/devtools/client/webide/test/addons/fxos_3_0_simulator-linux64.xpi
deleted file mode 100644
index 9a650a888..000000000
--- a/devtools/client/webide/test/addons/fxos_3_0_simulator-linux64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_3_0_simulator-mac64.xpi b/devtools/client/webide/test/addons/fxos_3_0_simulator-mac64.xpi
deleted file mode 100644
index d13dd78de..000000000
--- a/devtools/client/webide/test/addons/fxos_3_0_simulator-mac64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_3_0_simulator-win32.xpi b/devtools/client/webide/test/addons/fxos_3_0_simulator-win32.xpi
deleted file mode 100644
index 92d5cc394..000000000
--- a/devtools/client/webide/test/addons/fxos_3_0_simulator-win32.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-linux.xpi b/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-linux.xpi
deleted file mode 100644
index 7a2a432ff..000000000
--- a/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-linux.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-linux64.xpi b/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-linux64.xpi
deleted file mode 100644
index d38932195..000000000
--- a/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-linux64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-mac64.xpi b/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-mac64.xpi
deleted file mode 100644
index 48e271d54..000000000
--- a/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-mac64.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-win32.xpi b/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-win32.xpi
deleted file mode 100644
index 4c8bb2f10..000000000
--- a/devtools/client/webide/test/addons/fxos_3_0_tv_simulator-win32.xpi
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/addons/simulators.json b/devtools/client/webide/test/addons/simulators.json
deleted file mode 100644
index 31d71b4da..000000000
--- a/devtools/client/webide/test/addons/simulators.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "stable": ["1.0", "2.0"],
- "unstable": ["3.0", "3.0_tv"]
-}
diff --git a/devtools/client/webide/test/app.zip b/devtools/client/webide/test/app.zip
deleted file mode 100644
index 8a706a3c9..000000000
--- a/devtools/client/webide/test/app.zip
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/test/app/index.html b/devtools/client/webide/test/app/index.html
deleted file mode 100644
index 3ef4a25e2..000000000
--- a/devtools/client/webide/test/app/index.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!doctype html>
-<html>
-<head><title></title></head>
-<body>
-</body>
-</html>
diff --git a/devtools/client/webide/test/app/manifest.webapp b/devtools/client/webide/test/app/manifest.webapp
deleted file mode 100644
index 4a198b1ca..000000000
--- a/devtools/client/webide/test/app/manifest.webapp
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "name": "A name (in app directory)",
- "description": "desc",
- "launch_path": "/index.html"
-}
diff --git a/devtools/client/webide/test/browser.ini b/devtools/client/webide/test/browser.ini
deleted file mode 100644
index 7d6e2de72..000000000
--- a/devtools/client/webide/test/browser.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-[DEFAULT]
-tags = devtools
-subsuite = devtools
-support-files =
- addons/simulators.json
- doc_tabs.html
- head.js
- templates.json
-
-[browser_tabs.js]
-skip-if = e10s # Bug 1072167 - browser_tabs.js test fails under e10s
-[browser_widget.js]
diff --git a/devtools/client/webide/test/browser_tabs.js b/devtools/client/webide/test/browser_tabs.js
deleted file mode 100644
index 541c6b363..000000000
--- a/devtools/client/webide/test/browser_tabs.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
-"use strict";
-
-const TEST_URI = "http://example.com/browser/devtools/client/webide/test/doc_tabs.html";
-
-function test() {
- waitForExplicitFinish();
- requestCompleteLog();
-
- Task.spawn(function* () {
- // Since we test the connections set below, destroy the server in case it
- // was left open.
- DebuggerServer.destroy();
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
-
- let tab = yield addTab(TEST_URI);
-
- let win = yield openWebIDE();
- let docProject = getProjectDocument(win);
- let docRuntime = getRuntimeDocument(win);
-
- yield connectToLocal(win, docRuntime);
-
- is(Object.keys(DebuggerServer._connections).length, 1, "Locally connected");
-
- yield selectTabProject(win, docProject);
-
- ok(win.UI.toolboxPromise, "Toolbox promise exists");
- yield win.UI.toolboxPromise;
-
- let project = win.AppManager.selectedProject;
- is(project.location, TEST_URI, "Location is correct");
- is(project.name, "example.com: Test Tab", "Name is correct");
-
- // Ensure tab list changes are noticed
- let tabsNode = docProject.querySelector("#project-panel-tabs");
- is(tabsNode.querySelectorAll(".panel-item").length, 2, "2 tabs available");
- yield removeTab(tab);
- yield waitForUpdate(win, "project");
- yield waitForUpdate(win, "runtime-targets");
- is(tabsNode.querySelectorAll(".panel-item").length, 1, "1 tab available");
-
- tab = yield addTab(TEST_URI);
-
- is(tabsNode.querySelectorAll(".panel-item").length, 2, "2 tabs available");
-
- yield removeTab(tab);
-
- is(tabsNode.querySelectorAll(".panel-item").length, 2, "2 tabs available");
-
- docProject.querySelector("#refresh-tabs").click();
-
- yield waitForUpdate(win, "runtime-targets");
-
- is(tabsNode.querySelectorAll(".panel-item").length, 1, "1 tab available");
-
- yield win.Cmds.disconnectRuntime();
- yield closeWebIDE(win);
-
- DebuggerServer.destroy();
- }).then(finish, handleError);
-}
-
-function connectToLocal(win, docRuntime) {
- let deferred = promise.defer();
- win.AppManager.connection.once(
- win.Connection.Events.CONNECTED,
- () => deferred.resolve());
- docRuntime.querySelectorAll(".runtime-panel-item-other")[1].click();
- return deferred.promise;
-}
-
-function selectTabProject(win, docProject) {
- return Task.spawn(function* () {
- yield waitForUpdate(win, "runtime-targets");
- let tabsNode = docProject.querySelector("#project-panel-tabs");
- let tabNode = tabsNode.querySelectorAll(".panel-item")[1];
- let project = waitForUpdate(win, "project");
- tabNode.click();
- yield project;
- });
-}
diff --git a/devtools/client/webide/test/browser_widget.js b/devtools/client/webide/test/browser_widget.js
deleted file mode 100644
index 7cfb2782b..000000000
--- a/devtools/client/webide/test/browser_widget.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
-"use strict";
-
-function test() {
- waitForExplicitFinish();
- Task.spawn(function* () {
- let win = yield openWebIDE();
- ok(document.querySelector("#webide-button"), "Found WebIDE button");
- Services.prefs.setBoolPref("devtools.webide.widget.enabled", false);
- ok(!document.querySelector("#webide-button"), "WebIDE button uninstalled");
- yield closeWebIDE(win);
- Services.prefs.clearUserPref("devtools.webide.widget.enabled");
- }).then(finish, handleError);
-}
diff --git a/devtools/client/webide/test/build_app1/package.json b/devtools/client/webide/test/build_app1/package.json
deleted file mode 100644
index c6ae833e1..000000000
--- a/devtools/client/webide/test/build_app1/package.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "webide": {
- "prepackage": "echo \"{\\\"name\\\":\\\"hello\\\"}\" > manifest.webapp"
- }
-}
diff --git a/devtools/client/webide/test/build_app2/manifest.webapp b/devtools/client/webide/test/build_app2/manifest.webapp
deleted file mode 100644
index 0967ef424..000000000
--- a/devtools/client/webide/test/build_app2/manifest.webapp
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/devtools/client/webide/test/build_app2/package.json b/devtools/client/webide/test/build_app2/package.json
deleted file mode 100644
index 5b7101620..000000000
--- a/devtools/client/webide/test/build_app2/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "webide": {
- "prepackage": {
- "command": "echo \"{\\\"name\\\":\\\"$NAME\\\"}\" > manifest.webapp",
- "cwd": "./stage",
- "env": ["NAME=world"]
- },
- "packageDir": "./stage"
- }
-}
diff --git a/devtools/client/webide/test/build_app_windows1/package.json b/devtools/client/webide/test/build_app_windows1/package.json
deleted file mode 100644
index 036d2d767..000000000
--- a/devtools/client/webide/test/build_app_windows1/package.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "webide": {
- "prepackage": "echo {\"name\":\"hello\"} > manifest.webapp"
- }
-}
diff --git a/devtools/client/webide/test/build_app_windows2/manifest.webapp b/devtools/client/webide/test/build_app_windows2/manifest.webapp
deleted file mode 100644
index 0967ef424..000000000
--- a/devtools/client/webide/test/build_app_windows2/manifest.webapp
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/devtools/client/webide/test/build_app_windows2/package.json b/devtools/client/webide/test/build_app_windows2/package.json
deleted file mode 100644
index 83caf82ab..000000000
--- a/devtools/client/webide/test/build_app_windows2/package.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "webide": {
- "prepackage": {
- "command": "echo {\"name\":\"%NAME%\"} > manifest.webapp",
- "cwd": "./stage",
- "env": ["NAME=world"]
- },
- "packageDir": "./stage"
- }
-}
diff --git a/devtools/client/webide/test/chrome.ini b/devtools/client/webide/test/chrome.ini
deleted file mode 100644
index b492ccd9b..000000000
--- a/devtools/client/webide/test/chrome.ini
+++ /dev/null
@@ -1,71 +0,0 @@
-[DEFAULT]
-tags = devtools
-support-files =
- app/index.html
- app/manifest.webapp
- app.zip
- addons/simulators.json
- addons/fxos_1_0_simulator-linux.xpi
- addons/fxos_1_0_simulator-linux64.xpi
- addons/fxos_1_0_simulator-win32.xpi
- addons/fxos_1_0_simulator-mac64.xpi
- addons/fxos_2_0_simulator-linux.xpi
- addons/fxos_2_0_simulator-linux64.xpi
- addons/fxos_2_0_simulator-win32.xpi
- addons/fxos_2_0_simulator-mac64.xpi
- addons/fxos_3_0_simulator-linux.xpi
- addons/fxos_3_0_simulator-linux64.xpi
- addons/fxos_3_0_simulator-win32.xpi
- addons/fxos_3_0_simulator-mac64.xpi
- addons/fxos_3_0_tv_simulator-linux.xpi
- addons/fxos_3_0_tv_simulator-linux64.xpi
- addons/fxos_3_0_tv_simulator-win32.xpi
- addons/fxos_3_0_tv_simulator-mac64.xpi
- addons/adbhelper-linux.xpi
- addons/adbhelper-linux64.xpi
- addons/adbhelper-win32.xpi
- addons/adbhelper-mac64.xpi
- addons/fxdt-adapters-linux32.xpi
- addons/fxdt-adapters-linux64.xpi
- addons/fxdt-adapters-win32.xpi
- addons/fxdt-adapters-mac64.xpi
- build_app1/package.json
- build_app2/manifest.webapp
- build_app2/package.json
- build_app2/stage/empty-directory
- build_app_windows1/package.json
- build_app_windows2/manifest.webapp
- build_app_windows2/package.json
- build_app_windows2/stage/empty-directory
- device_front_shared.js
- head.js
- hosted_app.manifest
- templates.json
- ../../shared/test/browser_devices.json
- validator/*
-
-[test_basic.html]
-[test_newapp.html]
-skip-if = (os == "win" && os_version == "10.0") # Bug 1197053
-[test_import.html]
-skip-if = (os == "linux") # Bug 1024734
-[test_duplicate_import.html]
-[test_runtime.html]
-[test_manifestUpdate.html]
-[test_addons.html]
-skip-if = true # Bug 1201392 - Update add-ons after migration
-[test_device_runtime.html]
-[test_device_permissions.html]
-[test_autoconnect_runtime.html]
-[test_autoselect_project.html]
-[test_telemetry.html]
-skip-if = true # Bug 1201392 - Update add-ons after migration
-[test_device_preferences.html]
-[test_device_settings.html]
-[test_fullscreenToolbox.html]
-[test_zoom.html]
-[test_build.html]
-[test_simulators.html]
-skip-if = true # Bug 1281138 - intermittent failures
-[test_toolbox.html]
-[test_app_validator.html]
diff --git a/devtools/client/webide/test/device_front_shared.js b/devtools/client/webide/test/device_front_shared.js
deleted file mode 100644
index 0ddb5df21..000000000
--- a/devtools/client/webide/test/device_front_shared.js
+++ /dev/null
@@ -1,219 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-var customName;
-var customValue;
-var customValueType;
-var customBtn;
-var newField;
-var change;
-var doc;
-var iframe;
-var resetBtn;
-var found = false;
-
-function setDocument(frame) {
- iframe = frame;
- doc = iframe.contentWindow.document;
-}
-
-function fieldChange(fields, id) {
- // Trigger existing field change
- for (let field of fields) {
- if (field.id == id) {
- let button = doc.getElementById("btn-" + id);
- found = true;
- ok(button.classList.contains("hide"), "Default field detected");
- field.value = "custom";
- field.click();
- ok(!button.classList.contains("hide"), "Custom field detected");
- break;
- }
- }
- ok(found, "Found " + id + " line");
-}
-
-function addNewField() {
- found = false;
- customName = doc.querySelector("#custom-value-name");
- customValue = doc.querySelector("#custom-value-text");
- customValueType = doc.querySelector("#custom-value-type");
- customBtn = doc.querySelector("#custom-value");
- change = doc.createEvent("HTMLEvents");
- change.initEvent("change", false, true);
-
- // Add a new custom string
- customValueType.value = "string";
- customValueType.dispatchEvent(change);
- customName.value = "new-string-field!";
- customValue.value = "test";
- customBtn.click();
- let newField = doc.querySelector("#new-string-field");
- if (newField) {
- found = true;
- is(newField.type, "text", "Custom type is a string");
- is(newField.value, "test", "Custom string new value is correct");
- }
- ok(found, "Found new string field line");
- is(customName.value, "", "Custom string name reset");
- is(customValue.value, "", "Custom string value reset");
-}
-
-function addNewFieldWithEnter() {
- // Add a new custom value with the <enter> key
- found = false;
- customName.value = "new-string-field-two";
- customValue.value = "test";
- let newAddField = doc.querySelector("#add-custom-field");
- let enter = doc.createEvent("KeyboardEvent");
- enter.initKeyEvent(
- "keyup", true, true, null, false, false, false, false, 13, 0);
- newAddField.dispatchEvent(enter);
- newField = doc.querySelector("#new-string-field-two");
- if (newField) {
- found = true;
- is(newField.type, "text", "Custom type is a string");
- is(newField.value, "test", "Custom string new value is correct");
- }
- ok(found, "Found new string field line");
- is(customName.value, "", "Custom string name reset");
- is(customValue.value, "", "Custom string value reset");
-}
-
-function editExistingField() {
- // Edit existing custom string preference
- newField.value = "test2";
- newField.click();
- is(newField.value, "test2", "Custom string existing value is correct");
-}
-
-function addNewFieldInteger() {
- // Add a new custom integer preference with a valid integer
- customValueType.value = "number";
- customValueType.dispatchEvent(change);
- customName.value = "new-integer-field";
- customValue.value = 1;
- found = false;
-
- customBtn.click();
- newField = doc.querySelector("#new-integer-field");
- if (newField) {
- found = true;
- is(newField.type, "number", "Custom type is a number");
- is(newField.value, "1", "Custom integer value is correct");
- }
- ok(found, "Found new integer field line");
- is(customName.value, "", "Custom integer name reset");
- is(customValue.value, "", "Custom integer value reset");
-}
-
-var editFieldInteger = Task.async(function* () {
- // Edit existing custom integer preference
- newField.value = 3;
- newField.click();
- is(newField.value, "3", "Custom integer existing value is correct");
-
- // Reset a custom field
- let resetBtn = doc.querySelector("#btn-new-integer-field");
- resetBtn.click();
-
- try {
- yield iframe.contentWindow.configView._defaultField;
- } catch (err) {
- let fieldRow = doc.querySelector("#row-new-integer-field");
- if (!fieldRow) {
- found = false;
- }
- ok(!found, "Custom field removed");
- }
-});
-
-var resetExistingField = Task.async(function* (id) {
- let existing = doc.getElementById(id);
- existing.click();
- is(existing.checked, true, "Existing boolean value is correct");
- resetBtn = doc.getElementById("btn-" + id);
- resetBtn.click();
-
- yield iframe.contentWindow.configView._defaultField;
-
- ok(resetBtn.classList.contains("hide"), true, "Reset button hidden");
- is(existing.checked, true, "Existing field reset");
-});
-
-var resetNewField = Task.async(function* (id) {
- let custom = doc.getElementById(id);
- custom.click();
- is(custom.value, "test", "New string value is correct");
- resetBtn = doc.getElementById("btn-" + id);
- resetBtn.click();
-
- yield iframe.contentWindow.configView._defaultField;
-
- ok(resetBtn.classList.contains("hide"), true, "Reset button hidden");
-});
-
-function addNewFieldBoolean() {
- customValueType.value = "boolean";
- customValueType.dispatchEvent(change);
- customName.value = "new-boolean-field";
- customValue.checked = true;
- found = false;
- customBtn.click();
- newField = doc.querySelector("#new-boolean-field");
- if (newField) {
- found = true;
- is(newField.type, "checkbox", "Custom type is a checkbox");
- is(newField.checked, true, "Custom boolean value is correctly true");
- }
- ok(found, "Found new boolean field line");
-
- // Mouse event trigger
- var mouseClick = new MouseEvent("click", {
- canBubble: true,
- cancelable: true,
- view: doc.parent,
- });
-
- found = false;
- customValueType.value = "boolean";
- customValueType.dispatchEvent(change);
- customName.value = "new-boolean-field2";
- customValue.dispatchEvent(mouseClick);
- customBtn.dispatchEvent(mouseClick);
- newField = doc.querySelector("#new-boolean-field2");
- if (newField) {
- found = true;
- is(newField.checked, true, "Custom boolean value is correctly false");
- }
- ok(found, "Found new second boolean field line");
-
- is(customName.value, "", "Custom boolean name reset");
- is(customValue.checked, false, "Custom boolean value reset");
-
- newField.click();
- is(newField.checked, false, "Custom boolean existing value is correct");
-}
-
-function searchFields(deck, keyword) {
- // Search for a non-existent field
- let searchField = doc.querySelector("#search-bar");
- searchField.value = "![o_O]!";
- searchField.click();
-
- let fieldsTotal = doc.querySelectorAll("tr.edit-row").length;
- let hiddenFields = doc.querySelectorAll("tr.hide");
- is(hiddenFields.length, fieldsTotal, "Search keyword not found");
-
- // Search for existing fields
- searchField.value = keyword;
- searchField.click();
- hiddenFields = doc.querySelectorAll("tr.hide");
- isnot(hiddenFields.length, fieldsTotal, "Search keyword found");
-
- doc.querySelector("#close").click();
-
- ok(!deck.selectedPanel, "No panel selected");
-}
diff --git a/devtools/client/webide/test/doc_tabs.html b/devtools/client/webide/test/doc_tabs.html
deleted file mode 100644
index 4901289fc..000000000
--- a/devtools/client/webide/test/doc_tabs.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ -->
-<!doctype html>
-
-<html>
- <head>
- <meta charset="utf-8"/>
- <title>Test Tab</title>
- </head>
-
- <body>
- Test Tab
- </body>
-
-</html>
diff --git a/devtools/client/webide/test/head.js b/devtools/client/webide/test/head.js
deleted file mode 100644
index c0171c730..000000000
--- a/devtools/client/webide/test/head.js
+++ /dev/null
@@ -1,248 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-var {utils: Cu, classes: Cc, interfaces: Ci} = Components;
-
-const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const { FileUtils } = require("resource://gre/modules/FileUtils.jsm");
-const { gDevTools } = require("devtools/client/framework/devtools");
-const promise = require("promise");
-const Services = require("Services");
-const { Task } = require("devtools/shared/task");
-const { AppProjects } = require("devtools/client/webide/modules/app-projects");
-const DevToolsUtils = require("devtools/shared/DevToolsUtils");
-const { DebuggerServer } = require("devtools/server/main");
-const flags = require("devtools/shared/flags");
-flags.testing = true;
-
-var TEST_BASE;
-if (window.location === "chrome://browser/content/browser.xul") {
- TEST_BASE = "chrome://mochitests/content/browser/devtools/client/webide/test/";
-} else {
- TEST_BASE = "chrome://mochitests/content/chrome/devtools/client/webide/test/";
-}
-
-Services.prefs.setBoolPref("devtools.webide.enabled", true);
-Services.prefs.setBoolPref("devtools.webide.enableLocalRuntime", true);
-
-Services.prefs.setCharPref("devtools.webide.addonsURL", TEST_BASE + "addons/simulators.json");
-Services.prefs.setCharPref("devtools.webide.simulatorAddonsURL", TEST_BASE + "addons/fxos_#SLASHED_VERSION#_simulator-#OS#.xpi");
-Services.prefs.setCharPref("devtools.webide.adbAddonURL", TEST_BASE + "addons/adbhelper-#OS#.xpi");
-Services.prefs.setCharPref("devtools.webide.adaptersAddonURL", TEST_BASE + "addons/fxdt-adapters-#OS#.xpi");
-Services.prefs.setCharPref("devtools.webide.templatesURL", TEST_BASE + "templates.json");
-Services.prefs.setCharPref("devtools.devices.url", TEST_BASE + "browser_devices.json");
-
-var registerCleanupFunction = registerCleanupFunction ||
- SimpleTest.registerCleanupFunction;
-registerCleanupFunction(() => {
- flags.testing = false;
- Services.prefs.clearUserPref("devtools.webide.enabled");
- Services.prefs.clearUserPref("devtools.webide.enableLocalRuntime");
- Services.prefs.clearUserPref("devtools.webide.autoinstallADBHelper");
- Services.prefs.clearUserPref("devtools.webide.autoinstallFxdtAdapters");
- Services.prefs.clearUserPref("devtools.webide.busyTimeout");
- Services.prefs.clearUserPref("devtools.webide.lastSelectedProject");
- Services.prefs.clearUserPref("devtools.webide.lastConnectedRuntime");
-});
-
-var openWebIDE = Task.async(function* (autoInstallAddons) {
- info("opening WebIDE");
-
- Services.prefs.setBoolPref("devtools.webide.autoinstallADBHelper", !!autoInstallAddons);
- Services.prefs.setBoolPref("devtools.webide.autoinstallFxdtAdapters", !!autoInstallAddons);
-
- let ww = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher);
- let win = ww.openWindow(null, "chrome://webide/content/", "webide", "chrome,centerscreen,resizable", null);
-
- yield new Promise(resolve => {
- win.addEventListener("load", function onLoad() {
- win.removeEventListener("load", onLoad);
- SimpleTest.requestCompleteLog();
- SimpleTest.executeSoon(resolve);
- });
- });
-
- info("WebIDE open");
-
- return win;
-});
-
-function closeWebIDE(win) {
- info("Closing WebIDE");
-
- let deferred = promise.defer();
-
- Services.prefs.clearUserPref("devtools.webide.widget.enabled");
-
- win.addEventListener("unload", function onUnload() {
- win.removeEventListener("unload", onUnload);
- info("WebIDE closed");
- SimpleTest.executeSoon(() => {
- deferred.resolve();
- });
- });
-
- win.close();
-
- return deferred.promise;
-}
-
-function removeAllProjects() {
- return Task.spawn(function* () {
- yield AppProjects.load();
- // use a new array so we're not iterating over the same
- // underlying array that's being modified by AppProjects
- let projects = AppProjects.projects.map(p => p.location);
- for (let i = 0; i < projects.length; i++) {
- yield AppProjects.remove(projects[i]);
- }
- });
-}
-
-function nextTick() {
- let deferred = promise.defer();
- SimpleTest.executeSoon(() => {
- deferred.resolve();
- });
-
- return deferred.promise;
-}
-
-function waitForUpdate(win, update) {
- info("Wait: " + update);
- let deferred = promise.defer();
- win.AppManager.on("app-manager-update", function onUpdate(e, what) {
- info("Got: " + what);
- if (what !== update) {
- return;
- }
- win.AppManager.off("app-manager-update", onUpdate);
- deferred.resolve(win.UI._updatePromise);
- });
- return deferred.promise;
-}
-
-function waitForTime(time) {
- let deferred = promise.defer();
- setTimeout(() => {
- deferred.resolve();
- }, time);
- return deferred.promise;
-}
-
-function documentIsLoaded(doc) {
- let deferred = promise.defer();
- if (doc.readyState == "complete") {
- deferred.resolve();
- } else {
- doc.addEventListener("readystatechange", function onChange() {
- if (doc.readyState == "complete") {
- doc.removeEventListener("readystatechange", onChange);
- deferred.resolve();
- }
- });
- }
- return deferred.promise;
-}
-
-function lazyIframeIsLoaded(iframe) {
- let deferred = promise.defer();
- iframe.addEventListener("load", function onLoad() {
- iframe.removeEventListener("load", onLoad, true);
- deferred.resolve(nextTick());
- }, true);
- return deferred.promise;
-}
-
-function addTab(aUrl, aWindow) {
- info("Adding tab: " + aUrl);
-
- let deferred = promise.defer();
- let targetWindow = aWindow || window;
- let targetBrowser = targetWindow.gBrowser;
-
- targetWindow.focus();
- let tab = targetBrowser.selectedTab = targetBrowser.addTab(aUrl);
- let linkedBrowser = tab.linkedBrowser;
-
- BrowserTestUtils.browserLoaded(linkedBrowser).then(function () {
- info("Tab added and finished loading: " + aUrl);
- deferred.resolve(tab);
- });
-
- return deferred.promise;
-}
-
-function removeTab(aTab, aWindow) {
- info("Removing tab.");
-
- let deferred = promise.defer();
- let targetWindow = aWindow || window;
- let targetBrowser = targetWindow.gBrowser;
- let tabContainer = targetBrowser.tabContainer;
-
- tabContainer.addEventListener("TabClose", function onClose(aEvent) {
- tabContainer.removeEventListener("TabClose", onClose, false);
- info("Tab removed and finished closing.");
- deferred.resolve();
- }, false);
-
- targetBrowser.removeTab(aTab);
- return deferred.promise;
-}
-
-function getRuntimeDocument(win) {
- return win.document.querySelector("#runtime-listing-panel-details").contentDocument;
-}
-
-function getProjectDocument(win) {
- return win.document.querySelector("#project-listing-panel-details").contentDocument;
-}
-
-function getRuntimeWindow(win) {
- return win.document.querySelector("#runtime-listing-panel-details").contentWindow;
-}
-
-function getProjectWindow(win) {
- return win.document.querySelector("#project-listing-panel-details").contentWindow;
-}
-
-function connectToLocalRuntime(win) {
- info("Loading local runtime.");
-
- let panelNode;
- let runtimePanel;
-
- runtimePanel = getRuntimeDocument(win);
-
- panelNode = runtimePanel.querySelector("#runtime-panel");
- let items = panelNode.querySelectorAll(".runtime-panel-item-other");
- is(items.length, 2, "Found 2 custom runtime buttons");
-
- let updated = waitForUpdate(win, "runtime-global-actors");
- items[1].click();
- return updated;
-}
-
-function handleError(aError) {
- ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
- finish();
-}
-
-function waitForConnectionChange(expectedState, count = 1) {
- return new Promise(resolve => {
- let onConnectionChange = (_, state) => {
- if (state != expectedState) {
- return;
- }
- if (--count != 0) {
- return;
- }
- DebuggerServer.off("connectionchange", onConnectionChange);
- resolve();
- };
- DebuggerServer.on("connectionchange", onConnectionChange);
- });
-}
diff --git a/devtools/client/webide/test/hosted_app.manifest b/devtools/client/webide/test/hosted_app.manifest
deleted file mode 100644
index ab5069978..000000000
--- a/devtools/client/webide/test/hosted_app.manifest
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "name": "hosted manifest name property"
-}
diff --git a/devtools/client/webide/test/templates.json b/devtools/client/webide/test/templates.json
deleted file mode 100644
index e6ffa3efe..000000000
--- a/devtools/client/webide/test/templates.json
+++ /dev/null
@@ -1,14 +0,0 @@
-[
- {
- "file": "chrome://mochitests/content/chrome/devtools/client/webide/test/app.zip?1",
- "icon": "ximgx1",
- "name": "app name 1",
- "description": "app description 1"
- },
- {
- "file": "chrome://mochitests/content/chrome/devtools/client/webide/test/app.zip?2",
- "icon": "ximgx2",
- "name": "app name 2",
- "description": "app description 2"
- }
-]
diff --git a/devtools/client/webide/test/test_addons.html b/devtools/client/webide/test/test_addons.html
deleted file mode 100644
index 5a1bc7504..000000000
--- a/devtools/client/webide/test/test_addons.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- const {GetAvailableAddons} = require("devtools/client/webide/modules/addons");
- const {Devices} = Cu.import("resource://devtools/shared/apps/Devices.jsm");
- const {Simulators} = require("devtools/client/webide/modules/simulators");
-
- let adbAddonsInstalled = promise.defer();
- Devices.on("addon-status-updated", function onUpdate1() {
- Devices.off("addon-status-updated", onUpdate1);
- adbAddonsInstalled.resolve();
- });
-
- function getVersion(name) {
- return name.match(/(\d+\.\d+)/)[0];
- }
-
- function onSimulatorInstalled(name) {
- let deferred = promise.defer();
- Simulators.on("updated", function onUpdate() {
- Simulators.findSimulatorAddons().then(addons => {
- for (let addon of addons) {
- if (name == addon.name.replace(" Simulator", "")) {
- Simulators.off("updated", onUpdate);
- nextTick().then(deferred.resolve);
- return;
- }
- }
- });
- });
- return deferred.promise;
- }
-
- function installSimulatorFromUI(doc, name) {
- let li = doc.querySelector('[addon="simulator-' + getVersion(name) + '"]');
- li.querySelector(".install-button").click();
- return onSimulatorInstalled(name);
- }
-
- function uninstallSimulatorFromUI(doc, name) {
- let deferred = promise.defer();
- Simulators.on("updated", function onUpdate() {
- nextTick().then(() => {
- let li = doc.querySelector('[status="uninstalled"][addon="simulator-' + getVersion(name) + '"]');
- if (li) {
- Simulators.off("updated", onUpdate);
- deferred.resolve();
- } else {
- deferred.reject("Can't find item");
- }
- });
- });
- let li = doc.querySelector('[status="installed"][addon="simulator-' + getVersion(name) + '"]');
- li.querySelector(".uninstall-button").click();
- return deferred.promise;
- }
-
- function uninstallADBFromUI(doc) {
- let deferred = promise.defer();
- Devices.on("addon-status-updated", function onUpdate() {
- nextTick().then(() => {
- let li = doc.querySelector('[status="uninstalled"][addon="adb"]');
- if (li) {
- Devices.off("addon-status-updated", onUpdate);
- deferred.resolve();
- } else {
- deferred.reject("Can't find item");
- }
- })
- });
- let li = doc.querySelector('[status="installed"][addon="adb"]');
- li.querySelector(".uninstall-button").click();
- return deferred.promise;
- }
-
- Task.spawn(function*() {
-
- ok(!Devices.helperAddonInstalled, "Helper not installed");
-
- let win = yield openWebIDE(true);
- let docRuntime = getRuntimeDocument(win);
-
- yield adbAddonsInstalled.promise;
-
- ok(Devices.helperAddonInstalled, "Helper has been auto-installed");
-
- yield nextTick();
-
- let addons = yield GetAvailableAddons();
-
- is(addons.simulators.length, 3, "3 simulator addons to install");
-
- let sim10 = addons.simulators.filter(a => a.version == "1.0")[0];
- sim10.install();
-
- yield onSimulatorInstalled("Firefox OS 1.0");
-
- win.Cmds.showAddons();
-
- let frame = win.document.querySelector("#deck-panel-addons");
- let addonDoc = frame.contentWindow.document;
- let lis;
-
- lis = addonDoc.querySelectorAll("li");
- is(lis.length, 5, "5 addons listed");
-
- lis = addonDoc.querySelectorAll('li[status="installed"]');
- is(lis.length, 3, "3 addons installed");
-
- lis = addonDoc.querySelectorAll('li[status="uninstalled"]');
- is(lis.length, 2, "2 addons uninstalled");
-
- info("Uninstalling Simulator 2.0");
-
- yield installSimulatorFromUI(addonDoc, "Firefox OS 2.0");
-
- info("Uninstalling Simulator 3.0");
-
- yield installSimulatorFromUI(addonDoc, "Firefox OS 3.0");
-
- yield nextTick();
-
- let panelNode = docRuntime.querySelector("#runtime-panel");
- let items;
-
- items = panelNode.querySelectorAll(".runtime-panel-item-usb");
- is(items.length, 1, "Found one runtime button");
-
- items = panelNode.querySelectorAll(".runtime-panel-item-simulator");
- is(items.length, 3, "Found 3 simulators button");
-
- yield uninstallSimulatorFromUI(addonDoc, "Firefox OS 1.0");
- yield uninstallSimulatorFromUI(addonDoc, "Firefox OS 2.0");
- yield uninstallSimulatorFromUI(addonDoc, "Firefox OS 3.0");
-
- items = panelNode.querySelectorAll(".runtime-panel-item-simulator");
- is(items.length, 0, "No simulator listed");
-
- let w = addonDoc.querySelector(".warning");
- let display = addonDoc.defaultView.getComputedStyle(w).display
- is(display, "none", "Warning about missing ADB hidden");
-
- yield uninstallADBFromUI(addonDoc, "adb");
-
- items = panelNode.querySelectorAll(".runtime-panel-item-usb");
- is(items.length, 0, "No usb runtime listed");
-
- display = addonDoc.defaultView.getComputedStyle(w).display
- is(display, "block", "Warning about missing ADB present");
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
-
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_app_validator.html b/devtools/client/webide/test/test_app_validator.html
deleted file mode 100644
index 60ed29aac..000000000
--- a/devtools/client/webide/test/test_app_validator.html
+++ /dev/null
@@ -1,205 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- const Cu = Components.utils;
- const Cc = Components.classes;
- const Ci = Components.interfaces;
- Cu.import("resource://testing-common/httpd.js");
- const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-
- const {AppValidator} = require("devtools/client/webide/modules/app-validator");
- const Services = require("Services");
- const nsFile = Components.Constructor("@mozilla.org/file/local;1",
- "nsILocalFile", "initWithPath");
- const cr = Cc["@mozilla.org/chrome/chrome-registry;1"]
- .getService(Ci.nsIChromeRegistry);
- const strings = Services.strings.createBundle("chrome://devtools/locale/app-manager.properties");
- let httpserver, origin;
-
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- httpserver = new HttpServer();
- httpserver.start(-1);
- origin = "http://localhost:" + httpserver.identity.primaryPort + "/";
-
- next();
- }
-
- function createHosted(path, manifestFile="/manifest.webapp") {
- let dirPath = getTestFilePath("validator/" + path);
- httpserver.registerDirectory("/", nsFile(dirPath));
- return new AppValidator({
- type: "hosted",
- location: origin + manifestFile
- });
- }
-
- function createPackaged(path) {
- let dirPath = getTestFilePath("validator/" + path);
- return new AppValidator({
- type: "packaged",
- location: dirPath
- });
- }
-
- function next() {
- let test = tests.shift();
- if (test) {
- try {
- test();
- } catch(e) {
- console.error("exception", String(e), e, e.stack);
- }
- } else {
- httpserver.stop(function() {
- SimpleTest.finish();
- });
- }
- }
-
- let tests = [
- // Test a 100% valid example
- function () {
- let validator = createHosted("valid");
- validator.validate().then(() => {
- is(validator.errors.length, 0, "valid app got no error");
- is(validator.warnings.length, 0, "valid app got no warning");
-
- next();
- });
- },
-
- function () {
- let validator = createPackaged("valid");
- validator.validate().then(() => {
- is(validator.errors.length, 0, "valid packaged app got no error");
- is(validator.warnings.length, 0, "valid packaged app got no warning");
-
- next();
- });
- },
-
- // Test a launch path that returns a 404
- function () {
- let validator = createHosted("wrong-launch-path");
- validator.validate().then(() => {
- is(validator.errors.length, 1, "app with non-existant launch path got an error");
- is(validator.errors[0], strings.formatStringFromName("validator.accessFailedLaunchPathBadHttpCode", [origin + "wrong-path.html", 404], 2),
- "with the right error message");
- is(validator.warnings.length, 0, "but no warning");
- next();
- });
- },
- function () {
- let validator = createPackaged("wrong-launch-path");
- validator.validate().then(() => {
- is(validator.errors.length, 1, "app with wrong path got an error");
- let file = nsFile(validator.location);
- file.append("wrong-path.html");
- let url = Services.io.newFileURI(file);
- is(validator.errors[0], strings.formatStringFromName("validator.accessFailedLaunchPath", [url.spec], 1),
- "with the expected message");
- is(validator.warnings.length, 0, "but no warning");
-
- next();
- });
- },
-
- // Test when using a non-absolute path for launch_path
- function () {
- let validator = createHosted("non-absolute-path");
- validator.validate().then(() => {
- is(validator.errors.length, 1, "app with non absolute path got an error");
- is(validator.errors[0], strings.formatStringFromName("validator.nonAbsoluteLaunchPath", ["non-absolute.html"], 1),
- "with expected message");
- is(validator.warnings.length, 0, "but no warning");
- next();
- });
- },
- function () {
- let validator = createPackaged("non-absolute-path");
- validator.validate().then(() => {
- is(validator.errors.length, 1, "app with non absolute path got an error");
- is(validator.errors[0], strings.formatStringFromName("validator.nonAbsoluteLaunchPath", ["non-absolute.html"], 1),
- "with expected message");
- is(validator.warnings.length, 0, "but no warning");
- next();
- });
- },
-
- // Test multiple failures (missing name [error] and icon [warning])
- function () {
- let validator = createHosted("no-name-or-icon");
- validator.validate().then(() => {
- checkNoNameOrIcon(validator);
- });
- },
- function () {
- let validator = createPackaged("no-name-or-icon");
- validator.validate().then(() => {
- checkNoNameOrIcon(validator);
- });
- },
-
- // Test a regular URL instead of a direct link to the manifest
- function () {
- let validator = createHosted("valid", "/");
- validator.validate().then(() => {
- is(validator.warnings.length, 0, "manifest found got no warning");
- is(validator.errors.length, 0, "manifest found got no error");
-
- next();
- });
- },
-
- // Test finding a manifest at origin's root
- function () {
- let validator = createHosted("valid", "/unexisting-dir");
- validator.validate().then(() => {
- is(validator.warnings.length, 0, "manifest found at origin root got no warning");
- is(validator.errors.length, 0, "manifest found at origin root got no error");
-
- next();
- });
- },
-
- // Test priorization of manifest.webapp at provided location instead of a manifest located at origin's root
- function() {
- let validator = createHosted("valid", "/alsoValid");
- validator.validate().then(() => {
- is(validator.manifest.name, "valid at subfolder", "manifest at subfolder was used");
-
- next();
- });
- }
- ];
-
- function checkNoNameOrIcon(validator) {
- is(validator.errors.length, 1, "app with no name has an error");
- is(validator.errors[0],
- strings.GetStringFromName("validator.missNameManifestProperty"),
- "with expected message");
- is(validator.warnings.length, 1, "app with no icon has a warning");
- is(validator.warnings[0],
- strings.GetStringFromName("validator.missIconsManifestProperty"),
- "with expected message");
- next();
- }
-
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_autoconnect_runtime.html b/devtools/client/webide/test/test_autoconnect_runtime.html
deleted file mode 100644
index 3de00473a..000000000
--- a/devtools/client/webide/test/test_autoconnect_runtime.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function*() {
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- let win = yield openWebIDE();
- let docRuntime = getRuntimeDocument(win);
-
- let fakeRuntime = {
- type: "USB",
- connect: function(connection) {
- is(connection, win.AppManager.connection, "connection is valid");
- connection.host = null; // force connectPipe
- connection.connect();
- return promise.resolve();
- },
-
- get id() {
- return "fakeRuntime";
- },
-
- get name() {
- return "fakeRuntime";
- }
- };
- win.AppManager.runtimeList.usb.push(fakeRuntime);
- win.AppManager.update("runtime-list");
-
- let panelNode = docRuntime.querySelector("#runtime-panel");
- let items = panelNode.querySelectorAll(".runtime-panel-item-usb");
- is(items.length, 1, "Found one runtime button");
-
- let connectionsChanged = waitForConnectionChange("opened", 2);
- items[0].click();
-
- ok(win.document.querySelector("window").className, "busy", "UI is busy");
- yield win.UI._busyPromise;
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 2, "Connected");
-
- connectionsChanged = waitForConnectionChange("closed", 2);
-
- yield nextTick();
- yield closeWebIDE(win);
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 0, "Disconnected");
-
- connectionsChanged = waitForConnectionChange("opened", 2);
-
- win = yield openWebIDE();
-
- win.AppManager.runtimeList.usb.push(fakeRuntime);
- win.AppManager.update("runtime-list");
-
- yield waitForUpdate(win, "runtime-targets");
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 2, "Automatically reconnected");
-
- yield win.Cmds.disconnectRuntime();
-
- yield closeWebIDE(win);
-
- DebuggerServer.destroy();
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_autoselect_project.html b/devtools/client/webide/test/test_autoselect_project.html
deleted file mode 100644
index cd5793559..000000000
--- a/devtools/client/webide/test/test_autoselect_project.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function* () {
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- let win = yield openWebIDE();
- let docRuntime = getRuntimeDocument(win);
- let docProject = getProjectDocument(win);
-
- let panelNode = docRuntime.querySelector("#runtime-panel");
- let items = panelNode.querySelectorAll(".runtime-panel-item-other");
- is(items.length, 2, "Found 2 runtime buttons");
-
- // Connect to local runtime
- let connectionsChanged = waitForConnectionChange("opened", 2);
- items[1].click();
-
- yield waitForUpdate(win, "runtime-targets");
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 2, "Locally connected");
-
- ok(win.AppManager.isMainProcessDebuggable(), "Main process available");
-
- // Select main process
- yield win.Cmds.showProjectPanel();
- yield waitForUpdate(win, "runtime-targets");
- SimpleTest.executeSoon(() => {
- docProject.querySelectorAll("#project-panel-runtimeapps .panel-item")[0].click();
- });
-
- yield waitForUpdate(win, "project");
-
- let lastProject = Services.prefs.getCharPref("devtools.webide.lastSelectedProject");
- is(lastProject, "mainProcess:", "Last project is main process");
-
- connectionsChanged = waitForConnectionChange("closed", 2);
-
- yield nextTick();
- yield closeWebIDE(win);
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 0, "Disconnected");
-
- connectionsChanged = waitForConnectionChange("opened", 2);
-
- // Re-open, should reselect main process after connection
- win = yield openWebIDE();
-
- docRuntime = getRuntimeDocument(win);
-
- panelNode = docRuntime.querySelector("#runtime-panel");
- items = panelNode.querySelectorAll(".runtime-panel-item-other");
- is(items.length, 2, "Found 2 runtime buttons");
-
- // Connect to local runtime
- items[1].click();
-
- yield waitForUpdate(win, "runtime-targets");
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 2, "Locally connected");
- ok(win.AppManager.isMainProcessDebuggable(), "Main process available");
- is(win.AppManager.selectedProject.type, "mainProcess", "Main process reselected");
-
- // Wait for the toolbox to be fully loaded
- yield win.UI.toolboxPromise;
-
- // If we happen to pass a project object targeting the same context,
- // here, the main process, the `selectedProject` attribute shouldn't be updated
- // so that no `project` event would fire.
- let oldProject = win.AppManager.selectedProject;
- win.AppManager.selectedProject = {
- type: "mainProcess"
- };
- is(win.AppManager.selectedProject, oldProject, "AppManager.selectedProject shouldn't be updated if we selected the same project");
-
- yield win.Cmds.disconnectRuntime();
-
- yield closeWebIDE(win);
-
- DebuggerServer.destroy();
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_basic.html b/devtools/client/webide/test/test_basic.html
deleted file mode 100644
index e619a0f06..000000000
--- a/devtools/client/webide/test/test_basic.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function* () {
- let win = yield openWebIDE();
-
- const {gDevToolsBrowser} = require("devtools/client/framework/devtools-browser");
- yield gDevToolsBrowser.isWebIDEInitialized.promise;
- ok(true, "WebIDE was initialized");
-
- ok(win, "Found a window");
- ok(win.AppManager, "App Manager accessible");
- let appmgr = win.AppManager;
- ok(appmgr.connection, "App Manager connection ready");
- ok(appmgr.runtimeList, "Runtime list ready");
-
- // test error reporting
- let nbox = win.document.querySelector("#notificationbox");
- let notification = nbox.getNotificationWithValue("webide:errornotification");
- ok(!notification, "No notification yet");
- let deferred = promise.defer();
- nextTick().then(() => {
- deferred.reject("BOOM!");
- });
- try {
- yield win.UI.busyUntil(deferred.promise, "xx");
- } catch(e) {/* This *will* fail */}
- notification = nbox.getNotificationWithValue("webide:errornotification");
- ok(notification, "Error has been reported");
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_build.html b/devtools/client/webide/test/test_build.html
deleted file mode 100644
index ffb01998c..000000000
--- a/devtools/client/webide/test/test_build.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- let {TextDecoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
- let {ProjectBuilding} = require("devtools/client/webide/modules/build");
-
- Task.spawn(function* () {
- let win = yield openWebIDE();
- let winProject = getProjectWindow(win);
- let AppManager = win.AppManager;
-
- function isProjectMarkedAsValid() {
- let details = win.frames[0];
- return !details.document.body.classList.contains("error");
- }
-
- // # Test first package.json like this: `{webide: {prepackage: "command line string"}}`
- let platform = Services.appShell.hiddenDOMWindow.navigator.platform;
- let testSuffix = "";
- if (platform.indexOf("Win") != -1) {
- testSuffix = "_windows";
- }
-
- let packagedAppLocation = getTestFilePath("build_app" + testSuffix + "1");
-
- let onValidated = waitForUpdate(win, "project-validated");
- let onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packagedAppLocation);
- yield onValidated;
- yield onDetails;
-
- let project = win.AppManager.selectedProject;
-
- ok(!project.manifest, "manifest includes name");
- is(project.name, "--", "Display name uses manifest name");
-
- let loggedMessages = [];
- let logger = function (msg) {
- loggedMessages.push(msg);
- }
-
- yield ProjectBuilding.build({
- project,
- logger
- });
- let packageDir = yield ProjectBuilding.getPackageDir(project);
- is(packageDir, packagedAppLocation, "no custom packagedir");
- is(loggedMessages[0], "start", "log messages are correct");
- ok(loggedMessages[1].indexOf("Running pre-package hook") != -1, "log messages are correct");
- is(loggedMessages[2], "Terminated with error code: 0", "log messages are correct");
- is(loggedMessages[3], "succeed", "log messages are correct");
-
- // Trigger validation
- yield AppManager.validateAndUpdateProject(AppManager.selectedProject);
- yield nextTick();
-
- ok("name" in project.manifest, "manifest includes name");
- is(project.name, "hello", "Display name uses manifest name");
- is(project.manifest.name, project.name, "Display name uses manifest name");
-
- yield OS.File.remove(OS.Path.join(packagedAppLocation, "manifest.webapp"));
-
- // # Now test a full featured package.json
- packagedAppLocation = getTestFilePath("build_app" + testSuffix + "2");
-
- onValidated = waitForUpdate(win, "project-validated");
- onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packagedAppLocation);
- yield onValidated;
- yield onDetails;
-
- project = win.AppManager.selectedProject;
-
- loggedMessages = [];
- yield ProjectBuilding.build({
- project,
- logger
- });
- packageDir = yield ProjectBuilding.getPackageDir(project);
- is(OS.Path.normalize(packageDir),
- OS.Path.join(packagedAppLocation, "stage"), "custom packagedir");
- is(loggedMessages[0], "start", "log messages are correct");
- ok(loggedMessages[1].indexOf("Running pre-package hook") != -1, "log messages are correct");
- is(loggedMessages[2], "Terminated with error code: 0", "log messages are correct");
- is(loggedMessages[3], "succeed", "log messages are correct");
-
- // Switch to the package dir in order to verify the generated webapp.manifest
- onValidated = waitForUpdate(win, "project-validated");
- onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packageDir);
- yield onValidated;
- yield onDetails;
-
- project = win.AppManager.selectedProject;
-
- ok("name" in project.manifest, "manifest includes name");
- is(project.name, "world", "Display name uses manifest name");
- is(project.manifest.name, project.name, "Display name uses manifest name");
-
- yield closeWebIDE(win);
-
- yield removeAllProjects();
-
- SimpleTest.finish();
- });
- }
-
-
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_device_permissions.html b/devtools/client/webide/test/test_device_permissions.html
deleted file mode 100644
index eadd9f595..000000000
--- a/devtools/client/webide/test/test_device_permissions.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function* () {
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- let win = yield openWebIDE();
-
- let permIframe = win.document.querySelector("#deck-panel-permissionstable");
- let docRuntime = getRuntimeDocument(win);
- let winRuntime = getRuntimeWindow(win);
-
- yield connectToLocalRuntime(win);
-
- let perm = docRuntime.querySelector("#runtime-permissions");
-
- ok(!perm.hasAttribute("disabled"), "perm cmd enabled");
-
- let deck = win.document.querySelector("#deck");
-
- winRuntime.runtimeList.showPermissionsTable();
- is(deck.selectedPanel, permIframe, "permission iframe selected");
-
- yield nextTick();
-
- yield lazyIframeIsLoaded(permIframe);
-
- yield permIframe.contentWindow.getRawPermissionsTablePromise;
-
- doc = permIframe.contentWindow.document;
- trs = doc.querySelectorAll(".line");
- found = false;
- for (let tr of trs) {
- let [name,v1,v2,v3] = tr.querySelectorAll("td");
- if (name.textContent == "geolocation") {
- found = true;
- is(v1.className, "permprompt", "geolocation perm is valid");
- is(v2.className, "permprompt", "geolocation perm is valid");
- is(v3.className, "permprompt", "geolocation perm is valid");
- break;
- }
- }
- ok(found, "Found geolocation line");
-
- doc.querySelector("#close").click();
-
- ok(!deck.selectedPanel, "No panel selected");
-
- DebuggerServer.destroy();
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
- }).then(null, e => {
- ok(false, "Exception: " + e);
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_device_preferences.html b/devtools/client/webide/test/test_device_preferences.html
deleted file mode 100644
index c79db7f79..000000000
--- a/devtools/client/webide/test/test_device_preferences.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <script type="application/javascript;version=1.8" src="device_front_shared.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function* () {
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- let win = yield openWebIDE();
-
- let prefIframe = win.document.querySelector("#deck-panel-devicepreferences");
- let docRuntime = getRuntimeDocument(win);
-
- win.AppManager.update("runtime-list");
-
- yield connectToLocalRuntime(win);
-
- let prefs = docRuntime.querySelector("#runtime-preferences");
-
- ok(!prefs.hasAttribute("disabled"), "device prefs cmd enabled");
-
- let deck = win.document.querySelector("#deck");
-
- win.Cmds.showDevicePrefs();
- is(deck.selectedPanel, prefIframe, "device preferences iframe selected");
-
- yield nextTick();
-
- yield lazyIframeIsLoaded(prefIframe);
-
- yield prefIframe.contentWindow.getAllPrefs;
-
- setDocument(prefIframe);
-
- let fields = doc.querySelectorAll(".editable");
-
- addNewField();
-
- let preference = "accessibility.accesskeycausesactivation";
-
- fieldChange(fields, preference);
-
- addNewFieldWithEnter();
-
- editExistingField();
-
- addNewFieldInteger();
-
- yield editFieldInteger();
-
- yield resetExistingField("accessibility.accesskeycausesactivation");
-
- addNewFieldBoolean();
-
- searchFields(deck, "debugger");
-
- DebuggerServer.destroy();
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
- }).then(null, e => {
- ok(false, "Exception: " + e);
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_device_runtime.html b/devtools/client/webide/test/test_device_runtime.html
deleted file mode 100644
index 0ac42b472..000000000
--- a/devtools/client/webide/test/test_device_runtime.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function* () {
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- let win = yield openWebIDE();
-
- let detailsIframe = win.document.querySelector("#deck-panel-runtimedetails");
-
- yield connectToLocalRuntime(win);
-
- let details = win.document.querySelector("#cmd_showRuntimeDetails");
-
- ok(!details.hasAttribute("disabled"), "info cmd enabled");
-
- let deck = win.document.querySelector("#deck");
-
- win.Cmds.showRuntimeDetails();
- is(deck.selectedPanel, detailsIframe, "info iframe selected");
-
- yield nextTick();
-
- yield lazyIframeIsLoaded(detailsIframe);
-
- yield detailsIframe.contentWindow.getDescriptionPromise;
-
- // device info and permissions content is checked in other tests
- // We just test one value to make sure we get something
-
- let doc = detailsIframe.contentWindow.document;
- let trs = doc.querySelectorAll("tr");
- let found = false;
-
- for (let tr of trs) {
- let [name,val] = tr.querySelectorAll("td");
- if (name.textContent == "appid") {
- found = true;
- is(val.textContent, Services.appinfo.ID, "appid has the right value");
- break;
- }
- }
- ok(found, "Found appid line");
-
- doc.querySelector("#close").click();
-
- ok(!deck.selectedPanel, "No panel selected");
-
- DebuggerServer.destroy();
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
- }).then(null, e => {
- ok(false, "Exception: " + e);
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_device_settings.html b/devtools/client/webide/test/test_device_settings.html
deleted file mode 100644
index ec8e7943b..000000000
--- a/devtools/client/webide/test/test_device_settings.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <script type="application/javascript;version=1.8" src="device_front_shared.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function*() {
- if (SpecialPowers.isMainProcess()) {
- Cu.import("resource://gre/modules/SettingsRequestManager.jsm");
- }
-
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- let win = yield openWebIDE();
-
- let settingIframe = win.document.querySelector("#deck-panel-devicesettings");
- let docRuntime = getRuntimeDocument(win);
-
- win.AppManager.update("runtime-list");
-
- yield connectToLocalRuntime(win);
-
- let settings = docRuntime.querySelector("#runtime-settings");
-
- ok(!settings.hasAttribute("disabled"), "device settings cmd enabled");
-
- let deck = win.document.querySelector("#deck");
-
- win.Cmds.showSettings();
- is(deck.selectedPanel, settingIframe, "device settings iframe selected");
-
- yield nextTick();
-
- yield lazyIframeIsLoaded(settingIframe);
-
- yield settingIframe.contentWindow.getAllSettings;
-
- setDocument(settingIframe);
-
- let fields = doc.querySelectorAll(".editable");
-
- addNewField();
-
- addNewFieldWithEnter();
-
- editExistingField();
-
- addNewFieldInteger();
-
- yield editFieldInteger();
-
- yield resetNewField("new-string-field");
-
- addNewFieldBoolean();
-
- searchFields(deck, "new-boolean-field2");
-
- DebuggerServer.destroy();
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
- }).then(null, e => {
- ok(false, "Exception: " + e);
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_duplicate_import.html b/devtools/client/webide/test/test_duplicate_import.html
deleted file mode 100644
index ef01e23e4..000000000
--- a/devtools/client/webide/test/test_duplicate_import.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function*() {
- let win = yield openWebIDE();
- let docProject = getProjectDocument(win);
- let winProject = getProjectWindow(win);
- let packagedAppLocation = getTestFilePath("app");
- let hostedAppManifest = TEST_BASE + "hosted_app.manifest";
-
- yield win.AppProjects.load();
- is(win.AppProjects.projects.length, 0, "IDB is empty");
-
- let onValidated = waitForUpdate(win, "project-validated");
- let onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packagedAppLocation);
- yield onValidated;
- yield onDetails;
-
- yield winProject.projectList.importHostedApp(hostedAppManifest);
- yield waitForUpdate(win, "project-validated");
- yield nextTick();
-
- onValidated = waitForUpdate(win, "project-validated");
- onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packagedAppLocation);
- yield onValidated;
- yield onDetails;
-
- let project = win.AppManager.selectedProject;
- is(project.location, packagedAppLocation, "Correctly reselected existing packaged app.");
- yield nextTick();
-
- info("to call importHostedApp(" + hostedAppManifest + ") again");
- yield winProject.projectList.importHostedApp(hostedAppManifest);
- yield waitForUpdate(win, "project-validated");
- project = win.AppManager.selectedProject;
- is(project.location, hostedAppManifest, "Correctly reselected existing hosted app.");
- yield nextTick();
-
- let panelNode = docProject.querySelector("#project-panel");
- let items = panelNode.querySelectorAll(".panel-item");
- // 3 controls, + 2 projects
- is(items.length, 5, "5 projects in panel");
- is(items[3].querySelector("span").textContent, "A name (in app directory)", "Panel text is correct");
- is(items[4].querySelector("span").textContent, "hosted manifest name property", "Panel text is correct");
-
- yield closeWebIDE(win);
-
- yield removeAllProjects();
-
- SimpleTest.finish();
- }).then(null, e => {
- ok(false, "Exception: " + e);
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
-
diff --git a/devtools/client/webide/test/test_fullscreenToolbox.html b/devtools/client/webide/test/test_fullscreenToolbox.html
deleted file mode 100644
index 6ae0c4446..000000000
--- a/devtools/client/webide/test/test_fullscreenToolbox.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- function connectToLocal(win, docRuntime) {
- let deferred = promise.defer();
- win.AppManager.connection.once(
- win.Connection.Events.CONNECTED,
- () => deferred.resolve());
- docRuntime.querySelectorAll(".runtime-panel-item-other")[1].click();
- return deferred.promise;
- }
-
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function* () {
- let win = yield openWebIDE();
- let docProject = getProjectDocument(win);
- let docRuntime = getRuntimeDocument(win);
- win.AppManager.update("runtime-list");
-
- yield connectToLocal(win, docRuntime);
-
- // Select main process
- yield waitForUpdate(win, "runtime-targets");
- SimpleTest.executeSoon(() => {
- docProject.querySelectorAll("#project-panel-runtimeapps .panel-item")[0].click();
- });
-
- yield waitForUpdate(win, "project");
-
- ok(win.UI.toolboxPromise, "Toolbox promise exists");
- yield win.UI.toolboxPromise;
-
- let nbox = win.document.querySelector("#notificationbox");
- ok(!nbox.hasAttribute("toolboxfullscreen"), "Toolbox is not fullscreen");
-
- win.Cmds.showRuntimeDetails();
-
- ok(!nbox.hasAttribute("toolboxfullscreen"), "Toolbox is not fullscreen");
-
- yield win.Cmds.disconnectRuntime();
-
- yield closeWebIDE(win);
-
- DebuggerServer.destroy();
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_import.html b/devtools/client/webide/test/test_import.html
deleted file mode 100644
index 830198cca..000000000
--- a/devtools/client/webide/test/test_import.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function*() {
- let win = yield openWebIDE();
- let docProject = getProjectDocument(win);
- let winProject = getProjectWindow(win);
- let packagedAppLocation = getTestFilePath("app");
-
- yield win.AppProjects.load();
- is(win.AppProjects.projects.length, 0, "IDB is empty");
-
- info("to call importPackagedApp(" + packagedAppLocation + ")");
- ok(!win.UI._busyPromise, "UI is not busy");
-
- let onValidated = waitForUpdate(win, "project-validated");
- let onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packagedAppLocation);
- yield onValidated;
- yield onDetails;
-
- let project = win.AppManager.selectedProject;
- is(project.location, packagedAppLocation, "Location is valid");
- is(project.name, "A name (in app directory)", "name field has been updated");
- is(project.manifest.launch_path, "/index.html", "manifest found. launch_path valid.");
- is(project.manifest.description, "desc", "manifest found. description valid");
-
- yield nextTick();
-
- let hostedAppManifest = TEST_BASE + "hosted_app.manifest";
- yield winProject.projectList.importHostedApp(hostedAppManifest);
- yield waitForUpdate(win, "project-validated");
-
- project = win.AppManager.selectedProject;
- is(project.location, hostedAppManifest, "Location is valid");
- is(project.name, "hosted manifest name property", "name field has been updated");
-
- yield nextTick();
-
- hostedAppManifest = TEST_BASE + "/app";
- yield winProject.projectList.importHostedApp(hostedAppManifest);
- yield waitForUpdate(win, "project-validated");
-
- project = win.AppManager.selectedProject;
- ok(project.location.endsWith('manifest.webapp'), "The manifest was found and the project was updated");
-
- let panelNode = docProject.querySelector("#project-panel");
- let items = panelNode.querySelectorAll(".panel-item");
- // 4 controls, + 2 projects
- is(items.length, 6, "6 projects in panel");
- is(items[3].querySelector("span").textContent, "A name (in app directory)", "Panel text is correct");
- is(items[4].querySelector("span").textContent, "hosted manifest name property", "Panel text is correct");
-
- yield closeWebIDE(win);
-
- yield removeAllProjects();
-
- SimpleTest.finish();
- }).then(null, e => {
- ok(false, "Exception: " + e);
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_manifestUpdate.html b/devtools/client/webide/test/test_manifestUpdate.html
deleted file mode 100644
index 66f9affd0..000000000
--- a/devtools/client/webide/test/test_manifestUpdate.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- let {TextDecoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
-
- Task.spawn(function* () {
- let win = yield openWebIDE();
- let winProject = getProjectWindow(win);
- let AppManager = win.AppManager;
-
- function isProjectMarkedAsValid() {
- let details = win.frames[1];
- return !details.document.body.classList.contains("error");
- }
-
- let packagedAppLocation = getTestFilePath("app");
-
- let onValidated = waitForUpdate(win, "project-validated");
- let onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packagedAppLocation);
- yield onValidated;
- yield onDetails;
-
- let project = win.AppManager.selectedProject;
-
- ok("name" in project.manifest, "manifest includes name");
- is(project.name, project.manifest.name, "Display name uses manifest name");
- ok(isProjectMarkedAsValid(), "project is marked as valid");
-
- // Change the name
- let originalName = project.manifest.name;
-
- project.manifest.name = "xxx";
-
- // Write to disk
- yield AppManager.writeManifest(project);
-
- // Read file
- let manifestPath = OS.Path.join(packagedAppLocation, "manifest.webapp");
- let Decoder = new TextDecoder();
- let data = yield OS.File.read(manifestPath);
- data = new TextDecoder().decode(data);
- let json = JSON.parse(data);
- is(json.name, "xxx", "manifest written on disc");
-
- // Make the manifest invalid on disk
- delete json.name;
- let Encoder = new TextEncoder();
- data = Encoder.encode(JSON.stringify(json));
- yield OS.File.writeAtomic(manifestPath, data , {tmpPath: manifestPath + ".tmp"});
-
- // Trigger validation
- yield AppManager.validateAndUpdateProject(AppManager.selectedProject);
- yield nextTick();
-
- ok(!("name" in project.manifest), "manifest has been updated");
- is(project.name, "--", "Placeholder is used for display name");
- ok(!isProjectMarkedAsValid(), "project is marked as invalid");
-
- // Make the manifest valid on disk
- project.manifest.name = originalName;
- yield AppManager.writeManifest(project);
-
- // Trigger validation
- yield AppManager.validateAndUpdateProject(AppManager.selectedProject);
- yield nextTick();
-
- ok("name" in project.manifest, "manifest includes name");
- is(project.name, originalName, "Display name uses original manifest name");
- ok(isProjectMarkedAsValid(), "project is marked as valid");
-
- yield closeWebIDE(win);
-
- yield removeAllProjects();
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_newapp.html b/devtools/client/webide/test/test_newapp.html
deleted file mode 100644
index 45374f268..000000000
--- a/devtools/client/webide/test/test_newapp.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function* () {
- let win = yield openWebIDE();
- let winProject = getProjectWindow(win);
- let tmpDir = FileUtils.getDir("TmpD", []);
- yield winProject.projectList.newApp({
- index: 0,
- name: "webideTmpApp",
- folder: tmpDir
- });
-
- let project = win.AppManager.selectedProject;
- tmpDir = FileUtils.getDir("TmpD", ["webidetmpapp"]);
- ok(tmpDir.isDirectory(), "Directory created");
- is(project.location, tmpDir.path, "Location is valid (and lowercase)");
- is(project.name, "webideTmpApp", "name field has been updated");
-
- // Clean up
- tmpDir.remove(true);
- yield closeWebIDE(win);
- yield removeAllProjects();
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_runtime.html b/devtools/client/webide/test/test_runtime.html
deleted file mode 100644
index 9b16ef82d..000000000
--- a/devtools/client/webide/test/test_runtime.html
+++ /dev/null
@@ -1,203 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- let win;
-
- SimpleTest.registerCleanupFunction(() => {
- Task.spawn(function*() {
- if (win) {
- yield closeWebIDE(win);
- }
- DebuggerServer.destroy();
- yield removeAllProjects();
- });
- });
-
- Task.spawn(function*() {
- function isPlayActive() {
- return !win.document.querySelector("#cmd_play").hasAttribute("disabled");
- }
-
- function isStopActive() {
- return !win.document.querySelector("#cmd_stop").hasAttribute("disabled");
- }
-
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- win = yield openWebIDE();
- let docRuntime = getRuntimeDocument(win);
- let docProject = getProjectDocument(win);
- let winProject = getProjectWindow(win);
-
- let packagedAppLocation = getTestFilePath("app");
-
- let onValidated = waitForUpdate(win, "project-validated");
- let onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packagedAppLocation);
- yield onValidated;
- yield onDetails;
-
- win.AppManager.runtimeList.usb.push({
- connect: function(connection) {
- is(connection, win.AppManager.connection, "connection is valid");
- connection.host = null; // force connectPipe
- connection.connect();
- return promise.resolve();
- },
-
- get name() {
- return "fakeRuntime";
- }
- });
-
- win.AppManager.runtimeList.usb.push({
- connect: function(connection) {
- let deferred = promise.defer();
- return deferred.promise;
- },
-
- get name() {
- return "infiniteRuntime";
- }
- });
-
- win.AppManager.runtimeList.usb.push({
- connect: function(connection) {
- let deferred = promise.defer();
- return deferred.promise;
- },
-
- prolongedConnection: true,
-
- get name() {
- return "prolongedRuntime";
- }
- });
-
- win.AppManager.update("runtime-list");
-
- let panelNode = docRuntime.querySelector("#runtime-panel");
- let items = panelNode.querySelectorAll(".runtime-panel-item-usb");
- is(items.length, 3, "Found 3 runtime buttons");
-
- let connectionsChanged = waitForConnectionChange("opened", 2);
- items[0].click();
-
- ok(win.document.querySelector("window").className, "busy", "UI is busy");
- yield win.UI._busyPromise;
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 2, "Connected");
-
- yield waitForUpdate(win, "runtime-global-actors");
-
- // Play button always disabled now, webapps actor removed
- ok(!isPlayActive(), "play button is disabled");
- ok(!isStopActive(), "stop button is disabled");
- let oldProject = win.AppManager.selectedProject;
- win.AppManager.selectedProject = null;
-
- yield nextTick();
-
- ok(!isPlayActive(), "play button is disabled");
- ok(!isStopActive(), "stop button is disabled");
- win.AppManager._selectedProject = oldProject;
- win.UI.updateCommands();
-
- yield nextTick();
-
- ok(!isPlayActive(), "play button is enabled");
- ok(!isStopActive(), "stop button is disabled");
-
- connectionsChanged = waitForConnectionChange("closed", 2);
- yield win.Cmds.disconnectRuntime();
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 0, "Disconnected");
-
- ok(win.AppManager.selectedProject, "A project is still selected");
- ok(!isPlayActive(), "play button is disabled");
- ok(!isStopActive(), "stop button is disabled");
-
- connectionsChanged = waitForConnectionChange("opened", 2);
- docRuntime.querySelectorAll(".runtime-panel-item-other")[1].click();
-
- yield waitForUpdate(win, "runtime-targets");
-
- yield connectionsChanged;
- is(Object.keys(DebuggerServer._connections).length, 2, "Locally connected");
-
- ok(win.AppManager.isMainProcessDebuggable(), "Main process available");
-
- // Select main process
- SimpleTest.executeSoon(() => {
- docProject.querySelectorAll("#project-panel-runtimeapps .panel-item")[0].click();
- });
-
- yield waitForUpdate(win, "project");
-
- // Toolbox opens automatically for main process / runtime apps
- ok(win.UI.toolboxPromise, "Toolbox promise exists");
- yield win.UI.toolboxPromise;
-
- yield win.Cmds.disconnectRuntime();
-
- Services.prefs.setIntPref("devtools.webide.busyTimeout", 100);
-
- // Wait for error message since connection never completes
- let errorDeferred = promise.defer();
- win.UI.reportError = errorName => {
- if (errorName === "error_operationTimeout") {
- errorDeferred.resolve();
- }
- };
-
- // Click the infinite runtime
- items[1].click();
- ok(win.document.querySelector("window").className, "busy", "UI is busy");
- yield errorDeferred.promise;
-
- // Check for unexpected error message since this is prolonged
- let noErrorDeferred = promise.defer();
- win.UI.reportError = errorName => {
- if (errorName === "error_operationTimeout") {
- noErrorDeferred.reject();
- }
- };
-
- // Click the prolonged runtime
- items[2].click();
- ok(win.document.querySelector("window").className, "busy", "UI is busy");
-
- setTimeout(() => {
- noErrorDeferred.resolve();
- }, 1000);
-
- yield noErrorDeferred.promise;
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_simulators.html b/devtools/client/webide/test/test_simulators.html
deleted file mode 100644
index 204881512..000000000
--- a/devtools/client/webide/test/test_simulators.html
+++ /dev/null
@@ -1,426 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- const asyncStorage = require("devtools/shared/async-storage");
- const EventEmitter = require("devtools/shared/event-emitter");
- const { GetAvailableAddons } = require("devtools/client/webide/modules/addons");
- const { getDevices } = require("devtools/client/shared/devices");
- const { Simulator, Simulators } = require("devtools/client/webide/modules/simulators");
- const { AddonSimulatorProcess,
- OldAddonSimulatorProcess,
- CustomSimulatorProcess } = require("devtools/client/webide/modules/simulator-process");
-
- function addonStatus(addon, status) {
- if (addon.status == status) {
- return promise.resolve();
- }
- let deferred = promise.defer();
- addon.on("update", function onUpdate() {
- if (addon.status == status) {
- addon.off("update", onUpdate);
- nextTick().then(() => deferred.resolve());
- }
- });
- return deferred.promise;
- }
-
- function waitForUpdate(length) {
- info(`Wait for update with length ${length}`);
- let deferred = promise.defer();
- let handler = (_, data) => {
- if (data.length != length) {
- return;
- }
- info(`Got update with length ${length}`);
- Simulators.off("updated", handler);
- deferred.resolve();
- };
- Simulators.on("updated", handler);
- return deferred.promise;
- }
-
- Task.spawn(function* () {
- let win = yield openWebIDE(false);
-
- yield Simulators._load();
-
- let docRuntime = getRuntimeDocument(win);
- let find = win.document.querySelector.bind(docRuntime);
- let findAll = win.document.querySelectorAll.bind(docRuntime);
-
- let simulatorList = find("#runtime-panel-simulator");
- let simulatorPanel = win.document.querySelector("#deck-panel-simulator");
-
- // Hack SimulatorProcesses to spy on simulation parameters.
-
- let runPromise;
- function fakeRun() {
- runPromise.resolve({
- path: this.b2gBinary.path,
- args: this.args
- });
- // Don't actually try to connect to the fake simulator.
- throw new Error("Aborting on purpose before connection.");
- }
-
- AddonSimulatorProcess.prototype.run = fakeRun;
- OldAddonSimulatorProcess.prototype.run = fakeRun;
- CustomSimulatorProcess.prototype.run = fakeRun;
-
- function runSimulator(i) {
- runPromise = promise.defer();
- findAll(".runtime-panel-item-simulator")[i].click();
- return runPromise.promise;
- }
-
- // Install fake "Firefox OS 1.0" simulator addon.
-
- let addons = yield GetAvailableAddons();
-
- let sim10 = addons.simulators.filter(a => a.version == "1.0")[0];
-
- sim10.install();
-
- let updated = waitForUpdate(1);
- yield addonStatus(sim10, "installed");
- yield updated;
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- is(findAll(".runtime-panel-item-simulator").length, 1, "One simulator in runtime panel");
-
- // Install fake "Firefox OS 2.0" simulator addon.
-
- let sim20 = addons.simulators.filter(a => a.version == "2.0")[0];
-
- sim20.install();
-
- updated = waitForUpdate(2);
- yield addonStatus(sim20, "installed");
- yield updated;
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- is(findAll(".runtime-panel-item-simulator").length, 2, "Two simulators in runtime panel");
-
- // Dry run a simulator to verify that its parameters look right.
-
- let params = yield runSimulator(0);
-
- ok(params.path.includes(sim10.addonID) && params.path.includes("b2g-bin"), "Simulator binary path looks right");
-
- let pid = params.args.indexOf("-profile");
- ok(pid > -1, "Simulator process arguments have --profile");
-
- let profilePath = params.args[pid + 1];
- ok(profilePath.includes(sim10.addonID) && profilePath.includes("profile"), "Simulator profile path looks right");
-
- ok(params.args.indexOf("-dbgport") > -1 || params.args.indexOf("-start-debugger-server") > -1, "Simulator process arguments have a debugger port");
-
- ok(params.args.indexOf("-no-remote") > -1, "Simulator process arguments have --no-remote");
-
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- // Configure the fake 1.0 simulator.
-
- simulatorList.querySelectorAll(".configure-button")[0].click();
- is(win.document.querySelector("#deck").selectedPanel, simulatorPanel, "Simulator deck panel is selected");
-
- yield lazyIframeIsLoaded(simulatorPanel);
-
- let doc = simulatorPanel.contentWindow.document;
- let form = doc.querySelector("#simulator-editor");
-
- let formReady = new Promise((resolve, reject) => {
- form.addEventListener("change", () => {
- resolve();
- });
- });
-
- let change = doc.createEvent("HTMLEvents");
- change.initEvent("change", true, true);
-
- function set(input, value) {
- input.value = value;
- input.dispatchEvent(change);
- return nextTick();
- }
-
- let MockFilePicker = SpecialPowers.MockFilePicker;
- MockFilePicker.init(simulatorPanel.contentWindow);
-
- yield formReady;
-
- // Test `name`.
-
- is(form.name.value, find(".runtime-panel-item-simulator").textContent, "Original simulator name");
-
- let customName = "CustomFox ";
- yield set(form.name, customName + "1.0");
-
- is(find(".runtime-panel-item-simulator").textContent, form.name.value, "Updated simulator name");
-
- // Test `version`.
-
- is(form.version.value, sim10.addonID, "Original simulator version");
- ok(!form.version.classList.contains("custom"), "Version selector is not customized");
-
- yield set(form.version, sim20.addonID);
-
- ok(!form.version.classList.contains("custom"), "Version selector is not customized after addon change");
- is(form.name.value, customName + "2.0", "Simulator name was updated to new version");
-
- // Pick custom binary, but act like the user aborted the file picker.
-
- MockFilePicker.returnFiles = [];
- yield set(form.version, "pick");
-
- is(form.version.value, sim20.addonID, "Version selector reverted to last valid choice after customization abort");
- ok(!form.version.classList.contains("custom"), "Version selector is not customized after customization abort");
-
- // Pick custom binary, and actually follow through. (success, verify value = "custom" and textContent = custom path)
-
- MockFilePicker.useAnyFile();
- yield set(form.version, "pick");
-
- let fakeBinary = MockFilePicker.returnFiles[0];
-
- ok(form.version.value == "custom", "Version selector was set to a new custom binary");
- ok(form.version.classList.contains("custom"), "Version selector is now customized");
- is(form.version.selectedOptions[0].textContent, fakeBinary.path, "Custom option textContent is correct");
-
- yield set(form.version, sim10.addonID);
-
- ok(form.version.classList.contains("custom"), "Version selector remains customized after change back to addon");
- is(form.name.value, customName + "1.0", "Simulator name was updated to new version");
-
- yield set(form.version, "custom");
-
- ok(form.version.value == "custom", "Version selector is back to custom");
-
- // Test `profile`.
-
- is(form.profile.value, "default", "Default simulator profile");
- ok(!form.profile.classList.contains("custom"), "Profile selector is not customized");
-
- MockFilePicker.returnFiles = [];
- yield set(form.profile, "pick");
-
- is(form.profile.value, "default", "Profile selector reverted to last valid choice after customization abort");
- ok(!form.profile.classList.contains("custom"), "Profile selector is not customized after customization abort");
-
- let fakeProfile = FileUtils.getDir("TmpD", []);
-
- MockFilePicker.returnFiles = [ fakeProfile ];
- yield set(form.profile, "pick");
-
- ok(form.profile.value == "custom", "Profile selector was set to a new custom directory");
- ok(form.profile.classList.contains("custom"), "Profile selector is now customized");
- is(form.profile.selectedOptions[0].textContent, fakeProfile.path, "Custom option textContent is correct");
-
- yield set(form.profile, "default");
-
- is(form.profile.value, "default", "Profile selector back to default");
- ok(form.profile.classList.contains("custom"), "Profile selector remains customized after change back to default");
-
- yield set(form.profile, "custom");
-
- is(form.profile.value, "custom", "Profile selector back to custom");
-
- params = yield runSimulator(0);
-
- is(params.path, fakeBinary.path, "Simulator process uses custom binary path");
-
- pid = params.args.indexOf("-profile");
- is(params.args[pid + 1], fakeProfile.path, "Simulator process uses custom profile directory");
-
- yield set(form.version, sim10.addonID);
-
- is(form.name.value, customName + "1.0", "Simulator restored to 1.0");
-
- params = yield runSimulator(0);
-
- pid = params.args.indexOf("-profile");
- is(params.args[pid + 1], fakeProfile.path, "Simulator process still uses custom profile directory");
-
- yield set(form.version, "custom");
-
- // Test `device`.
-
- let defaults = Simulator.prototype._defaults;
-
- for (let param in defaults.phone) {
- is(form[param].value, String(defaults.phone[param]), "Default phone value for device " + param);
- }
-
- let width = 5000, height = 4000;
- yield set(form.width, width);
- yield set(form.height, height);
-
- is(form.device.value, "custom", "Device selector is custom");
-
- params = yield runSimulator(0);
-
- let sid = params.args.indexOf("-screen");
- ok(sid > -1, "Simulator process arguments have --screen");
- ok(params.args[sid + 1].includes(width + "x" + height), "Simulator screen resolution looks right");
-
- yield set(form.version, sim10.addonID);
-
- // Configure the fake 2.0 simulator.
-
- simulatorList.querySelectorAll(".configure-button")[1].click();
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- // Test `name`.
-
- is(form.name.value, findAll(".runtime-panel-item-simulator")[1].textContent, "Original simulator name");
-
- yield set(form.name, customName + "2.0");
-
- is(findAll(".runtime-panel-item-simulator")[1].textContent, form.name.value, "Updated simulator name");
-
- yield set(form.version, sim10.addonID);
-
- ok(form.name.value !== customName + "1.0", "Conflicting simulator name was deduplicated");
-
- is(form.name.value, findAll(".runtime-panel-item-simulator")[1].textContent, "Deduplicated simulator name stayed consistent");
-
- yield set(form.version, sim20.addonID);
-
- is(form.name.value, customName + "2.0", "Name deduplication was undone when possible");
-
- // Test `device`.
-
- for (let param in defaults.phone) {
- is(form[param].value, String(defaults.phone[param]), "Default phone value for device " + param);
- }
-
- let devices = yield getDevices();
- devices = devices[devices.TYPES[0]];
- let device = devices[devices.length - 1];
-
- yield set(form.device, device.name);
-
- is(form.device.value, device.name, "Device selector was changed");
- is(form.width.value, String(device.width), "New device width is correct");
- is(form.height.value, String(device.height), "New device height is correct");
-
- params = yield runSimulator(1);
-
- sid = params.args.indexOf("-screen");
- ok(params.args[sid + 1].includes(device.width + "x" + device.height), "Simulator screen resolution looks right");
-
- // Test Simulator Menu.
- is(doc.querySelector("#tv_simulator_menu").style.visibility, "hidden", "OpenTVDummyDirectory Button is not hidden");
-
- // Restore default simulator options.
-
- doc.querySelector("#reset").click();
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- for (let param in defaults.phone) {
- is(form[param].value, String(defaults.phone[param]), "Default phone value for device " + param);
- }
-
- // Install and configure the fake "Firefox OS 3.0 TV" simulator addon.
-
- let sim30tv = addons.simulators.filter(a => a.version == "3.0_tv")[0];
-
- sim30tv.install();
-
- updated = waitForUpdate(3);
- yield addonStatus(sim30tv, "installed");
- yield updated;
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- is(findAll(".runtime-panel-item-simulator").length, 3, "Three simulators in runtime panel");
-
- simulatorList.querySelectorAll(".configure-button")[2].click();
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- for (let param in defaults.television) {
- is(form[param].value, String(defaults.television[param]), "Default TV value for device " + param);
- }
-
- // Test Simulator Menu
- is(doc.querySelector("#tv_simulator_menu").style.visibility, "visible", "OpenTVDummyDirectory Button is not visible");
-
- // Force reload the list of simulators.
-
- Simulators._loadingPromise = null;
- Simulators._simulators = [];
- yield Simulators._load();
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- is(findAll(".runtime-panel-item-simulator").length, 3, "Three simulators saved and reloaded " + Simulators._simulators.map(s => s.name).join(','));
-
- // Uninstall the 3.0 TV and 2.0 addons, and watch their Simulator objects disappear.
-
- sim30tv.uninstall();
-
- yield addonStatus(sim30tv, "uninstalled");
-
- is(findAll(".runtime-panel-item-simulator").length, 2, "Two simulators left in runtime panel");
-
- sim20.uninstall();
-
- yield addonStatus(sim20, "uninstalled");
-
- is(findAll(".runtime-panel-item-simulator").length, 1, "One simulator left in runtime panel");
-
- // Remove 1.0 simulator.
-
- simulatorList.querySelectorAll(".configure-button")[0].click();
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- doc.querySelector("#remove").click();
- // Wait for next tick to ensure UI elements are updated
- yield nextTick();
-
- is(findAll(".runtime-panel-item-simulator").length, 0, "Last simulator was removed");
-
- yield asyncStorage.removeItem("simulators");
-
- sim10.uninstall();
-
- MockFilePicker.cleanup();
-
- doc.querySelector("#close").click();
-
- ok(!win.document.querySelector("#deck").selectedPanel, "No panel selected");
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
-
- });
- }
-
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_telemetry.html b/devtools/client/webide/test/test_telemetry.html
deleted file mode 100644
index 225ddb89b..000000000
--- a/devtools/client/webide/test/test_telemetry.html
+++ /dev/null
@@ -1,325 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- const Telemetry = require("devtools/client/shared/telemetry");
- const { _DeprecatedUSBRuntime, _WiFiRuntime, _SimulatorRuntime,
- _gRemoteRuntime, _gLocalRuntime, RuntimeTypes }
- = require("devtools/client/webide/modules/runtimes");
-
- // Because we need to gather stats for the period of time that a tool has
- // been opened we make use of setTimeout() to create tool active times.
- const TOOL_DELAY = 200;
-
- function patchTelemetry() {
- Telemetry.prototype.telemetryInfo = {};
- Telemetry.prototype._oldlog = Telemetry.prototype.log;
- Telemetry.prototype.log = function(histogramId, value) {
- if (histogramId) {
- if (!this.telemetryInfo[histogramId]) {
- this.telemetryInfo[histogramId] = [];
- }
- this.telemetryInfo[histogramId].push(value);
- }
- }
- Telemetry.prototype._oldlogKeyed = Telemetry.prototype.logKeyed;
- Telemetry.prototype.logKeyed = function(histogramId, key, value) {
- // This simple reduction is enough to test WebIDE's usage
- this.log(`${histogramId}|${key}`, value);
- }
- }
-
- function resetTelemetry() {
- Telemetry.prototype.log = Telemetry.prototype._oldlog;
- Telemetry.prototype.logKeyed = Telemetry.prototype._oldlogKeyed;
- delete Telemetry.prototype._oldlog;
- delete Telemetry.prototype._oldlogKeyed;
- delete Telemetry.prototype.telemetryInfo;
- }
-
- function cycleWebIDE() {
- return Task.spawn(function*() {
- let win = yield openWebIDE();
- // Wait a bit, so we're open for a non-zero time
- yield waitForTime(TOOL_DELAY);
- yield closeWebIDE(win);
- });
- }
-
- function addFakeRuntimes(win) {
- // We use the real runtimes here (and switch out some functionality)
- // so we can ensure that logging happens as it would in real use.
-
- let usb = new _DeprecatedUSBRuntime("fakeUSB");
- // Use local pipe instead
- usb.connect = function(connection) {
- ok(connection, win.AppManager.connection, "connection is valid");
- connection.host = null; // force connectPipe
- connection.connect();
- return promise.resolve();
- };
- win.AppManager.runtimeList.usb.push(usb);
-
- let wifi = new _WiFiRuntime("fakeWiFi");
- // Use local pipe instead
- wifi.connect = function(connection) {
- ok(connection, win.AppManager.connection, "connection is valid");
- connection.host = null; // force connectPipe
- connection.connect();
- return promise.resolve();
- };
- win.AppManager.runtimeList.wifi.push(wifi);
-
- let sim = new _SimulatorRuntime({ id: "fakeSimulator" });
- // Use local pipe instead
- sim.connect = function(connection) {
- ok(connection, win.AppManager.connection, "connection is valid");
- connection.host = null; // force connectPipe
- connection.connect();
- return promise.resolve();
- };
- Object.defineProperty(sim, "name", {
- get() {
- return this.version;
- }
- });
- win.AppManager.runtimeList.simulator.push(sim);
-
- let remote = _gRemoteRuntime;
- // Use local pipe instead
- remote.connect = function(connection) {
- ok(connection, win.AppManager.connection, "connection is valid");
- connection.host = null; // force connectPipe
- connection.connect();
- return promise.resolve();
- };
- let local = _gLocalRuntime;
-
- let other = Object.create(_gLocalRuntime);
- other.type = RuntimeTypes.OTHER;
-
- win.AppManager.runtimeList.other = [remote, local, other];
-
- win.AppManager.update("runtime-list");
- }
-
- function addTestApp(win) {
- return Task.spawn(function*() {
- let packagedAppLocation = getTestFilePath("../app");
- let winProject = getProjectWindow(win);
- let onValidated = waitForUpdate(win, "project-validated");
- let onDetails = waitForUpdate(win, "details");
- yield winProject.projectList.importPackagedApp(packagedAppLocation);
- yield onValidated;
- yield onDetails;
- });
- }
-
- function startConnection(win, docRuntime, type, index) {
- let panelNode = docRuntime.querySelector("#runtime-panel");
- let items = panelNode.querySelectorAll(".runtime-panel-item-" + type);
- if (index === undefined) {
- is(items.length, 1, "Found one runtime button");
- }
-
- let deferred = promise.defer();
- win.AppManager.connection.once(
- win.Connection.Events.CONNECTED,
- () => deferred.resolve());
-
- items[index || 0].click();
-
- return deferred.promise;
- }
-
- function waitUntilConnected(win) {
- return Task.spawn(function*() {
- ok(win.document.querySelector("window").className, "busy", "UI is busy");
- yield win.UI._busyPromise;
- is(Object.keys(DebuggerServer._connections).length, 1, "Connected");
- // Logging runtime info needs to use the device actor
- yield waitForUpdate(win, "runtime-global-actors");
- // Ensure detailed telemetry is recorded
- yield waitForUpdate(win, "runtime-telemetry");
- });
- }
-
- function connectToRuntime(win, docRuntime, type, index) {
- return Task.spawn(function*() {
- startConnection(win, docRuntime, type, index);
- yield waitUntilConnected(win);
- });
- }
-
- function checkResults() {
- let result = Telemetry.prototype.telemetryInfo;
- for (let [histId, value] of Iterator(result)) {
- if (histId === "DEVTOOLS_WEBIDE_IMPORT_PROJECT_BOOLEAN") {
- ok(value.length === 1 && !!value[0],
- histId + " has 1 successful entry");
- } else if (histId ===
- "DEVTOOLS_WEBIDE_PROJECT_EDITOR_OPENED_COUNT") {
- ok(value.length === 1 && !!value[0],
- histId + " has 1 successful entry");
- } else if (histId === "DEVTOOLS_WEBIDE_OPENED_COUNT") {
- ok(value.length > 1, histId + " has more than one entry");
-
- let okay = value.every(function(element) {
- return !!element;
- });
-
- ok(okay, "All " + histId + " entries are true");
- } else if (histId.endsWith("WEBIDE_TIME_ACTIVE_SECONDS")) {
- ok(value.length > 1, histId + " has more than one entry");
-
- let okay = value.every(function(element) {
- return element > 0;
- });
-
- ok(okay, "All " + histId + " entries have time > 0");
- } else if (histId.endsWith("EDITOR_TIME_ACTIVE_SECONDS")) {
- ok(value.length === 1 && value[0] > 0,
- histId + " has 1 entry with time > 0");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTION_RESULT") {
- ok(value.length === 6, histId + " has 6 connection results");
-
- let okay = value.every(function(element) {
- return !!element;
- });
-
- ok(okay, "All " + histId + " connections succeeded");
- } else if (histId.endsWith("CONNECTION_RESULT")) {
- ok(value.length === 1 && !!value[0],
- histId + " has 1 successful connection");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTION_TIME_SECONDS") {
- ok(value.length === 6, histId + " has 6 connection results");
-
- let okay = value.every(function(element) {
- return element > 0;
- });
-
- ok(okay, "All " + histId + " connections have time > 0");
- } else if (histId.endsWith("USED")) {
- ok(value.length === 6, histId + " has 6 connection actions");
-
- let okay = value.every(function(element) {
- return !element;
- });
-
- ok(okay, "All " + histId + " actions were skipped");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE|USB") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE|WIFI") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE|SIMULATOR") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE|REMOTE") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE|LOCAL") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_TYPE|OTHER") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_ID|fakeUSB") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_ID|fakeWiFi") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_ID|fakeSimulator") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_ID|unknown") {
- is(value.length, 1, histId + " has 1 connection results");
- } else if (histId === "DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_ID|local") {
- is(value.length, 2, histId + " has 2 connection results");
- } else if (histId.startsWith("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_PROCESSOR")) {
- let processor = histId.split("|")[1];
- is(processor, Services.appinfo.XPCOMABI.split("-")[0], "Found runtime processor");
- is(value.length, 6, histId + " has 6 connection results");
- } else if (histId.startsWith("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_OS")) {
- let os = histId.split("|")[1];
- is(os, Services.appinfo.OS, "Found runtime OS");
- is(value.length, 6, histId + " has 6 connection results");
- } else if (histId.startsWith("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_PLATFORM_VERSION")) {
- let platformversion = histId.split("|")[1];
- is(platformversion, Services.appinfo.platformVersion, "Found runtime platform version");
- is(value.length, 6, histId + " has 6 connection results");
- } else if (histId.startsWith("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_APP_TYPE")) {
- let apptype = histId.split("|")[1];
- is(apptype, "firefox", "Found runtime app type");
- is(value.length, 6, histId + " has 6 connection results");
- } else if (histId.startsWith("DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_VERSION")) {
- let version = histId.split("|")[1];
- is(version, Services.appinfo.version, "Found runtime version");
- is(value.length, 6, histId + " has 6 connection results");
- } else {
- ok(false, "Unexpected " + histId + " was logged");
- }
- }
- }
-
- window.onload = function() {
- SimpleTest.testInChaosMode();
- SimpleTest.waitForExplicitFinish();
-
- let win;
-
- SimpleTest.registerCleanupFunction(() => {
- return Task.spawn(function*() {
- if (win) {
- yield closeWebIDE(win);
- }
- DebuggerServer.destroy();
- yield removeAllProjects();
- resetTelemetry();
- });
- });
-
- Task.spawn(function*() {
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- patchTelemetry();
-
- // Cycle once, so we can test for multiple opens
- yield cycleWebIDE();
-
- win = yield openWebIDE();
- let docRuntime = getRuntimeDocument(win);
-
- // Wait a bit, so we're open for a non-zero time
- yield waitForTime(TOOL_DELAY);
- addFakeRuntimes(win);
- yield addTestApp(win);
-
- // Each one should log a connection result and non-zero connection
- // time
- yield connectToRuntime(win, docRuntime, "usb");
- yield connectToRuntime(win, docRuntime, "wifi");
- yield connectToRuntime(win, docRuntime, "simulator");
- yield connectToRuntime(win, docRuntime, "other", 0 /* remote */);
- yield connectToRuntime(win, docRuntime, "other", 1 /* local */);
- yield connectToRuntime(win, docRuntime, "other", 2 /* other */);
- yield closeWebIDE(win);
- win = null;
-
- checkResults();
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_toolbox.html b/devtools/client/webide/test/test_toolbox.html
deleted file mode 100644
index 71ac2706c..000000000
--- a/devtools/client/webide/test/test_toolbox.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- let win;
-
- SimpleTest.registerCleanupFunction(() => {
- Task.spawn(function*() {
- if (win) {
- yield closeWebIDE(win);
- }
- DebuggerServer.destroy();
- yield removeAllProjects();
- });
- });
-
- Task.spawn(function*() {
- if (!DebuggerServer.initialized) {
- DebuggerServer.init();
- DebuggerServer.addBrowserActors();
- }
-
- win = yield openWebIDE();
- let docRuntime = getRuntimeDocument(win);
- let docProject = getProjectDocument(win);
-
- win.AppManager.update("runtime-list");
-
- let deferred = promise.defer();
- win.AppManager.connection.once(
- win.Connection.Events.CONNECTED,
- () => deferred.resolve());
-
- docRuntime.querySelectorAll(".runtime-panel-item-other")[1].click();
-
- ok(win.document.querySelector("window").className, "busy", "UI is busy");
- yield win.UI._busyPromise;
-
- is(Object.keys(DebuggerServer._connections).length, 1, "Connected");
-
- yield waitForUpdate(win, "runtime-global-actors");
-
- ok(win.AppManager.isMainProcessDebuggable(), "Main process available");
-
- // Select main process
- SimpleTest.executeSoon(() => {
- docProject.querySelectorAll("#project-panel-runtimeapps .panel-item")[0].click();
- });
-
- yield waitForUpdate(win, "project");
-
- // Toolbox opens automatically for main process / runtime apps
- ok(win.UI.toolboxPromise, "Toolbox promise exists");
- let toolbox = yield win.UI.toolboxPromise;
-
- yield toolbox.destroy();
-
- ok(!win.UI.toolboxPromise, "Toolbox promise should be unset once toolbox.destroy()'s promise resolves");
-
- // Reopen the toolbox right after to check races and also
- // opening a toolbox more than just once against the same target
- yield win.Cmds.toggleToolbox();
-
- ok(win.UI.toolboxPromise, "Toolbox promise exists");
-
- yield win.UI.destroyToolbox();
-
- ok(!win.UI.toolboxPromise, "Toolbox promise is also nullified the second times");
-
- yield win.Cmds.disconnectRuntime();
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/test_zoom.html b/devtools/client/webide/test/test_zoom.html
deleted file mode 100644
index 4ad3885d2..000000000
--- a/devtools/client/webide/test/test_zoom.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
- <head>
- <meta charset="utf8">
- <title></title>
-
- <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
- <script type="application/javascript;version=1.8" src="head.js"></script>
- <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
- </head>
-
- <body>
-
- <script type="application/javascript;version=1.8">
- window.onload = function() {
- SimpleTest.waitForExplicitFinish();
-
- Task.spawn(function* () {
- let win = yield openWebIDE();
- let viewer = win.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIWebNavigation)
- .QueryInterface(Ci.nsIDocShell)
- .contentViewer;
-
- win.Cmds.zoomOut();
- win.Cmds.zoomOut();
- win.Cmds.zoomOut();
- win.Cmds.zoomOut();
- win.Cmds.zoomOut();
- win.Cmds.zoomOut();
- win.Cmds.zoomOut();
-
- let roundZoom = Math.round(10 * viewer.fullZoom) / 10;
- is(roundZoom, 0.6, "Reach min zoom");
-
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
- win.Cmds.zoomIn();
-
- roundZoom = Math.round(10 * viewer.fullZoom) / 10;
- is(roundZoom, 1.4, "Reach max zoom");
-
- yield closeWebIDE(win);
-
- win = yield openWebIDE();
- viewer = win.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIWebNavigation)
- .QueryInterface(Ci.nsIDocShell)
- .contentViewer;
-
- roundZoom = Math.round(10 * viewer.fullZoom) / 10;
- is(roundZoom, 1.4, "Zoom restored");
-
- win.Cmds.resetZoom();
-
- is(viewer.fullZoom, 1, "Zoom reset");
-
- yield closeWebIDE(win);
-
- SimpleTest.finish();
- });
- }
- </script>
- </body>
-</html>
diff --git a/devtools/client/webide/test/validator/no-name-or-icon/manifest.webapp b/devtools/client/webide/test/validator/no-name-or-icon/manifest.webapp
deleted file mode 100644
index 149e3fb79..000000000
--- a/devtools/client/webide/test/validator/no-name-or-icon/manifest.webapp
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "launch_path": "/home.html"
-}
diff --git a/devtools/client/webide/test/validator/non-absolute-path/manifest.webapp b/devtools/client/webide/test/validator/non-absolute-path/manifest.webapp
deleted file mode 100644
index 64744067f..000000000
--- a/devtools/client/webide/test/validator/non-absolute-path/manifest.webapp
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "non-absolute path",
- "icons": {
- "128": "/icon.png"
- },
- "launch_path": "non-absolute.html"
-}
diff --git a/devtools/client/webide/test/validator/valid/alsoValid/manifest.webapp b/devtools/client/webide/test/validator/valid/alsoValid/manifest.webapp
deleted file mode 100644
index 20bd97bba..000000000
--- a/devtools/client/webide/test/validator/valid/alsoValid/manifest.webapp
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "valid at subfolder",
- "launch_path": "/home.html",
- "icons": {
- "128": "/icon.png"
- }
-}
diff --git a/devtools/client/webide/test/validator/valid/home.html b/devtools/client/webide/test/validator/valid/home.html
deleted file mode 100644
index e69de29bb..000000000
--- a/devtools/client/webide/test/validator/valid/home.html
+++ /dev/null
diff --git a/devtools/client/webide/test/validator/valid/icon.png b/devtools/client/webide/test/validator/valid/icon.png
deleted file mode 100644
index e69de29bb..000000000
--- a/devtools/client/webide/test/validator/valid/icon.png
+++ /dev/null
diff --git a/devtools/client/webide/test/validator/valid/manifest.webapp b/devtools/client/webide/test/validator/valid/manifest.webapp
deleted file mode 100644
index 2c22a1567..000000000
--- a/devtools/client/webide/test/validator/valid/manifest.webapp
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "valid",
- "launch_path": "/home.html",
- "icons": {
- "128": "/icon.png"
- }
-}
diff --git a/devtools/client/webide/test/validator/wrong-launch-path/icon.png b/devtools/client/webide/test/validator/wrong-launch-path/icon.png
deleted file mode 100644
index e69de29bb..000000000
--- a/devtools/client/webide/test/validator/wrong-launch-path/icon.png
+++ /dev/null
diff --git a/devtools/client/webide/test/validator/wrong-launch-path/manifest.webapp b/devtools/client/webide/test/validator/wrong-launch-path/manifest.webapp
deleted file mode 100644
index 08057bae1..000000000
--- a/devtools/client/webide/test/validator/wrong-launch-path/manifest.webapp
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "valid",
- "launch_path": "/wrong-path.html",
- "icons": {
- "128": "/icon.png"
- }
-}
diff --git a/devtools/client/webide/themes/addons.css b/devtools/client/webide/themes/addons.css
deleted file mode 100644
index 1ae41f2d9..000000000
--- a/devtools/client/webide/themes/addons.css
+++ /dev/null
@@ -1,79 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-button {
- line-height: 20px;
- font-size: 1em;
- height: 30px;
- max-height: 30px;
- min-width: 120px;
- padding: 3px;
- color: #737980;
- border: 1px solid rgba(23,50,77,.4);
- border-radius: 5px;
- background-color: #f1f1f1;
- background-image: linear-gradient(#fff, rgba(255,255,255,.1));
- box-shadow: 0 1px 1px 0 #fff, inset 0 2px 2px 0 #fff;
- text-shadow: 0 1px 1px #fefffe;
- -moz-appearance: none;
- -moz-border-top-colors: none !important;
- -moz-border-right-colors: none !important;
- -moz-border-bottom-colors: none !important;
- -moz-border-left-colors: none !important;
-}
-
-button:hover {
- background-image: linear-gradient(#fff, rgba(255,255,255,.6));
- cursor: pointer;
-}
-
-button:hover:active {
- background-image: linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.6));
-}
-
-progress {
- height: 30px;
- vertical-align: middle;
- padding: 0;
- width: 120px;
-}
-
-li {
- margin: 20px 0;
-}
-
-.name {
- display: inline-block;
- min-width: 280px;
-}
-
-.status {
- display: inline-block;
- min-width: 120px;
-}
-
-.warning {
- color: #F06;
- margin: 0;
- font-size: 0.9em;
-}
-
-li[status="unknown"],
-li > .uninstall-button,
-li > .install-button,
-li > progress {
- display: none;
-}
-
-li[status="installed"] > .uninstall-button,
-li[status="uninstalled"] > .install-button,
-li[status="preparing"] > progress,
-li[status="downloading"] > progress,
-li[status="installing"] > progress {
- display: inline;
-}
-
-li:not([status="uninstalled"]) > .warning {
- display: none;
-}
diff --git a/devtools/client/webide/themes/config-view.css b/devtools/client/webide/themes/config-view.css
deleted file mode 100644
index 019e735df..000000000
--- a/devtools/client/webide/themes/config-view.css
+++ /dev/null
@@ -1,80 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-html, body {
- background: white;
-}
-
-.action {
- display: inline;
-}
-
-.action[hidden] {
- display: none;
-}
-
-#device-fields {
- font-family: sans-serif;
- padding-left: 6px;
- width: 100%;
- table-layout: auto;
- margin-top: 110px;
-}
-
-#custom-value-name {
- width: 50%;
-}
-
-header {
- background-color: rgba(255, 255, 255, 0.8);
- border-bottom: 1px solid #EEE;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- height: 90px;
- padding: 10px 20px;
-}
-
-#device-fields td {
- background-color: #F9F9F9;
- border-bottom: 1px solid #CCC;
- border-right: 1px solid #FFF;
- font-size: 0.75em;
-}
-
-#device-fields td:first-child {
- max-width: 250px;
- min-width: 150px;
-}
-
-#device-fields td.preference-name, #device-fields td.setting-name {
- width: 50%;
- min-width: 400px;
- word-break: break-all;
-}
-
-#device-fields button {
- display: inline-block;
- font-family: sans-serif;
- font-size: 0.7rem;
- white-space: nowrap;
-}
-
-#device-fields tr.hide, #device-fields button.hide {
- display: none;
-}
-
-#device-fields .custom-input {
- width: 130px;
-}
-
-#search {
- margin-bottom: 20px;
- width: 100%;
-}
-
-#search-bar {
- width: 80%;
-}
diff --git a/devtools/client/webide/themes/deck.css b/devtools/client/webide/themes/deck.css
deleted file mode 100644
index 30537f612..000000000
--- a/devtools/client/webide/themes/deck.css
+++ /dev/null
@@ -1,91 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-html {
- font: message-box;
- font-size: 0.9em;
- font-weight: normal;
- margin: 0;
- height: 100%;
- color: #737980;
- background-color: #ededed;
-}
-
-body {
- margin: 0;
- padding: 20px;
- background-image: linear-gradient(#fff, #ededed 100px);
-}
-
-.text-input {
- display: flex;
-}
-
-.text-input input {
- flex: 0.5;
- margin-left: 5px;
-}
-
-h1 {
- font-size: 2em;
- font-weight: lighter;
- line-height: 1.2;
- margin: 0;
- margin-bottom: .5em;
-}
-
-#controls {
- float: right;
- position: relative;
- top: -10px;
- right: -10px;
-}
-
-#controls > a {
- color: #4C9ED9;
- font-size: small;
- cursor: pointer;
- border-bottom: 1px dotted;
- margin-left: 10px;
-}
-
-table {
- font-family: monospace;
- border-collapse: collapse;
-}
-
-th, td {
- padding: 5px;
- border: 1px solid #eee;
-}
-
-th {
- min-width: 100px;
-}
-
-th:first-of-type, td:first-of-type {
- text-align: left;
-}
-
-li {
- list-style: none;
- padding: 2px;
-}
-
-li > label:hover {
- background-color: rgba(0,0,0,0.02);
-}
-
-li > label > span {
- display: inline-block;
-}
-
-input, select {
- box-sizing: border-box;
-}
-
-select {
- padding-top: 2px;
- padding-bottom: 2px;
-}
diff --git a/devtools/client/webide/themes/default-app-icon.png b/devtools/client/webide/themes/default-app-icon.png
deleted file mode 100644
index f186d9c62..000000000
--- a/devtools/client/webide/themes/default-app-icon.png
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/themes/details.css b/devtools/client/webide/themes/details.css
deleted file mode 100644
index dc73d5357..000000000
--- a/devtools/client/webide/themes/details.css
+++ /dev/null
@@ -1,138 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-body {
- margin: 0;
- background-color: white;
- font: message-box;
-}
-
-.hidden {
- display: none;
-}
-
-h1, h3, p {
- margin: 0;
-}
-
-#toolbar {
- background-color: #D8D8D8;
- border-bottom: 1px solid #AAA;
-}
-
-#toolbar > button {
- -moz-appearance: none;
- background-color: transparent;
- border-width: 0 1px 0 0;
- border-color: #AAA;
- border-style: solid;
- margin: 0;
- padding: 0 12px;
- font-family: inherit;
- font-weight: bold;
- height: 24px;
-}
-
-#toolbar > button:hover {
- background-color: #CCC;
- cursor: pointer;
-}
-
-#validation_status {
- float: right;
- text-transform: uppercase;
- font-size: 10px;
- line-height: 24px;
- padding: 0 12px;
- color: white;
-}
-
-
-header {
- padding: 20px 0;
-}
-
-header > div {
- vertical-align: top;
- display: flex;
- flex-direction: column;
-}
-
-#icon {
- height: 48px;
- width: 48px;
- float: left;
- margin: 0 20px;
-}
-
-h1, #type {
- line-height: 24px;
- height: 24px; /* avoid collapsing if empty */
- display: block;
-}
-
-h1 {
- font-size: 20px;
- overflow-x: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-#type {
- font-size: 10px;
- text-transform: uppercase;
- color: #777;
-}
-
-main {
- padding-left: 88px;
-}
-
-h3 {
- color: #999;
- font-size: 10px;
- font-weight: normal;
-}
-
-main > p {
- margin-bottom: 20px;
-}
-
-.validation_messages {
- margin-left: 74px;
- list-style: none;
- border-left: 4px solid transparent;
- padding: 0 10px;;
-}
-
-
-body.valid #validation_status {
- background-color: #81D135;
-}
-
-body.warning #validation_status {
- background-color: #FFAC00;
-}
-
-body.error #validation_status {
- background-color: #ED4C62;
-}
-
-#warningslist {
- border-color: #FFAC00
-}
-
-#errorslist {
- border-color: #ED4C62;
-}
-
-#validation_status > span {
- display: none;
-}
-
-body.valid #validation_status > .valid,
-body.warning #validation_status > .warning,
-body.error #validation_status > .error {
- display: inline;
-}
diff --git a/devtools/client/webide/themes/icons.png b/devtools/client/webide/themes/icons.png
deleted file mode 100644
index 5e1dd5c64..000000000
--- a/devtools/client/webide/themes/icons.png
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/themes/jar.mn b/devtools/client/webide/themes/jar.mn
deleted file mode 100644
index 4235278da..000000000
--- a/devtools/client/webide/themes/jar.mn
+++ /dev/null
@@ -1,24 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-webide.jar:
-% skin webide classic/1.0 %skin/
-* skin/webide.css (webide.css)
- skin/icons.png (icons.png)
- skin/details.css (details.css)
- skin/newapp.css (newapp.css)
- skin/throbber.svg (throbber.svg)
- skin/deck.css (deck.css)
- skin/addons.css (addons.css)
- skin/runtimedetails.css (runtimedetails.css)
- skin/permissionstable.css (permissionstable.css)
- skin/monitor.css (monitor.css)
- skin/config-view.css (config-view.css)
- skin/wifi-auth.css (wifi-auth.css)
- skin/logs.css (logs.css)
- skin/panel-listing.css (panel-listing.css)
- skin/simulator.css (simulator.css)
- skin/rocket.svg (rocket.svg)
- skin/noise.png (noise.png)
- skin/default-app-icon.png (default-app-icon.png)
diff --git a/devtools/client/webide/themes/logs.css b/devtools/client/webide/themes/logs.css
deleted file mode 100644
index 446b6e41c..000000000
--- a/devtools/client/webide/themes/logs.css
+++ /dev/null
@@ -1,18 +0,0 @@
-html, body {
- background: var(--theme-body-background);
- color: var(--theme-body-color);
-}
-
-h1 {
- font-size: 1.2em;
-}
-
-ul {
- padding: 0;
- font-size: 1em;
-}
-
-li {
- list-style: none;
- margin: 0;
-}
diff --git a/devtools/client/webide/themes/monitor.css b/devtools/client/webide/themes/monitor.css
deleted file mode 100644
index ba4b298ed..000000000
--- a/devtools/client/webide/themes/monitor.css
+++ /dev/null
@@ -1,86 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* Graph */
-.graph {
- height: 500px;
- width: 100%;
- padding-top: 20px;
- padding-bottom: 20px;
- margin-bottom: 30px;
- background-color: white;
-}
-.graph > svg, .sidebar {
- display: inline-block;
- vertical-align: top;
-}
-.disabled {
- opacity: 0.5;
-}
-.graph.disabled {
- height: 30px;
-}
-.graph.disabled > svg {
- visibility: hidden;
-}
-.curve path, .event-slot line {
- fill: none;
- stroke-width: 1.5px;
-}
-.axis line {
- fill: none;
- stroke: #000;
- shape-rendering: crispEdges;
-}
-.axis path {
- fill: none;
- stroke: black;
- stroke-width: 1px;
- shape-rendering: crispEdges;
-}
-.tick text, .x.ruler text, .y.ruler text {
- font-size: 0.9em;
-}
-.x.ruler text {
- text-anchor: middle;
-}
-.y.ruler text {
- text-anchor: end;
-}
-
-/* Sidebar */
-.sidebar {
- width: 150px;
- overflow-x: hidden;
-}
-.sidebar label {
- cursor: pointer;
- display: block;
-}
-.sidebar span:not(.color) {
- vertical-align: 13%;
-}
-.sidebar input {
- visibility: hidden;
-}
-.sidebar input:hover {
- visibility: visible;
-}
-.graph-title {
- margin-top: 5px;
- font-size: 1.2em;
-}
-.legend-color {
- display: inline-block;
- height: 10px;
- width: 10px;
- margin-left: 1px;
- margin-right: 3px;
-}
-.legend-id {
- font-size: .9em;
-}
-.graph.disabled > .sidebar > .legend {
- display: none;
-}
diff --git a/devtools/client/webide/themes/moz.build b/devtools/client/webide/themes/moz.build
deleted file mode 100644
index aac3a838c..000000000
--- a/devtools/client/webide/themes/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-JAR_MANIFESTS += ['jar.mn']
diff --git a/devtools/client/webide/themes/newapp.css b/devtools/client/webide/themes/newapp.css
deleted file mode 100644
index 0b351a40a..000000000
--- a/devtools/client/webide/themes/newapp.css
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-dialog {
- -moz-appearance: none;
- background-image: linear-gradient(rgb(255, 255, 255), rgb(237, 237, 237) 100px);
- font-family: "Clear Sans", sans-serif;
- color: #424E5A;
- overflow-y: scroll;
-}
-
-.header-name {
- font-size: 1.5rem;
- font-weight: normal;
- margin: 15px 0;
-}
-
-richlistbox {
- -moz-appearance: none;
- overflow-y: auto;
- border: 1px solid #424E5A;
-}
-
-richlistitem {
- padding: 6px 0;
-}
-
-richlistitem:not([selected="true"]):hover {
- background-color: rgba(0,0,0,0.04);
-}
-
-richlistitem > vbox > label {
- margin: 0;
- font-size: 1.1em;
-}
-
-richlistbox > description {
- margin: 8px;
-}
-
-richlistitem {
- -moz-box-align: start;
-}
-
-richlistitem > image {
- height: 24px;
- width: 24px;
- margin: 0 6px;
-}
-
-textbox {
- font-size: 1.2rem;
-}
diff --git a/devtools/client/webide/themes/noise.png b/devtools/client/webide/themes/noise.png
deleted file mode 100644
index b3c42acae..000000000
--- a/devtools/client/webide/themes/noise.png
+++ /dev/null
Binary files differ
diff --git a/devtools/client/webide/themes/panel-listing.css b/devtools/client/webide/themes/panel-listing.css
deleted file mode 100644
index 06e51211c..000000000
--- a/devtools/client/webide/themes/panel-listing.css
+++ /dev/null
@@ -1,150 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-html {
- font: message-box;
- font-size: 11px;
- font-weight: 400;
-}
-
-label,
-.panel-item,
-#project-panel-projects,
-#runtime-panel-projects {
- display: block;
- float: left;
- width: 100%;
- text-align: left;
-}
-
-.project-image,
-.panel-item span {
- display: inline-block;
- float: left;
- line-height: 20px;
-}
-
-.project-image {
- margin-right: 10px;
- max-height: 20px;
-}
-
-.panel-header {
- color: #ACACAC;
- text-transform: uppercase;
- line-height: 200%;
- margin: 5px 5px 0 5px;
- font-weight: 700;
- width: 100%;
-}
-
-.panel-header:first-child {
- margin-top: 0;
-}
-
-.panel-header[hidden], .panel-item[hidden] {
- display: none;
-}
-
-#runtime-panel-simulator,
-.panel-item-complex {
- clear: both;
- position: relative;
-}
-
-.panel-item span {
- display: block;
- float: left;
- overflow: hidden;
- text-overflow: ellipsis;
- width: 75%;
- white-space: nowrap;
-}
-
-.panel-item {
- -moz-appearance: none;
- -moz-box-align: center;
- padding: 3%;
- display: block;
- width: 94%;
- cursor: pointer;
- border-top: 1px solid transparent;
- border-left: 0;
- border-bottom: 1px solid #CCC;
- border-right: 0;
- background-color: transparent;
-}
-
-button.panel-item {
- background-position: 5px 5px;
- background-repeat: no-repeat;
- background-size: 14px 14px;
- padding-left: 25px;
- width: 100%;
-}
-
-.panel-item:disabled {
- background-color: #FFF;
- color: #5A5A5A;
- opacity: 0.5;
- cursor: default;
-}
-
-.refresh-icon {
- background-image: url("chrome://devtools/skin/images/reload.svg");
- height: 14px;
- width: 14px;
- border: 0;
- opacity: 0.6;
- display: inline-block;
- margin: 3px;
- float: right;
-}
-
-.panel-item:not(:disabled):hover,
-button.panel-item:not(:disabled):hover {
- background-color: #CCF0FD;
- border-top: 1px solid #EDEDED;
-}
-
-.configure-button {
- display: inline-block;
- height: 30px;
- width: 30px;
- background-color: transparent;
- background-image: -moz-image-rect(url("icons.png"), 104, 462, 129, 438);
- background-position: center center;
- background-repeat: no-repeat;
- background-size: 14px 14px;
- position: absolute;
- top: -2px;
- right: 0;
- border: 0;
-}
-
-.configure-button:hover {
- cursor: pointer;
-}
-
-.project-panel-item-openpackaged { background-image: -moz-image-rect(url("icons.png"), 260, 438, 286, 412); }
-.runtime-panel-item-simulator { background-image: -moz-image-rect(url("icons.png"), 0, 438, 26, 412); }
-.runtime-panel-item-other { background-image: -moz-image-rect(url("icons.png"), 26, 438, 52, 412); }
-#runtime-permissions { background-image: -moz-image-rect(url("icons.png"), 105, 438, 131, 412); }
-#runtime-screenshot { background-image: -moz-image-rect(url("icons.png"), 131, 438, 156, 412); }
-
-#runtime-preferences,
-#runtime-settings { background-image: -moz-image-rect(url("icons.png"), 105, 464, 131, 438); }
-
-#runtime-panel-nousbdevice,
-#runtime-details { background-image: -moz-image-rect(url("icons.png"), 156, 438, 182, 412); }
-
-.runtime-panel-item-usb,
-#runtime-disconnect { background-image: -moz-image-rect(url("icons.png"), 52, 438, 78, 412); }
-
-.runtime-panel-item-wifi,
-.project-panel-item-openhosted { background-image: -moz-image-rect(url("icons.png"), 208, 438, 234, 412); }
-
-.project-panel-item-newapp,
-#runtime-panel-noadbhelper,
-#runtime-panel-installsimulator { background-image: -moz-image-rect(url("icons.png"), 234, 438, 260, 412); }
diff --git a/devtools/client/webide/themes/permissionstable.css b/devtools/client/webide/themes/permissionstable.css
deleted file mode 100644
index 3a45e0d74..000000000
--- a/devtools/client/webide/themes/permissionstable.css
+++ /dev/null
@@ -1,23 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-html, body {
- background: white;
-}
-
-.permissionstable td {
- text-align: center;
-}
-
-.permallow {
- color: rgb(152,207,57);
-}
-
-.permprompt {
- color: rgb(0,158,237);
-}
-
-.permdeny {
- color: rgb(204,73,8);
-}
diff --git a/devtools/client/webide/themes/rocket.svg b/devtools/client/webide/themes/rocket.svg
deleted file mode 100644
index a0cca5c21..000000000
--- a/devtools/client/webide/themes/rocket.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24">
- <g opacity="0.1">
- <path fill="#fff" d="M12,2.3c-1.127,0-3.333,3.721-4.084,7.411l-2.535,2.535v6.619l1.767,0l2.464-2.464 c0.252,0.264,0.529,0.486,0.827,0.662h3.118c0.299-0.175,0.579-0.397,0.831-0.662l2.464,2.464l1.767,0v-6.619l-2.535-2.535 C15.333,6.021,13.127,2.3,12,2.3z M12.003,6.181c0.393,0,1.084,1.103,1.515,2.423c-0.466-0.087-0.963-0.135-1.481-0.135 c-0.545,0-1.066,0.054-1.553,0.15C10.914,7.292,11.608,6.181,12.003,6.181z"/>
- <path fill="#fff" d="M12.792,18.755c0,0.778-0.603,1.408-0.805,1.408c-0.201,0-0.805-0.631-0.805-1.408 c0-0.301,0.055-0.579,0.147-0.809h-0.932c-0.109,0.403-0.171,0.854-0.171,1.33c0,1.714,1.33,3.104,1.774,3.104 s1.774-1.389,1.774-3.103c0-0.477-0.062-0.927-0.171-1.331l-0.957,0C12.738,18.175,12.792,18.453,12.792,18.755z"/>
- <path fill="#414042" d="M12,2c-1.127,0-3.333,3.721-4.084,7.411l-2.535,2.535v6.619l1.767,0l2.464-2.464 c0.252,0.264,0.529,0.486,0.827,0.662h3.118c0.299-0.175,0.579-0.397,0.831-0.662l2.464,2.464l1.767,0v-6.619l-2.535-2.535 C15.333,5.721,13.127,2,12,2z M12.003,5.881c0.393,0,1.084,1.103,1.515,2.423c-0.466-0.087-0.963-0.135-1.481-0.135 c-0.545,0-1.066,0.054-1.553,0.15C10.914,6.992,11.608,5.881,12.003,5.881z"/>
- <path fill="#414042" d="M12.792,18.455c0,0.778-0.603,1.408-0.805,1.408c-0.201,0-0.805-0.631-0.805-1.408 c0-0.301,0.055-0.579,0.147-0.809h-0.932c-0.109,0.403-0.171,0.854-0.171,1.33c0,1.714,1.33,3.104,1.774,3.104 s1.774-1.389,1.774-3.103c0-0.477-0.062-0.927-0.171-1.331l-0.957,0C12.738,17.875,12.792,18.153,12.792,18.455z"/>
- </g>
-</svg>
diff --git a/devtools/client/webide/themes/runtimedetails.css b/devtools/client/webide/themes/runtimedetails.css
deleted file mode 100644
index 91ced5bff..000000000
--- a/devtools/client/webide/themes/runtimedetails.css
+++ /dev/null
@@ -1,25 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-html, body {
- background: white;
-}
-
-#devicePrivileges {
- font-family: monospace;
- padding-left: 6px;
-}
-
-#devtools-check > a {
- color: #4C9ED9;
- cursor: pointer;
-}
-
-.action {
- display: inline;
-}
-
-.action[hidden] {
- display: none;
-}
diff --git a/devtools/client/webide/themes/simulator.css b/devtools/client/webide/themes/simulator.css
deleted file mode 100644
index 036cfcdb4..000000000
--- a/devtools/client/webide/themes/simulator.css
+++ /dev/null
@@ -1,41 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-select:not(.custom) > option[value="custom"] {
- display: none;
-}
-
-select, input[type="text"] {
- width: 13rem;
-}
-
-input[name="name"] {
- height: 1.8rem;
-}
-
-input[type="number"] {
- width: 6rem;
-}
-
-input[type="text"], input[type="number"] {
- padding-left: 0.2rem;
-}
-
-li > label:hover {
- background-color: transparent;
-}
-
-ul {
- padding-left: 0;
-}
-
-.label {
- width: 6rem;
- padding: 0.2rem;
- text-align: right;
-}
-
-.hidden {
- display: none;
-}
diff --git a/devtools/client/webide/themes/throbber.svg b/devtools/client/webide/themes/throbber.svg
deleted file mode 100644
index d89fb3851..000000000
--- a/devtools/client/webide/themes/throbber.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<svg xmlns="http://www.w3.org/2000/svg"
- width="24" height="24" viewBox="0 0 64 64">
- <g>
- <rect x="30" y="4" width="4" height="15" transform="rotate(0, 32, 32)" fill="#BBB"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(30, 32, 32)" fill="#AAA"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(60, 32, 32)" fill="#999"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(90, 32, 32)" fill="#888"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(120, 32, 32)" fill="#777"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(150, 32, 32)" fill="#666"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(180, 32, 32)" fill="#555"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(210, 32, 32)" fill="#444"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(240, 32, 32)" fill="#333"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(270, 32, 32)" fill="#222"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(300, 32, 32)" fill="#111"/>
- <rect x="30" y="4" width="4" height="15" transform="rotate(330, 32, 32)" fill="#000"/>
- <animateTransform attributeName="transform" type="rotate" calcMode="discrete" values="0 32 32;30 32 32;60 32 32;90 32 32;120 32 32;150 32 32;180 32 32;210 32 32;240 32 32;270 32 32;300 32 32;330 32 32" dur="0.8s" repeatCount="indefinite"/>
- </g>
-</svg>
diff --git a/devtools/client/webide/themes/webide.css b/devtools/client/webide/themes/webide.css
deleted file mode 100644
index 0dea91a5f..000000000
--- a/devtools/client/webide/themes/webide.css
+++ /dev/null
@@ -1,149 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
- *
- * Icons.png:
- *
- * actions icons: 100x100. Starts at 0x0.
- * menu icons: 26x26. Starts at 312x0.
- * anchors icons: 27x16. Starts at 364x0.
- *
- */
-
-#main-toolbar {
- padding: 0 12px;
-}
-
-#action-buttons-container {
- -moz-box-pack: center;
- height: 50px;
-}
-
-#panel-buttons-container {
- height: 50px;
- margin-top: -50px;
- pointer-events: none;
-}
-
-#panel-buttons-container > .panel-button {
- pointer-events: auto;
-}
-
-#action-busy-undetermined {
- height: 24px;
- width: 24px;
-}
-
-window.busy .action-button,
-window:not(.busy) #action-busy,
-window.busy-undetermined #action-busy-determined,
-window.busy-determined #action-busy-undetermined {
- display: none;
-}
-
-/* Panel buttons - runtime */
-
-#runtime-panel-button > .panel-button-image {
- list-style-image: url('icons.png');
- -moz-image-region: rect(78px,438px,104px,412px);
- width: 13px;
- height: 13px;
-}
-
-#runtime-panel-button[active="true"] > .panel-button-image {
- -moz-image-region: rect(78px,464px,104px,438px);
-}
-
-/* Action buttons */
-
-.action-button {
- -moz-appearance: none;
- border-width: 0;
- margin: 0;
- padding: 0;
- list-style-image: url('icons.png');
-}
-
-.action-button[disabled="true"] {
- opacity: 0.4;
-}
-
-.action-button > .toolbarbutton-icon {
- width: 40px;
- height: 40px;
-}
-
-.action-button > .toolbarbutton-text {
- display: none;
-}
-
-#action-button-play { -moz-image-region: rect(0,100px,100px,0) }
-#action-button-stop { -moz-image-region: rect(0,200px,100px,100px) }
-#action-button-debug { -moz-image-region: rect(0,300px,100px,200px) }
-
-#action-button-play:not([disabled="true"]):hover { -moz-image-region: rect(200px,100px,300px,0) }
-#action-button-stop:not([disabled="true"]):hover { -moz-image-region: rect(200px,200px,300px,100px) }
-#action-button-debug:not([disabled="true"]):not([active="true"]):hover { -moz-image-region: rect(200px,300px,300px,200px) }
-
-#action-button-play.reload { -moz-image-region: rect(0,400px,100px,303px) }
-#action-button-play.reload:hover { -moz-image-region: rect(200px,400px,300px,303px) }
-
-#action-button-debug[active="true"] { -moz-image-region: rect(100px,300px,200px,200px) }
-
-/* Panels */
-
-.panel-list {
- display: none;
- position: relative;
- max-width: 190px;
- overflow: hidden;
-}
-
-#project-listing-panel {
- max-width: 165px;
-}
-
-.panel-list-wrapper {
- height: 100%;
- width: 100%;
- min-width: 100px;
- position: absolute;
- top: 0;
- bottom: 0;
- right: 0;
- left: 0;
-}
-
-.panel-list-wrapper > iframe {
- height: inherit;
- width: 100%;
- position: absolute;
- top: 0;
- bottom: 0;
- right: 0;
- left: 0;
-}
-
-[sidebar-displayed] {
- display: block;
-}
-
-/* Main view */
-
-#deck {
- background-color: rgb(225, 225, 225);
- background-image: url('rocket.svg'), url('noise.png');
- background-repeat: no-repeat, repeat;
- background-size: 35%, auto;
- background-position: center center, top left;
-%ifndef XP_MACOSX
- border-top: 1px solid #AAA;
-%endif
-}
-
-.devtools-horizontal-splitter {
- position: relative;
- border-bottom: 1px solid #aaa;
-}
diff --git a/devtools/client/webide/themes/wifi-auth.css b/devtools/client/webide/themes/wifi-auth.css
deleted file mode 100644
index de6afc94e..000000000
--- a/devtools/client/webide/themes/wifi-auth.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-html, body {
- background: white;
-}
-
-body {
- display: flex;
- flex-direction: column;
- height: 90%;
-}
-
-div {
- margin-bottom: 1em;
-}
-
-#qr-code {
- flex: 1;
- display: flex;
- flex-direction: column;
- align-items: center;
-}
-
-#qr-code-wrapper {
- flex: 1;
- width: 100%;
- margin: 2em 0;
- text-align: center;
-}
-
-#qr-code img {
- height: 100%;
-}
-
-.toggle-scanner {
- color: #4C9ED9;
- font-size: small;
- cursor: pointer;
- border-bottom: 1px dotted;
-}
-
-#token {
- display: none;
-}
-
-body[token] > #token {
- display: flex;
- flex-direction: column;
-}
-
-body[token] > #qr-code {
- display: none;
-}
-
-#token pre,
-#token a {
- align-self: center;
-}
-
-#qr-size-note {
- text-align: center
-}
diff --git a/devtools/client/webide/webide-prefs.js b/devtools/client/webide/webide-prefs.js
deleted file mode 100644
index 94871171d..000000000
--- a/devtools/client/webide/webide-prefs.js
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-pref("devtools.webide.showProjectEditor", true);
-pref("devtools.webide.templatesURL", "https://code.cdn.mozilla.net/templates/list.json");
-pref("devtools.webide.autoinstallADBHelper", true);
-pref("devtools.webide.autoinstallFxdtAdapters", true);
-pref("devtools.webide.autoConnectRuntime", true);
-pref("devtools.webide.restoreLastProject", true);
-pref("devtools.webide.enableLocalRuntime", false);
-pref("devtools.webide.addonsURL", "https://ftp.mozilla.org/pub/mozilla.org/labs/fxos-simulator/index.json");
-pref("devtools.webide.simulatorAddonsURL", "https://ftp.mozilla.org/pub/mozilla.org/labs/fxos-simulator/#VERSION#/#OS#/fxos_#SLASHED_VERSION#_simulator-#OS#-latest.xpi");
-pref("devtools.webide.simulatorAddonID", "fxos_#SLASHED_VERSION#_simulator@mozilla.org");
-pref("devtools.webide.simulatorAddonRegExp", "fxos_(.*)_simulator@mozilla\\.org$");
-pref("devtools.webide.adbAddonURL", "https://ftp.mozilla.org/pub/mozilla.org/labs/fxos-simulator/adb-helper/#OS#/adbhelper-#OS#-latest.xpi");
-pref("devtools.webide.adbAddonID", "adbhelper@mozilla.org");
-pref("devtools.webide.adaptersAddonURL", "https://ftp.mozilla.org/pub/mozilla.org/labs/valence/#OS#/valence-#OS#-latest.xpi");
-pref("devtools.webide.adaptersAddonID", "fxdevtools-adapters@mozilla.org");
-pref("devtools.webide.monitorWebSocketURL", "ws://localhost:9000");
-pref("devtools.webide.lastConnectedRuntime", "");
-pref("devtools.webide.lastSelectedProject", "");
-pref("devtools.webide.logSimulatorOutput", false);
-pref("devtools.webide.widget.autoinstall", true);
-#ifdef MOZ_DEV_EDITION
-pref("devtools.webide.widget.enabled", true);
-pref("devtools.webide.widget.inNavbarByDefault", true);
-#else
-pref("devtools.webide.widget.enabled", false);
-pref("devtools.webide.widget.inNavbarByDefault", false);
-#endif
-pref("devtools.webide.zoom", "1");
-pref("devtools.webide.busyTimeout", 10000);
-pref("devtools.webide.autosaveFiles", true);
diff --git a/devtools/server/actors/webconsole.js b/devtools/server/actors/webconsole.js
index a1eba84ed..66715bd34 100644
--- a/devtools/server/actors/webconsole.js
+++ b/devtools/server/actors/webconsole.js
@@ -888,7 +888,8 @@ WebConsoleActor.prototype =
let evalResult = evalInfo.result;
let helperResult = evalInfo.helperResult;
- let result, errorDocURL, errorMessage, errorGrip = null, frame = null;
+ let result, errorDocURL, errorMessage, errorNotes = null, errorGrip = null,
+ frame = null;
if (evalResult) {
if ("return" in evalResult) {
result = evalResult.return;
@@ -943,6 +944,23 @@ WebConsoleActor.prototype =
};
}
} catch (ex) {}
+
+ try {
+ let notes = error.errorNotes;
+ if (notes && notes.length) {
+ errorNotes = [];
+ for (let note of notes) {
+ errorNotes.push({
+ messageBody: this._createStringGrip(note.message),
+ frame: {
+ source: note.fileName,
+ line: note.lineNumber,
+ column: note.columnNumber,
+ }
+ });
+ }
+ }
+ } catch (ex) {}
}
}
@@ -967,6 +985,7 @@ WebConsoleActor.prototype =
exceptionDocURL: errorDocURL,
frame,
helperResult: helperResult,
+ notes: errorNotes,
};
},
@@ -1500,6 +1519,23 @@ WebConsoleActor.prototype =
lineText = lineText.substr(0, DebuggerServer.LONG_STRING_INITIAL_LENGTH);
}
+ let notesArray = null;
+ let notes = aPageError.notes;
+ if (notes && notes.length) {
+ notesArray = [];
+ for (let i = 0, len = notes.length; i < len; i++) {
+ let note = notes.queryElementAt(i, Ci.nsIScriptErrorNote);
+ notesArray.push({
+ messageBody: this._createStringGrip(note.errorMessage),
+ frame: {
+ source: note.sourceName,
+ line: note.lineNumber,
+ column: note.columnNumber,
+ }
+ });
+ }
+ }
+
return {
errorMessage: this._createStringGrip(aPageError.errorMessage),
errorMessageName: aPageError.errorMessageName,
@@ -1516,7 +1552,8 @@ WebConsoleActor.prototype =
strict: !!(aPageError.flags & aPageError.strictFlag),
info: !!(aPageError.flags & aPageError.infoFlag),
private: aPageError.isFromPrivateWindow,
- stacktrace: stack
+ stacktrace: stack,
+ notes: notesArray,
};
},
diff --git a/devtools/shared/webconsole/test/test_page_errors.html b/devtools/shared/webconsole/test/test_page_errors.html
index 78138856e..b4c0fe885 100644
--- a/devtools/shared/webconsole/test/test_page_errors.html
+++ b/devtools/shared/webconsole/test/test_page_errors.html
@@ -112,6 +112,24 @@ function doPageErrors()
warning: true,
exception: false,
},
+ "let a, a;": {
+ errorMessage: /redeclaration of/,
+ errorMessageName: "JSMSG_REDECLARED_VAR",
+ sourceName: /test_page_errors/,
+ category: "chrome javascript",
+ timeStamp: /^\d+$/,
+ error: false,
+ warning: false,
+ exception: true,
+ notes: [
+ {
+ messageBody: /Previously declared at line/,
+ frame: {
+ source: /test_page_errors/,
+ }
+ }
+ ]
+ },
};
let container = document.createElement("script");
diff --git a/dom/base/nsContentPolicy.cpp b/dom/base/nsContentPolicy.cpp
index 5511b9086..534466103 100644
--- a/dom/base/nsContentPolicy.cpp
+++ b/dom/base/nsContentPolicy.cpp
@@ -22,6 +22,7 @@
#include "nsIDOMWindow.h"
#include "nsITabChild.h"
#include "nsIContent.h"
+#include "nsIImageLoadingContent.h"
#include "nsILoadContext.h"
#include "nsCOMArray.h"
#include "nsContentUtils.h"
@@ -145,6 +146,16 @@ nsContentPolicy::CheckPolicy(CPMethod policyMethod,
decision);
if (NS_SUCCEEDED(rv) && NS_CP_REJECTED(*decision)) {
+ // If we are blocking an image, we have to let the
+ // ImageLoadingContent know that we blocked the load.
+ if (externalType == nsIContentPolicy::TYPE_IMAGE ||
+ externalType == nsIContentPolicy::TYPE_IMAGESET) {
+ nsCOMPtr<nsIImageLoadingContent> img =
+ do_QueryInterface(requestingContext);
+ if (img) {
+ img->SetBlockedRequest(*decision);
+ }
+ }
/* policy says no, no point continuing to check */
return NS_OK;
}
@@ -193,6 +204,16 @@ nsContentPolicy::CheckPolicy(CPMethod policyMethod,
decision);
if (NS_SUCCEEDED(rv) && NS_CP_REJECTED(*decision)) {
+ // If we are blocking an image, we have to let the
+ // ImageLoadingContent know that we blocked the load.
+ if (externalType == nsIContentPolicy::TYPE_IMAGE ||
+ externalType == nsIContentPolicy::TYPE_IMAGESET) {
+ nsCOMPtr<nsIImageLoadingContent> img =
+ do_QueryInterface(requestingContext);
+ if (img) {
+ img->SetBlockedRequest(*decision);
+ }
+ }
/* policy says no, no point continuing to check */
return NS_OK;
}
diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
index 1f9c17947..800f40fa1 100644
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -8478,12 +8478,9 @@ nsContentUtils::InternalContentPolicyTypeToExternalOrWorker(nsContentPolicyType
bool
nsContentUtils::IsPreloadType(nsContentPolicyType aType)
{
- if (aType == nsIContentPolicy::TYPE_INTERNAL_SCRIPT_PRELOAD ||
- aType == nsIContentPolicy::TYPE_INTERNAL_IMAGE_PRELOAD ||
- aType == nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD) {
- return true;
- }
- return false;
+ return (aType == nsIContentPolicy::TYPE_INTERNAL_SCRIPT_PRELOAD ||
+ aType == nsIContentPolicy::TYPE_INTERNAL_IMAGE_PRELOAD ||
+ aType == nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD);
}
nsresult
diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp
index a6ed419df..6b8e11db0 100644
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -9222,19 +9222,23 @@ already_AddRefed<nsIURI>
nsDocument::ResolvePreloadImage(nsIURI *aBaseURI,
const nsAString& aSrcAttr,
const nsAString& aSrcsetAttr,
- const nsAString& aSizesAttr)
+ const nsAString& aSizesAttr,
+ bool *aIsImgSet)
{
nsString sourceURL;
+ bool isImgSet;
if (mPreloadPictureDepth == 1 && !mPreloadPictureFoundSource.IsVoid()) {
// We're in a <picture> element and found a URI from a source previous to
// this image, use it.
sourceURL = mPreloadPictureFoundSource;
+ isImgSet = true;
} else {
// Otherwise try to use this <img> as a source
HTMLImageElement::SelectSourceForTagWithAttrs(this, false, aSrcAttr,
aSrcsetAttr, aSizesAttr,
NullString(), NullString(),
sourceURL);
+ isImgSet = !aSrcsetAttr.IsEmpty();
}
// Empty sources are not loaded by <img> (i.e. not resolved to the baseURI)
@@ -9252,6 +9256,8 @@ nsDocument::ResolvePreloadImage(nsIURI *aBaseURI,
return nullptr;
}
+ *aIsImgSet = isImgSet;
+
// We don't clear mPreloadPictureFoundSource because subsequent <img> tags in
// this this <picture> share the same <sources> (though this is not valid per
// spec)
@@ -9260,16 +9266,12 @@ nsDocument::ResolvePreloadImage(nsIURI *aBaseURI,
void
nsDocument::MaybePreLoadImage(nsIURI* uri, const nsAString &aCrossOriginAttr,
- ReferrerPolicy aReferrerPolicy)
+ ReferrerPolicy aReferrerPolicy, bool aIsImgSet)
{
// Early exit if the img is already present in the img-cache
// which indicates that the "real" load has already started and
// that we shouldn't preload it.
- int16_t blockingStatus;
- if (nsContentUtils::IsImageInCache(uri, static_cast<nsIDocument *>(this)) ||
- !nsContentUtils::CanLoadImage(uri, static_cast<nsIDocument *>(this),
- this, NodePrincipal(), &blockingStatus,
- nsIContentPolicy::TYPE_INTERNAL_IMAGE_PRELOAD)) {
+ if (nsContentUtils::IsImageInCache(uri, static_cast<nsIDocument *>(this))) {
return;
}
@@ -9288,6 +9290,10 @@ nsDocument::MaybePreLoadImage(nsIURI* uri, const nsAString &aCrossOriginAttr,
MOZ_CRASH("Unknown CORS mode!");
}
+ nsContentPolicyType policyType =
+ aIsImgSet ? nsIContentPolicy::TYPE_IMAGESET :
+ nsIContentPolicy::TYPE_INTERNAL_IMAGE_PRELOAD;
+
// Image not in cache - trigger preload
RefPtr<imgRequestProxy> request;
nsresult rv =
@@ -9301,7 +9307,7 @@ nsDocument::MaybePreLoadImage(nsIURI* uri, const nsAString &aCrossOriginAttr,
loadFlags,
NS_LITERAL_STRING("img"),
getter_AddRefs(request),
- nsIContentPolicy::TYPE_INTERNAL_IMAGE_PRELOAD);
+ policyType);
// Pin image-reference to avoid evicting it from the img-cache before
// the "real" load occurs. Unpinned in DispatchContentLoadedEvents and
@@ -11943,7 +11949,8 @@ nsIDocument::DocAddSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const
&aWindowSizes->mLayoutPresShellSize,
&aWindowSizes->mLayoutStyleSetsSize,
&aWindowSizes->mLayoutTextRunsSize,
- &aWindowSizes->mLayoutPresContextSize);
+ &aWindowSizes->mLayoutPresContextSize,
+ &aWindowSizes->mLayoutFramePropertiesSize);
}
aWindowSizes->mPropertyTablesSize +=
diff --git a/dom/base/nsDocument.h b/dom/base/nsDocument.h
index 95fd57545..2b29b98fa 100644
--- a/dom/base/nsDocument.h
+++ b/dom/base/nsDocument.h
@@ -948,11 +948,13 @@ public:
ResolvePreloadImage(nsIURI *aBaseURI,
const nsAString& aSrcAttr,
const nsAString& aSrcsetAttr,
- const nsAString& aSizesAttr) override;
+ const nsAString& aSizesAttr,
+ bool *aIsImgSet) override;
virtual void MaybePreLoadImage(nsIURI* uri,
const nsAString &aCrossOriginAttr,
- ReferrerPolicy aReferrerPolicy) override;
+ ReferrerPolicy aReferrerPolicy,
+ bool aIsImgSet) override;
virtual void ForgetImagePreload(nsIURI* aURI) override;
virtual void MaybePreconnect(nsIURI* uri,
diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp
index f9126f4da..afaa24f09 100644
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -2504,8 +2504,7 @@ nsGlobalWindow::WouldReuseInnerWindow(nsIDocument* aNewDocument)
}
bool equal;
- if (NS_SUCCEEDED(mDoc->NodePrincipal()->Equals(aNewDocument->NodePrincipal(),
- &equal)) &&
+ if (NS_SUCCEEDED(mDoc->NodePrincipal()->EqualsConsideringDomain(aNewDocument->NodePrincipal(), &equal)) &&
equal) {
// The origin is the same.
return true;
@@ -9335,7 +9334,7 @@ nsGlobalWindow::EnterModalState()
topWin->mSuspendedDoc = topDoc;
if (topDoc) {
- topDoc->SuppressEventHandling(nsIDocument::eEvents);
+ topDoc->SuppressEventHandling(nsIDocument::eAnimationsOnly);
}
nsGlobalWindow* inner = topWin->GetCurrentInnerWindowInternal();
@@ -9372,7 +9371,7 @@ nsGlobalWindow::LeaveModalState()
if (topWin->mSuspendedDoc) {
nsCOMPtr<nsIDocument> currentDoc = topWin->GetExtantDoc();
- topWin->mSuspendedDoc->UnsuppressEventHandlingAndFireEvents(nsIDocument::eEvents,
+ topWin->mSuspendedDoc->UnsuppressEventHandlingAndFireEvents(nsIDocument::eAnimationsOnly,
currentDoc == topWin->mSuspendedDoc);
topWin->mSuspendedDoc = nullptr;
}
diff --git a/dom/base/nsIDocument.h b/dom/base/nsIDocument.h
index e5d12ab8f..d76a12d71 100644
--- a/dom/base/nsIDocument.h
+++ b/dom/base/nsIDocument.h
@@ -2260,21 +2260,27 @@ public:
* nesting and possible sources, which are used to inform URL selection
* responsive <picture> or <img srcset> images. Unset attributes are expected
* to be marked void.
+ * If this image is for <picture> or <img srcset>, aIsImgSet will be set to
+ * true, false otherwise.
*/
virtual already_AddRefed<nsIURI>
ResolvePreloadImage(nsIURI *aBaseURI,
const nsAString& aSrcAttr,
const nsAString& aSrcsetAttr,
- const nsAString& aSizesAttr) = 0;
+ const nsAString& aSizesAttr,
+ bool *aIsImgSet) = 0;
/**
* Called by nsParser to preload images. Can be removed and code moved
* to nsPreloadURIs::PreloadURIs() in file nsParser.cpp whenever the
* parser-module is linked with gklayout-module. aCrossOriginAttr should
* be a void string if the attr is not present.
+ * aIsImgSet is the value got from calling ResolvePreloadImage, it is true
+ * when this image is for loading <picture> or <img srcset> images.
*/
virtual void MaybePreLoadImage(nsIURI* uri,
const nsAString& aCrossOriginAttr,
- ReferrerPolicyEnum aReferrerPolicy) = 0;
+ ReferrerPolicyEnum aReferrerPolicy,
+ bool aIsImgSet) = 0;
/**
* Called by images to forget an image preload when they start doing
diff --git a/dom/base/nsIImageLoadingContent.idl b/dom/base/nsIImageLoadingContent.idl
index fea261a34..eacc4ac3a 100644
--- a/dom/base/nsIImageLoadingContent.idl
+++ b/dom/base/nsIImageLoadingContent.idl
@@ -104,6 +104,15 @@ interface nsIImageLoadingContent : imgINotificationObserver
imgIRequest getRequest(in long aRequestType);
/**
+ * Call this function when the request was blocked by any of the
+ * security policies enforced.
+ *
+ * @param aContentDecision the decision returned from nsIContentPolicy
+ * (any of the types REJECT_*)
+ */
+ void setBlockedRequest(in int16_t aContentDecision);
+
+ /**
* @return true if the current request's size is available.
*/
[noscript, notxpcom] boolean currentRequestHasSize();
diff --git a/dom/base/nsImageLoadingContent.cpp b/dom/base/nsImageLoadingContent.cpp
index 0c6c37b44..4aad55941 100644
--- a/dom/base/nsImageLoadingContent.cpp
+++ b/dom/base/nsImageLoadingContent.cpp
@@ -44,6 +44,7 @@
#include "mozAutoDocUpdate.h"
#include "mozilla/AsyncEventDispatcher.h"
+#include "mozilla/AutoRestore.h"
#include "mozilla/EventStates.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/ImageTracker.h"
@@ -94,7 +95,8 @@ nsImageLoadingContent::nsImageLoadingContent()
mNewRequestsWillNeedAnimationReset(false),
mStateChangerDepth(0),
mCurrentRequestRegistered(false),
- mPendingRequestRegistered(false)
+ mPendingRequestRegistered(false),
+ mIsStartingImageLoad(false)
{
if (!nsContentUtils::GetImgLoaderForChannel(nullptr, nullptr)) {
mLoadingEnabled = false;
@@ -785,6 +787,11 @@ nsImageLoadingContent::LoadImage(nsIURI* aNewURI,
nsIDocument* aDocument,
nsLoadFlags aLoadFlags)
{
+ MOZ_ASSERT(!mIsStartingImageLoad, "some evil code is reentering LoadImage.");
+ if (mIsStartingImageLoad) {
+ return NS_OK;
+ }
+
// Pending load/error events need to be canceled in some situations. This
// is not documented in the spec, but can cause site compat problems if not
// done. See bug 1309461 and https://github.com/whatwg/html/issues/1872.
@@ -814,6 +821,21 @@ nsImageLoadingContent::LoadImage(nsIURI* aNewURI,
}
}
+ AutoRestore<bool> guard(mIsStartingImageLoad);
+ mIsStartingImageLoad = true;
+
+ // Data documents, or documents from DOMParser shouldn't perform image loading.
+ if (aDocument->IsLoadedAsData()) {
+ // This is the only codepath on which we can reach SetBlockedRequest while
+ // our pending request exists. Just clear it out here if we do have one.
+ ClearPendingRequest(NS_BINDING_ABORTED,
+ Some(OnNonvisible::DISCARD_IMAGES));
+ SetBlockedRequest(nsIContentPolicy::REJECT_REQUEST);
+ FireEvent(NS_LITERAL_STRING("error"));
+ FireEvent(NS_LITERAL_STRING("loadend"));
+ return NS_OK;
+ }
+
// URI equality check.
//
// We skip the equality check if our current image was blocked, since in that
@@ -844,23 +866,8 @@ nsImageLoadingContent::LoadImage(nsIURI* aNewURI,
"Principal mismatch?");
#endif
- // Are we blocked?
- int16_t cpDecision = nsIContentPolicy::REJECT_REQUEST;
nsContentPolicyType policyType = PolicyTypeForLoad(aImageLoadType);
- nsContentUtils::CanLoadImage(aNewURI,
- static_cast<nsIImageLoadingContent*>(this),
- aDocument,
- aDocument->NodePrincipal(),
- &cpDecision,
- policyType);
- if (!NS_CP_ACCEPTED(cpDecision)) {
- FireEvent(NS_LITERAL_STRING("error"));
- FireEvent(NS_LITERAL_STRING("loadend"));
- SetBlockedRequest(aNewURI, cpDecision);
- return NS_OK;
- }
-
nsLoadFlags loadFlags = aLoadFlags;
int32_t corsmode = GetCORSMode();
if (corsmode == CORS_ANONYMOUS) {
@@ -878,7 +885,6 @@ nsImageLoadingContent::LoadImage(nsIURI* aNewURI,
referrerPolicy = imgReferrerPolicy;
}
- // Not blocked. Do the load.
RefPtr<imgRequestProxy>& req = PrepareNextRequest(aImageLoadType);
nsCOMPtr<nsIContent> content =
do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
@@ -932,7 +938,6 @@ nsImageLoadingContent::LoadImage(nsIURI* aNewURI,
FireEvent(NS_LITERAL_STRING("error"));
FireEvent(NS_LITERAL_STRING("loadend"));
- return NS_OK;
}
return NS_OK;
@@ -1212,46 +1217,42 @@ nsImageLoadingContent::PrepareNextRequest(ImageLoadType aImageLoadType)
mMostRecentRequestChange = now;
}
- // If we don't have a usable current request, get rid of any half-baked
- // request that might be sitting there and make this one current.
- if (!HaveSize(mCurrentRequest))
- return PrepareCurrentRequest(aImageLoadType);
- // Otherwise, make it pending.
- return PreparePendingRequest(aImageLoadType);
+ // We only want to cancel the existing current request if size is not
+ // available. bz says the web depends on this behavior.
+ // Otherwise, we get rid of any half-baked request that might be sitting there
+ // and make this one current.
+ // TODO: Bug 583491
+ // Investigate/Cleanup NS_ERROR_IMAGE_SRC_CHANGED use in nsImageFrame.cpp
+ return HaveSize(mCurrentRequest) ?
+ PreparePendingRequest(aImageLoadType) :
+ PrepareCurrentRequest(aImageLoadType);
}
-void
-nsImageLoadingContent::SetBlockedRequest(nsIURI* aURI, int16_t aContentDecision)
+nsresult
+nsImageLoadingContent::SetBlockedRequest(int16_t aContentDecision)
{
+ // If this is not calling from LoadImage, for example, from ServiceWorker,
+ // bail out.
+ if (!mIsStartingImageLoad) {
+ return NS_OK;
+ }
+
// Sanity
MOZ_ASSERT(!NS_CP_ACCEPTED(aContentDecision), "Blocked but not?");
- // We do some slightly illogical stuff here to maintain consistency with
- // old behavior that people probably depend on. Even in the case where the
- // new image is blocked, the old one should really be canceled with the
- // reason "image source changed". However, apparently there's some abuse
- // over in nsImageFrame where the displaying of the "broken" icon for the
- // next image depends on the cancel reason of the previous image. ugh.
- // XXX(seth): So shouldn't we fix nsImageFrame?!
- ClearPendingRequest(NS_ERROR_IMAGE_BLOCKED,
- Some(OnNonvisible::DISCARD_IMAGES));
-
- // For the blocked case, we only want to cancel the existing current request
- // if size is not available. bz says the web depends on this behavior.
- if (!HaveSize(mCurrentRequest)) {
+ // We should never have a pending request after we got blocked.
+ MOZ_ASSERT(!mPendingRequest, "mPendingRequest should be null.");
+ if (HaveSize(mCurrentRequest)) {
+ // PreparePendingRequest set mPendingRequestFlags, now since we've decided
+ // to block it, we reset it back to 0.
+ mPendingRequestFlags = 0;
+ } else {
mImageBlockingStatus = aContentDecision;
- uint32_t keepFlags = mCurrentRequestFlags & REQUEST_IS_IMAGESET;
- ClearCurrentRequest(NS_ERROR_IMAGE_BLOCKED,
- Some(OnNonvisible::DISCARD_IMAGES));
-
- // We still want to remember what URI we were and if it was an imageset,
- // despite not having an actual request. These are both cleared as part of
- // ClearCurrentRequest() before a new request is started.
- mCurrentURI = aURI;
- mCurrentRequestFlags = keepFlags;
}
+
+ return NS_OK;
}
RefPtr<imgRequestProxy>&
@@ -1262,7 +1263,7 @@ nsImageLoadingContent::PrepareCurrentRequest(ImageLoadType aImageLoadType)
mImageBlockingStatus = nsIContentPolicy::ACCEPT;
// Get rid of anything that was there previously.
- ClearCurrentRequest(NS_ERROR_IMAGE_SRC_CHANGED,
+ ClearCurrentRequest(NS_BINDING_ABORTED,
Some(OnNonvisible::DISCARD_IMAGES));
if (mNewRequestsWillNeedAnimationReset) {
@@ -1281,7 +1282,7 @@ RefPtr<imgRequestProxy>&
nsImageLoadingContent::PreparePendingRequest(ImageLoadType aImageLoadType)
{
// Get rid of anything that was there previously.
- ClearPendingRequest(NS_ERROR_IMAGE_SRC_CHANGED,
+ ClearPendingRequest(NS_BINDING_ABORTED,
Some(OnNonvisible::DISCARD_IMAGES));
if (mNewRequestsWillNeedAnimationReset) {
diff --git a/dom/base/nsImageLoadingContent.h b/dom/base/nsImageLoadingContent.h
index 5f7daff72..cfb2a6207 100644
--- a/dom/base/nsImageLoadingContent.h
+++ b/dom/base/nsImageLoadingContent.h
@@ -303,17 +303,10 @@ protected:
RefPtr<imgRequestProxy>& PrepareNextRequest(ImageLoadType aImageLoadType);
/**
- * Called when we would normally call PrepareNextRequest(), but the request was
- * blocked.
- */
- void SetBlockedRequest(nsIURI* aURI, int16_t aContentDecision);
-
- /**
* Returns a COMPtr reference to the current/pending image requests, cleaning
* up and canceling anything that was there before. Note that if you just want
* to get rid of one of the requests, you should call
- * Clear*Request(NS_BINDING_ABORTED) instead, since it passes a more appropriate
- * aReason than Prepare*Request() does (NS_ERROR_IMAGE_SRC_CHANGED).
+ * Clear*Request(NS_BINDING_ABORTED) instead.
*
* @param aImageLoadType The ImageLoadType for this request
*/
@@ -459,6 +452,14 @@ private:
// registered with the refresh driver.
bool mCurrentRequestRegistered;
bool mPendingRequestRegistered;
+
+ // This member is used in SetBlockedRequest, if it's true, then this call is
+ // triggered from LoadImage.
+ // If this is false, it means this call is from other places like
+ // ServiceWorker, then we will ignore call to SetBlockedRequest for now.
+ //
+ // Also we use this variable to check if some evil code is reentering LoadImage.
+ bool mIsStartingImageLoad;
};
#endif // nsImageLoadingContent_h__
diff --git a/dom/base/nsObjectLoadingContent.cpp b/dom/base/nsObjectLoadingContent.cpp
index c1b732258..3c850c4cd 100644
--- a/dom/base/nsObjectLoadingContent.cpp
+++ b/dom/base/nsObjectLoadingContent.cpp
@@ -715,11 +715,13 @@ nsObjectLoadingContent::UnbindFromTree(bool aDeep, bool aNullParent)
/// would keep the docshell around, but trash the frameloader
UnloadObject();
}
- nsIDocument* doc = thisContent->GetComposedDoc();
- if (doc && doc->IsActive()) {
+ if (mType == eType_Plugin) {
+ nsIDocument* doc = thisContent->GetComposedDoc();
+ if (doc && doc->IsActive()) {
nsCOMPtr<nsIRunnable> ev = new nsSimplePluginEvent(doc,
NS_LITERAL_STRING("PluginRemoved"));
NS_DispatchToCurrentThread(ev);
+ }
}
}
diff --git a/dom/base/nsWindowMemoryReporter.cpp b/dom/base/nsWindowMemoryReporter.cpp
index acec4acfb..8f4bf6b11 100644
--- a/dom/base/nsWindowMemoryReporter.cpp
+++ b/dom/base/nsWindowMemoryReporter.cpp
@@ -400,6 +400,12 @@ CollectWindowReports(nsGlobalWindow *aWindow,
aWindowTotalSizes->mLayoutPresContextSize +=
windowSizes.mLayoutPresContextSize;
+ REPORT_SIZE("/layout/frame-properties", windowSizes.mLayoutFramePropertiesSize,
+ "Memory used for frame properties attached to frames "
+ "within a window.");
+ aWindowTotalSizes->mLayoutFramePropertiesSize +=
+ windowSizes.mLayoutFramePropertiesSize;
+
// There are many different kinds of frames, but it is very likely
// that only a few matter. Implement a cutoff so we don't bloat
// about:memory with many uninteresting entries.
@@ -563,6 +569,9 @@ nsWindowMemoryReporter::CollectReports(nsIHandleReportCallback* aHandleReport,
REPORT("window-objects/layout/pres-contexts", windowTotalSizes.mLayoutPresContextSize,
"This is the sum of all windows' 'layout/pres-contexts' numbers.");
+ REPORT("window-objects/layout/frame-properties", windowTotalSizes.mLayoutFramePropertiesSize,
+ "This is the sum of all windows' 'layout/frame-properties' numbers.");
+
size_t frameTotal = 0;
#define FRAME_ID(classname) \
frameTotal += windowTotalSizes.mArenaStats.FRAME_ID_STAT_FIELD(classname);
diff --git a/dom/base/nsWindowMemoryReporter.h b/dom/base/nsWindowMemoryReporter.h
index b9e986959..5d40dc9f5 100644
--- a/dom/base/nsWindowMemoryReporter.h
+++ b/dom/base/nsWindowMemoryReporter.h
@@ -33,6 +33,7 @@ class nsWindowSizes {
macro(Style, mLayoutStyleSetsSize) \
macro(Other, mLayoutTextRunsSize) \
macro(Other, mLayoutPresContextSize) \
+ macro(Other, mLayoutFramePropertiesSize) \
macro(Other, mPropertyTablesSize) \
public:
diff --git a/dom/bindings/BindingUtils.cpp b/dom/bindings/BindingUtils.cpp
index 8d2bdaac6..a26fc4422 100644
--- a/dom/bindings/BindingUtils.cpp
+++ b/dom/bindings/BindingUtils.cpp
@@ -1184,14 +1184,6 @@ GetInterfaceImpl(JSContext* aCx, nsIInterfaceRequestor* aRequestor,
}
bool
-UnforgeableValueOf(JSContext* cx, unsigned argc, JS::Value* vp)
-{
- JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
- args.rval().set(args.thisv());
- return true;
-}
-
-bool
ThrowingConstructor(JSContext* cx, unsigned argc, JS::Value* vp)
{
return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
diff --git a/dom/bindings/BindingUtils.h b/dom/bindings/BindingUtils.h
index a3ec70f47..5cab835b3 100644
--- a/dom/bindings/BindingUtils.h
+++ b/dom/bindings/BindingUtils.h
@@ -2045,9 +2045,6 @@ GetInterface(JSContext* aCx, T* aThis, nsIJSID* aIID,
}
bool
-UnforgeableValueOf(JSContext* cx, unsigned argc, JS::Value* vp);
-
-bool
ThrowingConstructor(JSContext* cx, unsigned argc, JS::Value* vp);
bool
diff --git a/dom/bindings/Codegen.py b/dom/bindings/Codegen.py
index 74acb5918..d7d700a96 100644
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -2390,11 +2390,10 @@ class MethodDefiner(PropertyDefiner):
# Synthesize our valueOf method
self.regular.append({
"name": 'valueOf',
- "nativeName": "UnforgeableValueOf",
+ "selfHostedName": "Object_valueOf",
"methodInfo": False,
"length": 0,
- "flags": "JSPROP_ENUMERATE", # readonly/permanent added
- # automatically.
+ "flags": "0", # readonly/permanent added automatically.
"condition": MemberCondition()
})
@@ -3456,19 +3455,15 @@ def InitUnforgeablePropertiesOnHolder(descriptor, properties, failureCode,
"nsContentUtils::ThreadsafeIsCallerChrome()"))
if descriptor.interface.getExtendedAttribute("Unforgeable"):
- # We do our undefined toJSON and toPrimitive here, not as a regular
- # property because we don't have a concept of value props anywhere in
- # IDL.
+ # We do our undefined toPrimitive here, not as a regular property
+ # because we don't have a concept of value props anywhere in IDL.
unforgeables.append(CGGeneric(fill(
"""
JS::RootedId toPrimitive(aCx,
SYMBOL_TO_JSID(JS::GetWellKnownSymbol(aCx, JS::SymbolCode::toPrimitive)));
if (!JS_DefinePropertyById(aCx, ${holderName}, toPrimitive,
JS::UndefinedHandleValue,
- JSPROP_READONLY | JSPROP_PERMANENT) ||
- !JS_DefineProperty(aCx, ${holderName}, "toJSON",
- JS::UndefinedHandleValue,
- JSPROP_READONLY | JSPROP_ENUMERATE | JSPROP_PERMANENT)) {
+ JSPROP_READONLY | JSPROP_PERMANENT)) {
$*{failureCode}
}
""",
diff --git a/dom/bindings/moz.build b/dom/bindings/moz.build
index 043b3c494..ed8a4d37e 100644
--- a/dom/bindings/moz.build
+++ b/dom/bindings/moz.build
@@ -6,6 +6,12 @@
TEST_DIRS += ['test']
+XPIDL_SOURCES += [
+ 'nsIScriptError.idl'
+]
+
+XPIDL_MODULE = 'dom_bindings'
+
EXPORTS.ipc += [
'ErrorIPCUtils.h',
]
@@ -91,6 +97,8 @@ UNIFIED_SOURCES += [
'DOMJSProxyHandler.cpp',
'Exceptions.cpp',
'IterableIterator.cpp',
+ 'nsScriptError.cpp',
+ 'nsScriptErrorWithStack.cpp',
'SimpleGlobalObject.cpp',
'ToJSValue.cpp',
'WebIDLGlobalNameHash.cpp',
diff --git a/js/xpconnect/idl/nsIScriptError.idl b/dom/bindings/nsIScriptError.idl
index 468ca682f..8436361a8 100644
--- a/js/xpconnect/idl/nsIScriptError.idl
+++ b/dom/bindings/nsIScriptError.idl
@@ -9,13 +9,25 @@
#include "nsISupports.idl"
+#include "nsIArray.idl"
#include "nsIConsoleMessage.idl"
%{C++
#include "nsStringGlue.h" // for nsDependentCString
%}
-[scriptable, uuid(361be358-76f0-47aa-b37b-6ad833599e8d)]
+[scriptable, uuid(e8933fc9-c302-4e12-a55b-4f88611d9c6c)]
+interface nsIScriptErrorNote : nsISupports
+{
+ readonly attribute AString errorMessage;
+ readonly attribute AString sourceName;
+ readonly attribute uint32_t lineNumber;
+ readonly attribute uint32_t columnNumber;
+
+ AUTF8String toString();
+};
+
+[scriptable, uuid(63eb4d3e-7d99-4150-b4f3-11314f9d82a9)]
interface nsIScriptError : nsIConsoleMessage
{
/** pseudo-flag for default case */
@@ -74,6 +86,7 @@ interface nsIScriptError : nsIConsoleMessage
*/
attribute AString errorMessageName;
+ readonly attribute nsIArray notes;
void init(in AString message,
in AString sourceName,
diff --git a/js/xpconnect/src/nsScriptError.cpp b/dom/bindings/nsScriptError.cpp
index ff687bc44..9248d1a31 100644
--- a/js/xpconnect/src/nsScriptError.cpp
+++ b/dom/bindings/nsScriptError.cpp
@@ -5,18 +5,19 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
- * nsIScriptError implementation. Defined here, lacking a JS-specific
- * place to put XPCOM things.
+ * nsIScriptError implementation.
*/
-#include "xpcprivate.h"
+#include "nsScriptError.h"
#include "jsprf.h"
#include "MainThreadUtils.h"
#include "mozilla/Assertions.h"
#include "nsGlobalWindow.h"
+#include "nsNetUtil.h"
#include "nsPIDOMWindow.h"
#include "nsILoadContext.h"
#include "nsIDocShell.h"
+#include "nsIMutableArray.h"
#include "nsIScriptError.h"
#include "nsISensitiveInfoHiddenURI.h"
@@ -47,6 +48,12 @@ nsScriptErrorBase::nsScriptErrorBase()
nsScriptErrorBase::~nsScriptErrorBase() {}
void
+nsScriptErrorBase::AddNote(nsIScriptErrorNote* note)
+{
+ mNotes.AppendObject(note);
+}
+
+void
nsScriptErrorBase::InitializeOnMainThread()
{
MOZ_ASSERT(NS_IsMainThread());
@@ -189,6 +196,28 @@ nsScriptErrorBase::Init(const nsAString& message,
0);
}
+static void
+AssignSourceNameHelper(nsString& aSourceNameDest, const nsAString& aSourceNameSrc)
+{
+ if (aSourceNameSrc.IsEmpty())
+ return;
+
+ aSourceNameDest.Assign(aSourceNameSrc);
+
+ nsCOMPtr<nsIURI> uri;
+ nsAutoCString pass;
+ if (NS_SUCCEEDED(NS_NewURI(getter_AddRefs(uri), aSourceNameSrc)) &&
+ NS_SUCCEEDED(uri->GetPassword(pass)) &&
+ !pass.IsEmpty())
+ {
+ nsCOMPtr<nsISensitiveInfoHiddenURI> safeUri = do_QueryInterface(uri);
+
+ nsAutoCString loc;
+ if (safeUri && NS_SUCCEEDED(safeUri->GetSensitiveInfoHiddenSpec(loc)))
+ aSourceNameDest.Assign(NS_ConvertUTF8toUTF16(loc));
+ }
+}
+
NS_IMETHODIMP
nsScriptErrorBase::InitWithWindowID(const nsAString& message,
const nsAString& sourceName,
@@ -200,26 +229,7 @@ nsScriptErrorBase::InitWithWindowID(const nsAString& message,
uint64_t aInnerWindowID)
{
mMessage.Assign(message);
-
- if (!sourceName.IsEmpty()) {
- mSourceName.Assign(sourceName);
-
- nsCOMPtr<nsIURI> uri;
- nsAutoCString pass;
- if (NS_SUCCEEDED(NS_NewURI(getter_AddRefs(uri), sourceName)) &&
- NS_SUCCEEDED(uri->GetPassword(pass)) &&
- !pass.IsEmpty()) {
- nsCOMPtr<nsISensitiveInfoHiddenURI> safeUri =
- do_QueryInterface(uri);
-
- nsAutoCString loc;
- if (safeUri &&
- NS_SUCCEEDED(safeUri->GetSensitiveInfoHiddenSpec(loc))) {
- mSourceName.Assign(NS_ConvertUTF8toUTF16(loc));
- }
- }
- }
-
+ AssignSourceNameHelper(mSourceName, sourceName);
mLineNumber = lineNumber;
mSourceLine.Assign(sourceLine);
mColumnNumber = columnNumber;
@@ -235,8 +245,11 @@ nsScriptErrorBase::InitWithWindowID(const nsAString& message,
return NS_OK;
}
-NS_IMETHODIMP
-nsScriptErrorBase::ToString(nsACString& /*UTF8*/ aResult)
+static nsresult
+ToStringHelper(const char* aSeverity, const nsString& aMessage,
+ const nsString& aSourceName, const nsString* aSourceLine,
+ uint32_t aLineNumber, uint32_t aColumnNumber,
+ nsACString& /*UTF8*/ aResult)
{
static const char format0[] =
"[%s: \"%s\" {file: \"%s\" line: %d column: %d source: \"%s\"}]";
@@ -245,43 +258,39 @@ nsScriptErrorBase::ToString(nsACString& /*UTF8*/ aResult)
static const char format2[] =
"[%s: \"%s\"]";
- static const char error[] = "JavaScript Error";
- static const char warning[] = "JavaScript Warning";
-
- const char* severity = !(mFlags & JSREPORT_WARNING) ? error : warning;
-
char* temp;
char* tempMessage = nullptr;
char* tempSourceName = nullptr;
char* tempSourceLine = nullptr;
- if (!mMessage.IsEmpty())
- tempMessage = ToNewUTF8String(mMessage);
- if (!mSourceName.IsEmpty())
+ if (!aMessage.IsEmpty())
+ tempMessage = ToNewUTF8String(aMessage);
+ if (!aSourceName.IsEmpty())
// Use at most 512 characters from mSourceName.
- tempSourceName = ToNewUTF8String(StringHead(mSourceName, 512));
- if (!mSourceLine.IsEmpty())
+ tempSourceName = ToNewUTF8String(StringHead(aSourceName, 512));
+ if (aSourceLine && !aSourceLine->IsEmpty())
// Use at most 512 characters from mSourceLine.
- tempSourceLine = ToNewUTF8String(StringHead(mSourceLine, 512));
+ tempSourceLine = ToNewUTF8String(StringHead(*aSourceLine, 512));
- if (nullptr != tempSourceName && nullptr != tempSourceLine)
+ if (nullptr != tempSourceName && nullptr != tempSourceLine) {
temp = JS_smprintf(format0,
- severity,
+ aSeverity,
tempMessage,
tempSourceName,
- mLineNumber,
- mColumnNumber,
+ aLineNumber,
+ aColumnNumber,
tempSourceLine);
- else if (!mSourceName.IsEmpty())
+ } else if (!aSourceName.IsEmpty()) {
temp = JS_smprintf(format1,
- severity,
+ aSeverity,
tempMessage,
tempSourceName,
- mLineNumber);
- else
+ aLineNumber);
+ } else {
temp = JS_smprintf(format2,
- severity,
+ aSeverity,
tempMessage);
+ }
if (nullptr != tempMessage)
free(tempMessage);
@@ -299,6 +308,18 @@ nsScriptErrorBase::ToString(nsACString& /*UTF8*/ aResult)
}
NS_IMETHODIMP
+nsScriptErrorBase::ToString(nsACString& /*UTF8*/ aResult)
+{
+ static const char error[] = "JavaScript Error";
+ static const char warning[] = "JavaScript Warning";
+
+ const char* severity = !(mFlags & JSREPORT_WARNING) ? error : warning;
+
+ return ToStringHelper(severity, mMessage, mSourceName, &mSourceLine,
+ mLineNumber, mColumnNumber, aResult);
+}
+
+NS_IMETHODIMP
nsScriptErrorBase::GetOuterWindowID(uint64_t* aOuterWindowID)
{
NS_WARNING_ASSERTION(NS_IsMainThread() || mInitializedOnMainThread,
@@ -342,4 +363,76 @@ nsScriptErrorBase::GetIsFromPrivateWindow(bool* aIsFromPrivateWindow)
return NS_OK;
}
+NS_IMETHODIMP
+nsScriptErrorBase::GetNotes(nsIArray** aNotes)
+{
+ nsresult rv = NS_OK;
+ nsCOMPtr<nsIMutableArray> array =
+ do_CreateInstance(NS_ARRAY_CONTRACTID, &rv);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ uint32_t len = mNotes.Length();
+ for (uint32_t i = 0; i < len; i++)
+ array->AppendElement(mNotes[i], false);
+ array.forget(aNotes);
+
+ return NS_OK;
+}
+
NS_IMPL_ISUPPORTS(nsScriptError, nsIConsoleMessage, nsIScriptError)
+
+nsScriptErrorNote::nsScriptErrorNote()
+ : mMessage(),
+ mSourceName(),
+ mLineNumber(0),
+ mColumnNumber(0)
+{
+}
+
+nsScriptErrorNote::~nsScriptErrorNote() {}
+
+void
+nsScriptErrorNote::Init(const nsAString& message,
+ const nsAString& sourceName,
+ uint32_t lineNumber,
+ uint32_t columnNumber)
+{
+ mMessage.Assign(message);
+ AssignSourceNameHelper(mSourceName, sourceName);
+ mLineNumber = lineNumber;
+ mColumnNumber = columnNumber;
+}
+
+// nsIScriptErrorNote methods
+NS_IMETHODIMP
+nsScriptErrorNote::GetErrorMessage(nsAString& aResult) {
+ aResult.Assign(mMessage);
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsScriptErrorNote::GetSourceName(nsAString& aResult) {
+ aResult.Assign(mSourceName);
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsScriptErrorNote::GetLineNumber(uint32_t* result) {
+ *result = mLineNumber;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsScriptErrorNote::GetColumnNumber(uint32_t* result) {
+ *result = mColumnNumber;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsScriptErrorNote::ToString(nsACString& /*UTF8*/ aResult)
+{
+ return ToStringHelper("JavaScript Note", mMessage, mSourceName, nullptr,
+ mLineNumber, mColumnNumber, aResult);
+}
+
+NS_IMPL_ISUPPORTS(nsScriptErrorNote, nsIScriptErrorNote)
diff --git a/dom/bindings/nsScriptError.h b/dom/bindings/nsScriptError.h
new file mode 100644
index 000000000..b8049d0a0
--- /dev/null
+++ b/dom/bindings/nsScriptError.h
@@ -0,0 +1,109 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_dom_nsScriptError_h
+#define mozilla_dom_nsScriptError_h
+
+#include "mozilla/Atomics.h"
+
+#include <stdint.h>
+
+#include "jsapi.h"
+#include "js/RootingAPI.h"
+
+#include "nsIScriptError.h"
+#include "nsString.h"
+
+class nsScriptErrorNote final : public nsIScriptErrorNote {
+ public:
+ nsScriptErrorNote();
+
+ NS_DECL_THREADSAFE_ISUPPORTS
+ NS_DECL_NSISCRIPTERRORNOTE
+
+ void Init(const nsAString& message, const nsAString& sourceName,
+ uint32_t lineNumber, uint32_t columnNumber);
+
+ private:
+ virtual ~nsScriptErrorNote();
+
+ nsString mMessage;
+ nsString mSourceName;
+ nsString mSourceLine;
+ uint32_t mLineNumber;
+ uint32_t mColumnNumber;
+};
+
+// Definition of nsScriptError..
+class nsScriptErrorBase : public nsIScriptError {
+public:
+ nsScriptErrorBase();
+
+ NS_DECL_NSICONSOLEMESSAGE
+ NS_DECL_NSISCRIPTERROR
+
+ void AddNote(nsIScriptErrorNote* note);
+
+protected:
+ virtual ~nsScriptErrorBase();
+
+ void
+ InitializeOnMainThread();
+
+ nsCOMArray<nsIScriptErrorNote> mNotes;
+ nsString mMessage;
+ nsString mMessageName;
+ nsString mSourceName;
+ uint32_t mLineNumber;
+ nsString mSourceLine;
+ uint32_t mColumnNumber;
+ uint32_t mFlags;
+ nsCString mCategory;
+ // mOuterWindowID is set on the main thread from InitializeOnMainThread().
+ uint64_t mOuterWindowID;
+ uint64_t mInnerWindowID;
+ int64_t mTimeStamp;
+ // mInitializedOnMainThread and mIsFromPrivateWindow are set on the main
+ // thread from InitializeOnMainThread().
+ mozilla::Atomic<bool> mInitializedOnMainThread;
+ bool mIsFromPrivateWindow;
+};
+
+class nsScriptError final : public nsScriptErrorBase {
+public:
+ nsScriptError() {}
+ NS_DECL_THREADSAFE_ISUPPORTS
+
+private:
+ virtual ~nsScriptError() {}
+};
+
+class nsScriptErrorWithStack : public nsScriptErrorBase {
+public:
+ explicit nsScriptErrorWithStack(JS::HandleObject);
+
+ NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+ NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsScriptErrorWithStack)
+
+ NS_IMETHOD Init(const nsAString& message,
+ const nsAString& sourceName,
+ const nsAString& sourceLine,
+ uint32_t lineNumber,
+ uint32_t columnNumber,
+ uint32_t flags,
+ const char* category) override;
+
+ NS_IMETHOD GetStack(JS::MutableHandleValue) override;
+ NS_IMETHOD ToString(nsACString& aResult) override;
+
+private:
+ virtual ~nsScriptErrorWithStack();
+ // Complete stackframe where the error happened.
+ // Must be SavedFrame object.
+ JS::Heap<JSObject*> mStack;
+};
+
+#endif /* mozilla_dom_nsScriptError_h */
diff --git a/js/xpconnect/src/nsScriptErrorWithStack.cpp b/dom/bindings/nsScriptErrorWithStack.cpp
index 50407da23..74c00999f 100644
--- a/js/xpconnect/src/nsScriptErrorWithStack.cpp
+++ b/dom/bindings/nsScriptErrorWithStack.cpp
@@ -10,12 +10,14 @@
* that can store a SavedFrame stack trace object.
*/
-#include "xpcprivate.h"
+#include "nsScriptError.h"
#include "MainThreadUtils.h"
#include "mozilla/Assertions.h"
+#include "mozilla/dom/ScriptSettings.h"
#include "nsGlobalWindow.h"
#include "nsCycleCollectionParticipant.h"
+using namespace mozilla::dom;
namespace {
diff --git a/dom/canvas/WebGLBuffer.cpp b/dom/canvas/WebGLBuffer.cpp
index 1eaf37ac4..02a8f649f 100644
--- a/dom/canvas/WebGLBuffer.cpp
+++ b/dom/canvas/WebGLBuffer.cpp
@@ -134,6 +134,7 @@ WebGLBuffer::BufferData(GLenum target, size_t size, const void* data, GLenum usa
if (error) {
MOZ_ASSERT(error == LOCAL_GL_OUT_OF_MEMORY);
mContext->ErrorOutOfMemory("%s: Error from driver: 0x%04x", funcName, error);
+ mByteLength = 0;
return;
}
} else {
diff --git a/dom/canvas/WebGLContext.h b/dom/canvas/WebGLContext.h
index 8a20237ff..0510e6898 100644
--- a/dom/canvas/WebGLContext.h
+++ b/dom/canvas/WebGLContext.h
@@ -20,6 +20,7 @@
#include "mozilla/gfx/2D.h"
#include "mozilla/LinkedList.h"
#include "mozilla/UniquePtr.h"
+#include "mozilla/WeakPtr.h"
#include "nsCycleCollectionNoteChild.h"
#include "nsICanvasRenderingContextInternal.h"
#include "nsLayoutUtils.h"
@@ -299,6 +300,7 @@ class WebGLContext
, public WebGLContextUnchecked
, public WebGLRectangleObject
, public nsWrapperCache
+ , public SupportsWeakPtr<WebGLContext>
{
friend class ScopedDrawHelper;
friend class ScopedDrawWithTransformFeedback;
@@ -342,6 +344,7 @@ public:
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(WebGLContext,
nsIDOMWebGLRenderingContext)
+ MOZ_DECLARE_WEAKREFERENCE_TYPENAME(WebGLContext)
virtual JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> givenProto) override = 0;
diff --git a/dom/canvas/WebGLExtensionDebugShaders.cpp b/dom/canvas/WebGLExtensionDebugShaders.cpp
index 75880465e..8399aeb95 100644
--- a/dom/canvas/WebGLExtensionDebugShaders.cpp
+++ b/dom/canvas/WebGLExtensionDebugShaders.cpp
@@ -29,15 +29,10 @@ WebGLExtensionDebugShaders::GetTranslatedShaderSource(const WebGLShader& shader,
{
retval.SetIsVoid(true);
- if (mIsLost) {
- mContext->ErrorInvalidOperation("%s: Extension is lost.",
- "getTranslatedShaderSource");
+ if (mIsLost || !mContext) {
return;
}
- if (mContext->IsContextLost())
- return;
-
if (!mContext->ValidateObject("getShaderTranslatedSource: shader", shader))
return;
diff --git a/dom/canvas/WebGLExtensionDisjointTimerQuery.cpp b/dom/canvas/WebGLExtensionDisjointTimerQuery.cpp
index e2e34f14e..da76eeb2d 100644
--- a/dom/canvas/WebGLExtensionDisjointTimerQuery.cpp
+++ b/dom/canvas/WebGLExtensionDisjointTimerQuery.cpp
@@ -40,8 +40,10 @@ void
WebGLExtensionDisjointTimerQuery::DeleteQueryEXT(WebGLQuery* query) const
{
const char funcName[] = "deleteQueryEXT";
- if (mIsLost)
- return;
+
+ if (mIsLost || !mContext) {
+ return;
+ }
mContext->DeleteQuery(query, funcName);
}
@@ -50,8 +52,10 @@ bool
WebGLExtensionDisjointTimerQuery::IsQueryEXT(const WebGLQuery* query) const
{
const char funcName[] = "isQueryEXT";
- if (mIsLost)
- return false;
+
+ if (mIsLost || !mContext) {
+ return false;
+ }
return mContext->IsQuery(query, funcName);
}
@@ -60,8 +64,10 @@ void
WebGLExtensionDisjointTimerQuery::BeginQueryEXT(GLenum target, WebGLQuery& query) const
{
const char funcName[] = "beginQueryEXT";
- if (mIsLost)
- return;
+
+ if (mIsLost || !mContext) {
+ return;
+ }
mContext->BeginQuery(target, query, funcName);
}
@@ -70,8 +76,10 @@ void
WebGLExtensionDisjointTimerQuery::EndQueryEXT(GLenum target) const
{
const char funcName[] = "endQueryEXT";
- if (mIsLost)
- return;
+
+ if (mIsLost || !mContext) {
+ return;
+ }
mContext->EndQuery(target, funcName);
}
@@ -80,8 +88,10 @@ void
WebGLExtensionDisjointTimerQuery::QueryCounterEXT(WebGLQuery& query, GLenum target) const
{
const char funcName[] = "queryCounterEXT";
- if (mIsLost)
- return;
+
+ if (mIsLost || !mContext) {
+ return;
+ }
if (!mContext->ValidateObject(funcName, query))
return;
@@ -95,8 +105,10 @@ WebGLExtensionDisjointTimerQuery::GetQueryEXT(JSContext* cx, GLenum target, GLen
{
const char funcName[] = "getQueryEXT";
retval.setNull();
- if (mIsLost)
- return;
+
+ if (mIsLost || !mContext) {
+ return;
+ }
mContext->GetQuery(cx, target, pname, retval, funcName);
}
@@ -108,8 +120,10 @@ WebGLExtensionDisjointTimerQuery::GetQueryObjectEXT(JSContext* cx,
{
const char funcName[] = "getQueryObjectEXT";
retval.setNull();
- if (mIsLost)
- return;
+
+ if (mIsLost || !mContext) {
+ return;
+ }
mContext->GetQueryParameter(cx, query, pname, retval, funcName);
}
diff --git a/dom/canvas/WebGLExtensionDrawBuffers.cpp b/dom/canvas/WebGLExtensionDrawBuffers.cpp
index 27aa76cc7..6f386621f 100644
--- a/dom/canvas/WebGLExtensionDrawBuffers.cpp
+++ b/dom/canvas/WebGLExtensionDrawBuffers.cpp
@@ -36,7 +36,9 @@ void
WebGLExtensionDrawBuffers::DrawBuffersWEBGL(const dom::Sequence<GLenum>& buffers)
{
if (mIsLost) {
- mContext->ErrorInvalidOperation("drawBuffersWEBGL: Extension is lost.");
+ if (mContext) {
+ mContext->ErrorInvalidOperation("drawBuffersWEBGL: Extension is lost.");
+ }
return;
}
diff --git a/dom/canvas/WebGLExtensionInstancedArrays.cpp b/dom/canvas/WebGLExtensionInstancedArrays.cpp
index 10d0533fe..22b3ec12c 100644
--- a/dom/canvas/WebGLExtensionInstancedArrays.cpp
+++ b/dom/canvas/WebGLExtensionInstancedArrays.cpp
@@ -28,8 +28,10 @@ WebGLExtensionInstancedArrays::DrawArraysInstancedANGLE(GLenum mode,
GLsizei primcount)
{
if (mIsLost) {
- mContext->ErrorInvalidOperation("%s: Extension is lost.",
- "drawArraysInstancedANGLE");
+ if (mContext) {
+ mContext->ErrorInvalidOperation("%s: Extension is lost.",
+ "drawArraysInstancedANGLE");
+ }
return;
}
@@ -44,8 +46,10 @@ WebGLExtensionInstancedArrays::DrawElementsInstancedANGLE(GLenum mode,
GLsizei primcount)
{
if (mIsLost) {
- mContext->ErrorInvalidOperation("%s: Extension is lost.",
- "drawElementsInstancedANGLE");
+ if (mContext) {
+ mContext->ErrorInvalidOperation("%s: Extension is lost.",
+ "drawElementsInstancedANGLE");
+ }
return;
}
@@ -57,8 +61,10 @@ WebGLExtensionInstancedArrays::VertexAttribDivisorANGLE(GLuint index,
GLuint divisor)
{
if (mIsLost) {
- mContext->ErrorInvalidOperation("%s: Extension is lost.",
- "vertexAttribDivisorANGLE");
+ if (mContext) {
+ mContext->ErrorInvalidOperation("%s: Extension is lost.",
+ "vertexAttribDivisorANGLE");
+ }
return;
}
diff --git a/dom/canvas/WebGLExtensionLoseContext.cpp b/dom/canvas/WebGLExtensionLoseContext.cpp
index 020731e63..41f1633d8 100644
--- a/dom/canvas/WebGLExtensionLoseContext.cpp
+++ b/dom/canvas/WebGLExtensionLoseContext.cpp
@@ -22,12 +22,14 @@ WebGLExtensionLoseContext::~WebGLExtensionLoseContext()
void
WebGLExtensionLoseContext::LoseContext()
{
+ if (!mContext) return;
mContext->LoseContext();
}
void
WebGLExtensionLoseContext::RestoreContext()
{
+ if (!mContext) return;
mContext->RestoreContext();
}
diff --git a/dom/canvas/WebGLExtensionVertexArray.cpp b/dom/canvas/WebGLExtensionVertexArray.cpp
index 0984582f5..39aa96801 100644
--- a/dom/canvas/WebGLExtensionVertexArray.cpp
+++ b/dom/canvas/WebGLExtensionVertexArray.cpp
@@ -25,7 +25,7 @@ WebGLExtensionVertexArray::~WebGLExtensionVertexArray()
already_AddRefed<WebGLVertexArray>
WebGLExtensionVertexArray::CreateVertexArrayOES()
{
- if (mIsLost)
+ if (mIsLost || !mContext)
return nullptr;
return mContext->CreateVertexArray();
@@ -34,7 +34,7 @@ WebGLExtensionVertexArray::CreateVertexArrayOES()
void
WebGLExtensionVertexArray::DeleteVertexArrayOES(WebGLVertexArray* array)
{
- if (mIsLost)
+ if (mIsLost || !mContext)
return;
mContext->DeleteVertexArray(array);
@@ -43,7 +43,7 @@ WebGLExtensionVertexArray::DeleteVertexArrayOES(WebGLVertexArray* array)
bool
WebGLExtensionVertexArray::IsVertexArrayOES(const WebGLVertexArray* array)
{
- if (mIsLost)
+ if (mIsLost || !mContext)
return false;
return mContext->IsVertexArray(array);
@@ -52,7 +52,7 @@ WebGLExtensionVertexArray::IsVertexArrayOES(const WebGLVertexArray* array)
void
WebGLExtensionVertexArray::BindVertexArrayOES(WebGLVertexArray* array)
{
- if (mIsLost)
+ if (mIsLost || !mContext)
return;
mContext->BindVertexArray(array);
diff --git a/dom/canvas/WebGLObjectModel.h b/dom/canvas/WebGLObjectModel.h
index b18b790c0..6371c7b03 100644
--- a/dom/canvas/WebGLObjectModel.h
+++ b/dom/canvas/WebGLObjectModel.h
@@ -6,8 +6,8 @@
#ifndef WEBGLOBJECTMODEL_H_
#define WEBGLOBJECTMODEL_H_
+#include "mozilla/WeakPtr.h"
#include "nsCycleCollectionNoteChild.h"
-
#include "WebGLTypes.h"
namespace mozilla {
@@ -24,7 +24,7 @@ class WebGLContext;
class WebGLContextBoundObject
{
public:
- WebGLContext* const mContext;
+ const WeakPtr<WebGLContext> mContext;
private:
const uint32_t mContextGeneration;
diff --git a/dom/canvas/WebGLRenderbuffer.cpp b/dom/canvas/WebGLRenderbuffer.cpp
index ec076fdbb..32397dd1a 100644
--- a/dom/canvas/WebGLRenderbuffer.cpp
+++ b/dom/canvas/WebGLRenderbuffer.cpp
@@ -215,6 +215,16 @@ WebGLRenderbuffer::RenderbufferStorage(const char* funcName, uint32_t samples,
if (error) {
const char* errorName = mContext->ErrorName(error);
mContext->GenerateWarning("%s generated error %s", funcName, errorName);
+ if (error == LOCAL_GL_OUT_OF_MEMORY) {
+ // Truncate.
+ mSamples = 0;
+ mFormat = nullptr;
+ mWidth = 0;
+ mHeight = 0;
+ mImageDataStatus = WebGLImageDataStatus::NoImageData;
+
+ InvalidateStatusOfAttachedFBs();
+ }
return;
}
diff --git a/dom/canvas/WebGLShader.cpp b/dom/canvas/WebGLShader.cpp
index 37380f1e0..69ca03fc4 100644
--- a/dom/canvas/WebGLShader.cpp
+++ b/dom/canvas/WebGLShader.cpp
@@ -168,16 +168,6 @@ WebGLShader::ShaderSource(const nsAString& source)
// 7-bit ASCII range, so we can skip the NS_IsAscii() check.
const NS_LossyConvertUTF16toASCII sourceCString(cleanSource);
- if (mContext->gl->WorkAroundDriverBugs()) {
- const size_t maxSourceLength = 0x3ffff;
- if (sourceCString.Length() > maxSourceLength) {
- mContext->ErrorInvalidValue("shaderSource: Source has more than %d"
- " characters. (Driver workaround)",
- maxSourceLength);
- return;
- }
- }
-
if (PR_GetEnv("MOZ_WEBGL_DUMP_SHADERS")) {
printf_stderr("////////////////////////////////////////\n");
printf_stderr("// MOZ_WEBGL_DUMP_SHADERS:\n");
diff --git a/dom/canvas/WebGLTexture.cpp b/dom/canvas/WebGLTexture.cpp
index 767ff610a..65bb71153 100644
--- a/dom/canvas/WebGLTexture.cpp
+++ b/dom/canvas/WebGLTexture.cpp
@@ -51,8 +51,6 @@ WebGLTexture::ImageInfo::Clear()
WebGLTexture::ImageInfo&
WebGLTexture::ImageInfo::operator =(const ImageInfo& a)
{
- MOZ_ASSERT(a.IsDefined());
-
Mutable(mFormat) = a.mFormat;
Mutable(mWidth) = a.mWidth;
Mutable(mHeight) = a.mHeight;
@@ -1216,6 +1214,12 @@ WebGLTexture::TexParameter(TexTarget texTarget, GLenum pname, const FloatOrInt&
mContext->gl->fTexParameterf(texTarget.get(), pname, clamped.f);
}
+void WebGLTexture::Truncate() {
+ for (auto& cur : mImageInfoArr) {
+ SetImageInfo(&cur, ImageInfo());
+ }
+}
+
////////////////////////////////////////////////////////////////////////////////
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(WebGLTexture)
diff --git a/dom/canvas/WebGLTexture.h b/dom/canvas/WebGLTexture.h
index 66e781f23..8d3024590 100644
--- a/dom/canvas/WebGLTexture.h
+++ b/dom/canvas/WebGLTexture.h
@@ -386,6 +386,7 @@ public:
bool* const out_initFailed);
bool IsMipmapCubeComplete() const;
+ void Truncate();
bool IsCubeMap() const { return (mTarget == LOCAL_GL_TEXTURE_CUBE_MAP); }
diff --git a/dom/canvas/WebGLTextureUpload.cpp b/dom/canvas/WebGLTextureUpload.cpp
index 3839b5d5e..ae60d2a2b 100644
--- a/dom/canvas/WebGLTextureUpload.cpp
+++ b/dom/canvas/WebGLTextureUpload.cpp
@@ -1178,6 +1178,7 @@ WebGLTexture::TexStorage(const char* funcName, TexTarget target, GLsizei levels,
if (error == LOCAL_GL_OUT_OF_MEMORY) {
mContext->ErrorOutOfMemory("%s: Ran out of memory during texture allocation.",
funcName);
+ Truncate();
return;
}
if (error) {
@@ -1310,6 +1311,7 @@ WebGLTexture::TexImage(const char* funcName, TexImageTarget target, GLint level,
if (glError == LOCAL_GL_OUT_OF_MEMORY) {
mContext->ErrorOutOfMemory("%s: Driver ran out of memory during upload.",
funcName);
+ Truncate();
return;
}
@@ -1398,6 +1400,7 @@ WebGLTexture::TexSubImage(const char* funcName, TexImageTarget target, GLint lev
if (glError == LOCAL_GL_OUT_OF_MEMORY) {
mContext->ErrorOutOfMemory("%s: Driver ran out of memory during upload.",
funcName);
+ Truncate();
return;
}
@@ -1514,6 +1517,7 @@ WebGLTexture::CompressedTexImage(const char* funcName, TexImageTarget target, GL
blob->mAvailBytes, blob->mPtr);
if (error == LOCAL_GL_OUT_OF_MEMORY) {
mContext->ErrorOutOfMemory("%s: Ran out of memory during upload.", funcName);
+ Truncate();
return;
}
if (error) {
@@ -1664,6 +1668,7 @@ WebGLTexture::CompressedTexSubImage(const char* funcName, TexImageTarget target,
blob->mAvailBytes, blob->mPtr);
if (error == LOCAL_GL_OUT_OF_MEMORY) {
mContext->ErrorOutOfMemory("%s: Ran out of memory during upload.", funcName);
+ Truncate();
return;
}
if (error) {
@@ -1992,7 +1997,7 @@ WebGLTexture::ValidateCopyTexImageForFeedback(const char* funcName, uint32_t lev
static bool
DoCopyTexOrSubImage(WebGLContext* webgl, const char* funcName, bool isSubImage,
- const WebGLTexture* tex, TexImageTarget target, GLint level,
+ WebGLTexture* tex, TexImageTarget target, GLint level,
GLint xWithinSrc, GLint yWithinSrc,
uint32_t srcTotalWidth, uint32_t srcTotalHeight,
const webgl::FormatUsageInfo* srcUsage,
@@ -2069,6 +2074,7 @@ DoCopyTexOrSubImage(WebGLContext* webgl, const char* funcName, bool isSubImage,
if (error == LOCAL_GL_OUT_OF_MEMORY) {
webgl->ErrorOutOfMemory("%s: Ran out of memory during texture copy.", funcName);
+ tex->Truncate();
return false;
}
diff --git a/dom/indexedDB/ActorsChild.cpp b/dom/indexedDB/ActorsChild.cpp
index c4fcceb90..30dc9b6da 100644
--- a/dom/indexedDB/ActorsChild.cpp
+++ b/dom/indexedDB/ActorsChild.cpp
@@ -2385,9 +2385,14 @@ BackgroundVersionChangeTransactionChild::RecvComplete(const nsresult& aResult)
database->Close();
}
+ RefPtr<IDBOpenDBRequest> request = mOpenDBRequest;
+ MOZ_ASSERT(request);
+
mTransaction->FireCompleteOrAbortEvents(aResult);
- mOpenDBRequest->SetTransaction(nullptr);
+ request->SetTransaction(nullptr);
+ request = nullptr;
+
mOpenDBRequest = nullptr;
NoteComplete();
diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp
index 79446151c..97e3a4880 100644
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -229,11 +229,6 @@
static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID);
-#if defined(XP_WIN)
-// e10s forced enable pref, defined in nsAppRunner.cpp
-extern const char* kForceEnableE10sPref;
-#endif
-
using base::ChildPrivileges;
using base::KillProcess;
@@ -1275,12 +1270,6 @@ ContentParent::Init()
if (nsIPresShell::IsAccessibilityActive()) {
#if !defined(XP_WIN)
Unused << SendActivateA11y(0);
-#else
- // On Windows we currently only enable a11y in the content process
- // for testing purposes.
- if (Preferences::GetBool(kForceEnableE10sPref, false)) {
- Unused << SendActivateA11y(a11y::AccessibleWrap::GetContentProcessIdFor(ChildID()));
- }
#endif
}
#endif
@@ -2573,12 +2562,6 @@ ContentParent::Observe(nsISupports* aSubject,
// accessibility gets initiated in chrome process.
#if !defined(XP_WIN)
Unused << SendActivateA11y(0);
-#else
- // On Windows we currently only enable a11y in the content process
- // for testing purposes.
- if (Preferences::GetBool(kForceEnableE10sPref, false)) {
- Unused << SendActivateA11y(a11y::AccessibleWrap::GetContentProcessIdFor(ChildID()));
- }
#endif
} else {
// If possible, shut down accessibility in content process when
diff --git a/dom/media/MediaResource.cpp b/dom/media/MediaResource.cpp
index d36783be7..84a8d67fd 100644
--- a/dom/media/MediaResource.cpp
+++ b/dom/media/MediaResource.cpp
@@ -1525,7 +1525,7 @@ void BaseMediaResource::SetLoadInBackground(bool aLoadInBackground) {
NS_WARNING("Null owner in MediaResource::SetLoadInBackground()");
return;
}
- dom::HTMLMediaElement* element = owner->GetMediaElement();
+ RefPtr<dom::HTMLMediaElement> element = owner->GetMediaElement();
if (!element) {
NS_WARNING("Null element in MediaResource::SetLoadInBackground()");
return;
diff --git a/dom/media/fmp4/MP4Decoder.cpp b/dom/media/fmp4/MP4Decoder.cpp
index 6954e9757..b293c251b 100644
--- a/dom/media/fmp4/MP4Decoder.cpp
+++ b/dom/media/fmp4/MP4Decoder.cpp
@@ -172,7 +172,8 @@ bool
MP4Decoder::IsH264(const nsACString& aMimeType)
{
return aMimeType.EqualsLiteral("video/mp4") ||
- aMimeType.EqualsLiteral("video/avc");
+ aMimeType.EqualsLiteral("video/avc") ||
+ aMimeType.EqualsLiteral("video/webm; codecs=avc1");
}
/* static */
diff --git a/dom/media/mediasource/ContainerParser.cpp b/dom/media/mediasource/ContainerParser.cpp
index 4ae37d7e9..b4dcfde8a 100644
--- a/dom/media/mediasource/ContainerParser.cpp
+++ b/dom/media/mediasource/ContainerParser.cpp
@@ -697,6 +697,9 @@ ContainerParser::CreateForMIMEType(const nsACString& aType)
if (aType.LowerCaseEqualsLiteral("video/webm") || aType.LowerCaseEqualsLiteral("audio/webm")) {
return new WebMContainerParser(aType);
}
+ if (aType.LowerCaseEqualsLiteral("video/x-matroska") || aType.LowerCaseEqualsLiteral("audio/x-matroska")) {
+ return new WebMContainerParser(aType);
+ }
#ifdef MOZ_FMP4
if (aType.LowerCaseEqualsLiteral("video/mp4") || aType.LowerCaseEqualsLiteral("audio/mp4")) {
diff --git a/dom/media/mediasource/MediaSource.cpp b/dom/media/mediasource/MediaSource.cpp
index 152c0085a..1c276cdc1 100644
--- a/dom/media/mediasource/MediaSource.cpp
+++ b/dom/media/mediasource/MediaSource.cpp
@@ -110,14 +110,16 @@ MediaSource::IsTypeSupported(const nsAString& aType, DecoderDoctorDiagnostics* a
}
return NS_OK;
}
- if (mimeType.EqualsASCII("video/webm")) {
+ if (mimeType.EqualsASCII("video/webm") ||
+ mimeType.EqualsASCII("video/x-matroska")) {
if (!(Preferences::GetBool("media.mediasource.webm.enabled", false) ||
IsWebMForced(aDiagnostics))) {
return NS_ERROR_DOM_NOT_SUPPORTED_ERR;
}
return NS_OK;
}
- if (mimeType.EqualsASCII("audio/webm")) {
+ if (mimeType.EqualsASCII("audio/webm") ||
+ mimeType.EqualsASCII("audio/x-matroska")) {
if (!(Preferences::GetBool("media.mediasource.webm.enabled", false) ||
Preferences::GetBool("media.mediasource.webm.audio.enabled", true))) {
return NS_ERROR_DOM_NOT_SUPPORTED_ERR;
diff --git a/dom/media/mediasource/TrackBuffersManager.cpp b/dom/media/mediasource/TrackBuffersManager.cpp
index ac6d82411..21fb158b5 100644
--- a/dom/media/mediasource/TrackBuffersManager.cpp
+++ b/dom/media/mediasource/TrackBuffersManager.cpp
@@ -814,6 +814,8 @@ TrackBuffersManager::CreateDemuxerforMIMEType()
ShutdownDemuxers();
if (mType.LowerCaseEqualsLiteral("video/webm") ||
+ mType.LowerCaseEqualsLiteral("video/x-matroska") ||
+ mType.LowerCaseEqualsLiteral("audio/x-matroska") ||
mType.LowerCaseEqualsLiteral("audio/webm")) {
mInputDemuxer = new WebMDemuxer(mCurrentInputBuffer, true /* IsMediaSource*/ );
return;
diff --git a/dom/media/webm/WebMDecoder.cpp b/dom/media/webm/WebMDecoder.cpp
index 9575d6e42..cbe9ffdb7 100644
--- a/dom/media/webm/WebMDecoder.cpp
+++ b/dom/media/webm/WebMDecoder.cpp
@@ -42,7 +42,10 @@ WebMDecoder::CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs,
const bool isWebMAudio = aMIMETypeExcludingCodecs.EqualsASCII("audio/webm");
const bool isWebMVideo = aMIMETypeExcludingCodecs.EqualsASCII("video/webm");
- if (!isWebMAudio && !isWebMVideo) {
+ const bool isMatroskaAudio = aMIMETypeExcludingCodecs.EqualsASCII("audio/x-matroska") ;
+ const bool isMatroskaVideo = aMIMETypeExcludingCodecs.EqualsASCII("video/x-matroska") ;
+
+ if (!isWebMAudio && !isWebMVideo && !isMatroskaAudio && !isMatroskaVideo) {
return false;
}
@@ -63,7 +66,7 @@ WebMDecoder::CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs,
}
// Note: Only accept VP8/VP9 in a video content type, not in an audio
// content type.
- if (isWebMVideo &&
+ if ((isWebMVideo || isMatroskaVideo) &&
(codec.EqualsLiteral("vp8") || codec.EqualsLiteral("vp8.0") ||
codec.EqualsLiteral("vp9") || codec.EqualsLiteral("vp9.0"))) {
@@ -74,6 +77,15 @@ WebMDecoder::CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs,
continue;
}
#endif
+
+ if (IsH264CodecString(codec)) {
+ continue;
+ }
+
+ if (IsAACCodecString(codec)) {
+ continue;
+ }
+
// Some unsupported codec.
return false;
}
diff --git a/dom/media/webm/WebMDemuxer.cpp b/dom/media/webm/WebMDemuxer.cpp
index 013da9b2c..84b4b506e 100644
--- a/dom/media/webm/WebMDemuxer.cpp
+++ b/dom/media/webm/WebMDemuxer.cpp
@@ -326,6 +326,20 @@ WebMDemuxer::ReadMetadata()
case NESTEGG_CODEC_AV1:
mInfo.mVideo.mMimeType = "video/webm; codecs=av1";
break;
+ case NESTEGG_CODEC_AVC1: {
+ mInfo.mVideo.mMimeType = "video/webm; codecs=avc1";
+
+ unsigned char* data = 0;
+ size_t length = 0;
+ r = nestegg_track_codec_data(context, track, 0, &data, &length);
+ if (r == -1) {
+ return NS_ERROR_FAILURE;
+ }
+
+ mInfo.mVideo.mExtraData = new MediaByteBuffer(length);
+ mInfo.mVideo.mExtraData->AppendElements(data, length);
+ break;
+ }
default:
NS_WARNING("Unknown WebM video codec");
return NS_ERROR_FAILURE;
@@ -408,6 +422,8 @@ WebMDemuxer::ReadMetadata()
mInfo.mAudio.mMimeType = "audio/opus";
OpusDataDecoder::AppendCodecDelay(mInfo.mAudio.mCodecSpecificConfig,
media::TimeUnit::FromNanoseconds(params.codec_delay).ToMicroseconds());
+ } else if (mAudioCodec == NESTEGG_CODEC_AAC) {
+ mInfo.mAudio.mMimeType = "audio/mp4a-latm";
}
mSeekPreroll = params.seek_preroll;
mInfo.mAudio.mRate = params.rate;
@@ -662,6 +678,9 @@ WebMDemuxer::GetNextPacket(TrackInfo::TrackType aType, MediaRawDataQueue *aSampl
isKeyframe = AOMDecoder::IsKeyframe(sample);
break;
#endif
+ case NESTEGG_CODEC_AVC1:
+ isKeyframe = nestegg_packet_has_keyframe(holder->Packet());
+ break;
default:
NS_WARNING("Cannot detect keyframes in unknown WebM video codec");
return NS_ERROR_FAILURE;
@@ -682,7 +701,7 @@ WebMDemuxer::GetNextPacket(TrackInfo::TrackType aType, MediaRawDataQueue *aSampl
dimensions = AOMDecoder::GetFrameSize(sample);
break;
#endif
- }
+ }
if (mLastSeenFrameSize.isSome()
&& (dimensions != mLastSeenFrameSize.value())) {
mInfo.mVideo.mDisplay = dimensions;
@@ -749,6 +768,11 @@ WebMDemuxer::GetNextPacket(TrackInfo::TrackType aType, MediaRawDataQueue *aSampl
if (aType == TrackInfo::kVideoTrack) {
sample->mTrackInfo = mSharedVideoTrackInfo;
}
+
+ if (mVideoCodec == NESTEGG_CODEC_AVC1) {
+ sample->mExtraData = mInfo.mVideo.mExtraData;
+ }
+
aSamples->Push(sample);
}
return NS_OK;
diff --git a/dom/network/UDPSocketChild.cpp b/dom/network/UDPSocketChild.cpp
index 6e374ce31..d205e7e8a 100644
--- a/dom/network/UDPSocketChild.cpp
+++ b/dom/network/UDPSocketChild.cpp
@@ -172,19 +172,28 @@ UDPSocketChild::Bind(nsIUDPSocketInternal* aSocket,
NS_ENSURE_ARG(aSocket);
- mSocket = aSocket;
- AddIPDLReference();
+ if (NS_IsMainThread()) {
+ if (!gNeckoChild->SendPUDPSocketConstructor(
+ this, IPC::Principal(aPrincipal), mFilterName)) {
+ return NS_ERROR_FAILURE;
+ }
+ } else {
+ if (!mBackgroundManager) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
- if (mBackgroundManager) {
// If we want to support a passed-in principal here we'd need to
// convert it to a PrincipalInfo
MOZ_ASSERT(!aPrincipal);
- mBackgroundManager->SendPUDPSocketConstructor(this, void_t(), mFilterName);
- } else {
- gNeckoChild->SendPUDPSocketConstructor(this, IPC::Principal(aPrincipal),
- mFilterName);
+ if (!mBackgroundManager->SendPUDPSocketConstructor(
+ this, void_t(), mFilterName)) {
+ return NS_ERROR_FAILURE;
+ }
}
+ mSocket = aSocket;
+ AddIPDLReference();
+
SendBind(UDPAddressInfo(nsCString(aHost), aPort), aAddressReuse, aLoopback,
recvBufferSize, sendBufferSize);
return NS_OK;
diff --git a/dom/plugins/base/nsPluginStreamListenerPeer.cpp b/dom/plugins/base/nsPluginStreamListenerPeer.cpp
index 665e11ec1..0476315d5 100644
--- a/dom/plugins/base/nsPluginStreamListenerPeer.cpp
+++ b/dom/plugins/base/nsPluginStreamListenerPeer.cpp
@@ -1381,7 +1381,7 @@ nsPluginStreamListenerPeer::AsyncOnChannelRedirect(nsIChannel *oldChannel, nsICh
return NS_ERROR_FAILURE;
}
- // Don't allow cross-origin 307 POST redirects.
+ // Don't allow cross-origin 307/308 POST redirects.
nsCOMPtr<nsIHttpChannel> oldHttpChannel(do_QueryInterface(oldChannel));
if (oldHttpChannel) {
uint32_t responseStatus;
@@ -1389,7 +1389,7 @@ nsPluginStreamListenerPeer::AsyncOnChannelRedirect(nsIChannel *oldChannel, nsICh
if (NS_FAILED(rv)) {
return rv;
}
- if (responseStatus == 307) {
+ if (responseStatus == 307 || responseStatus == 308) {
nsAutoCString method;
rv = oldHttpChannel->GetRequestMethod(method);
if (NS_FAILED(rv)) {
diff --git a/dom/security/nsContentSecurityManager.cpp b/dom/security/nsContentSecurityManager.cpp
index f2cbc8fcf..5c6701992 100644
--- a/dom/security/nsContentSecurityManager.cpp
+++ b/dom/security/nsContentSecurityManager.cpp
@@ -10,6 +10,7 @@
#include "nsIStreamListener.h"
#include "nsCDefaultURIFixup.h"
#include "nsIURIFixup.h"
+#include "nsIImageLoadingContent.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/TabChild.h"
@@ -95,9 +96,14 @@ nsContentSecurityManager::AllowTopLevelNavigationToDataURI(nsIChannel* aChannel)
/* static */ nsresult
nsContentSecurityManager::CheckFTPSubresourceLoad(nsIChannel* aChannel)
{
- // We dissallow using FTP resources as a subresource everywhere.
+ // We dissallow using FTP resources as a subresource almost everywhere.
// The only valid way to use FTP resources is loading it as
// a top level document.
+
+ // Override blocking if the pref is set to allow.
+ if (!mozilla::net::nsIOService::BlockFTPSubresources()) {
+ return NS_OK;
+ }
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo();
if (!loadInfo) {
@@ -105,22 +111,40 @@ nsContentSecurityManager::CheckFTPSubresourceLoad(nsIChannel* aChannel)
}
nsContentPolicyType type = loadInfo->GetExternalContentPolicyType();
+
+ // Allow save-as download of FTP files on HTTP pages.
+ if (type == nsIContentPolicy::TYPE_SAVEAS_DOWNLOAD) {
+ return NS_OK;
+ }
+
+ // Allow direct document requests
if (type == nsIContentPolicy::TYPE_DOCUMENT) {
return NS_OK;
}
nsCOMPtr<nsIURI> uri;
nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(uri));
- NS_ENSURE_SUCCESS(rv, rv);
+ NS_ENSURE_SUCCESS(rv, rv);
if (!uri) {
return NS_OK;
}
+ // Allow if it's not the FTP protocol
bool isFtpURI = (NS_SUCCEEDED(uri->SchemeIs("ftp", &isFtpURI)) && isFtpURI);
if (!isFtpURI) {
return NS_OK;
}
+ // Allow loading FTP subresources in top-level FTP documents.
+ nsIPrincipal* triggeringPrincipal = loadInfo->TriggeringPrincipal();
+ nsCOMPtr<nsIURI> tURI;
+ triggeringPrincipal->GetURI(getter_AddRefs(tURI));
+ bool isTrigFtpURI = (NS_SUCCEEDED(tURI->SchemeIs("ftp", &isTrigFtpURI)) && isTrigFtpURI);
+ if (isTrigFtpURI) {
+ return NS_OK;
+ }
+
+ // If we get here, the request is blocked and should be reported.
nsCOMPtr<nsIDocument> doc;
if (nsINode* node = loadInfo->LoadingNode()) {
doc = node->OwnerDoc();
@@ -778,6 +802,8 @@ nsContentSecurityManager::CheckChannel(nsIChannel* aChannel)
// within nsCorsListenerProxy
rv = DoCheckLoadURIChecks(uri, loadInfo);
NS_ENSURE_SUCCESS(rv, rv);
+ // TODO: Bug 1371237
+ // consider calling SetBlockedRequest in nsContentSecurityManager::CheckChannel
}
return NS_OK;
diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp
index 21f6d8ddf..19c4ded2a 100644
--- a/dom/workers/RuntimeService.cpp
+++ b/dom/workers/RuntimeService.cpp
@@ -988,7 +988,7 @@ Wrap(JSContext *cx, JS::HandleObject existing, JS::HandleObject obj)
}
if (existing) {
- js::Wrapper::Renew(cx, existing, obj, wrapper);
+ js::Wrapper::Renew(existing, obj, wrapper);
}
return js::Wrapper::New(cx, obj, wrapper);
}
diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp
index 6bc5c4f96..27eb570e9 100644
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -87,6 +87,7 @@
#include "nsProxyRelease.h"
#include "nsQueryObject.h"
#include "nsSandboxFlags.h"
+#include "nsScriptError.h"
#include "nsUTF8Utils.h"
#include "prthread.h"
#include "xpcpublic.h"
@@ -281,27 +282,34 @@ struct WindowAction
};
void
-LogErrorToConsole(const nsAString& aMessage,
- const nsAString& aFilename,
- const nsAString& aLine,
- uint32_t aLineNumber,
- uint32_t aColumnNumber,
- uint32_t aFlags,
- uint64_t aInnerWindowId)
+LogErrorToConsole(const WorkerErrorReport& aReport, uint64_t aInnerWindowId)
{
AssertIsOnMainThread();
- nsCOMPtr<nsIScriptError> scriptError =
- do_CreateInstance(NS_SCRIPTERROR_CONTRACTID);
+ RefPtr<nsScriptErrorBase> scriptError = new nsScriptError();
NS_WARNING_ASSERTION(scriptError, "Failed to create script error!");
if (scriptError) {
- if (NS_FAILED(scriptError->InitWithWindowID(aMessage, aFilename, aLine,
- aLineNumber, aColumnNumber,
- aFlags, "Web Worker",
+ nsAutoCString category("Web Worker");
+ if (NS_FAILED(scriptError->InitWithWindowID(aReport.mMessage,
+ aReport.mFilename,
+ aReport.mLine,
+ aReport.mLineNumber,
+ aReport.mColumnNumber,
+ aReport.mFlags,
+ category,
aInnerWindowId))) {
NS_WARNING("Failed to init script error!");
scriptError = nullptr;
+
+ for (size_t i = 0, len = aReport.mNotes.Length(); i < len; i++) {
+ const WorkerErrorNote& note = aReport.mNotes.ElementAt(i);
+
+ nsScriptErrorNote* noteObject = new nsScriptErrorNote();
+ noteObject->Init(note.mMessage, note.mFilename,
+ note.mLineNumber, note.mColumnNumber);
+ scriptError->AddNote(noteObject);
+ }
}
}
@@ -316,23 +324,23 @@ LogErrorToConsole(const nsAString& aMessage,
}
NS_WARNING("LogMessage failed!");
} else if (NS_SUCCEEDED(consoleService->LogStringMessage(
- aMessage.BeginReading()))) {
+ aReport.mMessage.BeginReading()))) {
return;
}
NS_WARNING("LogStringMessage failed!");
}
- NS_ConvertUTF16toUTF8 msg(aMessage);
- NS_ConvertUTF16toUTF8 filename(aFilename);
+ NS_ConvertUTF16toUTF8 msg(aReport.mMessage);
+ NS_ConvertUTF16toUTF8 filename(aReport.mFilename);
static const char kErrorString[] = "JS error in Web Worker: %s [%s:%u]";
#ifdef ANDROID
__android_log_print(ANDROID_LOG_INFO, "Gecko", kErrorString, msg.get(),
- filename.get(), aLineNumber);
+ filename.get(), aReport.mLineNumber);
#endif
- fprintf(stderr, kErrorString, msg.get(), filename.get(), aLineNumber);
+ fprintf(stderr, kErrorString, msg.get(), filename.get(), aReport.mLineNumber);
fflush(stderr);
}
@@ -536,10 +544,7 @@ private:
}
if (aWorkerPrivate->IsSharedWorker()) {
- aWorkerPrivate->BroadcastErrorToSharedWorkers(aCx, EmptyString(),
- EmptyString(),
- EmptyString(), 0, 0,
- JSREPORT_ERROR,
+ aWorkerPrivate->BroadcastErrorToSharedWorkers(aCx, nullptr,
/* isErrorEvent */ false);
return true;
}
@@ -1060,15 +1065,7 @@ private:
class ReportErrorRunnable final : public WorkerRunnable
{
- nsString mMessage;
- nsString mFilename;
- nsString mLine;
- uint32_t mLineNumber;
- uint32_t mColumnNumber;
- uint32_t mFlags;
- uint32_t mErrorNumber;
- JSExnType mExnType;
- bool mMutedError;
+ WorkerErrorReport mReport;
public:
// aWorkerPrivate is the worker thread we're on (or the main thread, if null)
@@ -1077,11 +1074,7 @@ public:
static void
ReportError(JSContext* aCx, WorkerPrivate* aWorkerPrivate,
bool aFireAtScope, WorkerPrivate* aTarget,
- const nsString& aMessage, const nsString& aFilename,
- const nsString& aLine, uint32_t aLineNumber,
- uint32_t aColumnNumber, uint32_t aFlags,
- uint32_t aErrorNumber, JSExnType aExnType,
- bool aMutedError, uint64_t aInnerWindowId,
+ const WorkerErrorReport& aReport, uint64_t aInnerWindowId,
JS::Handle<JS::Value> aException = JS::NullHandleValue)
{
if (aWorkerPrivate) {
@@ -1092,16 +1085,16 @@ public:
// We should not fire error events for warnings but instead make sure that
// they show up in the error console.
- if (!JSREPORT_IS_WARNING(aFlags)) {
+ if (!JSREPORT_IS_WARNING(aReport.mFlags)) {
// First fire an ErrorEvent at the worker.
RootedDictionary<ErrorEventInit> init(aCx);
- if (aMutedError) {
+ if (aReport.mMutedError) {
init.mMessage.AssignLiteral("Script error.");
} else {
- init.mMessage = aMessage;
- init.mFilename = aFilename;
- init.mLineno = aLineNumber;
+ init.mMessage = aReport.mMessage;
+ init.mFilename = aReport.mFilename;
+ init.mLineno = aReport.mLineNumber;
init.mError = aException;
}
@@ -1128,7 +1121,8 @@ public:
// into an error event on our parent worker!
// https://bugzilla.mozilla.org/show_bug.cgi?id=1271441 tracks making this
// better.
- if (aFireAtScope && (aTarget || aErrorNumber != JSMSG_OVER_RECURSED)) {
+ if (aFireAtScope &&
+ (aTarget || aReport.mErrorNumber != JSMSG_OVER_RECURSED)) {
JS::Rooted<JSObject*> global(aCx, JS::CurrentGlobalOrNull(aCx));
NS_ASSERTION(global, "This should never be null!");
@@ -1145,8 +1139,8 @@ public:
MOZ_ASSERT_IF(globalScope, globalScope->GetWrapperPreserveColor() == global);
if (globalScope || IsDebuggerSandbox(global)) {
- aWorkerPrivate->ReportErrorToDebugger(aFilename, aLineNumber,
- aMessage);
+ aWorkerPrivate->ReportErrorToDebugger(aReport.mFilename, aReport.mLineNumber,
+ aReport.mMessage);
return;
}
@@ -1193,28 +1187,20 @@ public:
// Now fire a runnable to do the same on the parent's thread if we can.
if (aWorkerPrivate) {
RefPtr<ReportErrorRunnable> runnable =
- new ReportErrorRunnable(aWorkerPrivate, aMessage, aFilename, aLine,
- aLineNumber, aColumnNumber, aFlags,
- aErrorNumber, aExnType, aMutedError);
+ new ReportErrorRunnable(aWorkerPrivate, aReport);
runnable->Dispatch();
return;
}
// Otherwise log an error to the error console.
- LogErrorToConsole(aMessage, aFilename, aLine, aLineNumber, aColumnNumber,
- aFlags, aInnerWindowId);
+ LogErrorToConsole(aReport, aInnerWindowId);
}
private:
- ReportErrorRunnable(WorkerPrivate* aWorkerPrivate, const nsString& aMessage,
- const nsString& aFilename, const nsString& aLine,
- uint32_t aLineNumber, uint32_t aColumnNumber,
- uint32_t aFlags, uint32_t aErrorNumber,
- JSExnType aExnType, bool aMutedError)
+ ReportErrorRunnable(WorkerPrivate* aWorkerPrivate,
+ const WorkerErrorReport& aReport)
: WorkerRunnable(aWorkerPrivate, ParentThreadUnchangedBusyCount),
- mMessage(aMessage), mFilename(aFilename), mLine(aLine),
- mLineNumber(aLineNumber), mColumnNumber(aColumnNumber), mFlags(aFlags),
- mErrorNumber(aErrorNumber), mExnType(aExnType), mMutedError(aMutedError)
+ mReport(aReport)
{ }
virtual void
@@ -1251,9 +1237,7 @@ private:
}
if (aWorkerPrivate->IsSharedWorker()) {
- aWorkerPrivate->BroadcastErrorToSharedWorkers(aCx, mMessage, mFilename,
- mLine, mLineNumber,
- mColumnNumber, mFlags,
+ aWorkerPrivate->BroadcastErrorToSharedWorkers(aCx, &mReport,
/* isErrorEvent */ true);
return true;
}
@@ -1267,9 +1251,10 @@ private:
swm->HandleError(aCx, aWorkerPrivate->GetPrincipal(),
aWorkerPrivate->WorkerName(),
aWorkerPrivate->ScriptURL(),
- mMessage,
- mFilename, mLine, mLineNumber,
- mColumnNumber, mFlags, mExnType);
+ mReport.mMessage,
+ mReport.mFilename, mReport.mLine, mReport.mLineNumber,
+ mReport.mColumnNumber, mReport.mFlags,
+ mReport.mExnType);
}
return true;
}
@@ -1289,9 +1274,8 @@ private:
return true;
}
- ReportError(aCx, parent, fireAtScope, aWorkerPrivate, mMessage,
- mFilename, mLine, mLineNumber, mColumnNumber, mFlags,
- mErrorNumber, mExnType, mMutedError, innerWindowId);
+ ReportError(aCx, parent, fireAtScope, aWorkerPrivate, mReport,
+ innerWindowId);
return true;
}
};
@@ -3314,21 +3298,16 @@ template <class Derived>
void
WorkerPrivateParent<Derived>::BroadcastErrorToSharedWorkers(
JSContext* aCx,
- const nsAString& aMessage,
- const nsAString& aFilename,
- const nsAString& aLine,
- uint32_t aLineNumber,
- uint32_t aColumnNumber,
- uint32_t aFlags,
+ const WorkerErrorReport* aReport,
bool aIsErrorEvent)
{
AssertIsOnMainThread();
- if (JSREPORT_IS_WARNING(aFlags)) {
+ if (aIsErrorEvent && JSREPORT_IS_WARNING(aReport->mFlags)) {
// Don't fire any events anywhere. Just log to console.
// XXXbz should we log to all the consoles of all the relevant windows?
- LogErrorToConsole(aMessage, aFilename, aLine, aLineNumber, aColumnNumber,
- aFlags, 0);
+ MOZ_ASSERT(aReport);
+ LogErrorToConsole(*aReport, 0);
return;
}
@@ -3357,10 +3336,10 @@ WorkerPrivateParent<Derived>::BroadcastErrorToSharedWorkers(
RootedDictionary<ErrorEventInit> errorInit(aCx);
errorInit.mBubbles = false;
errorInit.mCancelable = true;
- errorInit.mMessage = aMessage;
- errorInit.mFilename = aFilename;
- errorInit.mLineno = aLineNumber;
- errorInit.mColno = aColumnNumber;
+ errorInit.mMessage = aReport->mMessage;
+ errorInit.mFilename = aReport->mFilename;
+ errorInit.mLineno = aReport->mLineNumber;
+ errorInit.mColno = aReport->mColumnNumber;
event = ErrorEvent::Constructor(sharedWorker, NS_LITERAL_STRING("error"),
errorInit);
@@ -3426,9 +3405,9 @@ WorkerPrivateParent<Derived>::BroadcastErrorToSharedWorkers(
MOZ_ASSERT(NS_IsMainThread());
RootedDictionary<ErrorEventInit> init(aCx);
- init.mLineno = aLineNumber;
- init.mFilename = aFilename;
- init.mMessage = aMessage;
+ init.mLineno = aReport->mLineNumber;
+ init.mFilename = aReport->mFilename;
+ init.mMessage = aReport->mMessage;
init.mCancelable = true;
init.mBubbles = true;
@@ -3446,8 +3425,8 @@ WorkerPrivateParent<Derived>::BroadcastErrorToSharedWorkers(
// Finally log a warning in the console if no window tried to prevent it.
if (shouldLogErrorToConsole) {
- LogErrorToConsole(aMessage, aFilename, aLine, aLineNumber, aColumnNumber,
- aFlags, 0);
+ MOZ_ASSERT(aReport);
+ LogErrorToConsole(*aReport, 0);
}
}
@@ -4120,7 +4099,10 @@ WorkerDebugger::ReportErrorToDebuggerOnMainThread(const nsAString& aFilename,
listeners[index]->OnError(aFilename, aLineno, aMessage);
}
- LogErrorToConsole(aMessage, aFilename, nsString(), aLineno, 0, 0, 0);
+ WorkerErrorReport report;
+ report.mMessage = aMessage;
+ report.mFilename = aFilename;
+ LogErrorToConsole(report, 0);
}
WorkerPrivate::WorkerPrivate(WorkerPrivate* aParent,
@@ -5926,6 +5908,47 @@ WorkerPrivate::NotifyInternal(JSContext* aCx, Status aStatus)
}
void
+WorkerErrorBase::AssignErrorBase(JSErrorBase* aReport)
+{
+ mFilename = NS_ConvertUTF8toUTF16(aReport->filename);
+ mLineNumber = aReport->lineno;
+ mColumnNumber = aReport->column;
+ mErrorNumber = aReport->errorNumber;
+}
+
+void
+WorkerErrorNote::AssignErrorNote(JSErrorNotes::Note* aNote)
+{
+ WorkerErrorBase::AssignErrorBase(aNote);
+ xpc::ErrorNote::ErrorNoteToMessageString(aNote, mMessage);
+}
+
+void
+WorkerErrorReport::AssignErrorReport(JSErrorReport* aReport)
+{
+ WorkerErrorBase::AssignErrorBase(aReport);
+ xpc::ErrorReport::ErrorReportToMessageString(aReport, mMessage);
+
+ mLine.Assign(aReport->linebuf(), aReport->linebufLength());
+ mFlags = aReport->flags;
+ MOZ_ASSERT(aReport->exnType >= JSEXN_FIRST && aReport->exnType < JSEXN_LIMIT);
+ mExnType = JSExnType(aReport->exnType);
+ mMutedError = aReport->isMuted;
+
+ if (aReport->notes) {
+ if (!mNotes.SetLength(aReport->notes->length(), fallible)) {
+ return;
+ }
+
+ size_t i = 0;
+ for (auto&& note : *aReport->notes) {
+ mNotes.ElementAt(i).AssignErrorNote(note.get());
+ i++;
+ }
+ }
+}
+
+void
WorkerPrivate::ReportError(JSContext* aCx, JS::ConstUTF8CharsZ aToStringResult,
JSErrorReport* aReport)
{
@@ -5947,32 +5970,17 @@ WorkerPrivate::ReportError(JSContext* aCx, JS::ConstUTF8CharsZ aToStringResult,
}
JS_ClearPendingException(aCx);
- nsString message, filename, line;
- uint32_t lineNumber, columnNumber, flags, errorNumber;
- JSExnType exnType = JSEXN_ERR;
- bool mutedError = aReport && aReport->isMuted;
-
+ WorkerErrorReport report;
if (aReport) {
- // We want the same behavior here as xpc::ErrorReport::init here.
- xpc::ErrorReport::ErrorReportToMessageString(aReport, message);
-
- filename = NS_ConvertUTF8toUTF16(aReport->filename);
- line.Assign(aReport->linebuf(), aReport->linebufLength());
- lineNumber = aReport->lineno;
- columnNumber = aReport->tokenOffset();
- flags = aReport->flags;
- errorNumber = aReport->errorNumber;
- MOZ_ASSERT(aReport->exnType >= JSEXN_FIRST && aReport->exnType < JSEXN_LIMIT);
- exnType = JSExnType(aReport->exnType);
+ report.AssignErrorReport(aReport);
}
else {
- lineNumber = columnNumber = errorNumber = 0;
- flags = nsIScriptError::errorFlag | nsIScriptError::exceptionFlag;
+ report.mFlags = nsIScriptError::errorFlag | nsIScriptError::exceptionFlag;
}
- if (message.IsEmpty() && aToStringResult) {
+ if (report.mMessage.IsEmpty() && aToStringResult) {
nsDependentCString toStringResult(aToStringResult.c_str());
- if (!AppendUTF8toUTF16(toStringResult, message, mozilla::fallible)) {
+ if (!AppendUTF8toUTF16(toStringResult, report.mMessage, mozilla::fallible)) {
// Try again, with only a 1 KB string. Do this infallibly this time.
// If the user doesn't have 1 KB to spare we're done anyways.
uint32_t index = std::min(uint32_t(1024), toStringResult.Length());
@@ -5982,7 +5990,7 @@ WorkerPrivate::ReportError(JSContext* aCx, JS::ConstUTF8CharsZ aToStringResult,
nsDependentCString truncatedToStringResult(aToStringResult.c_str(),
index);
- AppendUTF8toUTF16(truncatedToStringResult, message);
+ AppendUTF8toUTF16(truncatedToStringResult, report.mMessage);
}
}
@@ -5991,13 +5999,11 @@ WorkerPrivate::ReportError(JSContext* aCx, JS::ConstUTF8CharsZ aToStringResult,
// Don't want to run the scope's error handler if this is a recursive error or
// if we ran out of memory.
bool fireAtScope = mErrorHandlerRecursionCount == 1 &&
- errorNumber != JSMSG_OUT_OF_MEMORY &&
+ report.mErrorNumber != JSMSG_OUT_OF_MEMORY &&
JS::CurrentGlobalOrNull(aCx);
- ReportErrorRunnable::ReportError(aCx, this, fireAtScope, nullptr, message,
- filename, line, lineNumber,
- columnNumber, flags, errorNumber, exnType,
- mutedError, 0, exn);
+ ReportErrorRunnable::ReportError(aCx, this, fireAtScope, nullptr, report, 0,
+ exn);
mErrorHandlerRecursionCount--;
}
diff --git a/dom/workers/WorkerPrivate.h b/dom/workers/WorkerPrivate.h
index 20a530205..885abccd5 100644
--- a/dom/workers/WorkerPrivate.h
+++ b/dom/workers/WorkerPrivate.h
@@ -140,6 +140,45 @@ public:
}
};
+class WorkerErrorBase {
+public:
+ nsString mMessage;
+ nsString mFilename;
+ uint32_t mLineNumber;
+ uint32_t mColumnNumber;
+ uint32_t mErrorNumber;
+
+ WorkerErrorBase()
+ : mLineNumber(0),
+ mColumnNumber(0),
+ mErrorNumber(0)
+ { }
+
+ void AssignErrorBase(JSErrorBase* aReport);
+};
+
+class WorkerErrorNote : public WorkerErrorBase {
+public:
+ void AssignErrorNote(JSErrorNotes::Note* aNote);
+};
+
+class WorkerErrorReport : public WorkerErrorBase {
+public:
+ nsString mLine;
+ uint32_t mFlags;
+ JSExnType mExnType;
+ bool mMutedError;
+ nsTArray<WorkerErrorNote> mNotes;
+
+ WorkerErrorReport()
+ : mFlags(0),
+ mExnType(JSEXN_ERR),
+ mMutedError(false)
+ { }
+
+ void AssignErrorReport(JSErrorReport* aReport);
+};
+
template <class Derived>
class WorkerPrivateParent : public DOMEventTargetHelper
{
@@ -401,12 +440,7 @@ public:
void
BroadcastErrorToSharedWorkers(JSContext* aCx,
- const nsAString& aMessage,
- const nsAString& aFilename,
- const nsAString& aLine,
- uint32_t aLineNumber,
- uint32_t aColumnNumber,
- uint32_t aFlags,
+ const WorkerErrorReport* aReport,
bool aIsErrorEvent);
void
diff --git a/dom/workers/moz.build b/dom/workers/moz.build
index 4f4b52e4a..9fea84193 100644
--- a/dom/workers/moz.build
+++ b/dom/workers/moz.build
@@ -94,6 +94,7 @@ LOCAL_INCLUDES += [
'../base',
'../system',
'/dom/base',
+ '/dom/bindings',
'/xpcom/build',
'/xpcom/threads',
]
diff --git a/dom/workers/test/test_sharedWorker.html b/dom/workers/test/test_sharedWorker.html
index 3d3d4e2c6..c00c4e586 100644
--- a/dom/workers/test/test_sharedWorker.html
+++ b/dom/workers/test/test_sharedWorker.html
@@ -23,7 +23,7 @@
const errorFilename = href.substring(0, href.lastIndexOf("/") + 1) +
filename;
const errorLine = 91;
- const errorColumn = 0;
+ const errorColumn = 11;
var worker = new SharedWorker(filename);
diff --git a/gfx/gl/GLUploadHelpers.cpp b/gfx/gl/GLUploadHelpers.cpp
index 75165eedf..0bbb61434 100644
--- a/gfx/gl/GLUploadHelpers.cpp
+++ b/gfx/gl/GLUploadHelpers.cpp
@@ -161,7 +161,22 @@ TexSubImage2DWithoutUnpackSubimage(GLContext* gl,
// isn't supported. We make a copy of the texture data we're using,
// such that we're using the whole row of data in the copy. This turns
// out to be more efficient than uploading row-by-row; see bug 698197.
- unsigned char* newPixels = new (fallible) unsigned char[width*height*pixelsize];
+
+ // Width and height are never more than 16384. At 16Ki*16Ki, 4Bpp is 1GiB, but
+ // if we allow 8Bpp (16-bit channels, or higher) here, that's 2GiB+, which would
+ // overflow on 32-bit.
+ MOZ_ASSERT(width <= 16384);
+ MOZ_ASSERT(height <= 16384);
+ MOZ_ASSERT(pixelsize < 8);
+
+ const auto size = CheckedInt<size_t>(width) * height * pixelsize;
+ if (!size.isValid()) {
+ // This should never happen, but we use a defensive check.
+ MOZ_ASSERT_UNREACHABLE("Unacceptable size calculated.!");
+ return;
+ }
+
+ unsigned char* newPixels = new (fallible) unsigned char[size.value()];
if (newPixels) {
unsigned char* rowDest = newPixels;
@@ -286,7 +301,22 @@ TexImage2DHelper(GLContext* gl,
GLsizei paddedWidth = RoundUpPow2((uint32_t)width);
GLsizei paddedHeight = RoundUpPow2((uint32_t)height);
- GLvoid* paddedPixels = new unsigned char[paddedWidth * paddedHeight * pixelsize];
+ // Width and height are never more than 16384. At 16Ki*16Ki, 4Bpp
+ // is 1GiB, but if we allow 8Bpp (or higher) here, that's 2GiB,
+ // which would overflow on 32-bit.
+ MOZ_ASSERT(width <= 16384);
+ MOZ_ASSERT(height <= 16384);
+ MOZ_ASSERT(pixelsize < 8);
+
+ const auto size =
+ CheckedInt<size_t>(paddedWidth) * paddedHeight * pixelsize;
+ if (!size.isValid()) {
+ // This should never happen, but we use a defensive check.
+ MOZ_ASSERT_UNREACHABLE("Unacceptable size calculated.!");
+ return;
+ }
+
+ GLvoid* paddedPixels = new unsigned char[size.value()];
// Pad out texture data to be in a POT sized buffer for uploading to
// a POT sized texture
@@ -465,13 +495,17 @@ UploadImageDataToTexture(GLContext* gl,
surfaceFormat = SurfaceFormat::A8;
break;
default:
- NS_ASSERTION(false, "Unhandled image surface format!");
+ MOZ_ASSERT_UNREACHABLE("Unhandled image surface format!");
}
if (aOutUploadSize) {
*aOutUploadSize = 0;
}
+ if (surfaceFormat == gfx::SurfaceFormat::UNKNOWN) {
+ return gfx::SurfaceFormat::UNKNOWN;
+ }
+
if (aNeedInit || !CanUploadSubTextures(gl)) {
// If the texture needs initialized, or we are unable to
// upload sub textures, then initialize and upload the entire
diff --git a/gfx/thebes/gfxMatrix.h b/gfx/thebes/gfxMatrix.h
index 9282a22db..4f92262cc 100644
--- a/gfx/thebes/gfxMatrix.h
+++ b/gfx/thebes/gfxMatrix.h
@@ -112,6 +112,18 @@ public:
_31 == 0.0 && _32 == 0.0;
}
+ /* Returns true if the matrix is a rectilinear transformation (i.e.
+ * grid-aligned rectangles are transformed to grid-aligned rectangles)
+ */
+ bool IsRectilinear() const {
+ if (FuzzyEqual(_12, 0) && FuzzyEqual(_21, 0)) {
+ return true;
+ } else if (FuzzyEqual(_22, 0) && FuzzyEqual(_11, 0)) {
+ return true;
+ }
+ return false;
+ }
+
/**
* Inverts this matrix, if possible. Otherwise, the matrix is left
* unchanged.
diff --git a/image/imgLoader.cpp b/image/imgLoader.cpp
index f7fb657bd..996ca01cf 100644
--- a/image/imgLoader.cpp
+++ b/image/imgLoader.cpp
@@ -1684,6 +1684,7 @@ imgLoader::ValidateRequestWithNewChannel(imgRequest* request,
rv = newChannel->AsyncOpen2(listener);
if (NS_WARN_IF(NS_FAILED(rv))) {
+ req->CancelAndForgetObserver(rv);
return false;
}
diff --git a/intl/icu/GIT-INFO b/intl/icu/GIT-INFO
new file mode 100644
index 000000000..b87d821c4
--- /dev/null
+++ b/intl/icu/GIT-INFO
@@ -0,0 +1,5 @@
+commit 9248183bc6ab67503d03d4a6b4c842e77e3fd1b8
+Author: yumaoka <y.umaoka@gmail.com>
+Date: Wed Apr 10 00:49:25 2019 -0400
+
+ ICU-20536 ICU 58.3 release tasks
diff --git a/intl/icu/SVN-INFO b/intl/icu/SVN-INFO
deleted file mode 100644
index 351b6f4b1..000000000
--- a/intl/icu/SVN-INFO
+++ /dev/null
@@ -1,10 +0,0 @@
-Path: icu4c
-URL: https://ssl.icu-project.org/repos/icu/tags/release-58-2/icu4c
-Relative URL: ^/tags/release-58-2/icu4c
-Repository Root: https://ssl.icu-project.org/repos/icu
-Repository UUID: 251d0590-4201-4cf1-90de-194747b24ca1
-Node Kind: directory
-Last Changed Author: yoshito
-Last Changed Rev: 39531
-Last Changed Date: 2016-12-08 17:34:49 +0000 (Thu, 08 Dec 2016)
-
diff --git a/intl/icu/source/common/common.vcxproj b/intl/icu/source/common/common.vcxproj
index e6c9acffb..cc58ae931 100644
--- a/intl/icu/source/common/common.vcxproj
+++ b/intl/icu/source/common/common.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/common/common.vcxproj.filters b/intl/icu/source/common/common.vcxproj.filters
index 56e8c12f0..7cf6574bd 100644
--- a/intl/icu/source/common/common.vcxproj.filters
+++ b/intl/icu/source/common/common.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="bidi">
diff --git a/intl/icu/source/common/umutex.h b/intl/icu/source/common/umutex.h
index f13da130c..b52010f8a 100644
--- a/intl/icu/source/common/umutex.h
+++ b/intl/icu/source/common/umutex.h
@@ -86,9 +86,7 @@ U_NAMESPACE_END
// Original plan was to use gcc atomics for MinGW, but they
// aren't supported, so we fold MinGW into this path.
-# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
-# endif
# define VC_EXTRALEAN
# define NOUSER
# define NOSERVICE
@@ -333,9 +331,7 @@ U_NAMESPACE_END
* win32 APIs for Critical Sections.
*/
-# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
-# endif
# define VC_EXTRALEAN
# define NOUSER
# define NOSERVICE
diff --git a/intl/icu/source/common/unicode/uvernum.h b/intl/icu/source/common/unicode/uvernum.h
index 5590f9a5c..b502d444e 100644
--- a/intl/icu/source/common/unicode/uvernum.h
+++ b/intl/icu/source/common/unicode/uvernum.h
@@ -64,7 +64,7 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.6
*/
-#define U_ICU_VERSION_MINOR_NUM 2
+#define U_ICU_VERSION_MINOR_NUM 3
/** The current ICU patchlevel version as an integer.
* This value will change in the subsequent releases of ICU
@@ -119,7 +119,7 @@
* This value will change in the subsequent releases of ICU
* @stable ICU 2.4
*/
-#define U_ICU_VERSION "58.2"
+#define U_ICU_VERSION "58.3"
/** The current ICU library major/minor version as a string without dots, for library name suffixes.
* This value will change in the subsequent releases of ICU
@@ -131,7 +131,7 @@
/** Data version in ICU4C.
* @internal ICU 4.4 Internal Use Only
**/
-#define U_ICU_DATA_VERSION "58.2"
+#define U_ICU_DATA_VERSION "58.3"
#endif /* U_HIDE_INTERNAL_API */
/*===========================================================================
diff --git a/intl/icu/source/common/wintz.c b/intl/icu/source/common/wintz.c
index a8696af39..14fc47604 100644
--- a/intl/icu/source/common/wintz.c
+++ b/intl/icu/source/common/wintz.c
@@ -216,6 +216,8 @@ static LONG getTZKeyName(char* tzKeyName, int32_t length) {
&cbData);
}
+ RegCloseKey(hkey);
+
return result;
}
diff --git a/intl/icu/source/data/coll/af.txt b/intl/icu/source/data/coll/af.txt
index afb236ca8..02c2bb204 100644
--- a/intl/icu/source/data/coll/af.txt
+++ b/intl/icu/source/data/coll/af.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
af{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/am.txt b/intl/icu/source/data/coll/am.txt
index 927cb6bfa..dc25254b1 100644
--- a/intl/icu/source/data/coll/am.txt
+++ b/intl/icu/source/data/coll/am.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
am{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ar.txt b/intl/icu/source/data/coll/ar.txt
index b5bf28505..f5dc3d038 100644
--- a/intl/icu/source/data/coll/ar.txt
+++ b/intl/icu/source/data/coll/ar.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/as.txt b/intl/icu/source/data/coll/as.txt
index b05cb7963..d1d22f94a 100644
--- a/intl/icu/source/data/coll/as.txt
+++ b/intl/icu/source/data/coll/as.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
as{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/az.txt b/intl/icu/source/data/coll/az.txt
index 2c5836c15..34fea2adc 100644
--- a/intl/icu/source/data/coll/az.txt
+++ b/intl/icu/source/data/coll/az.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/be.txt b/intl/icu/source/data/coll/be.txt
index a56045a0b..1854f65ad 100644
--- a/intl/icu/source/data/coll/be.txt
+++ b/intl/icu/source/data/coll/be.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
be{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/bg.txt b/intl/icu/source/data/coll/bg.txt
index f13d5b9af..b4ce436f3 100644
--- a/intl/icu/source/data/coll/bg.txt
+++ b/intl/icu/source/data/coll/bg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bg{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/bn.txt b/intl/icu/source/data/coll/bn.txt
index ccfe74655..1cd5a5336 100644
--- a/intl/icu/source/data/coll/bn.txt
+++ b/intl/icu/source/data/coll/bn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bn{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/bo.txt b/intl/icu/source/data/coll/bo.txt
index eb4c910fb..d78a52f8c 100644
--- a/intl/icu/source/data/coll/bo.txt
+++ b/intl/icu/source/data/coll/bo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bo{
Version{"2.1.23.47"}
diff --git a/intl/icu/source/data/coll/bs.txt b/intl/icu/source/data/coll/bs.txt
index 033b5e30f..e234ad2d4 100644
--- a/intl/icu/source/data/coll/bs.txt
+++ b/intl/icu/source/data/coll/bs.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/bs_Cyrl.txt b/intl/icu/source/data/coll/bs_Cyrl.txt
index 435a726db..4d5289c84 100644
--- a/intl/icu/source/data/coll/bs_Cyrl.txt
+++ b/intl/icu/source/data/coll/bs_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Cyrl{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ca.txt b/intl/icu/source/data/coll/ca.txt
index a57f4a399..14c57f071 100644
--- a/intl/icu/source/data/coll/ca.txt
+++ b/intl/icu/source/data/coll/ca.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/chr.txt b/intl/icu/source/data/coll/chr.txt
index db5ef4418..6a98b3df4 100644
--- a/intl/icu/source/data/coll/chr.txt
+++ b/intl/icu/source/data/coll/chr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
chr{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/cs.txt b/intl/icu/source/data/coll/cs.txt
index c2d7530cb..4f4c62b5a 100644
--- a/intl/icu/source/data/coll/cs.txt
+++ b/intl/icu/source/data/coll/cs.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cs{
Version{"2.1.28.26"}
diff --git a/intl/icu/source/data/coll/cy.txt b/intl/icu/source/data/coll/cy.txt
index 4728e5c40..7ee91974d 100644
--- a/intl/icu/source/data/coll/cy.txt
+++ b/intl/icu/source/data/coll/cy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cy{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/da.txt b/intl/icu/source/data/coll/da.txt
index 9676c2f65..2b749f863 100644
--- a/intl/icu/source/data/coll/da.txt
+++ b/intl/icu/source/data/coll/da.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
da{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/de.txt b/intl/icu/source/data/coll/de.txt
index efd51f8bc..2602b105f 100644
--- a/intl/icu/source/data/coll/de.txt
+++ b/intl/icu/source/data/coll/de.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/de_.txt b/intl/icu/source/data/coll/de_.txt
index 8d0a434bf..32f04c9ac 100644
--- a/intl/icu/source/data/coll/de_.txt
+++ b/intl/icu/source/data/coll/de_.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/de_AT.txt b/intl/icu/source/data/coll/de_AT.txt
index 6ccabaf8b..5b70e6e10 100644
--- a/intl/icu/source/data/coll/de_AT.txt
+++ b/intl/icu/source/data/coll/de_AT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_AT{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/de__PHONEBOOK.txt b/intl/icu/source/data/coll/de__PHONEBOOK.txt
index 00fdc33b9..245917c77 100644
--- a/intl/icu/source/data/coll/de__PHONEBOOK.txt
+++ b/intl/icu/source/data/coll/de__PHONEBOOK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de__PHONEBOOK{
collations{
diff --git a/intl/icu/source/data/coll/dsb.txt b/intl/icu/source/data/coll/dsb.txt
index 512d48840..b076070e3 100644
--- a/intl/icu/source/data/coll/dsb.txt
+++ b/intl/icu/source/data/coll/dsb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dsb{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/dz.txt b/intl/icu/source/data/coll/dz.txt
index 901637ae7..71b92c422 100644
--- a/intl/icu/source/data/coll/dz.txt
+++ b/intl/icu/source/data/coll/dz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dz{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ee.txt b/intl/icu/source/data/coll/ee.txt
index 4e935bb7b..397bf4c87 100644
--- a/intl/icu/source/data/coll/ee.txt
+++ b/intl/icu/source/data/coll/ee.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ee{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/el.txt b/intl/icu/source/data/coll/el.txt
index 2667740ec..e4ea09c3f 100644
--- a/intl/icu/source/data/coll/el.txt
+++ b/intl/icu/source/data/coll/el.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
el{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/en.txt b/intl/icu/source/data/coll/en.txt
index ce9598f6f..3dd6b5868 100644
--- a/intl/icu/source/data/coll/en.txt
+++ b/intl/icu/source/data/coll/en.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/en_US.txt b/intl/icu/source/data/coll/en_US.txt
index 26497cc92..fef02f398 100644
--- a/intl/icu/source/data/coll/en_US.txt
+++ b/intl/icu/source/data/coll/en_US.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_US{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/en_US_POSIX.txt b/intl/icu/source/data/coll/en_US_POSIX.txt
index 973344dfb..9808681c1 100644
--- a/intl/icu/source/data/coll/en_US_POSIX.txt
+++ b/intl/icu/source/data/coll/en_US_POSIX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_US_POSIX{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/eo.txt b/intl/icu/source/data/coll/eo.txt
index 73ee7d955..3e12d1296 100644
--- a/intl/icu/source/data/coll/eo.txt
+++ b/intl/icu/source/data/coll/eo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eo{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/es.txt b/intl/icu/source/data/coll/es.txt
index fdbbc7473..896fbe3f8 100644
--- a/intl/icu/source/data/coll/es.txt
+++ b/intl/icu/source/data/coll/es.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/es_.txt b/intl/icu/source/data/coll/es_.txt
index b0de09e45..969eba887 100644
--- a/intl/icu/source/data/coll/es_.txt
+++ b/intl/icu/source/data/coll/es_.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/es__TRADITIONAL.txt b/intl/icu/source/data/coll/es__TRADITIONAL.txt
index 1b2efc350..d0f1ed340 100644
--- a/intl/icu/source/data/coll/es__TRADITIONAL.txt
+++ b/intl/icu/source/data/coll/es__TRADITIONAL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es__TRADITIONAL{
collations{
diff --git a/intl/icu/source/data/coll/et.txt b/intl/icu/source/data/coll/et.txt
index ae81893f2..ea2192094 100644
--- a/intl/icu/source/data/coll/et.txt
+++ b/intl/icu/source/data/coll/et.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
et{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/fa.txt b/intl/icu/source/data/coll/fa.txt
index 3ada162ac..7258429e5 100644
--- a/intl/icu/source/data/coll/fa.txt
+++ b/intl/icu/source/data/coll/fa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fa{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/fa_AF.txt b/intl/icu/source/data/coll/fa_AF.txt
index 2e1b2bd6f..76ff0ac00 100644
--- a/intl/icu/source/data/coll/fa_AF.txt
+++ b/intl/icu/source/data/coll/fa_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fa_AF{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/fi.txt b/intl/icu/source/data/coll/fi.txt
index f359852ff..c3b5fe242 100644
--- a/intl/icu/source/data/coll/fi.txt
+++ b/intl/icu/source/data/coll/fi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fi{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/fil.txt b/intl/icu/source/data/coll/fil.txt
index 6d2acf8d9..aa16705a6 100644
--- a/intl/icu/source/data/coll/fil.txt
+++ b/intl/icu/source/data/coll/fil.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fil{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/fo.txt b/intl/icu/source/data/coll/fo.txt
index a97e9e6bb..837f5a30c 100644
--- a/intl/icu/source/data/coll/fo.txt
+++ b/intl/icu/source/data/coll/fo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fo{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/fr.txt b/intl/icu/source/data/coll/fr.txt
index 9f584f7f9..f35691b27 100644
--- a/intl/icu/source/data/coll/fr.txt
+++ b/intl/icu/source/data/coll/fr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/fr_CA.txt b/intl/icu/source/data/coll/fr_CA.txt
index e768c4ca5..cc2774f5e 100644
--- a/intl/icu/source/data/coll/fr_CA.txt
+++ b/intl/icu/source/data/coll/fr_CA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CA{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ga.txt b/intl/icu/source/data/coll/ga.txt
index 1f83aa53e..fd61f40b1 100644
--- a/intl/icu/source/data/coll/ga.txt
+++ b/intl/icu/source/data/coll/ga.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ga{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/gl.txt b/intl/icu/source/data/coll/gl.txt
index bc8bf8851..9df661f0f 100644
--- a/intl/icu/source/data/coll/gl.txt
+++ b/intl/icu/source/data/coll/gl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gl{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/gu.txt b/intl/icu/source/data/coll/gu.txt
index 28758b787..b4cd51bd0 100644
--- a/intl/icu/source/data/coll/gu.txt
+++ b/intl/icu/source/data/coll/gu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gu{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ha.txt b/intl/icu/source/data/coll/ha.txt
index 6317b97d7..f0fa6c94d 100644
--- a/intl/icu/source/data/coll/ha.txt
+++ b/intl/icu/source/data/coll/ha.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ha{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/haw.txt b/intl/icu/source/data/coll/haw.txt
index 3dc0e2c57..dfa53b079 100644
--- a/intl/icu/source/data/coll/haw.txt
+++ b/intl/icu/source/data/coll/haw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
haw{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/he.txt b/intl/icu/source/data/coll/he.txt
index 0edc65b78..f1a953941 100644
--- a/intl/icu/source/data/coll/he.txt
+++ b/intl/icu/source/data/coll/he.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
he{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/he_IL.txt b/intl/icu/source/data/coll/he_IL.txt
index 71039533a..c4c98fed2 100644
--- a/intl/icu/source/data/coll/he_IL.txt
+++ b/intl/icu/source/data/coll/he_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/hi.txt b/intl/icu/source/data/coll/hi.txt
index 46e9baf90..530537545 100644
--- a/intl/icu/source/data/coll/hi.txt
+++ b/intl/icu/source/data/coll/hi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hi{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/hr.txt b/intl/icu/source/data/coll/hr.txt
index 3e3162b3e..00108bb9c 100644
--- a/intl/icu/source/data/coll/hr.txt
+++ b/intl/icu/source/data/coll/hr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hr{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/hsb.txt b/intl/icu/source/data/coll/hsb.txt
index cf93bb5fe..1ce32f2c5 100644
--- a/intl/icu/source/data/coll/hsb.txt
+++ b/intl/icu/source/data/coll/hsb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hsb{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/hu.txt b/intl/icu/source/data/coll/hu.txt
index abf12b745..2c233f472 100644
--- a/intl/icu/source/data/coll/hu.txt
+++ b/intl/icu/source/data/coll/hu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hu{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/hy.txt b/intl/icu/source/data/coll/hy.txt
index 827db508b..d98346cd7 100644
--- a/intl/icu/source/data/coll/hy.txt
+++ b/intl/icu/source/data/coll/hy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hy{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/id.txt b/intl/icu/source/data/coll/id.txt
index 543115686..f1177acdb 100644
--- a/intl/icu/source/data/coll/id.txt
+++ b/intl/icu/source/data/coll/id.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
id{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/id_ID.txt b/intl/icu/source/data/coll/id_ID.txt
index 20daa236e..e7af68c1b 100644
--- a/intl/icu/source/data/coll/id_ID.txt
+++ b/intl/icu/source/data/coll/id_ID.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/ig.txt b/intl/icu/source/data/coll/ig.txt
index 373b41199..32be604b6 100644
--- a/intl/icu/source/data/coll/ig.txt
+++ b/intl/icu/source/data/coll/ig.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ig{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/in.txt b/intl/icu/source/data/coll/in.txt
index 02335238a..05ecf2873 100644
--- a/intl/icu/source/data/coll/in.txt
+++ b/intl/icu/source/data/coll/in.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
in{
"%%ALIAS"{"id"}
diff --git a/intl/icu/source/data/coll/in_ID.txt b/intl/icu/source/data/coll/in_ID.txt
index acec72c6e..9f9ef5ff1 100644
--- a/intl/icu/source/data/coll/in_ID.txt
+++ b/intl/icu/source/data/coll/in_ID.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
in_ID{
"%%ALIAS"{"id_ID"}
diff --git a/intl/icu/source/data/coll/is.txt b/intl/icu/source/data/coll/is.txt
index c1b3c6e46..b2c44e314 100644
--- a/intl/icu/source/data/coll/is.txt
+++ b/intl/icu/source/data/coll/is.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
is{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/it.txt b/intl/icu/source/data/coll/it.txt
index 564cde17b..75f1f91e5 100644
--- a/intl/icu/source/data/coll/it.txt
+++ b/intl/icu/source/data/coll/it.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
it{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/iw.txt b/intl/icu/source/data/coll/iw.txt
index d59865d1c..8d9fabbe3 100644
--- a/intl/icu/source/data/coll/iw.txt
+++ b/intl/icu/source/data/coll/iw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
iw{
"%%ALIAS"{"he"}
diff --git a/intl/icu/source/data/coll/iw_IL.txt b/intl/icu/source/data/coll/iw_IL.txt
index cf1666a68..3976d06e2 100644
--- a/intl/icu/source/data/coll/iw_IL.txt
+++ b/intl/icu/source/data/coll/iw_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
iw_IL{
"%%ALIAS"{"he_IL"}
diff --git a/intl/icu/source/data/coll/ja.txt b/intl/icu/source/data/coll/ja.txt
index 5cdd79394..e144aa468 100644
--- a/intl/icu/source/data/coll/ja.txt
+++ b/intl/icu/source/data/coll/ja.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ja{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ka.txt b/intl/icu/source/data/coll/ka.txt
index 84835ddda..3183fea27 100644
--- a/intl/icu/source/data/coll/ka.txt
+++ b/intl/icu/source/data/coll/ka.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ka{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/kk.txt b/intl/icu/source/data/coll/kk.txt
index 339ae8160..c3249e79f 100644
--- a/intl/icu/source/data/coll/kk.txt
+++ b/intl/icu/source/data/coll/kk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kk{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/kl.txt b/intl/icu/source/data/coll/kl.txt
index dcedd2c93..91a320390 100644
--- a/intl/icu/source/data/coll/kl.txt
+++ b/intl/icu/source/data/coll/kl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kl{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/km.txt b/intl/icu/source/data/coll/km.txt
index 5f014d793..f7e1fbcf7 100644
--- a/intl/icu/source/data/coll/km.txt
+++ b/intl/icu/source/data/coll/km.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
km{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/kn.txt b/intl/icu/source/data/coll/kn.txt
index 3fe11ba5b..8e19cbbb6 100644
--- a/intl/icu/source/data/coll/kn.txt
+++ b/intl/icu/source/data/coll/kn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kn{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ko.txt b/intl/icu/source/data/coll/ko.txt
index 9864d5ca7..eb702e82e 100644
--- a/intl/icu/source/data/coll/ko.txt
+++ b/intl/icu/source/data/coll/ko.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ko{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/kok.txt b/intl/icu/source/data/coll/kok.txt
index b6b0d6058..f13cdc3ab 100644
--- a/intl/icu/source/data/coll/kok.txt
+++ b/intl/icu/source/data/coll/kok.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kok{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ky.txt b/intl/icu/source/data/coll/ky.txt
index b41701104..748f2c241 100644
--- a/intl/icu/source/data/coll/ky.txt
+++ b/intl/icu/source/data/coll/ky.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ky{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/lb.txt b/intl/icu/source/data/coll/lb.txt
index b5e95bb11..6b2be36f4 100644
--- a/intl/icu/source/data/coll/lb.txt
+++ b/intl/icu/source/data/coll/lb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lb{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/lkt.txt b/intl/icu/source/data/coll/lkt.txt
index 5686506d4..31433c92f 100644
--- a/intl/icu/source/data/coll/lkt.txt
+++ b/intl/icu/source/data/coll/lkt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lkt{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ln.txt b/intl/icu/source/data/coll/ln.txt
index 2f61ffa38..40752d5db 100644
--- a/intl/icu/source/data/coll/ln.txt
+++ b/intl/icu/source/data/coll/ln.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/lo.txt b/intl/icu/source/data/coll/lo.txt
index 7a2f385d6..b7679ec87 100644
--- a/intl/icu/source/data/coll/lo.txt
+++ b/intl/icu/source/data/coll/lo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lo{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/lt.txt b/intl/icu/source/data/coll/lt.txt
index dbf792993..6c798ccd4 100644
--- a/intl/icu/source/data/coll/lt.txt
+++ b/intl/icu/source/data/coll/lt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lt{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/lv.txt b/intl/icu/source/data/coll/lv.txt
index b8455c672..8014cbc77 100644
--- a/intl/icu/source/data/coll/lv.txt
+++ b/intl/icu/source/data/coll/lv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lv{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/mk.txt b/intl/icu/source/data/coll/mk.txt
index c9e7811c1..02843e681 100644
--- a/intl/icu/source/data/coll/mk.txt
+++ b/intl/icu/source/data/coll/mk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mk{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ml.txt b/intl/icu/source/data/coll/ml.txt
index 40903892e..449bcac73 100644
--- a/intl/icu/source/data/coll/ml.txt
+++ b/intl/icu/source/data/coll/ml.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ml{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/mn.txt b/intl/icu/source/data/coll/mn.txt
index 34dda4b9a..a0fe437de 100644
--- a/intl/icu/source/data/coll/mn.txt
+++ b/intl/icu/source/data/coll/mn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mn{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/mo.txt b/intl/icu/source/data/coll/mo.txt
index 64025913d..a698deb33 100644
--- a/intl/icu/source/data/coll/mo.txt
+++ b/intl/icu/source/data/coll/mo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mo{
"%%ALIAS"{"ro_MD"}
diff --git a/intl/icu/source/data/coll/mr.txt b/intl/icu/source/data/coll/mr.txt
index f503aff34..88ec6621d 100644
--- a/intl/icu/source/data/coll/mr.txt
+++ b/intl/icu/source/data/coll/mr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mr{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ms.txt b/intl/icu/source/data/coll/ms.txt
index fcfc87061..1989c7894 100644
--- a/intl/icu/source/data/coll/ms.txt
+++ b/intl/icu/source/data/coll/ms.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/mt.txt b/intl/icu/source/data/coll/mt.txt
index e3f3df3e0..36da89dec 100644
--- a/intl/icu/source/data/coll/mt.txt
+++ b/intl/icu/source/data/coll/mt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mt{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/my.txt b/intl/icu/source/data/coll/my.txt
index 21268ddab..fdef3a54a 100644
--- a/intl/icu/source/data/coll/my.txt
+++ b/intl/icu/source/data/coll/my.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
my{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/nb.txt b/intl/icu/source/data/coll/nb.txt
index 44f04f341..04f6d8249 100644
--- a/intl/icu/source/data/coll/nb.txt
+++ b/intl/icu/source/data/coll/nb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nb{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/nb_NO.txt b/intl/icu/source/data/coll/nb_NO.txt
index fdac28bf6..dcfaf4a4e 100644
--- a/intl/icu/source/data/coll/nb_NO.txt
+++ b/intl/icu/source/data/coll/nb_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/ne.txt b/intl/icu/source/data/coll/ne.txt
index ff88b67c7..5541b2ad5 100644
--- a/intl/icu/source/data/coll/ne.txt
+++ b/intl/icu/source/data/coll/ne.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ne{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/nl.txt b/intl/icu/source/data/coll/nl.txt
index 1e15331f1..7c505454e 100644
--- a/intl/icu/source/data/coll/nl.txt
+++ b/intl/icu/source/data/coll/nl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/nn.txt b/intl/icu/source/data/coll/nn.txt
index 4225b3687..a874339ad 100644
--- a/intl/icu/source/data/coll/nn.txt
+++ b/intl/icu/source/data/coll/nn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nn{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/no.txt b/intl/icu/source/data/coll/no.txt
index 097a923cd..8b021f546 100644
--- a/intl/icu/source/data/coll/no.txt
+++ b/intl/icu/source/data/coll/no.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no{
"%%ALIAS"{"nb"}
diff --git a/intl/icu/source/data/coll/no_NO.txt b/intl/icu/source/data/coll/no_NO.txt
index 188a8a4a6..b3403f663 100644
--- a/intl/icu/source/data/coll/no_NO.txt
+++ b/intl/icu/source/data/coll/no_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no_NO{
"%%ALIAS"{"nb_NO"}
diff --git a/intl/icu/source/data/coll/om.txt b/intl/icu/source/data/coll/om.txt
index e3dd53f98..be1d60129 100644
--- a/intl/icu/source/data/coll/om.txt
+++ b/intl/icu/source/data/coll/om.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
om{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/or.txt b/intl/icu/source/data/coll/or.txt
index 0c1acb510..8515c6166 100644
--- a/intl/icu/source/data/coll/or.txt
+++ b/intl/icu/source/data/coll/or.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
or{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/pa.txt b/intl/icu/source/data/coll/pa.txt
index e67c813dd..bafc4872a 100644
--- a/intl/icu/source/data/coll/pa.txt
+++ b/intl/icu/source/data/coll/pa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/pa_Guru.txt b/intl/icu/source/data/coll/pa_Guru.txt
index 0e3345c29..f17a23e6b 100644
--- a/intl/icu/source/data/coll/pa_Guru.txt
+++ b/intl/icu/source/data/coll/pa_Guru.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/pa_Guru_IN.txt b/intl/icu/source/data/coll/pa_Guru_IN.txt
index adeae3fec..9c26f66bd 100644
--- a/intl/icu/source/data/coll/pa_Guru_IN.txt
+++ b/intl/icu/source/data/coll/pa_Guru_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/pa_IN.txt b/intl/icu/source/data/coll/pa_IN.txt
index b18bba68d..0c4702dd8 100644
--- a/intl/icu/source/data/coll/pa_IN.txt
+++ b/intl/icu/source/data/coll/pa_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_IN{
"%%ALIAS"{"pa_Guru_IN"}
diff --git a/intl/icu/source/data/coll/pl.txt b/intl/icu/source/data/coll/pl.txt
index a70596ec6..b4de712ab 100644
--- a/intl/icu/source/data/coll/pl.txt
+++ b/intl/icu/source/data/coll/pl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pl{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ps.txt b/intl/icu/source/data/coll/ps.txt
index 200fc6969..eeccdf09d 100644
--- a/intl/icu/source/data/coll/ps.txt
+++ b/intl/icu/source/data/coll/ps.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ps{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/pt.txt b/intl/icu/source/data/coll/pt.txt
index a7f6dc95e..09e4a5119 100644
--- a/intl/icu/source/data/coll/pt.txt
+++ b/intl/icu/source/data/coll/pt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ro.txt b/intl/icu/source/data/coll/ro.txt
index eee619fbe..8c6ba0dfc 100644
--- a/intl/icu/source/data/coll/ro.txt
+++ b/intl/icu/source/data/coll/ro.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ro{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ro_MD.txt b/intl/icu/source/data/coll/ro_MD.txt
index 44f810a5e..f6d40f575 100644
--- a/intl/icu/source/data/coll/ro_MD.txt
+++ b/intl/icu/source/data/coll/ro_MD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/root.txt b/intl/icu/source/data/coll/root.txt
index f0640e528..76531bf68 100644
--- a/intl/icu/source/data/coll/root.txt
+++ b/intl/icu/source/data/coll/root.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* ICU <specials> source: <path>/xml/collation/root.xml
diff --git a/intl/icu/source/data/coll/ru.txt b/intl/icu/source/data/coll/ru.txt
index e0e7ff64f..853cab9f4 100644
--- a/intl/icu/source/data/coll/ru.txt
+++ b/intl/icu/source/data/coll/ru.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/se.txt b/intl/icu/source/data/coll/se.txt
index ed0d48e48..fbf4255b2 100644
--- a/intl/icu/source/data/coll/se.txt
+++ b/intl/icu/source/data/coll/se.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
se{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/sh.txt b/intl/icu/source/data/coll/sh.txt
index 74b646a22..24ed34953 100644
--- a/intl/icu/source/data/coll/sh.txt
+++ b/intl/icu/source/data/coll/sh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh{
"%%ALIAS"{"sr_Latn"}
diff --git a/intl/icu/source/data/coll/sh_BA.txt b/intl/icu/source/data/coll/sh_BA.txt
index 93bdac63f..9cb7b42e9 100644
--- a/intl/icu/source/data/coll/sh_BA.txt
+++ b/intl/icu/source/data/coll/sh_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_BA{
"%%ALIAS"{"sr_Latn_BA"}
diff --git a/intl/icu/source/data/coll/sh_CS.txt b/intl/icu/source/data/coll/sh_CS.txt
index 224568a08..d9f1cba21 100644
--- a/intl/icu/source/data/coll/sh_CS.txt
+++ b/intl/icu/source/data/coll/sh_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_CS{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/coll/sh_YU.txt b/intl/icu/source/data/coll/sh_YU.txt
index 8a7d46098..d36ba555d 100644
--- a/intl/icu/source/data/coll/sh_YU.txt
+++ b/intl/icu/source/data/coll/sh_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_YU{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/coll/si.txt b/intl/icu/source/data/coll/si.txt
index f118391af..33d900bee 100644
--- a/intl/icu/source/data/coll/si.txt
+++ b/intl/icu/source/data/coll/si.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
si{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/sk.txt b/intl/icu/source/data/coll/sk.txt
index 81c5facf5..8d679d63b 100644
--- a/intl/icu/source/data/coll/sk.txt
+++ b/intl/icu/source/data/coll/sk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sk{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/sl.txt b/intl/icu/source/data/coll/sl.txt
index 2a7891165..a3b8587d5 100644
--- a/intl/icu/source/data/coll/sl.txt
+++ b/intl/icu/source/data/coll/sl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sl{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/smn.txt b/intl/icu/source/data/coll/smn.txt
index 2f7c4b391..379b2a3dd 100644
--- a/intl/icu/source/data/coll/smn.txt
+++ b/intl/icu/source/data/coll/smn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
smn{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/sq.txt b/intl/icu/source/data/coll/sq.txt
index b5f010e00..493efa515 100644
--- a/intl/icu/source/data/coll/sq.txt
+++ b/intl/icu/source/data/coll/sq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sq{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/sr.txt b/intl/icu/source/data/coll/sr.txt
index c77ffa67c..c981e880d 100644
--- a/intl/icu/source/data/coll/sr.txt
+++ b/intl/icu/source/data/coll/sr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/sr_BA.txt b/intl/icu/source/data/coll/sr_BA.txt
index edad17f70..97eb38298 100644
--- a/intl/icu/source/data/coll/sr_BA.txt
+++ b/intl/icu/source/data/coll/sr_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_BA{
"%%ALIAS"{"sr_Cyrl_BA"}
diff --git a/intl/icu/source/data/coll/sr_Cyrl.txt b/intl/icu/source/data/coll/sr_Cyrl.txt
index a1e21f144..a25364ef6 100644
--- a/intl/icu/source/data/coll/sr_Cyrl.txt
+++ b/intl/icu/source/data/coll/sr_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/sr_Cyrl_BA.txt b/intl/icu/source/data/coll/sr_Cyrl_BA.txt
index 51e1655a5..9629942a2 100644
--- a/intl/icu/source/data/coll/sr_Cyrl_BA.txt
+++ b/intl/icu/source/data/coll/sr_Cyrl_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/sr_Cyrl_ME.txt b/intl/icu/source/data/coll/sr_Cyrl_ME.txt
index 0a303140b..27b3f48ca 100644
--- a/intl/icu/source/data/coll/sr_Cyrl_ME.txt
+++ b/intl/icu/source/data/coll/sr_Cyrl_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/sr_Cyrl_RS.txt b/intl/icu/source/data/coll/sr_Cyrl_RS.txt
index 7ef8fabce..fec1168e2 100644
--- a/intl/icu/source/data/coll/sr_Cyrl_RS.txt
+++ b/intl/icu/source/data/coll/sr_Cyrl_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/sr_Latn.txt b/intl/icu/source/data/coll/sr_Latn.txt
index b8afc4a8c..116c68624 100644
--- a/intl/icu/source/data/coll/sr_Latn.txt
+++ b/intl/icu/source/data/coll/sr_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/sr_Latn_BA.txt b/intl/icu/source/data/coll/sr_Latn_BA.txt
index f4b62ac33..a893d10a5 100644
--- a/intl/icu/source/data/coll/sr_Latn_BA.txt
+++ b/intl/icu/source/data/coll/sr_Latn_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/sr_Latn_RS.txt b/intl/icu/source/data/coll/sr_Latn_RS.txt
index 76d38f8b7..104aa2f83 100644
--- a/intl/icu/source/data/coll/sr_Latn_RS.txt
+++ b/intl/icu/source/data/coll/sr_Latn_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/sr_ME.txt b/intl/icu/source/data/coll/sr_ME.txt
index 54cc1af1b..82cb6e681 100644
--- a/intl/icu/source/data/coll/sr_ME.txt
+++ b/intl/icu/source/data/coll/sr_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_ME{
"%%ALIAS"{"sr_Cyrl_ME"}
diff --git a/intl/icu/source/data/coll/sr_RS.txt b/intl/icu/source/data/coll/sr_RS.txt
index 674ff7755..bd699280f 100644
--- a/intl/icu/source/data/coll/sr_RS.txt
+++ b/intl/icu/source/data/coll/sr_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_RS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/coll/sv.txt b/intl/icu/source/data/coll/sv.txt
index fe8fbc203..74ae89eaa 100644
--- a/intl/icu/source/data/coll/sv.txt
+++ b/intl/icu/source/data/coll/sv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sv{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/sw.txt b/intl/icu/source/data/coll/sw.txt
index dfe6fb42a..49e950105 100644
--- a/intl/icu/source/data/coll/sw.txt
+++ b/intl/icu/source/data/coll/sw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ta.txt b/intl/icu/source/data/coll/ta.txt
index d98d405ae..f142d12e4 100644
--- a/intl/icu/source/data/coll/ta.txt
+++ b/intl/icu/source/data/coll/ta.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/te.txt b/intl/icu/source/data/coll/te.txt
index 0690e71b9..9b140bfe6 100644
--- a/intl/icu/source/data/coll/te.txt
+++ b/intl/icu/source/data/coll/te.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
te{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/th.txt b/intl/icu/source/data/coll/th.txt
index e9a5dbc3b..57addf146 100644
--- a/intl/icu/source/data/coll/th.txt
+++ b/intl/icu/source/data/coll/th.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
th{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/to.txt b/intl/icu/source/data/coll/to.txt
index 8835fb0e0..35ba307d2 100644
--- a/intl/icu/source/data/coll/to.txt
+++ b/intl/icu/source/data/coll/to.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
to{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/tr.txt b/intl/icu/source/data/coll/tr.txt
index 44cd3b53e..3fc2e9068 100644
--- a/intl/icu/source/data/coll/tr.txt
+++ b/intl/icu/source/data/coll/tr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tr{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ug.txt b/intl/icu/source/data/coll/ug.txt
index 82f46f350..8ed58e593 100644
--- a/intl/icu/source/data/coll/ug.txt
+++ b/intl/icu/source/data/coll/ug.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ug{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/uk.txt b/intl/icu/source/data/coll/uk.txt
index ef4b1bbb3..37159e248 100644
--- a/intl/icu/source/data/coll/uk.txt
+++ b/intl/icu/source/data/coll/uk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uk{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/ur.txt b/intl/icu/source/data/coll/ur.txt
index 709daca84..dc1fc0b1f 100644
--- a/intl/icu/source/data/coll/ur.txt
+++ b/intl/icu/source/data/coll/ur.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ur{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/uz.txt b/intl/icu/source/data/coll/uz.txt
index 8e8ec5b2e..50b7f856d 100644
--- a/intl/icu/source/data/coll/uz.txt
+++ b/intl/icu/source/data/coll/uz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz{
Version{"2.1.28.58"}
diff --git a/intl/icu/source/data/coll/vi.txt b/intl/icu/source/data/coll/vi.txt
index f291b5edb..1d10f48a2 100644
--- a/intl/icu/source/data/coll/vi.txt
+++ b/intl/icu/source/data/coll/vi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vi{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/wae.txt b/intl/icu/source/data/coll/wae.txt
index 3ed19ff53..f8a842d92 100644
--- a/intl/icu/source/data/coll/wae.txt
+++ b/intl/icu/source/data/coll/wae.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
wae{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/yi.txt b/intl/icu/source/data/coll/yi.txt
index c2f44b20b..e31fdeb8e 100644
--- a/intl/icu/source/data/coll/yi.txt
+++ b/intl/icu/source/data/coll/yi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yi{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/yo.txt b/intl/icu/source/data/coll/yo.txt
index dab2e516a..fc5e23735 100644
--- a/intl/icu/source/data/coll/yo.txt
+++ b/intl/icu/source/data/coll/yo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yo{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/zh.txt b/intl/icu/source/data/coll/zh.txt
index 2f3ad5395..0f25283ff 100644
--- a/intl/icu/source/data/coll/zh.txt
+++ b/intl/icu/source/data/coll/zh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh{
Version{"2.1.29.30"}
diff --git a/intl/icu/source/data/coll/zh_CN.txt b/intl/icu/source/data/coll/zh_CN.txt
index c9151613a..46ee1b6c9 100644
--- a/intl/icu/source/data/coll/zh_CN.txt
+++ b/intl/icu/source/data/coll/zh_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_CN{
"%%ALIAS"{"zh_Hans_CN"}
diff --git a/intl/icu/source/data/coll/zh_HK.txt b/intl/icu/source/data/coll/zh_HK.txt
index fe72a0ea4..5e36e52e0 100644
--- a/intl/icu/source/data/coll/zh_HK.txt
+++ b/intl/icu/source/data/coll/zh_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_HK{
"%%ALIAS"{"zh_Hant_HK"}
diff --git a/intl/icu/source/data/coll/zh_Hans.txt b/intl/icu/source/data/coll/zh_Hans.txt
index 6d5820b32..dd4cb6cea 100644
--- a/intl/icu/source/data/coll/zh_Hans.txt
+++ b/intl/icu/source/data/coll/zh_Hans.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/zh_Hans_CN.txt b/intl/icu/source/data/coll/zh_Hans_CN.txt
index 70a6a77b3..841acc687 100644
--- a/intl/icu/source/data/coll/zh_Hans_CN.txt
+++ b/intl/icu/source/data/coll/zh_Hans_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/zh_Hans_SG.txt b/intl/icu/source/data/coll/zh_Hans_SG.txt
index 498813bb8..ebbd01a5f 100644
--- a/intl/icu/source/data/coll/zh_Hans_SG.txt
+++ b/intl/icu/source/data/coll/zh_Hans_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/zh_Hant.txt b/intl/icu/source/data/coll/zh_Hant.txt
index 9cc420a44..4da36d873 100644
--- a/intl/icu/source/data/coll/zh_Hant.txt
+++ b/intl/icu/source/data/coll/zh_Hant.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/coll/zh_Hant_HK.txt b/intl/icu/source/data/coll/zh_Hant_HK.txt
index 59f230f02..7b2d4a910 100644
--- a/intl/icu/source/data/coll/zh_Hant_HK.txt
+++ b/intl/icu/source/data/coll/zh_Hant_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/zh_Hant_MO.txt b/intl/icu/source/data/coll/zh_Hant_MO.txt
index 379ea4436..38171822d 100644
--- a/intl/icu/source/data/coll/zh_Hant_MO.txt
+++ b/intl/icu/source/data/coll/zh_Hant_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/zh_Hant_TW.txt b/intl/icu/source/data/coll/zh_Hant_TW.txt
index b62ad6927..908f4881b 100644
--- a/intl/icu/source/data/coll/zh_Hant_TW.txt
+++ b/intl/icu/source/data/coll/zh_Hant_TW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/coll/zh_MO.txt b/intl/icu/source/data/coll/zh_MO.txt
index 6565bf7c3..71455b9cd 100644
--- a/intl/icu/source/data/coll/zh_MO.txt
+++ b/intl/icu/source/data/coll/zh_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_MO{
"%%ALIAS"{"zh_Hant_MO"}
diff --git a/intl/icu/source/data/coll/zh_SG.txt b/intl/icu/source/data/coll/zh_SG.txt
index bf277736b..141f3dc58 100644
--- a/intl/icu/source/data/coll/zh_SG.txt
+++ b/intl/icu/source/data/coll/zh_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_SG{
"%%ALIAS"{"zh_Hans_SG"}
diff --git a/intl/icu/source/data/coll/zh_TW.txt b/intl/icu/source/data/coll/zh_TW.txt
index 9372c5067..ae82eca78 100644
--- a/intl/icu/source/data/coll/zh_TW.txt
+++ b/intl/icu/source/data/coll/zh_TW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_TW{
"%%ALIAS"{"zh_Hant_TW"}
diff --git a/intl/icu/source/data/coll/zu.txt b/intl/icu/source/data/coll/zu.txt
index c8ddf44a0..9221d625a 100644
--- a/intl/icu/source/data/coll/zu.txt
+++ b/intl/icu/source/data/coll/zu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zu{
Version{"2.1.19.14"}
diff --git a/intl/icu/source/data/curr/af.txt b/intl/icu/source/data/curr/af.txt
index bbeeb3c4a..95f21c526 100644
--- a/intl/icu/source/data/curr/af.txt
+++ b/intl/icu/source/data/curr/af.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
af{
Currencies{
diff --git a/intl/icu/source/data/curr/af_NA.txt b/intl/icu/source/data/curr/af_NA.txt
index c7ecf5a69..7c8676349 100644
--- a/intl/icu/source/data/curr/af_NA.txt
+++ b/intl/icu/source/data/curr/af_NA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
af_NA{
Currencies{
diff --git a/intl/icu/source/data/curr/agq.txt b/intl/icu/source/data/curr/agq.txt
index cc133ad6f..1cddd561d 100644
--- a/intl/icu/source/data/curr/agq.txt
+++ b/intl/icu/source/data/curr/agq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
agq{
Currencies{
diff --git a/intl/icu/source/data/curr/ak.txt b/intl/icu/source/data/curr/ak.txt
index 526225435..89a50d839 100644
--- a/intl/icu/source/data/curr/ak.txt
+++ b/intl/icu/source/data/curr/ak.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ak{
Currencies{
diff --git a/intl/icu/source/data/curr/am.txt b/intl/icu/source/data/curr/am.txt
index 52ae6e330..6e38c3b42 100644
--- a/intl/icu/source/data/curr/am.txt
+++ b/intl/icu/source/data/curr/am.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
am{
Currencies{
diff --git a/intl/icu/source/data/curr/ar.txt b/intl/icu/source/data/curr/ar.txt
index 7b8bb756c..92df9cfed 100644
--- a/intl/icu/source/data/curr/ar.txt
+++ b/intl/icu/source/data/curr/ar.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar{
Currencies{
diff --git a/intl/icu/source/data/curr/ar_AE.txt b/intl/icu/source/data/curr/ar_AE.txt
index c6fe4c2d1..142189fc7 100644
--- a/intl/icu/source/data/curr/ar_AE.txt
+++ b/intl/icu/source/data/curr/ar_AE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_AE{
Currencies%narrow{
diff --git a/intl/icu/source/data/curr/ar_DJ.txt b/intl/icu/source/data/curr/ar_DJ.txt
index 8f1eb35a3..0843426a9 100644
--- a/intl/icu/source/data/curr/ar_DJ.txt
+++ b/intl/icu/source/data/curr/ar_DJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_DJ{
Currencies{
diff --git a/intl/icu/source/data/curr/ar_ER.txt b/intl/icu/source/data/curr/ar_ER.txt
index 6fca1f35b..3285e2cca 100644
--- a/intl/icu/source/data/curr/ar_ER.txt
+++ b/intl/icu/source/data/curr/ar_ER.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_ER{
Currencies{
diff --git a/intl/icu/source/data/curr/ar_LB.txt b/intl/icu/source/data/curr/ar_LB.txt
index f56400587..29c090ced 100644
--- a/intl/icu/source/data/curr/ar_LB.txt
+++ b/intl/icu/source/data/curr/ar_LB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_LB{
Currencies{
diff --git a/intl/icu/source/data/curr/ar_SO.txt b/intl/icu/source/data/curr/ar_SO.txt
index 53fae7905..c5666fff6 100644
--- a/intl/icu/source/data/curr/ar_SO.txt
+++ b/intl/icu/source/data/curr/ar_SO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_SO{
Currencies{
diff --git a/intl/icu/source/data/curr/ar_SS.txt b/intl/icu/source/data/curr/ar_SS.txt
index f5b6dc8da..3dadcccfe 100644
--- a/intl/icu/source/data/curr/ar_SS.txt
+++ b/intl/icu/source/data/curr/ar_SS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_SS{
Currencies{
diff --git a/intl/icu/source/data/curr/as.txt b/intl/icu/source/data/curr/as.txt
index 08c62a687..813d1810a 100644
--- a/intl/icu/source/data/curr/as.txt
+++ b/intl/icu/source/data/curr/as.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
as{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/asa.txt b/intl/icu/source/data/curr/asa.txt
index ff7753dc2..4b6d7c403 100644
--- a/intl/icu/source/data/curr/asa.txt
+++ b/intl/icu/source/data/curr/asa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
asa{
Currencies{
diff --git a/intl/icu/source/data/curr/ast.txt b/intl/icu/source/data/curr/ast.txt
index 385807b7d..8918f69f7 100644
--- a/intl/icu/source/data/curr/ast.txt
+++ b/intl/icu/source/data/curr/ast.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ast{
Currencies{
diff --git a/intl/icu/source/data/curr/az.txt b/intl/icu/source/data/curr/az.txt
index 32e3e7d8c..f4112f8c7 100644
--- a/intl/icu/source/data/curr/az.txt
+++ b/intl/icu/source/data/curr/az.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az{
Currencies{
diff --git a/intl/icu/source/data/curr/az_AZ.txt b/intl/icu/source/data/curr/az_AZ.txt
index caf84c095..7a07cbada 100644
--- a/intl/icu/source/data/curr/az_AZ.txt
+++ b/intl/icu/source/data/curr/az_AZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_AZ{
"%%ALIAS"{"az_Latn_AZ"}
diff --git a/intl/icu/source/data/curr/az_Cyrl.txt b/intl/icu/source/data/curr/az_Cyrl.txt
index 9ef56f753..d0f595a5e 100644
--- a/intl/icu/source/data/curr/az_Cyrl.txt
+++ b/intl/icu/source/data/curr/az_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_Cyrl{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/az_Latn.txt b/intl/icu/source/data/curr/az_Latn.txt
index 59182e903..bf3068dc2 100644
--- a/intl/icu/source/data/curr/az_Latn.txt
+++ b/intl/icu/source/data/curr/az_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/az_Latn_AZ.txt b/intl/icu/source/data/curr/az_Latn_AZ.txt
index 36c6e61ba..cf643e1d6 100644
--- a/intl/icu/source/data/curr/az_Latn_AZ.txt
+++ b/intl/icu/source/data/curr/az_Latn_AZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/bas.txt b/intl/icu/source/data/curr/bas.txt
index 0a5341b01..1851faa99 100644
--- a/intl/icu/source/data/curr/bas.txt
+++ b/intl/icu/source/data/curr/bas.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bas{
Currencies{
diff --git a/intl/icu/source/data/curr/be.txt b/intl/icu/source/data/curr/be.txt
index 08b3977f4..0a6880cf3 100644
--- a/intl/icu/source/data/curr/be.txt
+++ b/intl/icu/source/data/curr/be.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
be{
Currencies{
diff --git a/intl/icu/source/data/curr/bem.txt b/intl/icu/source/data/curr/bem.txt
index d7d130cce..ffd381c51 100644
--- a/intl/icu/source/data/curr/bem.txt
+++ b/intl/icu/source/data/curr/bem.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bem{
Currencies{
diff --git a/intl/icu/source/data/curr/bez.txt b/intl/icu/source/data/curr/bez.txt
index 42b2b2e2a..54f17f059 100644
--- a/intl/icu/source/data/curr/bez.txt
+++ b/intl/icu/source/data/curr/bez.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bez{
Currencies{
diff --git a/intl/icu/source/data/curr/bg.txt b/intl/icu/source/data/curr/bg.txt
index d245bc8a8..f5a239bab 100644
--- a/intl/icu/source/data/curr/bg.txt
+++ b/intl/icu/source/data/curr/bg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bg{
Currencies{
diff --git a/intl/icu/source/data/curr/bm.txt b/intl/icu/source/data/curr/bm.txt
index bc37a8bc1..a13f0e994 100644
--- a/intl/icu/source/data/curr/bm.txt
+++ b/intl/icu/source/data/curr/bm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bm{
Currencies{
diff --git a/intl/icu/source/data/curr/bn.txt b/intl/icu/source/data/curr/bn.txt
index 517e24a78..c2df7d45d 100644
--- a/intl/icu/source/data/curr/bn.txt
+++ b/intl/icu/source/data/curr/bn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bn{
Currencies{
diff --git a/intl/icu/source/data/curr/bo.txt b/intl/icu/source/data/curr/bo.txt
index d522a50a0..4a2facf11 100644
--- a/intl/icu/source/data/curr/bo.txt
+++ b/intl/icu/source/data/curr/bo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bo{
Currencies{
diff --git a/intl/icu/source/data/curr/bo_IN.txt b/intl/icu/source/data/curr/bo_IN.txt
index 52427fb4c..41d033054 100644
--- a/intl/icu/source/data/curr/bo_IN.txt
+++ b/intl/icu/source/data/curr/bo_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bo_IN{
Currencies{
diff --git a/intl/icu/source/data/curr/br.txt b/intl/icu/source/data/curr/br.txt
index 9b55c6b6b..fb680e9b1 100644
--- a/intl/icu/source/data/curr/br.txt
+++ b/intl/icu/source/data/curr/br.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
br{
Currencies{
diff --git a/intl/icu/source/data/curr/brx.txt b/intl/icu/source/data/curr/brx.txt
index 67292d748..83932e5fa 100644
--- a/intl/icu/source/data/curr/brx.txt
+++ b/intl/icu/source/data/curr/brx.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
brx{
Currencies{
diff --git a/intl/icu/source/data/curr/bs.txt b/intl/icu/source/data/curr/bs.txt
index 055514be0..3b0d062b6 100644
--- a/intl/icu/source/data/curr/bs.txt
+++ b/intl/icu/source/data/curr/bs.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs{
Currencies{
diff --git a/intl/icu/source/data/curr/bs_BA.txt b/intl/icu/source/data/curr/bs_BA.txt
index e5e3a4657..b347c85a5 100644
--- a/intl/icu/source/data/curr/bs_BA.txt
+++ b/intl/icu/source/data/curr/bs_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_BA{
"%%ALIAS"{"bs_Latn_BA"}
diff --git a/intl/icu/source/data/curr/bs_Cyrl.txt b/intl/icu/source/data/curr/bs_Cyrl.txt
index 1147d734f..dd95ece27 100644
--- a/intl/icu/source/data/curr/bs_Cyrl.txt
+++ b/intl/icu/source/data/curr/bs_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Cyrl{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/bs_Latn.txt b/intl/icu/source/data/curr/bs_Latn.txt
index 9163b6927..bdd79b703 100644
--- a/intl/icu/source/data/curr/bs_Latn.txt
+++ b/intl/icu/source/data/curr/bs_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/bs_Latn_BA.txt b/intl/icu/source/data/curr/bs_Latn_BA.txt
index 3ef1cc405..8d21c41a0 100644
--- a/intl/icu/source/data/curr/bs_Latn_BA.txt
+++ b/intl/icu/source/data/curr/bs_Latn_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/ca.txt b/intl/icu/source/data/curr/ca.txt
index 04a824653..9e3bdb0f4 100644
--- a/intl/icu/source/data/curr/ca.txt
+++ b/intl/icu/source/data/curr/ca.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca{
Currencies{
diff --git a/intl/icu/source/data/curr/ca_FR.txt b/intl/icu/source/data/curr/ca_FR.txt
index 1ecf63fa8..7cec64beb 100644
--- a/intl/icu/source/data/curr/ca_FR.txt
+++ b/intl/icu/source/data/curr/ca_FR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca_FR{
Currencies{
diff --git a/intl/icu/source/data/curr/ce.txt b/intl/icu/source/data/curr/ce.txt
index 681cb19df..dda7e68a2 100644
--- a/intl/icu/source/data/curr/ce.txt
+++ b/intl/icu/source/data/curr/ce.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ce{
Currencies{
diff --git a/intl/icu/source/data/curr/cgg.txt b/intl/icu/source/data/curr/cgg.txt
index 523825d8a..91ae5d6be 100644
--- a/intl/icu/source/data/curr/cgg.txt
+++ b/intl/icu/source/data/curr/cgg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cgg{
Currencies{
diff --git a/intl/icu/source/data/curr/chr.txt b/intl/icu/source/data/curr/chr.txt
index 98baaf99b..44b703e15 100644
--- a/intl/icu/source/data/curr/chr.txt
+++ b/intl/icu/source/data/curr/chr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
chr{
Currencies{
diff --git a/intl/icu/source/data/curr/ckb.txt b/intl/icu/source/data/curr/ckb.txt
index 730bc407a..89980d400 100644
--- a/intl/icu/source/data/curr/ckb.txt
+++ b/intl/icu/source/data/curr/ckb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ckb{
Version{"2.1.27.84"}
diff --git a/intl/icu/source/data/curr/cs.txt b/intl/icu/source/data/curr/cs.txt
index 786f2197c..e9a3425f9 100644
--- a/intl/icu/source/data/curr/cs.txt
+++ b/intl/icu/source/data/curr/cs.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cs{
Currencies{
diff --git a/intl/icu/source/data/curr/cy.txt b/intl/icu/source/data/curr/cy.txt
index 8714938bb..321df5d62 100644
--- a/intl/icu/source/data/curr/cy.txt
+++ b/intl/icu/source/data/curr/cy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cy{
Currencies{
diff --git a/intl/icu/source/data/curr/da.txt b/intl/icu/source/data/curr/da.txt
index cba2faa93..ac0e23628 100644
--- a/intl/icu/source/data/curr/da.txt
+++ b/intl/icu/source/data/curr/da.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
da{
Currencies{
diff --git a/intl/icu/source/data/curr/dav.txt b/intl/icu/source/data/curr/dav.txt
index 253b7415b..1691bf846 100644
--- a/intl/icu/source/data/curr/dav.txt
+++ b/intl/icu/source/data/curr/dav.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dav{
Currencies{
diff --git a/intl/icu/source/data/curr/de.txt b/intl/icu/source/data/curr/de.txt
index be1b0b8be..c38dc5e4b 100644
--- a/intl/icu/source/data/curr/de.txt
+++ b/intl/icu/source/data/curr/de.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de{
Currencies{
diff --git a/intl/icu/source/data/curr/de_CH.txt b/intl/icu/source/data/curr/de_CH.txt
index 648df2c70..ba10cb053 100644
--- a/intl/icu/source/data/curr/de_CH.txt
+++ b/intl/icu/source/data/curr/de_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_CH{
Currencies{
diff --git a/intl/icu/source/data/curr/de_LI.txt b/intl/icu/source/data/curr/de_LI.txt
index 093ba5ac8..40784abe1 100644
--- a/intl/icu/source/data/curr/de_LI.txt
+++ b/intl/icu/source/data/curr/de_LI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_LI{
Currencies{
diff --git a/intl/icu/source/data/curr/de_LU.txt b/intl/icu/source/data/curr/de_LU.txt
index cb7a805d0..a9bae2943 100644
--- a/intl/icu/source/data/curr/de_LU.txt
+++ b/intl/icu/source/data/curr/de_LU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_LU{
Currencies{
diff --git a/intl/icu/source/data/curr/dje.txt b/intl/icu/source/data/curr/dje.txt
index 14f0aeced..2815093c3 100644
--- a/intl/icu/source/data/curr/dje.txt
+++ b/intl/icu/source/data/curr/dje.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dje{
Currencies{
diff --git a/intl/icu/source/data/curr/dsb.txt b/intl/icu/source/data/curr/dsb.txt
index 0509ae7e0..9f7ca868d 100644
--- a/intl/icu/source/data/curr/dsb.txt
+++ b/intl/icu/source/data/curr/dsb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dsb{
Currencies{
diff --git a/intl/icu/source/data/curr/dua.txt b/intl/icu/source/data/curr/dua.txt
index df62568b4..4e055cdf9 100644
--- a/intl/icu/source/data/curr/dua.txt
+++ b/intl/icu/source/data/curr/dua.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dua{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/dyo.txt b/intl/icu/source/data/curr/dyo.txt
index b0aa76724..ee1561463 100644
--- a/intl/icu/source/data/curr/dyo.txt
+++ b/intl/icu/source/data/curr/dyo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dyo{
Currencies{
diff --git a/intl/icu/source/data/curr/dz.txt b/intl/icu/source/data/curr/dz.txt
index 48642b628..a4659e7dd 100644
--- a/intl/icu/source/data/curr/dz.txt
+++ b/intl/icu/source/data/curr/dz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dz{
Currencies{
diff --git a/intl/icu/source/data/curr/ebu.txt b/intl/icu/source/data/curr/ebu.txt
index a2cb6f6cd..fc59a8660 100644
--- a/intl/icu/source/data/curr/ebu.txt
+++ b/intl/icu/source/data/curr/ebu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ebu{
Currencies{
diff --git a/intl/icu/source/data/curr/ee.txt b/intl/icu/source/data/curr/ee.txt
index 6ebd0beb9..0d878e099 100644
--- a/intl/icu/source/data/curr/ee.txt
+++ b/intl/icu/source/data/curr/ee.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ee{
Currencies{
diff --git a/intl/icu/source/data/curr/el.txt b/intl/icu/source/data/curr/el.txt
index 27fb5a025..3dfd8b86f 100644
--- a/intl/icu/source/data/curr/el.txt
+++ b/intl/icu/source/data/curr/el.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
el{
Currencies{
diff --git a/intl/icu/source/data/curr/en.txt b/intl/icu/source/data/curr/en.txt
index c0d8910be..81631145f 100644
--- a/intl/icu/source/data/curr/en.txt
+++ b/intl/icu/source/data/curr/en.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en{
Currencies{
diff --git a/intl/icu/source/data/curr/en_001.txt b/intl/icu/source/data/curr/en_001.txt
index d661305d8..97deefaa4 100644
--- a/intl/icu/source/data/curr/en_001.txt
+++ b/intl/icu/source/data/curr/en_001.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_001{
Currencies{
diff --git a/intl/icu/source/data/curr/en_150.txt b/intl/icu/source/data/curr/en_150.txt
index 5455cc747..95e4c25a1 100644
--- a/intl/icu/source/data/curr/en_150.txt
+++ b/intl/icu/source/data/curr/en_150.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_150{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_AG.txt b/intl/icu/source/data/curr/en_AG.txt
index 70b58ea84..a9316de2f 100644
--- a/intl/icu/source/data/curr/en_AG.txt
+++ b/intl/icu/source/data/curr/en_AG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_AI.txt b/intl/icu/source/data/curr/en_AI.txt
index b6b8744ed..c6b9092d7 100644
--- a/intl/icu/source/data/curr/en_AI.txt
+++ b/intl/icu/source/data/curr/en_AI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_AT.txt b/intl/icu/source/data/curr/en_AT.txt
index 13def3a0f..28a31366b 100644
--- a/intl/icu/source/data/curr/en_AT.txt
+++ b/intl/icu/source/data/curr/en_AT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AT{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/curr/en_AU.txt b/intl/icu/source/data/curr/en_AU.txt
index 5dd478a0c..169b29fe7 100644
--- a/intl/icu/source/data/curr/en_AU.txt
+++ b/intl/icu/source/data/curr/en_AU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_BB.txt b/intl/icu/source/data/curr/en_BB.txt
index c299f81ce..bc9e2d9dc 100644
--- a/intl/icu/source/data/curr/en_BB.txt
+++ b/intl/icu/source/data/curr/en_BB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_BE.txt b/intl/icu/source/data/curr/en_BE.txt
index 9772d9179..b7356c61e 100644
--- a/intl/icu/source/data/curr/en_BE.txt
+++ b/intl/icu/source/data/curr/en_BE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_BI.txt b/intl/icu/source/data/curr/en_BI.txt
index 0abc0cf32..fc2b66980 100644
--- a/intl/icu/source/data/curr/en_BI.txt
+++ b/intl/icu/source/data/curr/en_BI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BI{
Currencies{
diff --git a/intl/icu/source/data/curr/en_BM.txt b/intl/icu/source/data/curr/en_BM.txt
index 08ef04619..ba54a377e 100644
--- a/intl/icu/source/data/curr/en_BM.txt
+++ b/intl/icu/source/data/curr/en_BM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_BS.txt b/intl/icu/source/data/curr/en_BS.txt
index 5c5e56fa0..4325cdce0 100644
--- a/intl/icu/source/data/curr/en_BS.txt
+++ b/intl/icu/source/data/curr/en_BS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_BW.txt b/intl/icu/source/data/curr/en_BW.txt
index 8acfaa204..78edc4030 100644
--- a/intl/icu/source/data/curr/en_BW.txt
+++ b/intl/icu/source/data/curr/en_BW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_BZ.txt b/intl/icu/source/data/curr/en_BZ.txt
index bfd2702c8..29bfe638c 100644
--- a/intl/icu/source/data/curr/en_BZ.txt
+++ b/intl/icu/source/data/curr/en_BZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_CA.txt b/intl/icu/source/data/curr/en_CA.txt
index 0f3a00922..35d91a875 100644
--- a/intl/icu/source/data/curr/en_CA.txt
+++ b/intl/icu/source/data/curr/en_CA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_CC.txt b/intl/icu/source/data/curr/en_CC.txt
index 1b3ad58d1..caff8572b 100644
--- a/intl/icu/source/data/curr/en_CC.txt
+++ b/intl/icu/source/data/curr/en_CC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_CH.txt b/intl/icu/source/data/curr/en_CH.txt
index 135de3899..751598267 100644
--- a/intl/icu/source/data/curr/en_CH.txt
+++ b/intl/icu/source/data/curr/en_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CH{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/curr/en_CK.txt b/intl/icu/source/data/curr/en_CK.txt
index 49ebd1538..10dab4344 100644
--- a/intl/icu/source/data/curr/en_CK.txt
+++ b/intl/icu/source/data/curr/en_CK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_CM.txt b/intl/icu/source/data/curr/en_CM.txt
index c21b645fd..fecd8470a 100644
--- a/intl/icu/source/data/curr/en_CM.txt
+++ b/intl/icu/source/data/curr/en_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_CX.txt b/intl/icu/source/data/curr/en_CX.txt
index d3c44b820..b38fc8814 100644
--- a/intl/icu/source/data/curr/en_CX.txt
+++ b/intl/icu/source/data/curr/en_CX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CX{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_CY.txt b/intl/icu/source/data/curr/en_CY.txt
index ccbf61916..bee3916a5 100644
--- a/intl/icu/source/data/curr/en_CY.txt
+++ b/intl/icu/source/data/curr/en_CY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_DE.txt b/intl/icu/source/data/curr/en_DE.txt
index 51c69cb51..3875baae7 100644
--- a/intl/icu/source/data/curr/en_DE.txt
+++ b/intl/icu/source/data/curr/en_DE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DE{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/curr/en_DG.txt b/intl/icu/source/data/curr/en_DG.txt
index 8b4d81743..d0905b755 100644
--- a/intl/icu/source/data/curr/en_DG.txt
+++ b/intl/icu/source/data/curr/en_DG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_DK.txt b/intl/icu/source/data/curr/en_DK.txt
index de56e3d94..1593a794f 100644
--- a/intl/icu/source/data/curr/en_DK.txt
+++ b/intl/icu/source/data/curr/en_DK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DK{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/curr/en_DM.txt b/intl/icu/source/data/curr/en_DM.txt
index 8c27f120b..ee20ed43f 100644
--- a/intl/icu/source/data/curr/en_DM.txt
+++ b/intl/icu/source/data/curr/en_DM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_ER.txt b/intl/icu/source/data/curr/en_ER.txt
index 20482cc1d..caf4c8746 100644
--- a/intl/icu/source/data/curr/en_ER.txt
+++ b/intl/icu/source/data/curr/en_ER.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ER{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_FI.txt b/intl/icu/source/data/curr/en_FI.txt
index 8906ed5d0..f730f07dd 100644
--- a/intl/icu/source/data/curr/en_FI.txt
+++ b/intl/icu/source/data/curr/en_FI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FI{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/curr/en_FJ.txt b/intl/icu/source/data/curr/en_FJ.txt
index d82f49cba..598a82e4d 100644
--- a/intl/icu/source/data/curr/en_FJ.txt
+++ b/intl/icu/source/data/curr/en_FJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FJ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_FK.txt b/intl/icu/source/data/curr/en_FK.txt
index 3e9b71a70..40c875b42 100644
--- a/intl/icu/source/data/curr/en_FK.txt
+++ b/intl/icu/source/data/curr/en_FK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_FM.txt b/intl/icu/source/data/curr/en_FM.txt
index 0d69e7144..99961ceec 100644
--- a/intl/icu/source/data/curr/en_FM.txt
+++ b/intl/icu/source/data/curr/en_FM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_GB.txt b/intl/icu/source/data/curr/en_GB.txt
index a60a578ab..7822e64b5 100644
--- a/intl/icu/source/data/curr/en_GB.txt
+++ b/intl/icu/source/data/curr/en_GB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_GD.txt b/intl/icu/source/data/curr/en_GD.txt
index 43ba3d48b..f74903a57 100644
--- a/intl/icu/source/data/curr/en_GD.txt
+++ b/intl/icu/source/data/curr/en_GD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GD{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_GG.txt b/intl/icu/source/data/curr/en_GG.txt
index 28e46dce8..f735df17c 100644
--- a/intl/icu/source/data/curr/en_GG.txt
+++ b/intl/icu/source/data/curr/en_GG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_GH.txt b/intl/icu/source/data/curr/en_GH.txt
index 97cb0d26b..43cb97559 100644
--- a/intl/icu/source/data/curr/en_GH.txt
+++ b/intl/icu/source/data/curr/en_GH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_GI.txt b/intl/icu/source/data/curr/en_GI.txt
index f55427ab6..53632818d 100644
--- a/intl/icu/source/data/curr/en_GI.txt
+++ b/intl/icu/source/data/curr/en_GI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_GM.txt b/intl/icu/source/data/curr/en_GM.txt
index f975917b6..82e661d13 100644
--- a/intl/icu/source/data/curr/en_GM.txt
+++ b/intl/icu/source/data/curr/en_GM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_GY.txt b/intl/icu/source/data/curr/en_GY.txt
index ce9b6327c..274830573 100644
--- a/intl/icu/source/data/curr/en_GY.txt
+++ b/intl/icu/source/data/curr/en_GY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_HK.txt b/intl/icu/source/data/curr/en_HK.txt
index 9ad20447d..38303666d 100644
--- a/intl/icu/source/data/curr/en_HK.txt
+++ b/intl/icu/source/data/curr/en_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_HK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_IE.txt b/intl/icu/source/data/curr/en_IE.txt
index 1cbdf5054..642829acc 100644
--- a/intl/icu/source/data/curr/en_IE.txt
+++ b/intl/icu/source/data/curr/en_IE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_IL.txt b/intl/icu/source/data/curr/en_IL.txt
index 55e362c62..746e7281c 100644
--- a/intl/icu/source/data/curr/en_IL.txt
+++ b/intl/icu/source/data/curr/en_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IL{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_IM.txt b/intl/icu/source/data/curr/en_IM.txt
index a7ff52641..a34b71943 100644
--- a/intl/icu/source/data/curr/en_IM.txt
+++ b/intl/icu/source/data/curr/en_IM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_IN.txt b/intl/icu/source/data/curr/en_IN.txt
index 9984e67d2..6abcfe5f5 100644
--- a/intl/icu/source/data/curr/en_IN.txt
+++ b/intl/icu/source/data/curr/en_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_IO.txt b/intl/icu/source/data/curr/en_IO.txt
index d2c4f915d..b69bf8429 100644
--- a/intl/icu/source/data/curr/en_IO.txt
+++ b/intl/icu/source/data/curr/en_IO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_JE.txt b/intl/icu/source/data/curr/en_JE.txt
index 99a8a97ba..5b5079fc5 100644
--- a/intl/icu/source/data/curr/en_JE.txt
+++ b/intl/icu/source/data/curr/en_JE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_JE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_JM.txt b/intl/icu/source/data/curr/en_JM.txt
index 62d40b037..8f059e187 100644
--- a/intl/icu/source/data/curr/en_JM.txt
+++ b/intl/icu/source/data/curr/en_JM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_JM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_KE.txt b/intl/icu/source/data/curr/en_KE.txt
index 6a3ae528f..4f1437b75 100644
--- a/intl/icu/source/data/curr/en_KE.txt
+++ b/intl/icu/source/data/curr/en_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_KI.txt b/intl/icu/source/data/curr/en_KI.txt
index b592b1b82..b0f756556 100644
--- a/intl/icu/source/data/curr/en_KI.txt
+++ b/intl/icu/source/data/curr/en_KI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_KN.txt b/intl/icu/source/data/curr/en_KN.txt
index 7c4ffb997..b9a0539be 100644
--- a/intl/icu/source/data/curr/en_KN.txt
+++ b/intl/icu/source/data/curr/en_KN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_KY.txt b/intl/icu/source/data/curr/en_KY.txt
index 80c8290ac..ce0dfeb90 100644
--- a/intl/icu/source/data/curr/en_KY.txt
+++ b/intl/icu/source/data/curr/en_KY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_LC.txt b/intl/icu/source/data/curr/en_LC.txt
index 5e01da107..fe5b019dc 100644
--- a/intl/icu/source/data/curr/en_LC.txt
+++ b/intl/icu/source/data/curr/en_LC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_LR.txt b/intl/icu/source/data/curr/en_LR.txt
index da1384fd6..6fcd1a7bc 100644
--- a/intl/icu/source/data/curr/en_LR.txt
+++ b/intl/icu/source/data/curr/en_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LR{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_LS.txt b/intl/icu/source/data/curr/en_LS.txt
index 212e6e8fc..9e0bea497 100644
--- a/intl/icu/source/data/curr/en_LS.txt
+++ b/intl/icu/source/data/curr/en_LS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_MG.txt b/intl/icu/source/data/curr/en_MG.txt
index 1f2e7837f..8a4c23ea1 100644
--- a/intl/icu/source/data/curr/en_MG.txt
+++ b/intl/icu/source/data/curr/en_MG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_MO.txt b/intl/icu/source/data/curr/en_MO.txt
index 97e8c6899..bf00c1dbb 100644
--- a/intl/icu/source/data/curr/en_MO.txt
+++ b/intl/icu/source/data/curr/en_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_MS.txt b/intl/icu/source/data/curr/en_MS.txt
index 3342e200e..561f05bf7 100644
--- a/intl/icu/source/data/curr/en_MS.txt
+++ b/intl/icu/source/data/curr/en_MS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_MT.txt b/intl/icu/source/data/curr/en_MT.txt
index 4227c28e6..5ca4b2441 100644
--- a/intl/icu/source/data/curr/en_MT.txt
+++ b/intl/icu/source/data/curr/en_MT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MT{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_MU.txt b/intl/icu/source/data/curr/en_MU.txt
index 953e4fcb5..5f76f789f 100644
--- a/intl/icu/source/data/curr/en_MU.txt
+++ b/intl/icu/source/data/curr/en_MU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_MW.txt b/intl/icu/source/data/curr/en_MW.txt
index ad484e4ea..82bc418e1 100644
--- a/intl/icu/source/data/curr/en_MW.txt
+++ b/intl/icu/source/data/curr/en_MW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_MY.txt b/intl/icu/source/data/curr/en_MY.txt
index 590aca38c..c6bbcb18c 100644
--- a/intl/icu/source/data/curr/en_MY.txt
+++ b/intl/icu/source/data/curr/en_MY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_NA.txt b/intl/icu/source/data/curr/en_NA.txt
index 69be79b32..b4dc83369 100644
--- a/intl/icu/source/data/curr/en_NA.txt
+++ b/intl/icu/source/data/curr/en_NA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_NF.txt b/intl/icu/source/data/curr/en_NF.txt
index 78b7e6bf7..369fa7590 100644
--- a/intl/icu/source/data/curr/en_NF.txt
+++ b/intl/icu/source/data/curr/en_NF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NF{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_NG.txt b/intl/icu/source/data/curr/en_NG.txt
index 49e7a1477..af09502c3 100644
--- a/intl/icu/source/data/curr/en_NG.txt
+++ b/intl/icu/source/data/curr/en_NG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_NH.txt b/intl/icu/source/data/curr/en_NH.txt
index 958b96bda..6bd32f2e3 100644
--- a/intl/icu/source/data/curr/en_NH.txt
+++ b/intl/icu/source/data/curr/en_NH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NH{
"%%ALIAS"{"en_VU"}
diff --git a/intl/icu/source/data/curr/en_NL.txt b/intl/icu/source/data/curr/en_NL.txt
index d0f6862e7..33524b50a 100644
--- a/intl/icu/source/data/curr/en_NL.txt
+++ b/intl/icu/source/data/curr/en_NL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NL{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/curr/en_NR.txt b/intl/icu/source/data/curr/en_NR.txt
index fab51ef16..4cc2f0bbe 100644
--- a/intl/icu/source/data/curr/en_NR.txt
+++ b/intl/icu/source/data/curr/en_NR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NR{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_NU.txt b/intl/icu/source/data/curr/en_NU.txt
index aef789953..b59718e84 100644
--- a/intl/icu/source/data/curr/en_NU.txt
+++ b/intl/icu/source/data/curr/en_NU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_NZ.txt b/intl/icu/source/data/curr/en_NZ.txt
index 6f26c859b..d9aed9c90 100644
--- a/intl/icu/source/data/curr/en_NZ.txt
+++ b/intl/icu/source/data/curr/en_NZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_PG.txt b/intl/icu/source/data/curr/en_PG.txt
index 33d479225..a98afe43d 100644
--- a/intl/icu/source/data/curr/en_PG.txt
+++ b/intl/icu/source/data/curr/en_PG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_PH.txt b/intl/icu/source/data/curr/en_PH.txt
index bb1170c7d..eab8966c1 100644
--- a/intl/icu/source/data/curr/en_PH.txt
+++ b/intl/icu/source/data/curr/en_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_PK.txt b/intl/icu/source/data/curr/en_PK.txt
index f367781c4..7f6794ebc 100644
--- a/intl/icu/source/data/curr/en_PK.txt
+++ b/intl/icu/source/data/curr/en_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_PN.txt b/intl/icu/source/data/curr/en_PN.txt
index 328b527b4..f2d6f55f5 100644
--- a/intl/icu/source/data/curr/en_PN.txt
+++ b/intl/icu/source/data/curr/en_PN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_PW.txt b/intl/icu/source/data/curr/en_PW.txt
index 3825c9fec..5afb37694 100644
--- a/intl/icu/source/data/curr/en_PW.txt
+++ b/intl/icu/source/data/curr/en_PW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_RH.txt b/intl/icu/source/data/curr/en_RH.txt
index b60f708fb..2ac5ccfba 100644
--- a/intl/icu/source/data/curr/en_RH.txt
+++ b/intl/icu/source/data/curr/en_RH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_RH{
"%%ALIAS"{"en_ZW"}
diff --git a/intl/icu/source/data/curr/en_RW.txt b/intl/icu/source/data/curr/en_RW.txt
index 20f55ec5e..a84841897 100644
--- a/intl/icu/source/data/curr/en_RW.txt
+++ b/intl/icu/source/data/curr/en_RW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_RW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SB.txt b/intl/icu/source/data/curr/en_SB.txt
index 1cf8dd018..6880d1d1c 100644
--- a/intl/icu/source/data/curr/en_SB.txt
+++ b/intl/icu/source/data/curr/en_SB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SC.txt b/intl/icu/source/data/curr/en_SC.txt
index 197fc03c9..68fe462a2 100644
--- a/intl/icu/source/data/curr/en_SC.txt
+++ b/intl/icu/source/data/curr/en_SC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SD.txt b/intl/icu/source/data/curr/en_SD.txt
index 21a7710bb..a7b3570f0 100644
--- a/intl/icu/source/data/curr/en_SD.txt
+++ b/intl/icu/source/data/curr/en_SD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SD{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SE.txt b/intl/icu/source/data/curr/en_SE.txt
index 6245fa32b..5de8a1161 100644
--- a/intl/icu/source/data/curr/en_SE.txt
+++ b/intl/icu/source/data/curr/en_SE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SE{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/curr/en_SG.txt b/intl/icu/source/data/curr/en_SG.txt
index a02c7dc8a..6cc8c00f8 100644
--- a/intl/icu/source/data/curr/en_SG.txt
+++ b/intl/icu/source/data/curr/en_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SH.txt b/intl/icu/source/data/curr/en_SH.txt
index f3c624c84..432e11b1e 100644
--- a/intl/icu/source/data/curr/en_SH.txt
+++ b/intl/icu/source/data/curr/en_SH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SI.txt b/intl/icu/source/data/curr/en_SI.txt
index 1b945e783..c92c07f73 100644
--- a/intl/icu/source/data/curr/en_SI.txt
+++ b/intl/icu/source/data/curr/en_SI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SI{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/curr/en_SL.txt b/intl/icu/source/data/curr/en_SL.txt
index 34ddd4eb5..7fd686f15 100644
--- a/intl/icu/source/data/curr/en_SL.txt
+++ b/intl/icu/source/data/curr/en_SL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SL{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SS.txt b/intl/icu/source/data/curr/en_SS.txt
index b67c45af5..963a05b3a 100644
--- a/intl/icu/source/data/curr/en_SS.txt
+++ b/intl/icu/source/data/curr/en_SS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SX.txt b/intl/icu/source/data/curr/en_SX.txt
index 9b103d773..939da7009 100644
--- a/intl/icu/source/data/curr/en_SX.txt
+++ b/intl/icu/source/data/curr/en_SX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SX{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_SZ.txt b/intl/icu/source/data/curr/en_SZ.txt
index 6bd585edf..387d3fc7c 100644
--- a/intl/icu/source/data/curr/en_SZ.txt
+++ b/intl/icu/source/data/curr/en_SZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_TC.txt b/intl/icu/source/data/curr/en_TC.txt
index 82dff11d6..2eda36a72 100644
--- a/intl/icu/source/data/curr/en_TC.txt
+++ b/intl/icu/source/data/curr/en_TC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_TK.txt b/intl/icu/source/data/curr/en_TK.txt
index 348da4645..dbcd9e5ce 100644
--- a/intl/icu/source/data/curr/en_TK.txt
+++ b/intl/icu/source/data/curr/en_TK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_TO.txt b/intl/icu/source/data/curr/en_TO.txt
index 366a210b9..4164fa9c0 100644
--- a/intl/icu/source/data/curr/en_TO.txt
+++ b/intl/icu/source/data/curr/en_TO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_TT.txt b/intl/icu/source/data/curr/en_TT.txt
index c2c72d16a..7218fbbd7 100644
--- a/intl/icu/source/data/curr/en_TT.txt
+++ b/intl/icu/source/data/curr/en_TT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TT{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_TV.txt b/intl/icu/source/data/curr/en_TV.txt
index c113148eb..36c6ff54a 100644
--- a/intl/icu/source/data/curr/en_TV.txt
+++ b/intl/icu/source/data/curr/en_TV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TV{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_TZ.txt b/intl/icu/source/data/curr/en_TZ.txt
index 23ea8b6a4..e86aae5b8 100644
--- a/intl/icu/source/data/curr/en_TZ.txt
+++ b/intl/icu/source/data/curr/en_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_UG.txt b/intl/icu/source/data/curr/en_UG.txt
index 2ace29d7a..fa2c158f0 100644
--- a/intl/icu/source/data/curr/en_UG.txt
+++ b/intl/icu/source/data/curr/en_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_UG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_VC.txt b/intl/icu/source/data/curr/en_VC.txt
index 81c8d63bc..695b36c85 100644
--- a/intl/icu/source/data/curr/en_VC.txt
+++ b/intl/icu/source/data/curr/en_VC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_VG.txt b/intl/icu/source/data/curr/en_VG.txt
index 366c5ea7f..2bd5b3097 100644
--- a/intl/icu/source/data/curr/en_VG.txt
+++ b/intl/icu/source/data/curr/en_VG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_VU.txt b/intl/icu/source/data/curr/en_VU.txt
index 69c400576..7d648e317 100644
--- a/intl/icu/source/data/curr/en_VU.txt
+++ b/intl/icu/source/data/curr/en_VU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_WS.txt b/intl/icu/source/data/curr/en_WS.txt
index 59f4d7ba0..d039e629f 100644
--- a/intl/icu/source/data/curr/en_WS.txt
+++ b/intl/icu/source/data/curr/en_WS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_WS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_ZA.txt b/intl/icu/source/data/curr/en_ZA.txt
index 9cc2fa3fc..be082dd13 100644
--- a/intl/icu/source/data/curr/en_ZA.txt
+++ b/intl/icu/source/data/curr/en_ZA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_ZM.txt b/intl/icu/source/data/curr/en_ZM.txt
index a601feffe..a3a08dab9 100644
--- a/intl/icu/source/data/curr/en_ZM.txt
+++ b/intl/icu/source/data/curr/en_ZM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/en_ZW.txt b/intl/icu/source/data/curr/en_ZW.txt
index 4f5e7faff..28bde610b 100644
--- a/intl/icu/source/data/curr/en_ZW.txt
+++ b/intl/icu/source/data/curr/en_ZW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/curr/eo.txt b/intl/icu/source/data/curr/eo.txt
index f741c1d04..2eab45a67 100644
--- a/intl/icu/source/data/curr/eo.txt
+++ b/intl/icu/source/data/curr/eo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/es.txt b/intl/icu/source/data/curr/es.txt
index b32491e30..295ce7e7e 100644
--- a/intl/icu/source/data/curr/es.txt
+++ b/intl/icu/source/data/curr/es.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es{
Currencies{
diff --git a/intl/icu/source/data/curr/es_419.txt b/intl/icu/source/data/curr/es_419.txt
index c79855365..6dd5510d9 100644
--- a/intl/icu/source/data/curr/es_419.txt
+++ b/intl/icu/source/data/curr/es_419.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_419{
Currencies{
diff --git a/intl/icu/source/data/curr/es_AR.txt b/intl/icu/source/data/curr/es_AR.txt
index 82d92980e..a760d66a3 100644
--- a/intl/icu/source/data/curr/es_AR.txt
+++ b/intl/icu/source/data/curr/es_AR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_AR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_BO.txt b/intl/icu/source/data/curr/es_BO.txt
index 828d4853d..095ebd9f8 100644
--- a/intl/icu/source/data/curr/es_BO.txt
+++ b/intl/icu/source/data/curr/es_BO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_BO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_BR.txt b/intl/icu/source/data/curr/es_BR.txt
index 9bfa60c9a..5495a3aa1 100644
--- a/intl/icu/source/data/curr/es_BR.txt
+++ b/intl/icu/source/data/curr/es_BR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_BR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_CL.txt b/intl/icu/source/data/curr/es_CL.txt
index 6db4f1f25..999ed0a22 100644
--- a/intl/icu/source/data/curr/es_CL.txt
+++ b/intl/icu/source/data/curr/es_CL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CL{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_CO.txt b/intl/icu/source/data/curr/es_CO.txt
index 9decadb4d..6cafd1749 100644
--- a/intl/icu/source/data/curr/es_CO.txt
+++ b/intl/icu/source/data/curr/es_CO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_CR.txt b/intl/icu/source/data/curr/es_CR.txt
index e6fb093c4..63f617f33 100644
--- a/intl/icu/source/data/curr/es_CR.txt
+++ b/intl/icu/source/data/curr/es_CR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_CU.txt b/intl/icu/source/data/curr/es_CU.txt
index fb536c08f..5e2a783df 100644
--- a/intl/icu/source/data/curr/es_CU.txt
+++ b/intl/icu/source/data/curr/es_CU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CU{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_DO.txt b/intl/icu/source/data/curr/es_DO.txt
index 14f412c2d..e6abc0f2d 100644
--- a/intl/icu/source/data/curr/es_DO.txt
+++ b/intl/icu/source/data/curr/es_DO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_DO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_EC.txt b/intl/icu/source/data/curr/es_EC.txt
index 855194472..03320b2f3 100644
--- a/intl/icu/source/data/curr/es_EC.txt
+++ b/intl/icu/source/data/curr/es_EC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_EC{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_GQ.txt b/intl/icu/source/data/curr/es_GQ.txt
index 497f0caa5..d23f1dfc4 100644
--- a/intl/icu/source/data/curr/es_GQ.txt
+++ b/intl/icu/source/data/curr/es_GQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_GQ{
Currencies{
diff --git a/intl/icu/source/data/curr/es_GT.txt b/intl/icu/source/data/curr/es_GT.txt
index 2a004f994..cd7fa35c2 100644
--- a/intl/icu/source/data/curr/es_GT.txt
+++ b/intl/icu/source/data/curr/es_GT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_GT{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_HN.txt b/intl/icu/source/data/curr/es_HN.txt
index f93625bf2..32ae31c96 100644
--- a/intl/icu/source/data/curr/es_HN.txt
+++ b/intl/icu/source/data/curr/es_HN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_HN{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_MX.txt b/intl/icu/source/data/curr/es_MX.txt
index 04ffbd5b0..c07827e10 100644
--- a/intl/icu/source/data/curr/es_MX.txt
+++ b/intl/icu/source/data/curr/es_MX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_MX{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_NI.txt b/intl/icu/source/data/curr/es_NI.txt
index 0ea88d8b6..8832fce85 100644
--- a/intl/icu/source/data/curr/es_NI.txt
+++ b/intl/icu/source/data/curr/es_NI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_NI{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_PA.txt b/intl/icu/source/data/curr/es_PA.txt
index d60f94ae6..818b42e36 100644
--- a/intl/icu/source/data/curr/es_PA.txt
+++ b/intl/icu/source/data/curr/es_PA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PA{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_PE.txt b/intl/icu/source/data/curr/es_PE.txt
index 3c7dea32b..346cc1954 100644
--- a/intl/icu/source/data/curr/es_PE.txt
+++ b/intl/icu/source/data/curr/es_PE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PE{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_PH.txt b/intl/icu/source/data/curr/es_PH.txt
index 4e4b0cfc6..ab7335af2 100644
--- a/intl/icu/source/data/curr/es_PH.txt
+++ b/intl/icu/source/data/curr/es_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PH{
Currencies{
diff --git a/intl/icu/source/data/curr/es_PR.txt b/intl/icu/source/data/curr/es_PR.txt
index 229c05d30..288c869c4 100644
--- a/intl/icu/source/data/curr/es_PR.txt
+++ b/intl/icu/source/data/curr/es_PR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_PY.txt b/intl/icu/source/data/curr/es_PY.txt
index d7769f16c..3eb1a6f78 100644
--- a/intl/icu/source/data/curr/es_PY.txt
+++ b/intl/icu/source/data/curr/es_PY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PY{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_SV.txt b/intl/icu/source/data/curr/es_SV.txt
index 8c04d3a07..8cd26a3e1 100644
--- a/intl/icu/source/data/curr/es_SV.txt
+++ b/intl/icu/source/data/curr/es_SV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_SV{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_US.txt b/intl/icu/source/data/curr/es_US.txt
index e2df7cbe6..50e8c4203 100644
--- a/intl/icu/source/data/curr/es_US.txt
+++ b/intl/icu/source/data/curr/es_US.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_US{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_UY.txt b/intl/icu/source/data/curr/es_UY.txt
index 1aa47343a..e08da0d1b 100644
--- a/intl/icu/source/data/curr/es_UY.txt
+++ b/intl/icu/source/data/curr/es_UY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_UY{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/es_VE.txt b/intl/icu/source/data/curr/es_VE.txt
index a74c2cb66..8c9ad5aee 100644
--- a/intl/icu/source/data/curr/es_VE.txt
+++ b/intl/icu/source/data/curr/es_VE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_VE{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/curr/et.txt b/intl/icu/source/data/curr/et.txt
index ebcd5a7d8..8f530a196 100644
--- a/intl/icu/source/data/curr/et.txt
+++ b/intl/icu/source/data/curr/et.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
et{
Currencies{
diff --git a/intl/icu/source/data/curr/eu.txt b/intl/icu/source/data/curr/eu.txt
index ea89d3f6a..f9295f025 100644
--- a/intl/icu/source/data/curr/eu.txt
+++ b/intl/icu/source/data/curr/eu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eu{
Currencies{
diff --git a/intl/icu/source/data/curr/ewo.txt b/intl/icu/source/data/curr/ewo.txt
index 2f362c10c..565f5155d 100644
--- a/intl/icu/source/data/curr/ewo.txt
+++ b/intl/icu/source/data/curr/ewo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ewo{
Currencies{
diff --git a/intl/icu/source/data/curr/fa.txt b/intl/icu/source/data/curr/fa.txt
index 7854a22b1..e595d9538 100644
--- a/intl/icu/source/data/curr/fa.txt
+++ b/intl/icu/source/data/curr/fa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fa{
Currencies{
diff --git a/intl/icu/source/data/curr/fa_AF.txt b/intl/icu/source/data/curr/fa_AF.txt
index fe942694c..3990e0425 100644
--- a/intl/icu/source/data/curr/fa_AF.txt
+++ b/intl/icu/source/data/curr/fa_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fa_AF{
Currencies{
diff --git a/intl/icu/source/data/curr/ff.txt b/intl/icu/source/data/curr/ff.txt
index 555f2838e..ced94acf1 100644
--- a/intl/icu/source/data/curr/ff.txt
+++ b/intl/icu/source/data/curr/ff.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff{
Currencies{
diff --git a/intl/icu/source/data/curr/ff_GN.txt b/intl/icu/source/data/curr/ff_GN.txt
index db68784e2..6b0920834 100644
--- a/intl/icu/source/data/curr/ff_GN.txt
+++ b/intl/icu/source/data/curr/ff_GN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_GN{
Currencies{
diff --git a/intl/icu/source/data/curr/ff_MR.txt b/intl/icu/source/data/curr/ff_MR.txt
index fa4c6849c..e61d63b97 100644
--- a/intl/icu/source/data/curr/ff_MR.txt
+++ b/intl/icu/source/data/curr/ff_MR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_MR{
Currencies{
diff --git a/intl/icu/source/data/curr/fi.txt b/intl/icu/source/data/curr/fi.txt
index ee0b3a69f..5ebfaf28e 100644
--- a/intl/icu/source/data/curr/fi.txt
+++ b/intl/icu/source/data/curr/fi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fi{
Currencies{
diff --git a/intl/icu/source/data/curr/fil.txt b/intl/icu/source/data/curr/fil.txt
index bd9da6cc0..e40e0acee 100644
--- a/intl/icu/source/data/curr/fil.txt
+++ b/intl/icu/source/data/curr/fil.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fil{
Currencies{
diff --git a/intl/icu/source/data/curr/fil_PH.txt b/intl/icu/source/data/curr/fil_PH.txt
index 5b83d8215..cbd1275ac 100644
--- a/intl/icu/source/data/curr/fil_PH.txt
+++ b/intl/icu/source/data/curr/fil_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/fo.txt b/intl/icu/source/data/curr/fo.txt
index 1175ade41..5ca387efc 100644
--- a/intl/icu/source/data/curr/fo.txt
+++ b/intl/icu/source/data/curr/fo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fo{
Currencies{
diff --git a/intl/icu/source/data/curr/fo_DK.txt b/intl/icu/source/data/curr/fo_DK.txt
index 9e72f9fd1..876e1730e 100644
--- a/intl/icu/source/data/curr/fo_DK.txt
+++ b/intl/icu/source/data/curr/fo_DK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fo_DK{
Currencies{
diff --git a/intl/icu/source/data/curr/fr.txt b/intl/icu/source/data/curr/fr.txt
index 827a2f1db..9e78dca7e 100644
--- a/intl/icu/source/data/curr/fr.txt
+++ b/intl/icu/source/data/curr/fr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_BI.txt b/intl/icu/source/data/curr/fr_BI.txt
index 464914d5e..3527168ca 100644
--- a/intl/icu/source/data/curr/fr_BI.txt
+++ b/intl/icu/source/data/curr/fr_BI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_BI{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_CA.txt b/intl/icu/source/data/curr/fr_CA.txt
index 6b49a574e..1f993563f 100644
--- a/intl/icu/source/data/curr/fr_CA.txt
+++ b/intl/icu/source/data/curr/fr_CA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CA{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_CD.txt b/intl/icu/source/data/curr/fr_CD.txt
index a637b125e..4062440e1 100644
--- a/intl/icu/source/data/curr/fr_CD.txt
+++ b/intl/icu/source/data/curr/fr_CD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CD{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_DJ.txt b/intl/icu/source/data/curr/fr_DJ.txt
index b82a04f20..1c52a84f3 100644
--- a/intl/icu/source/data/curr/fr_DJ.txt
+++ b/intl/icu/source/data/curr/fr_DJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_DJ{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_DZ.txt b/intl/icu/source/data/curr/fr_DZ.txt
index 103783843..38a512428 100644
--- a/intl/icu/source/data/curr/fr_DZ.txt
+++ b/intl/icu/source/data/curr/fr_DZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_DZ{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_GN.txt b/intl/icu/source/data/curr/fr_GN.txt
index 2ac6be183..07aff7b70 100644
--- a/intl/icu/source/data/curr/fr_GN.txt
+++ b/intl/icu/source/data/curr/fr_GN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_GN{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_HT.txt b/intl/icu/source/data/curr/fr_HT.txt
index 6a881d4c4..4313d4811 100644
--- a/intl/icu/source/data/curr/fr_HT.txt
+++ b/intl/icu/source/data/curr/fr_HT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_HT{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_KM.txt b/intl/icu/source/data/curr/fr_KM.txt
index 0bc8eaa6d..a23863ae3 100644
--- a/intl/icu/source/data/curr/fr_KM.txt
+++ b/intl/icu/source/data/curr/fr_KM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_KM{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_LU.txt b/intl/icu/source/data/curr/fr_LU.txt
index 4abea40af..13f0aa13b 100644
--- a/intl/icu/source/data/curr/fr_LU.txt
+++ b/intl/icu/source/data/curr/fr_LU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_LU{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_MG.txt b/intl/icu/source/data/curr/fr_MG.txt
index dae07c79b..af738eba1 100644
--- a/intl/icu/source/data/curr/fr_MG.txt
+++ b/intl/icu/source/data/curr/fr_MG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MG{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_MR.txt b/intl/icu/source/data/curr/fr_MR.txt
index 1c4ec0709..8ed6cfb2e 100644
--- a/intl/icu/source/data/curr/fr_MR.txt
+++ b/intl/icu/source/data/curr/fr_MR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MR{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_MU.txt b/intl/icu/source/data/curr/fr_MU.txt
index 111964b54..54185828b 100644
--- a/intl/icu/source/data/curr/fr_MU.txt
+++ b/intl/icu/source/data/curr/fr_MU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MU{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_RW.txt b/intl/icu/source/data/curr/fr_RW.txt
index a26e4b49b..176127fae 100644
--- a/intl/icu/source/data/curr/fr_RW.txt
+++ b/intl/icu/source/data/curr/fr_RW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_RW{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_SC.txt b/intl/icu/source/data/curr/fr_SC.txt
index 9e2bf1f2e..bff12abc7 100644
--- a/intl/icu/source/data/curr/fr_SC.txt
+++ b/intl/icu/source/data/curr/fr_SC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_SC{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_SY.txt b/intl/icu/source/data/curr/fr_SY.txt
index 0ee681818..0bacb664b 100644
--- a/intl/icu/source/data/curr/fr_SY.txt
+++ b/intl/icu/source/data/curr/fr_SY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_SY{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_TN.txt b/intl/icu/source/data/curr/fr_TN.txt
index 43cabb4fd..367124ed3 100644
--- a/intl/icu/source/data/curr/fr_TN.txt
+++ b/intl/icu/source/data/curr/fr_TN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_TN{
Currencies{
diff --git a/intl/icu/source/data/curr/fr_VU.txt b/intl/icu/source/data/curr/fr_VU.txt
index c7afb1673..fdcd37481 100644
--- a/intl/icu/source/data/curr/fr_VU.txt
+++ b/intl/icu/source/data/curr/fr_VU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_VU{
Currencies{
diff --git a/intl/icu/source/data/curr/fur.txt b/intl/icu/source/data/curr/fur.txt
index 4ab99747d..a02bcbeae 100644
--- a/intl/icu/source/data/curr/fur.txt
+++ b/intl/icu/source/data/curr/fur.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fur{
Currencies{
diff --git a/intl/icu/source/data/curr/fy.txt b/intl/icu/source/data/curr/fy.txt
index abcbee30d..e395a6153 100644
--- a/intl/icu/source/data/curr/fy.txt
+++ b/intl/icu/source/data/curr/fy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fy{
Currencies{
diff --git a/intl/icu/source/data/curr/ga.txt b/intl/icu/source/data/curr/ga.txt
index 50225f689..e06aee20d 100644
--- a/intl/icu/source/data/curr/ga.txt
+++ b/intl/icu/source/data/curr/ga.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ga{
Currencies{
diff --git a/intl/icu/source/data/curr/gd.txt b/intl/icu/source/data/curr/gd.txt
index ded101058..bb9309311 100644
--- a/intl/icu/source/data/curr/gd.txt
+++ b/intl/icu/source/data/curr/gd.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gd{
Currencies{
diff --git a/intl/icu/source/data/curr/gl.txt b/intl/icu/source/data/curr/gl.txt
index cfb023f41..0dc6c6a10 100644
--- a/intl/icu/source/data/curr/gl.txt
+++ b/intl/icu/source/data/curr/gl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gl{
Currencies{
diff --git a/intl/icu/source/data/curr/gsw.txt b/intl/icu/source/data/curr/gsw.txt
index 367229956..228e72bda 100644
--- a/intl/icu/source/data/curr/gsw.txt
+++ b/intl/icu/source/data/curr/gsw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gsw{
Currencies{
diff --git a/intl/icu/source/data/curr/gu.txt b/intl/icu/source/data/curr/gu.txt
index ba923bfa9..6edb6c086 100644
--- a/intl/icu/source/data/curr/gu.txt
+++ b/intl/icu/source/data/curr/gu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gu{
Currencies{
diff --git a/intl/icu/source/data/curr/guz.txt b/intl/icu/source/data/curr/guz.txt
index 6a34037e2..137c851aa 100644
--- a/intl/icu/source/data/curr/guz.txt
+++ b/intl/icu/source/data/curr/guz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
guz{
Currencies{
diff --git a/intl/icu/source/data/curr/gv.txt b/intl/icu/source/data/curr/gv.txt
index 5e6a4fa69..d277c1c0c 100644
--- a/intl/icu/source/data/curr/gv.txt
+++ b/intl/icu/source/data/curr/gv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gv{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/ha.txt b/intl/icu/source/data/curr/ha.txt
index aa762baf3..afcdb2014 100644
--- a/intl/icu/source/data/curr/ha.txt
+++ b/intl/icu/source/data/curr/ha.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ha{
Currencies{
diff --git a/intl/icu/source/data/curr/ha_GH.txt b/intl/icu/source/data/curr/ha_GH.txt
index 35c7a35b9..4fe68662e 100644
--- a/intl/icu/source/data/curr/ha_GH.txt
+++ b/intl/icu/source/data/curr/ha_GH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ha_GH{
Currencies{
diff --git a/intl/icu/source/data/curr/haw.txt b/intl/icu/source/data/curr/haw.txt
index adfab5038..02ae42c65 100644
--- a/intl/icu/source/data/curr/haw.txt
+++ b/intl/icu/source/data/curr/haw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
haw{
Currencies{
diff --git a/intl/icu/source/data/curr/he.txt b/intl/icu/source/data/curr/he.txt
index 98565903c..f23354da6 100644
--- a/intl/icu/source/data/curr/he.txt
+++ b/intl/icu/source/data/curr/he.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
he{
Currencies{
diff --git a/intl/icu/source/data/curr/he_IL.txt b/intl/icu/source/data/curr/he_IL.txt
index 71039533a..c4c98fed2 100644
--- a/intl/icu/source/data/curr/he_IL.txt
+++ b/intl/icu/source/data/curr/he_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/hi.txt b/intl/icu/source/data/curr/hi.txt
index 9e8d9476b..d349c07e2 100644
--- a/intl/icu/source/data/curr/hi.txt
+++ b/intl/icu/source/data/curr/hi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hi{
Currencies{
diff --git a/intl/icu/source/data/curr/hr.txt b/intl/icu/source/data/curr/hr.txt
index 0e2bd966d..749985c68 100644
--- a/intl/icu/source/data/curr/hr.txt
+++ b/intl/icu/source/data/curr/hr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hr{
Currencies{
diff --git a/intl/icu/source/data/curr/hr_BA.txt b/intl/icu/source/data/curr/hr_BA.txt
index badaa7892..e609a2e88 100644
--- a/intl/icu/source/data/curr/hr_BA.txt
+++ b/intl/icu/source/data/curr/hr_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hr_BA{
Currencies{
diff --git a/intl/icu/source/data/curr/hsb.txt b/intl/icu/source/data/curr/hsb.txt
index e17714e26..06fe68152 100644
--- a/intl/icu/source/data/curr/hsb.txt
+++ b/intl/icu/source/data/curr/hsb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hsb{
Currencies{
diff --git a/intl/icu/source/data/curr/hu.txt b/intl/icu/source/data/curr/hu.txt
index 5819ac609..0c74aabe1 100644
--- a/intl/icu/source/data/curr/hu.txt
+++ b/intl/icu/source/data/curr/hu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hu{
Currencies{
diff --git a/intl/icu/source/data/curr/hy.txt b/intl/icu/source/data/curr/hy.txt
index a938a5dcb..3ade0e2b4 100644
--- a/intl/icu/source/data/curr/hy.txt
+++ b/intl/icu/source/data/curr/hy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hy{
Currencies{
diff --git a/intl/icu/source/data/curr/id.txt b/intl/icu/source/data/curr/id.txt
index ff7d4e7cc..814a26b0d 100644
--- a/intl/icu/source/data/curr/id.txt
+++ b/intl/icu/source/data/curr/id.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
id{
Currencies{
diff --git a/intl/icu/source/data/curr/id_ID.txt b/intl/icu/source/data/curr/id_ID.txt
index 20daa236e..e7af68c1b 100644
--- a/intl/icu/source/data/curr/id_ID.txt
+++ b/intl/icu/source/data/curr/id_ID.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/ig.txt b/intl/icu/source/data/curr/ig.txt
index 34a471754..d1bf0b7be 100644
--- a/intl/icu/source/data/curr/ig.txt
+++ b/intl/icu/source/data/curr/ig.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ig{
Currencies{
diff --git a/intl/icu/source/data/curr/ii.txt b/intl/icu/source/data/curr/ii.txt
index e5af68d6d..99357b6ed 100644
--- a/intl/icu/source/data/curr/ii.txt
+++ b/intl/icu/source/data/curr/ii.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ii{
Currencies{
diff --git a/intl/icu/source/data/curr/in.txt b/intl/icu/source/data/curr/in.txt
index 02335238a..05ecf2873 100644
--- a/intl/icu/source/data/curr/in.txt
+++ b/intl/icu/source/data/curr/in.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
in{
"%%ALIAS"{"id"}
diff --git a/intl/icu/source/data/curr/in_ID.txt b/intl/icu/source/data/curr/in_ID.txt
index acec72c6e..9f9ef5ff1 100644
--- a/intl/icu/source/data/curr/in_ID.txt
+++ b/intl/icu/source/data/curr/in_ID.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
in_ID{
"%%ALIAS"{"id_ID"}
diff --git a/intl/icu/source/data/curr/is.txt b/intl/icu/source/data/curr/is.txt
index 1fecff94e..275ddd684 100644
--- a/intl/icu/source/data/curr/is.txt
+++ b/intl/icu/source/data/curr/is.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
is{
Currencies{
diff --git a/intl/icu/source/data/curr/it.txt b/intl/icu/source/data/curr/it.txt
index f1dc18681..7a0be39e1 100644
--- a/intl/icu/source/data/curr/it.txt
+++ b/intl/icu/source/data/curr/it.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
it{
Currencies{
diff --git a/intl/icu/source/data/curr/iw.txt b/intl/icu/source/data/curr/iw.txt
index d59865d1c..8d9fabbe3 100644
--- a/intl/icu/source/data/curr/iw.txt
+++ b/intl/icu/source/data/curr/iw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
iw{
"%%ALIAS"{"he"}
diff --git a/intl/icu/source/data/curr/iw_IL.txt b/intl/icu/source/data/curr/iw_IL.txt
index cf1666a68..3976d06e2 100644
--- a/intl/icu/source/data/curr/iw_IL.txt
+++ b/intl/icu/source/data/curr/iw_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
iw_IL{
"%%ALIAS"{"he_IL"}
diff --git a/intl/icu/source/data/curr/ja.txt b/intl/icu/source/data/curr/ja.txt
index faedb20fb..babe6a7e7 100644
--- a/intl/icu/source/data/curr/ja.txt
+++ b/intl/icu/source/data/curr/ja.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ja{
Currencies{
diff --git a/intl/icu/source/data/curr/ja_JP.txt b/intl/icu/source/data/curr/ja_JP.txt
index 933dd40c6..c9911f147 100644
--- a/intl/icu/source/data/curr/ja_JP.txt
+++ b/intl/icu/source/data/curr/ja_JP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/ja_JP_TRADITIONAL.txt b/intl/icu/source/data/curr/ja_JP_TRADITIONAL.txt
index 2a23df32f..0965cc557 100644
--- a/intl/icu/source/data/curr/ja_JP_TRADITIONAL.txt
+++ b/intl/icu/source/data/curr/ja_JP_TRADITIONAL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ja_JP_TRADITIONAL{
calendar{
diff --git a/intl/icu/source/data/curr/jgo.txt b/intl/icu/source/data/curr/jgo.txt
index e5790f112..43276528a 100644
--- a/intl/icu/source/data/curr/jgo.txt
+++ b/intl/icu/source/data/curr/jgo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
jgo{
Currencies{
diff --git a/intl/icu/source/data/curr/jmc.txt b/intl/icu/source/data/curr/jmc.txt
index 5bd7d313c..2d6c6e234 100644
--- a/intl/icu/source/data/curr/jmc.txt
+++ b/intl/icu/source/data/curr/jmc.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
jmc{
Currencies{
diff --git a/intl/icu/source/data/curr/ka.txt b/intl/icu/source/data/curr/ka.txt
index 4b12e891d..5a9cb7f56 100644
--- a/intl/icu/source/data/curr/ka.txt
+++ b/intl/icu/source/data/curr/ka.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ka{
Currencies{
diff --git a/intl/icu/source/data/curr/kab.txt b/intl/icu/source/data/curr/kab.txt
index db819d675..ac962dc35 100644
--- a/intl/icu/source/data/curr/kab.txt
+++ b/intl/icu/source/data/curr/kab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kab{
Currencies{
diff --git a/intl/icu/source/data/curr/kam.txt b/intl/icu/source/data/curr/kam.txt
index f5f0a8c27..ec2810cf1 100644
--- a/intl/icu/source/data/curr/kam.txt
+++ b/intl/icu/source/data/curr/kam.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kam{
Currencies{
diff --git a/intl/icu/source/data/curr/kde.txt b/intl/icu/source/data/curr/kde.txt
index 2e2067ea9..51139a2b4 100644
--- a/intl/icu/source/data/curr/kde.txt
+++ b/intl/icu/source/data/curr/kde.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kde{
Currencies{
diff --git a/intl/icu/source/data/curr/kea.txt b/intl/icu/source/data/curr/kea.txt
index 4866b28e7..119ca75a6 100644
--- a/intl/icu/source/data/curr/kea.txt
+++ b/intl/icu/source/data/curr/kea.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kea{
Currencies{
diff --git a/intl/icu/source/data/curr/khq.txt b/intl/icu/source/data/curr/khq.txt
index c540424a8..c1a63cf2d 100644
--- a/intl/icu/source/data/curr/khq.txt
+++ b/intl/icu/source/data/curr/khq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
khq{
Currencies{
diff --git a/intl/icu/source/data/curr/ki.txt b/intl/icu/source/data/curr/ki.txt
index 332e3f345..f554b4ec0 100644
--- a/intl/icu/source/data/curr/ki.txt
+++ b/intl/icu/source/data/curr/ki.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ki{
Currencies{
diff --git a/intl/icu/source/data/curr/kk.txt b/intl/icu/source/data/curr/kk.txt
index f22f113fa..c0ac03055 100644
--- a/intl/icu/source/data/curr/kk.txt
+++ b/intl/icu/source/data/curr/kk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kk{
Currencies{
diff --git a/intl/icu/source/data/curr/kkj.txt b/intl/icu/source/data/curr/kkj.txt
index 513488837..7b513ecb1 100644
--- a/intl/icu/source/data/curr/kkj.txt
+++ b/intl/icu/source/data/curr/kkj.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kkj{
Currencies{
diff --git a/intl/icu/source/data/curr/kl.txt b/intl/icu/source/data/curr/kl.txt
index 1b2d326b8..331aecbe6 100644
--- a/intl/icu/source/data/curr/kl.txt
+++ b/intl/icu/source/data/curr/kl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kl{
Currencies{
diff --git a/intl/icu/source/data/curr/kln.txt b/intl/icu/source/data/curr/kln.txt
index 91e164643..a2a496408 100644
--- a/intl/icu/source/data/curr/kln.txt
+++ b/intl/icu/source/data/curr/kln.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kln{
Currencies{
diff --git a/intl/icu/source/data/curr/km.txt b/intl/icu/source/data/curr/km.txt
index c5b21e5d5..b5ef54d0e 100644
--- a/intl/icu/source/data/curr/km.txt
+++ b/intl/icu/source/data/curr/km.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
km{
Currencies{
diff --git a/intl/icu/source/data/curr/kn.txt b/intl/icu/source/data/curr/kn.txt
index 0e2a2226e..720d39938 100644
--- a/intl/icu/source/data/curr/kn.txt
+++ b/intl/icu/source/data/curr/kn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kn{
Currencies{
diff --git a/intl/icu/source/data/curr/ko.txt b/intl/icu/source/data/curr/ko.txt
index 5f28e5523..20e94b618 100644
--- a/intl/icu/source/data/curr/ko.txt
+++ b/intl/icu/source/data/curr/ko.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ko{
Currencies{
diff --git a/intl/icu/source/data/curr/kok.txt b/intl/icu/source/data/curr/kok.txt
index ab733bbc8..8e7cba178 100644
--- a/intl/icu/source/data/curr/kok.txt
+++ b/intl/icu/source/data/curr/kok.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kok{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/ks.txt b/intl/icu/source/data/curr/ks.txt
index eecc4e4f6..dfeba327f 100644
--- a/intl/icu/source/data/curr/ks.txt
+++ b/intl/icu/source/data/curr/ks.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ks{
Currencies{
diff --git a/intl/icu/source/data/curr/ksb.txt b/intl/icu/source/data/curr/ksb.txt
index a2d388247..ce38119e7 100644
--- a/intl/icu/source/data/curr/ksb.txt
+++ b/intl/icu/source/data/curr/ksb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksb{
Currencies{
diff --git a/intl/icu/source/data/curr/ksf.txt b/intl/icu/source/data/curr/ksf.txt
index 33dc5a5bd..34687df36 100644
--- a/intl/icu/source/data/curr/ksf.txt
+++ b/intl/icu/source/data/curr/ksf.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksf{
Currencies{
diff --git a/intl/icu/source/data/curr/ksh.txt b/intl/icu/source/data/curr/ksh.txt
index 4c2c0afed..6abae7224 100644
--- a/intl/icu/source/data/curr/ksh.txt
+++ b/intl/icu/source/data/curr/ksh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksh{
Currencies{
diff --git a/intl/icu/source/data/curr/kw.txt b/intl/icu/source/data/curr/kw.txt
index 29bf74918..f7fe9d972 100644
--- a/intl/icu/source/data/curr/kw.txt
+++ b/intl/icu/source/data/curr/kw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kw{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/ky.txt b/intl/icu/source/data/curr/ky.txt
index e7268c7f9..e9eb1aa74 100644
--- a/intl/icu/source/data/curr/ky.txt
+++ b/intl/icu/source/data/curr/ky.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ky{
Currencies{
diff --git a/intl/icu/source/data/curr/lag.txt b/intl/icu/source/data/curr/lag.txt
index 11952ebc5..cfdc61038 100644
--- a/intl/icu/source/data/curr/lag.txt
+++ b/intl/icu/source/data/curr/lag.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lag{
Currencies{
diff --git a/intl/icu/source/data/curr/lb.txt b/intl/icu/source/data/curr/lb.txt
index 266094fcd..b8cfaaa97 100644
--- a/intl/icu/source/data/curr/lb.txt
+++ b/intl/icu/source/data/curr/lb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lb{
Currencies{
diff --git a/intl/icu/source/data/curr/lg.txt b/intl/icu/source/data/curr/lg.txt
index 8815e9c6f..4b727f3c3 100644
--- a/intl/icu/source/data/curr/lg.txt
+++ b/intl/icu/source/data/curr/lg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lg{
Currencies{
diff --git a/intl/icu/source/data/curr/lkt.txt b/intl/icu/source/data/curr/lkt.txt
index f35823394..20ea5bde7 100644
--- a/intl/icu/source/data/curr/lkt.txt
+++ b/intl/icu/source/data/curr/lkt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lkt{
Currencies{
diff --git a/intl/icu/source/data/curr/ln.txt b/intl/icu/source/data/curr/ln.txt
index 43c067530..c07f7d469 100644
--- a/intl/icu/source/data/curr/ln.txt
+++ b/intl/icu/source/data/curr/ln.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln{
Currencies{
diff --git a/intl/icu/source/data/curr/ln_AO.txt b/intl/icu/source/data/curr/ln_AO.txt
index bbea9e116..b04b771cf 100644
--- a/intl/icu/source/data/curr/ln_AO.txt
+++ b/intl/icu/source/data/curr/ln_AO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln_AO{
Currencies{
diff --git a/intl/icu/source/data/curr/lo.txt b/intl/icu/source/data/curr/lo.txt
index 80c617a98..601a75ef5 100644
--- a/intl/icu/source/data/curr/lo.txt
+++ b/intl/icu/source/data/curr/lo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lo{
Currencies{
diff --git a/intl/icu/source/data/curr/lrc.txt b/intl/icu/source/data/curr/lrc.txt
index 025cc99b3..abe1f1c47 100644
--- a/intl/icu/source/data/curr/lrc.txt
+++ b/intl/icu/source/data/curr/lrc.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lrc{
Currencies{
diff --git a/intl/icu/source/data/curr/lt.txt b/intl/icu/source/data/curr/lt.txt
index dcbbea3e9..01cf0cc9f 100644
--- a/intl/icu/source/data/curr/lt.txt
+++ b/intl/icu/source/data/curr/lt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lt{
Currencies{
diff --git a/intl/icu/source/data/curr/lu.txt b/intl/icu/source/data/curr/lu.txt
index 05be447ef..c3f979e07 100644
--- a/intl/icu/source/data/curr/lu.txt
+++ b/intl/icu/source/data/curr/lu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lu{
Currencies{
diff --git a/intl/icu/source/data/curr/luo.txt b/intl/icu/source/data/curr/luo.txt
index 595cce7dc..8ef4b04f2 100644
--- a/intl/icu/source/data/curr/luo.txt
+++ b/intl/icu/source/data/curr/luo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
luo{
Currencies{
diff --git a/intl/icu/source/data/curr/luy.txt b/intl/icu/source/data/curr/luy.txt
index b512ac3b7..9cb2d7125 100644
--- a/intl/icu/source/data/curr/luy.txt
+++ b/intl/icu/source/data/curr/luy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
luy{
Currencies{
diff --git a/intl/icu/source/data/curr/lv.txt b/intl/icu/source/data/curr/lv.txt
index ffdb58615..b084e3ddb 100644
--- a/intl/icu/source/data/curr/lv.txt
+++ b/intl/icu/source/data/curr/lv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lv{
Currencies{
diff --git a/intl/icu/source/data/curr/mas.txt b/intl/icu/source/data/curr/mas.txt
index f1ac7597f..9fe801d79 100644
--- a/intl/icu/source/data/curr/mas.txt
+++ b/intl/icu/source/data/curr/mas.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mas{
Currencies{
diff --git a/intl/icu/source/data/curr/mas_TZ.txt b/intl/icu/source/data/curr/mas_TZ.txt
index 4bbf5d4cf..ac25d747c 100644
--- a/intl/icu/source/data/curr/mas_TZ.txt
+++ b/intl/icu/source/data/curr/mas_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mas_TZ{
Currencies{
diff --git a/intl/icu/source/data/curr/mer.txt b/intl/icu/source/data/curr/mer.txt
index 13c9fea2a..2ecefc343 100644
--- a/intl/icu/source/data/curr/mer.txt
+++ b/intl/icu/source/data/curr/mer.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mer{
Currencies{
diff --git a/intl/icu/source/data/curr/mfe.txt b/intl/icu/source/data/curr/mfe.txt
index 63600646d..9aac93faf 100644
--- a/intl/icu/source/data/curr/mfe.txt
+++ b/intl/icu/source/data/curr/mfe.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mfe{
Currencies{
diff --git a/intl/icu/source/data/curr/mg.txt b/intl/icu/source/data/curr/mg.txt
index eff0a0aba..c134934fc 100644
--- a/intl/icu/source/data/curr/mg.txt
+++ b/intl/icu/source/data/curr/mg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mg{
Currencies{
diff --git a/intl/icu/source/data/curr/mgh.txt b/intl/icu/source/data/curr/mgh.txt
index 5dca1ff3a..0c4b52207 100644
--- a/intl/icu/source/data/curr/mgh.txt
+++ b/intl/icu/source/data/curr/mgh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mgh{
Currencies{
diff --git a/intl/icu/source/data/curr/mgo.txt b/intl/icu/source/data/curr/mgo.txt
index 26cd36557..5ad9f9995 100644
--- a/intl/icu/source/data/curr/mgo.txt
+++ b/intl/icu/source/data/curr/mgo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mgo{
Currencies{
diff --git a/intl/icu/source/data/curr/mk.txt b/intl/icu/source/data/curr/mk.txt
index a594b9ce8..45767835b 100644
--- a/intl/icu/source/data/curr/mk.txt
+++ b/intl/icu/source/data/curr/mk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mk{
Currencies{
diff --git a/intl/icu/source/data/curr/ml.txt b/intl/icu/source/data/curr/ml.txt
index f84b0625f..08b9c60c0 100644
--- a/intl/icu/source/data/curr/ml.txt
+++ b/intl/icu/source/data/curr/ml.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ml{
Currencies{
diff --git a/intl/icu/source/data/curr/mn.txt b/intl/icu/source/data/curr/mn.txt
index 4daf3e974..684b8542a 100644
--- a/intl/icu/source/data/curr/mn.txt
+++ b/intl/icu/source/data/curr/mn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mn{
Currencies{
diff --git a/intl/icu/source/data/curr/mo.txt b/intl/icu/source/data/curr/mo.txt
index 64025913d..a698deb33 100644
--- a/intl/icu/source/data/curr/mo.txt
+++ b/intl/icu/source/data/curr/mo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mo{
"%%ALIAS"{"ro_MD"}
diff --git a/intl/icu/source/data/curr/mr.txt b/intl/icu/source/data/curr/mr.txt
index fd26f6038..13d6adf62 100644
--- a/intl/icu/source/data/curr/mr.txt
+++ b/intl/icu/source/data/curr/mr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mr{
Currencies{
diff --git a/intl/icu/source/data/curr/ms.txt b/intl/icu/source/data/curr/ms.txt
index c3899f60e..a613caa69 100644
--- a/intl/icu/source/data/curr/ms.txt
+++ b/intl/icu/source/data/curr/ms.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms{
Currencies{
diff --git a/intl/icu/source/data/curr/ms_BN.txt b/intl/icu/source/data/curr/ms_BN.txt
index a6f28ef2b..0f47952c9 100644
--- a/intl/icu/source/data/curr/ms_BN.txt
+++ b/intl/icu/source/data/curr/ms_BN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms_BN{
Currencies{
diff --git a/intl/icu/source/data/curr/ms_SG.txt b/intl/icu/source/data/curr/ms_SG.txt
index 16d8a5c7b..2fcf309e7 100644
--- a/intl/icu/source/data/curr/ms_SG.txt
+++ b/intl/icu/source/data/curr/ms_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms_SG{
Currencies{
diff --git a/intl/icu/source/data/curr/mt.txt b/intl/icu/source/data/curr/mt.txt
index f9670bd93..974d54ad3 100644
--- a/intl/icu/source/data/curr/mt.txt
+++ b/intl/icu/source/data/curr/mt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mt{
Currencies{
diff --git a/intl/icu/source/data/curr/mua.txt b/intl/icu/source/data/curr/mua.txt
index 1a97a923e..11c13e781 100644
--- a/intl/icu/source/data/curr/mua.txt
+++ b/intl/icu/source/data/curr/mua.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mua{
Currencies{
diff --git a/intl/icu/source/data/curr/my.txt b/intl/icu/source/data/curr/my.txt
index aa4390012..92d5468a4 100644
--- a/intl/icu/source/data/curr/my.txt
+++ b/intl/icu/source/data/curr/my.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
my{
Currencies{
diff --git a/intl/icu/source/data/curr/mzn.txt b/intl/icu/source/data/curr/mzn.txt
index db86c7d56..eb771d332 100644
--- a/intl/icu/source/data/curr/mzn.txt
+++ b/intl/icu/source/data/curr/mzn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mzn{
Currencies{
diff --git a/intl/icu/source/data/curr/naq.txt b/intl/icu/source/data/curr/naq.txt
index f1664f70f..5d623be15 100644
--- a/intl/icu/source/data/curr/naq.txt
+++ b/intl/icu/source/data/curr/naq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
naq{
Currencies{
diff --git a/intl/icu/source/data/curr/nb.txt b/intl/icu/source/data/curr/nb.txt
index d6285e5d1..17c58e631 100644
--- a/intl/icu/source/data/curr/nb.txt
+++ b/intl/icu/source/data/curr/nb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nb{
Currencies{
diff --git a/intl/icu/source/data/curr/nb_NO.txt b/intl/icu/source/data/curr/nb_NO.txt
index fdac28bf6..dcfaf4a4e 100644
--- a/intl/icu/source/data/curr/nb_NO.txt
+++ b/intl/icu/source/data/curr/nb_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/nd.txt b/intl/icu/source/data/curr/nd.txt
index 94cd85304..53faf6580 100644
--- a/intl/icu/source/data/curr/nd.txt
+++ b/intl/icu/source/data/curr/nd.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nd{
Currencies{
diff --git a/intl/icu/source/data/curr/nds.txt b/intl/icu/source/data/curr/nds.txt
index f5e699cbb..fbf3a026c 100644
--- a/intl/icu/source/data/curr/nds.txt
+++ b/intl/icu/source/data/curr/nds.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nds{
Version{"2.1.28.71"}
diff --git a/intl/icu/source/data/curr/ne.txt b/intl/icu/source/data/curr/ne.txt
index 337e22388..e72e4fc82 100644
--- a/intl/icu/source/data/curr/ne.txt
+++ b/intl/icu/source/data/curr/ne.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ne{
Currencies{
diff --git a/intl/icu/source/data/curr/nl.txt b/intl/icu/source/data/curr/nl.txt
index f7b26d417..680d0fcc2 100644
--- a/intl/icu/source/data/curr/nl.txt
+++ b/intl/icu/source/data/curr/nl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl{
Currencies{
diff --git a/intl/icu/source/data/curr/nl_AW.txt b/intl/icu/source/data/curr/nl_AW.txt
index 3b2c77177..3d73c4be4 100644
--- a/intl/icu/source/data/curr/nl_AW.txt
+++ b/intl/icu/source/data/curr/nl_AW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_AW{
Currencies{
diff --git a/intl/icu/source/data/curr/nl_BQ.txt b/intl/icu/source/data/curr/nl_BQ.txt
index f559dfac8..a914b7a08 100644
--- a/intl/icu/source/data/curr/nl_BQ.txt
+++ b/intl/icu/source/data/curr/nl_BQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_BQ{
Currencies{
diff --git a/intl/icu/source/data/curr/nl_CW.txt b/intl/icu/source/data/curr/nl_CW.txt
index a7b88878c..58efd4aa8 100644
--- a/intl/icu/source/data/curr/nl_CW.txt
+++ b/intl/icu/source/data/curr/nl_CW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_CW{
Currencies{
diff --git a/intl/icu/source/data/curr/nl_SR.txt b/intl/icu/source/data/curr/nl_SR.txt
index ce4749516..cff718abd 100644
--- a/intl/icu/source/data/curr/nl_SR.txt
+++ b/intl/icu/source/data/curr/nl_SR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_SR{
Currencies{
diff --git a/intl/icu/source/data/curr/nl_SX.txt b/intl/icu/source/data/curr/nl_SX.txt
index a17565603..57eba33d8 100644
--- a/intl/icu/source/data/curr/nl_SX.txt
+++ b/intl/icu/source/data/curr/nl_SX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_SX{
Currencies{
diff --git a/intl/icu/source/data/curr/nmg.txt b/intl/icu/source/data/curr/nmg.txt
index 0959894ab..81b8994c8 100644
--- a/intl/icu/source/data/curr/nmg.txt
+++ b/intl/icu/source/data/curr/nmg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nmg{
Currencies{
diff --git a/intl/icu/source/data/curr/nn.txt b/intl/icu/source/data/curr/nn.txt
index fbe7e2b9b..8eb466e93 100644
--- a/intl/icu/source/data/curr/nn.txt
+++ b/intl/icu/source/data/curr/nn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nn{
Currencies{
diff --git a/intl/icu/source/data/curr/nn_NO.txt b/intl/icu/source/data/curr/nn_NO.txt
index 4e8a5f78d..5793f5f55 100644
--- a/intl/icu/source/data/curr/nn_NO.txt
+++ b/intl/icu/source/data/curr/nn_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/nnh.txt b/intl/icu/source/data/curr/nnh.txt
index 75a8ecef6..abdf12b0b 100644
--- a/intl/icu/source/data/curr/nnh.txt
+++ b/intl/icu/source/data/curr/nnh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nnh{
Currencies{
diff --git a/intl/icu/source/data/curr/no.txt b/intl/icu/source/data/curr/no.txt
index 097a923cd..8b021f546 100644
--- a/intl/icu/source/data/curr/no.txt
+++ b/intl/icu/source/data/curr/no.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no{
"%%ALIAS"{"nb"}
diff --git a/intl/icu/source/data/curr/no_NO.txt b/intl/icu/source/data/curr/no_NO.txt
index 188a8a4a6..b3403f663 100644
--- a/intl/icu/source/data/curr/no_NO.txt
+++ b/intl/icu/source/data/curr/no_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no_NO{
"%%ALIAS"{"nb_NO"}
diff --git a/intl/icu/source/data/curr/no_NO_NY.txt b/intl/icu/source/data/curr/no_NO_NY.txt
index aa897fe6f..c380c1c3e 100644
--- a/intl/icu/source/data/curr/no_NO_NY.txt
+++ b/intl/icu/source/data/curr/no_NO_NY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no_NO_NY{
"%%ALIAS"{"nn_NO"}
diff --git a/intl/icu/source/data/curr/nus.txt b/intl/icu/source/data/curr/nus.txt
index db086658d..43f75b157 100644
--- a/intl/icu/source/data/curr/nus.txt
+++ b/intl/icu/source/data/curr/nus.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nus{
Currencies{
diff --git a/intl/icu/source/data/curr/nyn.txt b/intl/icu/source/data/curr/nyn.txt
index 4df096fda..0850215e9 100644
--- a/intl/icu/source/data/curr/nyn.txt
+++ b/intl/icu/source/data/curr/nyn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nyn{
Currencies{
diff --git a/intl/icu/source/data/curr/om.txt b/intl/icu/source/data/curr/om.txt
index f99249604..6c336aa01 100644
--- a/intl/icu/source/data/curr/om.txt
+++ b/intl/icu/source/data/curr/om.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
om{
Currencies{
diff --git a/intl/icu/source/data/curr/om_KE.txt b/intl/icu/source/data/curr/om_KE.txt
index ffbd98d34..fe05cc453 100644
--- a/intl/icu/source/data/curr/om_KE.txt
+++ b/intl/icu/source/data/curr/om_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
om_KE{
Currencies{
diff --git a/intl/icu/source/data/curr/or.txt b/intl/icu/source/data/curr/or.txt
index 229e45779..e5ef4a508 100644
--- a/intl/icu/source/data/curr/or.txt
+++ b/intl/icu/source/data/curr/or.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
or{
Currencies{
diff --git a/intl/icu/source/data/curr/os.txt b/intl/icu/source/data/curr/os.txt
index 27ce44e36..b09b08e0e 100644
--- a/intl/icu/source/data/curr/os.txt
+++ b/intl/icu/source/data/curr/os.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
os{
Currencies{
diff --git a/intl/icu/source/data/curr/os_RU.txt b/intl/icu/source/data/curr/os_RU.txt
index 1a513cd5d..67dafaab6 100644
--- a/intl/icu/source/data/curr/os_RU.txt
+++ b/intl/icu/source/data/curr/os_RU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
os_RU{
Currencies{
diff --git a/intl/icu/source/data/curr/pa.txt b/intl/icu/source/data/curr/pa.txt
index 394587df1..7fb7da484 100644
--- a/intl/icu/source/data/curr/pa.txt
+++ b/intl/icu/source/data/curr/pa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa{
Currencies{
diff --git a/intl/icu/source/data/curr/pa_Arab.txt b/intl/icu/source/data/curr/pa_Arab.txt
index 114969c4a..1f1cb640d 100644
--- a/intl/icu/source/data/curr/pa_Arab.txt
+++ b/intl/icu/source/data/curr/pa_Arab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_Arab{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/pa_Arab_PK.txt b/intl/icu/source/data/curr/pa_Arab_PK.txt
index e6b58610a..921493302 100644
--- a/intl/icu/source/data/curr/pa_Arab_PK.txt
+++ b/intl/icu/source/data/curr/pa_Arab_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/pa_Guru.txt b/intl/icu/source/data/curr/pa_Guru.txt
index f060f3b8d..f0313fa28 100644
--- a/intl/icu/source/data/curr/pa_Guru.txt
+++ b/intl/icu/source/data/curr/pa_Guru.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_Guru{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/pa_Guru_IN.txt b/intl/icu/source/data/curr/pa_Guru_IN.txt
index adeae3fec..9c26f66bd 100644
--- a/intl/icu/source/data/curr/pa_Guru_IN.txt
+++ b/intl/icu/source/data/curr/pa_Guru_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/pa_IN.txt b/intl/icu/source/data/curr/pa_IN.txt
index b18bba68d..0c4702dd8 100644
--- a/intl/icu/source/data/curr/pa_IN.txt
+++ b/intl/icu/source/data/curr/pa_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_IN{
"%%ALIAS"{"pa_Guru_IN"}
diff --git a/intl/icu/source/data/curr/pa_PK.txt b/intl/icu/source/data/curr/pa_PK.txt
index 1c66c7b37..24e745c3f 100644
--- a/intl/icu/source/data/curr/pa_PK.txt
+++ b/intl/icu/source/data/curr/pa_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_PK{
"%%ALIAS"{"pa_Arab_PK"}
diff --git a/intl/icu/source/data/curr/pl.txt b/intl/icu/source/data/curr/pl.txt
index 55f2a4b90..a23121641 100644
--- a/intl/icu/source/data/curr/pl.txt
+++ b/intl/icu/source/data/curr/pl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pl{
Currencies{
diff --git a/intl/icu/source/data/curr/ps.txt b/intl/icu/source/data/curr/ps.txt
index 936a371b7..a1ff222dc 100644
--- a/intl/icu/source/data/curr/ps.txt
+++ b/intl/icu/source/data/curr/ps.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ps{
Currencies{
diff --git a/intl/icu/source/data/curr/pt.txt b/intl/icu/source/data/curr/pt.txt
index e9660c1a3..f2682d2fa 100644
--- a/intl/icu/source/data/curr/pt.txt
+++ b/intl/icu/source/data/curr/pt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt{
Currencies{
diff --git a/intl/icu/source/data/curr/pt_AO.txt b/intl/icu/source/data/curr/pt_AO.txt
index cd71fce5b..e05e94655 100644
--- a/intl/icu/source/data/curr/pt_AO.txt
+++ b/intl/icu/source/data/curr/pt_AO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_AO{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_CH.txt b/intl/icu/source/data/curr/pt_CH.txt
index 5f1b386fe..a8855c5db 100644
--- a/intl/icu/source/data/curr/pt_CH.txt
+++ b/intl/icu/source/data/curr/pt_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_CH{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_CV.txt b/intl/icu/source/data/curr/pt_CV.txt
index 8da52b336..a0ac340fe 100644
--- a/intl/icu/source/data/curr/pt_CV.txt
+++ b/intl/icu/source/data/curr/pt_CV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_CV{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_GQ.txt b/intl/icu/source/data/curr/pt_GQ.txt
index 5a098d1e9..981da7b3d 100644
--- a/intl/icu/source/data/curr/pt_GQ.txt
+++ b/intl/icu/source/data/curr/pt_GQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_GQ{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_GW.txt b/intl/icu/source/data/curr/pt_GW.txt
index 67e6e72a5..ffc135383 100644
--- a/intl/icu/source/data/curr/pt_GW.txt
+++ b/intl/icu/source/data/curr/pt_GW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_GW{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_LU.txt b/intl/icu/source/data/curr/pt_LU.txt
index b7a9f14fb..12d3d3af9 100644
--- a/intl/icu/source/data/curr/pt_LU.txt
+++ b/intl/icu/source/data/curr/pt_LU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_LU{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_MO.txt b/intl/icu/source/data/curr/pt_MO.txt
index 9be763dbe..a1c3e11a7 100644
--- a/intl/icu/source/data/curr/pt_MO.txt
+++ b/intl/icu/source/data/curr/pt_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_MO{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_MZ.txt b/intl/icu/source/data/curr/pt_MZ.txt
index b77484c36..ac36194a4 100644
--- a/intl/icu/source/data/curr/pt_MZ.txt
+++ b/intl/icu/source/data/curr/pt_MZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_MZ{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_PT.txt b/intl/icu/source/data/curr/pt_PT.txt
index 06e6b06e9..57708fb19 100644
--- a/intl/icu/source/data/curr/pt_PT.txt
+++ b/intl/icu/source/data/curr/pt_PT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_PT{
Currencies{
diff --git a/intl/icu/source/data/curr/pt_ST.txt b/intl/icu/source/data/curr/pt_ST.txt
index 591d64f68..fe3030d2c 100644
--- a/intl/icu/source/data/curr/pt_ST.txt
+++ b/intl/icu/source/data/curr/pt_ST.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_ST{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/pt_TL.txt b/intl/icu/source/data/curr/pt_TL.txt
index 68cb6417e..5cb3c508a 100644
--- a/intl/icu/source/data/curr/pt_TL.txt
+++ b/intl/icu/source/data/curr/pt_TL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_TL{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/curr/qu.txt b/intl/icu/source/data/curr/qu.txt
index f0bce8136..adc3894f9 100644
--- a/intl/icu/source/data/curr/qu.txt
+++ b/intl/icu/source/data/curr/qu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu{
Currencies{
diff --git a/intl/icu/source/data/curr/qu_BO.txt b/intl/icu/source/data/curr/qu_BO.txt
index 043c95779..6abe314d0 100644
--- a/intl/icu/source/data/curr/qu_BO.txt
+++ b/intl/icu/source/data/curr/qu_BO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu_BO{
Currencies{
diff --git a/intl/icu/source/data/curr/qu_EC.txt b/intl/icu/source/data/curr/qu_EC.txt
index 56348913f..eb89c4644 100644
--- a/intl/icu/source/data/curr/qu_EC.txt
+++ b/intl/icu/source/data/curr/qu_EC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu_EC{
Currencies{
diff --git a/intl/icu/source/data/curr/rm.txt b/intl/icu/source/data/curr/rm.txt
index 949abbcd0..373aa6610 100644
--- a/intl/icu/source/data/curr/rm.txt
+++ b/intl/icu/source/data/curr/rm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rm{
Currencies{
diff --git a/intl/icu/source/data/curr/rn.txt b/intl/icu/source/data/curr/rn.txt
index dea7d56cb..7ea14d949 100644
--- a/intl/icu/source/data/curr/rn.txt
+++ b/intl/icu/source/data/curr/rn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rn{
Currencies{
diff --git a/intl/icu/source/data/curr/ro.txt b/intl/icu/source/data/curr/ro.txt
index c203faae4..40f562d73 100644
--- a/intl/icu/source/data/curr/ro.txt
+++ b/intl/icu/source/data/curr/ro.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ro{
Currencies{
diff --git a/intl/icu/source/data/curr/ro_MD.txt b/intl/icu/source/data/curr/ro_MD.txt
index 01e0e9c8f..0383658bd 100644
--- a/intl/icu/source/data/curr/ro_MD.txt
+++ b/intl/icu/source/data/curr/ro_MD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ro_MD{
Currencies{
diff --git a/intl/icu/source/data/curr/rof.txt b/intl/icu/source/data/curr/rof.txt
index 7e3fd0580..a5d9b80f1 100644
--- a/intl/icu/source/data/curr/rof.txt
+++ b/intl/icu/source/data/curr/rof.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rof{
Currencies{
diff --git a/intl/icu/source/data/curr/root.txt b/intl/icu/source/data/curr/root.txt
index 4d2a6d372..ed77a093e 100644
--- a/intl/icu/source/data/curr/root.txt
+++ b/intl/icu/source/data/curr/root.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* ICU <specials> source: <path>/common/main/root.xml
diff --git a/intl/icu/source/data/curr/ru.txt b/intl/icu/source/data/curr/ru.txt
index ca6ba83cb..71bb3001b 100644
--- a/intl/icu/source/data/curr/ru.txt
+++ b/intl/icu/source/data/curr/ru.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru{
Currencies{
diff --git a/intl/icu/source/data/curr/ru_BY.txt b/intl/icu/source/data/curr/ru_BY.txt
index 72c1205cb..6e0fdfb6f 100644
--- a/intl/icu/source/data/curr/ru_BY.txt
+++ b/intl/icu/source/data/curr/ru_BY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_BY{
Currencies{
diff --git a/intl/icu/source/data/curr/ru_KG.txt b/intl/icu/source/data/curr/ru_KG.txt
index 48616f9c6..ab00a88cb 100644
--- a/intl/icu/source/data/curr/ru_KG.txt
+++ b/intl/icu/source/data/curr/ru_KG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_KG{
Currencies{
diff --git a/intl/icu/source/data/curr/ru_KZ.txt b/intl/icu/source/data/curr/ru_KZ.txt
index 26977c131..43b7fdc61 100644
--- a/intl/icu/source/data/curr/ru_KZ.txt
+++ b/intl/icu/source/data/curr/ru_KZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_KZ{
Currencies{
diff --git a/intl/icu/source/data/curr/ru_MD.txt b/intl/icu/source/data/curr/ru_MD.txt
index b28ca3eec..8cb0cc21c 100644
--- a/intl/icu/source/data/curr/ru_MD.txt
+++ b/intl/icu/source/data/curr/ru_MD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_MD{
Currencies{
diff --git a/intl/icu/source/data/curr/rw.txt b/intl/icu/source/data/curr/rw.txt
index 0a8154e4b..5b520d70b 100644
--- a/intl/icu/source/data/curr/rw.txt
+++ b/intl/icu/source/data/curr/rw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rw{
Currencies{
diff --git a/intl/icu/source/data/curr/rwk.txt b/intl/icu/source/data/curr/rwk.txt
index c17370c14..21473c35d 100644
--- a/intl/icu/source/data/curr/rwk.txt
+++ b/intl/icu/source/data/curr/rwk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rwk{
Currencies{
diff --git a/intl/icu/source/data/curr/sah.txt b/intl/icu/source/data/curr/sah.txt
index a57e32f56..8d00aa4b0 100644
--- a/intl/icu/source/data/curr/sah.txt
+++ b/intl/icu/source/data/curr/sah.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sah{
Currencies{
diff --git a/intl/icu/source/data/curr/saq.txt b/intl/icu/source/data/curr/saq.txt
index 68903cf43..9574b0668 100644
--- a/intl/icu/source/data/curr/saq.txt
+++ b/intl/icu/source/data/curr/saq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
saq{
Currencies{
diff --git a/intl/icu/source/data/curr/sbp.txt b/intl/icu/source/data/curr/sbp.txt
index 6444ec846..3cd81bba8 100644
--- a/intl/icu/source/data/curr/sbp.txt
+++ b/intl/icu/source/data/curr/sbp.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sbp{
Currencies{
diff --git a/intl/icu/source/data/curr/se.txt b/intl/icu/source/data/curr/se.txt
index fece573ad..589fdd788 100644
--- a/intl/icu/source/data/curr/se.txt
+++ b/intl/icu/source/data/curr/se.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
se{
Currencies{
diff --git a/intl/icu/source/data/curr/se_SE.txt b/intl/icu/source/data/curr/se_SE.txt
index 14b066c26..016d8349c 100644
--- a/intl/icu/source/data/curr/se_SE.txt
+++ b/intl/icu/source/data/curr/se_SE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
se_SE{
Currencies{
diff --git a/intl/icu/source/data/curr/seh.txt b/intl/icu/source/data/curr/seh.txt
index 4dc822d4b..95d0d2fc6 100644
--- a/intl/icu/source/data/curr/seh.txt
+++ b/intl/icu/source/data/curr/seh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
seh{
Currencies{
diff --git a/intl/icu/source/data/curr/ses.txt b/intl/icu/source/data/curr/ses.txt
index df6ee0ece..6207ea85e 100644
--- a/intl/icu/source/data/curr/ses.txt
+++ b/intl/icu/source/data/curr/ses.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ses{
Currencies{
diff --git a/intl/icu/source/data/curr/sg.txt b/intl/icu/source/data/curr/sg.txt
index 1bf16d668..372efa077 100644
--- a/intl/icu/source/data/curr/sg.txt
+++ b/intl/icu/source/data/curr/sg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sg{
Currencies{
diff --git a/intl/icu/source/data/curr/sh.txt b/intl/icu/source/data/curr/sh.txt
index 74b646a22..24ed34953 100644
--- a/intl/icu/source/data/curr/sh.txt
+++ b/intl/icu/source/data/curr/sh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh{
"%%ALIAS"{"sr_Latn"}
diff --git a/intl/icu/source/data/curr/sh_BA.txt b/intl/icu/source/data/curr/sh_BA.txt
index 93bdac63f..9cb7b42e9 100644
--- a/intl/icu/source/data/curr/sh_BA.txt
+++ b/intl/icu/source/data/curr/sh_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_BA{
"%%ALIAS"{"sr_Latn_BA"}
diff --git a/intl/icu/source/data/curr/sh_CS.txt b/intl/icu/source/data/curr/sh_CS.txt
index 224568a08..d9f1cba21 100644
--- a/intl/icu/source/data/curr/sh_CS.txt
+++ b/intl/icu/source/data/curr/sh_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_CS{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/curr/sh_YU.txt b/intl/icu/source/data/curr/sh_YU.txt
index 8a7d46098..d36ba555d 100644
--- a/intl/icu/source/data/curr/sh_YU.txt
+++ b/intl/icu/source/data/curr/sh_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_YU{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/curr/shi.txt b/intl/icu/source/data/curr/shi.txt
index 14890f8c3..571dfe212 100644
--- a/intl/icu/source/data/curr/shi.txt
+++ b/intl/icu/source/data/curr/shi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi{
Currencies{
diff --git a/intl/icu/source/data/curr/shi_Latn.txt b/intl/icu/source/data/curr/shi_Latn.txt
index 67db39ce6..f15d7471b 100644
--- a/intl/icu/source/data/curr/shi_Latn.txt
+++ b/intl/icu/source/data/curr/shi_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_Latn{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/shi_MA.txt b/intl/icu/source/data/curr/shi_MA.txt
index 00de1b1b2..1a317da47 100644
--- a/intl/icu/source/data/curr/shi_MA.txt
+++ b/intl/icu/source/data/curr/shi_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_MA{
"%%ALIAS"{"shi_Tfng_MA"}
diff --git a/intl/icu/source/data/curr/shi_Tfng.txt b/intl/icu/source/data/curr/shi_Tfng.txt
index 1713a5c08..d8a40c314 100644
--- a/intl/icu/source/data/curr/shi_Tfng.txt
+++ b/intl/icu/source/data/curr/shi_Tfng.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_Tfng{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/shi_Tfng_MA.txt b/intl/icu/source/data/curr/shi_Tfng_MA.txt
index 978cd5cab..0b10edbea 100644
--- a/intl/icu/source/data/curr/shi_Tfng_MA.txt
+++ b/intl/icu/source/data/curr/shi_Tfng_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/si.txt b/intl/icu/source/data/curr/si.txt
index 5f5615385..e3f42e043 100644
--- a/intl/icu/source/data/curr/si.txt
+++ b/intl/icu/source/data/curr/si.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
si{
Currencies{
diff --git a/intl/icu/source/data/curr/sk.txt b/intl/icu/source/data/curr/sk.txt
index 75e8af652..89d688a71 100644
--- a/intl/icu/source/data/curr/sk.txt
+++ b/intl/icu/source/data/curr/sk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sk{
Currencies{
diff --git a/intl/icu/source/data/curr/sl.txt b/intl/icu/source/data/curr/sl.txt
index 2a72a0fc8..717deb7b2 100644
--- a/intl/icu/source/data/curr/sl.txt
+++ b/intl/icu/source/data/curr/sl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sl{
Currencies{
diff --git a/intl/icu/source/data/curr/smn.txt b/intl/icu/source/data/curr/smn.txt
index f23dc691b..3c7f5a8f1 100644
--- a/intl/icu/source/data/curr/smn.txt
+++ b/intl/icu/source/data/curr/smn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
smn{
Currencies{
diff --git a/intl/icu/source/data/curr/sn.txt b/intl/icu/source/data/curr/sn.txt
index a6e3fe9e4..a5d091422 100644
--- a/intl/icu/source/data/curr/sn.txt
+++ b/intl/icu/source/data/curr/sn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sn{
Currencies{
diff --git a/intl/icu/source/data/curr/so.txt b/intl/icu/source/data/curr/so.txt
index 85332e623..28b7ae3ec 100644
--- a/intl/icu/source/data/curr/so.txt
+++ b/intl/icu/source/data/curr/so.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so{
Currencies{
diff --git a/intl/icu/source/data/curr/so_DJ.txt b/intl/icu/source/data/curr/so_DJ.txt
index 8800b8bb6..f3768252b 100644
--- a/intl/icu/source/data/curr/so_DJ.txt
+++ b/intl/icu/source/data/curr/so_DJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so_DJ{
Currencies{
diff --git a/intl/icu/source/data/curr/so_ET.txt b/intl/icu/source/data/curr/so_ET.txt
index 9a39c34e4..69a99cd9a 100644
--- a/intl/icu/source/data/curr/so_ET.txt
+++ b/intl/icu/source/data/curr/so_ET.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so_ET{
Currencies{
diff --git a/intl/icu/source/data/curr/so_KE.txt b/intl/icu/source/data/curr/so_KE.txt
index 2e7a1af8a..e5270819d 100644
--- a/intl/icu/source/data/curr/so_KE.txt
+++ b/intl/icu/source/data/curr/so_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so_KE{
Currencies{
diff --git a/intl/icu/source/data/curr/sq.txt b/intl/icu/source/data/curr/sq.txt
index 052017dbd..b11ac3728 100644
--- a/intl/icu/source/data/curr/sq.txt
+++ b/intl/icu/source/data/curr/sq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sq{
Currencies{
diff --git a/intl/icu/source/data/curr/sq_MK.txt b/intl/icu/source/data/curr/sq_MK.txt
index 9eb6b5963..186cbad21 100644
--- a/intl/icu/source/data/curr/sq_MK.txt
+++ b/intl/icu/source/data/curr/sq_MK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sq_MK{
Currencies{
diff --git a/intl/icu/source/data/curr/sr.txt b/intl/icu/source/data/curr/sr.txt
index af83f7fb0..26db85939 100644
--- a/intl/icu/source/data/curr/sr.txt
+++ b/intl/icu/source/data/curr/sr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr{
Currencies{
diff --git a/intl/icu/source/data/curr/sr_BA.txt b/intl/icu/source/data/curr/sr_BA.txt
index edad17f70..97eb38298 100644
--- a/intl/icu/source/data/curr/sr_BA.txt
+++ b/intl/icu/source/data/curr/sr_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_BA{
"%%ALIAS"{"sr_Cyrl_BA"}
diff --git a/intl/icu/source/data/curr/sr_CS.txt b/intl/icu/source/data/curr/sr_CS.txt
index 5f8becfab..6b3d70789 100644
--- a/intl/icu/source/data/curr/sr_CS.txt
+++ b/intl/icu/source/data/curr/sr_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_CS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/curr/sr_Cyrl.txt b/intl/icu/source/data/curr/sr_Cyrl.txt
index 7cf7067f2..9a07b98e6 100644
--- a/intl/icu/source/data/curr/sr_Cyrl.txt
+++ b/intl/icu/source/data/curr/sr_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/sr_Cyrl_BA.txt b/intl/icu/source/data/curr/sr_Cyrl_BA.txt
index 51e1655a5..9629942a2 100644
--- a/intl/icu/source/data/curr/sr_Cyrl_BA.txt
+++ b/intl/icu/source/data/curr/sr_Cyrl_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/sr_Cyrl_CS.txt b/intl/icu/source/data/curr/sr_Cyrl_CS.txt
index 9325e5a76..b19156a02 100644
--- a/intl/icu/source/data/curr/sr_Cyrl_CS.txt
+++ b/intl/icu/source/data/curr/sr_Cyrl_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_CS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/curr/sr_Cyrl_RS.txt b/intl/icu/source/data/curr/sr_Cyrl_RS.txt
index 7ef8fabce..fec1168e2 100644
--- a/intl/icu/source/data/curr/sr_Cyrl_RS.txt
+++ b/intl/icu/source/data/curr/sr_Cyrl_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/sr_Cyrl_XK.txt b/intl/icu/source/data/curr/sr_Cyrl_XK.txt
index d7d4a860b..d7233695f 100644
--- a/intl/icu/source/data/curr/sr_Cyrl_XK.txt
+++ b/intl/icu/source/data/curr/sr_Cyrl_XK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/sr_Cyrl_YU.txt b/intl/icu/source/data/curr/sr_Cyrl_YU.txt
index 806d42c43..63c1837be 100644
--- a/intl/icu/source/data/curr/sr_Cyrl_YU.txt
+++ b/intl/icu/source/data/curr/sr_Cyrl_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_YU{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/curr/sr_Latn.txt b/intl/icu/source/data/curr/sr_Latn.txt
index 12abc3cca..c723654fb 100644
--- a/intl/icu/source/data/curr/sr_Latn.txt
+++ b/intl/icu/source/data/curr/sr_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/sr_Latn_BA.txt b/intl/icu/source/data/curr/sr_Latn_BA.txt
index f4b62ac33..a893d10a5 100644
--- a/intl/icu/source/data/curr/sr_Latn_BA.txt
+++ b/intl/icu/source/data/curr/sr_Latn_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/sr_Latn_CS.txt b/intl/icu/source/data/curr/sr_Latn_CS.txt
index 0952735a9..f189ad3dc 100644
--- a/intl/icu/source/data/curr/sr_Latn_CS.txt
+++ b/intl/icu/source/data/curr/sr_Latn_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_CS{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/curr/sr_Latn_ME.txt b/intl/icu/source/data/curr/sr_Latn_ME.txt
index 4cc6fe9ba..b2eac102b 100644
--- a/intl/icu/source/data/curr/sr_Latn_ME.txt
+++ b/intl/icu/source/data/curr/sr_Latn_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/sr_Latn_RS.txt b/intl/icu/source/data/curr/sr_Latn_RS.txt
index 76d38f8b7..104aa2f83 100644
--- a/intl/icu/source/data/curr/sr_Latn_RS.txt
+++ b/intl/icu/source/data/curr/sr_Latn_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/sr_Latn_YU.txt b/intl/icu/source/data/curr/sr_Latn_YU.txt
index 2747ab210..593433b95 100644
--- a/intl/icu/source/data/curr/sr_Latn_YU.txt
+++ b/intl/icu/source/data/curr/sr_Latn_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_YU{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/curr/sr_ME.txt b/intl/icu/source/data/curr/sr_ME.txt
index 32dc91046..4205d8e05 100644
--- a/intl/icu/source/data/curr/sr_ME.txt
+++ b/intl/icu/source/data/curr/sr_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_ME{
"%%ALIAS"{"sr_Latn_ME"}
diff --git a/intl/icu/source/data/curr/sr_RS.txt b/intl/icu/source/data/curr/sr_RS.txt
index 674ff7755..bd699280f 100644
--- a/intl/icu/source/data/curr/sr_RS.txt
+++ b/intl/icu/source/data/curr/sr_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_RS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/curr/sr_XK.txt b/intl/icu/source/data/curr/sr_XK.txt
index 9628a2763..2191f808f 100644
--- a/intl/icu/source/data/curr/sr_XK.txt
+++ b/intl/icu/source/data/curr/sr_XK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_XK{
"%%ALIAS"{"sr_Cyrl_XK"}
diff --git a/intl/icu/source/data/curr/sr_YU.txt b/intl/icu/source/data/curr/sr_YU.txt
index 26563d041..8876f0fda 100644
--- a/intl/icu/source/data/curr/sr_YU.txt
+++ b/intl/icu/source/data/curr/sr_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_YU{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/curr/supplementalData.txt b/intl/icu/source/data/curr/supplementalData.txt
index 854c5b254..93b8aff23 100644
--- a/intl/icu/source/data/curr/supplementalData.txt
+++ b/intl/icu/source/data/curr/supplementalData.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
supplementalData:table(nofallback){
CurrencyMap{
diff --git a/intl/icu/source/data/curr/sv.txt b/intl/icu/source/data/curr/sv.txt
index 8185a5eba..700e8a175 100644
--- a/intl/icu/source/data/curr/sv.txt
+++ b/intl/icu/source/data/curr/sv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sv{
Currencies{
diff --git a/intl/icu/source/data/curr/sw.txt b/intl/icu/source/data/curr/sw.txt
index ff1e44075..0b5afadb3 100644
--- a/intl/icu/source/data/curr/sw.txt
+++ b/intl/icu/source/data/curr/sw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw{
Currencies{
diff --git a/intl/icu/source/data/curr/sw_CD.txt b/intl/icu/source/data/curr/sw_CD.txt
index 27a1f4084..0fd86bc59 100644
--- a/intl/icu/source/data/curr/sw_CD.txt
+++ b/intl/icu/source/data/curr/sw_CD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw_CD{
Currencies{
diff --git a/intl/icu/source/data/curr/sw_UG.txt b/intl/icu/source/data/curr/sw_UG.txt
index fca317acf..ebe60c622 100644
--- a/intl/icu/source/data/curr/sw_UG.txt
+++ b/intl/icu/source/data/curr/sw_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw_UG{
Currencies{
diff --git a/intl/icu/source/data/curr/ta.txt b/intl/icu/source/data/curr/ta.txt
index a05b6f67d..6a4c95e03 100644
--- a/intl/icu/source/data/curr/ta.txt
+++ b/intl/icu/source/data/curr/ta.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta{
Currencies{
diff --git a/intl/icu/source/data/curr/ta_LK.txt b/intl/icu/source/data/curr/ta_LK.txt
index 52123cd98..ce82f4ac8 100644
--- a/intl/icu/source/data/curr/ta_LK.txt
+++ b/intl/icu/source/data/curr/ta_LK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_LK{
Currencies{
diff --git a/intl/icu/source/data/curr/ta_MY.txt b/intl/icu/source/data/curr/ta_MY.txt
index 437fd0ec7..c79ad38be 100644
--- a/intl/icu/source/data/curr/ta_MY.txt
+++ b/intl/icu/source/data/curr/ta_MY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_MY{
Currencies{
diff --git a/intl/icu/source/data/curr/ta_SG.txt b/intl/icu/source/data/curr/ta_SG.txt
index 0207b3f4b..344159bba 100644
--- a/intl/icu/source/data/curr/ta_SG.txt
+++ b/intl/icu/source/data/curr/ta_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_SG{
Currencies{
diff --git a/intl/icu/source/data/curr/te.txt b/intl/icu/source/data/curr/te.txt
index 58192334c..fdccf4612 100644
--- a/intl/icu/source/data/curr/te.txt
+++ b/intl/icu/source/data/curr/te.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
te{
Currencies{
diff --git a/intl/icu/source/data/curr/teo.txt b/intl/icu/source/data/curr/teo.txt
index cfd94fba1..9de8ac432 100644
--- a/intl/icu/source/data/curr/teo.txt
+++ b/intl/icu/source/data/curr/teo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
teo{
Currencies{
diff --git a/intl/icu/source/data/curr/teo_KE.txt b/intl/icu/source/data/curr/teo_KE.txt
index 36f9b5b22..67d7783aa 100644
--- a/intl/icu/source/data/curr/teo_KE.txt
+++ b/intl/icu/source/data/curr/teo_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
teo_KE{
Currencies{
diff --git a/intl/icu/source/data/curr/th.txt b/intl/icu/source/data/curr/th.txt
index 37981574a..701885024 100644
--- a/intl/icu/source/data/curr/th.txt
+++ b/intl/icu/source/data/curr/th.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
th{
Currencies{
diff --git a/intl/icu/source/data/curr/th_TH.txt b/intl/icu/source/data/curr/th_TH.txt
index 7a34bc971..5b502fab2 100644
--- a/intl/icu/source/data/curr/th_TH.txt
+++ b/intl/icu/source/data/curr/th_TH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/th_TH_TRADITIONAL.txt b/intl/icu/source/data/curr/th_TH_TRADITIONAL.txt
index d72e493f4..204799cb1 100644
--- a/intl/icu/source/data/curr/th_TH_TRADITIONAL.txt
+++ b/intl/icu/source/data/curr/th_TH_TRADITIONAL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
th_TH_TRADITIONAL{
calendar{
diff --git a/intl/icu/source/data/curr/ti.txt b/intl/icu/source/data/curr/ti.txt
index 1220c5b02..3bb25be40 100644
--- a/intl/icu/source/data/curr/ti.txt
+++ b/intl/icu/source/data/curr/ti.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ti{
Currencies{
diff --git a/intl/icu/source/data/curr/ti_ER.txt b/intl/icu/source/data/curr/ti_ER.txt
index e6c18c5d3..838c00844 100644
--- a/intl/icu/source/data/curr/ti_ER.txt
+++ b/intl/icu/source/data/curr/ti_ER.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ti_ER{
Currencies{
diff --git a/intl/icu/source/data/curr/tl.txt b/intl/icu/source/data/curr/tl.txt
index 4e521f927..29859d8a3 100644
--- a/intl/icu/source/data/curr/tl.txt
+++ b/intl/icu/source/data/curr/tl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tl{
"%%ALIAS"{"fil"}
diff --git a/intl/icu/source/data/curr/tl_PH.txt b/intl/icu/source/data/curr/tl_PH.txt
index 07c9f9047..75489b84b 100644
--- a/intl/icu/source/data/curr/tl_PH.txt
+++ b/intl/icu/source/data/curr/tl_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tl_PH{
"%%ALIAS"{"fil_PH"}
diff --git a/intl/icu/source/data/curr/to.txt b/intl/icu/source/data/curr/to.txt
index 7d6c40ecf..36a85df0e 100644
--- a/intl/icu/source/data/curr/to.txt
+++ b/intl/icu/source/data/curr/to.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
to{
Currencies{
diff --git a/intl/icu/source/data/curr/tr.txt b/intl/icu/source/data/curr/tr.txt
index 12dcb451a..ee9477cfb 100644
--- a/intl/icu/source/data/curr/tr.txt
+++ b/intl/icu/source/data/curr/tr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tr{
Currencies{
diff --git a/intl/icu/source/data/curr/twq.txt b/intl/icu/source/data/curr/twq.txt
index 440207f9e..edc376bb7 100644
--- a/intl/icu/source/data/curr/twq.txt
+++ b/intl/icu/source/data/curr/twq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
twq{
Currencies{
diff --git a/intl/icu/source/data/curr/tzm.txt b/intl/icu/source/data/curr/tzm.txt
index 8c863f6af..11fac7d11 100644
--- a/intl/icu/source/data/curr/tzm.txt
+++ b/intl/icu/source/data/curr/tzm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tzm{
Currencies{
diff --git a/intl/icu/source/data/curr/ug.txt b/intl/icu/source/data/curr/ug.txt
index c13f5898e..f438ee76b 100644
--- a/intl/icu/source/data/curr/ug.txt
+++ b/intl/icu/source/data/curr/ug.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ug{
Currencies{
diff --git a/intl/icu/source/data/curr/uk.txt b/intl/icu/source/data/curr/uk.txt
index 68485f1b9..9fac08ddd 100644
--- a/intl/icu/source/data/curr/uk.txt
+++ b/intl/icu/source/data/curr/uk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uk{
Currencies{
diff --git a/intl/icu/source/data/curr/ur.txt b/intl/icu/source/data/curr/ur.txt
index d60aa1b69..2b935484c 100644
--- a/intl/icu/source/data/curr/ur.txt
+++ b/intl/icu/source/data/curr/ur.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ur{
Currencies{
diff --git a/intl/icu/source/data/curr/ur_IN.txt b/intl/icu/source/data/curr/ur_IN.txt
index faba8121a..137930953 100644
--- a/intl/icu/source/data/curr/ur_IN.txt
+++ b/intl/icu/source/data/curr/ur_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ur_IN{
Currencies{
diff --git a/intl/icu/source/data/curr/uz.txt b/intl/icu/source/data/curr/uz.txt
index 668bb244f..2907eb332 100644
--- a/intl/icu/source/data/curr/uz.txt
+++ b/intl/icu/source/data/curr/uz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz{
Currencies{
diff --git a/intl/icu/source/data/curr/uz_AF.txt b/intl/icu/source/data/curr/uz_AF.txt
index 24ca29458..6dbfd1008 100644
--- a/intl/icu/source/data/curr/uz_AF.txt
+++ b/intl/icu/source/data/curr/uz_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_AF{
"%%ALIAS"{"uz_Arab_AF"}
diff --git a/intl/icu/source/data/curr/uz_Arab.txt b/intl/icu/source/data/curr/uz_Arab.txt
index 6985c7f05..9ffdf876a 100644
--- a/intl/icu/source/data/curr/uz_Arab.txt
+++ b/intl/icu/source/data/curr/uz_Arab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Arab{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/uz_Arab_AF.txt b/intl/icu/source/data/curr/uz_Arab_AF.txt
index e45d70894..1ded58208 100644
--- a/intl/icu/source/data/curr/uz_Arab_AF.txt
+++ b/intl/icu/source/data/curr/uz_Arab_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/uz_Cyrl.txt b/intl/icu/source/data/curr/uz_Cyrl.txt
index bedbc1371..c1750e303 100644
--- a/intl/icu/source/data/curr/uz_Cyrl.txt
+++ b/intl/icu/source/data/curr/uz_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Cyrl{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/uz_Latn.txt b/intl/icu/source/data/curr/uz_Latn.txt
index 64e0e6b8e..8d2a5497c 100644
--- a/intl/icu/source/data/curr/uz_Latn.txt
+++ b/intl/icu/source/data/curr/uz_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/uz_Latn_UZ.txt b/intl/icu/source/data/curr/uz_Latn_UZ.txt
index 2d34effaf..baf22c9bb 100644
--- a/intl/icu/source/data/curr/uz_Latn_UZ.txt
+++ b/intl/icu/source/data/curr/uz_Latn_UZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/uz_UZ.txt b/intl/icu/source/data/curr/uz_UZ.txt
index ffac5329b..24a145bfb 100644
--- a/intl/icu/source/data/curr/uz_UZ.txt
+++ b/intl/icu/source/data/curr/uz_UZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_UZ{
"%%ALIAS"{"uz_Latn_UZ"}
diff --git a/intl/icu/source/data/curr/vai.txt b/intl/icu/source/data/curr/vai.txt
index 1e0b4d084..1af339902 100644
--- a/intl/icu/source/data/curr/vai.txt
+++ b/intl/icu/source/data/curr/vai.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai{
Currencies{
diff --git a/intl/icu/source/data/curr/vai_LR.txt b/intl/icu/source/data/curr/vai_LR.txt
index 27d42387f..7d7bd4f9d 100644
--- a/intl/icu/source/data/curr/vai_LR.txt
+++ b/intl/icu/source/data/curr/vai_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_LR{
"%%ALIAS"{"vai_Vaii_LR"}
diff --git a/intl/icu/source/data/curr/vai_Latn.txt b/intl/icu/source/data/curr/vai_Latn.txt
index cbff94857..e365ad9bd 100644
--- a/intl/icu/source/data/curr/vai_Latn.txt
+++ b/intl/icu/source/data/curr/vai_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_Latn{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/vai_Vaii.txt b/intl/icu/source/data/curr/vai_Vaii.txt
index 90f9ee927..0dcc58a4f 100644
--- a/intl/icu/source/data/curr/vai_Vaii.txt
+++ b/intl/icu/source/data/curr/vai_Vaii.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_Vaii{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/vai_Vaii_LR.txt b/intl/icu/source/data/curr/vai_Vaii_LR.txt
index a17bc11e0..fe47bdb0f 100644
--- a/intl/icu/source/data/curr/vai_Vaii_LR.txt
+++ b/intl/icu/source/data/curr/vai_Vaii_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/vi.txt b/intl/icu/source/data/curr/vi.txt
index dc3df7766..60ea439e6 100644
--- a/intl/icu/source/data/curr/vi.txt
+++ b/intl/icu/source/data/curr/vi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vi{
Currencies{
diff --git a/intl/icu/source/data/curr/vun.txt b/intl/icu/source/data/curr/vun.txt
index 7b64207d4..74beb2ba2 100644
--- a/intl/icu/source/data/curr/vun.txt
+++ b/intl/icu/source/data/curr/vun.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vun{
Currencies{
diff --git a/intl/icu/source/data/curr/wae.txt b/intl/icu/source/data/curr/wae.txt
index f78f2a82c..4108831e0 100644
--- a/intl/icu/source/data/curr/wae.txt
+++ b/intl/icu/source/data/curr/wae.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
wae{
Currencies{
diff --git a/intl/icu/source/data/curr/xog.txt b/intl/icu/source/data/curr/xog.txt
index 04d5bfb86..2288834a5 100644
--- a/intl/icu/source/data/curr/xog.txt
+++ b/intl/icu/source/data/curr/xog.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
xog{
Currencies{
diff --git a/intl/icu/source/data/curr/yav.txt b/intl/icu/source/data/curr/yav.txt
index cc30d500a..f3ed2942c 100644
--- a/intl/icu/source/data/curr/yav.txt
+++ b/intl/icu/source/data/curr/yav.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yav{
Currencies{
diff --git a/intl/icu/source/data/curr/yi.txt b/intl/icu/source/data/curr/yi.txt
index c551fcb7f..305cc3648 100644
--- a/intl/icu/source/data/curr/yi.txt
+++ b/intl/icu/source/data/curr/yi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yi{
Currencies{
diff --git a/intl/icu/source/data/curr/yo.txt b/intl/icu/source/data/curr/yo.txt
index 6f6ad16f3..b58636668 100644
--- a/intl/icu/source/data/curr/yo.txt
+++ b/intl/icu/source/data/curr/yo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yo{
Currencies{
diff --git a/intl/icu/source/data/curr/yo_BJ.txt b/intl/icu/source/data/curr/yo_BJ.txt
index 78a99362d..50c5a0b91 100644
--- a/intl/icu/source/data/curr/yo_BJ.txt
+++ b/intl/icu/source/data/curr/yo_BJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yo_BJ{
Currencies{
diff --git a/intl/icu/source/data/curr/yue.txt b/intl/icu/source/data/curr/yue.txt
index 945c85d52..cf789426c 100644
--- a/intl/icu/source/data/curr/yue.txt
+++ b/intl/icu/source/data/curr/yue.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yue{
Currencies{
diff --git a/intl/icu/source/data/curr/zgh.txt b/intl/icu/source/data/curr/zgh.txt
index 3a4f6b0df..e212ab267 100644
--- a/intl/icu/source/data/curr/zgh.txt
+++ b/intl/icu/source/data/curr/zgh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zgh{
Currencies{
diff --git a/intl/icu/source/data/curr/zh.txt b/intl/icu/source/data/curr/zh.txt
index ec7663029..e950a8f20 100644
--- a/intl/icu/source/data/curr/zh.txt
+++ b/intl/icu/source/data/curr/zh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh{
Currencies{
diff --git a/intl/icu/source/data/curr/zh_CN.txt b/intl/icu/source/data/curr/zh_CN.txt
index c9151613a..46ee1b6c9 100644
--- a/intl/icu/source/data/curr/zh_CN.txt
+++ b/intl/icu/source/data/curr/zh_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_CN{
"%%ALIAS"{"zh_Hans_CN"}
diff --git a/intl/icu/source/data/curr/zh_HK.txt b/intl/icu/source/data/curr/zh_HK.txt
index fe72a0ea4..5e36e52e0 100644
--- a/intl/icu/source/data/curr/zh_HK.txt
+++ b/intl/icu/source/data/curr/zh_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_HK{
"%%ALIAS"{"zh_Hant_HK"}
diff --git a/intl/icu/source/data/curr/zh_Hans.txt b/intl/icu/source/data/curr/zh_Hans.txt
index 111a2e0e0..3b68a48d9 100644
--- a/intl/icu/source/data/curr/zh_Hans.txt
+++ b/intl/icu/source/data/curr/zh_Hans.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/curr/zh_Hans_CN.txt b/intl/icu/source/data/curr/zh_Hans_CN.txt
index 70a6a77b3..841acc687 100644
--- a/intl/icu/source/data/curr/zh_Hans_CN.txt
+++ b/intl/icu/source/data/curr/zh_Hans_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/zh_Hans_HK.txt b/intl/icu/source/data/curr/zh_Hans_HK.txt
index d7639be88..985719049 100644
--- a/intl/icu/source/data/curr/zh_Hans_HK.txt
+++ b/intl/icu/source/data/curr/zh_Hans_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans_HK{
Currencies{
diff --git a/intl/icu/source/data/curr/zh_Hans_MO.txt b/intl/icu/source/data/curr/zh_Hans_MO.txt
index dd8efaf93..9cc5f39a6 100644
--- a/intl/icu/source/data/curr/zh_Hans_MO.txt
+++ b/intl/icu/source/data/curr/zh_Hans_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans_MO{
Currencies{
diff --git a/intl/icu/source/data/curr/zh_Hans_SG.txt b/intl/icu/source/data/curr/zh_Hans_SG.txt
index 682a9c2d1..7dc547a4c 100644
--- a/intl/icu/source/data/curr/zh_Hans_SG.txt
+++ b/intl/icu/source/data/curr/zh_Hans_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans_SG{
Currencies{
diff --git a/intl/icu/source/data/curr/zh_Hant.txt b/intl/icu/source/data/curr/zh_Hant.txt
index 86f051afc..f472a667d 100644
--- a/intl/icu/source/data/curr/zh_Hant.txt
+++ b/intl/icu/source/data/curr/zh_Hant.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant{
%%Parent{"root"}
diff --git a/intl/icu/source/data/curr/zh_Hant_HK.txt b/intl/icu/source/data/curr/zh_Hant_HK.txt
index ebdffc4bd..d76b6a9f7 100644
--- a/intl/icu/source/data/curr/zh_Hant_HK.txt
+++ b/intl/icu/source/data/curr/zh_Hant_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant_HK{
Currencies{
diff --git a/intl/icu/source/data/curr/zh_Hant_MO.txt b/intl/icu/source/data/curr/zh_Hant_MO.txt
index 8225e93bd..219725740 100644
--- a/intl/icu/source/data/curr/zh_Hant_MO.txt
+++ b/intl/icu/source/data/curr/zh_Hant_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant_MO{
%%Parent{"zh_Hant_HK"}
diff --git a/intl/icu/source/data/curr/zh_Hant_TW.txt b/intl/icu/source/data/curr/zh_Hant_TW.txt
index b62ad6927..908f4881b 100644
--- a/intl/icu/source/data/curr/zh_Hant_TW.txt
+++ b/intl/icu/source/data/curr/zh_Hant_TW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/curr/zh_MO.txt b/intl/icu/source/data/curr/zh_MO.txt
index 6565bf7c3..71455b9cd 100644
--- a/intl/icu/source/data/curr/zh_MO.txt
+++ b/intl/icu/source/data/curr/zh_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_MO{
"%%ALIAS"{"zh_Hant_MO"}
diff --git a/intl/icu/source/data/curr/zh_SG.txt b/intl/icu/source/data/curr/zh_SG.txt
index bf277736b..141f3dc58 100644
--- a/intl/icu/source/data/curr/zh_SG.txt
+++ b/intl/icu/source/data/curr/zh_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_SG{
"%%ALIAS"{"zh_Hans_SG"}
diff --git a/intl/icu/source/data/curr/zh_TW.txt b/intl/icu/source/data/curr/zh_TW.txt
index 9372c5067..ae82eca78 100644
--- a/intl/icu/source/data/curr/zh_TW.txt
+++ b/intl/icu/source/data/curr/zh_TW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_TW{
"%%ALIAS"{"zh_Hant_TW"}
diff --git a/intl/icu/source/data/curr/zu.txt b/intl/icu/source/data/curr/zu.txt
index 45c6b128a..32b0a359a 100644
--- a/intl/icu/source/data/curr/zu.txt
+++ b/intl/icu/source/data/curr/zu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zu{
Currencies{
diff --git a/intl/icu/source/data/locales/af.txt b/intl/icu/source/data/locales/af.txt
index ace5a1390..4d8f5860c 100644
--- a/intl/icu/source/data/locales/af.txt
+++ b/intl/icu/source/data/locales/af.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
af{
AuxExemplarCharacters{"[à å ä ã æ ç í ì ó ò ú ù ü ý]"}
diff --git a/intl/icu/source/data/locales/af_NA.txt b/intl/icu/source/data/locales/af_NA.txt
index ee56d353e..a0f3d2581 100644
--- a/intl/icu/source/data/locales/af_NA.txt
+++ b/intl/icu/source/data/locales/af_NA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
af_NA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/af_ZA.txt b/intl/icu/source/data/locales/af_ZA.txt
index 3e2d9fe66..a4fdf005b 100644
--- a/intl/icu/source/data/locales/af_ZA.txt
+++ b/intl/icu/source/data/locales/af_ZA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
af_ZA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/agq.txt b/intl/icu/source/data/locales/agq.txt
index 501182cce..c4c677912 100644
--- a/intl/icu/source/data/locales/agq.txt
+++ b/intl/icu/source/data/locales/agq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
agq{
AuxExemplarCharacters{"[q r x]"}
diff --git a/intl/icu/source/data/locales/agq_CM.txt b/intl/icu/source/data/locales/agq_CM.txt
index 5f2691791..d1d6530d5 100644
--- a/intl/icu/source/data/locales/agq_CM.txt
+++ b/intl/icu/source/data/locales/agq_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
agq_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ak.txt b/intl/icu/source/data/locales/ak.txt
index 2cd26d9c6..39d815b87 100644
--- a/intl/icu/source/data/locales/ak.txt
+++ b/intl/icu/source/data/locales/ak.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ak{
AuxExemplarCharacters{"[c j q v z]"}
diff --git a/intl/icu/source/data/locales/ak_GH.txt b/intl/icu/source/data/locales/ak_GH.txt
index bad6af69b..f7249be73 100644
--- a/intl/icu/source/data/locales/ak_GH.txt
+++ b/intl/icu/source/data/locales/ak_GH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ak_GH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/am.txt b/intl/icu/source/data/locales/am.txt
index 8bcce371f..0999fbece 100644
--- a/intl/icu/source/data/locales/am.txt
+++ b/intl/icu/source/data/locales/am.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
am{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/am_ET.txt b/intl/icu/source/data/locales/am_ET.txt
index c52ff331d..43ba81f7e 100644
--- a/intl/icu/source/data/locales/am_ET.txt
+++ b/intl/icu/source/data/locales/am_ET.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
am_ET{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar.txt b/intl/icu/source/data/locales/ar.txt
index 033f9966e..f5585e642 100644
--- a/intl/icu/source/data/locales/ar.txt
+++ b/intl/icu/source/data/locales/ar.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar{
AuxExemplarCharacters{"[\u200C\u200D\u200E\u200F پ چ ژ ڜ ڢ ڤ ڥ ٯ ڧ ڨ ک گ ی]"}
@@ -1606,6 +1606,7 @@ ar{
"تيشو",
"شووا",
"هيسي",
+ "ريوا",
}
}
}
diff --git a/intl/icu/source/data/locales/ar_001.txt b/intl/icu/source/data/locales/ar_001.txt
index ac645cfb1..149416b7e 100644
--- a/intl/icu/source/data/locales/ar_001.txt
+++ b/intl/icu/source/data/locales/ar_001.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_001{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_AE.txt b/intl/icu/source/data/locales/ar_AE.txt
index 8ebe2180d..02ae051e8 100644
--- a/intl/icu/source/data/locales/ar_AE.txt
+++ b/intl/icu/source/data/locales/ar_AE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_AE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_BH.txt b/intl/icu/source/data/locales/ar_BH.txt
index c0b01caca..23d0082bb 100644
--- a/intl/icu/source/data/locales/ar_BH.txt
+++ b/intl/icu/source/data/locales/ar_BH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_BH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_DJ.txt b/intl/icu/source/data/locales/ar_DJ.txt
index b4d143ce7..2bc1b122b 100644
--- a/intl/icu/source/data/locales/ar_DJ.txt
+++ b/intl/icu/source/data/locales/ar_DJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_DJ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_DZ.txt b/intl/icu/source/data/locales/ar_DZ.txt
index 31263e2cf..d74bbbde2 100644
--- a/intl/icu/source/data/locales/ar_DZ.txt
+++ b/intl/icu/source/data/locales/ar_DZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_DZ{
NumberElements{
diff --git a/intl/icu/source/data/locales/ar_EG.txt b/intl/icu/source/data/locales/ar_EG.txt
index 8cc23f30e..f4691b961 100644
--- a/intl/icu/source/data/locales/ar_EG.txt
+++ b/intl/icu/source/data/locales/ar_EG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_EG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_EH.txt b/intl/icu/source/data/locales/ar_EH.txt
index 141573921..c863d536b 100644
--- a/intl/icu/source/data/locales/ar_EH.txt
+++ b/intl/icu/source/data/locales/ar_EH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_EH{
NumberElements{
diff --git a/intl/icu/source/data/locales/ar_ER.txt b/intl/icu/source/data/locales/ar_ER.txt
index d34166408..2407e8cd5 100644
--- a/intl/icu/source/data/locales/ar_ER.txt
+++ b/intl/icu/source/data/locales/ar_ER.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_ER{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_IL.txt b/intl/icu/source/data/locales/ar_IL.txt
index 5d8cd711d..56e64d592 100644
--- a/intl/icu/source/data/locales/ar_IL.txt
+++ b/intl/icu/source/data/locales/ar_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_IL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_IQ.txt b/intl/icu/source/data/locales/ar_IQ.txt
index 1c11f283e..4e251e5dd 100644
--- a/intl/icu/source/data/locales/ar_IQ.txt
+++ b/intl/icu/source/data/locales/ar_IQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_IQ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_JO.txt b/intl/icu/source/data/locales/ar_JO.txt
index 1838ff773..a10cb6447 100644
--- a/intl/icu/source/data/locales/ar_JO.txt
+++ b/intl/icu/source/data/locales/ar_JO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_JO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_KM.txt b/intl/icu/source/data/locales/ar_KM.txt
index 8a556e67b..82b3e0da0 100644
--- a/intl/icu/source/data/locales/ar_KM.txt
+++ b/intl/icu/source/data/locales/ar_KM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_KM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_KW.txt b/intl/icu/source/data/locales/ar_KW.txt
index 7c1816968..58bb8ff35 100644
--- a/intl/icu/source/data/locales/ar_KW.txt
+++ b/intl/icu/source/data/locales/ar_KW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_KW{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_LB.txt b/intl/icu/source/data/locales/ar_LB.txt
index dbfe5e494..a2ca21b3a 100644
--- a/intl/icu/source/data/locales/ar_LB.txt
+++ b/intl/icu/source/data/locales/ar_LB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_LB{
NumberElements{
diff --git a/intl/icu/source/data/locales/ar_LY.txt b/intl/icu/source/data/locales/ar_LY.txt
index 58dff98cf..4d912409f 100644
--- a/intl/icu/source/data/locales/ar_LY.txt
+++ b/intl/icu/source/data/locales/ar_LY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_LY{
NumberElements{
diff --git a/intl/icu/source/data/locales/ar_MA.txt b/intl/icu/source/data/locales/ar_MA.txt
index 77fcaf814..6919fbe78 100644
--- a/intl/icu/source/data/locales/ar_MA.txt
+++ b/intl/icu/source/data/locales/ar_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_MA{
AuxExemplarCharacters{"[\u200C\u200D\u200E\u200F پ چ ژ ڜ ڢ ڤ ڥ ٯ ڧ ڨ ک ڭ گ ݣ ی]"}
diff --git a/intl/icu/source/data/locales/ar_MR.txt b/intl/icu/source/data/locales/ar_MR.txt
index 438038692..cba2906bd 100644
--- a/intl/icu/source/data/locales/ar_MR.txt
+++ b/intl/icu/source/data/locales/ar_MR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_MR{
NumberElements{
diff --git a/intl/icu/source/data/locales/ar_OM.txt b/intl/icu/source/data/locales/ar_OM.txt
index 01a883cb6..a6dad91de 100644
--- a/intl/icu/source/data/locales/ar_OM.txt
+++ b/intl/icu/source/data/locales/ar_OM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_OM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_PS.txt b/intl/icu/source/data/locales/ar_PS.txt
index 4e9b45103..60f35421f 100644
--- a/intl/icu/source/data/locales/ar_PS.txt
+++ b/intl/icu/source/data/locales/ar_PS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_PS{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_QA.txt b/intl/icu/source/data/locales/ar_QA.txt
index 2a6ec2ae0..695460d1e 100644
--- a/intl/icu/source/data/locales/ar_QA.txt
+++ b/intl/icu/source/data/locales/ar_QA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_QA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_SA.txt b/intl/icu/source/data/locales/ar_SA.txt
index cdf6f3c8e..bc687ab93 100644
--- a/intl/icu/source/data/locales/ar_SA.txt
+++ b/intl/icu/source/data/locales/ar_SA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_SA{
NumberElements{
diff --git a/intl/icu/source/data/locales/ar_SD.txt b/intl/icu/source/data/locales/ar_SD.txt
index a470d3af7..e339daec7 100644
--- a/intl/icu/source/data/locales/ar_SD.txt
+++ b/intl/icu/source/data/locales/ar_SD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_SD{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_SO.txt b/intl/icu/source/data/locales/ar_SO.txt
index d81d7d8cb..e47c0af1d 100644
--- a/intl/icu/source/data/locales/ar_SO.txt
+++ b/intl/icu/source/data/locales/ar_SO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_SO{
NumberElements{
diff --git a/intl/icu/source/data/locales/ar_SS.txt b/intl/icu/source/data/locales/ar_SS.txt
index 5b6318b69..f1153633f 100644
--- a/intl/icu/source/data/locales/ar_SS.txt
+++ b/intl/icu/source/data/locales/ar_SS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_SS{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_SY.txt b/intl/icu/source/data/locales/ar_SY.txt
index 2ad42834a..24417ec88 100644
--- a/intl/icu/source/data/locales/ar_SY.txt
+++ b/intl/icu/source/data/locales/ar_SY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_SY{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_TD.txt b/intl/icu/source/data/locales/ar_TD.txt
index 2f53642b0..77d9ccf7f 100644
--- a/intl/icu/source/data/locales/ar_TD.txt
+++ b/intl/icu/source/data/locales/ar_TD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_TD{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ar_TN.txt b/intl/icu/source/data/locales/ar_TN.txt
index 81cd970ac..202e72fb7 100644
--- a/intl/icu/source/data/locales/ar_TN.txt
+++ b/intl/icu/source/data/locales/ar_TN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_TN{
NumberElements{
diff --git a/intl/icu/source/data/locales/ar_YE.txt b/intl/icu/source/data/locales/ar_YE.txt
index c009b37ea..486540a13 100644
--- a/intl/icu/source/data/locales/ar_YE.txt
+++ b/intl/icu/source/data/locales/ar_YE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar_YE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/as.txt b/intl/icu/source/data/locales/as.txt
index 84b93c044..0f12456d1 100644
--- a/intl/icu/source/data/locales/as.txt
+++ b/intl/icu/source/data/locales/as.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
as{
AuxExemplarCharacters{"[\u200C\u200D ৲]"}
diff --git a/intl/icu/source/data/locales/as_IN.txt b/intl/icu/source/data/locales/as_IN.txt
index 93ce6eafb..1b1a1dd51 100644
--- a/intl/icu/source/data/locales/as_IN.txt
+++ b/intl/icu/source/data/locales/as_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
as_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/asa.txt b/intl/icu/source/data/locales/asa.txt
index 4b02111d8..c517b4046 100644
--- a/intl/icu/source/data/locales/asa.txt
+++ b/intl/icu/source/data/locales/asa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
asa{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/asa_TZ.txt b/intl/icu/source/data/locales/asa_TZ.txt
index f43366f0f..aad3fc83e 100644
--- a/intl/icu/source/data/locales/asa_TZ.txt
+++ b/intl/icu/source/data/locales/asa_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
asa_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ast.txt b/intl/icu/source/data/locales/ast.txt
index 38f3adfb5..b40e5883b 100644
--- a/intl/icu/source/data/locales/ast.txt
+++ b/intl/icu/source/data/locales/ast.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ast{
AuxExemplarCharacters{"[ª à ă â å ä ã ā æ ç è ĕ ê ë ē ì ĭ î ï ī j k º ò ŏ ô ö ø ō œ ù ŭ û ū w ÿ]"}
@@ -2288,6 +2288,7 @@ ast{
"Taishō",
"e. Shōwa",
"Heisei",
+ "Reiwa",
}
narrow{
"Taika",
@@ -2526,6 +2527,7 @@ ast{
"T",
"S",
"H",
+ "R",
}
wide{
"Taika (645–650)",
@@ -2764,6 +2766,7 @@ ast{
"Taishō",
"era Shōwa",
"Heisei",
+ "Reiwa",
}
}
intervalFormats{
diff --git a/intl/icu/source/data/locales/ast_ES.txt b/intl/icu/source/data/locales/ast_ES.txt
index 2ce0bc867..ec11bb11b 100644
--- a/intl/icu/source/data/locales/ast_ES.txt
+++ b/intl/icu/source/data/locales/ast_ES.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ast_ES{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/az.txt b/intl/icu/source/data/locales/az.txt
index f1383b9a4..abcd993c9 100644
--- a/intl/icu/source/data/locales/az.txt
+++ b/intl/icu/source/data/locales/az.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az{
AuxExemplarCharacters{"[w]"}
diff --git a/intl/icu/source/data/locales/az_AZ.txt b/intl/icu/source/data/locales/az_AZ.txt
index caf84c095..7a07cbada 100644
--- a/intl/icu/source/data/locales/az_AZ.txt
+++ b/intl/icu/source/data/locales/az_AZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_AZ{
"%%ALIAS"{"az_Latn_AZ"}
diff --git a/intl/icu/source/data/locales/az_Cyrl.txt b/intl/icu/source/data/locales/az_Cyrl.txt
index e629a8190..c8d44c39f 100644
--- a/intl/icu/source/data/locales/az_Cyrl.txt
+++ b/intl/icu/source/data/locales/az_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_Cyrl{
%%Parent{"root"}
diff --git a/intl/icu/source/data/locales/az_Cyrl_AZ.txt b/intl/icu/source/data/locales/az_Cyrl_AZ.txt
index c80603df0..77d563c01 100644
--- a/intl/icu/source/data/locales/az_Cyrl_AZ.txt
+++ b/intl/icu/source/data/locales/az_Cyrl_AZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_Cyrl_AZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/az_Latn.txt b/intl/icu/source/data/locales/az_Latn.txt
index 59182e903..bf3068dc2 100644
--- a/intl/icu/source/data/locales/az_Latn.txt
+++ b/intl/icu/source/data/locales/az_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/az_Latn_AZ.txt b/intl/icu/source/data/locales/az_Latn_AZ.txt
index b95556ac2..af84d4580 100644
--- a/intl/icu/source/data/locales/az_Latn_AZ.txt
+++ b/intl/icu/source/data/locales/az_Latn_AZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_Latn_AZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bas.txt b/intl/icu/source/data/locales/bas.txt
index e9b993dbd..dee96e611 100644
--- a/intl/icu/source/data/locales/bas.txt
+++ b/intl/icu/source/data/locales/bas.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bas{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/bas_CM.txt b/intl/icu/source/data/locales/bas_CM.txt
index b4c19f9ec..413ddbf31 100644
--- a/intl/icu/source/data/locales/bas_CM.txt
+++ b/intl/icu/source/data/locales/bas_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bas_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/be.txt b/intl/icu/source/data/locales/be.txt
index add732499..b967fd527 100644
--- a/intl/icu/source/data/locales/be.txt
+++ b/intl/icu/source/data/locales/be.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
be{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/be_BY.txt b/intl/icu/source/data/locales/be_BY.txt
index 85327e2df..85bd80790 100644
--- a/intl/icu/source/data/locales/be_BY.txt
+++ b/intl/icu/source/data/locales/be_BY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
be_BY{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bem.txt b/intl/icu/source/data/locales/bem.txt
index 43ddcfd5b..ffef27667 100644
--- a/intl/icu/source/data/locales/bem.txt
+++ b/intl/icu/source/data/locales/bem.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bem{
AuxExemplarCharacters{"[d h q r v x z]"}
diff --git a/intl/icu/source/data/locales/bem_ZM.txt b/intl/icu/source/data/locales/bem_ZM.txt
index 9bfd49abd..33ef8e390 100644
--- a/intl/icu/source/data/locales/bem_ZM.txt
+++ b/intl/icu/source/data/locales/bem_ZM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bem_ZM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bez.txt b/intl/icu/source/data/locales/bez.txt
index 1f846120d..cee6cecf7 100644
--- a/intl/icu/source/data/locales/bez.txt
+++ b/intl/icu/source/data/locales/bez.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bez{
AuxExemplarCharacters{"[x]"}
diff --git a/intl/icu/source/data/locales/bez_TZ.txt b/intl/icu/source/data/locales/bez_TZ.txt
index 3f5cc5a7a..faf8f1e95 100644
--- a/intl/icu/source/data/locales/bez_TZ.txt
+++ b/intl/icu/source/data/locales/bez_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bez_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bg.txt b/intl/icu/source/data/locales/bg.txt
index ba97c2bb3..d2d5f0347 100644
--- a/intl/icu/source/data/locales/bg.txt
+++ b/intl/icu/source/data/locales/bg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bg{
AuxExemplarCharacters{"[{а\u0300} ѐ ё ѝ {о\u0300} {у\u0300} {ъ\u0300} ы ѣ э {ю\u0300} {я\u0300} ѫ]"}
diff --git a/intl/icu/source/data/locales/bg_BG.txt b/intl/icu/source/data/locales/bg_BG.txt
index 8d15348b9..d37c81b5b 100644
--- a/intl/icu/source/data/locales/bg_BG.txt
+++ b/intl/icu/source/data/locales/bg_BG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bg_BG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bm.txt b/intl/icu/source/data/locales/bm.txt
index 49d34c3e2..e975b75df 100644
--- a/intl/icu/source/data/locales/bm.txt
+++ b/intl/icu/source/data/locales/bm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bm{
AuxExemplarCharacters{"[q v x]"}
diff --git a/intl/icu/source/data/locales/bm_ML.txt b/intl/icu/source/data/locales/bm_ML.txt
index e146c65ed..9a8eb3c70 100644
--- a/intl/icu/source/data/locales/bm_ML.txt
+++ b/intl/icu/source/data/locales/bm_ML.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bm_ML{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bn.txt b/intl/icu/source/data/locales/bn.txt
index e83ad7406..0adbc23ba 100644
--- a/intl/icu/source/data/locales/bn.txt
+++ b/intl/icu/source/data/locales/bn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bn{
AuxExemplarCharacters{"[\u200C\u200D ৲ ৳ ৴ ৵ ৶ ৷ ৸ ৹ ৰ ৱ]"}
diff --git a/intl/icu/source/data/locales/bn_BD.txt b/intl/icu/source/data/locales/bn_BD.txt
index ea56a083d..3c1dc191d 100644
--- a/intl/icu/source/data/locales/bn_BD.txt
+++ b/intl/icu/source/data/locales/bn_BD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bn_BD{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bn_IN.txt b/intl/icu/source/data/locales/bn_IN.txt
index c0372f5d0..e590f1da7 100644
--- a/intl/icu/source/data/locales/bn_IN.txt
+++ b/intl/icu/source/data/locales/bn_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bn_IN{
Version{"2.1.29.54"}
diff --git a/intl/icu/source/data/locales/bo.txt b/intl/icu/source/data/locales/bo.txt
index 53b28b5b2..499c6c113 100644
--- a/intl/icu/source/data/locales/bo.txt
+++ b/intl/icu/source/data/locales/bo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bo{
AuxExemplarCharacters{"[ༀ]"}
diff --git a/intl/icu/source/data/locales/bo_CN.txt b/intl/icu/source/data/locales/bo_CN.txt
index 3f92f4d83..6bd7d9e6e 100644
--- a/intl/icu/source/data/locales/bo_CN.txt
+++ b/intl/icu/source/data/locales/bo_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bo_CN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bo_IN.txt b/intl/icu/source/data/locales/bo_IN.txt
index e60d43398..568b80b6b 100644
--- a/intl/icu/source/data/locales/bo_IN.txt
+++ b/intl/icu/source/data/locales/bo_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bo_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/br.txt b/intl/icu/source/data/locales/br.txt
index 8b676eae8..17aa45399 100644
--- a/intl/icu/source/data/locales/br.txt
+++ b/intl/icu/source/data/locales/br.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
br{
AuxExemplarCharacters{"[á à ă â å ä ã ā æ c ç é è ĕ ë ē í ì ĭ î ï ī ó ò ŏ ô ö ø ō œ q ú ŭ û ü ū ÿ]"}
diff --git a/intl/icu/source/data/locales/br_FR.txt b/intl/icu/source/data/locales/br_FR.txt
index 41f752e5d..62bb89fea 100644
--- a/intl/icu/source/data/locales/br_FR.txt
+++ b/intl/icu/source/data/locales/br_FR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
br_FR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/brx.txt b/intl/icu/source/data/locales/brx.txt
index 74e2d56ef..460a739a9 100644
--- a/intl/icu/source/data/locales/brx.txt
+++ b/intl/icu/source/data/locales/brx.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
brx{
AuxExemplarCharacters{"[\u200C\u200D]"}
diff --git a/intl/icu/source/data/locales/brx_IN.txt b/intl/icu/source/data/locales/brx_IN.txt
index fead065b3..89241ce61 100644
--- a/intl/icu/source/data/locales/brx_IN.txt
+++ b/intl/icu/source/data/locales/brx_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
brx_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bs.txt b/intl/icu/source/data/locales/bs.txt
index 343e107f0..ba5bc38c8 100644
--- a/intl/icu/source/data/locales/bs.txt
+++ b/intl/icu/source/data/locales/bs.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs{
AuxExemplarCharacters{"[q w x y]"}
diff --git a/intl/icu/source/data/locales/bs_BA.txt b/intl/icu/source/data/locales/bs_BA.txt
index e5e3a4657..b347c85a5 100644
--- a/intl/icu/source/data/locales/bs_BA.txt
+++ b/intl/icu/source/data/locales/bs_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_BA{
"%%ALIAS"{"bs_Latn_BA"}
diff --git a/intl/icu/source/data/locales/bs_Cyrl.txt b/intl/icu/source/data/locales/bs_Cyrl.txt
index 03b685def..f4ea6ceec 100644
--- a/intl/icu/source/data/locales/bs_Cyrl.txt
+++ b/intl/icu/source/data/locales/bs_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Cyrl{
%%Parent{"root"}
@@ -991,6 +991,7 @@ bs_Cyrl{
"Таишо",
"Шова",
"Хаисеи",
+ "Реива",
}
}
}
diff --git a/intl/icu/source/data/locales/bs_Cyrl_BA.txt b/intl/icu/source/data/locales/bs_Cyrl_BA.txt
index 4fa9c3481..eadc8c2cf 100644
--- a/intl/icu/source/data/locales/bs_Cyrl_BA.txt
+++ b/intl/icu/source/data/locales/bs_Cyrl_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Cyrl_BA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bs_Latn.txt b/intl/icu/source/data/locales/bs_Latn.txt
index 9163b6927..bdd79b703 100644
--- a/intl/icu/source/data/locales/bs_Latn.txt
+++ b/intl/icu/source/data/locales/bs_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/bs_Latn_BA.txt b/intl/icu/source/data/locales/bs_Latn_BA.txt
index c629b91b9..d6ad77484 100644
--- a/intl/icu/source/data/locales/bs_Latn_BA.txt
+++ b/intl/icu/source/data/locales/bs_Latn_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Latn_BA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ca.txt b/intl/icu/source/data/locales/ca.txt
index 67d753044..9e44bf4f6 100644
--- a/intl/icu/source/data/locales/ca.txt
+++ b/intl/icu/source/data/locales/ca.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca{
AuxExemplarCharacters{"[á ă â å ä ã ā æ ĕ ê ë ē ì ĭ î ī ŀ ñ º ŏ ô ö ø ō œ ù ŭ û ū ÿ]"}
diff --git a/intl/icu/source/data/locales/ca_AD.txt b/intl/icu/source/data/locales/ca_AD.txt
index 4370b1575..09953d1e2 100644
--- a/intl/icu/source/data/locales/ca_AD.txt
+++ b/intl/icu/source/data/locales/ca_AD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca_AD{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ca_ES.txt b/intl/icu/source/data/locales/ca_ES.txt
index a3bee457c..de93ff2da 100644
--- a/intl/icu/source/data/locales/ca_ES.txt
+++ b/intl/icu/source/data/locales/ca_ES.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca_ES{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ca_FR.txt b/intl/icu/source/data/locales/ca_FR.txt
index fe1f982cd..4998de502 100644
--- a/intl/icu/source/data/locales/ca_FR.txt
+++ b/intl/icu/source/data/locales/ca_FR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca_FR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ca_IT.txt b/intl/icu/source/data/locales/ca_IT.txt
index 568231d4d..02dc04660 100644
--- a/intl/icu/source/data/locales/ca_IT.txt
+++ b/intl/icu/source/data/locales/ca_IT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca_IT{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ce.txt b/intl/icu/source/data/locales/ce.txt
index 49f2f83f9..3a7bcc3e6 100644
--- a/intl/icu/source/data/locales/ce.txt
+++ b/intl/icu/source/data/locales/ce.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ce{
ExemplarCharacters{
diff --git a/intl/icu/source/data/locales/ce_RU.txt b/intl/icu/source/data/locales/ce_RU.txt
index d8440eec3..1e1704ac7 100644
--- a/intl/icu/source/data/locales/ce_RU.txt
+++ b/intl/icu/source/data/locales/ce_RU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ce_RU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/cgg.txt b/intl/icu/source/data/locales/cgg.txt
index 7428fcccc..90ffc5a56 100644
--- a/intl/icu/source/data/locales/cgg.txt
+++ b/intl/icu/source/data/locales/cgg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cgg{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/cgg_UG.txt b/intl/icu/source/data/locales/cgg_UG.txt
index 809d2ac21..ff186bb85 100644
--- a/intl/icu/source/data/locales/cgg_UG.txt
+++ b/intl/icu/source/data/locales/cgg_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cgg_UG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/chr.txt b/intl/icu/source/data/locales/chr.txt
index 40efe7ea8..1b9fd3044 100644
--- a/intl/icu/source/data/locales/chr.txt
+++ b/intl/icu/source/data/locales/chr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
chr{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/chr_US.txt b/intl/icu/source/data/locales/chr_US.txt
index 84ad34937..22273e8ef 100644
--- a/intl/icu/source/data/locales/chr_US.txt
+++ b/intl/icu/source/data/locales/chr_US.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
chr_US{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ckb.txt b/intl/icu/source/data/locales/ckb.txt
index 8867d9dd3..21cfe4a0c 100644
--- a/intl/icu/source/data/locales/ckb.txt
+++ b/intl/icu/source/data/locales/ckb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ckb{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/ckb_IQ.txt b/intl/icu/source/data/locales/ckb_IQ.txt
index 2ae53cb44..094ce9dcd 100644
--- a/intl/icu/source/data/locales/ckb_IQ.txt
+++ b/intl/icu/source/data/locales/ckb_IQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ckb_IQ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ckb_IR.txt b/intl/icu/source/data/locales/ckb_IR.txt
index b8fb48e81..39cbba349 100644
--- a/intl/icu/source/data/locales/ckb_IR.txt
+++ b/intl/icu/source/data/locales/ckb_IR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ckb_IR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/cs.txt b/intl/icu/source/data/locales/cs.txt
index 59826af1d..711294d9e 100644
--- a/intl/icu/source/data/locales/cs.txt
+++ b/intl/icu/source/data/locales/cs.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cs{
AuxExemplarCharacters{"[à ă â å ä ã ā æ ç è ĕ ê ë ē ì ĭ î ï ī ľ ł ñ ò ŏ ô ö ø ō œ ŕ ù ŭ û ü ū ÿ]"}
@@ -2259,6 +2259,7 @@ cs{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
narrow{
"Taika (645–650)",
@@ -2497,6 +2498,7 @@ cs{
"T",
"S",
"H",
+ "R",
}
wide{
"Taika (645–650)",
@@ -2735,6 +2737,7 @@ cs{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/cs_CZ.txt b/intl/icu/source/data/locales/cs_CZ.txt
index 5797b5818..3de142437 100644
--- a/intl/icu/source/data/locales/cs_CZ.txt
+++ b/intl/icu/source/data/locales/cs_CZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cs_CZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/cy.txt b/intl/icu/source/data/locales/cy.txt
index af177c1b7..a02b4b513 100644
--- a/intl/icu/source/data/locales/cy.txt
+++ b/intl/icu/source/data/locales/cy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cy{
AuxExemplarCharacters{"[ă å ã ā æ ç ĕ ē ĭ ī k ñ ŏ ø ō œ q ŭ ū v x z]"}
diff --git a/intl/icu/source/data/locales/cy_GB.txt b/intl/icu/source/data/locales/cy_GB.txt
index 86724d6ca..de922e0bf 100644
--- a/intl/icu/source/data/locales/cy_GB.txt
+++ b/intl/icu/source/data/locales/cy_GB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cy_GB{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/da.txt b/intl/icu/source/data/locales/da.txt
index bc74ed557..189a1a588 100644
--- a/intl/icu/source/data/locales/da.txt
+++ b/intl/icu/source/data/locales/da.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
da{
AuxExemplarCharacters{"[á à â ç é è ê ë í î ï ñ ó ô ú ù û ÿ ü ä ǿ ö œ]"}
diff --git a/intl/icu/source/data/locales/da_DK.txt b/intl/icu/source/data/locales/da_DK.txt
index 410cf1de6..d58d7fb4c 100644
--- a/intl/icu/source/data/locales/da_DK.txt
+++ b/intl/icu/source/data/locales/da_DK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
da_DK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/da_GL.txt b/intl/icu/source/data/locales/da_GL.txt
index 6ea449817..4f9c4b1b3 100644
--- a/intl/icu/source/data/locales/da_GL.txt
+++ b/intl/icu/source/data/locales/da_GL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
da_GL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/dav.txt b/intl/icu/source/data/locales/dav.txt
index 8f9359a2c..d428b017b 100644
--- a/intl/icu/source/data/locales/dav.txt
+++ b/intl/icu/source/data/locales/dav.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dav{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/dav_KE.txt b/intl/icu/source/data/locales/dav_KE.txt
index 5327e2255..8fc49a8e3 100644
--- a/intl/icu/source/data/locales/dav_KE.txt
+++ b/intl/icu/source/data/locales/dav_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dav_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/de.txt b/intl/icu/source/data/locales/de.txt
index b1f43a2af..00b1ccde7 100644
--- a/intl/icu/source/data/locales/de.txt
+++ b/intl/icu/source/data/locales/de.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de{
AuxExemplarCharacters{
@@ -1188,6 +1188,7 @@ de{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/de_AT.txt b/intl/icu/source/data/locales/de_AT.txt
index 9b106f88a..9ffb1ebb5 100644
--- a/intl/icu/source/data/locales/de_AT.txt
+++ b/intl/icu/source/data/locales/de_AT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_AT{
ExemplarCharactersIndex{"[A Ä B C D E F G H I J K L M N O Ö P Q R S T U Ü V W X Y Z]"}
diff --git a/intl/icu/source/data/locales/de_BE.txt b/intl/icu/source/data/locales/de_BE.txt
index f2c6201f7..c2f286d82 100644
--- a/intl/icu/source/data/locales/de_BE.txt
+++ b/intl/icu/source/data/locales/de_BE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_BE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/de_CH.txt b/intl/icu/source/data/locales/de_CH.txt
index 5342779c5..2f890a9b5 100644
--- a/intl/icu/source/data/locales/de_CH.txt
+++ b/intl/icu/source/data/locales/de_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_CH{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/de_DE.txt b/intl/icu/source/data/locales/de_DE.txt
index c30818cd6..b973e6381 100644
--- a/intl/icu/source/data/locales/de_DE.txt
+++ b/intl/icu/source/data/locales/de_DE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_DE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/de_IT.txt b/intl/icu/source/data/locales/de_IT.txt
index c15c4269e..d602dc075 100644
--- a/intl/icu/source/data/locales/de_IT.txt
+++ b/intl/icu/source/data/locales/de_IT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_IT{
Version{"2.1.28.58"}
diff --git a/intl/icu/source/data/locales/de_LI.txt b/intl/icu/source/data/locales/de_LI.txt
index 7588c92b8..046aee1f4 100644
--- a/intl/icu/source/data/locales/de_LI.txt
+++ b/intl/icu/source/data/locales/de_LI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_LI{
NumberElements{
diff --git a/intl/icu/source/data/locales/de_LU.txt b/intl/icu/source/data/locales/de_LU.txt
index 7a2697555..78001be91 100644
--- a/intl/icu/source/data/locales/de_LU.txt
+++ b/intl/icu/source/data/locales/de_LU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de_LU{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/dje.txt b/intl/icu/source/data/locales/dje.txt
index 5719a1cef..909160ba0 100644
--- a/intl/icu/source/data/locales/dje.txt
+++ b/intl/icu/source/data/locales/dje.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dje{
AuxExemplarCharacters{"[v]"}
diff --git a/intl/icu/source/data/locales/dje_NE.txt b/intl/icu/source/data/locales/dje_NE.txt
index ef63522e3..665f73749 100644
--- a/intl/icu/source/data/locales/dje_NE.txt
+++ b/intl/icu/source/data/locales/dje_NE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dje_NE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/dsb.txt b/intl/icu/source/data/locales/dsb.txt
index 493692624..b330cbf8d 100644
--- a/intl/icu/source/data/locales/dsb.txt
+++ b/intl/icu/source/data/locales/dsb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dsb{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/dsb_DE.txt b/intl/icu/source/data/locales/dsb_DE.txt
index f924dd634..0dfbcc932 100644
--- a/intl/icu/source/data/locales/dsb_DE.txt
+++ b/intl/icu/source/data/locales/dsb_DE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dsb_DE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/dua.txt b/intl/icu/source/data/locales/dua.txt
index e96ee4ace..7f4053436 100644
--- a/intl/icu/source/data/locales/dua.txt
+++ b/intl/icu/source/data/locales/dua.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dua{
AuxExemplarCharacters{"[h q v x z]"}
diff --git a/intl/icu/source/data/locales/dua_CM.txt b/intl/icu/source/data/locales/dua_CM.txt
index 30ee9745a..bbb124d9d 100644
--- a/intl/icu/source/data/locales/dua_CM.txt
+++ b/intl/icu/source/data/locales/dua_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dua_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/dyo.txt b/intl/icu/source/data/locales/dyo.txt
index 6389359e3..d696ec138 100644
--- a/intl/icu/source/data/locales/dyo.txt
+++ b/intl/icu/source/data/locales/dyo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dyo{
AuxExemplarCharacters{"[z]"}
diff --git a/intl/icu/source/data/locales/dyo_SN.txt b/intl/icu/source/data/locales/dyo_SN.txt
index f8229d472..a348cc302 100644
--- a/intl/icu/source/data/locales/dyo_SN.txt
+++ b/intl/icu/source/data/locales/dyo_SN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dyo_SN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/dz.txt b/intl/icu/source/data/locales/dz.txt
index 04bca7033..14bb96b90 100644
--- a/intl/icu/source/data/locales/dz.txt
+++ b/intl/icu/source/data/locales/dz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dz{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/dz_BT.txt b/intl/icu/source/data/locales/dz_BT.txt
index a114a5c95..13a12c8cd 100644
--- a/intl/icu/source/data/locales/dz_BT.txt
+++ b/intl/icu/source/data/locales/dz_BT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dz_BT{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ebu.txt b/intl/icu/source/data/locales/ebu.txt
index 7ad39002a..acfbe2c1b 100644
--- a/intl/icu/source/data/locales/ebu.txt
+++ b/intl/icu/source/data/locales/ebu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ebu{
ExemplarCharacters{"[a b c d e f g h i ĩ j k l m n o p q r s t u ũ v w x y z]"}
diff --git a/intl/icu/source/data/locales/ebu_KE.txt b/intl/icu/source/data/locales/ebu_KE.txt
index 77c74abab..ecb6d0763 100644
--- a/intl/icu/source/data/locales/ebu_KE.txt
+++ b/intl/icu/source/data/locales/ebu_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ebu_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ee.txt b/intl/icu/source/data/locales/ee.txt
index e3f3be437..578ad05a9 100644
--- a/intl/icu/source/data/locales/ee.txt
+++ b/intl/icu/source/data/locales/ee.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ee{
AuxExemplarCharacters{"[ă â å ä ā æ c ç ĕ ê ë ĭ î ï j ñ ŏ ô ö ø œ q ŭ û ü ÿ]"}
diff --git a/intl/icu/source/data/locales/ee_GH.txt b/intl/icu/source/data/locales/ee_GH.txt
index 138ff4f1a..c7a3da6c7 100644
--- a/intl/icu/source/data/locales/ee_GH.txt
+++ b/intl/icu/source/data/locales/ee_GH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ee_GH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ee_TG.txt b/intl/icu/source/data/locales/ee_TG.txt
index 624fc3572..1e4eece7c 100644
--- a/intl/icu/source/data/locales/ee_TG.txt
+++ b/intl/icu/source/data/locales/ee_TG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ee_TG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/el.txt b/intl/icu/source/data/locales/el.txt
index d1d422d1a..7b4cdbd16 100644
--- a/intl/icu/source/data/locales/el.txt
+++ b/intl/icu/source/data/locales/el.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
el{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/el_CY.txt b/intl/icu/source/data/locales/el_CY.txt
index eadcd5e87..7c80f4e55 100644
--- a/intl/icu/source/data/locales/el_CY.txt
+++ b/intl/icu/source/data/locales/el_CY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
el_CY{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/el_GR.txt b/intl/icu/source/data/locales/el_GR.txt
index e3bf6ebfa..7a804bc67 100644
--- a/intl/icu/source/data/locales/el_GR.txt
+++ b/intl/icu/source/data/locales/el_GR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
el_GR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en.txt b/intl/icu/source/data/locales/en.txt
index 2a81202e6..3ff3a1def 100644
--- a/intl/icu/source/data/locales/en.txt
+++ b/intl/icu/source/data/locales/en.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/en_001.txt b/intl/icu/source/data/locales/en_001.txt
index 3bef80257..31eaeb0c3 100644
--- a/intl/icu/source/data/locales/en_001.txt
+++ b/intl/icu/source/data/locales/en_001.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_001{
Version{"2.1.29.54"}
diff --git a/intl/icu/source/data/locales/en_150.txt b/intl/icu/source/data/locales/en_150.txt
index 789ac2221..851d9fc14 100644
--- a/intl/icu/source/data/locales/en_150.txt
+++ b/intl/icu/source/data/locales/en_150.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_150{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_AG.txt b/intl/icu/source/data/locales/en_AG.txt
index 85efa69c1..c1126ccac 100644
--- a/intl/icu/source/data/locales/en_AG.txt
+++ b/intl/icu/source/data/locales/en_AG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_AI.txt b/intl/icu/source/data/locales/en_AI.txt
index cc2c8020d..a4b5293f2 100644
--- a/intl/icu/source/data/locales/en_AI.txt
+++ b/intl/icu/source/data/locales/en_AI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_AS.txt b/intl/icu/source/data/locales/en_AS.txt
index d440769dd..78acaed99 100644
--- a/intl/icu/source/data/locales/en_AS.txt
+++ b/intl/icu/source/data/locales/en_AS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AS{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_AT.txt b/intl/icu/source/data/locales/en_AT.txt
index 9c45ab20b..49377f468 100644
--- a/intl/icu/source/data/locales/en_AT.txt
+++ b/intl/icu/source/data/locales/en_AT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AT{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/locales/en_AU.txt b/intl/icu/source/data/locales/en_AU.txt
index 6d509536e..7b05dd3a3 100644
--- a/intl/icu/source/data/locales/en_AU.txt
+++ b/intl/icu/source/data/locales/en_AU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_BB.txt b/intl/icu/source/data/locales/en_BB.txt
index 0cc013f0a..83b10f134 100644
--- a/intl/icu/source/data/locales/en_BB.txt
+++ b/intl/icu/source/data/locales/en_BB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_BE.txt b/intl/icu/source/data/locales/en_BE.txt
index f19595591..ee16f10c7 100644
--- a/intl/icu/source/data/locales/en_BE.txt
+++ b/intl/icu/source/data/locales/en_BE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_BI.txt b/intl/icu/source/data/locales/en_BI.txt
index 20496ae5f..4634e9cd3 100644
--- a/intl/icu/source/data/locales/en_BI.txt
+++ b/intl/icu/source/data/locales/en_BI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BI{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_BM.txt b/intl/icu/source/data/locales/en_BM.txt
index 817b1d4db..0e83ae213 100644
--- a/intl/icu/source/data/locales/en_BM.txt
+++ b/intl/icu/source/data/locales/en_BM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_BS.txt b/intl/icu/source/data/locales/en_BS.txt
index de6b10199..cf13bfe2c 100644
--- a/intl/icu/source/data/locales/en_BS.txt
+++ b/intl/icu/source/data/locales/en_BS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_BW.txt b/intl/icu/source/data/locales/en_BW.txt
index cc5265a47..3ca017dfb 100644
--- a/intl/icu/source/data/locales/en_BW.txt
+++ b/intl/icu/source/data/locales/en_BW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_BZ.txt b/intl/icu/source/data/locales/en_BZ.txt
index eee117d78..0bbeb5aa3 100644
--- a/intl/icu/source/data/locales/en_BZ.txt
+++ b/intl/icu/source/data/locales/en_BZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_CA.txt b/intl/icu/source/data/locales/en_CA.txt
index 99aba65a1..fdacb17f1 100644
--- a/intl/icu/source/data/locales/en_CA.txt
+++ b/intl/icu/source/data/locales/en_CA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_CC.txt b/intl/icu/source/data/locales/en_CC.txt
index c25e6442c..47b57e050 100644
--- a/intl/icu/source/data/locales/en_CC.txt
+++ b/intl/icu/source/data/locales/en_CC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_CH.txt b/intl/icu/source/data/locales/en_CH.txt
index 27380ee6b..3f9a7f8b4 100644
--- a/intl/icu/source/data/locales/en_CH.txt
+++ b/intl/icu/source/data/locales/en_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CH{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/locales/en_CK.txt b/intl/icu/source/data/locales/en_CK.txt
index 47f04bd5f..67cdd6095 100644
--- a/intl/icu/source/data/locales/en_CK.txt
+++ b/intl/icu/source/data/locales/en_CK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_CM.txt b/intl/icu/source/data/locales/en_CM.txt
index 8968ddd3a..917e309f6 100644
--- a/intl/icu/source/data/locales/en_CM.txt
+++ b/intl/icu/source/data/locales/en_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_CX.txt b/intl/icu/source/data/locales/en_CX.txt
index 9146c1e44..b5c666a12 100644
--- a/intl/icu/source/data/locales/en_CX.txt
+++ b/intl/icu/source/data/locales/en_CX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CX{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_CY.txt b/intl/icu/source/data/locales/en_CY.txt
index ccbf61916..bee3916a5 100644
--- a/intl/icu/source/data/locales/en_CY.txt
+++ b/intl/icu/source/data/locales/en_CY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_DE.txt b/intl/icu/source/data/locales/en_DE.txt
index d4a7bdedd..d3e4c47e9 100644
--- a/intl/icu/source/data/locales/en_DE.txt
+++ b/intl/icu/source/data/locales/en_DE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DE{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/locales/en_DG.txt b/intl/icu/source/data/locales/en_DG.txt
index 3b0557af2..4e8ffb250 100644
--- a/intl/icu/source/data/locales/en_DG.txt
+++ b/intl/icu/source/data/locales/en_DG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_DK.txt b/intl/icu/source/data/locales/en_DK.txt
index a41fc4ab8..80411ce0b 100644
--- a/intl/icu/source/data/locales/en_DK.txt
+++ b/intl/icu/source/data/locales/en_DK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DK{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/locales/en_DM.txt b/intl/icu/source/data/locales/en_DM.txt
index 6811cff12..eb5bbfbcf 100644
--- a/intl/icu/source/data/locales/en_DM.txt
+++ b/intl/icu/source/data/locales/en_DM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_ER.txt b/intl/icu/source/data/locales/en_ER.txt
index 82919fd68..6619b17b6 100644
--- a/intl/icu/source/data/locales/en_ER.txt
+++ b/intl/icu/source/data/locales/en_ER.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ER{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_FI.txt b/intl/icu/source/data/locales/en_FI.txt
index 593c00a14..827f4afe4 100644
--- a/intl/icu/source/data/locales/en_FI.txt
+++ b/intl/icu/source/data/locales/en_FI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FI{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/locales/en_FJ.txt b/intl/icu/source/data/locales/en_FJ.txt
index b22339a2f..7ebd79ca9 100644
--- a/intl/icu/source/data/locales/en_FJ.txt
+++ b/intl/icu/source/data/locales/en_FJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FJ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_FK.txt b/intl/icu/source/data/locales/en_FK.txt
index 9a400d67c..fb6ca7376 100644
--- a/intl/icu/source/data/locales/en_FK.txt
+++ b/intl/icu/source/data/locales/en_FK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_FM.txt b/intl/icu/source/data/locales/en_FM.txt
index 0d69e7144..99961ceec 100644
--- a/intl/icu/source/data/locales/en_FM.txt
+++ b/intl/icu/source/data/locales/en_FM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_GB.txt b/intl/icu/source/data/locales/en_GB.txt
index 9718c9d36..645d0c9c9 100644
--- a/intl/icu/source/data/locales/en_GB.txt
+++ b/intl/icu/source/data/locales/en_GB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_GD.txt b/intl/icu/source/data/locales/en_GD.txt
index 69be2478f..49fe1e0d0 100644
--- a/intl/icu/source/data/locales/en_GD.txt
+++ b/intl/icu/source/data/locales/en_GD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GD{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_GG.txt b/intl/icu/source/data/locales/en_GG.txt
index ee3ec2263..0d6eab961 100644
--- a/intl/icu/source/data/locales/en_GG.txt
+++ b/intl/icu/source/data/locales/en_GG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_GH.txt b/intl/icu/source/data/locales/en_GH.txt
index 54ca44621..85555dbc8 100644
--- a/intl/icu/source/data/locales/en_GH.txt
+++ b/intl/icu/source/data/locales/en_GH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_GI.txt b/intl/icu/source/data/locales/en_GI.txt
index 3296a7ca8..c46ca0914 100644
--- a/intl/icu/source/data/locales/en_GI.txt
+++ b/intl/icu/source/data/locales/en_GI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_GM.txt b/intl/icu/source/data/locales/en_GM.txt
index 48193f35a..37961a25f 100644
--- a/intl/icu/source/data/locales/en_GM.txt
+++ b/intl/icu/source/data/locales/en_GM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_GU.txt b/intl/icu/source/data/locales/en_GU.txt
index 354af2939..5f9abf3fb 100644
--- a/intl/icu/source/data/locales/en_GU.txt
+++ b/intl/icu/source/data/locales/en_GU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_GY.txt b/intl/icu/source/data/locales/en_GY.txt
index 53782ef83..edfab4ade 100644
--- a/intl/icu/source/data/locales/en_GY.txt
+++ b/intl/icu/source/data/locales/en_GY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_HK.txt b/intl/icu/source/data/locales/en_HK.txt
index 1bfc85eec..27c54756e 100644
--- a/intl/icu/source/data/locales/en_HK.txt
+++ b/intl/icu/source/data/locales/en_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_HK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_IE.txt b/intl/icu/source/data/locales/en_IE.txt
index 52a831c0a..371eb7751 100644
--- a/intl/icu/source/data/locales/en_IE.txt
+++ b/intl/icu/source/data/locales/en_IE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_IL.txt b/intl/icu/source/data/locales/en_IL.txt
index 7bc194d09..a679082e3 100644
--- a/intl/icu/source/data/locales/en_IL.txt
+++ b/intl/icu/source/data/locales/en_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IL{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_IM.txt b/intl/icu/source/data/locales/en_IM.txt
index 56a20c632..108eea209 100644
--- a/intl/icu/source/data/locales/en_IM.txt
+++ b/intl/icu/source/data/locales/en_IM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_IN.txt b/intl/icu/source/data/locales/en_IN.txt
index d07c3834f..99632aef6 100644
--- a/intl/icu/source/data/locales/en_IN.txt
+++ b/intl/icu/source/data/locales/en_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_IO.txt b/intl/icu/source/data/locales/en_IO.txt
index 90a0a5804..4f7766da5 100644
--- a/intl/icu/source/data/locales/en_IO.txt
+++ b/intl/icu/source/data/locales/en_IO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_JE.txt b/intl/icu/source/data/locales/en_JE.txt
index 4ef344e89..f2a8312b6 100644
--- a/intl/icu/source/data/locales/en_JE.txt
+++ b/intl/icu/source/data/locales/en_JE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_JE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_JM.txt b/intl/icu/source/data/locales/en_JM.txt
index 11356e70f..0d2496752 100644
--- a/intl/icu/source/data/locales/en_JM.txt
+++ b/intl/icu/source/data/locales/en_JM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_JM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_KE.txt b/intl/icu/source/data/locales/en_KE.txt
index 72ed0fec6..45b8fb8d5 100644
--- a/intl/icu/source/data/locales/en_KE.txt
+++ b/intl/icu/source/data/locales/en_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_KI.txt b/intl/icu/source/data/locales/en_KI.txt
index 862415465..2124576d0 100644
--- a/intl/icu/source/data/locales/en_KI.txt
+++ b/intl/icu/source/data/locales/en_KI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_KN.txt b/intl/icu/source/data/locales/en_KN.txt
index b68c8f161..da57520f3 100644
--- a/intl/icu/source/data/locales/en_KN.txt
+++ b/intl/icu/source/data/locales/en_KN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_KY.txt b/intl/icu/source/data/locales/en_KY.txt
index febcc6f32..ebb848e32 100644
--- a/intl/icu/source/data/locales/en_KY.txt
+++ b/intl/icu/source/data/locales/en_KY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_LC.txt b/intl/icu/source/data/locales/en_LC.txt
index b781315c3..0804526bb 100644
--- a/intl/icu/source/data/locales/en_LC.txt
+++ b/intl/icu/source/data/locales/en_LC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_LR.txt b/intl/icu/source/data/locales/en_LR.txt
index f1a2ce0bc..9870f08ca 100644
--- a/intl/icu/source/data/locales/en_LR.txt
+++ b/intl/icu/source/data/locales/en_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LR{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_LS.txt b/intl/icu/source/data/locales/en_LS.txt
index ce9cd01b2..fa7246775 100644
--- a/intl/icu/source/data/locales/en_LS.txt
+++ b/intl/icu/source/data/locales/en_LS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_MG.txt b/intl/icu/source/data/locales/en_MG.txt
index 4c4e13888..50d4c6d45 100644
--- a/intl/icu/source/data/locales/en_MG.txt
+++ b/intl/icu/source/data/locales/en_MG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_MH.txt b/intl/icu/source/data/locales/en_MH.txt
index 99447d188..9e257d47b 100644
--- a/intl/icu/source/data/locales/en_MH.txt
+++ b/intl/icu/source/data/locales/en_MH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_MO.txt b/intl/icu/source/data/locales/en_MO.txt
index 7995d518b..44b669528 100644
--- a/intl/icu/source/data/locales/en_MO.txt
+++ b/intl/icu/source/data/locales/en_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_MP.txt b/intl/icu/source/data/locales/en_MP.txt
index f5e89b85d..85b620abf 100644
--- a/intl/icu/source/data/locales/en_MP.txt
+++ b/intl/icu/source/data/locales/en_MP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MP{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_MS.txt b/intl/icu/source/data/locales/en_MS.txt
index 8dc532a3f..65b5daa03 100644
--- a/intl/icu/source/data/locales/en_MS.txt
+++ b/intl/icu/source/data/locales/en_MS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_MT.txt b/intl/icu/source/data/locales/en_MT.txt
index 0f07f7a6d..dd39b42e4 100644
--- a/intl/icu/source/data/locales/en_MT.txt
+++ b/intl/icu/source/data/locales/en_MT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MT{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_MU.txt b/intl/icu/source/data/locales/en_MU.txt
index 48632dcd6..beeef7802 100644
--- a/intl/icu/source/data/locales/en_MU.txt
+++ b/intl/icu/source/data/locales/en_MU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_MW.txt b/intl/icu/source/data/locales/en_MW.txt
index 8e440d49d..8bdaeeb7b 100644
--- a/intl/icu/source/data/locales/en_MW.txt
+++ b/intl/icu/source/data/locales/en_MW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_MY.txt b/intl/icu/source/data/locales/en_MY.txt
index 472271294..430090c44 100644
--- a/intl/icu/source/data/locales/en_MY.txt
+++ b/intl/icu/source/data/locales/en_MY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_NA.txt b/intl/icu/source/data/locales/en_NA.txt
index b7ebdac78..b3c24131c 100644
--- a/intl/icu/source/data/locales/en_NA.txt
+++ b/intl/icu/source/data/locales/en_NA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_NF.txt b/intl/icu/source/data/locales/en_NF.txt
index 034b067ad..282e46c2e 100644
--- a/intl/icu/source/data/locales/en_NF.txt
+++ b/intl/icu/source/data/locales/en_NF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NF{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_NG.txt b/intl/icu/source/data/locales/en_NG.txt
index a6752cd79..b7f3ad7ab 100644
--- a/intl/icu/source/data/locales/en_NG.txt
+++ b/intl/icu/source/data/locales/en_NG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_NH.txt b/intl/icu/source/data/locales/en_NH.txt
index 958b96bda..6bd32f2e3 100644
--- a/intl/icu/source/data/locales/en_NH.txt
+++ b/intl/icu/source/data/locales/en_NH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NH{
"%%ALIAS"{"en_VU"}
diff --git a/intl/icu/source/data/locales/en_NL.txt b/intl/icu/source/data/locales/en_NL.txt
index cb158897a..d820373ab 100644
--- a/intl/icu/source/data/locales/en_NL.txt
+++ b/intl/icu/source/data/locales/en_NL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NL{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/locales/en_NR.txt b/intl/icu/source/data/locales/en_NR.txt
index 27c79d69f..4842e4ee3 100644
--- a/intl/icu/source/data/locales/en_NR.txt
+++ b/intl/icu/source/data/locales/en_NR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NR{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_NU.txt b/intl/icu/source/data/locales/en_NU.txt
index 8dcd6ba12..e52de1fa4 100644
--- a/intl/icu/source/data/locales/en_NU.txt
+++ b/intl/icu/source/data/locales/en_NU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_NZ.txt b/intl/icu/source/data/locales/en_NZ.txt
index b81cb1b1f..23d6d87f0 100644
--- a/intl/icu/source/data/locales/en_NZ.txt
+++ b/intl/icu/source/data/locales/en_NZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_PG.txt b/intl/icu/source/data/locales/en_PG.txt
index 58ac3ca25..604510c9d 100644
--- a/intl/icu/source/data/locales/en_PG.txt
+++ b/intl/icu/source/data/locales/en_PG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_PH.txt b/intl/icu/source/data/locales/en_PH.txt
index 5264c4069..609a3b622 100644
--- a/intl/icu/source/data/locales/en_PH.txt
+++ b/intl/icu/source/data/locales/en_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_PK.txt b/intl/icu/source/data/locales/en_PK.txt
index 98b9d8d7a..3c7417200 100644
--- a/intl/icu/source/data/locales/en_PK.txt
+++ b/intl/icu/source/data/locales/en_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_PN.txt b/intl/icu/source/data/locales/en_PN.txt
index 1400af588..d43e93290 100644
--- a/intl/icu/source/data/locales/en_PN.txt
+++ b/intl/icu/source/data/locales/en_PN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_PR.txt b/intl/icu/source/data/locales/en_PR.txt
index eb75fff31..45eac57fc 100644
--- a/intl/icu/source/data/locales/en_PR.txt
+++ b/intl/icu/source/data/locales/en_PR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_PW.txt b/intl/icu/source/data/locales/en_PW.txt
index 3825c9fec..5afb37694 100644
--- a/intl/icu/source/data/locales/en_PW.txt
+++ b/intl/icu/source/data/locales/en_PW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_RH.txt b/intl/icu/source/data/locales/en_RH.txt
index b60f708fb..2ac5ccfba 100644
--- a/intl/icu/source/data/locales/en_RH.txt
+++ b/intl/icu/source/data/locales/en_RH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_RH{
"%%ALIAS"{"en_ZW"}
diff --git a/intl/icu/source/data/locales/en_RW.txt b/intl/icu/source/data/locales/en_RW.txt
index 60f22c59a..06fd01596 100644
--- a/intl/icu/source/data/locales/en_RW.txt
+++ b/intl/icu/source/data/locales/en_RW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_RW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SB.txt b/intl/icu/source/data/locales/en_SB.txt
index a81f9eb69..e7b621e17 100644
--- a/intl/icu/source/data/locales/en_SB.txt
+++ b/intl/icu/source/data/locales/en_SB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SC.txt b/intl/icu/source/data/locales/en_SC.txt
index 7d625a343..90c5ee404 100644
--- a/intl/icu/source/data/locales/en_SC.txt
+++ b/intl/icu/source/data/locales/en_SC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SD.txt b/intl/icu/source/data/locales/en_SD.txt
index 21a7710bb..a7b3570f0 100644
--- a/intl/icu/source/data/locales/en_SD.txt
+++ b/intl/icu/source/data/locales/en_SD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SD{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SE.txt b/intl/icu/source/data/locales/en_SE.txt
index 2c17467f0..3432099bb 100644
--- a/intl/icu/source/data/locales/en_SE.txt
+++ b/intl/icu/source/data/locales/en_SE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SE{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/locales/en_SG.txt b/intl/icu/source/data/locales/en_SG.txt
index 1462bf2a6..fc9f29e69 100644
--- a/intl/icu/source/data/locales/en_SG.txt
+++ b/intl/icu/source/data/locales/en_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SH.txt b/intl/icu/source/data/locales/en_SH.txt
index c09b9a567..61f9010cd 100644
--- a/intl/icu/source/data/locales/en_SH.txt
+++ b/intl/icu/source/data/locales/en_SH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SI.txt b/intl/icu/source/data/locales/en_SI.txt
index 163a70ef0..d9a875d3f 100644
--- a/intl/icu/source/data/locales/en_SI.txt
+++ b/intl/icu/source/data/locales/en_SI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SI{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/locales/en_SL.txt b/intl/icu/source/data/locales/en_SL.txt
index 68833a047..96ba6fce1 100644
--- a/intl/icu/source/data/locales/en_SL.txt
+++ b/intl/icu/source/data/locales/en_SL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SL{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SS.txt b/intl/icu/source/data/locales/en_SS.txt
index 1e1189554..b4324d90b 100644
--- a/intl/icu/source/data/locales/en_SS.txt
+++ b/intl/icu/source/data/locales/en_SS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SX.txt b/intl/icu/source/data/locales/en_SX.txt
index 0c4b61aa9..47e2db0b4 100644
--- a/intl/icu/source/data/locales/en_SX.txt
+++ b/intl/icu/source/data/locales/en_SX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SX{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_SZ.txt b/intl/icu/source/data/locales/en_SZ.txt
index 02bab1ca4..2ddba8393 100644
--- a/intl/icu/source/data/locales/en_SZ.txt
+++ b/intl/icu/source/data/locales/en_SZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_TC.txt b/intl/icu/source/data/locales/en_TC.txt
index 82dff11d6..2eda36a72 100644
--- a/intl/icu/source/data/locales/en_TC.txt
+++ b/intl/icu/source/data/locales/en_TC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_TK.txt b/intl/icu/source/data/locales/en_TK.txt
index b1b973f15..a8b2b4866 100644
--- a/intl/icu/source/data/locales/en_TK.txt
+++ b/intl/icu/source/data/locales/en_TK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_TO.txt b/intl/icu/source/data/locales/en_TO.txt
index bb3bbcd09..445f612fc 100644
--- a/intl/icu/source/data/locales/en_TO.txt
+++ b/intl/icu/source/data/locales/en_TO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_TT.txt b/intl/icu/source/data/locales/en_TT.txt
index fdc2c64c1..8c4eb3347 100644
--- a/intl/icu/source/data/locales/en_TT.txt
+++ b/intl/icu/source/data/locales/en_TT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TT{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_TV.txt b/intl/icu/source/data/locales/en_TV.txt
index 202f31b5f..217f749f7 100644
--- a/intl/icu/source/data/locales/en_TV.txt
+++ b/intl/icu/source/data/locales/en_TV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TV{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_TZ.txt b/intl/icu/source/data/locales/en_TZ.txt
index 00c9c8803..c8a93d6ef 100644
--- a/intl/icu/source/data/locales/en_TZ.txt
+++ b/intl/icu/source/data/locales/en_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_UG.txt b/intl/icu/source/data/locales/en_UG.txt
index d96a94968..a3cf6ad4e 100644
--- a/intl/icu/source/data/locales/en_UG.txt
+++ b/intl/icu/source/data/locales/en_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_UG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_UM.txt b/intl/icu/source/data/locales/en_UM.txt
index f1ebe32be..b3cb7bf35 100644
--- a/intl/icu/source/data/locales/en_UM.txt
+++ b/intl/icu/source/data/locales/en_UM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_UM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_US.txt b/intl/icu/source/data/locales/en_US.txt
index 080bc2e3d..129b741f0 100644
--- a/intl/icu/source/data/locales/en_US.txt
+++ b/intl/icu/source/data/locales/en_US.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_US{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_US_POSIX.txt b/intl/icu/source/data/locales/en_US_POSIX.txt
index 1210b7bb1..dc9dbe89f 100644
--- a/intl/icu/source/data/locales/en_US_POSIX.txt
+++ b/intl/icu/source/data/locales/en_US_POSIX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_US_POSIX{
NumberElements{
diff --git a/intl/icu/source/data/locales/en_VC.txt b/intl/icu/source/data/locales/en_VC.txt
index c6d63b47f..4c87e83a9 100644
--- a/intl/icu/source/data/locales/en_VC.txt
+++ b/intl/icu/source/data/locales/en_VC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_VG.txt b/intl/icu/source/data/locales/en_VG.txt
index 366c5ea7f..2bd5b3097 100644
--- a/intl/icu/source/data/locales/en_VG.txt
+++ b/intl/icu/source/data/locales/en_VG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_VI.txt b/intl/icu/source/data/locales/en_VI.txt
index 4d316f13a..7b02a8454 100644
--- a/intl/icu/source/data/locales/en_VI.txt
+++ b/intl/icu/source/data/locales/en_VI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VI{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/en_VU.txt b/intl/icu/source/data/locales/en_VU.txt
index 2f6cb29fa..e34a26666 100644
--- a/intl/icu/source/data/locales/en_VU.txt
+++ b/intl/icu/source/data/locales/en_VU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_WS.txt b/intl/icu/source/data/locales/en_WS.txt
index 982e5aac9..97b48b5d8 100644
--- a/intl/icu/source/data/locales/en_WS.txt
+++ b/intl/icu/source/data/locales/en_WS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_WS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_ZA.txt b/intl/icu/source/data/locales/en_ZA.txt
index 3ba8b46d2..cb6a3ea22 100644
--- a/intl/icu/source/data/locales/en_ZA.txt
+++ b/intl/icu/source/data/locales/en_ZA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_ZM.txt b/intl/icu/source/data/locales/en_ZM.txt
index a01233408..86b87dcb1 100644
--- a/intl/icu/source/data/locales/en_ZM.txt
+++ b/intl/icu/source/data/locales/en_ZM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/en_ZW.txt b/intl/icu/source/data/locales/en_ZW.txt
index ae001765a..8469b83d4 100644
--- a/intl/icu/source/data/locales/en_ZW.txt
+++ b/intl/icu/source/data/locales/en_ZW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/locales/eo.txt b/intl/icu/source/data/locales/eo.txt
index 90dd689e6..5b57b50ce 100644
--- a/intl/icu/source/data/locales/eo.txt
+++ b/intl/icu/source/data/locales/eo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eo{
AuxExemplarCharacters{"[q w x y]"}
diff --git a/intl/icu/source/data/locales/es.txt b/intl/icu/source/data/locales/es.txt
index b79ea8a4c..763316f05 100644
--- a/intl/icu/source/data/locales/es.txt
+++ b/intl/icu/source/data/locales/es.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es{
AuxExemplarCharacters{"[ª à ă â å ä ã ā æ ç è ĕ ê ë ē ì ĭ î ī º ò ŏ ô ö ø ō œ ù ŭ û ū ÿ]"}
diff --git a/intl/icu/source/data/locales/es_419.txt b/intl/icu/source/data/locales/es_419.txt
index 6d557796d..690af2ce3 100644
--- a/intl/icu/source/data/locales/es_419.txt
+++ b/intl/icu/source/data/locales/es_419.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_419{
NumberElements{
diff --git a/intl/icu/source/data/locales/es_AR.txt b/intl/icu/source/data/locales/es_AR.txt
index e381622d3..2574c8dfe 100644
--- a/intl/icu/source/data/locales/es_AR.txt
+++ b/intl/icu/source/data/locales/es_AR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_AR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_BO.txt b/intl/icu/source/data/locales/es_BO.txt
index 6b4504d50..173c1400e 100644
--- a/intl/icu/source/data/locales/es_BO.txt
+++ b/intl/icu/source/data/locales/es_BO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_BO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_BR.txt b/intl/icu/source/data/locales/es_BR.txt
index 14d1f6785..0e936587f 100644
--- a/intl/icu/source/data/locales/es_BR.txt
+++ b/intl/icu/source/data/locales/es_BR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_BR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_CL.txt b/intl/icu/source/data/locales/es_CL.txt
index 4b94b1a51..b465241b1 100644
--- a/intl/icu/source/data/locales/es_CL.txt
+++ b/intl/icu/source/data/locales/es_CL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CL{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_CO.txt b/intl/icu/source/data/locales/es_CO.txt
index ad562deae..d2b2865b6 100644
--- a/intl/icu/source/data/locales/es_CO.txt
+++ b/intl/icu/source/data/locales/es_CO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_CR.txt b/intl/icu/source/data/locales/es_CR.txt
index e78adc05f..8066b35eb 100644
--- a/intl/icu/source/data/locales/es_CR.txt
+++ b/intl/icu/source/data/locales/es_CR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_CU.txt b/intl/icu/source/data/locales/es_CU.txt
index dbd4f5609..3d9841b4b 100644
--- a/intl/icu/source/data/locales/es_CU.txt
+++ b/intl/icu/source/data/locales/es_CU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CU{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_DO.txt b/intl/icu/source/data/locales/es_DO.txt
index 25a42faf5..87bca8f0b 100644
--- a/intl/icu/source/data/locales/es_DO.txt
+++ b/intl/icu/source/data/locales/es_DO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_DO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_EA.txt b/intl/icu/source/data/locales/es_EA.txt
index 929973a2d..c08040460 100644
--- a/intl/icu/source/data/locales/es_EA.txt
+++ b/intl/icu/source/data/locales/es_EA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_EA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/es_EC.txt b/intl/icu/source/data/locales/es_EC.txt
index 1861bd0f8..64202909c 100644
--- a/intl/icu/source/data/locales/es_EC.txt
+++ b/intl/icu/source/data/locales/es_EC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_EC{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_ES.txt b/intl/icu/source/data/locales/es_ES.txt
index 20d3c4aed..5aedb9d90 100644
--- a/intl/icu/source/data/locales/es_ES.txt
+++ b/intl/icu/source/data/locales/es_ES.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_ES{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/es_GQ.txt b/intl/icu/source/data/locales/es_GQ.txt
index 3e5d9da8f..43c362637 100644
--- a/intl/icu/source/data/locales/es_GQ.txt
+++ b/intl/icu/source/data/locales/es_GQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_GQ{
NumberElements{
diff --git a/intl/icu/source/data/locales/es_GT.txt b/intl/icu/source/data/locales/es_GT.txt
index 421d5a00e..f7b591aab 100644
--- a/intl/icu/source/data/locales/es_GT.txt
+++ b/intl/icu/source/data/locales/es_GT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_GT{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_HN.txt b/intl/icu/source/data/locales/es_HN.txt
index 1d240f4b7..854e42d8c 100644
--- a/intl/icu/source/data/locales/es_HN.txt
+++ b/intl/icu/source/data/locales/es_HN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_HN{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_IC.txt b/intl/icu/source/data/locales/es_IC.txt
index 386b37485..83797b5cf 100644
--- a/intl/icu/source/data/locales/es_IC.txt
+++ b/intl/icu/source/data/locales/es_IC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_IC{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/es_MX.txt b/intl/icu/source/data/locales/es_MX.txt
index 709e6102c..1a38c8c73 100644
--- a/intl/icu/source/data/locales/es_MX.txt
+++ b/intl/icu/source/data/locales/es_MX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_MX{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_NI.txt b/intl/icu/source/data/locales/es_NI.txt
index 154399ef8..68f271874 100644
--- a/intl/icu/source/data/locales/es_NI.txt
+++ b/intl/icu/source/data/locales/es_NI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_NI{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_PA.txt b/intl/icu/source/data/locales/es_PA.txt
index 6b40c3c4b..bdcaf0bd7 100644
--- a/intl/icu/source/data/locales/es_PA.txt
+++ b/intl/icu/source/data/locales/es_PA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PA{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_PE.txt b/intl/icu/source/data/locales/es_PE.txt
index 67a746649..f06364bec 100644
--- a/intl/icu/source/data/locales/es_PE.txt
+++ b/intl/icu/source/data/locales/es_PE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PE{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_PH.txt b/intl/icu/source/data/locales/es_PH.txt
index c070d2f49..43d1e0b72 100644
--- a/intl/icu/source/data/locales/es_PH.txt
+++ b/intl/icu/source/data/locales/es_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/es_PR.txt b/intl/icu/source/data/locales/es_PR.txt
index 548404844..ade615887 100644
--- a/intl/icu/source/data/locales/es_PR.txt
+++ b/intl/icu/source/data/locales/es_PR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_PY.txt b/intl/icu/source/data/locales/es_PY.txt
index 495c66513..26bf05e28 100644
--- a/intl/icu/source/data/locales/es_PY.txt
+++ b/intl/icu/source/data/locales/es_PY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PY{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_SV.txt b/intl/icu/source/data/locales/es_SV.txt
index 9e76c5985..725e4e650 100644
--- a/intl/icu/source/data/locales/es_SV.txt
+++ b/intl/icu/source/data/locales/es_SV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_SV{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_US.txt b/intl/icu/source/data/locales/es_US.txt
index 592a79ebe..b81106bb0 100644
--- a/intl/icu/source/data/locales/es_US.txt
+++ b/intl/icu/source/data/locales/es_US.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_US{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_UY.txt b/intl/icu/source/data/locales/es_UY.txt
index 50260c515..1c6da94b2 100644
--- a/intl/icu/source/data/locales/es_UY.txt
+++ b/intl/icu/source/data/locales/es_UY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_UY{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/es_VE.txt b/intl/icu/source/data/locales/es_VE.txt
index 0191ac21f..36c71ca80 100644
--- a/intl/icu/source/data/locales/es_VE.txt
+++ b/intl/icu/source/data/locales/es_VE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_VE{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/locales/et.txt b/intl/icu/source/data/locales/et.txt
index 4a8098740..562904f4c 100644
--- a/intl/icu/source/data/locales/et.txt
+++ b/intl/icu/source/data/locales/et.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
et{
AuxExemplarCharacters{"[á à â å ā æ ç é è ê ë ē í ì î ï ī ñ ó ò ŏ ô ø ō œ ú ù û ū]"}
diff --git a/intl/icu/source/data/locales/et_EE.txt b/intl/icu/source/data/locales/et_EE.txt
index b5990508d..ef1560cf0 100644
--- a/intl/icu/source/data/locales/et_EE.txt
+++ b/intl/icu/source/data/locales/et_EE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
et_EE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/eu.txt b/intl/icu/source/data/locales/eu.txt
index a586f2b1e..df23b2091 100644
--- a/intl/icu/source/data/locales/eu.txt
+++ b/intl/icu/source/data/locales/eu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eu{
AuxExemplarCharacters{"[á à ă â å ä ã ā æ é è ĕ ê ë ē í ì ĭ î ï ī ó ò ŏ ô ö ø ō œ ú ù ŭ û ü ū ÿ]"}
diff --git a/intl/icu/source/data/locales/eu_ES.txt b/intl/icu/source/data/locales/eu_ES.txt
index f6a863d9d..dff9bfd6f 100644
--- a/intl/icu/source/data/locales/eu_ES.txt
+++ b/intl/icu/source/data/locales/eu_ES.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eu_ES{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ewo.txt b/intl/icu/source/data/locales/ewo.txt
index b7bedb379..e9ff0d137 100644
--- a/intl/icu/source/data/locales/ewo.txt
+++ b/intl/icu/source/data/locales/ewo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ewo{
AuxExemplarCharacters{"[c j q x]"}
diff --git a/intl/icu/source/data/locales/ewo_CM.txt b/intl/icu/source/data/locales/ewo_CM.txt
index 8fc0651e2..bbe82a4b9 100644
--- a/intl/icu/source/data/locales/ewo_CM.txt
+++ b/intl/icu/source/data/locales/ewo_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ewo_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fa.txt b/intl/icu/source/data/locales/fa.txt
index 557ee68f1..3d2d77a52 100644
--- a/intl/icu/source/data/locales/fa.txt
+++ b/intl/icu/source/data/locales/fa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fa{
AuxExemplarCharacters{"[\u200C\u200D\u200E\u200F \u064E \u0650 \u064F \u0652 \u0656 \u0670 إ ك ى ي]"}
diff --git a/intl/icu/source/data/locales/fa_AF.txt b/intl/icu/source/data/locales/fa_AF.txt
index 01e2fc740..c68d7d546 100644
--- a/intl/icu/source/data/locales/fa_AF.txt
+++ b/intl/icu/source/data/locales/fa_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fa_AF{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/fa_IR.txt b/intl/icu/source/data/locales/fa_IR.txt
index 44708238a..23aa24605 100644
--- a/intl/icu/source/data/locales/fa_IR.txt
+++ b/intl/icu/source/data/locales/fa_IR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fa_IR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ff.txt b/intl/icu/source/data/locales/ff.txt
index cc0baf0a0..7e276779e 100644
--- a/intl/icu/source/data/locales/ff.txt
+++ b/intl/icu/source/data/locales/ff.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff{
AuxExemplarCharacters{"[q v x z]"}
diff --git a/intl/icu/source/data/locales/ff_CM.txt b/intl/icu/source/data/locales/ff_CM.txt
index eb7391377..42834908b 100644
--- a/intl/icu/source/data/locales/ff_CM.txt
+++ b/intl/icu/source/data/locales/ff_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ff_GN.txt b/intl/icu/source/data/locales/ff_GN.txt
index cc4143169..a437c0929 100644
--- a/intl/icu/source/data/locales/ff_GN.txt
+++ b/intl/icu/source/data/locales/ff_GN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_GN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ff_MR.txt b/intl/icu/source/data/locales/ff_MR.txt
index 10140a223..680e4c6f7 100644
--- a/intl/icu/source/data/locales/ff_MR.txt
+++ b/intl/icu/source/data/locales/ff_MR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_MR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ff_SN.txt b/intl/icu/source/data/locales/ff_SN.txt
index 9308922be..9fe728877 100644
--- a/intl/icu/source/data/locales/ff_SN.txt
+++ b/intl/icu/source/data/locales/ff_SN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_SN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fi.txt b/intl/icu/source/data/locales/fi.txt
index b2b88e256..f906cfa02 100644
--- a/intl/icu/source/data/locales/fi.txt
+++ b/intl/icu/source/data/locales/fi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fi{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/fi_FI.txt b/intl/icu/source/data/locales/fi_FI.txt
index da14eb782..745db4f76 100644
--- a/intl/icu/source/data/locales/fi_FI.txt
+++ b/intl/icu/source/data/locales/fi_FI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fi_FI{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fil.txt b/intl/icu/source/data/locales/fil.txt
index 4ca68b418..9af891311 100644
--- a/intl/icu/source/data/locales/fil.txt
+++ b/intl/icu/source/data/locales/fil.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fil{
AuxExemplarCharacters{"[á à â é è ê í ì î ó ò ô ú ù û]"}
diff --git a/intl/icu/source/data/locales/fil_PH.txt b/intl/icu/source/data/locales/fil_PH.txt
index e9fce716a..9aeff6f53 100644
--- a/intl/icu/source/data/locales/fil_PH.txt
+++ b/intl/icu/source/data/locales/fil_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fil_PH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fo.txt b/intl/icu/source/data/locales/fo.txt
index f61a826b2..4cb52773c 100644
--- a/intl/icu/source/data/locales/fo.txt
+++ b/intl/icu/source/data/locales/fo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fo{
AuxExemplarCharacters{"[c q w x z]"}
diff --git a/intl/icu/source/data/locales/fo_DK.txt b/intl/icu/source/data/locales/fo_DK.txt
index 911e44c7c..6a6360e66 100644
--- a/intl/icu/source/data/locales/fo_DK.txt
+++ b/intl/icu/source/data/locales/fo_DK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fo_DK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fo_FO.txt b/intl/icu/source/data/locales/fo_FO.txt
index d3298bbd6..61ea7bc2c 100644
--- a/intl/icu/source/data/locales/fo_FO.txt
+++ b/intl/icu/source/data/locales/fo_FO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fo_FO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr.txt b/intl/icu/source/data/locales/fr.txt
index 40a9173f7..58e510802 100644
--- a/intl/icu/source/data/locales/fr.txt
+++ b/intl/icu/source/data/locales/fr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr{
AuxExemplarCharacters{"[á å ä ã ā ē í ì ī ñ ó ò ö ø ú ǔ]"}
diff --git a/intl/icu/source/data/locales/fr_BE.txt b/intl/icu/source/data/locales/fr_BE.txt
index 19a66476f..fc76a14d9 100644
--- a/intl/icu/source/data/locales/fr_BE.txt
+++ b/intl/icu/source/data/locales/fr_BE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_BE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_BF.txt b/intl/icu/source/data/locales/fr_BF.txt
index a485858e3..e11a8d490 100644
--- a/intl/icu/source/data/locales/fr_BF.txt
+++ b/intl/icu/source/data/locales/fr_BF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_BF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_BI.txt b/intl/icu/source/data/locales/fr_BI.txt
index 52adec80d..3c88f2265 100644
--- a/intl/icu/source/data/locales/fr_BI.txt
+++ b/intl/icu/source/data/locales/fr_BI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_BI{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_BJ.txt b/intl/icu/source/data/locales/fr_BJ.txt
index 2b0f30f0a..8eb26131e 100644
--- a/intl/icu/source/data/locales/fr_BJ.txt
+++ b/intl/icu/source/data/locales/fr_BJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_BJ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_BL.txt b/intl/icu/source/data/locales/fr_BL.txt
index 6daf2ea89..c5f33b819 100644
--- a/intl/icu/source/data/locales/fr_BL.txt
+++ b/intl/icu/source/data/locales/fr_BL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_BL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_CA.txt b/intl/icu/source/data/locales/fr_CA.txt
index 46a3c26b1..ed06569ad 100644
--- a/intl/icu/source/data/locales/fr_CA.txt
+++ b/intl/icu/source/data/locales/fr_CA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CA{
NumberElements{
diff --git a/intl/icu/source/data/locales/fr_CD.txt b/intl/icu/source/data/locales/fr_CD.txt
index 07440f9c6..41717442a 100644
--- a/intl/icu/source/data/locales/fr_CD.txt
+++ b/intl/icu/source/data/locales/fr_CD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CD{
NumberElements{
diff --git a/intl/icu/source/data/locales/fr_CF.txt b/intl/icu/source/data/locales/fr_CF.txt
index 17d6dd494..95ce784c5 100644
--- a/intl/icu/source/data/locales/fr_CF.txt
+++ b/intl/icu/source/data/locales/fr_CF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_CG.txt b/intl/icu/source/data/locales/fr_CG.txt
index fadfc6e69..77f4559f3 100644
--- a/intl/icu/source/data/locales/fr_CG.txt
+++ b/intl/icu/source/data/locales/fr_CG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_CH.txt b/intl/icu/source/data/locales/fr_CH.txt
index 3c167e3e0..19090ac17 100644
--- a/intl/icu/source/data/locales/fr_CH.txt
+++ b/intl/icu/source/data/locales/fr_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CH{
NumberElements{
diff --git a/intl/icu/source/data/locales/fr_CI.txt b/intl/icu/source/data/locales/fr_CI.txt
index 3be9bd15d..5ca569405 100644
--- a/intl/icu/source/data/locales/fr_CI.txt
+++ b/intl/icu/source/data/locales/fr_CI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CI{
NumberElements{
diff --git a/intl/icu/source/data/locales/fr_CM.txt b/intl/icu/source/data/locales/fr_CM.txt
index 8b42e8dda..31a6f2536 100644
--- a/intl/icu/source/data/locales/fr_CM.txt
+++ b/intl/icu/source/data/locales/fr_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_DJ.txt b/intl/icu/source/data/locales/fr_DJ.txt
index 10f8c5463..3debdf531 100644
--- a/intl/icu/source/data/locales/fr_DJ.txt
+++ b/intl/icu/source/data/locales/fr_DJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_DJ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_DZ.txt b/intl/icu/source/data/locales/fr_DZ.txt
index 9adb0f104..10e296ced 100644
--- a/intl/icu/source/data/locales/fr_DZ.txt
+++ b/intl/icu/source/data/locales/fr_DZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_DZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_FR.txt b/intl/icu/source/data/locales/fr_FR.txt
index aabcd9f2a..d21f0dcff 100644
--- a/intl/icu/source/data/locales/fr_FR.txt
+++ b/intl/icu/source/data/locales/fr_FR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_FR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_GA.txt b/intl/icu/source/data/locales/fr_GA.txt
index f94754b8c..07351fc23 100644
--- a/intl/icu/source/data/locales/fr_GA.txt
+++ b/intl/icu/source/data/locales/fr_GA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_GA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_GF.txt b/intl/icu/source/data/locales/fr_GF.txt
index 8e6830cda..73e644be1 100644
--- a/intl/icu/source/data/locales/fr_GF.txt
+++ b/intl/icu/source/data/locales/fr_GF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_GF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_GN.txt b/intl/icu/source/data/locales/fr_GN.txt
index d6f54c5bf..d6a95bd8b 100644
--- a/intl/icu/source/data/locales/fr_GN.txt
+++ b/intl/icu/source/data/locales/fr_GN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_GN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_GP.txt b/intl/icu/source/data/locales/fr_GP.txt
index 0462ded72..c5db25a03 100644
--- a/intl/icu/source/data/locales/fr_GP.txt
+++ b/intl/icu/source/data/locales/fr_GP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_GP{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_GQ.txt b/intl/icu/source/data/locales/fr_GQ.txt
index 20124ae08..52f69739c 100644
--- a/intl/icu/source/data/locales/fr_GQ.txt
+++ b/intl/icu/source/data/locales/fr_GQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_GQ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_HT.txt b/intl/icu/source/data/locales/fr_HT.txt
index d74e94d09..c229e5281 100644
--- a/intl/icu/source/data/locales/fr_HT.txt
+++ b/intl/icu/source/data/locales/fr_HT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_HT{
Version{"2.1.27.63"}
diff --git a/intl/icu/source/data/locales/fr_KM.txt b/intl/icu/source/data/locales/fr_KM.txt
index 95e4786ee..e1e691c86 100644
--- a/intl/icu/source/data/locales/fr_KM.txt
+++ b/intl/icu/source/data/locales/fr_KM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_KM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_LU.txt b/intl/icu/source/data/locales/fr_LU.txt
index 803f83dbc..e35601259 100644
--- a/intl/icu/source/data/locales/fr_LU.txt
+++ b/intl/icu/source/data/locales/fr_LU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_LU{
NumberElements{
diff --git a/intl/icu/source/data/locales/fr_MA.txt b/intl/icu/source/data/locales/fr_MA.txt
index 00f38c6da..1c37e0b0c 100644
--- a/intl/icu/source/data/locales/fr_MA.txt
+++ b/intl/icu/source/data/locales/fr_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MA{
NumberElements{
diff --git a/intl/icu/source/data/locales/fr_MC.txt b/intl/icu/source/data/locales/fr_MC.txt
index 724fdf5f4..de2bf367e 100644
--- a/intl/icu/source/data/locales/fr_MC.txt
+++ b/intl/icu/source/data/locales/fr_MC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MC{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_MF.txt b/intl/icu/source/data/locales/fr_MF.txt
index 7eeda2957..02fa80d61 100644
--- a/intl/icu/source/data/locales/fr_MF.txt
+++ b/intl/icu/source/data/locales/fr_MF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_MG.txt b/intl/icu/source/data/locales/fr_MG.txt
index d9e6cf46d..ef06ff934 100644
--- a/intl/icu/source/data/locales/fr_MG.txt
+++ b/intl/icu/source/data/locales/fr_MG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_ML.txt b/intl/icu/source/data/locales/fr_ML.txt
index 33eee9ca3..7c615744d 100644
--- a/intl/icu/source/data/locales/fr_ML.txt
+++ b/intl/icu/source/data/locales/fr_ML.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_ML{
NumberElements{
diff --git a/intl/icu/source/data/locales/fr_MQ.txt b/intl/icu/source/data/locales/fr_MQ.txt
index cec1941df..b2579a544 100644
--- a/intl/icu/source/data/locales/fr_MQ.txt
+++ b/intl/icu/source/data/locales/fr_MQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MQ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_MR.txt b/intl/icu/source/data/locales/fr_MR.txt
index f8df572d2..831a6143f 100644
--- a/intl/icu/source/data/locales/fr_MR.txt
+++ b/intl/icu/source/data/locales/fr_MR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_MU.txt b/intl/icu/source/data/locales/fr_MU.txt
index 2bbf534e7..e4609b754 100644
--- a/intl/icu/source/data/locales/fr_MU.txt
+++ b/intl/icu/source/data/locales/fr_MU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_MU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_NC.txt b/intl/icu/source/data/locales/fr_NC.txt
index 9d263b701..fb913cd6a 100644
--- a/intl/icu/source/data/locales/fr_NC.txt
+++ b/intl/icu/source/data/locales/fr_NC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_NC{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_NE.txt b/intl/icu/source/data/locales/fr_NE.txt
index c4e6e2d02..400aed1a3 100644
--- a/intl/icu/source/data/locales/fr_NE.txt
+++ b/intl/icu/source/data/locales/fr_NE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_NE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_PF.txt b/intl/icu/source/data/locales/fr_PF.txt
index 7656bbc3d..dd794d910 100644
--- a/intl/icu/source/data/locales/fr_PF.txt
+++ b/intl/icu/source/data/locales/fr_PF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_PF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_PM.txt b/intl/icu/source/data/locales/fr_PM.txt
index ab6eb454e..36566a9ad 100644
--- a/intl/icu/source/data/locales/fr_PM.txt
+++ b/intl/icu/source/data/locales/fr_PM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_PM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_RE.txt b/intl/icu/source/data/locales/fr_RE.txt
index 3518e74fe..fbc2318fe 100644
--- a/intl/icu/source/data/locales/fr_RE.txt
+++ b/intl/icu/source/data/locales/fr_RE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_RE{
NumberElements{
diff --git a/intl/icu/source/data/locales/fr_RW.txt b/intl/icu/source/data/locales/fr_RW.txt
index 8395346d0..7089d5351 100644
--- a/intl/icu/source/data/locales/fr_RW.txt
+++ b/intl/icu/source/data/locales/fr_RW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_RW{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_SC.txt b/intl/icu/source/data/locales/fr_SC.txt
index cc64cf030..a3ee2c656 100644
--- a/intl/icu/source/data/locales/fr_SC.txt
+++ b/intl/icu/source/data/locales/fr_SC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_SC{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_SN.txt b/intl/icu/source/data/locales/fr_SN.txt
index 5ce23e2e8..9495d2ac2 100644
--- a/intl/icu/source/data/locales/fr_SN.txt
+++ b/intl/icu/source/data/locales/fr_SN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_SN{
Version{"2.1.27.63"}
diff --git a/intl/icu/source/data/locales/fr_SY.txt b/intl/icu/source/data/locales/fr_SY.txt
index a1ff01dcf..29fb5828f 100644
--- a/intl/icu/source/data/locales/fr_SY.txt
+++ b/intl/icu/source/data/locales/fr_SY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_SY{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_TD.txt b/intl/icu/source/data/locales/fr_TD.txt
index 0fce9403b..9f7222617 100644
--- a/intl/icu/source/data/locales/fr_TD.txt
+++ b/intl/icu/source/data/locales/fr_TD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_TD{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_TG.txt b/intl/icu/source/data/locales/fr_TG.txt
index 7a0758a60..e5e578174 100644
--- a/intl/icu/source/data/locales/fr_TG.txt
+++ b/intl/icu/source/data/locales/fr_TG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_TG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_TN.txt b/intl/icu/source/data/locales/fr_TN.txt
index 614a01266..cfe822907 100644
--- a/intl/icu/source/data/locales/fr_TN.txt
+++ b/intl/icu/source/data/locales/fr_TN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_TN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_VU.txt b/intl/icu/source/data/locales/fr_VU.txt
index 53aebbeaa..197385043 100644
--- a/intl/icu/source/data/locales/fr_VU.txt
+++ b/intl/icu/source/data/locales/fr_VU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_VU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_WF.txt b/intl/icu/source/data/locales/fr_WF.txt
index c1680b931..15dcf9238 100644
--- a/intl/icu/source/data/locales/fr_WF.txt
+++ b/intl/icu/source/data/locales/fr_WF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_WF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fr_YT.txt b/intl/icu/source/data/locales/fr_YT.txt
index 49692b0ef..afe998347 100644
--- a/intl/icu/source/data/locales/fr_YT.txt
+++ b/intl/icu/source/data/locales/fr_YT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_YT{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fur.txt b/intl/icu/source/data/locales/fur.txt
index 5917ba345..b35501e00 100644
--- a/intl/icu/source/data/locales/fur.txt
+++ b/intl/icu/source/data/locales/fur.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fur{
AuxExemplarCharacters{"[å č é ë ğ ï ñ ó š ü]"}
diff --git a/intl/icu/source/data/locales/fur_IT.txt b/intl/icu/source/data/locales/fur_IT.txt
index ae4b48c6e..fe52d8797 100644
--- a/intl/icu/source/data/locales/fur_IT.txt
+++ b/intl/icu/source/data/locales/fur_IT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fur_IT{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/fy.txt b/intl/icu/source/data/locales/fy.txt
index ccf302454..477ce14c0 100644
--- a/intl/icu/source/data/locales/fy.txt
+++ b/intl/icu/source/data/locales/fy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fy{
AuxExemplarCharacters{"[æ ò ù]"}
diff --git a/intl/icu/source/data/locales/fy_NL.txt b/intl/icu/source/data/locales/fy_NL.txt
index 9adeb7ce8..98651546a 100644
--- a/intl/icu/source/data/locales/fy_NL.txt
+++ b/intl/icu/source/data/locales/fy_NL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fy_NL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ga.txt b/intl/icu/source/data/locales/ga.txt
index db5890c26..eaacc4a95 100644
--- a/intl/icu/source/data/locales/ga.txt
+++ b/intl/icu/source/data/locales/ga.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ga{
AuxExemplarCharacters{"[å ḃ ċ ḋ ḟ ġ j k ṁ ṗ q ṡ ṫ v w x y z]"}
diff --git a/intl/icu/source/data/locales/ga_IE.txt b/intl/icu/source/data/locales/ga_IE.txt
index cb90315c5..61b698732 100644
--- a/intl/icu/source/data/locales/ga_IE.txt
+++ b/intl/icu/source/data/locales/ga_IE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ga_IE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/gd.txt b/intl/icu/source/data/locales/gd.txt
index a23211a3d..b4cc50cee 100644
--- a/intl/icu/source/data/locales/gd.txt
+++ b/intl/icu/source/data/locales/gd.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gd{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/gd_GB.txt b/intl/icu/source/data/locales/gd_GB.txt
index bc4338b9e..58ce469ca 100644
--- a/intl/icu/source/data/locales/gd_GB.txt
+++ b/intl/icu/source/data/locales/gd_GB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gd_GB{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/gl.txt b/intl/icu/source/data/locales/gl.txt
index a30c1cc2b..aa8280c74 100644
--- a/intl/icu/source/data/locales/gl.txt
+++ b/intl/icu/source/data/locales/gl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gl{
AuxExemplarCharacters{"[ª à â ä ã ç è ê ë ì î ï º ò ô ö õ ù û]"}
diff --git a/intl/icu/source/data/locales/gl_ES.txt b/intl/icu/source/data/locales/gl_ES.txt
index 64bc51edd..cfbf6581e 100644
--- a/intl/icu/source/data/locales/gl_ES.txt
+++ b/intl/icu/source/data/locales/gl_ES.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gl_ES{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/gsw.txt b/intl/icu/source/data/locales/gsw.txt
index 15b4b06e6..c7b6dcd63 100644
--- a/intl/icu/source/data/locales/gsw.txt
+++ b/intl/icu/source/data/locales/gsw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gsw{
AuxExemplarCharacters{"[á à ă â å ā æ ç é è ĕ ê ë ē í ì ĭ î ï ī ñ ó ò ŏ ô ø ō œ ú ù ŭ û ū ÿ]"}
diff --git a/intl/icu/source/data/locales/gsw_CH.txt b/intl/icu/source/data/locales/gsw_CH.txt
index 4155480ca..41a0df249 100644
--- a/intl/icu/source/data/locales/gsw_CH.txt
+++ b/intl/icu/source/data/locales/gsw_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gsw_CH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/gsw_FR.txt b/intl/icu/source/data/locales/gsw_FR.txt
index 87679da74..05ccab135 100644
--- a/intl/icu/source/data/locales/gsw_FR.txt
+++ b/intl/icu/source/data/locales/gsw_FR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gsw_FR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/gsw_LI.txt b/intl/icu/source/data/locales/gsw_LI.txt
index 73207e565..81f0b087a 100644
--- a/intl/icu/source/data/locales/gsw_LI.txt
+++ b/intl/icu/source/data/locales/gsw_LI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gsw_LI{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/gu.txt b/intl/icu/source/data/locales/gu.txt
index a0d58e04f..e09550a72 100644
--- a/intl/icu/source/data/locales/gu.txt
+++ b/intl/icu/source/data/locales/gu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gu{
AuxExemplarCharacters{"[\u200C\u200D ૰]"}
diff --git a/intl/icu/source/data/locales/gu_IN.txt b/intl/icu/source/data/locales/gu_IN.txt
index bcbaae791..039852800 100644
--- a/intl/icu/source/data/locales/gu_IN.txt
+++ b/intl/icu/source/data/locales/gu_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gu_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/guz.txt b/intl/icu/source/data/locales/guz.txt
index 7f3473921..48c7cbca5 100644
--- a/intl/icu/source/data/locales/guz.txt
+++ b/intl/icu/source/data/locales/guz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
guz{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/guz_KE.txt b/intl/icu/source/data/locales/guz_KE.txt
index f1b30a8c5..d80667d5b 100644
--- a/intl/icu/source/data/locales/guz_KE.txt
+++ b/intl/icu/source/data/locales/guz_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
guz_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/gv.txt b/intl/icu/source/data/locales/gv.txt
index d31f28bfd..58a374c78 100644
--- a/intl/icu/source/data/locales/gv.txt
+++ b/intl/icu/source/data/locales/gv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gv{
ExemplarCharacters{"[a b c ç d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/gv_IM.txt b/intl/icu/source/data/locales/gv_IM.txt
index 9845d2814..ded9df3f4 100644
--- a/intl/icu/source/data/locales/gv_IM.txt
+++ b/intl/icu/source/data/locales/gv_IM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gv_IM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ha.txt b/intl/icu/source/data/locales/ha.txt
index 43675f479..e71332133 100644
--- a/intl/icu/source/data/locales/ha.txt
+++ b/intl/icu/source/data/locales/ha.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ha{
AuxExemplarCharacters{"[á à â é è ê í ì î ó ò ô p q {r\u0303} ú ù û v x ƴ]"}
diff --git a/intl/icu/source/data/locales/ha_GH.txt b/intl/icu/source/data/locales/ha_GH.txt
index 93d9604eb..137ca176f 100644
--- a/intl/icu/source/data/locales/ha_GH.txt
+++ b/intl/icu/source/data/locales/ha_GH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ha_GH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ha_NE.txt b/intl/icu/source/data/locales/ha_NE.txt
index 15316083b..198972721 100644
--- a/intl/icu/source/data/locales/ha_NE.txt
+++ b/intl/icu/source/data/locales/ha_NE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ha_NE{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/ha_NG.txt b/intl/icu/source/data/locales/ha_NG.txt
index 30269c9a0..01e6ca1a3 100644
--- a/intl/icu/source/data/locales/ha_NG.txt
+++ b/intl/icu/source/data/locales/ha_NG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ha_NG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/haw.txt b/intl/icu/source/data/locales/haw.txt
index 50adab2fd..6b1167b1d 100644
--- a/intl/icu/source/data/locales/haw.txt
+++ b/intl/icu/source/data/locales/haw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
haw{
AuxExemplarCharacters{"[b c d f g j q r s t v x y z]"}
diff --git a/intl/icu/source/data/locales/haw_US.txt b/intl/icu/source/data/locales/haw_US.txt
index 0787a46cf..e1a1ad929 100644
--- a/intl/icu/source/data/locales/haw_US.txt
+++ b/intl/icu/source/data/locales/haw_US.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
haw_US{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/he.txt b/intl/icu/source/data/locales/he.txt
index 3d0eb8805..9851ec09e 100644
--- a/intl/icu/source/data/locales/he.txt
+++ b/intl/icu/source/data/locales/he.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
he{
AuxExemplarCharacters{
@@ -1436,6 +1436,7 @@ he{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/he_IL.txt b/intl/icu/source/data/locales/he_IL.txt
index ab2c6f53a..d75b9a0e6 100644
--- a/intl/icu/source/data/locales/he_IL.txt
+++ b/intl/icu/source/data/locales/he_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
he_IL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/hi.txt b/intl/icu/source/data/locales/hi.txt
index da547a044..198571f60 100644
--- a/intl/icu/source/data/locales/hi.txt
+++ b/intl/icu/source/data/locales/hi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hi{
AuxExemplarCharacters{"[\u200C\u200D]"}
@@ -1210,6 +1210,7 @@ hi{
"ताईशो",
"शोवा",
"हेईसेई",
+ "रेइवा",
}
}
}
diff --git a/intl/icu/source/data/locales/hi_IN.txt b/intl/icu/source/data/locales/hi_IN.txt
index 1c96a949c..28dbf3200 100644
--- a/intl/icu/source/data/locales/hi_IN.txt
+++ b/intl/icu/source/data/locales/hi_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hi_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/hr.txt b/intl/icu/source/data/locales/hr.txt
index caa27d6f7..38c3b22a2 100644
--- a/intl/icu/source/data/locales/hr.txt
+++ b/intl/icu/source/data/locales/hr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hr{
AuxExemplarCharacters{"[q w x y]"}
@@ -1552,6 +1552,7 @@ hr{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/hr_BA.txt b/intl/icu/source/data/locales/hr_BA.txt
index 98670c1a1..c7ab4ef78 100644
--- a/intl/icu/source/data/locales/hr_BA.txt
+++ b/intl/icu/source/data/locales/hr_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hr_BA{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/hr_HR.txt b/intl/icu/source/data/locales/hr_HR.txt
index a11d35832..637ac6883 100644
--- a/intl/icu/source/data/locales/hr_HR.txt
+++ b/intl/icu/source/data/locales/hr_HR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hr_HR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/hsb.txt b/intl/icu/source/data/locales/hsb.txt
index bb7a61c64..dc71851fa 100644
--- a/intl/icu/source/data/locales/hsb.txt
+++ b/intl/icu/source/data/locales/hsb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hsb{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/hsb_DE.txt b/intl/icu/source/data/locales/hsb_DE.txt
index 6dd3c7ec7..61104904e 100644
--- a/intl/icu/source/data/locales/hsb_DE.txt
+++ b/intl/icu/source/data/locales/hsb_DE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hsb_DE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/hu.txt b/intl/icu/source/data/locales/hu.txt
index 8e409211d..a5ad730ff 100644
--- a/intl/icu/source/data/locales/hu.txt
+++ b/intl/icu/source/data/locales/hu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hu{
AuxExemplarCharacters{"[à ă â å ä ã ā æ ç è ĕ ê ë ē ì ĭ î ï ī ñ ò ŏ ô ø ō œ q ù ŭ û ū w x y ÿ]"}
diff --git a/intl/icu/source/data/locales/hu_HU.txt b/intl/icu/source/data/locales/hu_HU.txt
index 0d121c41c..5e0febbc3 100644
--- a/intl/icu/source/data/locales/hu_HU.txt
+++ b/intl/icu/source/data/locales/hu_HU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hu_HU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/hy.txt b/intl/icu/source/data/locales/hy.txt
index 96077c234..313ee8522 100644
--- a/intl/icu/source/data/locales/hy.txt
+++ b/intl/icu/source/data/locales/hy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hy{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/hy_AM.txt b/intl/icu/source/data/locales/hy_AM.txt
index 445e79f89..6170d1be9 100644
--- a/intl/icu/source/data/locales/hy_AM.txt
+++ b/intl/icu/source/data/locales/hy_AM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hy_AM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/id.txt b/intl/icu/source/data/locales/id.txt
index c3c4da457..c1de6a93c 100644
--- a/intl/icu/source/data/locales/id.txt
+++ b/intl/icu/source/data/locales/id.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
id{
AuxExemplarCharacters{"[å]"}
@@ -1907,6 +1907,7 @@ id{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/id_ID.txt b/intl/icu/source/data/locales/id_ID.txt
index d6f836efa..8493108cf 100644
--- a/intl/icu/source/data/locales/id_ID.txt
+++ b/intl/icu/source/data/locales/id_ID.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
id_ID{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ig.txt b/intl/icu/source/data/locales/ig.txt
index e07590adf..7d4157844 100644
--- a/intl/icu/source/data/locales/ig.txt
+++ b/intl/icu/source/data/locales/ig.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ig{
ExemplarCharacters{
diff --git a/intl/icu/source/data/locales/ig_NG.txt b/intl/icu/source/data/locales/ig_NG.txt
index 2ca18d945..725422b3c 100644
--- a/intl/icu/source/data/locales/ig_NG.txt
+++ b/intl/icu/source/data/locales/ig_NG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ig_NG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ii.txt b/intl/icu/source/data/locales/ii.txt
index 90669f1b4..a6b505109 100644
--- a/intl/icu/source/data/locales/ii.txt
+++ b/intl/icu/source/data/locales/ii.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ii{
ExemplarCharacters{"[ꀀ-ꒌ]"}
diff --git a/intl/icu/source/data/locales/ii_CN.txt b/intl/icu/source/data/locales/ii_CN.txt
index add3f5b79..d762a2eed 100644
--- a/intl/icu/source/data/locales/ii_CN.txt
+++ b/intl/icu/source/data/locales/ii_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ii_CN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/in.txt b/intl/icu/source/data/locales/in.txt
index 02335238a..05ecf2873 100644
--- a/intl/icu/source/data/locales/in.txt
+++ b/intl/icu/source/data/locales/in.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
in{
"%%ALIAS"{"id"}
diff --git a/intl/icu/source/data/locales/in_ID.txt b/intl/icu/source/data/locales/in_ID.txt
index acec72c6e..9f9ef5ff1 100644
--- a/intl/icu/source/data/locales/in_ID.txt
+++ b/intl/icu/source/data/locales/in_ID.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
in_ID{
"%%ALIAS"{"id_ID"}
diff --git a/intl/icu/source/data/locales/is.txt b/intl/icu/source/data/locales/is.txt
index 1d2730027..216aaa95a 100644
--- a/intl/icu/source/data/locales/is.txt
+++ b/intl/icu/source/data/locales/is.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
is{
AuxExemplarCharacters{"[c q w z]"}
diff --git a/intl/icu/source/data/locales/is_IS.txt b/intl/icu/source/data/locales/is_IS.txt
index 961268c51..23e186cd6 100644
--- a/intl/icu/source/data/locales/is_IS.txt
+++ b/intl/icu/source/data/locales/is_IS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
is_IS{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/it.txt b/intl/icu/source/data/locales/it.txt
index 71894fff1..47471ee7a 100644
--- a/intl/icu/source/data/locales/it.txt
+++ b/intl/icu/source/data/locales/it.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
it{
AuxExemplarCharacters{"[ª á â å ä ã æ ç ê ë í î ï ñ º ô ö õ ø œ ß ú û ü ÿ]"}
diff --git a/intl/icu/source/data/locales/it_CH.txt b/intl/icu/source/data/locales/it_CH.txt
index 4195578ef..2e03255a3 100644
--- a/intl/icu/source/data/locales/it_CH.txt
+++ b/intl/icu/source/data/locales/it_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
it_CH{
NumberElements{
diff --git a/intl/icu/source/data/locales/it_IT.txt b/intl/icu/source/data/locales/it_IT.txt
index c66b20745..ecc61976d 100644
--- a/intl/icu/source/data/locales/it_IT.txt
+++ b/intl/icu/source/data/locales/it_IT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
it_IT{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/it_SM.txt b/intl/icu/source/data/locales/it_SM.txt
index 91d92f5d1..8cb41e843 100644
--- a/intl/icu/source/data/locales/it_SM.txt
+++ b/intl/icu/source/data/locales/it_SM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
it_SM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/iw.txt b/intl/icu/source/data/locales/iw.txt
index d59865d1c..8d9fabbe3 100644
--- a/intl/icu/source/data/locales/iw.txt
+++ b/intl/icu/source/data/locales/iw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
iw{
"%%ALIAS"{"he"}
diff --git a/intl/icu/source/data/locales/iw_IL.txt b/intl/icu/source/data/locales/iw_IL.txt
index cf1666a68..3976d06e2 100644
--- a/intl/icu/source/data/locales/iw_IL.txt
+++ b/intl/icu/source/data/locales/iw_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
iw_IL{
"%%ALIAS"{"he_IL"}
diff --git a/intl/icu/source/data/locales/ja.txt b/intl/icu/source/data/locales/ja.txt
index 8ab1a591b..0dcb94f86 100644
--- a/intl/icu/source/data/locales/ja.txt
+++ b/intl/icu/source/data/locales/ja.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ja{
AuxExemplarCharacters{"[兌 拼 楔 錄 鳯]"}
@@ -2381,6 +2381,7 @@ ja{
"大正",
"昭和",
"平成",
+ "令和",
}
narrow{
"大化",
@@ -2619,6 +2620,7 @@ ja{
"T",
"S",
"H",
+ "R",
}
}
}
diff --git a/intl/icu/source/data/locales/ja_JP.txt b/intl/icu/source/data/locales/ja_JP.txt
index 8aaaf2dc8..408e696e1 100644
--- a/intl/icu/source/data/locales/ja_JP.txt
+++ b/intl/icu/source/data/locales/ja_JP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ja_JP{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ja_JP_TRADITIONAL.txt b/intl/icu/source/data/locales/ja_JP_TRADITIONAL.txt
index 2a23df32f..0965cc557 100644
--- a/intl/icu/source/data/locales/ja_JP_TRADITIONAL.txt
+++ b/intl/icu/source/data/locales/ja_JP_TRADITIONAL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ja_JP_TRADITIONAL{
calendar{
diff --git a/intl/icu/source/data/locales/jgo.txt b/intl/icu/source/data/locales/jgo.txt
index d4700de07..c900f9359 100644
--- a/intl/icu/source/data/locales/jgo.txt
+++ b/intl/icu/source/data/locales/jgo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
jgo{
AuxExemplarCharacters{"[e o q r x]"}
diff --git a/intl/icu/source/data/locales/jgo_CM.txt b/intl/icu/source/data/locales/jgo_CM.txt
index 2d39052e0..553d40453 100644
--- a/intl/icu/source/data/locales/jgo_CM.txt
+++ b/intl/icu/source/data/locales/jgo_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
jgo_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/jmc.txt b/intl/icu/source/data/locales/jmc.txt
index 888465e06..99ab98ab2 100644
--- a/intl/icu/source/data/locales/jmc.txt
+++ b/intl/icu/source/data/locales/jmc.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
jmc{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/jmc_TZ.txt b/intl/icu/source/data/locales/jmc_TZ.txt
index 71f2e6cdc..7aded276b 100644
--- a/intl/icu/source/data/locales/jmc_TZ.txt
+++ b/intl/icu/source/data/locales/jmc_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
jmc_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ka.txt b/intl/icu/source/data/locales/ka.txt
index 11f2c0220..0cb4d4959 100644
--- a/intl/icu/source/data/locales/ka.txt
+++ b/intl/icu/source/data/locales/ka.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ka{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/ka_GE.txt b/intl/icu/source/data/locales/ka_GE.txt
index faa8da4db..b808dcaaa 100644
--- a/intl/icu/source/data/locales/ka_GE.txt
+++ b/intl/icu/source/data/locales/ka_GE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ka_GE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kab.txt b/intl/icu/source/data/locales/kab.txt
index d30dc0b9f..6cf5d841a 100644
--- a/intl/icu/source/data/locales/kab.txt
+++ b/intl/icu/source/data/locales/kab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kab{
AuxExemplarCharacters{"[o v]"}
diff --git a/intl/icu/source/data/locales/kab_DZ.txt b/intl/icu/source/data/locales/kab_DZ.txt
index e49cf58ff..94fbc138f 100644
--- a/intl/icu/source/data/locales/kab_DZ.txt
+++ b/intl/icu/source/data/locales/kab_DZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kab_DZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kam.txt b/intl/icu/source/data/locales/kam.txt
index e34bdcad0..802594652 100644
--- a/intl/icu/source/data/locales/kam.txt
+++ b/intl/icu/source/data/locales/kam.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kam{
ExemplarCharacters{"[a b c d e f g h i ĩ j k l m n o p q r s t u ũ v w y z]"}
diff --git a/intl/icu/source/data/locales/kam_KE.txt b/intl/icu/source/data/locales/kam_KE.txt
index 5871e2183..25bf43042 100644
--- a/intl/icu/source/data/locales/kam_KE.txt
+++ b/intl/icu/source/data/locales/kam_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kam_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kde.txt b/intl/icu/source/data/locales/kde.txt
index ec98d0bc6..aff1a9c8d 100644
--- a/intl/icu/source/data/locales/kde.txt
+++ b/intl/icu/source/data/locales/kde.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kde{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/kde_TZ.txt b/intl/icu/source/data/locales/kde_TZ.txt
index 189234736..533801769 100644
--- a/intl/icu/source/data/locales/kde_TZ.txt
+++ b/intl/icu/source/data/locales/kde_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kde_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kea.txt b/intl/icu/source/data/locales/kea.txt
index 29cd1c98d..e71b742a4 100644
--- a/intl/icu/source/data/locales/kea.txt
+++ b/intl/icu/source/data/locales/kea.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kea{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/kea_CV.txt b/intl/icu/source/data/locales/kea_CV.txt
index 69c2a1bf4..820cbe581 100644
--- a/intl/icu/source/data/locales/kea_CV.txt
+++ b/intl/icu/source/data/locales/kea_CV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kea_CV{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/khq.txt b/intl/icu/source/data/locales/khq.txt
index ba38ce0d6..322c555f6 100644
--- a/intl/icu/source/data/locales/khq.txt
+++ b/intl/icu/source/data/locales/khq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
khq{
AuxExemplarCharacters{"[v]"}
diff --git a/intl/icu/source/data/locales/khq_ML.txt b/intl/icu/source/data/locales/khq_ML.txt
index 972ddba70..f62f47c61 100644
--- a/intl/icu/source/data/locales/khq_ML.txt
+++ b/intl/icu/source/data/locales/khq_ML.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
khq_ML{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ki.txt b/intl/icu/source/data/locales/ki.txt
index 32b55fb2f..ad46f2e78 100644
--- a/intl/icu/source/data/locales/ki.txt
+++ b/intl/icu/source/data/locales/ki.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ki{
AuxExemplarCharacters{"[f l p q s v x z]"}
diff --git a/intl/icu/source/data/locales/ki_KE.txt b/intl/icu/source/data/locales/ki_KE.txt
index 570e15fca..67ca24793 100644
--- a/intl/icu/source/data/locales/ki_KE.txt
+++ b/intl/icu/source/data/locales/ki_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ki_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kk.txt b/intl/icu/source/data/locales/kk.txt
index 08b92b8f9..92c243168 100644
--- a/intl/icu/source/data/locales/kk.txt
+++ b/intl/icu/source/data/locales/kk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kk{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/kk_KZ.txt b/intl/icu/source/data/locales/kk_KZ.txt
index 49afefa4c..102ec99e9 100644
--- a/intl/icu/source/data/locales/kk_KZ.txt
+++ b/intl/icu/source/data/locales/kk_KZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kk_KZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kkj.txt b/intl/icu/source/data/locales/kkj.txt
index 0c149758f..a16349729 100644
--- a/intl/icu/source/data/locales/kkj.txt
+++ b/intl/icu/source/data/locales/kkj.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kkj{
AuxExemplarCharacters{"[q x z]"}
diff --git a/intl/icu/source/data/locales/kkj_CM.txt b/intl/icu/source/data/locales/kkj_CM.txt
index c927d5165..c2a7b9b51 100644
--- a/intl/icu/source/data/locales/kkj_CM.txt
+++ b/intl/icu/source/data/locales/kkj_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kkj_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kl.txt b/intl/icu/source/data/locales/kl.txt
index d2975a194..a34cf2a04 100644
--- a/intl/icu/source/data/locales/kl.txt
+++ b/intl/icu/source/data/locales/kl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kl{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/kl_GL.txt b/intl/icu/source/data/locales/kl_GL.txt
index b810ae05b..31cc1dbc3 100644
--- a/intl/icu/source/data/locales/kl_GL.txt
+++ b/intl/icu/source/data/locales/kl_GL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kl_GL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kln.txt b/intl/icu/source/data/locales/kln.txt
index 4e8cf2a90..3f7fdc416 100644
--- a/intl/icu/source/data/locales/kln.txt
+++ b/intl/icu/source/data/locales/kln.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kln{
AuxExemplarCharacters{"[f q v x z]"}
diff --git a/intl/icu/source/data/locales/kln_KE.txt b/intl/icu/source/data/locales/kln_KE.txt
index 1d9b782d3..3456ba391 100644
--- a/intl/icu/source/data/locales/kln_KE.txt
+++ b/intl/icu/source/data/locales/kln_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kln_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/km.txt b/intl/icu/source/data/locales/km.txt
index 8033a844d..62e3d2ecb 100644
--- a/intl/icu/source/data/locales/km.txt
+++ b/intl/icu/source/data/locales/km.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
km{
AuxExemplarCharacters{"[\u17B4\u17B5\u200B \u17CC \u17CE \u17CF \u17D1 ឝ ឞ]"}
diff --git a/intl/icu/source/data/locales/km_KH.txt b/intl/icu/source/data/locales/km_KH.txt
index 9874cbd8b..3a756e4a2 100644
--- a/intl/icu/source/data/locales/km_KH.txt
+++ b/intl/icu/source/data/locales/km_KH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
km_KH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kn.txt b/intl/icu/source/data/locales/kn.txt
index c21954909..bb6c895a2 100644
--- a/intl/icu/source/data/locales/kn.txt
+++ b/intl/icu/source/data/locales/kn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kn{
AuxExemplarCharacters{"[\u200C\u200D ೞ]"}
diff --git a/intl/icu/source/data/locales/kn_IN.txt b/intl/icu/source/data/locales/kn_IN.txt
index c8e9e6443..3cc399fd1 100644
--- a/intl/icu/source/data/locales/kn_IN.txt
+++ b/intl/icu/source/data/locales/kn_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kn_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ko.txt b/intl/icu/source/data/locales/ko.txt
index 8619a8ee6..6950ad76b 100644
--- a/intl/icu/source/data/locales/ko.txt
+++ b/intl/icu/source/data/locales/ko.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ko{
AuxExemplarCharacters{
@@ -1846,6 +1846,7 @@ ko{
"다이쇼",
"쇼와",
"헤이세이",
+ "레이와",
}
}
}
diff --git a/intl/icu/source/data/locales/ko_KP.txt b/intl/icu/source/data/locales/ko_KP.txt
index a282979ee..650da485c 100644
--- a/intl/icu/source/data/locales/ko_KP.txt
+++ b/intl/icu/source/data/locales/ko_KP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ko_KP{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ko_KR.txt b/intl/icu/source/data/locales/ko_KR.txt
index 9f1cce0f1..7f02f8898 100644
--- a/intl/icu/source/data/locales/ko_KR.txt
+++ b/intl/icu/source/data/locales/ko_KR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ko_KR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kok.txt b/intl/icu/source/data/locales/kok.txt
index 61aa6bb13..abe238428 100644
--- a/intl/icu/source/data/locales/kok.txt
+++ b/intl/icu/source/data/locales/kok.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kok{
AuxExemplarCharacters{"[\u200C\u200D]"}
diff --git a/intl/icu/source/data/locales/kok_IN.txt b/intl/icu/source/data/locales/kok_IN.txt
index 923f45dd2..44b942db5 100644
--- a/intl/icu/source/data/locales/kok_IN.txt
+++ b/intl/icu/source/data/locales/kok_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kok_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ks.txt b/intl/icu/source/data/locales/ks.txt
index 6e93d3fff..7abe980c1 100644
--- a/intl/icu/source/data/locales/ks.txt
+++ b/intl/icu/source/data/locales/ks.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ks{
AuxExemplarCharacters{"[\u200E\u200F]"}
diff --git a/intl/icu/source/data/locales/ks_IN.txt b/intl/icu/source/data/locales/ks_IN.txt
index 8680b96b1..2ad769d3c 100644
--- a/intl/icu/source/data/locales/ks_IN.txt
+++ b/intl/icu/source/data/locales/ks_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ks_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ksb.txt b/intl/icu/source/data/locales/ksb.txt
index 390b3e3c8..5bd9962dd 100644
--- a/intl/icu/source/data/locales/ksb.txt
+++ b/intl/icu/source/data/locales/ksb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksb{
AuxExemplarCharacters{"[q r x]"}
diff --git a/intl/icu/source/data/locales/ksb_TZ.txt b/intl/icu/source/data/locales/ksb_TZ.txt
index 825120d94..dbe83e282 100644
--- a/intl/icu/source/data/locales/ksb_TZ.txt
+++ b/intl/icu/source/data/locales/ksb_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksb_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ksf.txt b/intl/icu/source/data/locales/ksf.txt
index be3e3288a..dd94d15ae 100644
--- a/intl/icu/source/data/locales/ksf.txt
+++ b/intl/icu/source/data/locales/ksf.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksf{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/ksf_CM.txt b/intl/icu/source/data/locales/ksf_CM.txt
index 3f09084d9..29c4dcbd2 100644
--- a/intl/icu/source/data/locales/ksf_CM.txt
+++ b/intl/icu/source/data/locales/ksf_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksf_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ksh.txt b/intl/icu/source/data/locales/ksh.txt
index 79b7a734f..9269d9710 100644
--- a/intl/icu/source/data/locales/ksh.txt
+++ b/intl/icu/source/data/locales/ksh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksh{
AuxExemplarCharacters{"[á à ă â ã ā ç é è ĕ ê ē ğ í ì ĭ î ï ī ij ı ł ñ ó ò ŏ ô ø ō ú ù ŭ û ū ÿ]"}
diff --git a/intl/icu/source/data/locales/ksh_DE.txt b/intl/icu/source/data/locales/ksh_DE.txt
index b51f658df..fc63733df 100644
--- a/intl/icu/source/data/locales/ksh_DE.txt
+++ b/intl/icu/source/data/locales/ksh_DE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksh_DE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/kw.txt b/intl/icu/source/data/locales/kw.txt
index dac4fda75..eee1519de 100644
--- a/intl/icu/source/data/locales/kw.txt
+++ b/intl/icu/source/data/locales/kw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kw{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/kw_GB.txt b/intl/icu/source/data/locales/kw_GB.txt
index 8492bd398..d4f65b7e1 100644
--- a/intl/icu/source/data/locales/kw_GB.txt
+++ b/intl/icu/source/data/locales/kw_GB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kw_GB{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ky.txt b/intl/icu/source/data/locales/ky.txt
index d80259a70..898ff556e 100644
--- a/intl/icu/source/data/locales/ky.txt
+++ b/intl/icu/source/data/locales/ky.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ky{
AuxExemplarCharacters{"[в ф ц щ ь]"}
diff --git a/intl/icu/source/data/locales/ky_KG.txt b/intl/icu/source/data/locales/ky_KG.txt
index 5bf5f6fc8..773a1f86a 100644
--- a/intl/icu/source/data/locales/ky_KG.txt
+++ b/intl/icu/source/data/locales/ky_KG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ky_KG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lag.txt b/intl/icu/source/data/locales/lag.txt
index 7fe21c273..780453bd4 100644
--- a/intl/icu/source/data/locales/lag.txt
+++ b/intl/icu/source/data/locales/lag.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lag{
ExemplarCharacters{"[a á b c d e é f g h i í ɨ j k l m n o ó p q r s t u ú ʉ v w x y z]"}
diff --git a/intl/icu/source/data/locales/lag_TZ.txt b/intl/icu/source/data/locales/lag_TZ.txt
index 475cdbf03..42f8d337e 100644
--- a/intl/icu/source/data/locales/lag_TZ.txt
+++ b/intl/icu/source/data/locales/lag_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lag_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lb.txt b/intl/icu/source/data/locales/lb.txt
index bbf6b1f4c..9a0423e70 100644
--- a/intl/icu/source/data/locales/lb.txt
+++ b/intl/icu/source/data/locales/lb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lb{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/lb_LU.txt b/intl/icu/source/data/locales/lb_LU.txt
index 40579802a..3b2a7c662 100644
--- a/intl/icu/source/data/locales/lb_LU.txt
+++ b/intl/icu/source/data/locales/lb_LU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lb_LU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lg.txt b/intl/icu/source/data/locales/lg.txt
index ac6290b87..98d887e34 100644
--- a/intl/icu/source/data/locales/lg.txt
+++ b/intl/icu/source/data/locales/lg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lg{
AuxExemplarCharacters{"[h q x]"}
diff --git a/intl/icu/source/data/locales/lg_UG.txt b/intl/icu/source/data/locales/lg_UG.txt
index 251c8e005..8d99dff29 100644
--- a/intl/icu/source/data/locales/lg_UG.txt
+++ b/intl/icu/source/data/locales/lg_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lg_UG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lkt.txt b/intl/icu/source/data/locales/lkt.txt
index fcabd41bf..bea0f225d 100644
--- a/intl/icu/source/data/locales/lkt.txt
+++ b/intl/icu/source/data/locales/lkt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lkt{
AuxExemplarCharacters{"[c d f {ȟʼ} j q r {sʼ} {šʼ} v x]"}
diff --git a/intl/icu/source/data/locales/lkt_US.txt b/intl/icu/source/data/locales/lkt_US.txt
index 29e2e7776..3622fe21b 100644
--- a/intl/icu/source/data/locales/lkt_US.txt
+++ b/intl/icu/source/data/locales/lkt_US.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lkt_US{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ln.txt b/intl/icu/source/data/locales/ln.txt
index f17cc17f7..313281084 100644
--- a/intl/icu/source/data/locales/ln.txt
+++ b/intl/icu/source/data/locales/ln.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln{
AuxExemplarCharacters{"[j q x]"}
diff --git a/intl/icu/source/data/locales/ln_AO.txt b/intl/icu/source/data/locales/ln_AO.txt
index 405979731..6f4f51b15 100644
--- a/intl/icu/source/data/locales/ln_AO.txt
+++ b/intl/icu/source/data/locales/ln_AO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln_AO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ln_CD.txt b/intl/icu/source/data/locales/ln_CD.txt
index 1b07b765a..1432b2258 100644
--- a/intl/icu/source/data/locales/ln_CD.txt
+++ b/intl/icu/source/data/locales/ln_CD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln_CD{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ln_CF.txt b/intl/icu/source/data/locales/ln_CF.txt
index 6d72f4f2b..445d934e7 100644
--- a/intl/icu/source/data/locales/ln_CF.txt
+++ b/intl/icu/source/data/locales/ln_CF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln_CF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ln_CG.txt b/intl/icu/source/data/locales/ln_CG.txt
index 48891f350..b1b7ac5b8 100644
--- a/intl/icu/source/data/locales/ln_CG.txt
+++ b/intl/icu/source/data/locales/ln_CG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln_CG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lo.txt b/intl/icu/source/data/locales/lo.txt
index 705eb4eb2..530b90c91 100644
--- a/intl/icu/source/data/locales/lo.txt
+++ b/intl/icu/source/data/locales/lo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lo{
AuxExemplarCharacters{"[\u200B ໐ ໑ ໒ ໓ ໔ ໕ ໖ ໗ ໘ ໙]"}
@@ -1817,6 +1817,7 @@ lo{
"ໄຕໂຊ",
"ໂຊວາ",
"ຮີຊີ",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/lo_LA.txt b/intl/icu/source/data/locales/lo_LA.txt
index 22c26d280..c6b7bccc2 100644
--- a/intl/icu/source/data/locales/lo_LA.txt
+++ b/intl/icu/source/data/locales/lo_LA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lo_LA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lrc.txt b/intl/icu/source/data/locales/lrc.txt
index 72789d7bf..8bb8a16db 100644
--- a/intl/icu/source/data/locales/lrc.txt
+++ b/intl/icu/source/data/locales/lrc.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lrc{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/lrc_IQ.txt b/intl/icu/source/data/locales/lrc_IQ.txt
index 1c31402b2..20db865e5 100644
--- a/intl/icu/source/data/locales/lrc_IQ.txt
+++ b/intl/icu/source/data/locales/lrc_IQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lrc_IQ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lrc_IR.txt b/intl/icu/source/data/locales/lrc_IR.txt
index 7f08aaed7..7dd5bc997 100644
--- a/intl/icu/source/data/locales/lrc_IR.txt
+++ b/intl/icu/source/data/locales/lrc_IR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lrc_IR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lt.txt b/intl/icu/source/data/locales/lt.txt
index 60a9bf678..bd402774c 100644
--- a/intl/icu/source/data/locales/lt.txt
+++ b/intl/icu/source/data/locales/lt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lt{
AuxExemplarCharacters{
@@ -2394,6 +2394,7 @@ lt{
"Taišo",
"Šova",
"Heisei",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/lt_LT.txt b/intl/icu/source/data/locales/lt_LT.txt
index bd838d42a..850950e0f 100644
--- a/intl/icu/source/data/locales/lt_LT.txt
+++ b/intl/icu/source/data/locales/lt_LT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lt_LT{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lu.txt b/intl/icu/source/data/locales/lu.txt
index 6908d8e45..fa2fe24b2 100644
--- a/intl/icu/source/data/locales/lu.txt
+++ b/intl/icu/source/data/locales/lu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lu{
AuxExemplarCharacters{"[g r x]"}
diff --git a/intl/icu/source/data/locales/lu_CD.txt b/intl/icu/source/data/locales/lu_CD.txt
index a8fc3ba22..7ef087ce6 100644
--- a/intl/icu/source/data/locales/lu_CD.txt
+++ b/intl/icu/source/data/locales/lu_CD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lu_CD{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/luo.txt b/intl/icu/source/data/locales/luo.txt
index 709b3f357..0105a0a24 100644
--- a/intl/icu/source/data/locales/luo.txt
+++ b/intl/icu/source/data/locales/luo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
luo{
AuxExemplarCharacters{"[q x z]"}
diff --git a/intl/icu/source/data/locales/luo_KE.txt b/intl/icu/source/data/locales/luo_KE.txt
index 23c5edcaa..20b548eda 100644
--- a/intl/icu/source/data/locales/luo_KE.txt
+++ b/intl/icu/source/data/locales/luo_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
luo_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/luy.txt b/intl/icu/source/data/locales/luy.txt
index 52389b84b..f363bc21b 100644
--- a/intl/icu/source/data/locales/luy.txt
+++ b/intl/icu/source/data/locales/luy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
luy{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/luy_KE.txt b/intl/icu/source/data/locales/luy_KE.txt
index 8f5f8dca0..de55d2b70 100644
--- a/intl/icu/source/data/locales/luy_KE.txt
+++ b/intl/icu/source/data/locales/luy_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
luy_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/lv.txt b/intl/icu/source/data/locales/lv.txt
index b45e538d0..8ec3d02e1 100644
--- a/intl/icu/source/data/locales/lv.txt
+++ b/intl/icu/source/data/locales/lv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lv{
AuxExemplarCharacters{"[y ō q ŗ w x]"}
diff --git a/intl/icu/source/data/locales/lv_LV.txt b/intl/icu/source/data/locales/lv_LV.txt
index f0f7f2630..bb2f2cda2 100644
--- a/intl/icu/source/data/locales/lv_LV.txt
+++ b/intl/icu/source/data/locales/lv_LV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lv_LV{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mas.txt b/intl/icu/source/data/locales/mas.txt
index 10cc25d18..38b89b470 100644
--- a/intl/icu/source/data/locales/mas.txt
+++ b/intl/icu/source/data/locales/mas.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mas{
AuxExemplarCharacters{"[f q v x z]"}
diff --git a/intl/icu/source/data/locales/mas_KE.txt b/intl/icu/source/data/locales/mas_KE.txt
index bf400ab3e..f97038d56 100644
--- a/intl/icu/source/data/locales/mas_KE.txt
+++ b/intl/icu/source/data/locales/mas_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mas_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mas_TZ.txt b/intl/icu/source/data/locales/mas_TZ.txt
index bd80f8845..72c5ee447 100644
--- a/intl/icu/source/data/locales/mas_TZ.txt
+++ b/intl/icu/source/data/locales/mas_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mas_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mer.txt b/intl/icu/source/data/locales/mer.txt
index e2cbc3994..50447bbdd 100644
--- a/intl/icu/source/data/locales/mer.txt
+++ b/intl/icu/source/data/locales/mer.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mer{
ExemplarCharacters{"[a b c d e f g h i ĩ j k l m n o p q r s t u ũ v w x y z]"}
diff --git a/intl/icu/source/data/locales/mer_KE.txt b/intl/icu/source/data/locales/mer_KE.txt
index e47d26dda..527f43cbe 100644
--- a/intl/icu/source/data/locales/mer_KE.txt
+++ b/intl/icu/source/data/locales/mer_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mer_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mfe.txt b/intl/icu/source/data/locales/mfe.txt
index 37eb11047..d03e0e528 100644
--- a/intl/icu/source/data/locales/mfe.txt
+++ b/intl/icu/source/data/locales/mfe.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mfe{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/mfe_MU.txt b/intl/icu/source/data/locales/mfe_MU.txt
index e8dd72adc..844880f09 100644
--- a/intl/icu/source/data/locales/mfe_MU.txt
+++ b/intl/icu/source/data/locales/mfe_MU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mfe_MU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mg.txt b/intl/icu/source/data/locales/mg.txt
index 5a53447fe..7312b4dd5 100644
--- a/intl/icu/source/data/locales/mg.txt
+++ b/intl/icu/source/data/locales/mg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mg{
AuxExemplarCharacters{"[c q u w x]"}
diff --git a/intl/icu/source/data/locales/mg_MG.txt b/intl/icu/source/data/locales/mg_MG.txt
index b28ac02ce..9718e3bdd 100644
--- a/intl/icu/source/data/locales/mg_MG.txt
+++ b/intl/icu/source/data/locales/mg_MG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mg_MG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mgh.txt b/intl/icu/source/data/locales/mgh.txt
index ecd691c75..e38b5fd8b 100644
--- a/intl/icu/source/data/locales/mgh.txt
+++ b/intl/icu/source/data/locales/mgh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mgh{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/mgh_MZ.txt b/intl/icu/source/data/locales/mgh_MZ.txt
index 0fb3ed466..8ce431337 100644
--- a/intl/icu/source/data/locales/mgh_MZ.txt
+++ b/intl/icu/source/data/locales/mgh_MZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mgh_MZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mgo.txt b/intl/icu/source/data/locales/mgo.txt
index bc576a0e4..43c468099 100644
--- a/intl/icu/source/data/locales/mgo.txt
+++ b/intl/icu/source/data/locales/mgo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mgo{
AuxExemplarCharacters{"[c h l q v x]"}
diff --git a/intl/icu/source/data/locales/mgo_CM.txt b/intl/icu/source/data/locales/mgo_CM.txt
index aea5d4dc5..182fbcab6 100644
--- a/intl/icu/source/data/locales/mgo_CM.txt
+++ b/intl/icu/source/data/locales/mgo_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mgo_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mk.txt b/intl/icu/source/data/locales/mk.txt
index 9e83f1485..415f9f2b8 100644
--- a/intl/icu/source/data/locales/mk.txt
+++ b/intl/icu/source/data/locales/mk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mk{
AuxExemplarCharacters{"[ѐ ѝ]"}
diff --git a/intl/icu/source/data/locales/mk_MK.txt b/intl/icu/source/data/locales/mk_MK.txt
index a3e181373..c744b571b 100644
--- a/intl/icu/source/data/locales/mk_MK.txt
+++ b/intl/icu/source/data/locales/mk_MK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mk_MK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ml.txt b/intl/icu/source/data/locales/ml.txt
index ea9501c2a..ca96b9d0c 100644
--- a/intl/icu/source/data/locales/ml.txt
+++ b/intl/icu/source/data/locales/ml.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ml{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/ml_IN.txt b/intl/icu/source/data/locales/ml_IN.txt
index d44254d8f..bd80969f1 100644
--- a/intl/icu/source/data/locales/ml_IN.txt
+++ b/intl/icu/source/data/locales/ml_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ml_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mn.txt b/intl/icu/source/data/locales/mn.txt
index 01cf154cb..d128ace15 100644
--- a/intl/icu/source/data/locales/mn.txt
+++ b/intl/icu/source/data/locales/mn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mn{
AuxExemplarCharacters{"[ә җ ӊ һ]"}
diff --git a/intl/icu/source/data/locales/mn_MN.txt b/intl/icu/source/data/locales/mn_MN.txt
index ca2527c76..ceb536028 100644
--- a/intl/icu/source/data/locales/mn_MN.txt
+++ b/intl/icu/source/data/locales/mn_MN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mn_MN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mo.txt b/intl/icu/source/data/locales/mo.txt
index 64025913d..a698deb33 100644
--- a/intl/icu/source/data/locales/mo.txt
+++ b/intl/icu/source/data/locales/mo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mo{
"%%ALIAS"{"ro_MD"}
diff --git a/intl/icu/source/data/locales/mr.txt b/intl/icu/source/data/locales/mr.txt
index 6d433f539..515bccee4 100644
--- a/intl/icu/source/data/locales/mr.txt
+++ b/intl/icu/source/data/locales/mr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mr{
AuxExemplarCharacters{"[\u200C\u200D]"}
diff --git a/intl/icu/source/data/locales/mr_IN.txt b/intl/icu/source/data/locales/mr_IN.txt
index 1cc8844c5..ea5e00d3b 100644
--- a/intl/icu/source/data/locales/mr_IN.txt
+++ b/intl/icu/source/data/locales/mr_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mr_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ms.txt b/intl/icu/source/data/locales/ms.txt
index 1d5fdf5a7..e1a7264e7 100644
--- a/intl/icu/source/data/locales/ms.txt
+++ b/intl/icu/source/data/locales/ms.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/ms_BN.txt b/intl/icu/source/data/locales/ms_BN.txt
index 5271e443e..9af946494 100644
--- a/intl/icu/source/data/locales/ms_BN.txt
+++ b/intl/icu/source/data/locales/ms_BN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms_BN{
NumberElements{
diff --git a/intl/icu/source/data/locales/ms_MY.txt b/intl/icu/source/data/locales/ms_MY.txt
index 30acaf339..677049de0 100644
--- a/intl/icu/source/data/locales/ms_MY.txt
+++ b/intl/icu/source/data/locales/ms_MY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms_MY{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ms_SG.txt b/intl/icu/source/data/locales/ms_SG.txt
index 4ea166a62..88d8e2b42 100644
--- a/intl/icu/source/data/locales/ms_SG.txt
+++ b/intl/icu/source/data/locales/ms_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms_SG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mt.txt b/intl/icu/source/data/locales/mt.txt
index 677334def..574cafaba 100644
--- a/intl/icu/source/data/locales/mt.txt
+++ b/intl/icu/source/data/locales/mt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mt{
AuxExemplarCharacters{"[c y]"}
diff --git a/intl/icu/source/data/locales/mt_MT.txt b/intl/icu/source/data/locales/mt_MT.txt
index 7e568bb6f..786a2368f 100644
--- a/intl/icu/source/data/locales/mt_MT.txt
+++ b/intl/icu/source/data/locales/mt_MT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mt_MT{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mua.txt b/intl/icu/source/data/locales/mua.txt
index ec2fa59d1..c4c3463c1 100644
--- a/intl/icu/source/data/locales/mua.txt
+++ b/intl/icu/source/data/locales/mua.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mua{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/mua_CM.txt b/intl/icu/source/data/locales/mua_CM.txt
index 7a26e847b..0e7b72b9a 100644
--- a/intl/icu/source/data/locales/mua_CM.txt
+++ b/intl/icu/source/data/locales/mua_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mua_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/my.txt b/intl/icu/source/data/locales/my.txt
index 598a0fe36..3e1b08421 100644
--- a/intl/icu/source/data/locales/my.txt
+++ b/intl/icu/source/data/locales/my.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
my{
AuxExemplarCharacters{"[ၐ ၑ ဨ ဢ ၒ ၓ ၔ ၕ ၖ ၗ \u1058 \u1059]"}
diff --git a/intl/icu/source/data/locales/my_MM.txt b/intl/icu/source/data/locales/my_MM.txt
index 957b25e3a..fb97bf430 100644
--- a/intl/icu/source/data/locales/my_MM.txt
+++ b/intl/icu/source/data/locales/my_MM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
my_MM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/mzn.txt b/intl/icu/source/data/locales/mzn.txt
index 580fc9f5c..52d93127f 100644
--- a/intl/icu/source/data/locales/mzn.txt
+++ b/intl/icu/source/data/locales/mzn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mzn{
AuxExemplarCharacters{"[\u200C\u200D\u200E\u200F \u064E \u064F \u0650 \u0652 \u0656 \u0670 إ ك ى ي]"}
diff --git a/intl/icu/source/data/locales/mzn_IR.txt b/intl/icu/source/data/locales/mzn_IR.txt
index 9c1adb87a..adc6c1b14 100644
--- a/intl/icu/source/data/locales/mzn_IR.txt
+++ b/intl/icu/source/data/locales/mzn_IR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mzn_IR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/naq.txt b/intl/icu/source/data/locales/naq.txt
index 0d19649f7..ebefc5737 100644
--- a/intl/icu/source/data/locales/naq.txt
+++ b/intl/icu/source/data/locales/naq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
naq{
AuxExemplarCharacters{"[j l v]"}
diff --git a/intl/icu/source/data/locales/naq_NA.txt b/intl/icu/source/data/locales/naq_NA.txt
index 372774013..70889b8d6 100644
--- a/intl/icu/source/data/locales/naq_NA.txt
+++ b/intl/icu/source/data/locales/naq_NA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
naq_NA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nb.txt b/intl/icu/source/data/locales/nb.txt
index f245579f8..1b2992aa8 100644
--- a/intl/icu/source/data/locales/nb.txt
+++ b/intl/icu/source/data/locales/nb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nb{
AuxExemplarCharacters{"[á ǎ ã č ç đ è ê í ń ñ ŋ š ŧ ú ü ž ä ö]"}
@@ -2018,6 +2018,7 @@ nb{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
narrow{
"Taika (645–650)",
@@ -2256,6 +2257,7 @@ nb{
"T",
"S",
"H",
+ "R",
}
}
}
diff --git a/intl/icu/source/data/locales/nb_NO.txt b/intl/icu/source/data/locales/nb_NO.txt
index 8add9f822..815180736 100644
--- a/intl/icu/source/data/locales/nb_NO.txt
+++ b/intl/icu/source/data/locales/nb_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nb_NO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nb_SJ.txt b/intl/icu/source/data/locales/nb_SJ.txt
index 865768d39..200bd17b0 100644
--- a/intl/icu/source/data/locales/nb_SJ.txt
+++ b/intl/icu/source/data/locales/nb_SJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nb_SJ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nd.txt b/intl/icu/source/data/locales/nd.txt
index 0a98cff9f..87bbe01bf 100644
--- a/intl/icu/source/data/locales/nd.txt
+++ b/intl/icu/source/data/locales/nd.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nd{
AuxExemplarCharacters{"[r]"}
diff --git a/intl/icu/source/data/locales/nd_ZW.txt b/intl/icu/source/data/locales/nd_ZW.txt
index 80e495fa4..3d56f6619 100644
--- a/intl/icu/source/data/locales/nd_ZW.txt
+++ b/intl/icu/source/data/locales/nd_ZW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nd_ZW{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nds.txt b/intl/icu/source/data/locales/nds.txt
index f171bbd08..20f2cdcee 100644
--- a/intl/icu/source/data/locales/nds.txt
+++ b/intl/icu/source/data/locales/nds.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nds{
AuxExemplarCharacters{"[á à ă â ā æ ç é è ĕ ê ë ę ē í ì ĭ î ï ī ñ ó ò ŏ ô ø ō œ ú ù ŭ û ū ÿ]"}
diff --git a/intl/icu/source/data/locales/nds_DE.txt b/intl/icu/source/data/locales/nds_DE.txt
index 897a6d9b9..e005c706a 100644
--- a/intl/icu/source/data/locales/nds_DE.txt
+++ b/intl/icu/source/data/locales/nds_DE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nds_DE{
Version{"2.1.28.71"}
diff --git a/intl/icu/source/data/locales/nds_NL.txt b/intl/icu/source/data/locales/nds_NL.txt
index 5a8e7bb05..0debade61 100644
--- a/intl/icu/source/data/locales/nds_NL.txt
+++ b/intl/icu/source/data/locales/nds_NL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nds_NL{
AuxExemplarCharacters{"[á à â ä é è ê ë í ì î ï ó ò ô ö ú ù û ü]"}
diff --git a/intl/icu/source/data/locales/ne.txt b/intl/icu/source/data/locales/ne.txt
index be3ad4cd6..701606847 100644
--- a/intl/icu/source/data/locales/ne.txt
+++ b/intl/icu/source/data/locales/ne.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ne{
AuxExemplarCharacters{"[\u200C\u200D]"}
diff --git a/intl/icu/source/data/locales/ne_IN.txt b/intl/icu/source/data/locales/ne_IN.txt
index a56870bc2..51554f8f2 100644
--- a/intl/icu/source/data/locales/ne_IN.txt
+++ b/intl/icu/source/data/locales/ne_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ne_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ne_NP.txt b/intl/icu/source/data/locales/ne_NP.txt
index ec373c34d..880213b93 100644
--- a/intl/icu/source/data/locales/ne_NP.txt
+++ b/intl/icu/source/data/locales/ne_NP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ne_NP{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nl.txt b/intl/icu/source/data/locales/nl.txt
index 771fcea1a..ae988bfe3 100644
--- a/intl/icu/source/data/locales/nl.txt
+++ b/intl/icu/source/data/locales/nl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl{
AuxExemplarCharacters{"[à â å ã æ ç è ê î ñ ô ø œ ù û ÿ]"}
@@ -2216,6 +2216,7 @@ nl{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/nl_AW.txt b/intl/icu/source/data/locales/nl_AW.txt
index 0f499e641..5512f491e 100644
--- a/intl/icu/source/data/locales/nl_AW.txt
+++ b/intl/icu/source/data/locales/nl_AW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_AW{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nl_BE.txt b/intl/icu/source/data/locales/nl_BE.txt
index fe435ad0f..d506cc540 100644
--- a/intl/icu/source/data/locales/nl_BE.txt
+++ b/intl/icu/source/data/locales/nl_BE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_BE{
NumberElements{
diff --git a/intl/icu/source/data/locales/nl_BQ.txt b/intl/icu/source/data/locales/nl_BQ.txt
index 3561c80ac..9476aab07 100644
--- a/intl/icu/source/data/locales/nl_BQ.txt
+++ b/intl/icu/source/data/locales/nl_BQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_BQ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nl_CW.txt b/intl/icu/source/data/locales/nl_CW.txt
index 8881f520a..7dbdb708b 100644
--- a/intl/icu/source/data/locales/nl_CW.txt
+++ b/intl/icu/source/data/locales/nl_CW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_CW{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nl_NL.txt b/intl/icu/source/data/locales/nl_NL.txt
index b86d8713f..d3ff22c54 100644
--- a/intl/icu/source/data/locales/nl_NL.txt
+++ b/intl/icu/source/data/locales/nl_NL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_NL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nl_SR.txt b/intl/icu/source/data/locales/nl_SR.txt
index fe29eab89..e072087c7 100644
--- a/intl/icu/source/data/locales/nl_SR.txt
+++ b/intl/icu/source/data/locales/nl_SR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_SR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nl_SX.txt b/intl/icu/source/data/locales/nl_SX.txt
index 666c2621e..f21fddf21 100644
--- a/intl/icu/source/data/locales/nl_SX.txt
+++ b/intl/icu/source/data/locales/nl_SX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_SX{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nmg.txt b/intl/icu/source/data/locales/nmg.txt
index 3c12abc16..a2e22a39d 100644
--- a/intl/icu/source/data/locales/nmg.txt
+++ b/intl/icu/source/data/locales/nmg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nmg{
AuxExemplarCharacters{"[q x z]"}
diff --git a/intl/icu/source/data/locales/nmg_CM.txt b/intl/icu/source/data/locales/nmg_CM.txt
index b35788f55..db41415b9 100644
--- a/intl/icu/source/data/locales/nmg_CM.txt
+++ b/intl/icu/source/data/locales/nmg_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nmg_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nn.txt b/intl/icu/source/data/locales/nn.txt
index a43c2d300..cffaa8aef 100644
--- a/intl/icu/source/data/locales/nn.txt
+++ b/intl/icu/source/data/locales/nn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nn{
AuxExemplarCharacters{"[á ǎ č ç đ è ê ń ñ ŋ š ŧ ü ž ä ö]"}
diff --git a/intl/icu/source/data/locales/nn_NO.txt b/intl/icu/source/data/locales/nn_NO.txt
index 6203951cf..01dbf1fba 100644
--- a/intl/icu/source/data/locales/nn_NO.txt
+++ b/intl/icu/source/data/locales/nn_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nn_NO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nnh.txt b/intl/icu/source/data/locales/nnh.txt
index 910289113..eaea8dea0 100644
--- a/intl/icu/source/data/locales/nnh.txt
+++ b/intl/icu/source/data/locales/nnh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nnh{
AuxExemplarCharacters{"[q r x]"}
diff --git a/intl/icu/source/data/locales/nnh_CM.txt b/intl/icu/source/data/locales/nnh_CM.txt
index 87a3ac7e4..57dc0f4a3 100644
--- a/intl/icu/source/data/locales/nnh_CM.txt
+++ b/intl/icu/source/data/locales/nnh_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nnh_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/no.txt b/intl/icu/source/data/locales/no.txt
index 097a923cd..8b021f546 100644
--- a/intl/icu/source/data/locales/no.txt
+++ b/intl/icu/source/data/locales/no.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no{
"%%ALIAS"{"nb"}
diff --git a/intl/icu/source/data/locales/no_NO.txt b/intl/icu/source/data/locales/no_NO.txt
index 188a8a4a6..b3403f663 100644
--- a/intl/icu/source/data/locales/no_NO.txt
+++ b/intl/icu/source/data/locales/no_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no_NO{
"%%ALIAS"{"nb_NO"}
diff --git a/intl/icu/source/data/locales/no_NO_NY.txt b/intl/icu/source/data/locales/no_NO_NY.txt
index aa897fe6f..c380c1c3e 100644
--- a/intl/icu/source/data/locales/no_NO_NY.txt
+++ b/intl/icu/source/data/locales/no_NO_NY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no_NO_NY{
"%%ALIAS"{"nn_NO"}
diff --git a/intl/icu/source/data/locales/nus.txt b/intl/icu/source/data/locales/nus.txt
index 1dc32c217..79794ccc1 100644
--- a/intl/icu/source/data/locales/nus.txt
+++ b/intl/icu/source/data/locales/nus.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nus{
ExemplarCharacters{
diff --git a/intl/icu/source/data/locales/nus_SS.txt b/intl/icu/source/data/locales/nus_SS.txt
index eb4753b6a..57ca22fc3 100644
--- a/intl/icu/source/data/locales/nus_SS.txt
+++ b/intl/icu/source/data/locales/nus_SS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nus_SS{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/nyn.txt b/intl/icu/source/data/locales/nyn.txt
index f07d29262..942331763 100644
--- a/intl/icu/source/data/locales/nyn.txt
+++ b/intl/icu/source/data/locales/nyn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nyn{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/nyn_UG.txt b/intl/icu/source/data/locales/nyn_UG.txt
index d11fed279..a916be3ab 100644
--- a/intl/icu/source/data/locales/nyn_UG.txt
+++ b/intl/icu/source/data/locales/nyn_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nyn_UG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/om.txt b/intl/icu/source/data/locales/om.txt
index d34b4c341..103777792 100644
--- a/intl/icu/source/data/locales/om.txt
+++ b/intl/icu/source/data/locales/om.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
om{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/om_ET.txt b/intl/icu/source/data/locales/om_ET.txt
index 2ee4784d3..928f99a2c 100644
--- a/intl/icu/source/data/locales/om_ET.txt
+++ b/intl/icu/source/data/locales/om_ET.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
om_ET{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/om_KE.txt b/intl/icu/source/data/locales/om_KE.txt
index 690de1b7e..eb96f0bee 100644
--- a/intl/icu/source/data/locales/om_KE.txt
+++ b/intl/icu/source/data/locales/om_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
om_KE{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/or.txt b/intl/icu/source/data/locales/or.txt
index af016331f..277530533 100644
--- a/intl/icu/source/data/locales/or.txt
+++ b/intl/icu/source/data/locales/or.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
or{
AuxExemplarCharacters{"[\u200C\u200D]"}
diff --git a/intl/icu/source/data/locales/or_IN.txt b/intl/icu/source/data/locales/or_IN.txt
index 693e63971..5f54458d8 100644
--- a/intl/icu/source/data/locales/or_IN.txt
+++ b/intl/icu/source/data/locales/or_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
or_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/os.txt b/intl/icu/source/data/locales/os.txt
index 52cd7183c..0889ecd1b 100644
--- a/intl/icu/source/data/locales/os.txt
+++ b/intl/icu/source/data/locales/os.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
os{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/os_GE.txt b/intl/icu/source/data/locales/os_GE.txt
index a07c7c64c..53903a405 100644
--- a/intl/icu/source/data/locales/os_GE.txt
+++ b/intl/icu/source/data/locales/os_GE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
os_GE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/os_RU.txt b/intl/icu/source/data/locales/os_RU.txt
index 352e12518..1d0206b52 100644
--- a/intl/icu/source/data/locales/os_RU.txt
+++ b/intl/icu/source/data/locales/os_RU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
os_RU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/pa.txt b/intl/icu/source/data/locales/pa.txt
index 4df4052fd..0d644950e 100644
--- a/intl/icu/source/data/locales/pa.txt
+++ b/intl/icu/source/data/locales/pa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa{
AuxExemplarCharacters{"[\u200C\u200D ਃ \u0A02 \u0A01 {ਲ\u0A3C}]"}
diff --git a/intl/icu/source/data/locales/pa_Arab.txt b/intl/icu/source/data/locales/pa_Arab.txt
index f95ff8f51..967e7e8f4 100644
--- a/intl/icu/source/data/locales/pa_Arab.txt
+++ b/intl/icu/source/data/locales/pa_Arab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_Arab{
%%Parent{"root"}
diff --git a/intl/icu/source/data/locales/pa_Arab_PK.txt b/intl/icu/source/data/locales/pa_Arab_PK.txt
index 29992d32f..19b7d6acf 100644
--- a/intl/icu/source/data/locales/pa_Arab_PK.txt
+++ b/intl/icu/source/data/locales/pa_Arab_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_Arab_PK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/pa_Guru.txt b/intl/icu/source/data/locales/pa_Guru.txt
index f060f3b8d..f0313fa28 100644
--- a/intl/icu/source/data/locales/pa_Guru.txt
+++ b/intl/icu/source/data/locales/pa_Guru.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_Guru{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/pa_Guru_IN.txt b/intl/icu/source/data/locales/pa_Guru_IN.txt
index e0ef8870f..4151a90b9 100644
--- a/intl/icu/source/data/locales/pa_Guru_IN.txt
+++ b/intl/icu/source/data/locales/pa_Guru_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_Guru_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/pa_IN.txt b/intl/icu/source/data/locales/pa_IN.txt
index b18bba68d..0c4702dd8 100644
--- a/intl/icu/source/data/locales/pa_IN.txt
+++ b/intl/icu/source/data/locales/pa_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_IN{
"%%ALIAS"{"pa_Guru_IN"}
diff --git a/intl/icu/source/data/locales/pa_PK.txt b/intl/icu/source/data/locales/pa_PK.txt
index 1c66c7b37..24e745c3f 100644
--- a/intl/icu/source/data/locales/pa_PK.txt
+++ b/intl/icu/source/data/locales/pa_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_PK{
"%%ALIAS"{"pa_Arab_PK"}
diff --git a/intl/icu/source/data/locales/pl.txt b/intl/icu/source/data/locales/pl.txt
index 4fd6f55fa..3d71d8b44 100644
--- a/intl/icu/source/data/locales/pl.txt
+++ b/intl/icu/source/data/locales/pl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pl{
AuxExemplarCharacters{"[à â å ä æ ç é è ê ë î ï ô ö œ q ß ù û ü v x ÿ]"}
diff --git a/intl/icu/source/data/locales/pl_PL.txt b/intl/icu/source/data/locales/pl_PL.txt
index 62416f129..d25ebbaec 100644
--- a/intl/icu/source/data/locales/pl_PL.txt
+++ b/intl/icu/source/data/locales/pl_PL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pl_PL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ps.txt b/intl/icu/source/data/locales/ps.txt
index 90c9ba52d..b369cd005 100644
--- a/intl/icu/source/data/locales/ps.txt
+++ b/intl/icu/source/data/locales/ps.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ps{
AuxExemplarCharacters{"[\u200C \u200D \u200E\u200F]"}
diff --git a/intl/icu/source/data/locales/ps_AF.txt b/intl/icu/source/data/locales/ps_AF.txt
index 7bd1cd83d..1e10331aa 100644
--- a/intl/icu/source/data/locales/ps_AF.txt
+++ b/intl/icu/source/data/locales/ps_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ps_AF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/pt.txt b/intl/icu/source/data/locales/pt.txt
index 83feb66ba..29d7e6a5e 100644
--- a/intl/icu/source/data/locales/pt.txt
+++ b/intl/icu/source/data/locales/pt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt{
AuxExemplarCharacters{"[ª ă å ä ā æ è ĕ ë ē ì ĭ î ï ī ñ º ŏ ö ø ō œ ù ŭ û ü ū ÿ]"}
diff --git a/intl/icu/source/data/locales/pt_AO.txt b/intl/icu/source/data/locales/pt_AO.txt
index e5f5a3bd2..adfcf0149 100644
--- a/intl/icu/source/data/locales/pt_AO.txt
+++ b/intl/icu/source/data/locales/pt_AO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_AO{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_BR.txt b/intl/icu/source/data/locales/pt_BR.txt
index 855e26105..a25eb7269 100644
--- a/intl/icu/source/data/locales/pt_BR.txt
+++ b/intl/icu/source/data/locales/pt_BR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_BR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/pt_CH.txt b/intl/icu/source/data/locales/pt_CH.txt
index 5f1b386fe..a8855c5db 100644
--- a/intl/icu/source/data/locales/pt_CH.txt
+++ b/intl/icu/source/data/locales/pt_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_CH{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_CV.txt b/intl/icu/source/data/locales/pt_CV.txt
index 7e77af343..9592a9181 100644
--- a/intl/icu/source/data/locales/pt_CV.txt
+++ b/intl/icu/source/data/locales/pt_CV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_CV{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_GQ.txt b/intl/icu/source/data/locales/pt_GQ.txt
index 5a098d1e9..981da7b3d 100644
--- a/intl/icu/source/data/locales/pt_GQ.txt
+++ b/intl/icu/source/data/locales/pt_GQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_GQ{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_GW.txt b/intl/icu/source/data/locales/pt_GW.txt
index 67e6e72a5..ffc135383 100644
--- a/intl/icu/source/data/locales/pt_GW.txt
+++ b/intl/icu/source/data/locales/pt_GW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_GW{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_LU.txt b/intl/icu/source/data/locales/pt_LU.txt
index 009ec80dd..3c00b8b0b 100644
--- a/intl/icu/source/data/locales/pt_LU.txt
+++ b/intl/icu/source/data/locales/pt_LU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_LU{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_MO.txt b/intl/icu/source/data/locales/pt_MO.txt
index bbb10f9db..015233d4f 100644
--- a/intl/icu/source/data/locales/pt_MO.txt
+++ b/intl/icu/source/data/locales/pt_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_MO{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_MZ.txt b/intl/icu/source/data/locales/pt_MZ.txt
index 9873941b7..3e84a77f4 100644
--- a/intl/icu/source/data/locales/pt_MZ.txt
+++ b/intl/icu/source/data/locales/pt_MZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_MZ{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_PT.txt b/intl/icu/source/data/locales/pt_PT.txt
index c84c4345b..f67d59133 100644
--- a/intl/icu/source/data/locales/pt_PT.txt
+++ b/intl/icu/source/data/locales/pt_PT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_PT{
Ellipsis{
diff --git a/intl/icu/source/data/locales/pt_ST.txt b/intl/icu/source/data/locales/pt_ST.txt
index 55f443a28..e6e236be1 100644
--- a/intl/icu/source/data/locales/pt_ST.txt
+++ b/intl/icu/source/data/locales/pt_ST.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_ST{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/pt_TL.txt b/intl/icu/source/data/locales/pt_TL.txt
index 68cb6417e..5cb3c508a 100644
--- a/intl/icu/source/data/locales/pt_TL.txt
+++ b/intl/icu/source/data/locales/pt_TL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_TL{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/locales/qu.txt b/intl/icu/source/data/locales/qu.txt
index 2bbaa7d57..f7dc9b9b5 100644
--- a/intl/icu/source/data/locales/qu.txt
+++ b/intl/icu/source/data/locales/qu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/qu_BO.txt b/intl/icu/source/data/locales/qu_BO.txt
index 341228543..da06ddf8b 100644
--- a/intl/icu/source/data/locales/qu_BO.txt
+++ b/intl/icu/source/data/locales/qu_BO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu_BO{
NumberElements{
diff --git a/intl/icu/source/data/locales/qu_EC.txt b/intl/icu/source/data/locales/qu_EC.txt
index 473cfb8c7..c0150c9d1 100644
--- a/intl/icu/source/data/locales/qu_EC.txt
+++ b/intl/icu/source/data/locales/qu_EC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu_EC{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/qu_PE.txt b/intl/icu/source/data/locales/qu_PE.txt
index 4f2636c13..bbab28dd1 100644
--- a/intl/icu/source/data/locales/qu_PE.txt
+++ b/intl/icu/source/data/locales/qu_PE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu_PE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/rm.txt b/intl/icu/source/data/locales/rm.txt
index cc7ad4560..4b07c0889 100644
--- a/intl/icu/source/data/locales/rm.txt
+++ b/intl/icu/source/data/locales/rm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rm{
AuxExemplarCharacters{"[á ă â å ä ā æ ç ĕ ê ë ē í ĭ î ï ī ñ ó ŏ ô ö ø ō œ ú ŭ û ü ū ÿ]"}
diff --git a/intl/icu/source/data/locales/rm_CH.txt b/intl/icu/source/data/locales/rm_CH.txt
index 4f55d8d18..613bd9802 100644
--- a/intl/icu/source/data/locales/rm_CH.txt
+++ b/intl/icu/source/data/locales/rm_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rm_CH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/rn.txt b/intl/icu/source/data/locales/rn.txt
index 8f28c5a94..4c535d26a 100644
--- a/intl/icu/source/data/locales/rn.txt
+++ b/intl/icu/source/data/locales/rn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rn{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/rn_BI.txt b/intl/icu/source/data/locales/rn_BI.txt
index 67387a451..2943fe23f 100644
--- a/intl/icu/source/data/locales/rn_BI.txt
+++ b/intl/icu/source/data/locales/rn_BI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rn_BI{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ro.txt b/intl/icu/source/data/locales/ro.txt
index 4a2c58d6e..54eecaefb 100644
--- a/intl/icu/source/data/locales/ro.txt
+++ b/intl/icu/source/data/locales/ro.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ro{
AuxExemplarCharacters{"[á à å ä ç é è ê ë ñ ö q ş ţ ü w y]"}
diff --git a/intl/icu/source/data/locales/ro_MD.txt b/intl/icu/source/data/locales/ro_MD.txt
index 5963f3d0a..dc6ae6c14 100644
--- a/intl/icu/source/data/locales/ro_MD.txt
+++ b/intl/icu/source/data/locales/ro_MD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ro_MD{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/ro_RO.txt b/intl/icu/source/data/locales/ro_RO.txt
index ad40a524c..a679ff4b0 100644
--- a/intl/icu/source/data/locales/ro_RO.txt
+++ b/intl/icu/source/data/locales/ro_RO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ro_RO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/rof.txt b/intl/icu/source/data/locales/rof.txt
index 7271cb414..7d6d1c7b1 100644
--- a/intl/icu/source/data/locales/rof.txt
+++ b/intl/icu/source/data/locales/rof.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rof{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/rof_TZ.txt b/intl/icu/source/data/locales/rof_TZ.txt
index 20b0ddf3f..05140692d 100644
--- a/intl/icu/source/data/locales/rof_TZ.txt
+++ b/intl/icu/source/data/locales/rof_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rof_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/root.txt b/intl/icu/source/data/locales/root.txt
index 849a56b9c..41f2abc19 100644
--- a/intl/icu/source/data/locales/root.txt
+++ b/intl/icu/source/data/locales/root.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* ICU <specials> source: <path>/common/main/root.xml
@@ -1689,6 +1689,7 @@ root{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
narrow{
"Taika (645–650)",
@@ -1927,6 +1928,7 @@ root{
"T",
"S",
"H",
+ "R",
}
wide:alias{"/LOCALE/calendar/japanese/eras/abbreviated"}
}
diff --git a/intl/icu/source/data/locales/ru.txt b/intl/icu/source/data/locales/ru.txt
index 03fd4d962..36d936c7d 100644
--- a/intl/icu/source/data/locales/ru.txt
+++ b/intl/icu/source/data/locales/ru.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru{
AuxExemplarCharacters{
@@ -1654,6 +1654,7 @@ ru{
"Эпоха Тайсьо",
"Сьова",
"Эпоха Хэйсэй",
+ "Рэйва",
}
}
}
diff --git a/intl/icu/source/data/locales/ru_BY.txt b/intl/icu/source/data/locales/ru_BY.txt
index 24f2c2829..eb1e83e70 100644
--- a/intl/icu/source/data/locales/ru_BY.txt
+++ b/intl/icu/source/data/locales/ru_BY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_BY{
Version{"2.1.30.5"}
diff --git a/intl/icu/source/data/locales/ru_KG.txt b/intl/icu/source/data/locales/ru_KG.txt
index 32a695a1b..0975a32c0 100644
--- a/intl/icu/source/data/locales/ru_KG.txt
+++ b/intl/icu/source/data/locales/ru_KG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_KG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ru_KZ.txt b/intl/icu/source/data/locales/ru_KZ.txt
index 9e668532e..8252030f7 100644
--- a/intl/icu/source/data/locales/ru_KZ.txt
+++ b/intl/icu/source/data/locales/ru_KZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_KZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ru_MD.txt b/intl/icu/source/data/locales/ru_MD.txt
index d4c193027..52d124fe7 100644
--- a/intl/icu/source/data/locales/ru_MD.txt
+++ b/intl/icu/source/data/locales/ru_MD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_MD{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ru_RU.txt b/intl/icu/source/data/locales/ru_RU.txt
index 25d603e02..018d896d9 100644
--- a/intl/icu/source/data/locales/ru_RU.txt
+++ b/intl/icu/source/data/locales/ru_RU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_RU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ru_UA.txt b/intl/icu/source/data/locales/ru_UA.txt
index 37a747321..683ef099a 100644
--- a/intl/icu/source/data/locales/ru_UA.txt
+++ b/intl/icu/source/data/locales/ru_UA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru_UA{
NumberElements{
diff --git a/intl/icu/source/data/locales/rw.txt b/intl/icu/source/data/locales/rw.txt
index d6ea281f6..652e4723b 100644
--- a/intl/icu/source/data/locales/rw.txt
+++ b/intl/icu/source/data/locales/rw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rw{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/rw_RW.txt b/intl/icu/source/data/locales/rw_RW.txt
index bd860ea4e..a1b0471d8 100644
--- a/intl/icu/source/data/locales/rw_RW.txt
+++ b/intl/icu/source/data/locales/rw_RW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rw_RW{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/rwk.txt b/intl/icu/source/data/locales/rwk.txt
index f4af85a3a..273b4ba34 100644
--- a/intl/icu/source/data/locales/rwk.txt
+++ b/intl/icu/source/data/locales/rwk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rwk{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/rwk_TZ.txt b/intl/icu/source/data/locales/rwk_TZ.txt
index 6c483abce..d6e9fa3e3 100644
--- a/intl/icu/source/data/locales/rwk_TZ.txt
+++ b/intl/icu/source/data/locales/rwk_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rwk_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sah.txt b/intl/icu/source/data/locales/sah.txt
index 1da9e1107..ab6d2a92c 100644
--- a/intl/icu/source/data/locales/sah.txt
+++ b/intl/icu/source/data/locales/sah.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sah{
AuxExemplarCharacters{"[в е ё ж з ф ц ш щ ъ ь ю я]"}
diff --git a/intl/icu/source/data/locales/sah_RU.txt b/intl/icu/source/data/locales/sah_RU.txt
index fa6eca21e..b2e179b78 100644
--- a/intl/icu/source/data/locales/sah_RU.txt
+++ b/intl/icu/source/data/locales/sah_RU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sah_RU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/saq.txt b/intl/icu/source/data/locales/saq.txt
index 325d2d408..c70d438fd 100644
--- a/intl/icu/source/data/locales/saq.txt
+++ b/intl/icu/source/data/locales/saq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
saq{
AuxExemplarCharacters{"[f q x z]"}
diff --git a/intl/icu/source/data/locales/saq_KE.txt b/intl/icu/source/data/locales/saq_KE.txt
index 4a3bfbe87..7559de9a0 100644
--- a/intl/icu/source/data/locales/saq_KE.txt
+++ b/intl/icu/source/data/locales/saq_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
saq_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sbp.txt b/intl/icu/source/data/locales/sbp.txt
index 32d02bdd9..2fc65a433 100644
--- a/intl/icu/source/data/locales/sbp.txt
+++ b/intl/icu/source/data/locales/sbp.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sbp{
AuxExemplarCharacters{"[q r x z]"}
diff --git a/intl/icu/source/data/locales/sbp_TZ.txt b/intl/icu/source/data/locales/sbp_TZ.txt
index e2876e98c..3a061b768 100644
--- a/intl/icu/source/data/locales/sbp_TZ.txt
+++ b/intl/icu/source/data/locales/sbp_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sbp_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/se.txt b/intl/icu/source/data/locales/se.txt
index d98cdedc4..0a269bd1d 100644
--- a/intl/icu/source/data/locales/se.txt
+++ b/intl/icu/source/data/locales/se.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
se{
AuxExemplarCharacters{"[à ç é è í ń ñ ó ò q ú w x y ü ø æ å ä ã ö]"}
diff --git a/intl/icu/source/data/locales/se_FI.txt b/intl/icu/source/data/locales/se_FI.txt
index a279c8c5a..e88b80410 100644
--- a/intl/icu/source/data/locales/se_FI.txt
+++ b/intl/icu/source/data/locales/se_FI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
se_FI{
Version{"2.1.27.78"}
diff --git a/intl/icu/source/data/locales/se_NO.txt b/intl/icu/source/data/locales/se_NO.txt
index 633b51b1d..63918c22e 100644
--- a/intl/icu/source/data/locales/se_NO.txt
+++ b/intl/icu/source/data/locales/se_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
se_NO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/se_SE.txt b/intl/icu/source/data/locales/se_SE.txt
index 4ccc6eeb0..74b2bb7f2 100644
--- a/intl/icu/source/data/locales/se_SE.txt
+++ b/intl/icu/source/data/locales/se_SE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
se_SE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/seh.txt b/intl/icu/source/data/locales/seh.txt
index d8892a007..506155694 100644
--- a/intl/icu/source/data/locales/seh.txt
+++ b/intl/icu/source/data/locales/seh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
seh{
ExemplarCharacters{
diff --git a/intl/icu/source/data/locales/seh_MZ.txt b/intl/icu/source/data/locales/seh_MZ.txt
index 666718c3d..9f6d154d5 100644
--- a/intl/icu/source/data/locales/seh_MZ.txt
+++ b/intl/icu/source/data/locales/seh_MZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
seh_MZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ses.txt b/intl/icu/source/data/locales/ses.txt
index 66d5728a2..4b13aa5a4 100644
--- a/intl/icu/source/data/locales/ses.txt
+++ b/intl/icu/source/data/locales/ses.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ses{
AuxExemplarCharacters{"[v]"}
diff --git a/intl/icu/source/data/locales/ses_ML.txt b/intl/icu/source/data/locales/ses_ML.txt
index 6eafaaa05..90b1352ee 100644
--- a/intl/icu/source/data/locales/ses_ML.txt
+++ b/intl/icu/source/data/locales/ses_ML.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ses_ML{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sg.txt b/intl/icu/source/data/locales/sg.txt
index 51e633a6b..b2a466a14 100644
--- a/intl/icu/source/data/locales/sg.txt
+++ b/intl/icu/source/data/locales/sg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sg{
AuxExemplarCharacters{"[c q x]"}
diff --git a/intl/icu/source/data/locales/sg_CF.txt b/intl/icu/source/data/locales/sg_CF.txt
index 7e7b878eb..b440bbf1d 100644
--- a/intl/icu/source/data/locales/sg_CF.txt
+++ b/intl/icu/source/data/locales/sg_CF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sg_CF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sh.txt b/intl/icu/source/data/locales/sh.txt
index 74b646a22..24ed34953 100644
--- a/intl/icu/source/data/locales/sh.txt
+++ b/intl/icu/source/data/locales/sh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh{
"%%ALIAS"{"sr_Latn"}
diff --git a/intl/icu/source/data/locales/sh_BA.txt b/intl/icu/source/data/locales/sh_BA.txt
index 93bdac63f..9cb7b42e9 100644
--- a/intl/icu/source/data/locales/sh_BA.txt
+++ b/intl/icu/source/data/locales/sh_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_BA{
"%%ALIAS"{"sr_Latn_BA"}
diff --git a/intl/icu/source/data/locales/sh_CS.txt b/intl/icu/source/data/locales/sh_CS.txt
index 224568a08..d9f1cba21 100644
--- a/intl/icu/source/data/locales/sh_CS.txt
+++ b/intl/icu/source/data/locales/sh_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_CS{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/locales/sh_YU.txt b/intl/icu/source/data/locales/sh_YU.txt
index 8a7d46098..d36ba555d 100644
--- a/intl/icu/source/data/locales/sh_YU.txt
+++ b/intl/icu/source/data/locales/sh_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_YU{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/locales/shi.txt b/intl/icu/source/data/locales/shi.txt
index 06d0876d2..891ceca45 100644
--- a/intl/icu/source/data/locales/shi.txt
+++ b/intl/icu/source/data/locales/shi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi{
ExemplarCharacters{"[ⴰ ⴱ ⴳ {ⴳⵯ} ⴷ ⴹ ⴻ ⴼ ⴽ {ⴽⵯ} ⵀ ⵃ ⵄ ⵅ ⵇ ⵉ ⵊ ⵍ ⵎ ⵏ ⵓ ⵔ ⵕ ⵖ ⵙ ⵚ ⵛ ⵜ ⵟ ⵡ ⵢ ⵣ ⵥ]"}
diff --git a/intl/icu/source/data/locales/shi_Latn.txt b/intl/icu/source/data/locales/shi_Latn.txt
index b2b50734e..7f4eefdff 100644
--- a/intl/icu/source/data/locales/shi_Latn.txt
+++ b/intl/icu/source/data/locales/shi_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_Latn{
%%Parent{"root"}
diff --git a/intl/icu/source/data/locales/shi_Latn_MA.txt b/intl/icu/source/data/locales/shi_Latn_MA.txt
index 47f0f6cd6..26f5b364f 100644
--- a/intl/icu/source/data/locales/shi_Latn_MA.txt
+++ b/intl/icu/source/data/locales/shi_Latn_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_Latn_MA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/shi_MA.txt b/intl/icu/source/data/locales/shi_MA.txt
index 00de1b1b2..1a317da47 100644
--- a/intl/icu/source/data/locales/shi_MA.txt
+++ b/intl/icu/source/data/locales/shi_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_MA{
"%%ALIAS"{"shi_Tfng_MA"}
diff --git a/intl/icu/source/data/locales/shi_Tfng.txt b/intl/icu/source/data/locales/shi_Tfng.txt
index 1713a5c08..d8a40c314 100644
--- a/intl/icu/source/data/locales/shi_Tfng.txt
+++ b/intl/icu/source/data/locales/shi_Tfng.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_Tfng{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/shi_Tfng_MA.txt b/intl/icu/source/data/locales/shi_Tfng_MA.txt
index db3b054b3..57b2824af 100644
--- a/intl/icu/source/data/locales/shi_Tfng_MA.txt
+++ b/intl/icu/source/data/locales/shi_Tfng_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_Tfng_MA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/si.txt b/intl/icu/source/data/locales/si.txt
index bb81004c7..5597a77f7 100644
--- a/intl/icu/source/data/locales/si.txt
+++ b/intl/icu/source/data/locales/si.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
si{
AuxExemplarCharacters{"[\u200B\u200C\u200D ඎ ඏ ඐ ඦ ෳ]"}
diff --git a/intl/icu/source/data/locales/si_LK.txt b/intl/icu/source/data/locales/si_LK.txt
index 1e84cb5f8..409dba822 100644
--- a/intl/icu/source/data/locales/si_LK.txt
+++ b/intl/icu/source/data/locales/si_LK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
si_LK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sk.txt b/intl/icu/source/data/locales/sk.txt
index addc26472..1a97a353b 100644
--- a/intl/icu/source/data/locales/sk.txt
+++ b/intl/icu/source/data/locales/sk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sk{
AuxExemplarCharacters{"[à ă â å ā æ ç è ĕ ê ë ē ì ĭ î ï ī ñ ò ŏ ö ø ō œ ř ù ŭ û ü ū ÿ]"}
diff --git a/intl/icu/source/data/locales/sk_SK.txt b/intl/icu/source/data/locales/sk_SK.txt
index 55c4db9e5..4aaa836ce 100644
--- a/intl/icu/source/data/locales/sk_SK.txt
+++ b/intl/icu/source/data/locales/sk_SK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sk_SK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sl.txt b/intl/icu/source/data/locales/sl.txt
index c87925e0d..5bd19968c 100644
--- a/intl/icu/source/data/locales/sl.txt
+++ b/intl/icu/source/data/locales/sl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sl{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/sl_SI.txt b/intl/icu/source/data/locales/sl_SI.txt
index fa08c4153..c8b53e8fc 100644
--- a/intl/icu/source/data/locales/sl_SI.txt
+++ b/intl/icu/source/data/locales/sl_SI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sl_SI{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/smn.txt b/intl/icu/source/data/locales/smn.txt
index c721fa98e..1cef77358 100644
--- a/intl/icu/source/data/locales/smn.txt
+++ b/intl/icu/source/data/locales/smn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
smn{
AuxExemplarCharacters{"[à ç é è í ñ ń ó ò q ú ü w x æ ø å ã ö]"}
diff --git a/intl/icu/source/data/locales/smn_FI.txt b/intl/icu/source/data/locales/smn_FI.txt
index 1cc99d4b8..5ddb264f3 100644
--- a/intl/icu/source/data/locales/smn_FI.txt
+++ b/intl/icu/source/data/locales/smn_FI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
smn_FI{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sn.txt b/intl/icu/source/data/locales/sn.txt
index 2be66d41c..a0688e595 100644
--- a/intl/icu/source/data/locales/sn.txt
+++ b/intl/icu/source/data/locales/sn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sn{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/sn_ZW.txt b/intl/icu/source/data/locales/sn_ZW.txt
index fd0b7a435..d6ab26fcf 100644
--- a/intl/icu/source/data/locales/sn_ZW.txt
+++ b/intl/icu/source/data/locales/sn_ZW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sn_ZW{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/so.txt b/intl/icu/source/data/locales/so.txt
index 75184e053..68acef95c 100644
--- a/intl/icu/source/data/locales/so.txt
+++ b/intl/icu/source/data/locales/so.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/so_DJ.txt b/intl/icu/source/data/locales/so_DJ.txt
index f4b7eb25d..ae1f17692 100644
--- a/intl/icu/source/data/locales/so_DJ.txt
+++ b/intl/icu/source/data/locales/so_DJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so_DJ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/so_ET.txt b/intl/icu/source/data/locales/so_ET.txt
index 4ac580e02..dc10ed9b8 100644
--- a/intl/icu/source/data/locales/so_ET.txt
+++ b/intl/icu/source/data/locales/so_ET.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so_ET{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/so_KE.txt b/intl/icu/source/data/locales/so_KE.txt
index f56d90940..4b98abbe9 100644
--- a/intl/icu/source/data/locales/so_KE.txt
+++ b/intl/icu/source/data/locales/so_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/so_SO.txt b/intl/icu/source/data/locales/so_SO.txt
index 4b7d93b54..6d080ccb5 100644
--- a/intl/icu/source/data/locales/so_SO.txt
+++ b/intl/icu/source/data/locales/so_SO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so_SO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sq.txt b/intl/icu/source/data/locales/sq.txt
index 2460e462c..1ca7cfc80 100644
--- a/intl/icu/source/data/locales/sq.txt
+++ b/intl/icu/source/data/locales/sq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sq{
AuxExemplarCharacters{"[w]"}
diff --git a/intl/icu/source/data/locales/sq_AL.txt b/intl/icu/source/data/locales/sq_AL.txt
index 55ea99501..8b48b6461 100644
--- a/intl/icu/source/data/locales/sq_AL.txt
+++ b/intl/icu/source/data/locales/sq_AL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sq_AL{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sq_MK.txt b/intl/icu/source/data/locales/sq_MK.txt
index 04d400898..970ca335a 100644
--- a/intl/icu/source/data/locales/sq_MK.txt
+++ b/intl/icu/source/data/locales/sq_MK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sq_MK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sq_XK.txt b/intl/icu/source/data/locales/sq_XK.txt
index 4501d05de..48c3c9f5a 100644
--- a/intl/icu/source/data/locales/sq_XK.txt
+++ b/intl/icu/source/data/locales/sq_XK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sq_XK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sr.txt b/intl/icu/source/data/locales/sr.txt
index 65511f471..ceeeb2ed2 100644
--- a/intl/icu/source/data/locales/sr.txt
+++ b/intl/icu/source/data/locales/sr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr{
AuxExemplarCharacters{"[ё й щ ъ ы ь э ю я]"}
@@ -1231,6 +1231,7 @@ sr{
"Таишо",
"Шова",
"Хаисеи",
+ "Реива",
}
}
}
diff --git a/intl/icu/source/data/locales/sr_BA.txt b/intl/icu/source/data/locales/sr_BA.txt
index edad17f70..97eb38298 100644
--- a/intl/icu/source/data/locales/sr_BA.txt
+++ b/intl/icu/source/data/locales/sr_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_BA{
"%%ALIAS"{"sr_Cyrl_BA"}
diff --git a/intl/icu/source/data/locales/sr_CS.txt b/intl/icu/source/data/locales/sr_CS.txt
index 5f8becfab..6b3d70789 100644
--- a/intl/icu/source/data/locales/sr_CS.txt
+++ b/intl/icu/source/data/locales/sr_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_CS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/locales/sr_Cyrl.txt b/intl/icu/source/data/locales/sr_Cyrl.txt
index 7cf7067f2..9a07b98e6 100644
--- a/intl/icu/source/data/locales/sr_Cyrl.txt
+++ b/intl/icu/source/data/locales/sr_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sr_Cyrl_BA.txt b/intl/icu/source/data/locales/sr_Cyrl_BA.txt
index 389b47c2e..3391e5bd7 100644
--- a/intl/icu/source/data/locales/sr_Cyrl_BA.txt
+++ b/intl/icu/source/data/locales/sr_Cyrl_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_BA{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/sr_Cyrl_CS.txt b/intl/icu/source/data/locales/sr_Cyrl_CS.txt
index 9325e5a76..b19156a02 100644
--- a/intl/icu/source/data/locales/sr_Cyrl_CS.txt
+++ b/intl/icu/source/data/locales/sr_Cyrl_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_CS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/locales/sr_Cyrl_ME.txt b/intl/icu/source/data/locales/sr_Cyrl_ME.txt
index 2f022a930..d2d5095a4 100644
--- a/intl/icu/source/data/locales/sr_Cyrl_ME.txt
+++ b/intl/icu/source/data/locales/sr_Cyrl_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_ME{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/sr_Cyrl_RS.txt b/intl/icu/source/data/locales/sr_Cyrl_RS.txt
index 41c286c80..af4aca82e 100644
--- a/intl/icu/source/data/locales/sr_Cyrl_RS.txt
+++ b/intl/icu/source/data/locales/sr_Cyrl_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_RS{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sr_Cyrl_XK.txt b/intl/icu/source/data/locales/sr_Cyrl_XK.txt
index 853b229c9..fd05d2ead 100644
--- a/intl/icu/source/data/locales/sr_Cyrl_XK.txt
+++ b/intl/icu/source/data/locales/sr_Cyrl_XK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_XK{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/sr_Cyrl_YU.txt b/intl/icu/source/data/locales/sr_Cyrl_YU.txt
index 806d42c43..63c1837be 100644
--- a/intl/icu/source/data/locales/sr_Cyrl_YU.txt
+++ b/intl/icu/source/data/locales/sr_Cyrl_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_YU{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/locales/sr_Latn.txt b/intl/icu/source/data/locales/sr_Latn.txt
index c879c41e5..2f4db0cb7 100644
--- a/intl/icu/source/data/locales/sr_Latn.txt
+++ b/intl/icu/source/data/locales/sr_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn{
%%Parent{"root"}
@@ -1232,6 +1232,7 @@ sr_Latn{
"Taišo",
"Šova",
"Haisei",
+ "Reiva",
}
}
}
diff --git a/intl/icu/source/data/locales/sr_Latn_BA.txt b/intl/icu/source/data/locales/sr_Latn_BA.txt
index 0dd51d8fb..b4b36aaa0 100644
--- a/intl/icu/source/data/locales/sr_Latn_BA.txt
+++ b/intl/icu/source/data/locales/sr_Latn_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_BA{
Version{"2.1.29.33"}
diff --git a/intl/icu/source/data/locales/sr_Latn_CS.txt b/intl/icu/source/data/locales/sr_Latn_CS.txt
index 0952735a9..f189ad3dc 100644
--- a/intl/icu/source/data/locales/sr_Latn_CS.txt
+++ b/intl/icu/source/data/locales/sr_Latn_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_CS{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/locales/sr_Latn_ME.txt b/intl/icu/source/data/locales/sr_Latn_ME.txt
index 7dcd7d3b3..81df0eee6 100644
--- a/intl/icu/source/data/locales/sr_Latn_ME.txt
+++ b/intl/icu/source/data/locales/sr_Latn_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_ME{
Version{"2.1.29.33"}
diff --git a/intl/icu/source/data/locales/sr_Latn_RS.txt b/intl/icu/source/data/locales/sr_Latn_RS.txt
index 9a062ac2e..7aa6b0c53 100644
--- a/intl/icu/source/data/locales/sr_Latn_RS.txt
+++ b/intl/icu/source/data/locales/sr_Latn_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_RS{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sr_Latn_XK.txt b/intl/icu/source/data/locales/sr_Latn_XK.txt
index 920630238..a5b5c3709 100644
--- a/intl/icu/source/data/locales/sr_Latn_XK.txt
+++ b/intl/icu/source/data/locales/sr_Latn_XK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_XK{
Version{"2.1.29.33"}
diff --git a/intl/icu/source/data/locales/sr_Latn_YU.txt b/intl/icu/source/data/locales/sr_Latn_YU.txt
index 2747ab210..593433b95 100644
--- a/intl/icu/source/data/locales/sr_Latn_YU.txt
+++ b/intl/icu/source/data/locales/sr_Latn_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_YU{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/locales/sr_ME.txt b/intl/icu/source/data/locales/sr_ME.txt
index 32dc91046..4205d8e05 100644
--- a/intl/icu/source/data/locales/sr_ME.txt
+++ b/intl/icu/source/data/locales/sr_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_ME{
"%%ALIAS"{"sr_Latn_ME"}
diff --git a/intl/icu/source/data/locales/sr_RS.txt b/intl/icu/source/data/locales/sr_RS.txt
index 674ff7755..bd699280f 100644
--- a/intl/icu/source/data/locales/sr_RS.txt
+++ b/intl/icu/source/data/locales/sr_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_RS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/locales/sr_XK.txt b/intl/icu/source/data/locales/sr_XK.txt
index 9628a2763..2191f808f 100644
--- a/intl/icu/source/data/locales/sr_XK.txt
+++ b/intl/icu/source/data/locales/sr_XK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_XK{
"%%ALIAS"{"sr_Cyrl_XK"}
diff --git a/intl/icu/source/data/locales/sr_YU.txt b/intl/icu/source/data/locales/sr_YU.txt
index 26563d041..8876f0fda 100644
--- a/intl/icu/source/data/locales/sr_YU.txt
+++ b/intl/icu/source/data/locales/sr_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_YU{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/locales/sv.txt b/intl/icu/source/data/locales/sv.txt
index de009d78f..8e40a4b82 100644
--- a/intl/icu/source/data/locales/sv.txt
+++ b/intl/icu/source/data/locales/sv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sv{
AuxExemplarCharacters{"[á â ã ā ç ë í î ï ī ñ ó ú ÿ ü æ ø]"}
@@ -1563,6 +1563,7 @@ sv{
"Taishō",
"Shōwa",
"Heisei",
+ "Reiwa",
}
}
}
diff --git a/intl/icu/source/data/locales/sv_AX.txt b/intl/icu/source/data/locales/sv_AX.txt
index 450726802..4c5162848 100644
--- a/intl/icu/source/data/locales/sv_AX.txt
+++ b/intl/icu/source/data/locales/sv_AX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sv_AX{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sv_FI.txt b/intl/icu/source/data/locales/sv_FI.txt
index 386013103..99f11808d 100644
--- a/intl/icu/source/data/locales/sv_FI.txt
+++ b/intl/icu/source/data/locales/sv_FI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sv_FI{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/sv_SE.txt b/intl/icu/source/data/locales/sv_SE.txt
index 62619589b..209c40557 100644
--- a/intl/icu/source/data/locales/sv_SE.txt
+++ b/intl/icu/source/data/locales/sv_SE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sv_SE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sw.txt b/intl/icu/source/data/locales/sw.txt
index ef7028fc2..c20e278d4 100644
--- a/intl/icu/source/data/locales/sw.txt
+++ b/intl/icu/source/data/locales/sw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw{
AuxExemplarCharacters{"[c q x]"}
diff --git a/intl/icu/source/data/locales/sw_CD.txt b/intl/icu/source/data/locales/sw_CD.txt
index 2af774e77..d367c497c 100644
--- a/intl/icu/source/data/locales/sw_CD.txt
+++ b/intl/icu/source/data/locales/sw_CD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw_CD{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/sw_KE.txt b/intl/icu/source/data/locales/sw_KE.txt
index 28a9bc610..ec0adb806 100644
--- a/intl/icu/source/data/locales/sw_KE.txt
+++ b/intl/icu/source/data/locales/sw_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw_KE{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/sw_TZ.txt b/intl/icu/source/data/locales/sw_TZ.txt
index f21eaf3bc..14666af4c 100644
--- a/intl/icu/source/data/locales/sw_TZ.txt
+++ b/intl/icu/source/data/locales/sw_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/sw_UG.txt b/intl/icu/source/data/locales/sw_UG.txt
index 811bbb291..b686c2f7b 100644
--- a/intl/icu/source/data/locales/sw_UG.txt
+++ b/intl/icu/source/data/locales/sw_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw_UG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ta.txt b/intl/icu/source/data/locales/ta.txt
index 8184c2c6e..9f2dac222 100644
--- a/intl/icu/source/data/locales/ta.txt
+++ b/intl/icu/source/data/locales/ta.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta{
AuxExemplarCharacters{"[\u200C\u200D]"}
diff --git a/intl/icu/source/data/locales/ta_IN.txt b/intl/icu/source/data/locales/ta_IN.txt
index 1e76487fd..d89636cc3 100644
--- a/intl/icu/source/data/locales/ta_IN.txt
+++ b/intl/icu/source/data/locales/ta_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ta_LK.txt b/intl/icu/source/data/locales/ta_LK.txt
index 1c47a61a7..02f4cba89 100644
--- a/intl/icu/source/data/locales/ta_LK.txt
+++ b/intl/icu/source/data/locales/ta_LK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_LK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ta_MY.txt b/intl/icu/source/data/locales/ta_MY.txt
index 22047ee15..81c1d33fe 100644
--- a/intl/icu/source/data/locales/ta_MY.txt
+++ b/intl/icu/source/data/locales/ta_MY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_MY{
NumberElements{
diff --git a/intl/icu/source/data/locales/ta_SG.txt b/intl/icu/source/data/locales/ta_SG.txt
index 95b05ec30..145565cb6 100644
--- a/intl/icu/source/data/locales/ta_SG.txt
+++ b/intl/icu/source/data/locales/ta_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_SG{
NumberElements{
diff --git a/intl/icu/source/data/locales/te.txt b/intl/icu/source/data/locales/te.txt
index 56be91257..21f0f6360 100644
--- a/intl/icu/source/data/locales/te.txt
+++ b/intl/icu/source/data/locales/te.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
te{
AuxExemplarCharacters{"[\u200C\u200D ౦ ౧ ౨ ౩ ౪ ౫ ౬ ౭ ౮ ౯]"}
diff --git a/intl/icu/source/data/locales/te_IN.txt b/intl/icu/source/data/locales/te_IN.txt
index 8d8ffbdfa..c9ecd5f8a 100644
--- a/intl/icu/source/data/locales/te_IN.txt
+++ b/intl/icu/source/data/locales/te_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
te_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/teo.txt b/intl/icu/source/data/locales/teo.txt
index 78e00acec..d299c168a 100644
--- a/intl/icu/source/data/locales/teo.txt
+++ b/intl/icu/source/data/locales/teo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
teo{
AuxExemplarCharacters{"[f q z]"}
diff --git a/intl/icu/source/data/locales/teo_KE.txt b/intl/icu/source/data/locales/teo_KE.txt
index 3d48ab401..ebde293b1 100644
--- a/intl/icu/source/data/locales/teo_KE.txt
+++ b/intl/icu/source/data/locales/teo_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
teo_KE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/teo_UG.txt b/intl/icu/source/data/locales/teo_UG.txt
index a6730de38..0601c106a 100644
--- a/intl/icu/source/data/locales/teo_UG.txt
+++ b/intl/icu/source/data/locales/teo_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
teo_UG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/th.txt b/intl/icu/source/data/locales/th.txt
index 4ffeb0a6d..19007e466 100644
--- a/intl/icu/source/data/locales/th.txt
+++ b/intl/icu/source/data/locales/th.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
th{
AuxExemplarCharacters{"[\u200B]"}
@@ -2308,6 +2308,7 @@ th{
"ทะอิโช",
"โชวะ",
"เฮเซ",
+ "เรวะ",
}
}
}
diff --git a/intl/icu/source/data/locales/th_TH.txt b/intl/icu/source/data/locales/th_TH.txt
index ba7a44f9e..4122ae070 100644
--- a/intl/icu/source/data/locales/th_TH.txt
+++ b/intl/icu/source/data/locales/th_TH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
th_TH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/th_TH_TRADITIONAL.txt b/intl/icu/source/data/locales/th_TH_TRADITIONAL.txt
index d72e493f4..204799cb1 100644
--- a/intl/icu/source/data/locales/th_TH_TRADITIONAL.txt
+++ b/intl/icu/source/data/locales/th_TH_TRADITIONAL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
th_TH_TRADITIONAL{
calendar{
diff --git a/intl/icu/source/data/locales/ti.txt b/intl/icu/source/data/locales/ti.txt
index 7afaf7173..964f62d22 100644
--- a/intl/icu/source/data/locales/ti.txt
+++ b/intl/icu/source/data/locales/ti.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ti{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/ti_ER.txt b/intl/icu/source/data/locales/ti_ER.txt
index 623ae0f91..f44302b6c 100644
--- a/intl/icu/source/data/locales/ti_ER.txt
+++ b/intl/icu/source/data/locales/ti_ER.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ti_ER{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/ti_ET.txt b/intl/icu/source/data/locales/ti_ET.txt
index 348655613..1abd16dc4 100644
--- a/intl/icu/source/data/locales/ti_ET.txt
+++ b/intl/icu/source/data/locales/ti_ET.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ti_ET{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/tl.txt b/intl/icu/source/data/locales/tl.txt
index 4e521f927..29859d8a3 100644
--- a/intl/icu/source/data/locales/tl.txt
+++ b/intl/icu/source/data/locales/tl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tl{
"%%ALIAS"{"fil"}
diff --git a/intl/icu/source/data/locales/tl_PH.txt b/intl/icu/source/data/locales/tl_PH.txt
index 07c9f9047..75489b84b 100644
--- a/intl/icu/source/data/locales/tl_PH.txt
+++ b/intl/icu/source/data/locales/tl_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tl_PH{
"%%ALIAS"{"fil_PH"}
diff --git a/intl/icu/source/data/locales/to.txt b/intl/icu/source/data/locales/to.txt
index 78d40c649..1bdeed264 100644
--- a/intl/icu/source/data/locales/to.txt
+++ b/intl/icu/source/data/locales/to.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
to{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/to_TO.txt b/intl/icu/source/data/locales/to_TO.txt
index ff267ed30..0aec8fcc7 100644
--- a/intl/icu/source/data/locales/to_TO.txt
+++ b/intl/icu/source/data/locales/to_TO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
to_TO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/tr.txt b/intl/icu/source/data/locales/tr.txt
index 06d13ea12..8c6db5102 100644
--- a/intl/icu/source/data/locales/tr.txt
+++ b/intl/icu/source/data/locales/tr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tr{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/tr_CY.txt b/intl/icu/source/data/locales/tr_CY.txt
index 54d7e7b27..32869e149 100644
--- a/intl/icu/source/data/locales/tr_CY.txt
+++ b/intl/icu/source/data/locales/tr_CY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tr_CY{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/tr_TR.txt b/intl/icu/source/data/locales/tr_TR.txt
index 014c7d2aa..8b3e4744e 100644
--- a/intl/icu/source/data/locales/tr_TR.txt
+++ b/intl/icu/source/data/locales/tr_TR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tr_TR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/twq.txt b/intl/icu/source/data/locales/twq.txt
index 056962aac..c05ad828f 100644
--- a/intl/icu/source/data/locales/twq.txt
+++ b/intl/icu/source/data/locales/twq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
twq{
AuxExemplarCharacters{"[v]"}
diff --git a/intl/icu/source/data/locales/twq_NE.txt b/intl/icu/source/data/locales/twq_NE.txt
index 550fb6142..f92eca73f 100644
--- a/intl/icu/source/data/locales/twq_NE.txt
+++ b/intl/icu/source/data/locales/twq_NE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
twq_NE{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/tzm.txt b/intl/icu/source/data/locales/tzm.txt
index 222a65c5e..fb6c3e182 100644
--- a/intl/icu/source/data/locales/tzm.txt
+++ b/intl/icu/source/data/locales/tzm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tzm{
AuxExemplarCharacters{"[o p v]"}
diff --git a/intl/icu/source/data/locales/tzm_MA.txt b/intl/icu/source/data/locales/tzm_MA.txt
index bafeffbea..cd12a6ee6 100644
--- a/intl/icu/source/data/locales/tzm_MA.txt
+++ b/intl/icu/source/data/locales/tzm_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tzm_MA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ug.txt b/intl/icu/source/data/locales/ug.txt
index 978f61fc3..c7f9e3138 100644
--- a/intl/icu/source/data/locales/ug.txt
+++ b/intl/icu/source/data/locales/ug.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ug{
ExemplarCharacters{"[ئ ا ە ب پ ت ج چ خ د ر ز ژ س ش غ ف ق ك گ ڭ ل م ن ھ و ۇ ۆ ۈ ۋ ې ى ي]"}
diff --git a/intl/icu/source/data/locales/ug_CN.txt b/intl/icu/source/data/locales/ug_CN.txt
index 89014e012..f48a537b8 100644
--- a/intl/icu/source/data/locales/ug_CN.txt
+++ b/intl/icu/source/data/locales/ug_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ug_CN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/uk.txt b/intl/icu/source/data/locales/uk.txt
index a0297a671..50d317286 100644
--- a/intl/icu/source/data/locales/uk.txt
+++ b/intl/icu/source/data/locales/uk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uk{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/uk_UA.txt b/intl/icu/source/data/locales/uk_UA.txt
index b26a119d9..fc585acdd 100644
--- a/intl/icu/source/data/locales/uk_UA.txt
+++ b/intl/icu/source/data/locales/uk_UA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uk_UA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/ur.txt b/intl/icu/source/data/locales/ur.txt
index 5fe1f56bf..e9038f08b 100644
--- a/intl/icu/source/data/locales/ur.txt
+++ b/intl/icu/source/data/locales/ur.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ur{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/ur_IN.txt b/intl/icu/source/data/locales/ur_IN.txt
index 6e0bc2944..6ec8544b5 100644
--- a/intl/icu/source/data/locales/ur_IN.txt
+++ b/intl/icu/source/data/locales/ur_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ur_IN{
NumberElements{
diff --git a/intl/icu/source/data/locales/ur_PK.txt b/intl/icu/source/data/locales/ur_PK.txt
index bae3581fe..4a7927f5b 100644
--- a/intl/icu/source/data/locales/ur_PK.txt
+++ b/intl/icu/source/data/locales/ur_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ur_PK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/uz.txt b/intl/icu/source/data/locales/uz.txt
index c913e0222..5b5011ae9 100644
--- a/intl/icu/source/data/locales/uz.txt
+++ b/intl/icu/source/data/locales/uz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz{
AuxExemplarCharacters{"[c w]"}
diff --git a/intl/icu/source/data/locales/uz_AF.txt b/intl/icu/source/data/locales/uz_AF.txt
index 24ca29458..6dbfd1008 100644
--- a/intl/icu/source/data/locales/uz_AF.txt
+++ b/intl/icu/source/data/locales/uz_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_AF{
"%%ALIAS"{"uz_Arab_AF"}
diff --git a/intl/icu/source/data/locales/uz_Arab.txt b/intl/icu/source/data/locales/uz_Arab.txt
index 153d21b5c..1e5d680fe 100644
--- a/intl/icu/source/data/locales/uz_Arab.txt
+++ b/intl/icu/source/data/locales/uz_Arab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Arab{
%%Parent{"root"}
diff --git a/intl/icu/source/data/locales/uz_Arab_AF.txt b/intl/icu/source/data/locales/uz_Arab_AF.txt
index 29a007877..f83b8aa71 100644
--- a/intl/icu/source/data/locales/uz_Arab_AF.txt
+++ b/intl/icu/source/data/locales/uz_Arab_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Arab_AF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/uz_Cyrl.txt b/intl/icu/source/data/locales/uz_Cyrl.txt
index 0f5c3e086..093b3a890 100644
--- a/intl/icu/source/data/locales/uz_Cyrl.txt
+++ b/intl/icu/source/data/locales/uz_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Cyrl{
%%Parent{"root"}
diff --git a/intl/icu/source/data/locales/uz_Cyrl_UZ.txt b/intl/icu/source/data/locales/uz_Cyrl_UZ.txt
index 4fd6eb3dc..ad2f7d493 100644
--- a/intl/icu/source/data/locales/uz_Cyrl_UZ.txt
+++ b/intl/icu/source/data/locales/uz_Cyrl_UZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Cyrl_UZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/uz_Latn.txt b/intl/icu/source/data/locales/uz_Latn.txt
index 64e0e6b8e..8d2a5497c 100644
--- a/intl/icu/source/data/locales/uz_Latn.txt
+++ b/intl/icu/source/data/locales/uz_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/uz_Latn_UZ.txt b/intl/icu/source/data/locales/uz_Latn_UZ.txt
index ab597e470..125d69267 100644
--- a/intl/icu/source/data/locales/uz_Latn_UZ.txt
+++ b/intl/icu/source/data/locales/uz_Latn_UZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Latn_UZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/uz_UZ.txt b/intl/icu/source/data/locales/uz_UZ.txt
index ffac5329b..24a145bfb 100644
--- a/intl/icu/source/data/locales/uz_UZ.txt
+++ b/intl/icu/source/data/locales/uz_UZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_UZ{
"%%ALIAS"{"uz_Latn_UZ"}
diff --git a/intl/icu/source/data/locales/vai.txt b/intl/icu/source/data/locales/vai.txt
index a247accb5..25e97770e 100644
--- a/intl/icu/source/data/locales/vai.txt
+++ b/intl/icu/source/data/locales/vai.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai{
AuxExemplarCharacters{"[ꘓ ꘔ ꘕ ꘖ ꘗ ꘘ ꘙ ꘚ ꘛ ꘜ ꘝ ꘞ ꘟ]"}
diff --git a/intl/icu/source/data/locales/vai_LR.txt b/intl/icu/source/data/locales/vai_LR.txt
index 27d42387f..7d7bd4f9d 100644
--- a/intl/icu/source/data/locales/vai_LR.txt
+++ b/intl/icu/source/data/locales/vai_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_LR{
"%%ALIAS"{"vai_Vaii_LR"}
diff --git a/intl/icu/source/data/locales/vai_Latn.txt b/intl/icu/source/data/locales/vai_Latn.txt
index 1f344d0d7..1800e8576 100644
--- a/intl/icu/source/data/locales/vai_Latn.txt
+++ b/intl/icu/source/data/locales/vai_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_Latn{
%%Parent{"root"}
diff --git a/intl/icu/source/data/locales/vai_Latn_LR.txt b/intl/icu/source/data/locales/vai_Latn_LR.txt
index 41c5285f1..ec6638136 100644
--- a/intl/icu/source/data/locales/vai_Latn_LR.txt
+++ b/intl/icu/source/data/locales/vai_Latn_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_Latn_LR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/vai_Vaii.txt b/intl/icu/source/data/locales/vai_Vaii.txt
index 90f9ee927..0dcc58a4f 100644
--- a/intl/icu/source/data/locales/vai_Vaii.txt
+++ b/intl/icu/source/data/locales/vai_Vaii.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_Vaii{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/vai_Vaii_LR.txt b/intl/icu/source/data/locales/vai_Vaii_LR.txt
index 4e5f2cfbe..3f63218c8 100644
--- a/intl/icu/source/data/locales/vai_Vaii_LR.txt
+++ b/intl/icu/source/data/locales/vai_Vaii_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_Vaii_LR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/vi.txt b/intl/icu/source/data/locales/vi.txt
index 0f7314469..a3d3adef4 100644
--- a/intl/icu/source/data/locales/vi.txt
+++ b/intl/icu/source/data/locales/vi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vi{
AuxExemplarCharacters{"[]"}
diff --git a/intl/icu/source/data/locales/vi_VN.txt b/intl/icu/source/data/locales/vi_VN.txt
index 7a5644920..3ca6be51b 100644
--- a/intl/icu/source/data/locales/vi_VN.txt
+++ b/intl/icu/source/data/locales/vi_VN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vi_VN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/vun.txt b/intl/icu/source/data/locales/vun.txt
index d67a7db87..a0b614ccb 100644
--- a/intl/icu/source/data/locales/vun.txt
+++ b/intl/icu/source/data/locales/vun.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vun{
AuxExemplarCharacters{"[q x]"}
diff --git a/intl/icu/source/data/locales/vun_TZ.txt b/intl/icu/source/data/locales/vun_TZ.txt
index 6b88b32fd..44ae2689f 100644
--- a/intl/icu/source/data/locales/vun_TZ.txt
+++ b/intl/icu/source/data/locales/vun_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vun_TZ{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/wae.txt b/intl/icu/source/data/locales/wae.txt
index a0d4d23a7..268e9d8fe 100644
--- a/intl/icu/source/data/locales/wae.txt
+++ b/intl/icu/source/data/locales/wae.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
wae{
AuxExemplarCharacters{"[à ă â å ā æ ç è ĕ ê ë ē ì ĭ î ï ī ñ ò ŏ ô ø ō œ ß ù ŭ û ū ÿ]"}
diff --git a/intl/icu/source/data/locales/wae_CH.txt b/intl/icu/source/data/locales/wae_CH.txt
index 0c5e093fd..e847edb26 100644
--- a/intl/icu/source/data/locales/wae_CH.txt
+++ b/intl/icu/source/data/locales/wae_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
wae_CH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/xog.txt b/intl/icu/source/data/locales/xog.txt
index 3bf7a3152..34451b88b 100644
--- a/intl/icu/source/data/locales/xog.txt
+++ b/intl/icu/source/data/locales/xog.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
xog{
ExemplarCharacters{"[a b c d e f g h i j k l m n o p q r s t u v w x y z]"}
diff --git a/intl/icu/source/data/locales/xog_UG.txt b/intl/icu/source/data/locales/xog_UG.txt
index 71b61d56f..2d52e836c 100644
--- a/intl/icu/source/data/locales/xog_UG.txt
+++ b/intl/icu/source/data/locales/xog_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
xog_UG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/yav.txt b/intl/icu/source/data/locales/yav.txt
index d8207c897..0a42d56ef 100644
--- a/intl/icu/source/data/locales/yav.txt
+++ b/intl/icu/source/data/locales/yav.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yav{
AuxExemplarCharacters{"[g j q r x z]"}
diff --git a/intl/icu/source/data/locales/yav_CM.txt b/intl/icu/source/data/locales/yav_CM.txt
index 33e631628..481b63623 100644
--- a/intl/icu/source/data/locales/yav_CM.txt
+++ b/intl/icu/source/data/locales/yav_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yav_CM{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/yi.txt b/intl/icu/source/data/locales/yi.txt
index 85feed557..60a2a9b77 100644
--- a/intl/icu/source/data/locales/yi.txt
+++ b/intl/icu/source/data/locales/yi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yi{
AuxExemplarCharacters{"[\u200E\u200F]"}
diff --git a/intl/icu/source/data/locales/yi_001.txt b/intl/icu/source/data/locales/yi_001.txt
index 60e0dbeaf..d461611d2 100644
--- a/intl/icu/source/data/locales/yi_001.txt
+++ b/intl/icu/source/data/locales/yi_001.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yi_001{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/yo.txt b/intl/icu/source/data/locales/yo.txt
index c4e47c382..a66009588 100644
--- a/intl/icu/source/data/locales/yo.txt
+++ b/intl/icu/source/data/locales/yo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yo{
AuxExemplarCharacters{"[c q v x z]"}
diff --git a/intl/icu/source/data/locales/yo_BJ.txt b/intl/icu/source/data/locales/yo_BJ.txt
index 4d05f1d15..2770073b5 100644
--- a/intl/icu/source/data/locales/yo_BJ.txt
+++ b/intl/icu/source/data/locales/yo_BJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yo_BJ{
ExemplarCharacters{
diff --git a/intl/icu/source/data/locales/yo_NG.txt b/intl/icu/source/data/locales/yo_NG.txt
index 9bc854fbd..a9f5c54b9 100644
--- a/intl/icu/source/data/locales/yo_NG.txt
+++ b/intl/icu/source/data/locales/yo_NG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yo_NG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/yue.txt b/intl/icu/source/data/locales/yue.txt
index 56d6a72a3..db0858842 100644
--- a/intl/icu/source/data/locales/yue.txt
+++ b/intl/icu/source/data/locales/yue.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yue{
AuxExemplarCharacters{
@@ -2371,6 +2371,7 @@ yue{
"大正",
"昭和",
"平成",
+ "令和",
}
}
}
diff --git a/intl/icu/source/data/locales/yue_HK.txt b/intl/icu/source/data/locales/yue_HK.txt
index b41429581..74b773ab0 100644
--- a/intl/icu/source/data/locales/yue_HK.txt
+++ b/intl/icu/source/data/locales/yue_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yue_HK{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/zgh.txt b/intl/icu/source/data/locales/zgh.txt
index 72a25284b..8172fa085 100644
--- a/intl/icu/source/data/locales/zgh.txt
+++ b/intl/icu/source/data/locales/zgh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zgh{
ExemplarCharacters{"[ⴰ ⴱ ⴳ {ⴳⵯ} ⴷ ⴹ ⴻ ⴼ ⴽ {ⴽⵯ} ⵀ ⵃ ⵄ ⵅ ⵇ ⵉ ⵊ ⵍ ⵎ ⵏ ⵓ ⵔ ⵕ ⵖ ⵙ ⵚ ⵛ ⵜ ⵟ ⵡ ⵢ ⵣ ⵥ]"}
diff --git a/intl/icu/source/data/locales/zgh_MA.txt b/intl/icu/source/data/locales/zgh_MA.txt
index bf8fc92bf..d41194979 100644
--- a/intl/icu/source/data/locales/zgh_MA.txt
+++ b/intl/icu/source/data/locales/zgh_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zgh_MA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/zh.txt b/intl/icu/source/data/locales/zh.txt
index ee48ec188..7aef27917 100644
--- a/intl/icu/source/data/locales/zh.txt
+++ b/intl/icu/source/data/locales/zh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh{
AuxExemplarCharacters{"[仂 侣 傈 傣 僳 卑 卞 厘 吕 坝 堤 奎 屿 巽 撤 楔 楠 滕 瑚 甫 盲 碑 禄 粟 脚 艮 谬 钯 铂 锑 镑 魁]"}
@@ -2167,6 +2167,7 @@ zh{
"大正",
"昭和",
"平成",
+ "令和",
}
narrow{
"大化(645–650)",
@@ -2405,6 +2406,7 @@ zh{
"T",
"S",
"H",
+ "R",
}
}
}
diff --git a/intl/icu/source/data/locales/zh_CN.txt b/intl/icu/source/data/locales/zh_CN.txt
index c9151613a..46ee1b6c9 100644
--- a/intl/icu/source/data/locales/zh_CN.txt
+++ b/intl/icu/source/data/locales/zh_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_CN{
"%%ALIAS"{"zh_Hans_CN"}
diff --git a/intl/icu/source/data/locales/zh_HK.txt b/intl/icu/source/data/locales/zh_HK.txt
index fe72a0ea4..5e36e52e0 100644
--- a/intl/icu/source/data/locales/zh_HK.txt
+++ b/intl/icu/source/data/locales/zh_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_HK{
"%%ALIAS"{"zh_Hant_HK"}
diff --git a/intl/icu/source/data/locales/zh_Hans.txt b/intl/icu/source/data/locales/zh_Hans.txt
index 111a2e0e0..3b68a48d9 100644
--- a/intl/icu/source/data/locales/zh_Hans.txt
+++ b/intl/icu/source/data/locales/zh_Hans.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/zh_Hans_CN.txt b/intl/icu/source/data/locales/zh_Hans_CN.txt
index c7a96ec3e..8920d4a9f 100644
--- a/intl/icu/source/data/locales/zh_Hans_CN.txt
+++ b/intl/icu/source/data/locales/zh_Hans_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans_CN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/zh_Hans_HK.txt b/intl/icu/source/data/locales/zh_Hans_HK.txt
index 75357624a..bccdd7f82 100644
--- a/intl/icu/source/data/locales/zh_Hans_HK.txt
+++ b/intl/icu/source/data/locales/zh_Hans_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans_HK{
NumberElements{
diff --git a/intl/icu/source/data/locales/zh_Hans_MO.txt b/intl/icu/source/data/locales/zh_Hans_MO.txt
index 107d68b6b..83be3e9b6 100644
--- a/intl/icu/source/data/locales/zh_Hans_MO.txt
+++ b/intl/icu/source/data/locales/zh_Hans_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans_MO{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/zh_Hans_SG.txt b/intl/icu/source/data/locales/zh_Hans_SG.txt
index 442bc7d6e..6d000f1a3 100644
--- a/intl/icu/source/data/locales/zh_Hans_SG.txt
+++ b/intl/icu/source/data/locales/zh_Hans_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans_SG{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/locales/zh_Hant.txt b/intl/icu/source/data/locales/zh_Hant.txt
index dc2400daa..77e31d267 100644
--- a/intl/icu/source/data/locales/zh_Hant.txt
+++ b/intl/icu/source/data/locales/zh_Hant.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant{
%%Parent{"root"}
@@ -2370,6 +2370,7 @@ zh_Hant{
"大正",
"昭和",
"平成",
+ "令和",
}
}
}
diff --git a/intl/icu/source/data/locales/zh_Hant_HK.txt b/intl/icu/source/data/locales/zh_Hant_HK.txt
index d804c089b..a4aa8b028 100644
--- a/intl/icu/source/data/locales/zh_Hant_HK.txt
+++ b/intl/icu/source/data/locales/zh_Hant_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant_HK{
Ellipsis{
diff --git a/intl/icu/source/data/locales/zh_Hant_MO.txt b/intl/icu/source/data/locales/zh_Hant_MO.txt
index 1814082fe..794665815 100644
--- a/intl/icu/source/data/locales/zh_Hant_MO.txt
+++ b/intl/icu/source/data/locales/zh_Hant_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant_MO{
%%Parent{"zh_Hant_HK"}
diff --git a/intl/icu/source/data/locales/zh_Hant_TW.txt b/intl/icu/source/data/locales/zh_Hant_TW.txt
index 0d57f507b..322aebd36 100644
--- a/intl/icu/source/data/locales/zh_Hant_TW.txt
+++ b/intl/icu/source/data/locales/zh_Hant_TW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant_TW{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/locales/zh_MO.txt b/intl/icu/source/data/locales/zh_MO.txt
index 6565bf7c3..71455b9cd 100644
--- a/intl/icu/source/data/locales/zh_MO.txt
+++ b/intl/icu/source/data/locales/zh_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_MO{
"%%ALIAS"{"zh_Hant_MO"}
diff --git a/intl/icu/source/data/locales/zh_SG.txt b/intl/icu/source/data/locales/zh_SG.txt
index bf277736b..141f3dc58 100644
--- a/intl/icu/source/data/locales/zh_SG.txt
+++ b/intl/icu/source/data/locales/zh_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_SG{
"%%ALIAS"{"zh_Hans_SG"}
diff --git a/intl/icu/source/data/locales/zh_TW.txt b/intl/icu/source/data/locales/zh_TW.txt
index 9372c5067..ae82eca78 100644
--- a/intl/icu/source/data/locales/zh_TW.txt
+++ b/intl/icu/source/data/locales/zh_TW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_TW{
"%%ALIAS"{"zh_Hant_TW"}
diff --git a/intl/icu/source/data/locales/zu.txt b/intl/icu/source/data/locales/zu.txt
index 97d218ede..8f541456b 100644
--- a/intl/icu/source/data/locales/zu.txt
+++ b/intl/icu/source/data/locales/zu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zu{
AuxExemplarCharacters{
diff --git a/intl/icu/source/data/locales/zu_ZA.txt b/intl/icu/source/data/locales/zu_ZA.txt
index f66c47405..b69e1cd00 100644
--- a/intl/icu/source/data/locales/zu_ZA.txt
+++ b/intl/icu/source/data/locales/zu_ZA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zu_ZA{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/makedata.vcxproj b/intl/icu/source/data/makedata.vcxproj
index b5eecb962..663d768c4 100644
--- a/intl/icu/source/data/makedata.vcxproj
+++ b/intl/icu/source/data/makedata.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/data/makedata.vcxproj.filters b/intl/icu/source/data/makedata.vcxproj.filters
index d37a4b286..afceefbce 100644
--- a/intl/icu/source/data/makedata.vcxproj.filters
+++ b/intl/icu/source/data/makedata.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Resource Files">
diff --git a/intl/icu/source/data/misc/currencyNumericCodes.txt b/intl/icu/source/data/misc/currencyNumericCodes.txt
index bb20ba022..8c91fc797 100644
--- a/intl/icu/source/data/misc/currencyNumericCodes.txt
+++ b/intl/icu/source/data/misc/currencyNumericCodes.txt
@@ -1,4 +1,4 @@
-//---------------------------------------------------------
+//---------------------------------------------------------
// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//---------------------------------------------------------
diff --git a/intl/icu/source/data/misc/dayPeriods.txt b/intl/icu/source/data/misc/dayPeriods.txt
index 8438ee450..ddffc8197 100644
--- a/intl/icu/source/data/misc/dayPeriods.txt
+++ b/intl/icu/source/data/misc/dayPeriods.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dayPeriods:table(nofallback){
locales{
diff --git a/intl/icu/source/data/misc/genderList.txt b/intl/icu/source/data/misc/genderList.txt
index e88421b0e..8853d257c 100644
--- a/intl/icu/source/data/misc/genderList.txt
+++ b/intl/icu/source/data/misc/genderList.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
genderList:table(nofallback){
genderList{
diff --git a/intl/icu/source/data/misc/icuver.txt b/intl/icu/source/data/misc/icuver.txt
index 129b43924..f86cbfc08 100644
--- a/intl/icu/source/data/misc/icuver.txt
+++ b/intl/icu/source/data/misc/icuver.txt
@@ -8,6 +8,6 @@
// ***************************************************************************
icuver:table(nofallback){
- DataVersion { "58.2.0.0" }
- ICUVersion { "58.2.0.0" }
+ DataVersion { "58.3.0.0" }
+ ICUVersion { "58.3.0.0" }
}
diff --git a/intl/icu/source/data/misc/keyTypeData.txt b/intl/icu/source/data/misc/keyTypeData.txt
index 4fc4ba3e7..331d11728 100644
--- a/intl/icu/source/data/misc/keyTypeData.txt
+++ b/intl/icu/source/data/misc/keyTypeData.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
keyTypeData:table(nofallback){
bcpTypeAlias{
diff --git a/intl/icu/source/data/misc/likelySubtags.txt b/intl/icu/source/data/misc/likelySubtags.txt
index 396ab5393..dd419be81 100644
--- a/intl/icu/source/data/misc/likelySubtags.txt
+++ b/intl/icu/source/data/misc/likelySubtags.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
likelySubtags:table(nofallback){
aa{"aa_Latn_ET"}
diff --git a/intl/icu/source/data/misc/metaZones.txt b/intl/icu/source/data/misc/metaZones.txt
index e63ae3cef..84a9c598b 100644
--- a/intl/icu/source/data/misc/metaZones.txt
+++ b/intl/icu/source/data/misc/metaZones.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
metaZones:table(nofallback){
mapTimezones{
@@ -131,11 +131,11 @@ metaZones:table(nofallback){
001{"America/Halifax"}
AG{"America/Antigua"}
AI{"America/Anguilla"}
- AN{"America/Curacao"}
AW{"America/Aruba"}
BB{"America/Barbados"}
BM{"Atlantic/Bermuda"}
BQ{"America/Kralendijk"}
+ CW{"America/Curacao"}
DM{"America/Dominica"}
GD{"America/Grenada"}
GL{"America/Thule"}
@@ -212,7 +212,6 @@ metaZones:table(nofallback){
}
Chile{
001{"America/Santiago"}
- AQ{"Antarctica/Palmer"}
}
China{
001{"Asia/Shanghai"}
@@ -345,7 +344,6 @@ metaZones:table(nofallback){
SH{"Atlantic/St_Helena"}
SL{"Africa/Freetown"}
SN{"Africa/Dakar"}
- ST{"Africa/Sao_Tome"}
TG{"Africa/Lome"}
}
Galapagos{
@@ -815,7 +813,7 @@ metaZones:table(nofallback){
{
"Europe_Western",
"1985-12-31 23:00",
- "9999-12-31 23:59",
+ "2018-10-28 02:00",
}
}
"Africa:Ceuta"{
@@ -864,7 +862,7 @@ metaZones:table(nofallback){
{
"Europe_Western",
"1976-04-14 01:00",
- "9999-12-31 23:59",
+ "2018-10-28 02:00",
}
}
"Africa:Freetown"{
@@ -913,6 +911,11 @@ metaZones:table(nofallback){
{
"Africa_Eastern",
"2000-01-15 10:00",
+ "2017-10-31 21:00",
+ }
+ {
+ "Africa_Central",
+ "2017-10-31 21:00",
"9999-12-31 23:59",
}
}
@@ -1026,6 +1029,18 @@ metaZones:table(nofallback){
"Africa:Sao_Tome"{
{
"GMT",
+ "1970-01-01 00:00",
+ "2018-01-01 01:00",
+ }
+ {
+ "Africa_Western",
+ "2018-01-01 01:00",
+ "2019-01-01 01:00",
+ }
+ {
+ "GMT",
+ "2019-01-01 01:00",
+ "9999-12-31 23:59",
}
}
"Africa:Tripoli"{
@@ -1079,11 +1094,16 @@ metaZones:table(nofallback){
{
"Africa_Central",
"1990-03-20 22:00",
- "1994-04-02 22:00",
+ "1994-03-20 22:00",
}
{
"Africa_Western",
- "1994-04-02 22:00",
+ "1994-03-20 22:00",
+ "2017-10-23 22:00",
+ }
+ {
+ "Africa_Central",
+ "2017-10-23 22:00",
"9999-12-31 23:59",
}
}
@@ -1638,6 +1658,11 @@ metaZones:table(nofallback){
{
"Atlantic",
"2015-11-01 06:00",
+ "2018-03-11 07:00",
+ }
+ {
+ "America_Eastern",
+ "2018-03-11 07:00",
"9999-12-31 23:59",
}
}
@@ -2056,6 +2081,16 @@ metaZones:table(nofallback){
{
"Alaska",
"2015-11-01 10:00",
+ "2018-11-04 10:00",
+ }
+ {
+ "America_Pacific",
+ "2018-11-04 10:00",
+ "2019-01-20 10:00",
+ }
+ {
+ "Alaska",
+ "2019-01-20 10:00",
"9999-12-31 23:59",
}
}
@@ -2245,6 +2280,13 @@ metaZones:table(nofallback){
"Atlantic",
}
}
+ "America:Punta_Arenas"{
+ {
+ "Chile",
+ "1970-01-01 00:00",
+ "2016-12-03 23:00",
+ }
+ }
"America:Rainy_River"{
{
"America_Central",
@@ -2532,6 +2574,11 @@ metaZones:table(nofallback){
{
"Casey",
"2016-10-21 16:00",
+ "2018-03-10 17:00",
+ }
+ {
+ "Australia_Western",
+ "2018-03-10 17:00",
"9999-12-31 23:59",
}
}
@@ -2576,7 +2623,7 @@ metaZones:table(nofallback){
{
"Chile",
"1982-05-01 03:00",
- "9999-12-31 23:59",
+ "2016-12-03 23:00",
}
}
"Antarctica:Rothera"{
@@ -3100,6 +3147,11 @@ metaZones:table(nofallback){
{
"Pyongyang",
"2015-08-14 15:00",
+ "2018-05-04 15:00",
+ }
+ {
+ "Korea",
+ "2018-05-04 15:00",
"9999-12-31 23:59",
}
}
@@ -3115,6 +3167,13 @@ metaZones:table(nofallback){
"9999-12-31 23:59",
}
}
+ "Asia:Qostanay"{
+ {
+ "Kazakhstan_Eastern",
+ "2004-10-30 21:00",
+ "9999-12-31 23:59",
+ }
+ }
"Asia:Qyzylorda"{
{
"Kizilorda",
@@ -3129,6 +3188,11 @@ metaZones:table(nofallback){
{
"Kazakhstan_Eastern",
"2004-10-30 21:00",
+ "2018-12-20 18:00",
+ }
+ {
+ "Kazakhstan_Western",
+ "2018-12-20 18:00",
"9999-12-31 23:59",
}
}
@@ -3454,6 +3518,11 @@ metaZones:table(nofallback){
"America_Eastern",
}
}
+ "Etc:GMT"{
+ {
+ "GMT",
+ }
+ }
"Europe:Amsterdam"{
{
"Europe_Central",
@@ -3950,6 +4019,11 @@ metaZones:table(nofallback){
{
"Moscow",
"1992-03-28 22:00",
+ "2018-10-27 23:00",
+ }
+ {
+ "Volgograd",
+ "2018-10-27 23:00",
"9999-12-31 23:59",
}
}
@@ -4169,11 +4243,11 @@ metaZones:table(nofallback){
{
"Kwajalein",
"1970-01-01 00:00",
- "1993-08-20 12:00",
+ "1993-08-21 12:00",
}
{
"Marshall_Islands",
- "1993-08-20 12:00",
+ "1993-08-21 12:00",
"9999-12-31 23:59",
}
}
diff --git a/intl/icu/source/data/misc/metadata.txt b/intl/icu/source/data/misc/metadata.txt
index 6a05d5594..a1c6f5b55 100644
--- a/intl/icu/source/data/misc/metadata.txt
+++ b/intl/icu/source/data/misc/metadata.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
metadata:table(nofallback){
alias{
diff --git a/intl/icu/source/data/misc/numberingSystems.txt b/intl/icu/source/data/misc/numberingSystems.txt
index 7ef230a77..c1f30e733 100644
--- a/intl/icu/source/data/misc/numberingSystems.txt
+++ b/intl/icu/source/data/misc/numberingSystems.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
numberingSystems:table(nofallback){
numberingSystems{
diff --git a/intl/icu/source/data/misc/plurals.txt b/intl/icu/source/data/misc/plurals.txt
index 1d80c06e7..3102820ea 100644
--- a/intl/icu/source/data/misc/plurals.txt
+++ b/intl/icu/source/data/misc/plurals.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
plurals:table(nofallback){
locales{
diff --git a/intl/icu/source/data/misc/supplementalData.txt b/intl/icu/source/data/misc/supplementalData.txt
index c5f90353f..62c72aec1 100644
--- a/intl/icu/source/data/misc/supplementalData.txt
+++ b/intl/icu/source/data/misc/supplementalData.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
supplementalData:table(nofallback){
calendarData{
diff --git a/intl/icu/source/data/misc/timezoneTypes.txt b/intl/icu/source/data/misc/timezoneTypes.txt
index 07a4ac4b5..5e9554b4c 100644
--- a/intl/icu/source/data/misc/timezoneTypes.txt
+++ b/intl/icu/source/data/misc/timezoneTypes.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
timezoneTypes:table(nofallback){
bcpTypeAlias{
@@ -80,10 +80,9 @@ timezoneTypes:table(nofallback){
"Etc:GMT-0"{"Etc/GMT"}
"Etc:GMT0"{"Etc/GMT"}
"Etc:Greenwich"{"Etc/GMT"}
- "Etc:UCT"{"Etc/GMT"}
- "Etc:UTC"{"Etc/GMT"}
- "Etc:Universal"{"Etc/GMT"}
- "Etc:Zulu"{"Etc/GMT"}
+ "Etc:UCT"{"Etc/UTC"}
+ "Etc:Universal"{"Etc/UTC"}
+ "Etc:Zulu"{"Etc/UTC"}
"Europe:Belfast"{"Europe/London"}
"Europe:Nicosia"{"Asia/Nicosia"}
"Europe:Tiraspol"{"Europe/Chisinau"}
@@ -138,11 +137,11 @@ timezoneTypes:table(nofallback){
ROK{"Asia/Seoul"}
Singapore{"Asia/Singapore"}
Turkey{"Europe/Istanbul"}
- UCT{"Etc/GMT"}
- UTC{"Etc/GMT"}
- Universal{"Etc/GMT"}
+ UCT{"Etc/UTC"}
+ UTC{"Etc/UTC"}
+ Universal{"Etc/UTC"}
W-SU{"Europe/Moscow"}
- Zulu{"Etc/GMT"}
+ Zulu{"Etc/UTC"}
}
}
typeMap{
@@ -316,6 +315,7 @@ timezoneTypes:table(nofallback){
"America:Port_of_Spain"{"ttpos"}
"America:Porto_Velho"{"brpvh"}
"America:Puerto_Rico"{"prsju"}
+ "America:Punta_Arenas"{"clpuq"}
"America:Rainy_River"{"caffs"}
"America:Rankin_Inlet"{"cayek"}
"America:Recife"{"brrec"}
@@ -416,6 +416,7 @@ timezoneTypes:table(nofallback){
"Asia:Pontianak"{"idpnk"}
"Asia:Pyongyang"{"kpfnj"}
"Asia:Qatar"{"qadoh"}
+ "Asia:Qostanay"{"kzksn"}
"Asia:Qyzylorda"{"kzkzo"}
"Asia:Rangoon"{"mmrgn"}
"Asia:Riyadh"{"saruh"}
@@ -463,7 +464,7 @@ timezoneTypes:table(nofallback){
"Australia:Melbourne"{"aumel"}
"Australia:Perth"{"auper"}
"Australia:Sydney"{"ausyd"}
- "Etc:GMT"{"utc"}
+ "Etc:GMT"{"gmt"}
"Etc:GMT+1"{"utcw01"}
"Etc:GMT+10"{"utcw10"}
"Etc:GMT+11"{"utcw11"}
@@ -490,6 +491,7 @@ timezoneTypes:table(nofallback){
"Etc:GMT-7"{"utce07"}
"Etc:GMT-8"{"utce08"}
"Etc:GMT-9"{"utce09"}
+ "Etc:UTC"{"utc"}
"Etc:Unknown"{"unk"}
"Europe:Amsterdam"{"nlams"}
"Europe:Andorra"{"adalv"}
diff --git a/intl/icu/source/data/misc/windowsZones.txt b/intl/icu/source/data/misc/windowsZones.txt
index 4606b168f..585dccc74 100644
--- a/intl/icu/source/data/misc/windowsZones.txt
+++ b/intl/icu/source/data/misc/windowsZones.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
windowsZones:table(nofallback){
mapTimezones{
@@ -17,8 +17,8 @@ windowsZones:table(nofallback){
"Alaskan Standard Time"{
001{"America/Anchorage"}
US{
- "America/Anchorage America/Juneau America/Metlakatla America/Nome Ame"
- "rica/Sitka America/Yakutat"
+ "America/Anchorage America/Juneau America/Nome America/Sitka America/"
+ "Yakutat"
}
}
"Aleutian Standard Time"{
@@ -58,7 +58,7 @@ windowsZones:table(nofallback){
}
"Astrakhan Standard Time"{
001{"Europe/Astrakhan"}
- RU{"Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk"}
+ RU{"Europe/Astrakhan Europe/Ulyanovsk"}
}
"Atlantic Standard Time"{
001{"America/Halifax"}
@@ -130,7 +130,7 @@ windowsZones:table(nofallback){
CN{"Asia/Urumqi"}
IO{"Indian/Chagos"}
KG{"Asia/Bishkek"}
- KZ{"Asia/Almaty Asia/Qyzylorda"}
+ KZ{"Asia/Almaty Asia/Qostanay"}
ZZ{"Etc/GMT-6"}
}
"Central Brazilian Standard Time"{
@@ -156,7 +156,6 @@ windowsZones:table(nofallback){
}
"Central Pacific Standard Time"{
001{"Pacific/Guadalcanal"}
- AQ{"Antarctica/Casey"}
AU{"Antarctica/Macquarie"}
FM{"Pacific/Ponape Pacific/Kosrae"}
NC{"Pacific/Noumea"}
@@ -212,7 +211,6 @@ windowsZones:table(nofallback){
KE{"Africa/Nairobi"}
KM{"Indian/Comoro"}
MG{"Indian/Antananarivo"}
- SD{"Africa/Khartoum"}
SO{"Africa/Mogadishu"}
SS{"Africa/Juba"}
TZ{"Africa/Dar_es_Salaam"}
@@ -289,7 +287,7 @@ windowsZones:table(nofallback){
}
"GTB Standard Time"{
001{"Europe/Bucharest"}
- CY{"Asia/Nicosia"}
+ CY{"Asia/Famagusta Asia/Nicosia"}
GR{"Europe/Athens"}
RO{"Europe/Bucharest"}
}
@@ -316,7 +314,6 @@ windowsZones:table(nofallback){
SH{"Atlantic/St_Helena"}
SL{"Africa/Freetown"}
SN{"Africa/Dakar"}
- ST{"Africa/Sao_Tome"}
TG{"Africa/Lome"}
}
"Haiti Standard Time"{
@@ -372,6 +369,11 @@ windowsZones:table(nofallback){
001{"Asia/Magadan"}
RU{"Asia/Magadan"}
}
+ "Magallanes Standard Time"{
+ 001{"America/Punta_Arenas"}
+ AQ{"Antarctica/Palmer"}
+ CL{"America/Punta_Arenas"}
+ }
"Marquesas Standard Time"{
001{"Pacific/Marquesas"}
PF{"Pacific/Marquesas"}
@@ -457,7 +459,6 @@ windowsZones:table(nofallback){
}
"Pacific SA Standard Time"{
001{"America/Santiago"}
- AQ{"Antarctica/Palmer"}
CL{"America/Santiago"}
}
"Pacific Standard Time (Mexico)"{
@@ -467,7 +468,7 @@ windowsZones:table(nofallback){
"Pacific Standard Time"{
001{"America/Los_Angeles"}
CA{"America/Vancouver America/Dawson America/Whitehorse"}
- US{"America/Los_Angeles"}
+ US{"America/Los_Angeles America/Metlakatla"}
ZZ{"PST8PDT"}
}
"Pakistan Standard Time"{
@@ -579,6 +580,14 @@ windowsZones:table(nofallback){
001{"Pacific/Apia"}
WS{"Pacific/Apia"}
}
+ "Sao Tome Standard Time"{
+ 001{"Africa/Sao_Tome"}
+ ST{"Africa/Sao_Tome"}
+ }
+ "Saratov Standard Time"{
+ 001{"Europe/Saratov"}
+ RU{"Europe/Saratov"}
+ }
"Singapore Standard Time"{
001{"Asia/Singapore"}
BN{"Asia/Brunei"}
@@ -607,6 +616,10 @@ windowsZones:table(nofallback){
001{"Asia/Colombo"}
LK{"Asia/Colombo"}
}
+ "Sudan Standard Time"{
+ 001{"Africa/Khartoum"}
+ SD{"Africa/Khartoum"}
+ }
"Syria Standard Time"{
001{"Asia/Damascus"}
SY{"Asia/Damascus"}
@@ -637,10 +650,7 @@ windowsZones:table(nofallback){
}
"Tonga Standard Time"{
001{"Pacific/Tongatapu"}
- KI{"Pacific/Enderbury"}
- TK{"Pacific/Fakaofo"}
TO{"Pacific/Tongatapu"}
- ZZ{"Etc/GMT-13"}
}
"Transbaikal Standard Time"{
001{"Asia/Chita"}
@@ -668,7 +678,7 @@ windowsZones:table(nofallback){
"UTC"{
001{"Etc/GMT"}
GL{"America/Danmarkshavn"}
- ZZ{"Etc/GMT"}
+ ZZ{"Etc/GMT Etc/UTC"}
}
"UTC+12"{
001{"Etc/GMT-12"}
@@ -680,6 +690,12 @@ windowsZones:table(nofallback){
WF{"Pacific/Wallis"}
ZZ{"Etc/GMT-12"}
}
+ "UTC+13"{
+ 001{"Etc/GMT-13"}
+ KI{"Pacific/Enderbury"}
+ TK{"Pacific/Fakaofo"}
+ ZZ{"Etc/GMT-13"}
+ }
"UTC-02"{
001{"Etc/GMT+2"}
BR{"America/Noronha"}
@@ -717,6 +733,7 @@ windowsZones:table(nofallback){
}
"W. Australia Standard Time"{
001{"Australia/Perth"}
+ AQ{"Antarctica/Casey"}
AU{"Australia/Perth"}
}
"W. Central Africa Standard Time"{
@@ -762,7 +779,7 @@ windowsZones:table(nofallback){
"West Asia Standard Time"{
001{"Asia/Tashkent"}
AQ{"Antarctica/Mawson"}
- KZ{"Asia/Oral Asia/Aqtau Asia/Aqtobe Asia/Atyrau"}
+ KZ{"Asia/Oral Asia/Aqtau Asia/Aqtobe Asia/Atyrau Asia/Qyzylorda"}
MV{"Indian/Maldives"}
TF{"Indian/Kerguelen"}
TJ{"Asia/Dushanbe"}
diff --git a/intl/icu/source/data/misc/zoneinfo64.txt b/intl/icu/source/data/misc/zoneinfo64.txt
index ed5bc311a..e64943419 100644
--- a/intl/icu/source/data/misc/zoneinfo64.txt
+++ b/intl/icu/source/data/misc/zoneinfo64.txt
@@ -3,20 +3,20 @@
// License & terms of use: http://www.unicode.org/copyright.html#License
//---------------------------------------------------------
// Build tool: tz2icu
-// Build date: Tue Nov 29 01:50:23 2016
+// Build date: Tue Mar 26 16:57:59 2019
// tz database: ftp://ftp.iana.org/tz/
-// tz version: 2016j
-// ICU version: 58.1
+// tz version: 2019a
+// ICU version: 64.1
//---------------------------------------------------------
// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<
// >> !!! >>> DO NOT EDIT <<< !!! <<
//---------------------------------------------------------
zoneinfo64:table(nofallback) {
- TZVersion { "2016j" }
+ TZVersion { "2019a" }
Zones:array {
- /* ACT */ :int { 353 } //Z#0
- /* AET */ :int { 365 } //Z#1
+ /* ACT */ :int { 355 } //Z#0
+ /* AET */ :int { 367 } //Z#1
/* AGT */ :int { 64 } //Z#2
/* ART */ :int { 18 } //Z#3
/* AST */ :int { 60 } //Z#4
@@ -24,7 +24,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1830383032 }
typeOffsets:intvector { -968, 0, 0, 0 }
typeMap:bin { "01" }
- links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 54, 55, 345 }
+ links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 55, 347 }
} //Z#5
/* Africa/Accra */ :table {
trans:intvector { -1640995148, -1556841600, -1546388400, -1525305600, -1514852400, -1493769600, -1483316400, -1462233600, -1451780400, -1430611200, -1420158000, -1399075200, -1388622000, -1367539200, -1357086000, -1336003200, -1325550000, -1304380800, -1293927600, -1272844800, -1262391600, -1241308800, -1230855600, -1209772800, -1199319600, -1178150400, -1167697200, -1146614400, -1136161200, -1115078400, -1104625200, -1083542400, -1073089200, -1051920000, -1041466800, -1020384000, -1009930800, -988848000, -978394800, -957312000, -946858800, -925689600, -915236400, -894153600, -883700400, -862617600, -852164400 }
@@ -44,7 +44,7 @@ zoneinfo64:table(nofallback) {
/* Africa/Bangui */ :int { 36 } //Z#12
/* Africa/Banjul */ :int { 5 } //Z#13
/* Africa/Bissau */ :table {
- trans:intvector { -1830380260, 157770000 }
+ trans:intvector { -1830380400, 157770000 }
typeOffsets:intvector { -3740, 0, -3600, 0, 0, 0 }
typeMap:bin { "0102" }
} //Z#14
@@ -56,20 +56,16 @@ zoneinfo64:table(nofallback) {
trans:intvector { -929844000, -923108400, -906170400, -892868400, -875844000, -857790000, -844308000, -825822000, -812685600, -794199600, -779853600, -762663600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -71107200, -52707600, -39484800, -21171600, -7948800, 10364400, 23587200, 41900400, 55123200, 73522800, 86745600, 105058800, 118281600, 136594800, 149817600, 168130800, 181353600, 199753200, 212976000, 231289200, 244512000, 262825200, 276048000, 294361200, 307584000, 325983600, 339206400, 357519600, 370742400, 396399600, 402278400, 426812400, 433814400, 452214000, 465436800, 483750000, 496972800, 515286000, 528508800, 546822000, 560044800, 578444400, 591667200, 610412400, 623203200, 641516400, 654739200, 673052400, 686275200, 704674800, 717897600, 736210800, 749433600, 767746800, 780969600, 799020000, 812322000, 830469600, 843771600, 861919200, 875221200, 893368800, 906670800, 925423200, 938725200, 956872800, 970174800, 988322400, 1001624400, 1019772000, 1033074000, 1051221600, 1064523600, 1083276000, 1096578000, 1114725600, 1128027600, 1146175200, 1158872400, 1177624800, 1189112400, 1209074400, 1219957200, 1240524000, 1250802000, 1272578400, 1281474000, 1284069600, 1285880400, 1400191200, 1403816400, 1406844000, 1411678800 }
typeOffsets:intvector { 7509, 0, 7200, 0, 7200, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 3, 18, 399 }
+ links:intvector { 3, 18, 401 }
} //Z#18
/* Africa/Casablanca */ :table {
- trans:intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1540692000, 1553997600, 1557021600, 1560045600, 1572141600, 1585447200, 1587261600, 1590285600, 1603591200, 1616896800, 1618106400, 1621130400, 1635645600, 1651975200, 1667095200, 1682215200, 1698544800, 1713060000, 1729994400, 1743904800, 1761444000, 1774749600, 1792893600, 1806199200, 1824948000, 1837648800, 1856397600, 1869098400, 1887847200, 1901152800, 1919296800, 1932602400, 1950746400, 1964052000, 1982800800, 1995501600, 2014250400, 2026951200, 2045700000, 2058400800, 2077149600, 2090455200, 2107994400, 2121904800, 2138234400 }
- transPost32:intvector { 0, -2141612896, 0, -2122864096 }
+ trans:intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1557021600, 1560045600, 1587261600, 1590285600, 1618106400, 1621130400, 1648346400, 1651975200, 1679191200, 1682215200, 1710036000, 1713060000, 1740276000, 1743904800, 1771120800, 1774144800, 1801965600, 1804989600, 1832205600, 1835229600, 1863050400, 1866074400, 1893290400, 1896919200, 1924135200, 1927159200, 1954980000, 1958004000, 1985220000, 1988848800, 2016064800, 2019088800, 2046304800, 2049933600, 2077149600, 2080173600, 2107994400, 2111018400, 2138234400, 2141863200 }
typeOffsets:intvector { -1820, 0, 0, 0, 0, 3600, 3600, 0 }
- typeMap:bin { "0102010201020102010201020102010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- finalRule { "Morocco" }
- finalRaw:int { 0 }
- finalYear:int { 2039 }
+ typeMap:bin { "01020102010201020102010201020102010301020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
} //Z#19
/* Africa/Ceuta */ :table {
- transPre32:intvector { -1, 2117515772 }
- trans:intvector { -1630112400, -1616810400, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+ transPre32:intvector { -1, 2117514496 }
+ trans:intvector { -1630112400, -1616810400, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -1276, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 }
typeMap:bin { "0102010201020102010201020102010201020102010304030403040304030403040304030403040304030403" }
finalRule { "EU" }
@@ -82,13 +78,9 @@ zoneinfo64:table(nofallback) {
/* Africa/Djibouti */ :int { 48 } //Z#24
/* Africa/Douala */ :int { 36 } //Z#25
/* Africa/El_Aaiun */ :table {
- trans:intvector { -1136070432, 198291600, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1540692000, 1553997600, 1557021600, 1560045600, 1572141600, 1585447200, 1587261600, 1590285600, 1603591200, 1616896800, 1618106400, 1621130400, 1635645600, 1651975200, 1667095200, 1682215200, 1698544800, 1713060000, 1729994400, 1743904800, 1761444000, 1774749600, 1792893600, 1806199200, 1824948000, 1837648800, 1856397600, 1869098400, 1887847200, 1901152800, 1919296800, 1932602400, 1950746400, 1964052000, 1982800800, 1995501600, 2014250400, 2026951200, 2045700000, 2058400800, 2077149600, 2090455200, 2107994400, 2121904800, 2138234400 }
- transPost32:intvector { 0, -2141612896, 0, -2122864096 }
+ trans:intvector { -1136070432, 198291600, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1557021600, 1560045600, 1587261600, 1590285600, 1618106400, 1621130400, 1648346400, 1651975200, 1679191200, 1682215200, 1710036000, 1713060000, 1740276000, 1743904800, 1771120800, 1774144800, 1801965600, 1804989600, 1832205600, 1835229600, 1863050400, 1866074400, 1893290400, 1896919200, 1924135200, 1927159200, 1954980000, 1958004000, 1985220000, 1988848800, 2016064800, 2019088800, 2046304800, 2049933600, 2077149600, 2080173600, 2107994400, 2111018400, 2138234400, 2141863200 }
typeOffsets:intvector { -3168, 0, -3600, 0, 0, 0, 0, 3600 }
- typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- finalRule { "Morocco" }
- finalRaw:int { 0 }
- finalYear:int { 2039 }
+ typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203" }
} //Z#26
/* Africa/Freetown */ :int { 5 } //Z#27
/* Africa/Gaborone */ :int { 43 } //Z#28
@@ -100,13 +92,16 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "010203020302" }
links:intvector { 30, 44, 45 }
} //Z#30
- /* Africa/Juba */ :int { 33 } //Z#31
+ /* Africa/Juba */ :table {
+ trans:intvector { -1230775588, 10360800, 24786000, 41810400, 56322000, 73432800, 87944400, 104882400, 119480400, 136332000, 151016400, 167781600, 182552400, 199231200, 214174800, 230680800, 245710800, 262735200, 277246800, 294184800, 308782800, 325634400, 340405200, 357084000, 371941200, 388533600, 403477200, 419983200, 435013200, 452037600, 466635600, 483487200, 498171600, 947930400 }
+ typeOffsets:intvector { 7588, 0, 7200, 0, 7200, 3600, 10800, 0 }
+ typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020103" }
+ } //Z#31
/* Africa/Kampala */ :int { 48 } //Z#32
/* Africa/Khartoum */ :table {
- trans:intvector { -1230775808, 10360800, 24786000, 41810400, 56322000, 73432800, 87944400, 104882400, 119480400, 136332000, 151016400, 167781600, 182552400, 199231200, 214174800, 230680800, 245710800, 262735200, 277246800, 294184800, 308782800, 325634400, 340405200, 357084000, 371941200, 388533600, 403477200, 419983200, 435013200, 452037600, 466635600, 483487200, 498171600, 947930400 }
+ trans:intvector { -1230775808, 10360800, 24786000, 41810400, 56322000, 73432800, 87944400, 104882400, 119480400, 136332000, 151016400, 167781600, 182552400, 199231200, 214174800, 230680800, 245710800, 262735200, 277246800, 294184800, 308782800, 325634400, 340405200, 357084000, 371941200, 388533600, 403477200, 419983200, 435013200, 452037600, 466635600, 483487200, 498171600, 947930400, 1509483600 }
typeOffsets:intvector { 7808, 0, 7200, 0, 7200, 3600, 10800, 0 }
- typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020103" }
- links:intvector { 31, 33 }
+ typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010301" }
} //Z#33
/* Africa/Kigali */ :int { 43 } //Z#34
/* Africa/Kinshasa */ :int { 36 } //Z#35
@@ -126,13 +121,13 @@ zoneinfo64:table(nofallback) {
trans:intvector { -2109291020 }
typeOffsets:intvector { 7820, 0, 7200, 0 }
typeMap:bin { "01" }
- links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 376 }
+ links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 378 }
} //Z#43
/* Africa/Maseru */ :int { 30 } //Z#44
/* Africa/Mbabane */ :int { 30 } //Z#45
/* Africa/Mogadishu */ :int { 48 } //Z#46
/* Africa/Monrovia */ :table {
- trans:intvector { -1604359012, 73529070 }
+ trans:intvector { -1604359012, 63593070 }
typeOffsets:intvector { -2588, 0, -2670, 0, 0, 0 }
typeMap:bin { "0102" }
} //Z#47
@@ -140,7 +135,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1309746436, -1262314800, -946780200, -315629100 }
typeOffsets:intvector { 8836, 0, 9000, 0, 9900, 0, 10800, 0 }
typeMap:bin { "03010203" }
- links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 394, 513, 517, 522 }
+ links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 396, 515, 519, 524 }
} //Z#48
/* Africa/Ndjamena */ :table {
trans:intvector { -1830387612, 308703600, 321314400 }
@@ -151,13 +146,18 @@ zoneinfo64:table(nofallback) {
/* Africa/Nouakchott */ :int { 5 } //Z#51
/* Africa/Ouagadougou */ :int { 5 } //Z#52
/* Africa/Porto-Novo */ :int { 36 } //Z#53
- /* Africa/Sao_Tome */ :int { 5 } //Z#54
+ /* Africa/Sao_Tome */ :table {
+ transPre32:intvector { -1, 1581055280 }
+ trans:intvector { -1830384000, 1514768400, 1546304400 }
+ typeOffsets:intvector { 1616, 0, -2205, 0, 0, 0, 3600, 0 }
+ typeMap:bin { "01020302" }
+ } //Z#54
/* Africa/Timbuktu */ :int { 5 } //Z#55
/* Africa/Tripoli */ :table {
trans:intvector { -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000, 1352505600, 1364515200, 1382659200 }
typeOffsets:intvector { 3164, 0, 3600, 0, 3600, 3600, 7200, 0 }
typeMap:bin { "0102010201020103010201020102010201020102010201020103010203010203" }
- links:intvector { 56, 530 }
+ links:intvector { 56, 532 }
} //Z#56
/* Africa/Tunis */ :table {
transPre32:intvector { -1, 1497764852 }
@@ -167,32 +167,29 @@ zoneinfo64:table(nofallback) {
} //Z#57
/* Africa/Windhoek */ :table {
transPre32:intvector { -1, 1836796792 }
- trans:intvector { -2109288600, -860976000, -845254800, 765324000, 778640400, 796780800, 810090000 }
+ trans:intvector { -2109288600, -860976000, -845254800, 764200800, 778640400, 796780800, 810090000, 828835200, 841539600, 860284800, 873594000, 891734400, 905043600, 923184000, 936493200, 954633600, 967942800, 986083200, 999392400, 1018137600, 1030842000, 1049587200, 1062896400, 1081036800, 1094346000, 1112486400, 1125795600, 1143936000, 1157245200, 1175385600, 1188694800, 1207440000, 1220749200, 1238889600, 1252198800, 1270339200, 1283648400, 1301788800, 1315098000, 1333238400, 1346547600, 1365292800, 1377997200, 1396742400, 1410051600, 1428192000, 1441501200, 1459641600, 1472950800, 1491091200, 1504400400, 1508796000 }
typeOffsets:intvector { 4104, 0, 3600, 0, 3600, 3600, 5400, 0, 7200, 0, 7200, 3600 }
- typeMap:bin { "0304050401020102" }
- finalRule { "Namibia" }
- finalRaw:int { 3600 }
- finalYear:int { 1996 }
+ typeMap:bin { "0304050401020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010204" }
} //Z#58
/* America/Adak */ :table {
- transPre32:intvector { -1, 1069611295, -1, 2106022494 }
+ transPre32:intvector { -1, 1069743569, -1, 2106022494 }
trans:intvector { -880196400, -765374400, -21466800, -5745600, 9982800, 25704000, 41432400, 57758400, 73486800, 89208000, 104936400, 120657600, 126709200, 152107200, 162392400, 183556800, 199285200, 215611200, 230734800, 247060800, 262789200, 278510400, 294238800, 309960000, 325688400, 341409600, 357138000, 372859200, 388587600, 404913600, 420037200, 436363200, 452088000, 467809200, 483537600, 499258800, 514987200, 530708400, 544622400, 562158000, 576072000, 594212400, 607521600, 625662000, 638971200, 657111600, 671025600, 688561200, 702475200, 720010800, 733924800, 752065200, 765374400, 783514800, 796824000, 814964400, 828878400, 846414000, 860328000, 877863600, 891777600, 909313200, 923227200, 941367600, 954676800, 972817200, 986126400, 1004266800, 1018180800, 1035716400, 1049630400, 1067166000, 1081080000, 1099220400, 1112529600, 1130670000, 1143979200, 1162119600, 1173614400, 1194174000 }
- typeOffsets:intvector { 44001, 0, -42398, 0, -39600, 0, -39600, 3600, -36000, 0, -36000, 3600 }
+ typeOffsets:intvector { 44002, 0, -42398, 0, -39600, 0, -39600, 3600, -36000, 0, -36000, 3600 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020304050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
finalRule { "US" }
finalRaw:int { -36000 }
finalYear:int { 2008 }
- links:intvector { 59, 80, 614 }
+ links:intvector { 59, 80, 616 }
} //Z#59
/* America/Anchorage */ :table {
- transPre32:intvector { -1, 1069604872, -1, 2106016072 }
+ transPre32:intvector { -1, 1069743569, -1, 2106016072 }
trans:intvector { -880200000, -765378000, -21470400, -5749200, 9979200, 25700400, 41428800, 57754800, 73483200, 89204400, 104932800, 120654000, 126705600, 152103600, 162388800, 183553200, 199281600, 215607600, 230731200, 247057200, 262785600, 278506800, 294235200, 309956400, 325684800, 341406000, 357134400, 372855600, 388584000, 404910000, 420033600, 436359600, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 50424, 0, -36000, 0, -36000, 3600, -35976, 0, -32400, 0, -32400, 3600 }
typeMap:bin { "03010201020102010201020102010201020102010201020102010201020102010204050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
finalRule { "US" }
finalRaw:int { -32400 }
finalYear:int { 2008 }
- links:intvector { 4, 60, 613 }
+ links:intvector { 4, 60, 615 }
} //Z#60
/* America/Anguilla */ :int { 186 } //Z#61
/* America/Antigua */ :int { 186 } //Z#62
@@ -220,7 +217,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1567453392, -1233432000, -1222981200, -1205956800, -1194037200, -1172865600, -1162501200, -1141329600, -1130965200, -1109793600, -1099429200, -1078257600, -1067806800, -1046635200, -1036270800, -1015099200, -1004734800, -983563200, -973198800, -952027200, -941576400, -931032000, -900882000, -890337600, -833749200, -827265600, -752274000, -733780800, -197326800, -190843200, -184194000, -164491200, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 596948400, 605066400, 624423600, 636516000, 656478000, 667965600, 687931200, 699415200, 719377200, 731469600, 938919600, 952052400, 1198983600, 1205632800, 1224385200, 1237082400 }
typeOffsets:intvector { -15408, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020103040304030403040104030403020304030403" }
- links:intvector { 67, 101, 196 }
+ links:intvector { 67, 101, 197 }
} //Z#67
/* America/Argentina/Jujuy */ :table {
transPre32:intvector { -1, 1922870968 }
@@ -358,8 +355,8 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2008 }
} //Z#91
/* America/Campo_Grande */ :table {
- trans:intvector { -1767212492, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1066536000, 1076814000, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1224388800, 1234666800, 1255838400, 1266721200, 1287288000, 1298170800, 1318737600, 1330225200, 1350792000, 1361070000, 1382241600, 1392519600, 1413691200, 1424574000, 1445140800, 1456023600, 1476590400, 1487473200, 1508040000, 1518922800, 1540094400, 1550372400, 1571544000, 1581822000, 1602993600, 1613876400, 1634443200, 1645326000, 1665892800, 1677380400, 1697342400, 1708225200, 1729396800, 1739674800, 1760846400, 1771729200, 1792296000, 1803178800, 1823745600, 1834628400, 1855195200, 1866078000, 1887249600, 1897527600, 1918699200, 1928977200, 1950148800, 1960426800, 1981598400, 1992481200, 2013048000, 2024535600, 2044497600, 2055380400, 2076552000, 2086830000, 2108001600, 2118884400, 2139451200 }
- transPost32:intvector { 0, -2144633296, 0, -2124066496 }
+ trans:intvector { -1767212492, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1066536000, 1076814000, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1224388800, 1234666800, 1255838400, 1266721200, 1287288000, 1298170800, 1318737600, 1330225200, 1350792000, 1361070000, 1382241600, 1392519600, 1413691200, 1424574000, 1445140800, 1456023600, 1476590400, 1487473200, 1508040000, 1518922800, 1541304000, 1550372400, 1572753600, 1581822000, 1604203200, 1613876400, 1636257600, 1645326000, 1667707200, 1677380400, 1699156800, 1708225200, 1730606400, 1739674800, 1762056000, 1771729200, 1793505600, 1803178800, 1825560000, 1834628400, 1857009600, 1866078000, 1888459200, 1897527600, 1919908800, 1928977200, 1951358400, 1960426800, 1983412800, 1992481200, 2014862400, 2024535600, 2046312000, 2055380400, 2077761600, 2086830000, 2109211200, 2118884400, 2140660800 }
+ transPost32:intvector { 0, -2144633296, 0, -2122252096 }
typeOffsets:intvector { -13108, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
finalRule { "Brazil" }
@@ -392,7 +389,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 98, 379, 616 }
+ links:intvector { 98, 381, 618 }
} //Z#98
/* America/Chihuahua */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 }
@@ -416,8 +413,8 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "020102" }
} //Z#103
/* America/Cuiaba */ :table {
- trans:intvector { -1767212140, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1224388800, 1234666800, 1255838400, 1266721200, 1287288000, 1298170800, 1318737600, 1330225200, 1350792000, 1361070000, 1382241600, 1392519600, 1413691200, 1424574000, 1445140800, 1456023600, 1476590400, 1487473200, 1508040000, 1518922800, 1540094400, 1550372400, 1571544000, 1581822000, 1602993600, 1613876400, 1634443200, 1645326000, 1665892800, 1677380400, 1697342400, 1708225200, 1729396800, 1739674800, 1760846400, 1771729200, 1792296000, 1803178800, 1823745600, 1834628400, 1855195200, 1866078000, 1887249600, 1897527600, 1918699200, 1928977200, 1950148800, 1960426800, 1981598400, 1992481200, 2013048000, 2024535600, 2044497600, 2055380400, 2076552000, 2086830000, 2108001600, 2118884400, 2139451200 }
- transPost32:intvector { 0, -2144633296, 0, -2124066496 }
+ trans:intvector { -1767212140, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 592977600, 602046000, 624427200, 634705200, 656481600, 666759600, 687931200, 697604400, 719985600, 728449200, 750830400, 761713200, 782280000, 793162800, 813729600, 824007600, 844574400, 856062000, 876110400, 888721200, 908078400, 919566000, 938923200, 951620400, 970977600, 982465200, 1003032000, 1013914800, 1036296000, 1045364400, 1099368000, 1108868400, 1129435200, 1140318000, 1162699200, 1172372400, 1192334400, 1203217200, 1224388800, 1234666800, 1255838400, 1266721200, 1287288000, 1298170800, 1318737600, 1330225200, 1350792000, 1361070000, 1382241600, 1392519600, 1413691200, 1424574000, 1445140800, 1456023600, 1476590400, 1487473200, 1508040000, 1518922800, 1541304000, 1550372400, 1572753600, 1581822000, 1604203200, 1613876400, 1636257600, 1645326000, 1667707200, 1677380400, 1699156800, 1708225200, 1730606400, 1739674800, 1762056000, 1771729200, 1793505600, 1803178800, 1825560000, 1834628400, 1857009600, 1866078000, 1888459200, 1897527600, 1919908800, 1928977200, 1951358400, 1960426800, 1983412800, 1992481200, 2014862400, 2024535600, 2046312000, 2055380400, 2077761600, 2086830000, 2109211200, 2118884400, 2140660800 }
+ transPost32:intvector { 0, -2144633296, 0, -2122252096 }
typeOffsets:intvector { -13460, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
finalRule { "Brazil" }
@@ -458,16 +455,16 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- links:intvector { 109, 203, 542, 622 }
+ links:intvector { 109, 204, 544, 624 }
} //Z#109
/* America/Detroit */ :table {
- trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, -80499600, -68666400, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
+ trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
typeOffsets:intvector { -19931, 0, -21600, 0, -18000, 0, -18000, 3600 }
- typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
+ typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 110, 621 }
+ links:intvector { 110, 623 }
} //Z#110
/* America/Dominica */ :int { 186 } //Z#111
/* America/Edmonton */ :table {
@@ -477,7 +474,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- links:intvector { 112, 386 }
+ links:intvector { 112, 388 }
} //Z#112
/* America/Eirunepe */ :table {
trans:intvector { -1767208832, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 750834000, 761716800, 1214283600, 1384056000 }
@@ -489,7 +486,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { -21408, 0, -21600, 0, -21600, 3600 }
typeMap:bin { "0102010201" }
} //Z#114
- /* America/Ensenada */ :int { 215 } //Z#115
+ /* America/Ensenada */ :int { 216 } //Z#115
/* America/Fort_Nelson */ :table {
transPre32:intvector { -1, 1581086343 }
trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800, 1205056800, 1225616400, 1236506400, 1257066000, 1268560800, 1289120400, 1300010400, 1320570000, 1331460000, 1352019600, 1362909600, 1383469200, 1394359200, 1414918800, 1425808800 }
@@ -529,9 +526,12 @@ zoneinfo64:table(nofallback) {
} //Z#121
/* America/Grand_Turk */ :table {
transPre32:intvector { -1, 1770462768 }
- trans:intvector { -1827687169, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000, 1205046000, 1225605600, 1236495600, 1257055200, 1268550000, 1289109600, 1299999600, 1320559200, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600 }
- typeOffsets:intvector { -17072, 0, -18431, 0, -18000, 0, -18000, 3600, -14400, 0 }
- typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" }
+ trans:intvector { -1827687170, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000, 1205046000, 1225605600, 1236495600, 1257055200, 1268550000, 1289109600, 1299999600, 1320559200, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600, 1520751600, 1541311200 }
+ typeOffsets:intvector { -17072, 0, -18430, 0, -18000, 0, -18000, 3600, -14400, 0 }
+ typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203040302" }
+ finalRule { "US" }
+ finalRaw:int { -18000 }
+ finalYear:int { 2019 }
} //Z#122
/* America/Grenada */ :int { 186 } //Z#123
/* America/Guadeloupe */ :int { 186 } //Z#124
@@ -542,9 +542,9 @@ zoneinfo64:table(nofallback) {
} //Z#125
/* America/Guayaquil */ :table {
transPre32:intvector { -1, 1770464856 }
- trans:intvector { -1230749160 }
- typeOffsets:intvector { -19160, 0, -18840, 0, -18000, 0 }
- typeMap:bin { "0102" }
+ trans:intvector { -1230749160, 722926800, 728884800 }
+ typeOffsets:intvector { -19160, 0, -18840, 0, -18000, 0, -18000, 3600 }
+ typeMap:bin { "01020302" }
} //Z#126
/* America/Guyana */ :table {
trans:intvector { -1730578040, 176010300, 662698800 }
@@ -558,7 +558,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -14400 }
finalYear:int { 2008 }
- links:intvector { 128, 382 }
+ links:intvector { 128, 384 }
} //Z#128
/* America/Havana */ :table {
transPre32:intvector { -1, 1770465464 }
@@ -568,7 +568,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Cuba" }
finalRaw:int { -18000 }
finalYear:int { 2014 }
- links:intvector { 129, 393 }
+ links:intvector { 129, 395 }
} //Z#129
/* America/Hermosillo */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400 }
@@ -583,7 +583,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 117, 131, 139, 510, 617 }
+ links:intvector { 117, 131, 139, 512, 619 }
} //Z#131
/* America/Indiana/Knox */ :table {
transPre32:intvector { -1, 1577320096 }
@@ -593,7 +593,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 132, 147, 620 }
+ links:intvector { 132, 147, 622 }
} //Z#132
/* America/Indiana/Marengo */ :table {
transPre32:intvector { -1, 1577320096 }
@@ -667,14 +667,14 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2008 }
} //Z#141
/* America/Jamaica */ :table {
- trans:intvector { -1827687169, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 }
- typeOffsets:intvector { -18431, 0, -18000, 0, -18000, 3600 }
+ trans:intvector { -1827687170, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 }
+ typeOffsets:intvector { -18430, 0, -18000, 0, -18000, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- links:intvector { 142, 527 }
+ links:intvector { 142, 529 }
} //Z#142
/* America/Jujuy */ :int { 68 } //Z#143
/* America/Juneau */ :table {
- transPre32:intvector { -1, 1069601157, -1, 2106012357 }
+ transPre32:intvector { -1, 1069743569, -1, 2106012357 }
trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341402400, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 54139, 0, -32400, 0, -32400, 3600, -32261, 0, -28800, 0, -28800, 3600 }
typeMap:bin { "03040504050405040504050405040504050405040504050405040204050405040501020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
@@ -722,7 +722,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 151, 547, 623, 624 }
+ links:intvector { 151, 549, 625, 626 }
} //Z#151
/* America/Louisville */ :int { 145 } //Z#152
/* America/Lower_Princes */ :int { 105 } //Z#153
@@ -741,7 +741,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1767211196, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 750830400, 761713200 }
typeOffsets:intvector { -14404, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 156, 375 }
+ links:intvector { 156, 377 }
} //Z#156
/* America/Marigot */ :int { 186 } //Z#157
/* America/Martinique */ :table {
@@ -764,7 +764,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Mexico" }
finalRaw:int { -25200 }
finalYear:int { 2003 }
- links:intvector { 160, 536 }
+ links:intvector { 160, 538 }
} //Z#160
/* America/Mendoza */ :int { 70 } //Z#161
/* America/Menominee */ :table {
@@ -785,13 +785,13 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2003 }
} //Z#163
/* America/Metlakatla */ :table {
- transPre32:intvector { -1, 1069600474, -1, 2106011674 }
- trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 1446372000, 1457866800, 1478426400 }
+ transPre32:intvector { -1, 1069743569, -1, 2106011674 }
+ trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 1446372000, 1457866800, 1478426400, 1489316400, 1509876000, 1520766000, 1541325600, 1547978400, 1552215600, 1572775200 }
typeOffsets:intvector { 54822, 0, -32400, 0, -32400, 3600, -31578, 0, -28800, 0, -28800, 3600 }
- typeMap:bin { "03040504050405040504050405040504050405040504050405040504050405040504010201" }
+ typeMap:bin { "0304050405040504050405040504050405040504050405040504050405040504050401020102010204010201" }
finalRule { "US" }
finalRaw:int { -32400 }
- finalYear:int { 2017 }
+ finalYear:int { 2020 }
} //Z#164
/* America/Mexico_City */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -975261600, -963169200, -917114400, -907354800, -821901600, -810068400, -627501600, -612990000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200, 1018166400, 1035702000 }
@@ -800,7 +800,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Mexico" }
finalRaw:int { -21600 }
finalYear:int { 2003 }
- links:intvector { 165, 537 }
+ links:intvector { 165, 539 }
} //Z#165
/* America/Miquelon */ :table {
trans:intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 }
@@ -828,11 +828,11 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2003 }
} //Z#168
/* America/Montevideo */ :table {
- trans:intvector { -1567455316, -1459542600, -1443819600, -1428006600, -1412283600, -1396470600, -1380747600, -1141590600, -1128286800, -1110141000, -1096837200, -1078691400, -1065387600, -1046637000, -1033938000, -1015187400, -1002488400, -983737800, -971038800, -952288200, -938984400, -920838600, -907534800, -896819400, -883602000, -853619400, -845848800, -334789200, -319672800, -314226000, -309996000, -149720400, -134604000, -118270800, -100044000, -86821200, -68508000, -50446800, -34119000, -18910800, -2583000, 12625200, 28953000, 72932400, 82692000, 132116400, 156911400, 212983200, 250052400, 260244000, 307594800, 325994400, 566449200, 574308000, 597812400, 605671200, 625633200, 636516000, 656478000, 667965600, 688532400, 699415200, 719377200, 730864800, 1095562800, 1111896000, 1128834000, 1142136000, 1159678800, 1173585600, 1191733200, 1205035200, 1223182800, 1236484800, 1254632400, 1268539200, 1286082000, 1299988800, 1317531600, 1331438400, 1349586000, 1362888000, 1381035600, 1394337600, 1412485200, 1425787200 }
- typeOffsets:intvector { -13484, 0, -12600, 0, -12600, 1800, -10800, 0, -10800, 1800, -10800, 3600 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020105030503050305030503050304030403040305030405030503050305030503050305030503050305030503050305030503050305030503050305030503" }
+ trans:intvector { -1567455309, -1459627200, -1443819600, -1428006600, -1412283600, -1396470600, -1380747600, -1141590600, -1128286800, -1110141000, -1096837200, -1078691400, -1065387600, -1047241800, -1033938000, -1015187400, -1002488400, -983737800, -971038800, -954707400, -938984400, -920838600, -907534800, -896819400, -853621200, -845847000, -334789200, -319671000, -314226000, -309996000, -149720400, -134604000, -50446800, -34205400, 9860400, 14176800, 72846000, 80100000, 127278000, 132111000, 147234600, 156913200, 165376800, 219812400, 226461600, 250052400, 257911200, 282711600, 289360800, 294202800, 322020000, 566449200, 573012000, 597812400, 605066400, 625633200, 635911200, 656478000, 667965600, 688532400, 699415200, 719377200, 730864800, 1095562800, 1111896000, 1128834000, 1142136000, 1159678800, 1173585600, 1191733200, 1205035200, 1223182800, 1236484800, 1254632400, 1268539200, 1286082000, 1299988800, 1317531600, 1331438400, 1349586000, 1362888000, 1381035600, 1394337600, 1412485200, 1425787200 }
+ typeOffsets:intvector { -13491, 0, -14400, 0, -12600, 0, -12600, 1800, -10800, 0, -10800, 1800, -10800, 3600, -10800, 5400 }
+ typeMap:bin { "01030203020302030203020302030203020302030203020305040504060406040504060406040705040604060406040604060406040604060406040604060406040604060406040604060406040604060406040604" }
} //Z#169
- /* America/Montreal */ :int { 216 } //Z#170
+ /* America/Montreal */ :int { 217 } //Z#170
/* America/Montserrat */ :int { 186 } //Z#171
/* America/Nassau */ :table {
trans:intvector { -1825095030, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -850,7 +850,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 173, 618 }
+ links:intvector { 173, 620 }
} //Z#173
/* America/Nipigon */ :table {
transPre32:intvector { -1, 1928233280 }
@@ -862,9 +862,9 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2008 }
} //Z#174
/* America/Nome */ :table {
- transPre32:intvector { -1, 1069608595, -1, 2106019794 }
+ transPre32:intvector { -1, 1069743569, -1, 2106019794 }
trans:intvector { -880196400, -765374400, -21466800, -5745600, 9982800, 25704000, 41432400, 57758400, 73486800, 89208000, 104936400, 120657600, 126709200, 152107200, 162392400, 183556800, 199285200, 215611200, 230734800, 247060800, 262789200, 278510400, 294238800, 309960000, 325688400, 341409600, 357138000, 372859200, 388587600, 404913600, 420037200, 436363200, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
- typeOffsets:intvector { 46701, 0, -39698, 0, -39600, 0, -39600, 3600, -32400, 0, -32400, 3600 }
+ typeOffsets:intvector { 46702, 0, -39698, 0, -39600, 0, -39600, 3600, -32400, 0, -32400, 3600 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020304050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
finalRule { "US" }
finalRaw:int { -32400 }
@@ -874,7 +874,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1767217820, -1206961200, -1191366000, -1175378400, -1159830000, -633823200, -622072800, -602287200, -591836400, -570751200, -560214000, -539128800, -531356400, -191368800, -184201200, -155167200, -150073200, -128901600, -121129200, -99957600, -89593200, -68421600, -57970800, 499744800, 511232400, 530589600, 540262800, 562125600, 571194000, 592970400, 602038800, 624420000, 634698000, 938916000, 951613200, 970970400, 971571600, 1003024800, 1013907600 }
typeOffsets:intvector { -7780, 0, -7200, 0, -7200, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 176, 373 }
+ links:intvector { 176, 375 }
} //Z#176
/* America/North_Dakota/Beulah */ :table {
transPre32:intvector { -1, 1577323696 }
@@ -936,21 +936,24 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 }
typeOffsets:intvector { -26898, 0, -25200, 0, -25200, 3600 }
typeMap:bin { "0102010201020102010201" }
- links:intvector { 184, 544, 615 }
+ links:intvector { 184, 546, 617 }
} //Z#184
/* America/Port-au-Prince */ :table {
transPre32:intvector { -1, 1770463056 }
- trans:intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600 }
+ trans:intvector { -1670483460, 421218000, 436334400, 452062800, 467784000, 483512400, 499233600, 514962000, 530683200, 546411600, 562132800, 576050400, 594194400, 607500000, 625644000, 638949600, 657093600, 671004000, 688543200, 702453600, 719992800, 733903200, 752047200, 765352800, 783496800, 796802400, 814946400, 828856800, 846396000, 860306400, 877845600, 1112504400, 1130644800, 1143954000, 1162094400, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600, 1489302000, 1509861600 }
typeOffsets:intvector { -17360, 0, -18000, 0, -18000, 3600, -17340, 0 }
- typeMap:bin { "0301020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "03010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ finalRule { "Haiti" }
+ finalRaw:int { -18000 }
+ finalYear:int { 2018 }
} //Z#185
/* America/Port_of_Spain */ :table {
trans:intvector { -1825098836 }
typeOffsets:intvector { -14764, 0, -14400, 0 }
typeMap:bin { "01" }
- links:intvector { 61, 62, 111, 123, 124, 157, 171, 186, 205, 207, 208, 209, 210, 217, 219 }
+ links:intvector { 61, 62, 111, 123, 124, 157, 171, 186, 206, 208, 209, 210, 211, 218, 220 }
} //Z#186
- /* America/Porto_Acre */ :int { 195 } //Z#187
+ /* America/Porto_Acre */ :int { 196 } //Z#187
/* America/Porto_Velho */ :table {
trans:intvector { -1767210264, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200 }
typeOffsets:intvector { -15336, 0, -14400, 0, -14400, 3600 }
@@ -961,8 +964,14 @@ zoneinfo64:table(nofallback) {
trans:intvector { -873057600, -765399600 }
typeOffsets:intvector { -15865, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "010201" }
- links:intvector { 189, 546 }
+ links:intvector { 189, 548 }
} //Z#189
+ /* America/Punta_Arenas */ :table {
+ transPre32:intvector { -1, 1770462716 }
+ trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
+ typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16966, 0, -14400, 0, -14400, 3600, -10800, 0 }
+ typeMap:bin { "0301030403020102010201020102010401040104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" }
+ } //Z#190
/* America/Rainy_River */ :table {
transPre32:intvector { -1, 1928234792 }
trans:intvector { -1632067200, -1615136400, -923248800, -765392400, 136368000, 152089200, 167817600, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
@@ -971,7 +980,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#190
+ } //Z#191
/* America/Rankin_Inlet */ :table {
trans:intvector { -410227200, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
typeOffsets:intvector { 0, 0, -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 }
@@ -979,18 +988,18 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#191
+ } //Z#192
/* America/Recife */ :table {
trans:intvector { -1767217224, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -191365200, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 938919600, 951616800, 970974000, 971575200, 1003028400, 1013911200 }
typeOffsets:intvector { -8376, 0, -10800, 0, -10800, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- } //Z#192
+ } //Z#193
/* America/Regina */ :table {
trans:intvector { -2030202084, -1632063600, -1615132800, -1251651600, -1238349600, -1220202000, -1206900000, -1188752400, -1175450400, -1156698000, -1144000800, -1125248400, -1111946400, -1032714000, -1016992800, -1001264400, -986148000, -969814800, -954093600, -937760400, -922039200, -906310800, -890589600, -880210800, -765388800, -748450800, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -620838000, -608140800, -589388400, -576086400, -557938800, -544636800, -526489200, -513187200, -495039600, -481737600, -463590000, -450288000, -431535600, -418233600, -400086000, -386784000, -337186800, -321465600, -305737200 }
typeOffsets:intvector { -25116, 0, -25200, 0, -25200, 3600, -21600, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- links:intvector { 193, 384, 389 }
- } //Z#193
+ links:intvector { 194, 386, 391 }
+ } //Z#194
/* America/Resolute */ :table {
trans:intvector { -704937600, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
typeOffsets:intvector { 0, 0, -21600, 0, -21600, 3600, -21600, 7200, -18000, 0 }
@@ -998,45 +1007,45 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#194
+ } //Z#195
/* America/Rio_Branco */ :table {
trans:intvector { -1767209328, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 1214283600, 1384056000 }
typeOffsets:intvector { -16272, 0, -18000, 0, -18000, 3600, -14400, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010301" }
- links:intvector { 187, 195, 372 }
- } //Z#195
- /* America/Rosario */ :int { 67 } //Z#196
- /* America/Santa_Isabel */ :int { 215 } //Z#197
+ links:intvector { 187, 196, 374 }
+ } //Z#196
+ /* America/Rosario */ :int { 67 } //Z#197
+ /* America/Santa_Isabel */ :int { 216 } //Z#198
/* America/Santarem */ :table {
trans:intvector { -1767212472, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 1214280000 }
typeOffsets:intvector { -13128, 0, -14400, 0, -14400, 3600, -10800, 0 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" }
- } //Z#198
+ } //Z#199
/* America/Santiago */ :table {
- trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 }
+ trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200 }
typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 }
- typeMap:bin { "0100030002010201020102010201030103040301030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
+ typeMap:bin { "0100030002010201020102010201030103040301030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
finalRule { "Chile" }
finalRaw:int { -14400 }
- finalYear:int { 2017 }
- links:intvector { 199, 391 }
- } //Z#199
+ finalYear:int { 2020 }
+ links:intvector { 200, 393 }
+ } //Z#200
/* America/Santo_Domingo */ :table {
transPre32:intvector { -1, 1770462472 }
trans:intvector { -1159773600, -100119600, -89668800, -5770800, 4422600, 25678800, 33193800, 57733200, 64816200, 89182800, 96438600, 120632400, 127974600, 152082000, 972799200, 975823200 }
typeOffsets:intvector { -16776, 0, -18000, 0, -18000, 1800, -18000, 3600, -16800, 0, -14400, 0 }
typeMap:bin { "0401030102010201020102010201050105" }
- } //Z#200
+ } //Z#201
/* America/Sao_Paulo */ :table {
- trans:intvector { -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600, 1172368800, 1192330800, 1203213600, 1224385200, 1234663200, 1255834800, 1266717600, 1287284400, 1298167200, 1318734000, 1330221600, 1350788400, 1361066400, 1382238000, 1392516000, 1413687600, 1424570400, 1445137200, 1456020000, 1476586800, 1487469600, 1508036400, 1518919200, 1540090800, 1550368800, 1571540400, 1581818400, 1602990000, 1613872800, 1634439600, 1645322400, 1665889200, 1677376800, 1697338800, 1708221600, 1729393200, 1739671200, 1760842800, 1771725600, 1792292400, 1803175200, 1823742000, 1834624800, 1855191600, 1866074400, 1887246000, 1897524000, 1918695600, 1928973600, 1950145200, 1960423200, 1981594800, 1992477600, 2013044400, 2024532000, 2044494000, 2055376800, 2076548400, 2086826400, 2107998000, 2118880800, 2139447600 }
- transPost32:intvector { 0, -2144636896, 0, -2124070096 }
+ trans:intvector { -1767214412, -1206957600, -1191362400, -1175374800, -1159826400, -633819600, -622069200, -602283600, -591832800, -570747600, -560210400, -539125200, -531352800, -195426000, -184197600, -155163600, -150069600, -128898000, -121125600, -99954000, -89589600, -68418000, -57967200, 499748400, 511236000, 530593200, 540266400, 562129200, 571197600, 592974000, 602042400, 624423600, 634701600, 656478000, 666756000, 687927600, 697600800, 719982000, 728445600, 750826800, 761709600, 782276400, 793159200, 813726000, 824004000, 844570800, 856058400, 876106800, 888717600, 908074800, 919562400, 938919600, 951616800, 970974000, 982461600, 1003028400, 1013911200, 1036292400, 1045360800, 1066532400, 1076810400, 1099364400, 1108864800, 1129431600, 1140314400, 1162695600, 1172368800, 1192330800, 1203213600, 1224385200, 1234663200, 1255834800, 1266717600, 1287284400, 1298167200, 1318734000, 1330221600, 1350788400, 1361066400, 1382238000, 1392516000, 1413687600, 1424570400, 1445137200, 1456020000, 1476586800, 1487469600, 1508036400, 1518919200, 1541300400, 1550368800, 1572750000, 1581818400, 1604199600, 1613872800, 1636254000, 1645322400, 1667703600, 1677376800, 1699153200, 1708221600, 1730602800, 1739671200, 1762052400, 1771725600, 1793502000, 1803175200, 1825556400, 1834624800, 1857006000, 1866074400, 1888455600, 1897524000, 1919905200, 1928973600, 1951354800, 1960423200, 1983409200, 1992477600, 2014858800, 2024532000, 2046308400, 2055376800, 2077758000, 2086826400, 2109207600, 2118880800, 2140657200 }
+ transPost32:intvector { 0, -2144636896, 0, -2122255696 }
typeOffsets:intvector { -11188, 0, -10800, 0, -10800, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
finalRule { "Brazil" }
finalRaw:int { -10800 }
finalYear:int { 2039 }
- links:intvector { 201, 370, 374 }
- } //Z#201
+ links:intvector { 202, 372, 376 }
+ } //Z#202
/* America/Scoresbysund */ :table {
trans:intvector { -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -5272, 0, -7200, 0, -7200, 3600, -3600, 0, -3600, 3600 }
@@ -1044,18 +1053,18 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { -3600 }
finalYear:int { 1997 }
- } //Z#202
- /* America/Shiprock */ :int { 109 } //Z#203
+ } //Z#203
+ /* America/Shiprock */ :int { 109 } //Z#204
/* America/Sitka */ :table {
- transPre32:intvector { -1, 1069601369, -1, 2106012569 }
+ transPre32:intvector { -1, 1069743569, -1, 2106012569 }
trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 53927, 0, -32473, 0, -32400, 0, -32400, 3600, -28800, 0, -28800, 3600 }
typeMap:bin { "01040504050405040504050405040504050405040504050405040504050405040502030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
finalRule { "US" }
finalRaw:int { -32400 }
finalYear:int { 2008 }
- } //Z#204
- /* America/St_Barthelemy */ :int { 186 } //Z#205
+ } //Z#205
+ /* America/St_Barthelemy */ :int { 186 } //Z#206
/* America/St_Johns */ :table {
trans:intvector { -1664130548, -1650137348, -1632076148, -1615145348, -1598650148, -1590100148, -1567286948, -1551565748, -1535837348, -1520116148, -1503782948, -1488666548, -1472333348, -1457216948, -1440883748, -1425767348, -1409434148, -1394317748, -1377984548, -1362263348, -1346534948, -1330813748, -1314480548, -1299364148, -1283030948, -1267914548, -1251581348, -1236464948, -1220131748, -1205015348, -1188682148, -1172960948, -1156627748, -1141511348, -1125178148, -1110061748, -1096921748, -1093728600, -1078612200, -1061670600, -1048973400, -1030221000, -1017523800, -998771400, -986074200, -966717000, -954624600, -935267400, -922570200, -903817800, -891120600, -872368200, -765401400, -746044200, -733347000, -714594600, -701897400, -683145000, -670447800, -651695400, -638998200, -619641000, -606943800, -589401000, -576099000, -557951400, -544649400, -526501800, -513199800, -495052200, -481750200, -463602600, -450300600, -431548200, -418246200, -400098600, -386796600, -368649000, -355347000, -337199400, -323897400, -305749800, -289423800, -273695400, -257974200, -242245800, -226524600, -210796200, -195075000, -179346600, -163625400, -147897000, -131571000, -116447400, -100121400, -84393000, -68671800, -52943400, -37222200, -21493800, -5772600, 9955800, 25677000, 41405400, 57731400, 73459800, 89181000, 104909400, 120630600, 136359000, 152080200, 167808600, 183529800, 199258200, 215584200, 230707800, 247033800, 262762200, 278483400, 294211800, 309933000, 325661400, 341382600, 357111000, 372832200, 388560600, 404886600, 420010200, 436336200, 452064600, 467785800, 483514200, 499235400, 514963800, 530685000, 544591860, 562127460, 576041460, 594178260, 607491060, 625631460, 638940660, 657081060, 670995060, 688530660, 702444660, 719980260, 733894260, 752034660, 765343860, 783484260, 796793460, 814933860, 828847860, 846383460, 860297460, 877833060, 891747060, 909282660, 923196660, 941337060, 954646260, 972786660, 986095860, 1004236260, 1018150260, 1035685860, 1049599860, 1067135460, 1081049460, 1099189860, 1112499060, 1130639460, 1143948660, 1162089060, 1173583860, 1194143460, 1205033460, 1225593060, 1236483060, 1257042660, 1268537460, 1289097060, 1299987060, 1320553800, 1331443800, 1352003400 }
typeOffsets:intvector { -12652, 0, -12652, 3600, -12600, 0, -12600, 3600, -12600, 7200 }
@@ -1063,22 +1072,22 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -12600 }
finalYear:int { 2013 }
- links:intvector { 206, 378, 387 }
- } //Z#206
- /* America/St_Kitts */ :int { 186 } //Z#207
- /* America/St_Lucia */ :int { 186 } //Z#208
- /* America/St_Thomas */ :int { 186 } //Z#209
- /* America/St_Vincent */ :int { 186 } //Z#210
+ links:intvector { 207, 380, 389 }
+ } //Z#207
+ /* America/St_Kitts */ :int { 186 } //Z#208
+ /* America/St_Lucia */ :int { 186 } //Z#209
+ /* America/St_Thomas */ :int { 186 } //Z#210
+ /* America/St_Vincent */ :int { 186 } //Z#211
/* America/Swift_Current */ :table {
trans:intvector { -2030201320, -1632063600, -1615132800, -880210800, -765388800, -747241200, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -400086000, -384364800, -337186800, -321465600, -305737200, -292435200, -273682800, -260985600, 73472400 }
typeOffsets:intvector { -25880, 0, -25200, 0, -25200, 3600, -21600, 0 }
typeMap:bin { "01020102010201020102010201020102010201020103" }
- } //Z#211
+ } //Z#212
/* America/Tegucigalpa */ :table {
trans:intvector { -1538503868, 547020000, 559717200, 578469600, 591166800, 1146981600, 1154926800 }
typeOffsets:intvector { -20932, 0, -21600, 0, -21600, 3600 }
typeMap:bin { "01020102010201" }
- } //Z#212
+ } //Z#213
/* America/Thule */ :table {
trans:intvector { -1686079492, 670399200, 686120400, 701848800, 717570000, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
typeOffsets:intvector { -16508, 0, -14400, 0, -14400, 3600 }
@@ -1086,7 +1095,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Thule" }
finalRaw:int { -14400 }
finalYear:int { 2008 }
- } //Z#213
+ } //Z#214
/* America/Thunder_Bay */ :table {
transPre32:intvector { -1, 1928233516 }
trans:intvector { -1893434400, -880218000, -765396000, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -1095,7 +1104,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- } //Z#214
+ } //Z#215
/* America/Tijuana */ :table {
trans:intvector { -1514736000, -1451667600, -1343062800, -1234803600, -1222963200, -1207242000, -873820800, -761677200, -686073600, -661539600, -495039600, -481734000, -463590000, -450284400, -431535600, -418230000, -400086000, -386780400, -368636400, -355330800, -337186800, -323881200, -305737200, -292431600, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1175421600, 1193562000, 1207476000, 1225011600, 1238925600, 1256461200, 1268560800, 1289120400 }
typeOffsets:intvector { -28084, 0, -28800, 0, -28800, 3600, -25200, 0 }
@@ -1103,8 +1112,8 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2011 }
- links:intvector { 115, 197, 215, 535 }
- } //Z#215
+ links:intvector { 115, 198, 216, 537 }
+ } //Z#216
/* America/Toronto */ :table {
transPre32:intvector { -1, 1928231148 }
trans:intvector { -1632070800, -1615140000, -1601753400, -1583697600, -1567357200, -1554667200, -1534698000, -1524074400, -1503248400, -1492365600, -1471798800, -1460916000, -1440954000, -1428861600, -1409504400, -1397412000, -1378054800, -1365962400, -1346605200, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1188752400, -1176055200, -1157302800, -1144000800, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -765396000, -747248400, -733946400, -715806000, -702504000, -684356400, -671054400, -652906800, -634161600, -620845200, -602704800, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -1113,9 +1122,9 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 170, 216, 385 }
- } //Z#216
- /* America/Tortola */ :int { 186 } //Z#217
+ links:intvector { 170, 217, 387 }
+ } //Z#217
+ /* America/Tortola */ :int { 186 } //Z#218
/* America/Vancouver */ :table {
transPre32:intvector { -1, 1581086444 }
trans:intvector { -1632060000, -1615129200, -880207200, -765385200, -747237600, -732726000, -715788000, -702486000, -684338400, -671036400, -652888800, -639586800, -620834400, -608137200, -589384800, -576082800, -557935200, -544633200, -526485600, -513183600, -495036000, -481734000, -463586400, -450284400, -431532000, -418230000, -400082400, -386780400, -368632800, -355330800, -337183200, -323881200, -305733600, -292431600, -273679200, -260982000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 136375200, 152096400, 167824800, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
@@ -1124,9 +1133,9 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 218, 388 }
- } //Z#218
- /* America/Virgin */ :int { 186 } //Z#219
+ links:intvector { 219, 390 }
+ } //Z#219
+ /* America/Virgin */ :int { 186 } //Z#220
/* America/Whitehorse */ :table {
transPre32:intvector { -1, 2105969308 }
trans:intvector { -1632056400, -1615125600, -1596978000, -1583164800, -880203600, -765381600, -147884400, -131554800, -81961200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
@@ -1135,8 +1144,8 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 220, 390 }
- } //Z#220
+ links:intvector { 221, 392 }
+ } //Z#221
/* America/Winnipeg */ :table {
transPre32:intvector { -1, 1692709012 }
trans:intvector { -1694368800, -1681671600, -1632067200, -1615136400, -1029686400, -1018198800, -880214400, -765392400, -746035200, -732733200, -715795200, -702493200, -684345600, -671043600, -652896000, -639594000, -620755200, -607626000, -589392000, -576090000, -557942400, -544640400, -526492800, -513190800, -495043200, -481741200, -463593600, -450291600, -431539200, -418237200, -400089600, -386787600, -368640000, -355338000, -337190400, -321469200, -305740800, -292438800, -210787200, -198090000, -116438400, -100108800, -84384000, -68659200, -52934400, -37209600, -21484800, -5760000, 9964800, 25689600, 41414400, 57744000, 73468800, 89193600, 104918400, 120643200, 136368000, 152092800, 167817600, 183542400, 199267200, 215596800, 230716800, 247046400, 262771200, 278496000, 294220800, 309945600, 325670400, 341395200, 357120000, 372844800, 388569600, 404899200, 420019200, 436348800, 452073600, 467798400, 483523200, 499248000, 514972800, 530697600, 544608000, 562147200, 576057600, 594201600, 607507200, 625651200, 638956800, 657100800, 671011200, 688550400, 702460800, 720000000, 733910400, 752054400, 765360000, 783504000, 796809600, 814953600, 828864000, 846403200, 860313600, 877852800, 891763200, 909302400, 923212800, 941356800, 954662400, 972806400, 986112000, 1004256000, 1018166400, 1035705600, 1049616000, 1067155200, 1081065600, 1099209600, 1112515200, 1130659200, 1143964800, 1162105200, 1173600000, 1194159600 }
@@ -1145,17 +1154,17 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 221, 383 }
- } //Z#221
+ links:intvector { 222, 385 }
+ } //Z#222
/* America/Yakutat */ :table {
- transPre32:intvector { -1, 1069602431, -1, 2106013631 }
+ transPre32:intvector { -1, 1069743569, -1, 2106013631 }
trans:intvector { -880203600, -765381600, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 152100000, 162385200, 183549600, 199278000, 215604000, 230727600, 247053600, 262782000, 278503200, 294231600, 309952800, 325681200, 341402400, 357130800, 372852000, 388580400, 404906400, 420030000, 436356000, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 52865, 0, -33535, 0, -32400, 0, -32400, 3600 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
finalRule { "US" }
finalRaw:int { -32400 }
finalYear:int { 2008 }
- } //Z#222
+ } //Z#223
/* America/Yellowknife */ :table {
trans:intvector { -1104537600, -880210800, -765388800, -147891600, -131562000, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
typeOffsets:intvector { 0, 0, -25200, 0, -25200, 3600, -25200, 7200 }
@@ -1163,53 +1172,50 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- } //Z#223
+ } //Z#224
/* Antarctica/Casey */ :table {
- trans:intvector { -31536000, 1255802400, 1267714800, 1319738400, 1329843600, 1477065600 }
+ trans:intvector { -31536000, 1255802400, 1267714800, 1319738400, 1329843600, 1477065600, 1520701200 }
typeOffsets:intvector { 0, 0, 28800, 0, 39600, 0 }
- typeMap:bin { "010201020102" }
- } //Z#224
+ typeMap:bin { "01020102010201" }
+ } //Z#225
/* Antarctica/Davis */ :table {
trans:intvector { -409190400, -163062000, -28857600, 1255806000, 1268251200, 1319742000, 1329854400 }
typeOffsets:intvector { 0, 0, 18000, 0, 25200, 0 }
typeMap:bin { "02000201020102" }
- } //Z#225
+ } //Z#226
/* Antarctica/DumontDUrville */ :table {
trans:intvector { -725846400, -566992800, -415497600 }
typeOffsets:intvector { 0, 0, 36000, 0 }
typeMap:bin { "010001" }
- } //Z#226
+ } //Z#227
/* Antarctica/Macquarie */ :table {
transPre32:intvector { -1, 2080708096 }
trans:intvector { -1680508800, -1665392400, -1601719200, -687052800, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000, 1238860800, 1254585600, 1270310400 }
typeOffsets:intvector { 0, 0, 36000, 0, 36000, 3600, 39600, 0 }
typeMap:bin { "01020100010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" }
- } //Z#227
+ } //Z#228
/* Antarctica/Mawson */ :table {
trans:intvector { -501206400, 1255809600 }
typeOffsets:intvector { 0, 0, 18000, 0, 21600, 0 }
typeMap:bin { "0201" }
- } //Z#228
- /* Antarctica/McMurdo */ :int { 550 } //Z#229
+ } //Z#229
+ /* Antarctica/McMurdo */ :int { 552 } //Z#230
/* Antarctica/Palmer */ :table {
- trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 }
+ trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
typeOffsets:intvector { 0, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
- typeMap:bin { "020102010201020102010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
- finalRule { "Chile" }
- finalRaw:int { -14400 }
- finalYear:int { 2017 }
- } //Z#230
+ typeMap:bin { "02010201020102010201030403010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" }
+ } //Z#231
/* Antarctica/Rothera */ :table {
trans:intvector { 218246400 }
typeOffsets:intvector { 0, 0, -10800, 0 }
typeMap:bin { "01" }
- } //Z#231
- /* Antarctica/South_Pole */ :int { 550 } //Z#232
+ } //Z#232
+ /* Antarctica/South_Pole */ :int { 552 } //Z#233
/* Antarctica/Syowa */ :table {
trans:intvector { -407808000 }
typeOffsets:intvector { 0, 0, 10800, 0 }
typeMap:bin { "01" }
- } //Z#233
+ } //Z#234
/* Antarctica/Troll */ :table {
trans:intvector { 1111885200, 1130634000 }
typeOffsets:intvector { 0, 0, 0, 7200 }
@@ -1217,19 +1223,19 @@ zoneinfo64:table(nofallback) {
finalRule { "Troll" }
finalRaw:int { 0 }
finalYear:int { 2006 }
- } //Z#234
+ } //Z#235
/* Antarctica/Vostok */ :table {
trans:intvector { -380073600 }
typeOffsets:intvector { 0, 0, 21600, 0 }
typeMap:bin { "01" }
- } //Z#235
- /* Arctic/Longyearbyen */ :int { 472 } //Z#236
- /* Asia/Aden */ :int { 307 } //Z#237
+ } //Z#236
+ /* Arctic/Longyearbyen */ :int { 474 } //Z#237
+ /* Asia/Aden */ :int { 309 } //Z#238
/* Asia/Almaty */ :table {
trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 }
typeOffsets:intvector { 18468, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" }
- } //Z#238
+ } //Z#239
/* Asia/Amman */ :table {
trans:intvector { -1230776624, 108165600, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 215643600, 231285600, 244501200, 262735200, 275950800, 481154400, 496962000, 512949600, 528670800, 544399200, 560120400, 575848800, 592174800, 610581600, 623624400, 641167200, 655074000, 671839200, 685918800, 702856800, 717973200, 733701600, 749422800, 765151200, 779662800, 797205600, 811116000, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 930780000, 938124000, 954367200, 970178400, 985816800, 1001628000, 1017352800, 1033077600, 1048802400, 1066946400, 1080252000, 1097791200, 1112306400, 1128031200, 1143756000, 1161900000, 1175205600, 1193349600, 1206655200, 1225404000, 1238104800, 1256853600, 1269554400, 1288303200, 1301608800, 1319752800, 1333058400, 1387486800, 1395957600, 1414706400 }
typeOffsets:intvector { 8624, 0, 7200, 0, 7200, 3600 }
@@ -1237,57 +1243,57 @@ zoneinfo64:table(nofallback) {
finalRule { "Jordan" }
finalRaw:int { 7200 }
finalYear:int { 2015 }
- } //Z#239
+ } //Z#240
/* Asia/Anadyr */ :table {
trans:intvector { -1441194596, -1247572800, 354884400, 370692000, 386420400, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701791200, 717516000, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400, 859644000, 877788000, 891093600, 909237600, 922543200, 941292000, 953992800, 972741600, 985442400, 1004191200, 1017496800, 1035640800, 1048946400, 1067090400, 1080396000, 1099144800, 1111845600, 1130594400, 1143295200, 1162044000, 1174744800, 1193493600, 1206799200, 1224943200, 1238248800, 1256392800, 1269698400, 1288450800, 1301151600 }
typeOffsets:intvector { 42596, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600, 46800, 0, 46800, 3600 }
typeMap:bin { "03050605040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" }
- } //Z#240
+ } //Z#241
/* Asia/Aqtau */ :table {
trans:intvector { -1441164064, -1247544000, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
typeOffsets:intvector { 12064, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "0103050403040304030403040304030403040304030201030403040304010201020102010201020102010201020102010203" }
- } //Z#241
+ } //Z#242
/* Asia/Aqtobe */ :table {
trans:intvector { -1441165720, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 }
typeOffsets:intvector { 13720, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010304050403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" }
- } //Z#242
+ } //Z#243
/* Asia/Ashgabat */ :table {
trans:intvector { -1441166012, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000 }
typeOffsets:intvector { 14012, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103" }
- links:intvector { 243, 244 }
- } //Z#243
- /* Asia/Ashkhabad */ :int { 243 } //Z#244
+ links:intvector { 244, 245 }
+ } //Z#244
+ /* Asia/Ashkhabad */ :int { 244 } //Z#245
/* Asia/Atyrau */ :table {
- trans:intvector { -1441164464, -1247544000, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
- typeOffsets:intvector { 12464, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
- typeMap:bin { "0103050403040304030403040304030403040304030201030403040304030403040304030403020102010201020102010203" }
- } //Z#245
+ trans:intvector { -1441164464, -1247540400, 370724400, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
+ typeOffsets:intvector { 12464, 0, 10800, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
+ typeMap:bin { "0104060504050405040504050405040504050405040302040504050405040504050405040504030203020302030203020304" }
+ } //Z#246
/* Asia/Baghdad */ :table {
transPre32:intvector { -1, 1770435036 }
trans:intvector { -1641005856, 389048400, 402264000, 417906000, 433800000, 449614800, 465422400, 481150800, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670464000, 686275200, 702086400, 717897600, 733622400, 749433600, 765158400, 780969600, 796694400, 812505600, 828316800, 844128000, 859852800, 875664000, 891388800, 907200000, 922924800, 938736000, 954547200, 970358400, 986083200, 1001894400, 1017619200, 1033430400, 1049155200, 1064966400, 1080777600, 1096588800, 1112313600, 1128124800, 1143849600, 1159660800, 1175385600, 1191196800 }
typeOffsets:intvector { 10660, 0, 10656, 0, 10800, 0, 10800, 3600 }
typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- } //Z#246
- /* Asia/Bahrain */ :int { 304 } //Z#247
+ } //Z#247
+ /* Asia/Bahrain */ :int { 305 } //Z#248
/* Asia/Baku */ :table {
trans:intvector { -1441163964, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 828234000, 846378000, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1319932800, 1332633600, 1351382400, 1364688000, 1382832000, 1396137600, 1414281600, 1427587200, 1445731200 }
typeOffsets:intvector { 11964, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201020304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
- } //Z#248
+ } //Z#249
/* Asia/Bangkok */ :table {
trans:intvector { -1570084924 }
typeOffsets:intvector { 24124, 0, 25200, 0 }
typeMap:bin { "01" }
- links:intvector { 249, 301, 329 }
- } //Z#249
+ links:intvector { 250, 302, 331 }
+ } //Z#250
/* Asia/Barnaul */ :table {
trans:intvector { -1579844100, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 801590400, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1459022400 }
typeOffsets:intvector { 20100, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#250
+ } //Z#251
/* Asia/Beirut */ :table {
transPre32:intvector { -1, 1454817976 }
trans:intvector { -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1473645600, -1460948400, -399866400, -386650800, -368330400, -355114800, -336794400, -323578800, -305172000, -291956400, -273636000, -260420400, 78012000, 86734800, 105055200, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 212965200, 231285600, 244501200, 262735200, 275950800, 452210400, 466722000, 483746400, 498258000, 515282400, 529794000, 546818400, 561330000, 581119200, 592952400, 610754400, 624488400, 641512800, 656024400, 673048800, 687560400, 704671200, 718146000, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 906843600, 922572000, 941317200 }
@@ -1296,40 +1302,37 @@ zoneinfo64:table(nofallback) {
finalRule { "Lebanon" }
finalRaw:int { 7200 }
finalYear:int { 2000 }
- } //Z#251
+ } //Z#252
/* Asia/Bishkek */ :table {
trans:intvector { -1441169904, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 683582400, 703018800, 717530400, 734468400, 748980000, 765918000, 780429600, 797367600, 811879200, 828817200, 843933600, 859671000, 877811400, 891120600, 909261000, 922570200, 941315400, 954019800, 972765000, 985469400, 1004214600, 1017523800, 1035664200, 1048973400, 1067113800, 1080423000, 1099168200, 1111872600, 1123783200 }
typeOffsets:intvector { 17904, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020102010201020102010201020102010201020102010201020102010203" }
- } //Z#252
+ } //Z#253
/* Asia/Brunei */ :table {
trans:intvector { -1383464380, -1167636600 }
typeOffsets:intvector { 27580, 0, 27000, 0, 28800, 0 }
typeMap:bin { "0102" }
- } //Z#253
- /* Asia/Calcutta */ :int { 285 } //Z#254
+ } //Z#254
+ /* Asia/Calcutta */ :int { 286 } //Z#255
/* Asia/Chita */ :table {
trans:intvector { -1579419232, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800, 1459015200 }
typeOffsets:intvector { 27232, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 }
typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050103" }
- } //Z#255
+ } //Z#256
/* Asia/Choibalsan */ :table {
- trans:intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200, 1427479200, 1443193200 }
+ trans:intvector { -2032933080, 252435600, 417974400, 433778400, 449593200, 465314400, 481042800, 496764000, 512492400, 528213600, 543942000, 559663200, 575391600, 591112800, 606841200, 622562400, 638290800, 654616800, 670345200, 686066400, 701794800, 717516000, 733244400, 748965600, 764694000, 780415200, 796143600, 811864800, 828198000, 843919200, 859647600, 875368800, 891097200, 906818400, 988390800, 1001692800, 1017421200, 1033142400, 1048870800, 1064592000, 1080320400, 1096041600, 1111770000, 1127491200, 1143219600, 1159545600, 1206889200, 1427479200, 1443193200, 1458928800, 1474642800 }
typeOffsets:intvector { 27480, 0, 25200, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600 }
- typeMap:bin { "01020504050405040504050405040504050405040504050405040504050405040504050405040504050405040504020302" }
- finalRule { "Mongol" }
- finalRaw:int { 28800 }
- finalYear:int { 2016 }
- } //Z#256
- /* Asia/Chongqing */ :int { 312 } //Z#257
- /* Asia/Chungking */ :int { 312 } //Z#258
+ typeMap:bin { "010205040504050405040504050405040504050405040504050405040504050405040504050405040504050405040203020302" }
+ } //Z#257
+ /* Asia/Chongqing */ :int { 314 } //Z#258
+ /* Asia/Chungking */ :int { 314 } //Z#259
/* Asia/Colombo */ :table {
transPre32:intvector { -1, 1454807332 }
trans:intvector { -2019705572, -883287000, -862639200, -764051400, 832962600, 846266400, 1145039400 }
typeOffsets:intvector { 19164, 0, 19172, 0, 19800, 0, 19800, 1800, 19800, 3600, 21600, 0, 23400, 0 }
typeMap:bin { "0102030402060502" }
- } //Z#259
- /* Asia/Dacca */ :int { 262 } //Z#260
+ } //Z#260
+ /* Asia/Dacca */ :int { 263 } //Z#261
/* Asia/Damascus */ :table {
trans:intvector { -1577931912, -1568592000, -1554080400, -1537142400, -1522630800, -1505692800, -1491181200, -1474243200, -1459126800, -242265600, -228877200, -210556800, -197427600, -178934400, -165718800, -147398400, -134269200, -116467200, -102646800, -84326400, -71110800, -52704000, -39488400, -21168000, -7952400, 10368000, 23583600, 41904000, 55119600, 73526400, 86742000, 105062400, 118278000, 136598400, 149814000, 168134400, 181350000, 199756800, 212972400, 231292800, 241916400, 262828800, 273452400, 418694400, 433810800, 450316800, 465433200, 508896000, 529196400, 541555200, 562633200, 574387200, 594255600, 607305600, 623199600, 638928000, 654649200, 670456800, 686264400, 702684000, 717886800, 733096800, 748904400, 765151200, 780958800, 796687200, 812494800, 828309600, 844117200, 859759200, 875653200, 891208800, 907189200, 922917600, 938725200, 954540000, 970347600, 986076000, 1001883600, 1017612000, 1033419600, 1049148000, 1064955600, 1080770400, 1096578000, 1112306400, 1128114000, 1143842400, 1158872400, 1175205600, 1193950800, 1207260000, 1225486800, 1238104800, 1256850000, 1270159200, 1288299600, 1301608800, 1319749200, 1333058400, 1351198800 }
typeOffsets:intvector { 8712, 0, 7200, 0, 7200, 3600 }
@@ -1337,179 +1340,179 @@ zoneinfo64:table(nofallback) {
finalRule { "Syria" }
finalRaw:int { 7200 }
finalYear:int { 2013 }
- } //Z#261
+ } //Z#262
/* Asia/Dhaka */ :table {
transPre32:intvector { -1, 1770423996 }
trans:intvector { -891582800, -872058600, -862637400, -576138600, 1245430800, 1262278800 }
typeOffsets:intvector { 21700, 0, 19800, 0, 21200, 0, 21600, 0, 21600, 3600, 23400, 0 }
typeMap:bin { "02050105030403" }
- links:intvector { 260, 262, 371 }
- } //Z#262
+ links:intvector { 261, 263, 373 }
+ } //Z#263
/* Asia/Dili */ :table {
trans:intvector { -1830414140, -879152400, 199897200, 969120000 }
typeOffsets:intvector { 30140, 0, 28800, 0, 32400, 0 }
typeMap:bin { "01020102" }
- } //Z#263
+ } //Z#264
/* Asia/Dubai */ :table {
trans:intvector { -1577936472 }
typeOffsets:intvector { 13272, 0, 14400, 0 }
typeMap:bin { "01" }
- links:intvector { 264, 295 }
- } //Z#264
+ links:intvector { 265, 296 }
+ } //Z#265
/* Asia/Dushanbe */ :table {
trans:intvector { -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 }
typeOffsets:intvector { 16512, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201" }
- } //Z#265
+ } //Z#266
/* Asia/Famagusta */ :table {
- trans:intvector { -1518920148, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1473282000 }
+ trans:intvector { -1518920148, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1473282000, 1509238800, 1521939600, 1540688400 }
typeOffsets:intvector { 8148, 0, 7200, 0, 7200, 3600, 10800, 0 }
- typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" }
- } //Z#266
+ typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203010201" }
+ finalRule { "EUAsia" }
+ finalRaw:int { 7200 }
+ finalYear:int { 2019 }
+ } //Z#267
/* Asia/Gaza */ :table {
transPre32:intvector { -1, 2109557424 }
- trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
+ trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334015200, 337644000, 452556000, 462232800, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
typeOffsets:intvector { 8272, 0, 7200, 0, 7200, 3600 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Palestine" }
finalRaw:int { 7200 }
finalYear:int { 2017 }
- } //Z#267
- /* Asia/Harbin */ :int { 312 } //Z#268
+ } //Z#268
+ /* Asia/Harbin */ :int { 314 } //Z#269
/* Asia/Hebron */ :table {
transPre32:intvector { -1, 2109557273 }
- trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
+ trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334015200, 337644000, 452556000, 462232800, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
typeOffsets:intvector { 8423, 0, 7200, 0, 7200, 3600 }
- typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Palestine" }
finalRaw:int { 7200 }
finalYear:int { 2017 }
- } //Z#269
+ } //Z#270
/* Asia/Ho_Chi_Minh */ :table {
trans:intvector { -2004073600, -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 }
typeOffsets:intvector { 25600, 0, 25200, 0, 25590, 0, 28800, 0, 32400, 0 }
typeMap:bin { "020103040103010301" }
- links:intvector { 270, 308, 628 }
- } //Z#270
- /* Asia/Hong_Kong */ :table {
- trans:intvector { -2056693002, -907389000, -891667800, -884246400, -766746000, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -542352600, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 }
- typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 3600, 32400, 0 }
- typeMap:bin { "010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 271, 509 }
+ links:intvector { 271, 310, 630 }
} //Z#271
+ /* Asia/Hong_Kong */ :table {
+ trans:intvector { -2056690800, -900909000, -891579600, -884248200, -766659600, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -541661400, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 }
+ typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 3600, 30600, 0, 32400, 0 }
+ typeMap:bin { "010203040102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ links:intvector { 272, 511 }
+ } //Z#272
/* Asia/Hovd */ :table {
- trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800 }
+ trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800, 1458932400, 1474646400 }
typeOffsets:intvector { 21996, 0, 21600, 0, 25200, 0, 25200, 3600 }
- typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- finalRule { "Mongol" }
- finalRaw:int { 25200 }
- finalYear:int { 2016 }
- } //Z#272
+ typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
+ } //Z#273
/* Asia/Irkutsk */ :table {
trans:intvector { -1575874625, -1247554800, 354902400, 370710000, 386438400, 402246000, 417974400, 433782000, 449596800, 465328800, 481053600, 496778400, 512503200, 528228000, 543952800, 559677600, 575402400, 591127200, 606852000, 622576800, 638301600, 654631200, 670356000, 686084400, 695761200, 701805600, 717530400, 733255200, 748980000, 764704800, 780429600, 796154400, 811879200, 828208800, 846352800, 859658400, 877802400, 891108000, 909252000, 922557600, 941306400, 954007200, 972756000, 985456800, 1004205600, 1017511200, 1035655200, 1048960800, 1067104800, 1080410400, 1099159200, 1111860000, 1130608800, 1143309600, 1162058400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200, 1256407200, 1269712800, 1288461600, 1301162400, 1414256400 }
typeOffsets:intvector { 25025, 0, 25200, 0, 25200, 3600, 28800, 0, 28800, 3600, 32400, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#273
- /* Asia/Istanbul */ :int { 456 } //Z#274
+ } //Z#274
+ /* Asia/Istanbul */ :int { 458 } //Z#275
/* Asia/Jakarta */ :table {
trans:intvector { -1451719200, -1172906400, -876641400, -766054800, -683883000, -620812800, -189415800 }
typeOffsets:intvector { 25632, 0, 25200, 0, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "02030503040301" }
- } //Z#275
+ } //Z#276
/* Asia/Jayapura */ :table {
trans:intvector { -1172913768, -799491600, -189423000 }
typeOffsets:intvector { 33768, 0, 32400, 0, 34200, 0 }
typeMap:bin { "010201" }
- } //Z#276
+ } //Z#277
/* Asia/Jerusalem */ :table {
transPre32:intvector { -1, 1454818042 }
- trans:intvector { -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1382828400 }
+ trans:intvector { -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 334015200, 337644000, 452556000, 462232800, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1382828400 }
typeOffsets:intvector { 8454, 0, 7200, 0, 7200, 3600, 7200, 7200, 8440, 0 }
- typeMap:bin { "0401020102010201020102010302010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "040102010201020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Zion" }
finalRaw:int { 7200 }
finalYear:int { 2014 }
- links:intvector { 277, 319, 525 }
- } //Z#277
+ links:intvector { 278, 321, 527 }
+ } //Z#278
/* Asia/Kabul */ :table {
transPre32:intvector { -1, 1770429088 }
trans:intvector { -788932800 }
typeOffsets:intvector { 16608, 0, 14400, 0, 16200, 0 }
typeMap:bin { "0102" }
- } //Z#278
+ } //Z#279
/* Asia/Kamchatka */ :table {
trans:intvector { -1487759676, -1247569200, 354888000, 370695600, 386424000, 402231600, 417960000, 433767600, 449582400, 465314400, 481039200, 496764000, 512488800, 528213600, 543938400, 559663200, 575388000, 591112800, 606837600, 622562400, 638287200, 654616800, 670341600, 686070000, 695746800, 701791200, 717516000, 733240800, 748965600, 764690400, 780415200, 796140000, 811864800, 828194400, 846338400, 859644000, 877788000, 891093600, 909237600, 922543200, 941292000, 953992800, 972741600, 985442400, 1004191200, 1017496800, 1035640800, 1048946400, 1067090400, 1080396000, 1099144800, 1111845600, 1130594400, 1143295200, 1162044000, 1174744800, 1193493600, 1206799200, 1224943200, 1238248800, 1256392800, 1269698400, 1288450800, 1301151600 }
typeOffsets:intvector { 38076, 0, 39600, 0, 39600, 3600, 43200, 0, 43200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" }
- } //Z#279
+ } //Z#280
/* Asia/Karachi */ :table {
trans:intvector { -1988166492, -862637400, -764145000, -576135000, 1018119600, 1033840800, 1212260400, 1225476000, 1239735600, 1257012000 }
typeOffsets:intvector { 16092, 0, 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 }
typeMap:bin { "03040301020102010201" }
- links:intvector { 280, 543 }
- } //Z#280
- /* Asia/Kashgar */ :int { 327 } //Z#281
+ links:intvector { 281, 545 }
+ } //Z#281
+ /* Asia/Kashgar */ :int { 329 } //Z#282
/* Asia/Kathmandu */ :table {
trans:intvector { -1577943676, 504901800 }
typeOffsets:intvector { 20476, 0, 19800, 0, 20700, 0 }
typeMap:bin { "0102" }
- links:intvector { 282, 283 }
- } //Z#282
- /* Asia/Katmandu */ :int { 282 } //Z#283
+ links:intvector { 283, 284 }
+ } //Z#283
+ /* Asia/Katmandu */ :int { 283 } //Z#284
/* Asia/Khandyga */ :table {
trans:intvector { -1579424533, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1072882800, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1315832400, 1414252800 }
typeOffsets:intvector { 32533, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403050605060506050605060506050605070503" }
- } //Z#284
- /* Asia/Kolkata */ :table {
- transPre32:intvector { -1, 1454805288 }
- trans:intvector { -891582800, -872058600, -862637400, -764145000 }
- typeOffsets:intvector { 21208, 0, 19800, 0, 19800, 3600, 21200, 0, 23400, 0 }
- typeMap:bin { "0304010201" }
- links:intvector { 254, 285, 511 }
} //Z#285
+ /* Asia/Kolkata */ :table {
+ transPre32:intvector { -1, 649730088, -1, 1139272496 }
+ trans:intvector { -2019705670, -891581400, -872058600, -862637400, -764145000 }
+ typeOffsets:intvector { 21208, 0, 19270, 0, 19800, 0, 19800, 3600, 21200, 0 }
+ typeMap:bin { "04010203020302" }
+ links:intvector { 255, 286, 513 }
+ } //Z#286
/* Asia/Krasnoyarsk */ :table {
trans:intvector { -1577513486, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288465200, 1301166000, 1414260000 }
typeOffsets:intvector { 22286, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600, 28800, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#286
+ } //Z#287
/* Asia/Kuala_Lumpur */ :table {
transPre32:intvector { -1, 2117490090 }
trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 }
typeOffsets:intvector { 24406, 0, 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "0102030405070506" }
- } //Z#287
+ } //Z#288
/* Asia/Kuching */ :table {
trans:intvector { -1383463280, -1167636600, -1082448000, -1074586800, -1050825600, -1042964400, -1019289600, -1011428400, -987753600, -979892400, -956217600, -948356400, -924595200, -916734000, -893059200, -885198000, -879667200, -767005200 }
typeOffsets:intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 }
typeMap:bin { "010203020302030203020302030203020402" }
- } //Z#288
- /* Asia/Kuwait */ :int { 307 } //Z#289
- /* Asia/Macao */ :int { 291 } //Z#290
+ } //Z#289
+ /* Asia/Kuwait */ :int { 309 } //Z#290
+ /* Asia/Macao */ :int { 292 } //Z#291
/* Asia/Macau */ :table {
- trans:intvector { -1830411260, -277360200, -257405400, -245910600, -225955800, -214473600, -194506200, -182406600, -163056600, -150969600, -131619600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72201600, 87922800, 103651200, 119977200, 135705600, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 261504000, 277225200, 292953600, 309279600, 325008000, 340729200 }
- typeOffsets:intvector { 27260, 0, 28800, 0, 28800, 3600 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 290, 291 }
- } //Z#291
+ trans:intvector { -2056692850, -884509200, -873280800, -855918000, -841744800, -828529200, -765363600, -747046800, -733827600, -716461200, -697021200, -683715600, -667990800, -654771600, -636627600, -623322000, -605178000, -591872400, -573642000, -559818000, -541674000, -528368400, -510224400, -498128400, -478774800, -466678800, -446720400, -435229200, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132820200, -117088200, -101370600, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 }
+ typeOffsets:intvector { 27250, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600 }
+ typeMap:bin { "0103040304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ links:intvector { 291, 292 }
+ } //Z#292
/* Asia/Magadan */ :table {
trans:intvector { -1441188192, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600, 1461427200 }
typeOffsets:intvector { 36192, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 }
typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050103" }
- } //Z#292
+ } //Z#293
/* Asia/Makassar */ :table {
trans:intvector { -1172908656, -880272000, -766054800 }
typeOffsets:intvector { 28656, 0, 28800, 0, 32400, 0 }
typeMap:bin { "010201" }
- links:intvector { 293, 324 }
- } //Z#293
+ links:intvector { 294, 326 }
+ } //Z#294
/* Asia/Manila */ :table {
transPre32:intvector { -1, 350346256, -1, 2065645456 }
trans:intvector { -1046678400, -1038733200, -873273600, -794221200, -496224000, -489315600, 259344000, 275151600 }
typeOffsets:intvector { -57360, 0, 28800, 0, 28800, 3600, 29040, 0, 32400, 0 }
typeMap:bin { "03010201040102010201" }
- } //Z#294
- /* Asia/Muscat */ :int { 264 } //Z#295
+ } //Z#295
+ /* Asia/Muscat */ :int { 265 } //Z#296
/* Asia/Nicosia */ :table {
trans:intvector { -1518920008, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600 }
typeOffsets:intvector { 8008, 0, 7200, 0, 7200, 3600 }
@@ -1517,197 +1520,200 @@ zoneinfo64:table(nofallback) {
finalRule { "EUAsia" }
finalRaw:int { 7200 }
finalYear:int { 2000 }
- links:intvector { 296, 471 }
- } //Z#296
+ links:intvector { 297, 473 }
+ } //Z#297
/* Asia/Novokuznetsk */ :table {
trans:intvector { -1441259328, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288468800, 1301169600 }
typeOffsets:intvector { 20928, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040304030403040304030403020103" }
- } //Z#297
+ } //Z#298
/* Asia/Novosibirsk */ :table {
trans:intvector { -1579476700, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 738086400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1469304000 }
typeOffsets:intvector { 19900, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#298
+ } //Z#299
/* Asia/Omsk */ :table {
trans:intvector { -1582088010, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600 }
typeOffsets:intvector { 17610, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600, 25200, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#299
- /* Asia/Oral */ :table {
- trans:intvector { -1441164324, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 670370400, 686095200, 695772000, 701816400, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
- typeOffsets:intvector { 12324, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
- typeMap:bin { "010304050403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010203" }
} //Z#300
- /* Asia/Phnom_Penh */ :int { 249 } //Z#301
+ /* Asia/Oral */ :table {
+ trans:intvector { -1441164324, -1247540400, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622591200, 638316000, 654645600, 670370400, 686095200, 695772000, 701816400, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600 }
+ typeOffsets:intvector { 12324, 0, 10800, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
+ typeMap:bin { "010405060504050405040504050405040504030203020302040302030203020302030203020302030203020302030203020304" }
+ } //Z#301
+ /* Asia/Phnom_Penh */ :int { 250 } //Z#302
/* Asia/Pontianak */ :table {
trans:intvector { -1172906240, -881220600, -766054800, -683883000, -620812800, -189415800, 567964800 }
typeOffsets:intvector { 26240, 0, 25200, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "02040203020301" }
- } //Z#302
+ } //Z#303
/* Asia/Pyongyang */ :table {
- trans:intvector { -1948782180, -1830414600, 1439564400 }
+ trans:intvector { -1948782180, -1830414600, 1439564400, 1525446000 }
typeOffsets:intvector { 30180, 0, 30600, 0, 32400, 0 }
- typeMap:bin { "010201" }
- } //Z#303
+ typeMap:bin { "01020102" }
+ } //Z#304
/* Asia/Qatar */ :table {
trans:intvector { -1577935568, 76190400 }
typeOffsets:intvector { 12368, 0, 10800, 0, 14400, 0 }
typeMap:bin { "0201" }
- links:intvector { 247, 304 }
- } //Z#304
+ links:intvector { 248, 305 }
+ } //Z#305
+ /* Asia/Qostanay */ :table {
+ trans:intvector { -1441167268, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 }
+ typeOffsets:intvector { 15268, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
+ typeMap:bin { "010304050403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030405" }
+ } //Z#306
/* Asia/Qyzylorda */ :table {
- trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695768400, 701812800, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 }
+ trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695768400, 701812800, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1545328800 }
typeOffsets:intvector { 15712, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
- typeMap:bin { "010304050403040304030403040304030403040304030203050403040304030403040304030403040304030403040304030405" }
- } //Z#305
- /* Asia/Rangoon */ :int { 332 } //Z#306
+ typeMap:bin { "01030405040304030403040304030403040304030403020305040304030403040304030403040304030403040304030403040503" }
+ } //Z#307
+ /* Asia/Rangoon */ :int { 334 } //Z#308
/* Asia/Riyadh */ :table {
trans:intvector { -719636812 }
typeOffsets:intvector { 11212, 0, 10800, 0 }
typeMap:bin { "01" }
- links:intvector { 237, 289, 307 }
- } //Z#307
- /* Asia/Saigon */ :int { 270 } //Z#308
+ links:intvector { 238, 290, 309 }
+ } //Z#309
+ /* Asia/Saigon */ :int { 271 } //Z#310
/* Asia/Sakhalin */ :table {
trans:intvector { -2031039048, -768560400, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200, 1459008000 }
typeOffsets:intvector { 34248, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600 }
typeMap:bin { "010405040504050405040504050405040504050405040302040504050405040504050403020302030203020302030203020302030203020302030203020302040204" }
- } //Z#309
+ } //Z#311
/* Asia/Samarkand */ :table {
trans:intvector { -1441168073, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686091600 }
typeOffsets:intvector { 16073, 0, 14400, 0, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010203040302030203020302030203020302030203020302" }
- } //Z#310
+ } //Z#312
/* Asia/Seoul */ :table {
trans:intvector { -1948782472, -1830414600, -498128400, -462702600, -451733400, -429784200, -418296600, -399544200, -387451800, -368094600, -356002200, -336645000, -324552600, -305195400, -293103000, -264933000, 547578000, 560883600, 579027600, 592333200 }
typeOffsets:intvector { 30472, 0, 30600, 0, 30600, 3600, 32400, 0, 32400, 3600 }
typeMap:bin { "0103010201020102010201020102010304030403" }
- links:intvector { 311, 595 }
- } //Z#311
+ links:intvector { 313, 597 }
+ } //Z#313
/* Asia/Shanghai */ :table {
transPre32:intvector { -1, 2117485353 }
- trans:intvector { -933494400, -923130000, -908784000, -891594000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 }
+ trans:intvector { -933667200, -922093200, -908870400, -888829200, -881049600, -767869200, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -650019600, 515527200, 527014800, 545162400, 558464400, 577216800, 589914000, 608666400, 621968400, 640116000, 653418000, 671565600, 684867600 }
typeOffsets:intvector { 29143, 0, 28800, 0, 28800, 3600 }
- typeMap:bin { "0102010201020102010201020102010201" }
- links:intvector { 257, 258, 268, 312, 381, 545 }
- } //Z#312
+ typeMap:bin { "010201020102010201020102010201020102010201020102010201" }
+ links:intvector { 258, 259, 269, 314, 383, 547 }
+ } //Z#314
/* Asia/Singapore */ :table {
trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 }
typeOffsets:intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "01020304060405" }
- links:intvector { 313, 597 }
- } //Z#313
+ links:intvector { 315, 599 }
+ } //Z#315
/* Asia/Srednekolymsk */ :table {
trans:intvector { -1441188892, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600 }
typeOffsets:intvector { 36892, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#314
+ } //Z#316
/* Asia/Taipei */ :table {
transPre32:intvector { -1, 1959718936 }
trans:intvector { -1017820800, -766224000, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 299606400, 307551600 }
typeOffsets:intvector { 29160, 0, 28800, 0, 28800, 3600, 32400, 0 }
typeMap:bin { "0103010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 315, 594 }
- } //Z#315
+ links:intvector { 317, 596 }
+ } //Z#317
/* Asia/Tashkent */ :table {
trans:intvector { -1441168631, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600 }
typeOffsets:intvector { 16631, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201" }
- } //Z#316
+ } //Z#318
/* Asia/Tbilisi */ :table {
trans:intvector { -1441162751, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701816400, 717537600, 733266000, 748987200, 764715600, 780436800, 796161600, 811882800, 828216000, 877806000, 891115200, 909255600, 922564800, 941310000, 954014400, 972759600, 985464000, 1004209200, 1017518400, 1035658800, 1048968000, 1067108400, 1080417600, 1088276400, 1099177200, 1111878000 }
typeOffsets:intvector { 10751, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "0103040304030403040304030403040304030403040302010201020102030403040304030403040304030403040304020103" }
- } //Z#317
+ } //Z#319
/* Asia/Tehran */ :table {
- trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800 }
+ trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800, 2121193800, 2137087800 }
+ transPost32:intvector { 0, -2142151096, 0, -2126257096, 0, -2110615096, 0, -2094721096, 0, -2079079096, 0, -2063185096, 0, -2047543096, 0, -2031649096, 0, -2015920696, 0, -2000026696, 0, -1984384696, 0, -1968490696, 0, -1952848696, 0, -1936954696, 0, -1921312696, 0, -1905418696, 0, -1889690296, 0, -1873796296, 0, -1858154296, 0, -1842260296, 0, -1826618296, 0, -1810724296, 0, -1795082296, 0, -1779188296, 0, -1763459896, 0, -1747565896, 0, -1731923896, 0, -1716029896, 0, -1700387896, 0, -1684493896, 0, -1668851896, 0, -1652957896, 0, -1637229496, 0, -1621335496, 0, -1605693496, 0, -1589799496, 0, -1574157496, 0, -1558263496, 0, -1542621496, 0, -1526727496, 0, -1510999096, 0, -1495105096, 0, -1479463096, 0, -1463569096, 0, -1447927096, 0, -1432033096, 0, -1416391096, 0, -1400497096, 0, -1384855096, 0, -1368961096, 0, -1353232696, 0, -1337338696, 0, -1321696696, 0, -1305802696, 0, -1290160696, 0, -1274266696, 0, -1258624696, 0, -1242730696, 0, -1227002296, 0, -1211108296, 0, -1195466296, 0, -1179572296, 0, -1163930296, 0, -1148036296, 0, -1132394296, 0, -1116500296, 0, -1100771896, 0, -1084877896, 0, -1069235896, 0, -1053341896, 0, -1037699896, 0, -1021805896, 0, -1006163896, 0, -990269896, 0, -974541496, 0, -958647496, 0, -943005496, 0, -927111496, 0, -911469496, 0, -895575496, 0, -879933496, 0, -864039496, 0, -848311096, 0, -832417096, 0, -816775096, 0, -800881096, 0, -785239096, 0, -769345096, 0, -753703096, 0, -737809096, 0, -722080696, 0, -706186696, 0, -690544696, 0, -674650696, 0, -659008696, 0, -643114696, 0, -627472696, 0, -611578696, 0, -595850296, 0, -579956296, 0, -564314296, 0, -548420296 }
typeOffsets:intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 }
- typeMap:bin { "01030403010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Iran" }
finalRaw:int { 12600 }
- finalYear:int { 2037 }
- links:intvector { 318, 524 }
- } //Z#318
- /* Asia/Tel_Aviv */ :int { 277 } //Z#319
- /* Asia/Thimbu */ :int { 321 } //Z#320
+ finalYear:int { 2089 }
+ links:intvector { 320, 526 }
+ } //Z#320
+ /* Asia/Tel_Aviv */ :int { 278 } //Z#321
+ /* Asia/Thimbu */ :int { 323 } //Z#322
/* Asia/Thimphu */ :table {
trans:intvector { -706341516, 560025000 }
typeOffsets:intvector { 21516, 0, 19800, 0, 21600, 0 }
typeMap:bin { "0102" }
- links:intvector { 320, 321 }
- } //Z#321
+ links:intvector { 322, 323 }
+ } //Z#323
/* Asia/Tokyo */ :table {
transPre32:intvector { -1, 1707254896 }
- trans:intvector { -683794800, -672393600, -654764400, -640944000, -620290800, -609494400, -588841200, -578044800 }
+ trans:intvector { -683802000, -672310800, -654771600, -640861200, -620298000, -609411600, -588848400, -577962000 }
typeOffsets:intvector { 33539, 0, 32400, 0, 32400, 3600 }
typeMap:bin { "010201020102010201" }
- links:intvector { 322, 526, 528 }
- } //Z#322
+ links:intvector { 324, 528, 530 }
+ } //Z#324
/* Asia/Tomsk */ :table {
trans:intvector { -1578807591, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1020193200, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1464465600 }
typeOffsets:intvector { 20391, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304020102010201020102010201020102010201030103" }
- } //Z#323
- /* Asia/Ujung_Pandang */ :int { 293 } //Z#324
+ } //Z#325
+ /* Asia/Ujung_Pandang */ :int { 294 } //Z#326
/* Asia/Ulaanbaatar */ :table {
- trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200 }
+ trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200, 1458928800, 1474642800 }
typeOffsets:intvector { 25652, 0, 25200, 0, 28800, 0, 28800, 3600 }
- typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- finalRule { "Mongol" }
- finalRaw:int { 28800 }
- finalYear:int { 2016 }
- links:intvector { 325, 326 }
- } //Z#325
- /* Asia/Ulan_Bator */ :int { 325 } //Z#326
+ typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
+ links:intvector { 327, 328 }
+ } //Z#327
+ /* Asia/Ulan_Bator */ :int { 327 } //Z#328
/* Asia/Urumqi */ :table {
trans:intvector { -1325483420 }
typeOffsets:intvector { 21020, 0, 21600, 0 }
typeMap:bin { "01" }
- links:intvector { 281, 327 }
- } //Z#327
+ links:intvector { 282, 329 }
+ } //Z#329
/* Asia/Ust-Nera */ :table {
trans:intvector { -1579426374, -1247558400, 354898800, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1315828800, 1414249200 }
typeOffsets:intvector { 34374, 0, 28800, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 }
typeMap:bin { "010206050605060506050605060506050605060506050403050605060506050605060506050605060506050605060506050605060506050605060506050605070503" }
- } //Z#328
- /* Asia/Vientiane */ :int { 249 } //Z#329
+ } //Z#330
+ /* Asia/Vientiane */ :int { 250 } //Z#331
/* Asia/Vladivostok */ :table {
trans:intvector { -1487321251, -1247562000, 354895200, 370702800, 386431200, 402238800, 417967200, 433774800, 449589600, 465321600, 481046400, 496771200, 512496000, 528220800, 543945600, 559670400, 575395200, 591120000, 606844800, 622569600, 638294400, 654624000, 670348800, 686077200, 695754000, 701798400, 717523200, 733248000, 748972800, 764697600, 780422400, 796147200, 811872000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200 }
typeOffsets:intvector { 31651, 0, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#330
+ } //Z#332
/* Asia/Yakutsk */ :table {
trans:intvector { -1579423138, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800 }
typeOffsets:intvector { 31138, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#331
+ } //Z#333
/* Asia/Yangon */ :table {
- trans:intvector { -1577946280, -873268200, -778410000 }
- typeOffsets:intvector { 23080, 0, 23400, 0, 32400, 0 }
+ trans:intvector { -1577946287, -873268200, -778410000 }
+ typeOffsets:intvector { 23087, 0, 23400, 0, 32400, 0 }
typeMap:bin { "010201" }
- links:intvector { 306, 332 }
- } //Z#332
+ links:intvector { 308, 334 }
+ } //Z#334
/* Asia/Yekaterinburg */ :table {
trans:intvector { -1688270553, -1592610305, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1111870800, 1130619600, 1143320400, 1162069200, 1174770000, 1193518800, 1206824400, 1224968400, 1238274000, 1256418000, 1269723600, 1288472400, 1301173200, 1414267200 }
typeOffsets:intvector { 14553, 0, 13505, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010204050405040504050405040504050405040504050403020405040504050405040504050405040504050405040504050405040504050405040504050405040604" }
- } //Z#333
+ } //Z#335
/* Asia/Yerevan */ :table {
trans:intvector { -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288476000, 1301176800, 1319925600 }
typeOffsets:intvector { 10680, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "0103040304030403040304030403040304030403040302010201020102010203040304030403040304030403040304030403040304030403040304030403" }
- links:intvector { 334, 538 }
- } //Z#334
+ links:intvector { 336, 540 }
+ } //Z#336
/* Atlantic/Azores */ :table {
transPre32:intvector { -1, 1581063056 }
- trans:intvector { -1830377128, -1689548400, -1677794400, -1667430000, -1647730800, -1635807600, -1616194800, -1604358000, -1584658800, -1572735600, -1553036400, -1541199600, -1521500400, -1442444400, -1426806000, -1379286000, -1364770800, -1348441200, -1333321200, -1316386800, -1301266800, -1284332400, -1269817200, -1221433200, -1206918000, -1191193200, -1175468400, -1127689200, -1111964400, -1096844400, -1080514800, -1063580400, -1049065200, -1033340400, -1017615600, -1002495600, -986166000, -969231600, -950482800, -942015600, -922662000, -906937200, -891126000, -877302000, -873676800, -864000000, -857948400, -845852400, -842832000, -831340800, -825894000, -814402800, -810777600, -799891200, -794444400, -782953200, -779328000, -768441600, -762994800, -749084400, -733359600, -717624000, -701899200, -686174400, -670449600, -654724800, -639000000, -591825600, -575496000, -559771200, -544046400, -528321600, -512596800, -496872000, -481147200, -465422400, -449697600, -433972800, -417643200, -401918400, -386193600, -370468800, -354744000, -339019200, -323294400, -307569600, -291844800, -276120000, -260395200, -244670400, -228340800, -212616000, -196891200, -181166400, -165441600, -149716800, -133992000, -118267200, 228272400, 243997200, 260326800, 276051600, 291776400, 307504800, 323226000, 338954400, 354679200, 370404000, 386128800, 401853600, 417582000, 433303200, 449028000, 465357600, 481082400, 496807200, 512532000, 528256800, 543981600, 559706400, 575431200, 591156000, 606880800, 622605600, 638330400, 654660000, 670384800, 686109600, 701834400, 717559200, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+ trans:intvector { -1830376800, -1689548400, -1677794400, -1667430000, -1647730800, -1635807600, -1616194800, -1604358000, -1584658800, -1572735600, -1553036400, -1541199600, -1521500400, -1442444400, -1426806000, -1379286000, -1364770800, -1348441200, -1333321200, -1316386800, -1301266800, -1284332400, -1269817200, -1221433200, -1206918000, -1191193200, -1175468400, -1127689200, -1111964400, -1096844400, -1080514800, -1063580400, -1049065200, -1033340400, -1017615600, -1002495600, -986166000, -969231600, -950482800, -942015600, -922662000, -906937200, -891126000, -877302000, -873676800, -864000000, -857948400, -845852400, -842832000, -831340800, -825894000, -814402800, -810777600, -799891200, -794444400, -782953200, -779328000, -768441600, -762994800, -749084400, -733359600, -717624000, -701899200, -686174400, -670449600, -654724800, -639000000, -591825600, -575496000, -559771200, -544046400, -528321600, -512596800, -496872000, -481147200, -465422400, -449697600, -433972800, -417643200, -401918400, -386193600, -370468800, -354744000, -339019200, -323294400, -307569600, -291844800, -276120000, -260395200, -244670400, -228340800, -212616000, -196891200, -181166400, -165441600, -149716800, -133992000, -118267200, 228272400, 243997200, 260326800, 276051600, 291776400, 307504800, 323226000, 338954400, 354679200, 370404000, 386128800, 401853600, 417582000, 433303200, 449028000, 465357600, 481082400, 496807200, 512532000, 528256800, 543981600, 559706400, 575431200, 591156000, 606880800, 622605600, 638330400, 654660000, 670384800, 686109600, 701834400, 717559200, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -6160, 0, -7200, 0, -7200, 3600, -7200, 7200, -6872, 0, -3600, 0, -3600, 3600, 0, 0 }
typeMap:bin { "04010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203020102030201020302010203020102010201020102010201020102010201020102010201020102010201020102010201020102010506050605060506050605060506050605060506050605060506050605060506070605060506050605" }
finalRule { "EU" }
finalRaw:int { -3600 }
finalYear:int { 1997 }
- } //Z#335
+ } //Z#337
/* Atlantic/Bermuda */ :table {
trans:intvector { -1262281242, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
typeOffsets:intvector { -15558, 0, -14400, 0, -14400, 3600 }
@@ -1715,7 +1721,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -14400 }
finalYear:int { 2008 }
- } //Z#336
+ } //Z#338
/* Atlantic/Canary */ :table {
trans:intvector { -1509663504, -733874400, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -3696, 0, -3600, 0, 0, 0, 0, 3600 }
@@ -1723,13 +1729,13 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#337
+ } //Z#339
/* Atlantic/Cape_Verde */ :table {
- trans:intvector { -1988144756, -862610400, -764118000, 186120000 }
+ trans:intvector { -1830376800, -862610400, -764118000, 186120000 }
typeOffsets:intvector { -5644, 0, -7200, 0, -7200, 3600, -3600, 0 }
typeMap:bin { "01020103" }
- } //Z#338
- /* Atlantic/Faeroe */ :int { 340 } //Z#339
+ } //Z#340
+ /* Atlantic/Faeroe */ :int { 342 } //Z#341
/* Atlantic/Faroe */ :table {
trans:intvector { -1955748776, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -1624, 0, 0, 0, 0, 3600 }
@@ -1737,35 +1743,35 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 339, 340 }
- } //Z#340
- /* Atlantic/Jan_Mayen */ :int { 472 } //Z#341
+ links:intvector { 341, 342 }
+ } //Z#342
+ /* Atlantic/Jan_Mayen */ :int { 474 } //Z#343
/* Atlantic/Madeira */ :table {
- trans:intvector { -1830379944, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+ trans:intvector { -1830380400, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -4056, 0, -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203020102030201020302010203020102010201020102010201020102010201020102010201020102010201020102010201020102010405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#342
+ } //Z#344
/* Atlantic/Reykjavik */ :table {
trans:intvector { -1956609120, -1668211200, -1647212400, -1636675200, -1613430000, -1605139200, -1581894000, -1539561600, -1531350000, -968025600, -952293600, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 }
typeOffsets:intvector { -5280, 0, -3600, 0, -3600, 3600, 0, 0 }
typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- links:intvector { 343, 512 }
- } //Z#343
+ links:intvector { 345, 514 }
+ } //Z#345
/* Atlantic/South_Georgia */ :table {
transPre32:intvector { -1, 1770454464 }
typeOffsets:intvector { -8768, 0, -7200, 0 }
typeMap:bin { "01" }
- } //Z#344
- /* Atlantic/St_Helena */ :int { 5 } //Z#345
+ } //Z#346
+ /* Atlantic/St_Helena */ :int { 5 } //Z#347
/* Atlantic/Stanley */ :table {
trans:intvector { -1824235716, -1018209600, -1003093200, -986760000, -971643600, -954705600, -939589200, -923256000, -908139600, -891806400, -876690000, -860356800, -852066000, 420609600, 433306800, 452052000, 464151600, 483501600, 495601200, 514350000, 527054400, 545799600, 558504000, 577249200, 589953600, 608698800, 621403200, 640753200, 652852800, 672202800, 684907200, 703652400, 716356800, 735102000, 747806400, 766551600, 779256000, 798001200, 810705600, 830055600, 842760000, 861505200, 874209600, 892954800, 905659200, 924404400, 937108800, 955854000, 968558400, 987310800, 999410400, 1019365200, 1030860000, 1050814800, 1062914400, 1082264400, 1094364000, 1113714000, 1125813600, 1145163600, 1157263200, 1176613200, 1188712800, 1208667600, 1220767200, 1240117200, 1252216800, 1271566800, 1283666400 }
typeOffsets:intvector { -13884, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
typeMap:bin { "010201020102010201020102010304030403020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- } //Z#346
- /* Australia/ACT */ :int { 365 } //Z#347
+ } //Z#348
+ /* Australia/ACT */ :int { 367 } //Z#349
/* Australia/Adelaide */ :table {
transPre32:intvector { -1, 1930857236, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 384280200, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 637691400, 657045000, 667931400, 688494600, 701195400, 719944200, 731435400, 751998600, 764094600, 783448200, 796149000, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 }
@@ -1774,15 +1780,15 @@ zoneinfo64:table(nofallback) {
finalRule { "AS" }
finalRaw:int { 34200 }
finalYear:int { 2009 }
- links:intvector { 348, 364 }
- } //Z#348
+ links:intvector { 350, 366 }
+ } //Z#350
/* Australia/Brisbane */ :table {
transPre32:intvector { -1, 1928175368 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200 }
typeOffsets:intvector { 36728, 0, 36000, 0, 36000, 3600 }
typeMap:bin { "0102010201020102010201020102010201" }
- links:intvector { 349, 363 }
- } //Z#349
+ links:intvector { 351, 365 }
+ } //Z#351
/* Australia/Broken_Hill */ :table {
transPre32:intvector { -1, 1930856548, -1, 1980016096, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 386699400, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 636481800, 657045000, 667931400, 688494600, 699381000, 719944200, 731435400, 751998600, 762885000, 783448200, 794334600, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 }
@@ -1791,9 +1797,9 @@ zoneinfo64:table(nofallback) {
finalRule { "AS" }
finalRaw:int { 34200 }
finalYear:int { 2009 }
- links:intvector { 350, 369 }
- } //Z#350
- /* Australia/Canberra */ :int { 365 } //Z#351
+ links:intvector { 352, 371 }
+ } //Z#352
+ /* Australia/Canberra */ :int { 367 } //Z#353
/* Australia/Currie */ :table {
transPre32:intvector { -1, 1949172768 }
trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 }
@@ -1802,20 +1808,20 @@ zoneinfo64:table(nofallback) {
finalRule { "AT" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- } //Z#352
+ } //Z#354
/* Australia/Darwin */ :table {
transPre32:intvector { -1, 1930859096, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400 }
typeOffsets:intvector { 31400, 0, 32400, 0, 34200, 0, 34200, 3600 }
typeMap:bin { "01020302030203020302" }
- links:intvector { 0, 353, 361 }
- } //Z#353
+ links:intvector { 0, 355, 363 }
+ } //Z#355
/* Australia/Eucla */ :table {
transPre32:intvector { -1, 1957038768 }
trans:intvector { -1672562640, -1665387900, -883637100, -876123900, -860395500, -844674300, 152039700, 162926100, 436295700, 447182100, 690311700, 699383700, 1165079700, 1174756500, 1193505300, 1206810900, 1224954900, 1238260500 }
typeOffsets:intvector { 30928, 0, 31500, 0, 31500, 3600 }
typeMap:bin { "01020102010201020102010201020102010201" }
- } //Z#354
+ } //Z#356
/* Australia/Hobart */ :table {
transPre32:intvector { -1, 1949171940 }
trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 }
@@ -1824,15 +1830,15 @@ zoneinfo64:table(nofallback) {
finalRule { "AT" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 355, 366 }
- } //Z#355
- /* Australia/LHI */ :int { 358 } //Z#356
+ links:intvector { 357, 368 }
+ } //Z#357
+ /* Australia/LHI */ :int { 360 } //Z#358
/* Australia/Lindeman */ :table {
transPre32:intvector { -1, 1928176340 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200 }
typeOffsets:intvector { 35756, 0, 36000, 0, 36000, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- } //Z#357
+ } //Z#359
/* Australia/Lord_Howe */ :table {
transPre32:intvector { -1, 1930852316 }
trans:intvector { 352216800, 372785400, 384273000, 404839800, 415722600, 436289400, 447172200, 467739000, 478621800, 499188600, 511282800, 530033400, 542732400, 562087800, 574786800, 594142200, 606236400, 625591800, 636476400, 657041400, 667926000, 688491000, 699375600, 719940600, 731430000, 751995000, 762879600, 783444600, 794329200, 814894200, 828198000, 846343800, 859647600, 877793400, 891097200, 909243000, 922546800, 941297400, 953996400, 967303800, 985446000, 1004196600, 1017500400, 1035646200, 1048950000, 1067095800, 1080399600, 1099150200, 1111849200, 1130599800, 1143903600, 1162049400, 1174748400, 1193499000, 1207407600, 1223134200 }
@@ -1841,8 +1847,8 @@ zoneinfo64:table(nofallback) {
finalRule { "LH" }
finalRaw:int { 37800 }
finalYear:int { 2009 }
- links:intvector { 356, 358 }
- } //Z#358
+ links:intvector { 358, 360 }
+ } //Z#360
/* Australia/Melbourne */ :table {
transPre32:intvector { -1, 1930855704 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 384278400, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 561484800, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 796147200, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 }
@@ -1851,19 +1857,19 @@ zoneinfo64:table(nofallback) {
finalRule { "AV" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 359, 367 }
- } //Z#359
- /* Australia/NSW */ :int { 365 } //Z#360
- /* Australia/North */ :int { 353 } //Z#361
+ links:intvector { 361, 369 }
+ } //Z#361
+ /* Australia/NSW */ :int { 367 } //Z#362
+ /* Australia/North */ :int { 355 } //Z#363
/* Australia/Perth */ :table {
transPre32:intvector { -1, 1957041892 }
trans:intvector { -1672559940, -1665385200, -883634400, -876121200, -860392800, -844671600, 152042400, 162928800, 436298400, 447184800, 690314400, 699386400, 1165082400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200 }
typeOffsets:intvector { 27804, 0, 28800, 0, 28800, 3600 }
typeMap:bin { "01020102010201020102010201020102010201" }
- links:intvector { 362, 368 }
- } //Z#362
- /* Australia/Queensland */ :int { 349 } //Z#363
- /* Australia/South */ :int { 348 } //Z#364
+ links:intvector { 364, 370 }
+ } //Z#364
+ /* Australia/Queensland */ :int { 351 } //Z#365
+ /* Australia/South */ :int { 350 } //Z#366
/* Australia/Sydney */ :table {
transPre32:intvector { -1, 1930854204 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386697600, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 794332800, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 }
@@ -1872,19 +1878,19 @@ zoneinfo64:table(nofallback) {
finalRule { "AN" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 1, 347, 351, 360, 365 }
- } //Z#365
- /* Australia/Tasmania */ :int { 355 } //Z#366
- /* Australia/Victoria */ :int { 359 } //Z#367
- /* Australia/West */ :int { 362 } //Z#368
- /* Australia/Yancowinna */ :int { 350 } //Z#369
- /* BET */ :int { 201 } //Z#370
- /* BST */ :int { 262 } //Z#371
- /* Brazil/Acre */ :int { 195 } //Z#372
- /* Brazil/DeNoronha */ :int { 176 } //Z#373
- /* Brazil/East */ :int { 201 } //Z#374
- /* Brazil/West */ :int { 156 } //Z#375
- /* CAT */ :int { 43 } //Z#376
+ links:intvector { 1, 349, 353, 362, 367 }
+ } //Z#367
+ /* Australia/Tasmania */ :int { 357 } //Z#368
+ /* Australia/Victoria */ :int { 361 } //Z#369
+ /* Australia/West */ :int { 364 } //Z#370
+ /* Australia/Yancowinna */ :int { 352 } //Z#371
+ /* BET */ :int { 202 } //Z#372
+ /* BST */ :int { 263 } //Z#373
+ /* Brazil/Acre */ :int { 196 } //Z#374
+ /* Brazil/DeNoronha */ :int { 176 } //Z#375
+ /* Brazil/East */ :int { 202 } //Z#376
+ /* Brazil/West */ :int { 156 } //Z#377
+ /* CAT */ :int { 43 } //Z#378
/* CET */ :table {
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 3600, 0, 3600, 3600 }
@@ -1892,9 +1898,9 @@ zoneinfo64:table(nofallback) {
finalRule { "C-Eur" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#377
- /* CNT */ :int { 206 } //Z#378
- /* CST */ :int { 98 } //Z#379
+ } //Z#379
+ /* CNT */ :int { 207 } //Z#380
+ /* CST */ :int { 98 } //Z#381
/* CST6CDT */ :table {
trans:intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -765392400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
typeOffsets:intvector { -21600, 0, -21600, 3600 }
@@ -1902,22 +1908,22 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#380
- /* CTT */ :int { 312 } //Z#381
- /* Canada/Atlantic */ :int { 128 } //Z#382
- /* Canada/Central */ :int { 221 } //Z#383
- /* Canada/East-Saskatchewan */ :int { 193 } //Z#384
- /* Canada/Eastern */ :int { 216 } //Z#385
- /* Canada/Mountain */ :int { 112 } //Z#386
- /* Canada/Newfoundland */ :int { 206 } //Z#387
- /* Canada/Pacific */ :int { 218 } //Z#388
- /* Canada/Saskatchewan */ :int { 193 } //Z#389
- /* Canada/Yukon */ :int { 220 } //Z#390
- /* Chile/Continental */ :int { 199 } //Z#391
- /* Chile/EasterIsland */ :int { 554 } //Z#392
- /* Cuba */ :int { 129 } //Z#393
- /* EAT */ :int { 48 } //Z#394
- /* ECT */ :int { 473 } //Z#395
+ } //Z#382
+ /* CTT */ :int { 314 } //Z#383
+ /* Canada/Atlantic */ :int { 128 } //Z#384
+ /* Canada/Central */ :int { 222 } //Z#385
+ /* Canada/East-Saskatchewan */ :int { 194 } //Z#386
+ /* Canada/Eastern */ :int { 217 } //Z#387
+ /* Canada/Mountain */ :int { 112 } //Z#388
+ /* Canada/Newfoundland */ :int { 207 } //Z#389
+ /* Canada/Pacific */ :int { 219 } //Z#390
+ /* Canada/Saskatchewan */ :int { 194 } //Z#391
+ /* Canada/Yukon */ :int { 221 } //Z#392
+ /* Chile/Continental */ :int { 200 } //Z#393
+ /* Chile/EasterIsland */ :int { 556 } //Z#394
+ /* Cuba */ :int { 129 } //Z#395
+ /* EAT */ :int { 48 } //Z#396
+ /* ECT */ :int { 475 } //Z#397
/* EET */ :table {
trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 7200, 0, 7200, 3600 }
@@ -1925,10 +1931,10 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#396
+ } //Z#398
/* EST */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#397
+ } //Z#399
/* EST5EDT */ :table {
trans:intvector { -1633280400, -1615140000, -1601830800, -1583690400, -880218000, -765396000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
typeOffsets:intvector { -18000, 0, -18000, 3600 }
@@ -1936,108 +1942,105 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- } //Z#398
- /* Egypt */ :int { 18 } //Z#399
- /* Eire */ :int { 451 } //Z#400
+ } //Z#400
+ /* Egypt */ :int { 18 } //Z#401
+ /* Eire */ :int { 453 } //Z#402
/* Etc/GMT */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 401, 402, 415, 430, 431, 503, 504, 505, 506, 507 }
- } //Z#401
- /* Etc/GMT+0 */ :int { 401 } //Z#402
+ links:intvector { 403, 404, 417, 432, 433, 505, 506, 507, 508, 509 }
+ } //Z#403
+ /* Etc/GMT+0 */ :int { 403 } //Z#404
/* Etc/GMT+1 */ :table {
typeOffsets:intvector { -3600, 0 }
- } //Z#403
+ } //Z#405
/* Etc/GMT+10 */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#404
+ } //Z#406
/* Etc/GMT+11 */ :table {
typeOffsets:intvector { -39600, 0 }
- } //Z#405
+ } //Z#407
/* Etc/GMT+12 */ :table {
typeOffsets:intvector { -43200, 0 }
- } //Z#406
+ } //Z#408
/* Etc/GMT+2 */ :table {
typeOffsets:intvector { -7200, 0 }
- } //Z#407
+ } //Z#409
/* Etc/GMT+3 */ :table {
typeOffsets:intvector { -10800, 0 }
- } //Z#408
+ } //Z#410
/* Etc/GMT+4 */ :table {
typeOffsets:intvector { -14400, 0 }
- } //Z#409
+ } //Z#411
/* Etc/GMT+5 */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#410
+ } //Z#412
/* Etc/GMT+6 */ :table {
typeOffsets:intvector { -21600, 0 }
- } //Z#411
+ } //Z#413
/* Etc/GMT+7 */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#412
+ } //Z#414
/* Etc/GMT+8 */ :table {
typeOffsets:intvector { -28800, 0 }
- } //Z#413
+ } //Z#415
/* Etc/GMT+9 */ :table {
typeOffsets:intvector { -32400, 0 }
- } //Z#414
- /* Etc/GMT-0 */ :int { 401 } //Z#415
+ } //Z#416
+ /* Etc/GMT-0 */ :int { 403 } //Z#417
/* Etc/GMT-1 */ :table {
typeOffsets:intvector { 3600, 0 }
- } //Z#416
+ } //Z#418
/* Etc/GMT-10 */ :table {
typeOffsets:intvector { 36000, 0 }
- } //Z#417
+ } //Z#419
/* Etc/GMT-11 */ :table {
typeOffsets:intvector { 39600, 0 }
- } //Z#418
+ } //Z#420
/* Etc/GMT-12 */ :table {
typeOffsets:intvector { 43200, 0 }
- } //Z#419
+ } //Z#421
/* Etc/GMT-13 */ :table {
typeOffsets:intvector { 46800, 0 }
- } //Z#420
+ } //Z#422
/* Etc/GMT-14 */ :table {
typeOffsets:intvector { 50400, 0 }
- } //Z#421
+ } //Z#423
/* Etc/GMT-2 */ :table {
typeOffsets:intvector { 7200, 0 }
- } //Z#422
+ } //Z#424
/* Etc/GMT-3 */ :table {
typeOffsets:intvector { 10800, 0 }
- } //Z#423
+ } //Z#425
/* Etc/GMT-4 */ :table {
typeOffsets:intvector { 14400, 0 }
- } //Z#424
+ } //Z#426
/* Etc/GMT-5 */ :table {
typeOffsets:intvector { 18000, 0 }
- } //Z#425
+ } //Z#427
/* Etc/GMT-6 */ :table {
typeOffsets:intvector { 21600, 0 }
- } //Z#426
+ } //Z#428
/* Etc/GMT-7 */ :table {
typeOffsets:intvector { 25200, 0 }
- } //Z#427
+ } //Z#429
/* Etc/GMT-8 */ :table {
typeOffsets:intvector { 28800, 0 }
- } //Z#428
+ } //Z#430
/* Etc/GMT-9 */ :table {
typeOffsets:intvector { 32400, 0 }
- } //Z#429
- /* Etc/GMT0 */ :int { 401 } //Z#430
- /* Etc/Greenwich */ :int { 401 } //Z#431
- /* Etc/UCT */ :table {
- typeOffsets:intvector { 0, 0 }
- links:intvector { 432, 612 }
- } //Z#432
+ } //Z#431
+ /* Etc/GMT0 */ :int { 403 } //Z#432
+ /* Etc/Greenwich */ :int { 403 } //Z#433
+ /* Etc/UCT */ :int { 435 } //Z#434
/* Etc/UTC */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 433, 434, 436, 626, 627, 631 }
- } //Z#433
- /* Etc/Universal */ :int { 433 } //Z#434
+ links:intvector { 434, 435, 436, 438, 614, 628, 629, 633 }
+ } //Z#435
+ /* Etc/Universal */ :int { 435 } //Z#436
/* Etc/Unknown */ :table {
typeOffsets:intvector { 0, 0 }
- } //Z#435
- /* Etc/Zulu */ :int { 433 } //Z#436
+ } //Z#437
+ /* Etc/Zulu */ :int { 435 } //Z#438
/* Europe/Amsterdam */ :table {
trans:intvector { -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1124489972, -1111961972, -1092953972, -1080512372, -1061331572, -1049062772, -1029190772, -1025745572, -1017613200, -998259600, -986163600, -966723600, -954109200, -935022000, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 }
@@ -2045,7 +2048,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#437
+ } //Z#439
/* Europe/Andorra */ :table {
transPre32:intvector { -1, 2117514132 }
trans:intvector { -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2054,12 +2057,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#438
+ } //Z#440
/* Europe/Astrakhan */ :table {
trans:intvector { -1441249932, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 }
typeOffsets:intvector { 11532, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "01030403040304030403040304030403040302010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#439
+ } //Z#441
/* Europe/Athens */ :table {
trans:intvector { -1686101632, -1182996000, -1178161200, -906861600, -904878000, -857257200, -844477200, -828237600, -812422800, -552362400, -541652400, 166485600, 186184800, 198028800, 213753600, 228873600, 244080000, 260323200, 275446800, 291798000, 307407600, 323388000, 338936400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5692, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 }
@@ -2067,8 +2070,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#440
- /* Europe/Belfast */ :int { 463 } //Z#441
+ } //Z#442
+ /* Europe/Belfast */ :int { 465 } //Z#443
/* Europe/Belgrade */ :table {
transPre32:intvector { -1, 1581051976 }
trans:intvector { -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2077,8 +2080,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 442, 462, 474, 480, 483, 497 }
- } //Z#442
+ links:intvector { 444, 464, 476, 482, 485, 499 }
+ } //Z#444
/* Europe/Berlin */ :table {
transPre32:intvector { -1, 1872912888 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -776563200, -765936000, -761180400, -748479600, -733273200, -717631200, -714610800, -710380800, -701910000, -684975600, -670460400, -654130800, -639010800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2087,8 +2090,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#443
- /* Europe/Bratislava */ :int { 475 } //Z#444
+ } //Z#445
+ /* Europe/Bratislava */ :int { 477 } //Z#446
/* Europe/Brussels */ :table {
transPre32:intvector { -1, 1844014246 }
trans:intvector { -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -934668000, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2097,7 +2100,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#445
+ } //Z#447
/* Europe/Bucharest */ :table {
trans:intvector { -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686095200, 701820000, 717544800, 733269600, 748994400, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
typeOffsets:intvector { 6264, 0, 7200, 0, 7200, 3600 }
@@ -2105,7 +2108,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- } //Z#446
+ } //Z#448
/* Europe/Budapest */ :table {
transPre32:intvector { -1, 1794028316 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1633212000, -1618700400, -1600466400, -1581202800, -906771600, -857257200, -844556400, -828226800, -812502000, -796777200, -778471200, -762660000, -749689200, -733359600, -717634800, -701910000, -686185200, -670460400, -654130800, -639010800, -621990000, -605660400, -492656400, -481168800, -461120400, -449632800, -428547600, -418269600, -397094400, -386809200, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2114,8 +2117,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#447
- /* Europe/Busingen */ :int { 499 } //Z#448
+ } //Z#449
+ /* Europe/Busingen */ :int { 501 } //Z#450
/* Europe/Chisinau */ :table {
transPre32:intvector { -1, 1454819576 }
trans:intvector { -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 641944800, 654652800, 670377600, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859680000, 877824000 }
@@ -2124,8 +2127,8 @@ zoneinfo64:table(nofallback) {
finalRule { "Moldova" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- links:intvector { 449, 488 }
- } //Z#449
+ links:intvector { 451, 490 }
+ } //Z#451
/* Europe/Copenhagen */ :table {
transPre32:intvector { -1, 1896673076 }
trans:intvector { -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2134,17 +2137,17 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#450
+ } //Z#452
/* Europe/Dublin */ :table {
transPre32:intvector { -1, 1473317596 }
- trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733359600, -719445600, -699490800, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
+ trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733356000, -719445600, -699487200, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
typeOffsets:intvector { -1500, 0, -1521, 0, -1521, 3600, 0, 0, 0, 3600, 3600, 0 }
typeMap:bin { "0102030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030405030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 400, 451 }
- } //Z#451
+ links:intvector { 402, 453 }
+ } //Z#453
/* Europe/Gibraltar */ :table {
transPre32:intvector { -1, 1473317380 }
trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2153,8 +2156,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#452
- /* Europe/Guernsey */ :int { 463 } //Z#453
+ } //Z#454
+ /* Europe/Guernsey */ :int { 465 } //Z#455
/* Europe/Helsinki */ :table {
trans:intvector { -1535938789, -875671200, -859773600, 354672000, 370396800, 386121600, 401846400, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5989, 0, 7200, 0, 7200, 3600 }
@@ -2162,23 +2165,23 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- links:intvector { 454, 467 }
- } //Z#454
- /* Europe/Isle_of_Man */ :int { 463 } //Z#455
+ links:intvector { 456, 469 }
+ } //Z#456
+ /* Europe/Isle_of_Man */ :int { 465 } //Z#457
/* Europe/Istanbul */ :table {
transPre32:intvector { -1, 1454819544 }
trans:intvector { -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931140000, -922762800, -917834400, -892436400, -875844000, -857358000, -781063200, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -621828000, -606970800, -590032800, -575434800, -235620000, -228279600, -177732000, -165726000, 10533600, 23835600, 41983200, 55285200, 74037600, 87339600, 107910000, 121219200, 133920000, 152676000, 165362400, 183502800, 202428000, 215557200, 228866400, 245797200, 260316000, 277246800, 308779200, 323827200, 340228800, 354672000, 371678400, 386121600, 403128000, 428446800, 433886400, 482792400, 496702800, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686098800, 701823600, 717548400, 733273200, 748998000, 764118000, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301274000, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396227600, 1414285200, 1427590800, 1446944400, 1459040400, 1473195600 }
typeOffsets:intvector { 6952, 0, 7016, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030504050405040504050403020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" }
- links:intvector { 274, 456, 611 }
- } //Z#456
- /* Europe/Jersey */ :int { 463 } //Z#457
+ links:intvector { 275, 458, 613 }
+ } //Z#458
+ /* Europe/Jersey */ :int { 465 } //Z#459
/* Europe/Kaliningrad */ :table {
transPre32:intvector { -1, 1872911176 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -778730400, -762663600, -757389600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1414278000 }
typeOffsets:intvector { 4920, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "01020102010201020102010201030403050605060506050605060506050605060504030403040304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#458
+ } //Z#460
/* Europe/Kiev */ :table {
trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2186,22 +2189,22 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#459
+ } //Z#461
/* Europe/Kirov */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 11928, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "010304030403040304030403040304030403020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" }
- } //Z#460
+ } //Z#462
/* Europe/Lisbon */ :table {
- trans:intvector { -1830381795, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+ trans:intvector { -1830384000, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -2205, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020302010203020102030201020302010201020102010201020102010201020102010201020102010201020102010201020102010201040102010201020102010201020102010201020102010201020102010201020102040504050405040201" }
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 461, 593 }
- } //Z#461
- /* Europe/Ljubljana */ :int { 442 } //Z#462
+ links:intvector { 463, 595 }
+ } //Z#463
+ /* Europe/Ljubljana */ :int { 444 } //Z#464
/* Europe/London */ :table {
transPre32:intvector { -1, 442304971 }
trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
@@ -2210,8 +2213,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 441, 453, 455, 457, 463, 501, 502 }
- } //Z#463
+ links:intvector { 443, 455, 457, 459, 465, 503, 504 }
+ } //Z#465
/* Europe/Luxembourg */ :table {
trans:intvector { -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -935186400, -857257200, -844556400, -828226800, -812502000, -797986800, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 1476, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 }
@@ -2219,16 +2222,16 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#464
+ } //Z#466
/* Europe/Madrid */ :table {
- transPre32:intvector { -1, 2117515380 }
- trans:intvector { -1661734800, -1648429200, -1631926800, -1616893200, -1601254800, -1585357200, -1442451600, -1427677200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1029114000, -1017622800, -1002848400, -986173200, -969238800, -954118800, -940208400, -873079200, -862538400, -842839200, -828237600, -811389600, -796010400, -779940000, -765421200, -748490400, -733888800, -652327200, -639190800, 135122400, 150246000, 167176800, 181695600, 196812000, 212540400, 228866400, 243990000, 260402400, 276044400, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+ transPre32:intvector { -1, 2117514496 }
+ trans:intvector { -1631926800, -1616889600, -1601168400, -1585353600, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -1284339600, -1269820800, -1026954000, -1017619200, -1001898000, -999482400, -986090400, -954115200, -940208400, -873079200, -862621200, -842839200, -828320400, -811389600, -796870800, -779940000, -765421200, -748490400, -733971600, -652327200, -639018000, 135122400, 150246000, 166572000, 181695600, 196812000, 212540400, 228866400, 243990000, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -884, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
- typeMap:bin { "01020102010201020102010201020102010201020102010203020302030203020304050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
+ typeMap:bin { "0102010201020102010201020102010201020302010405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#465
+ } //Z#467
/* Europe/Malta */ :table {
transPre32:intvector { -1, 1891488612 }
trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812588400, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 102380400, 118105200, 135730800, 148518000, 167187600, 180489600, 198637200, 211939200, 230086800, 243388800, 261536400, 274838400, 292986000, 306288000, 323312400, 338342400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2237,14 +2240,14 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#466
- /* Europe/Mariehamn */ :int { 454 } //Z#467
+ } //Z#468
+ /* Europe/Mariehamn */ :int { 456 } //Z#469
/* Europe/Minsk */ :table {
transPre32:intvector { -1, 1454819880 }
trans:intvector { -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000 }
typeOffsets:intvector { 6616, 0, 3600, 0, 3600, 3600, 6600, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "0304060201020102060706070607060706070607060706070607060504050405040504050405040504050405040504050405040504050405040504050405040504050406" }
- } //Z#468
+ } //Z#470
/* Europe/Monaco */ :table {
transPre32:intvector { -1, 1808287124 }
trans:intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -904438800, -891136800, -877827600, -857257200, -844556400, -828226800, -812502000, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2253,14 +2256,14 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#469
+ } //Z#471
/* Europe/Moscow */ :table {
trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593820800, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400, 0 }
typeMap:bin { "0304030504050706070807060106070607060706070607060706070607060706070602010607060706070607060706070607060706070607060706070607060706070607060706070607060906" }
- links:intvector { 470, 629 }
- } //Z#470
- /* Europe/Nicosia */ :int { 296 } //Z#471
+ links:intvector { 472, 631 }
+ } //Z#472
+ /* Europe/Nicosia */ :int { 297 } //Z#473
/* Europe/Oslo */ :table {
transPre32:intvector { -1, 1928209516 }
trans:intvector { -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2269,8 +2272,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 236, 341, 472 }
- } //Z#472
+ links:intvector { 237, 343, 474 }
+ } //Z#474
/* Europe/Paris */ :table {
trans:intvector { -1855958901, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -932436000, -857257200, -844556400, -828226800, -812502000, -800071200, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 561, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
@@ -2278,19 +2281,19 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 395, 473 }
- } //Z#473
- /* Europe/Podgorica */ :int { 442 } //Z#474
+ links:intvector { 397, 475 }
+ } //Z#475
+ /* Europe/Podgorica */ :int { 444 } //Z#476
/* Europe/Prague */ :table {
transPre32:intvector { -1, 1825565432 }
- trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -798073200, -780534000, -761180400, -746578800, -733359600, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
- typeOffsets:intvector { 3464, 0, 3600, 0, 3600, 3600 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -746578800, -733359600, -728517600, -721260000, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
+ typeOffsets:intvector { 3464, 0, 0, 0, 3600, 0, 3600, 3600 }
+ typeMap:bin { "02030203020302030203020302030203020102030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 444, 475 }
- } //Z#475
+ links:intvector { 446, 477 }
+ } //Z#477
/* Europe/Riga */ :table {
trans:intvector { -1632008194, -1618702594, -1601681794, -1597275394, -1377308194, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 843955200, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 985482000, 1004230800 }
typeOffsets:intvector { 5794, 0, 3600, 0, 3600, 3600, 5794, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2298,7 +2301,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2002 }
- } //Z#476
+ } //Z#478
/* Europe/Rome */ :table {
transPre32:intvector { -1, 1891402096 }
trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 107910000, 118191600, 138754800, 149641200, 170809200, 181090800, 202258800, 212540400, 233103600, 243990000, 265158000, 276044400, 296607600, 307494000, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2307,27 +2310,27 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 477, 479, 492 }
- } //Z#477
+ links:intvector { 479, 481, 494 }
+ } //Z#479
/* Europe/Samara */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701820000, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288479600, 1301180400 }
typeOffsets:intvector { 12020, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "02040504050405040504050405040504050403020302010204050405040504050405040504050405040504050405040504050405040504050405040504030204" }
- } //Z#478
- /* Europe/San_Marino */ :int { 477 } //Z#479
- /* Europe/Sarajevo */ :int { 442 } //Z#480
+ } //Z#480
+ /* Europe/San_Marino */ :int { 479 } //Z#481
+ /* Europe/Sarajevo */ :int { 444 } //Z#482
/* Europe/Saratov */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1480806000 }
typeOffsets:intvector { 11058, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#481
+ } //Z#483
/* Europe/Simferopol */ :table {
transPre32:intvector { -1, 1454818312 }
trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 }
typeOffsets:intvector { 8184, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600, 14400, 0 }
typeMap:bin { "050306020102010206070607060706070607060706070607060706030403040304070607060706040304030403040304030403040304030403040304030403040304030403040304030806" }
- } //Z#482
- /* Europe/Skopje */ :int { 442 } //Z#483
+ } //Z#484
+ /* Europe/Skopje */ :int { 444 } //Z#485
/* Europe/Sofia */ :table {
transPre32:intvector { -1, 1454820900, -1, 1925440280 }
trans:intvector { -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
@@ -2336,7 +2339,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- } //Z#484
+ } //Z#486
/* Europe/Stockholm */ :table {
transPre32:intvector { -1, 1423286164, -1, 2085974882 }
trans:intvector { -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2345,7 +2348,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#485
+ } //Z#487
/* Europe/Tallinn */ :table {
trans:intvector { -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909277200, 922582800, 941331600, 1017536400, 1035680400 }
typeOffsets:intvector { 5940, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2353,7 +2356,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2003 }
- } //Z#486
+ } //Z#488
/* Europe/Tirane */ :table {
trans:intvector { -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 4760, 0, 3600, 0, 3600, 3600 }
@@ -2361,13 +2364,13 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#487
- /* Europe/Tiraspol */ :int { 449 } //Z#488
+ } //Z#489
+ /* Europe/Tiraspol */ :int { 451 } //Z#490
/* Europe/Ulyanovsk */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 }
typeOffsets:intvector { 11616, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "030506050605060506050605060506050605040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050305" }
- } //Z#489
+ } //Z#491
/* Europe/Uzhgorod */ :table {
transPre32:intvector { -1, 1794027544 }
trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
@@ -2376,9 +2379,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#490
- /* Europe/Vaduz */ :int { 499 } //Z#491
- /* Europe/Vatican */ :int { 477 } //Z#492
+ } //Z#492
+ /* Europe/Vaduz */ :int { 501 } //Z#493
+ /* Europe/Vatican */ :int { 479 } //Z#494
/* Europe/Vienna */ :table {
transPre32:intvector { -1, 1872912175 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -748479600, -733359600, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2387,7 +2390,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#493
+ } //Z#495
/* Europe/Vilnius */ :table {
transPre32:intvector { -1, 1454820420 }
trans:intvector { -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891133200, 909277200, 922582800, 941331600, 1048986000, 1067130000 }
@@ -2396,12 +2399,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2004 }
- } //Z#494
+ } //Z#496
/* Europe/Volgograd */ :table {
- trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
+ trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1540681200 }
typeOffsets:intvector { 10660, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
- typeMap:bin { "010304030403040304030403040304030201020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" }
- } //Z#495
+ typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
+ } //Z#497
/* Europe/Warsaw */ :table {
trans:intvector { -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208396800, -197510400, -176342400, -166060800, 228873600, 243993600, 260323200, 276048000, 291772800, 307497600, 323827200, 338947200, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5040, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 }
@@ -2409,9 +2412,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 496, 592 }
- } //Z#496
- /* Europe/Zagreb */ :int { 442 } //Z#497
+ links:intvector { 498, 594 }
+ } //Z#498
+ /* Europe/Zagreb */ :int { 444 } //Z#499
/* Europe/Zaporozhye */ :table {
transPre32:intvector { -1, 1454818056 }
trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
@@ -2420,7 +2423,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#498
+ } //Z#500
/* Europe/Zurich */ :table {
transPre32:intvector { -1, 619768448, -1, 1909720710 }
trans:intvector { -904435200, -891129600, -872985600, -859680000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2429,75 +2432,75 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 448, 491, 499 }
- } //Z#499
+ links:intvector { 450, 493, 501 }
+ } //Z#501
/* Factory */ :table {
typeOffsets:intvector { 0, 0 }
- } //Z#500
- /* GB */ :int { 463 } //Z#501
- /* GB-Eire */ :int { 463 } //Z#502
- /* GMT */ :int { 401 } //Z#503
- /* GMT+0 */ :int { 401 } //Z#504
- /* GMT-0 */ :int { 401 } //Z#505
- /* GMT0 */ :int { 401 } //Z#506
- /* Greenwich */ :int { 401 } //Z#507
+ } //Z#502
+ /* GB */ :int { 465 } //Z#503
+ /* GB-Eire */ :int { 465 } //Z#504
+ /* GMT */ :int { 403 } //Z#505
+ /* GMT+0 */ :int { 403 } //Z#506
+ /* GMT-0 */ :int { 403 } //Z#507
+ /* GMT0 */ :int { 403 } //Z#508
+ /* Greenwich */ :int { 403 } //Z#509
/* HST */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#508
- /* Hongkong */ :int { 271 } //Z#509
- /* IET */ :int { 131 } //Z#510
- /* IST */ :int { 285 } //Z#511
- /* Iceland */ :int { 343 } //Z#512
- /* Indian/Antananarivo */ :int { 48 } //Z#513
+ } //Z#510
+ /* Hongkong */ :int { 272 } //Z#511
+ /* IET */ :int { 131 } //Z#512
+ /* IST */ :int { 286 } //Z#513
+ /* Iceland */ :int { 345 } //Z#514
+ /* Indian/Antananarivo */ :int { 48 } //Z#515
/* Indian/Chagos */ :table {
trans:intvector { -1988167780, 820436400 }
typeOffsets:intvector { 17380, 0, 18000, 0, 21600, 0 }
typeMap:bin { "0102" }
- } //Z#514
+ } //Z#516
/* Indian/Christmas */ :table {
transPre32:intvector { -1, 1930865124 }
typeOffsets:intvector { 25372, 0, 25200, 0 }
typeMap:bin { "01" }
- } //Z#515
+ } //Z#517
/* Indian/Cocos */ :table {
transPre32:intvector { -1, 2085955236 }
typeOffsets:intvector { 23260, 0, 23400, 0 }
typeMap:bin { "01" }
- } //Z#516
- /* Indian/Comoro */ :int { 48 } //Z#517
+ } //Z#518
+ /* Indian/Comoro */ :int { 48 } //Z#519
/* Indian/Kerguelen */ :table {
trans:intvector { -631152000 }
typeOffsets:intvector { 0, 0, 18000, 0 }
typeMap:bin { "01" }
- } //Z#518
+ } //Z#520
/* Indian/Mahe */ :table {
trans:intvector { -2006653308 }
typeOffsets:intvector { 13308, 0, 14400, 0 }
typeMap:bin { "01" }
- } //Z#519
+ } //Z#521
/* Indian/Maldives */ :table {
trans:intvector { -315636840 }
typeOffsets:intvector { 17640, 0, 18000, 0 }
typeMap:bin { "01" }
- } //Z#520
+ } //Z#522
/* Indian/Mauritius */ :table {
trans:intvector { -1988164200, 403041600, 417034800, 1224972000, 1238274000 }
typeOffsets:intvector { 13800, 0, 14400, 0, 14400, 3600 }
typeMap:bin { "0102010201" }
- } //Z#521
- /* Indian/Mayotte */ :int { 48 } //Z#522
+ } //Z#523
+ /* Indian/Mayotte */ :int { 48 } //Z#524
/* Indian/Reunion */ :table {
trans:intvector { -1848886912 }
typeOffsets:intvector { 13312, 0, 14400, 0 }
typeMap:bin { "01" }
- } //Z#523
- /* Iran */ :int { 318 } //Z#524
- /* Israel */ :int { 277 } //Z#525
- /* JST */ :int { 322 } //Z#526
- /* Jamaica */ :int { 142 } //Z#527
- /* Japan */ :int { 322 } //Z#528
- /* Kwajalein */ :int { 568 } //Z#529
- /* Libya */ :int { 56 } //Z#530
+ } //Z#525
+ /* Iran */ :int { 320 } //Z#526
+ /* Israel */ :int { 278 } //Z#527
+ /* JST */ :int { 324 } //Z#528
+ /* Jamaica */ :int { 142 } //Z#529
+ /* Japan */ :int { 324 } //Z#530
+ /* Kwajalein */ :int { 570 } //Z#531
+ /* Libya */ :int { 56 } //Z#532
/* MET */ :table {
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 3600, 0, 3600, 3600 }
@@ -2505,11 +2508,11 @@ zoneinfo64:table(nofallback) {
finalRule { "C-Eur" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#531
- /* MIT */ :int { 549 } //Z#532
+ } //Z#533
+ /* MIT */ :int { 551 } //Z#534
/* MST */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#533
+ } //Z#535
/* MST7MDT */ :table {
trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
typeOffsets:intvector { -25200, 0, -25200, 3600 }
@@ -2517,20 +2520,20 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- } //Z#534
- /* Mexico/BajaNorte */ :int { 215 } //Z#535
- /* Mexico/BajaSur */ :int { 160 } //Z#536
- /* Mexico/General */ :int { 165 } //Z#537
- /* NET */ :int { 334 } //Z#538
- /* NST */ :int { 550 } //Z#539
- /* NZ */ :int { 550 } //Z#540
- /* NZ-CHAT */ :int { 552 } //Z#541
- /* Navajo */ :int { 109 } //Z#542
- /* PLT */ :int { 280 } //Z#543
- /* PNT */ :int { 184 } //Z#544
- /* PRC */ :int { 312 } //Z#545
- /* PRT */ :int { 189 } //Z#546
- /* PST */ :int { 151 } //Z#547
+ } //Z#536
+ /* Mexico/BajaNorte */ :int { 216 } //Z#537
+ /* Mexico/BajaSur */ :int { 160 } //Z#538
+ /* Mexico/General */ :int { 165 } //Z#539
+ /* NET */ :int { 336 } //Z#540
+ /* NST */ :int { 552 } //Z#541
+ /* NZ */ :int { 552 } //Z#542
+ /* NZ-CHAT */ :int { 554 } //Z#543
+ /* Navajo */ :int { 109 } //Z#544
+ /* PLT */ :int { 281 } //Z#545
+ /* PNT */ :int { 184 } //Z#546
+ /* PRC */ :int { 314 } //Z#547
+ /* PRT */ :int { 189 } //Z#548
+ /* PST */ :int { 151 } //Z#549
/* PST8PDT */ :table {
trans:intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
typeOffsets:intvector { -28800, 0, -28800, 3600 }
@@ -2538,17 +2541,17 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- } //Z#548
+ } //Z#550
/* Pacific/Apia */ :table {
- transPre32:intvector { -1, 1439229312 }
+ transPre32:intvector { -1, 1849542912 }
trans:intvector { -1861878784, -631110600, 1285498800, 1301752800, 1316872800, 1325239200, 1333202400, 1348927200 }
typeOffsets:intvector { 45184, 0, -41400, 0, -41216, 0, -39600, 0, -39600, 3600, 46800, 0, 46800, 3600 }
typeMap:bin { "020103040304060506" }
finalRule { "WS" }
finalRaw:int { 46800 }
finalYear:int { 2013 }
- links:intvector { 532, 549 }
- } //Z#549
+ links:intvector { 534, 551 }
+ } //Z#551
/* Pacific/Auckland */ :table {
transPre32:intvector { -1, 1102531752 }
trans:intvector { -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
@@ -2557,14 +2560,14 @@ zoneinfo64:table(nofallback) {
finalRule { "NZ" }
finalRaw:int { 43200 }
finalYear:int { 2009 }
- links:intvector { 229, 232, 539, 540, 550 }
- } //Z#550
+ links:intvector { 230, 233, 541, 542, 552 }
+ } //Z#552
/* Pacific/Bougainville */ :table {
transPre32:intvector { -1, 1454789160, -1, 1928176784 }
trans:intvector { -868010400, -768906000, 1419696000 }
typeOffsets:intvector { 37336, 0, 32400, 0, 35312, 0, 36000, 0, 39600, 0 }
typeMap:bin { "0203010304" }
- } //Z#551
+ } //Z#553
/* Pacific/Chatham */ :table {
transPre32:intvector { -1, 1102529668 }
trans:intvector { -757426500, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
@@ -2573,40 +2576,41 @@ zoneinfo64:table(nofallback) {
finalRule { "Chatham" }
finalRaw:int { 45900 }
finalYear:int { 2009 }
- links:intvector { 541, 552 }
- } //Z#552
+ links:intvector { 543, 554 }
+ } //Z#554
/* Pacific/Chuuk */ :table {
- transPre32:intvector { -1, 2117478068 }
- typeOffsets:intvector { 36428, 0, 36000, 0 }
- typeMap:bin { "01" }
- links:intvector { 553, 588, 591 }
- } //Z#553
+ transPre32:intvector { -1, 350338868, -1, 2117478068 }
+ trans:intvector { -1743674400, -1606813200, -907408800, -770634000 }
+ typeOffsets:intvector { -49972, 0, 32400, 0, 36000, 0, 36428, 0 }
+ typeMap:bin { "030201020102" }
+ links:intvector { 555, 590, 593 }
+ } //Z#555
/* Pacific/Easter */ :table {
- trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 }
+ trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200 }
typeOffsets:intvector { -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 }
- typeMap:bin { "010201020102010201020102010201020102010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
+ typeMap:bin { "010201020102010201020102010201020102010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
finalRule { "Chile" }
finalRaw:int { -21600 }
- finalYear:int { 2017 }
- links:intvector { 392, 554 }
- } //Z#554
+ finalYear:int { 2020 }
+ links:intvector { 394, 556 }
+ } //Z#556
/* Pacific/Efate */ :table {
trans:intvector { -1829387596, 433256400, 448977600, 467298000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 }
typeOffsets:intvector { 40396, 0, 39600, 0, 39600, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- } //Z#555
+ } //Z#557
/* Pacific/Enderbury */ :table {
transPre32:intvector { -1, 2117555556 }
- trans:intvector { 307627200, 788958000 }
+ trans:intvector { 307627200, 788871600 }
typeOffsets:intvector { -41060, 0, -43200, 0, -39600, 0, 46800, 0 }
typeMap:bin { "010203" }
- } //Z#556
+ } //Z#558
/* Pacific/Fakaofo */ :table {
transPre32:intvector { -1, 2117555592 }
trans:intvector { 1325242800 }
typeOffsets:intvector { -41096, 0, -39600, 0, 46800, 0 }
typeMap:bin { "0102" }
- } //Z#557
+ } //Z#559
/* Pacific/Fiji */ :table {
trans:intvector { -1709985344, 909842400, 920124000, 941896800, 951573600, 1259416800, 1269698400, 1287842400, 1299333600, 1319292000, 1327154400, 1350741600, 1358604000, 1382796000, 1390050000, 1414850400, 1421503200, 1446300000 }
typeOffsets:intvector { 42944, 0, 43200, 0, 43200, 3600 }
@@ -2614,173 +2618,172 @@ zoneinfo64:table(nofallback) {
finalRule { "Fiji" }
finalRaw:int { 43200 }
finalYear:int { 2016 }
- } //Z#558
+ } //Z#560
/* Pacific/Funafuti */ :table {
transPre32:intvector { -1, 2117471484 }
typeOffsets:intvector { 43012, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#559
+ } //Z#561
/* Pacific/Galapagos */ :table {
- trans:intvector { -1230746496, 504939600 }
- typeOffsets:intvector { -21504, 0, -21600, 0, -18000, 0 }
- typeMap:bin { "0201" }
- } //Z#560
+ trans:intvector { -1230746496, 504939600, 722930400, 728888400 }
+ typeOffsets:intvector { -21504, 0, -21600, 0, -21600, 3600, -18000, 0 }
+ typeMap:bin { "03010201" }
+ } //Z#562
/* Pacific/Gambier */ :table {
trans:intvector { -1806678012 }
typeOffsets:intvector { -32388, 0, -32400, 0 }
typeMap:bin { "01" }
- } //Z#561
+ } //Z#563
/* Pacific/Guadalcanal */ :table {
trans:intvector { -1806748788 }
typeOffsets:intvector { 38388, 0, 39600, 0 }
typeMap:bin { "01" }
- links:intvector { 562, 596 }
- } //Z#562
+ links:intvector { 564, 598 }
+ } //Z#564
/* Pacific/Guam */ :table {
transPre32:intvector { -1, 350340556, -1, 2117479756 }
- typeOffsets:intvector { -51660, 0, 34740, 0, 36000, 0 }
- typeMap:bin { "0102" }
- links:intvector { 563, 583 }
- } //Z#563
+ trans:intvector { -885549600, -802256400, -331891200, -281610000, -73728000, -29415540, -16704000, -10659600, 9907200, 21394800, 41356800, 52844400, 124819200, 130863600, 201888000, 209487660, 230659200, 241542000 }
+ typeOffsets:intvector { -51660, 0, 32400, 0, 34740, 0, 36000, 0, 36000, 3600 }
+ typeMap:bin { "0203010304030403040304030403040304030403" }
+ links:intvector { 565, 585 }
+ } //Z#565
/* Pacific/Honolulu */ :table {
transPre32:intvector { -1, 1960865982 }
trans:intvector { -1157283000, -1155436200, -880198200, -765376200, -712150200 }
typeOffsets:intvector { -37886, 0, -37800, 0, -37800, 3600, -36000, 0 }
typeMap:bin { "010201020103" }
- links:intvector { 564, 565, 619 }
- } //Z#564
- /* Pacific/Johnston */ :int { 564 } //Z#565
+ links:intvector { 566, 567, 621 }
+ } //Z#566
+ /* Pacific/Johnston */ :int { 566 } //Z#567
/* Pacific/Kiritimati */ :table {
transPre32:intvector { -1, 2117552256 }
- trans:intvector { 307622400, 788954400 }
+ trans:intvector { 307622400, 788868000 }
typeOffsets:intvector { -37760, 0, -38400, 0, -36000, 0, 50400, 0 }
typeMap:bin { "010203" }
- } //Z#566
+ } //Z#568
/* Pacific/Kosrae */ :table {
- transPre32:intvector { -1, 2117475380 }
- trans:intvector { -7988400, 915105600 }
- typeOffsets:intvector { 39116, 0, 39600, 0, 43200, 0 }
- typeMap:bin { "010201" }
- } //Z#567
+ transPre32:intvector { -1, 350336180, -1, 2117475380 }
+ trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -770634000, -7988400, 915105600 }
+ typeOffsets:intvector { -47284, 0, 32400, 0, 36000, 0, 39116, 0, 39600, 0, 43200, 0 }
+ typeMap:bin { "030401040201040504" }
+ } //Z#569
/* Pacific/Kwajalein */ :table {
transPre32:intvector { -1, 2117474336 }
- trans:intvector { -7988400, 745848000 }
- typeOffsets:intvector { 40160, 0, -43200, 0, 39600, 0, 43200, 0 }
- typeMap:bin { "020103" }
- links:intvector { 529, 568 }
- } //Z#568
+ trans:intvector { -1041418800, -907408800, -817462800, -7988400, 745934400 }
+ typeOffsets:intvector { 40160, 0, -43200, 0, 32400, 0, 36000, 0, 39600, 0, 43200, 0 }
+ typeMap:bin { "040302040105" }
+ links:intvector { 531, 570 }
+ } //Z#570
/* Pacific/Majuro */ :table {
transPre32:intvector { -1, 2117473408 }
- trans:intvector { -7988400 }
- typeOffsets:intvector { 41088, 0, 39600, 0, 43200, 0 }
- typeMap:bin { "0102" }
- } //Z#569
+ trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -818067600, -7988400 }
+ typeOffsets:intvector { 41088, 0, 32400, 0, 36000, 0, 39600, 0, 43200, 0 }
+ typeMap:bin { "03010302010304" }
+ } //Z#571
/* Pacific/Marquesas */ :table {
trans:intvector { -1806676920 }
typeOffsets:intvector { -33480, 0, -34200, 0 }
typeMap:bin { "01" }
- } //Z#570
- /* Pacific/Midway */ :int { 576 } //Z#571
+ } //Z#572
+ /* Pacific/Midway */ :int { 578 } //Z#573
/* Pacific/Nauru */ :table {
- trans:intvector { -1545131260, -877347000, -800960400, 294323400 }
+ trans:intvector { -1545131260, -862918200, -767350800, 287418600 }
typeOffsets:intvector { 40060, 0, 32400, 0, 41400, 0, 43200, 0 }
typeMap:bin { "02010203" }
- } //Z#572
+ } //Z#574
/* Pacific/Niue */ :table {
transPre32:intvector { -1, 2117555276 }
trans:intvector { -599575200, 276089400 }
typeOffsets:intvector { -40780, 0, -41400, 0, -40800, 0, -39600, 0 }
typeMap:bin { "020103" }
- } //Z#573
+ } //Z#575
/* Pacific/Norfolk */ :table {
transPre32:intvector { -1, 2117474184 }
trans:intvector { -599656320, 152029800, 162912600, 1443882600 }
typeOffsets:intvector { 40312, 0, 39600, 0, 40320, 0, 41400, 0, 41400, 3600 }
typeMap:bin { "0203040301" }
- } //Z#574
+ } //Z#576
/* Pacific/Noumea */ :table {
trans:intvector { -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 }
typeOffsets:intvector { 39948, 0, 39600, 0, 39600, 3600 }
typeMap:bin { "01020102010201" }
- } //Z#575
+ } //Z#577
/* Pacific/Pago_Pago */ :table {
- transPre32:intvector { -1, 1439229064 }
+ transPre32:intvector { -1, 1849542664 }
trans:intvector { -1861879032 }
typeOffsets:intvector { 45432, 0, -40968, 0, -39600, 0 }
typeMap:bin { "0102" }
- links:intvector { 571, 576, 584, 625 }
- } //Z#576
+ links:intvector { 573, 578, 586, 627 }
+ } //Z#578
/* Pacific/Palau */ :table {
- transPre32:intvector { -1, 2117482220 }
- typeOffsets:intvector { 32276, 0, 32400, 0 }
- typeMap:bin { "01" }
- } //Z#577
+ transPre32:intvector { -1, 350343020, -1, 2117482220 }
+ typeOffsets:intvector { -54124, 0, 32276, 0, 32400, 0 }
+ typeMap:bin { "0102" }
+ } //Z#579
/* Pacific/Pitcairn */ :table {
transPre32:intvector { -1, 2117545716 }
trans:intvector { 893665800 }
typeOffsets:intvector { -31220, 0, -30600, 0, -28800, 0 }
typeMap:bin { "0102" }
- } //Z#578
+ } //Z#580
/* Pacific/Pohnpei */ :table {
- transPre32:intvector { -1, 2117476524 }
- typeOffsets:intvector { 37972, 0, 39600, 0 }
- typeMap:bin { "01" }
- links:intvector { 579, 580 }
- } //Z#579
- /* Pacific/Ponape */ :int { 579 } //Z#580
+ transPre32:intvector { -1, 350337324, -1, 2117476524 }
+ trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -770634000 }
+ typeOffsets:intvector { -48428, 0, 32400, 0, 36000, 0, 37972, 0, 39600, 0 }
+ typeMap:bin { "03040104020104" }
+ links:intvector { 581, 582 }
+ } //Z#581
+ /* Pacific/Ponape */ :int { 581 } //Z#582
/* Pacific/Port_Moresby */ :table {
transPre32:intvector { -1, 1454791176, -1, 1928176784 }
typeOffsets:intvector { 35320, 0, 35312, 0, 36000, 0 }
typeMap:bin { "0102" }
- } //Z#581
+ } //Z#583
/* Pacific/Rarotonga */ :table {
transPre32:intvector { -1, 2117552840 }
trans:intvector { 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 }
typeOffsets:intvector { -38344, 0, -37800, 0, -36000, 0, -36000, 1800 }
typeMap:bin { "010302030203020302030203020302030203020302030203020302" }
- } //Z#582
- /* Pacific/Saipan */ :int { 563 } //Z#583
- /* Pacific/Samoa */ :int { 576 } //Z#584
+ } //Z#584
+ /* Pacific/Saipan */ :int { 565 } //Z#585
+ /* Pacific/Samoa */ :int { 578 } //Z#586
/* Pacific/Tahiti */ :table {
trans:intvector { -1806674504 }
typeOffsets:intvector { -35896, 0, -36000, 0 }
typeMap:bin { "01" }
- } //Z#585
+ } //Z#587
/* Pacific/Tarawa */ :table {
transPre32:intvector { -1, 2117472972 }
typeOffsets:intvector { 41524, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#586
+ } //Z#588
/* Pacific/Tongatapu */ :table {
transPre32:intvector { -1, 2117470136 }
- trans:intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800, 1509800400 }
+ trans:intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800 }
typeOffsets:intvector { 44360, 0, 44400, 0, 46800, 0, 46800, 3600 }
- typeMap:bin { "0102030203020302030203" }
- finalRule { "Tonga" }
- finalRaw:int { 46800 }
- finalYear:int { 2018 }
- } //Z#587
- /* Pacific/Truk */ :int { 553 } //Z#588
+ typeMap:bin { "01020302030203020302" }
+ } //Z#589
+ /* Pacific/Truk */ :int { 555 } //Z#590
/* Pacific/Wake */ :table {
transPre32:intvector { -1, 2117474508 }
typeOffsets:intvector { 39988, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#589
+ } //Z#591
/* Pacific/Wallis */ :table {
transPre32:intvector { -1, 2117470376 }
typeOffsets:intvector { 44120, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#590
- /* Pacific/Yap */ :int { 553 } //Z#591
- /* Poland */ :int { 496 } //Z#592
- /* Portugal */ :int { 461 } //Z#593
- /* ROC */ :int { 315 } //Z#594
- /* ROK */ :int { 311 } //Z#595
- /* SST */ :int { 562 } //Z#596
- /* Singapore */ :int { 313 } //Z#597
+ } //Z#592
+ /* Pacific/Yap */ :int { 555 } //Z#593
+ /* Poland */ :int { 498 } //Z#594
+ /* Portugal */ :int { 463 } //Z#595
+ /* ROC */ :int { 317 } //Z#596
+ /* ROK */ :int { 313 } //Z#597
+ /* SST */ :int { 564 } //Z#598
+ /* Singapore */ :int { 315 } //Z#599
/* SystemV/AST4 */ :table {
typeOffsets:intvector { -14400, 0 }
- } //Z#598
+ } //Z#600
/* SystemV/AST4ADT */ :table {
transPre32:intvector { -1, 2096195296, -1, 2111916496, -1, 2127644896, -1, 2143366096 }
trans:intvector { -2135872800, -2120151600, -2104423200, -2088702000, -2072973600, -2056647600, -2040919200, -2025198000, -2009469600, -1993748400, -1978020000, -1962298800, -1946570400, -1930849200, -1915120800, -1898794800, -1883671200, -1867345200, -1851616800, -1835895600, -1820167200, -1804446000, -1788717600, -1772996400, -1757268000, -1741546800, -1725818400, -1709492400, -1693764000, -1678042800, -1662314400, -1646593200, -1630864800, -1615143600, -1599415200, -1583694000, -1567965600, -1551639600, -1536516000, -1520190000, -1504461600, -1488740400, -1473012000, -1457290800, -1441562400, -1425841200, -1410112800, -1394391600, -1378663200, -1362337200, -1347213600, -1330887600, -1315159200, -1299438000, -1283709600, -1267988400, -1252260000, -1236538800, -1220810400, -1205089200, -1189360800, -1173034800, -1157306400, -1141585200, -1125856800, -1110135600, -1094407200, -1078686000, -1062957600, -1047236400, -1031508000, -1015182000, -1000058400, -983732400, -968004000, -952282800, -936554400, -920833200, -905104800, -889383600, -873655200, -857934000, -842205600, -825879600, -810151200, -794430000, -778701600, -762980400, -747252000, -731530800, -715802400, -700081200, -684352800, -668026800, -652903200, -636577200, -620848800, -605127600, -589399200, -573678000, -557949600, -542228400, -526500000, -510778800, -495050400, -478724400, -463600800, -447274800, -431546400, -415825200, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 126684000, 154501200, 162367200, 183531600, 199260000, 215586000 }
@@ -2789,10 +2792,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -14400 }
finalYear:int { 1977 }
- } //Z#599
+ } //Z#601
/* SystemV/CST6 */ :table {
typeOffsets:intvector { -21600, 0 }
- } //Z#600
+ } //Z#602
/* SystemV/CST6CDT */ :table {
transPre32:intvector { -1, 2096202496, -1, 2111923696, -1, 2127652096, -1, 2143373296 }
trans:intvector { -2135865600, -2120144400, -2104416000, -2088694800, -2072966400, -2056640400, -2040912000, -2025190800, -2009462400, -1993741200, -1978012800, -1962291600, -1946563200, -1930842000, -1915113600, -1898787600, -1883664000, -1867338000, -1851609600, -1835888400, -1820160000, -1804438800, -1788710400, -1772989200, -1757260800, -1741539600, -1725811200, -1709485200, -1693756800, -1678035600, -1662307200, -1646586000, -1630857600, -1615136400, -1599408000, -1583686800, -1567958400, -1551632400, -1536508800, -1520182800, -1504454400, -1488733200, -1473004800, -1457283600, -1441555200, -1425834000, -1410105600, -1394384400, -1378656000, -1362330000, -1347206400, -1330880400, -1315152000, -1299430800, -1283702400, -1267981200, -1252252800, -1236531600, -1220803200, -1205082000, -1189353600, -1173027600, -1157299200, -1141578000, -1125849600, -1110128400, -1094400000, -1078678800, -1062950400, -1047229200, -1031500800, -1015174800, -1000051200, -983725200, -967996800, -952275600, -936547200, -920826000, -905097600, -889376400, -873648000, -857926800, -842198400, -825872400, -810144000, -794422800, -778694400, -762973200, -747244800, -731523600, -715795200, -700074000, -684345600, -668019600, -652896000, -636570000, -620841600, -605120400, -589392000, -573670800, -557942400, -542221200, -526492800, -510771600, -495043200, -478717200, -463593600, -447267600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -131562000, -116438400, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 154508400, 162374400, 183538800, 199267200, 215593200 }
@@ -2801,10 +2804,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -21600 }
finalYear:int { 1977 }
- } //Z#601
+ } //Z#603
/* SystemV/EST5 */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#602
+ } //Z#604
/* SystemV/EST5EDT */ :table {
transPre32:intvector { -1, 2096198896, -1, 2111920096, -1, 2127648496, -1, 2143369696 }
trans:intvector { -2135869200, -2120148000, -2104419600, -2088698400, -2072970000, -2056644000, -2040915600, -2025194400, -2009466000, -1993744800, -1978016400, -1962295200, -1946566800, -1930845600, -1915117200, -1898791200, -1883667600, -1867341600, -1851613200, -1835892000, -1820163600, -1804442400, -1788714000, -1772992800, -1757264400, -1741543200, -1725814800, -1709488800, -1693760400, -1678039200, -1662310800, -1646589600, -1630861200, -1615140000, -1599411600, -1583690400, -1567962000, -1551636000, -1536512400, -1520186400, -1504458000, -1488736800, -1473008400, -1457287200, -1441558800, -1425837600, -1410109200, -1394388000, -1378659600, -1362333600, -1347210000, -1330884000, -1315155600, -1299434400, -1283706000, -1267984800, -1252256400, -1236535200, -1220806800, -1205085600, -1189357200, -1173031200, -1157302800, -1141581600, -1125853200, -1110132000, -1094403600, -1078682400, -1062954000, -1047232800, -1031504400, -1015178400, -1000054800, -983728800, -968000400, -952279200, -936550800, -920829600, -905101200, -889380000, -873651600, -857930400, -842202000, -825876000, -810147600, -794426400, -778698000, -762976800, -747248400, -731527200, -715798800, -700077600, -684349200, -668023200, -652899600, -636573600, -620845200, -605124000, -589395600, -573674400, -557946000, -542224800, -526496400, -510775200, -495046800, -478720800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 154504800, 162370800, 183535200, 199263600, 215589600 }
@@ -2813,13 +2816,13 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -18000 }
finalYear:int { 1977 }
- } //Z#603
+ } //Z#605
/* SystemV/HST10 */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#604
+ } //Z#606
/* SystemV/MST7 */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#605
+ } //Z#607
/* SystemV/MST7MDT */ :table {
transPre32:intvector { -1, 2096206096, -1, 2111927296, -1, 2127655696, -1, 2143376896 }
trans:intvector { -2135862000, -2120140800, -2104412400, -2088691200, -2072962800, -2056636800, -2040908400, -2025187200, -2009458800, -1993737600, -1978009200, -1962288000, -1946559600, -1930838400, -1915110000, -1898784000, -1883660400, -1867334400, -1851606000, -1835884800, -1820156400, -1804435200, -1788706800, -1772985600, -1757257200, -1741536000, -1725807600, -1709481600, -1693753200, -1678032000, -1662303600, -1646582400, -1630854000, -1615132800, -1599404400, -1583683200, -1567954800, -1551628800, -1536505200, -1520179200, -1504450800, -1488729600, -1473001200, -1457280000, -1441551600, -1425830400, -1410102000, -1394380800, -1378652400, -1362326400, -1347202800, -1330876800, -1315148400, -1299427200, -1283698800, -1267977600, -1252249200, -1236528000, -1220799600, -1205078400, -1189350000, -1173024000, -1157295600, -1141574400, -1125846000, -1110124800, -1094396400, -1078675200, -1062946800, -1047225600, -1031497200, -1015171200, -1000047600, -983721600, -967993200, -952272000, -936543600, -920822400, -905094000, -889372800, -873644400, -857923200, -842194800, -825868800, -810140400, -794419200, -778690800, -762969600, -747241200, -731520000, -715791600, -700070400, -684342000, -668016000, -652892400, -636566400, -620838000, -605116800, -589388400, -573667200, -557938800, -542217600, -526489200, -510768000, -495039600, -478713600, -463590000, -447264000, -431535600, -415814400, -400086000, -384364800, -368636400, -352915200, -337186800, -321465600, -305737200, -289411200, -273682800, -257961600, -242233200, -226512000, -210783600, -195062400, -179334000, -163612800, -147884400, -131558400, -116434800, -100108800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 154512000, 162378000, 183542400, 199270800, 215596800 }
@@ -2828,10 +2831,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -25200 }
finalYear:int { 1977 }
- } //Z#606
+ } //Z#608
/* SystemV/PST8 */ :table {
typeOffsets:intvector { -28800, 0 }
- } //Z#607
+ } //Z#609
/* SystemV/PST8PDT */ :table {
transPre32:intvector { -1, 2096209696, -1, 2111930896, -1, 2127659296, -1, 2143380496 }
trans:intvector { -2135858400, -2120137200, -2104408800, -2088687600, -2072959200, -2056633200, -2040904800, -2025183600, -2009455200, -1993734000, -1978005600, -1962284400, -1946556000, -1930834800, -1915106400, -1898780400, -1883656800, -1867330800, -1851602400, -1835881200, -1820152800, -1804431600, -1788703200, -1772982000, -1757253600, -1741532400, -1725804000, -1709478000, -1693749600, -1678028400, -1662300000, -1646578800, -1630850400, -1615129200, -1599400800, -1583679600, -1567951200, -1551625200, -1536501600, -1520175600, -1504447200, -1488726000, -1472997600, -1457276400, -1441548000, -1425826800, -1410098400, -1394377200, -1378648800, -1362322800, -1347199200, -1330873200, -1315144800, -1299423600, -1283695200, -1267974000, -1252245600, -1236524400, -1220796000, -1205074800, -1189346400, -1173020400, -1157292000, -1141570800, -1125842400, -1110121200, -1094392800, -1078671600, -1062943200, -1047222000, -1031493600, -1015167600, -1000044000, -983718000, -967989600, -952268400, -936540000, -920818800, -905090400, -889369200, -873640800, -857919600, -842191200, -825865200, -810136800, -794415600, -778687200, -762966000, -747237600, -731516400, -715788000, -700066800, -684338400, -668012400, -652888800, -636562800, -620834400, -605113200, -589384800, -573663600, -557935200, -542214000, -526485600, -510764400, -495036000, -478710000, -463586400, -447260400, -431532000, -415810800, -400082400, -384361200, -368632800, -352911600, -337183200, -321462000, -305733600, -289407600, -273679200, -257958000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 154515600, 162381600, 183546000, 199274400, 215600400 }
@@ -2840,10 +2843,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -28800 }
finalYear:int { 1977 }
- } //Z#608
+ } //Z#610
/* SystemV/YST9 */ :table {
typeOffsets:intvector { -32400, 0 }
- } //Z#609
+ } //Z#611
/* SystemV/YST9YDT */ :table {
transPre32:intvector { -1, 2096213296, -1, 2111934496, -1, 2127662896, -1, 2143384096 }
trans:intvector { -2135854800, -2120133600, -2104405200, -2088684000, -2072955600, -2056629600, -2040901200, -2025180000, -2009451600, -1993730400, -1978002000, -1962280800, -1946552400, -1930831200, -1915102800, -1898776800, -1883653200, -1867327200, -1851598800, -1835877600, -1820149200, -1804428000, -1788699600, -1772978400, -1757250000, -1741528800, -1725800400, -1709474400, -1693746000, -1678024800, -1662296400, -1646575200, -1630846800, -1615125600, -1599397200, -1583676000, -1567947600, -1551621600, -1536498000, -1520172000, -1504443600, -1488722400, -1472994000, -1457272800, -1441544400, -1425823200, -1410094800, -1394373600, -1378645200, -1362319200, -1347195600, -1330869600, -1315141200, -1299420000, -1283691600, -1267970400, -1252242000, -1236520800, -1220792400, -1205071200, -1189342800, -1173016800, -1157288400, -1141567200, -1125838800, -1110117600, -1094389200, -1078668000, -1062939600, -1047218400, -1031490000, -1015164000, -1000040400, -983714400, -967986000, -952264800, -936536400, -920815200, -905086800, -889365600, -873637200, -857916000, -842187600, -825861600, -810133200, -794412000, -778683600, -762962400, -747234000, -731512800, -715784400, -700063200, -684334800, -668008800, -652885200, -636559200, -620830800, -605109600, -589381200, -573660000, -557931600, -542210400, -526482000, -510760800, -495032400, -478706400, -463582800, -447256800, -431528400, -415807200, -400078800, -384357600, -368629200, -352908000, -337179600, -321458400, -305730000, -289404000, -273675600, -257954400, -242226000, -226504800, -210776400, -195055200, -179326800, -163605600, -147877200, -131551200, -116427600, -100101600, -84373200, -68652000, -52923600, -37202400, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 154519200, 162385200, 183549600, 199278000, 215604000 }
@@ -2852,26 +2855,26 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -32400 }
finalYear:int { 1977 }
- } //Z#610
- /* Turkey */ :int { 456 } //Z#611
- /* UCT */ :int { 432 } //Z#612
- /* US/Alaska */ :int { 60 } //Z#613
- /* US/Aleutian */ :int { 59 } //Z#614
- /* US/Arizona */ :int { 184 } //Z#615
- /* US/Central */ :int { 98 } //Z#616
- /* US/East-Indiana */ :int { 131 } //Z#617
- /* US/Eastern */ :int { 173 } //Z#618
- /* US/Hawaii */ :int { 564 } //Z#619
- /* US/Indiana-Starke */ :int { 132 } //Z#620
- /* US/Michigan */ :int { 110 } //Z#621
- /* US/Mountain */ :int { 109 } //Z#622
- /* US/Pacific */ :int { 151 } //Z#623
- /* US/Pacific-New */ :int { 151 } //Z#624
- /* US/Samoa */ :int { 576 } //Z#625
- /* UTC */ :int { 433 } //Z#626
- /* Universal */ :int { 433 } //Z#627
- /* VST */ :int { 270 } //Z#628
- /* W-SU */ :int { 470 } //Z#629
+ } //Z#612
+ /* Turkey */ :int { 458 } //Z#613
+ /* UCT */ :int { 435 } //Z#614
+ /* US/Alaska */ :int { 60 } //Z#615
+ /* US/Aleutian */ :int { 59 } //Z#616
+ /* US/Arizona */ :int { 184 } //Z#617
+ /* US/Central */ :int { 98 } //Z#618
+ /* US/East-Indiana */ :int { 131 } //Z#619
+ /* US/Eastern */ :int { 173 } //Z#620
+ /* US/Hawaii */ :int { 566 } //Z#621
+ /* US/Indiana-Starke */ :int { 132 } //Z#622
+ /* US/Michigan */ :int { 110 } //Z#623
+ /* US/Mountain */ :int { 109 } //Z#624
+ /* US/Pacific */ :int { 151 } //Z#625
+ /* US/Pacific-New */ :int { 151 } //Z#626
+ /* US/Samoa */ :int { 578 } //Z#627
+ /* UTC */ :int { 435 } //Z#628
+ /* Universal */ :int { 435 } //Z#629
+ /* VST */ :int { 271 } //Z#630
+ /* W-SU */ :int { 472 } //Z#631
/* WET */ :table {
trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 0, 0, 0, 3600 }
@@ -2879,8 +2882,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#630
- /* Zulu */ :int { 433 } //Z#631
+ } //Z#632
+ /* Zulu */ :int { 435 } //Z#633
}
Names {
"ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6
@@ -2948,126 +2951,127 @@ zoneinfo64:table(nofallback) {
,"America/Panama","America/Pangnirtung","America/Paramaribo" // 183
,"America/Phoenix","America/Port-au-Prince","America/Port_of_Spain" // 186
,"America/Porto_Acre","America/Porto_Velho","America/Puerto_Rico" // 189
- ,"America/Rainy_River","America/Rankin_Inlet","America/Recife" // 192
- ,"America/Regina","America/Resolute","America/Rio_Branco" // 195
- ,"America/Rosario","America/Santa_Isabel","America/Santarem" // 198
- ,"America/Santiago","America/Santo_Domingo","America/Sao_Paulo" // 201
- ,"America/Scoresbysund","America/Shiprock","America/Sitka" // 204
- ,"America/St_Barthelemy","America/St_Johns","America/St_Kitts" // 207
- ,"America/St_Lucia","America/St_Thomas","America/St_Vincent" // 210
- ,"America/Swift_Current","America/Tegucigalpa","America/Thule" // 213
- ,"America/Thunder_Bay","America/Tijuana","America/Toronto" // 216
- ,"America/Tortola","America/Vancouver","America/Virgin" // 219
- ,"America/Whitehorse","America/Winnipeg","America/Yakutat" // 222
- ,"America/Yellowknife","Antarctica/Casey","Antarctica/Davis" // 225
- ,"Antarctica/DumontDUrville","Antarctica/Macquarie" // 227
- ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 230
- ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 233
- ,"Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen" // 236
- ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 240
- ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 244
- ,"Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku" // 248
- ,"Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek" // 252
- ,"Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan" // 256
- ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 260
- ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 264
- ,"Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin" // 268
- ,"Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 271
- ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 275
- ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 279
- ,"Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu" // 283
- ,"Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk" // 286
- ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 290
- ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 294
- ,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 298
- ,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 302
- ,"Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon" // 306
- ,"Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 310
- ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk" // 314
- ,"Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran" // 318
- ,"Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo" // 322
- ,"Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 325
- ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane" // 329
- ,"Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 333
- ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 336
- ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 339
- ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 342
- ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 345
- ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 348
- ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 351
- ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 354
- ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 357
- ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 360
- ,"Australia/North","Australia/Perth","Australia/Queensland" // 363
- ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 366
- ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 369
- ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 374
- ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 381
- ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 384
- ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 387
- ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 390
- ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 394
- ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 401
- ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 405
- ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 410
- ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 415
- ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 419
- ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 423
- ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 428
- ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 433
- ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 437
- ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 440
- ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 443
- ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 446
- ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 449
- ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 452
- ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 455
- ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 458
- ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 462
- ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 465
- ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 469
- ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 473
- ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 477
- ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 480
- ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 483
- ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 486
- ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 489
- ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 492
- ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 495
- ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 498
- ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 504
- ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 510
- ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 514
- ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 517
- ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 520
- ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 523
- ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 529
- ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 535
- ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 540
- ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 548
- ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 551
- ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 554
- ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 557
- ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 560
- ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 563
- ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 566
- ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 569
- ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 572
- ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 575
- ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 578
- ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 581
- ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 584
- ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 587
- ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 591
- ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 597
- ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 601
- ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 605
- ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 608
- ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 613
- ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 617
- ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 621
- ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 625
- ,"UTC","Universal","VST","W-SU","WET","Zulu" // 631
+ ,"America/Punta_Arenas","America/Rainy_River","America/Rankin_Inlet" // 192
+ ,"America/Recife","America/Regina","America/Resolute" // 195
+ ,"America/Rio_Branco","America/Rosario","America/Santa_Isabel" // 198
+ ,"America/Santarem","America/Santiago","America/Santo_Domingo" // 201
+ ,"America/Sao_Paulo","America/Scoresbysund","America/Shiprock" // 204
+ ,"America/Sitka","America/St_Barthelemy","America/St_Johns" // 207
+ ,"America/St_Kitts","America/St_Lucia","America/St_Thomas" // 210
+ ,"America/St_Vincent","America/Swift_Current","America/Tegucigalpa" // 213
+ ,"America/Thule","America/Thunder_Bay","America/Tijuana" // 216
+ ,"America/Toronto","America/Tortola","America/Vancouver" // 219
+ ,"America/Virgin","America/Whitehorse","America/Winnipeg" // 222
+ ,"America/Yakutat","America/Yellowknife","Antarctica/Casey" // 225
+ ,"Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Macquarie" // 228
+ ,"Antarctica/Mawson","Antarctica/McMurdo","Antarctica/Palmer" // 231
+ ,"Antarctica/Rothera","Antarctica/South_Pole","Antarctica/Syowa" // 234
+ ,"Antarctica/Troll","Antarctica/Vostok","Arctic/Longyearbyen" // 237
+ ,"Asia/Aden","Asia/Almaty","Asia/Amman","Asia/Anadyr" // 241
+ ,"Asia/Aqtau","Asia/Aqtobe","Asia/Ashgabat","Asia/Ashkhabad" // 245
+ ,"Asia/Atyrau","Asia/Baghdad","Asia/Bahrain","Asia/Baku" // 249
+ ,"Asia/Bangkok","Asia/Barnaul","Asia/Beirut","Asia/Bishkek" // 253
+ ,"Asia/Brunei","Asia/Calcutta","Asia/Chita","Asia/Choibalsan" // 257
+ ,"Asia/Chongqing","Asia/Chungking","Asia/Colombo","Asia/Dacca" // 261
+ ,"Asia/Damascus","Asia/Dhaka","Asia/Dili","Asia/Dubai" // 265
+ ,"Asia/Dushanbe","Asia/Famagusta","Asia/Gaza","Asia/Harbin" // 269
+ ,"Asia/Hebron","Asia/Ho_Chi_Minh","Asia/Hong_Kong" // 272
+ ,"Asia/Hovd","Asia/Irkutsk","Asia/Istanbul","Asia/Jakarta" // 276
+ ,"Asia/Jayapura","Asia/Jerusalem","Asia/Kabul","Asia/Kamchatka" // 280
+ ,"Asia/Karachi","Asia/Kashgar","Asia/Kathmandu","Asia/Katmandu" // 284
+ ,"Asia/Khandyga","Asia/Kolkata","Asia/Krasnoyarsk" // 287
+ ,"Asia/Kuala_Lumpur","Asia/Kuching","Asia/Kuwait","Asia/Macao" // 291
+ ,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 295
+ ,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 299
+ ,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 303
+ ,"Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda" // 307
+ ,"Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin" // 311
+ ,"Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore" // 315
+ ,"Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent" // 318
+ ,"Asia/Tbilisi","Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu" // 322
+ ,"Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ujung_Pandang" // 326
+ ,"Asia/Ulaanbaatar","Asia/Ulan_Bator","Asia/Urumqi" // 329
+ ,"Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok" // 332
+ ,"Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 335
+ ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 338
+ ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 341
+ ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 344
+ ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 347
+ ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 350
+ ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 353
+ ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 356
+ ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 359
+ ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 362
+ ,"Australia/North","Australia/Perth","Australia/Queensland" // 365
+ ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 368
+ ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 371
+ ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 376
+ ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 383
+ ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 386
+ ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 389
+ ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 392
+ ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 396
+ ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 403
+ ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 407
+ ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 412
+ ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 417
+ ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 421
+ ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 425
+ ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 430
+ ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 435
+ ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 439
+ ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 442
+ ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 445
+ ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 448
+ ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 451
+ ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 454
+ ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 457
+ ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 460
+ ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 464
+ ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 467
+ ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 471
+ ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 475
+ ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 479
+ ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 482
+ ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 485
+ ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 488
+ ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 491
+ ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 494
+ ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 497
+ ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 500
+ ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 506
+ ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 512
+ ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 516
+ ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 519
+ ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 522
+ ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 525
+ ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 531
+ ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 537
+ ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 542
+ ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 550
+ ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 553
+ ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 556
+ ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 559
+ ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 562
+ ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 565
+ ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 568
+ ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 571
+ ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 574
+ ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 577
+ ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 580
+ ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 583
+ ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 586
+ ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 589
+ ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 593
+ ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 599
+ ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 603
+ ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 607
+ ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 610
+ ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 615
+ ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 619
+ ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 623
+ ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 627
+ ,"UTC","Universal","VST","W-SU","WET","Zulu" // 633
}
Rules {
AN:intvector {
@@ -3083,7 +3087,7 @@ zoneinfo64:table(nofallback) {
9, 1, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
} //_#3
Brazil:intvector {
- 9, 15, -1, 0, 0, 1, 15, -1, 0, 0, 3600
+ 10, 1, -1, 0, 0, 1, 15, -1, 0, 0, 3600
} //_#4
C-Eur:intvector {
2, -31, -1, 7200, 1, 9, -31, -1, 7200, 1, 3600
@@ -3095,7 +3099,7 @@ zoneinfo64:table(nofallback) {
8, -30, -1, 9900, 1, 3, 1, -1, 9900, 1, 3600
} //_#7
Chile:intvector {
- 7, 9, -1, 14400, 2, 4, 9, -1, 10800, 2, 3600
+ 8, 2, -1, 14400, 2, 3, 2, -1, 10800, 2, 3600
} //_#8
Cuba:intvector {
2, 8, -1, 0, 1, 10, 1, -1, 0, 1, 3600
@@ -3107,68 +3111,59 @@ zoneinfo64:table(nofallback) {
2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 3600
} //_#11
Fiji:intvector {
- 10, 1, -1, 7200, 0, 0, 15, -1, 10800, 0, 3600
+ 10, 1, -1, 7200, 0, 0, 13, -1, 10800, 0, 3600
} //_#12
- Iran:intvector {
- 2, 21, 0, 0, 0, 8, 21, 0, 0, 0, 3600
+ Haiti:intvector {
+ 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
} //_#13
+ Iran:intvector {
+ 2, 20, 0, 86400, 0, 8, 20, 0, 86400, 0, 3600
+ } //_#14
Jordan:intvector {
2, -31, -5, 86400, 0, 9, -31, -6, 0, 1, 3600
- } //_#14
+ } //_#15
LH:intvector {
9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800
- } //_#15
+ } //_#16
Lebanon:intvector {
2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600
- } //_#16
+ } //_#17
Mexico:intvector {
3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#17
+ } //_#18
Moldova:intvector {
2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600
- } //_#18
- Mongol:intvector {
- 2, -31, -7, 7200, 0, 8, -30, -7, 0, 0, 3600
} //_#19
- Morocco:intvector {
- 2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600
- } //_#20
NZ:intvector {
8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
- } //_#21
- Namibia:intvector {
- 8, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 3600
- } //_#22
+ } //_#20
Palestine:intvector {
- 2, -31, -7, 3600, 0, 9, -31, -7, 3600, 0, 3600
- } //_#23
+ 2, 24, -7, 3600, 0, 9, -31, -7, 3600, 0, 3600
+ } //_#21
Para:intvector {
9, 1, -1, 0, 0, 2, 22, -1, 0, 0, 3600
- } //_#24
+ } //_#22
Syria:intvector {
2, -31, -6, 0, 0, 9, -31, -6, 0, 0, 3600
- } //_#25
+ } //_#23
SystemV:intvector {
3, -30, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#26
+ } //_#24
Thule:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
- } //_#27
- Tonga:intvector {
- 10, 1, -1, 7200, 0, 0, 15, -1, 10800, 0, 3600
- } //_#28
+ } //_#25
Troll:intvector {
2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 7200
- } //_#29
+ } //_#26
US:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
- } //_#30
+ } //_#27
WS:intvector {
8, -30, -1, 10800, 0, 3, 1, -1, 14400, 0, 3600
- } //_#31
+ } //_#28
Zion:intvector {
2, 23, -6, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#32
+ } //_#29
}
Regions:array {
"AU", //Z#0 ACT
@@ -3361,447 +3356,449 @@ zoneinfo64:table(nofallback) {
"BR", //Z#187 America/Porto_Acre
"BR", //Z#188 America/Porto_Velho
"PR", //Z#189 America/Puerto_Rico
- "CA", //Z#190 America/Rainy_River
- "CA", //Z#191 America/Rankin_Inlet
- "BR", //Z#192 America/Recife
- "CA", //Z#193 America/Regina
- "CA", //Z#194 America/Resolute
- "BR", //Z#195 America/Rio_Branco
- "AR", //Z#196 America/Rosario
- "MX", //Z#197 America/Santa_Isabel
- "BR", //Z#198 America/Santarem
- "CL", //Z#199 America/Santiago
- "DO", //Z#200 America/Santo_Domingo
- "BR", //Z#201 America/Sao_Paulo
- "GL", //Z#202 America/Scoresbysund
- "US", //Z#203 America/Shiprock
- "US", //Z#204 America/Sitka
- "BL", //Z#205 America/St_Barthelemy
- "CA", //Z#206 America/St_Johns
- "KN", //Z#207 America/St_Kitts
- "LC", //Z#208 America/St_Lucia
- "VI", //Z#209 America/St_Thomas
- "VC", //Z#210 America/St_Vincent
- "CA", //Z#211 America/Swift_Current
- "HN", //Z#212 America/Tegucigalpa
- "GL", //Z#213 America/Thule
- "CA", //Z#214 America/Thunder_Bay
- "MX", //Z#215 America/Tijuana
- "CA", //Z#216 America/Toronto
- "VG", //Z#217 America/Tortola
- "CA", //Z#218 America/Vancouver
- "TT", //Z#219 America/Virgin
- "CA", //Z#220 America/Whitehorse
- "CA", //Z#221 America/Winnipeg
- "US", //Z#222 America/Yakutat
- "CA", //Z#223 America/Yellowknife
- "AQ", //Z#224 Antarctica/Casey
- "AQ", //Z#225 Antarctica/Davis
- "AQ", //Z#226 Antarctica/DumontDUrville
- "AU", //Z#227 Antarctica/Macquarie
- "AQ", //Z#228 Antarctica/Mawson
- "AQ", //Z#229 Antarctica/McMurdo
- "AQ", //Z#230 Antarctica/Palmer
- "AQ", //Z#231 Antarctica/Rothera
- "NZ", //Z#232 Antarctica/South_Pole
- "AQ", //Z#233 Antarctica/Syowa
- "AQ", //Z#234 Antarctica/Troll
- "AQ", //Z#235 Antarctica/Vostok
- "SJ", //Z#236 Arctic/Longyearbyen
- "YE", //Z#237 Asia/Aden
- "KZ", //Z#238 Asia/Almaty
- "JO", //Z#239 Asia/Amman
- "RU", //Z#240 Asia/Anadyr
- "KZ", //Z#241 Asia/Aqtau
- "KZ", //Z#242 Asia/Aqtobe
- "TM", //Z#243 Asia/Ashgabat
- "TM", //Z#244 Asia/Ashkhabad
- "KZ", //Z#245 Asia/Atyrau
- "IQ", //Z#246 Asia/Baghdad
- "BH", //Z#247 Asia/Bahrain
- "AZ", //Z#248 Asia/Baku
- "TH", //Z#249 Asia/Bangkok
- "RU", //Z#250 Asia/Barnaul
- "LB", //Z#251 Asia/Beirut
- "KG", //Z#252 Asia/Bishkek
- "BN", //Z#253 Asia/Brunei
- "IN", //Z#254 Asia/Calcutta
- "RU", //Z#255 Asia/Chita
- "MN", //Z#256 Asia/Choibalsan
- "CN", //Z#257 Asia/Chongqing
- "CN", //Z#258 Asia/Chungking
- "LK", //Z#259 Asia/Colombo
- "BD", //Z#260 Asia/Dacca
- "SY", //Z#261 Asia/Damascus
- "BD", //Z#262 Asia/Dhaka
- "TL", //Z#263 Asia/Dili
- "AE", //Z#264 Asia/Dubai
- "TJ", //Z#265 Asia/Dushanbe
- "CY", //Z#266 Asia/Famagusta
- "PS", //Z#267 Asia/Gaza
- "CN", //Z#268 Asia/Harbin
- "PS", //Z#269 Asia/Hebron
- "VN", //Z#270 Asia/Ho_Chi_Minh
- "HK", //Z#271 Asia/Hong_Kong
- "MN", //Z#272 Asia/Hovd
- "RU", //Z#273 Asia/Irkutsk
- "TR", //Z#274 Asia/Istanbul
- "ID", //Z#275 Asia/Jakarta
- "ID", //Z#276 Asia/Jayapura
- "IL", //Z#277 Asia/Jerusalem
- "AF", //Z#278 Asia/Kabul
- "RU", //Z#279 Asia/Kamchatka
- "PK", //Z#280 Asia/Karachi
- "CN", //Z#281 Asia/Kashgar
- "NP", //Z#282 Asia/Kathmandu
- "NP", //Z#283 Asia/Katmandu
- "RU", //Z#284 Asia/Khandyga
- "IN", //Z#285 Asia/Kolkata
- "RU", //Z#286 Asia/Krasnoyarsk
- "MY", //Z#287 Asia/Kuala_Lumpur
- "MY", //Z#288 Asia/Kuching
- "KW", //Z#289 Asia/Kuwait
- "MO", //Z#290 Asia/Macao
- "MO", //Z#291 Asia/Macau
- "RU", //Z#292 Asia/Magadan
- "ID", //Z#293 Asia/Makassar
- "PH", //Z#294 Asia/Manila
- "OM", //Z#295 Asia/Muscat
- "CY", //Z#296 Asia/Nicosia
- "RU", //Z#297 Asia/Novokuznetsk
- "RU", //Z#298 Asia/Novosibirsk
- "RU", //Z#299 Asia/Omsk
- "KZ", //Z#300 Asia/Oral
- "KH", //Z#301 Asia/Phnom_Penh
- "ID", //Z#302 Asia/Pontianak
- "KP", //Z#303 Asia/Pyongyang
- "QA", //Z#304 Asia/Qatar
- "KZ", //Z#305 Asia/Qyzylorda
- "MM", //Z#306 Asia/Rangoon
- "SA", //Z#307 Asia/Riyadh
- "VN", //Z#308 Asia/Saigon
- "RU", //Z#309 Asia/Sakhalin
- "UZ", //Z#310 Asia/Samarkand
- "KR", //Z#311 Asia/Seoul
- "CN", //Z#312 Asia/Shanghai
- "SG", //Z#313 Asia/Singapore
- "RU", //Z#314 Asia/Srednekolymsk
- "TW", //Z#315 Asia/Taipei
- "UZ", //Z#316 Asia/Tashkent
- "GE", //Z#317 Asia/Tbilisi
- "IR", //Z#318 Asia/Tehran
- "IL", //Z#319 Asia/Tel_Aviv
- "BT", //Z#320 Asia/Thimbu
- "BT", //Z#321 Asia/Thimphu
- "JP", //Z#322 Asia/Tokyo
- "RU", //Z#323 Asia/Tomsk
- "ID", //Z#324 Asia/Ujung_Pandang
- "MN", //Z#325 Asia/Ulaanbaatar
- "MN", //Z#326 Asia/Ulan_Bator
- "CN", //Z#327 Asia/Urumqi
- "RU", //Z#328 Asia/Ust-Nera
- "LA", //Z#329 Asia/Vientiane
- "RU", //Z#330 Asia/Vladivostok
- "RU", //Z#331 Asia/Yakutsk
- "MM", //Z#332 Asia/Yangon
- "RU", //Z#333 Asia/Yekaterinburg
- "AM", //Z#334 Asia/Yerevan
- "PT", //Z#335 Atlantic/Azores
- "BM", //Z#336 Atlantic/Bermuda
- "ES", //Z#337 Atlantic/Canary
- "CV", //Z#338 Atlantic/Cape_Verde
- "FO", //Z#339 Atlantic/Faeroe
- "FO", //Z#340 Atlantic/Faroe
- "NO", //Z#341 Atlantic/Jan_Mayen
- "PT", //Z#342 Atlantic/Madeira
- "IS", //Z#343 Atlantic/Reykjavik
- "GS", //Z#344 Atlantic/South_Georgia
- "SH", //Z#345 Atlantic/St_Helena
- "FK", //Z#346 Atlantic/Stanley
- "AU", //Z#347 Australia/ACT
- "AU", //Z#348 Australia/Adelaide
- "AU", //Z#349 Australia/Brisbane
- "AU", //Z#350 Australia/Broken_Hill
- "AU", //Z#351 Australia/Canberra
- "AU", //Z#352 Australia/Currie
- "AU", //Z#353 Australia/Darwin
- "AU", //Z#354 Australia/Eucla
- "AU", //Z#355 Australia/Hobart
- "AU", //Z#356 Australia/LHI
- "AU", //Z#357 Australia/Lindeman
- "AU", //Z#358 Australia/Lord_Howe
- "AU", //Z#359 Australia/Melbourne
- "AU", //Z#360 Australia/NSW
- "AU", //Z#361 Australia/North
- "AU", //Z#362 Australia/Perth
- "AU", //Z#363 Australia/Queensland
- "AU", //Z#364 Australia/South
- "AU", //Z#365 Australia/Sydney
- "AU", //Z#366 Australia/Tasmania
- "AU", //Z#367 Australia/Victoria
- "AU", //Z#368 Australia/West
- "AU", //Z#369 Australia/Yancowinna
- "BR", //Z#370 BET
- "BD", //Z#371 BST
- "BR", //Z#372 Brazil/Acre
- "BR", //Z#373 Brazil/DeNoronha
- "BR", //Z#374 Brazil/East
- "BR", //Z#375 Brazil/West
- "MZ", //Z#376 CAT
- "001",//Z#377 CET
- "CA", //Z#378 CNT
- "US", //Z#379 CST
- "001",//Z#380 CST6CDT
- "CN", //Z#381 CTT
- "CA", //Z#382 Canada/Atlantic
- "CA", //Z#383 Canada/Central
- "CA", //Z#384 Canada/East-Saskatchewan
- "CA", //Z#385 Canada/Eastern
- "CA", //Z#386 Canada/Mountain
- "CA", //Z#387 Canada/Newfoundland
- "CA", //Z#388 Canada/Pacific
- "CA", //Z#389 Canada/Saskatchewan
- "CA", //Z#390 Canada/Yukon
- "CL", //Z#391 Chile/Continental
- "CL", //Z#392 Chile/EasterIsland
- "CU", //Z#393 Cuba
- "KE", //Z#394 EAT
- "FR", //Z#395 ECT
- "001",//Z#396 EET
- "001",//Z#397 EST
- "001",//Z#398 EST5EDT
- "EG", //Z#399 Egypt
- "IE", //Z#400 Eire
- "001",//Z#401 Etc/GMT
- "001",//Z#402 Etc/GMT+0
- "001",//Z#403 Etc/GMT+1
- "001",//Z#404 Etc/GMT+10
- "001",//Z#405 Etc/GMT+11
- "001",//Z#406 Etc/GMT+12
- "001",//Z#407 Etc/GMT+2
- "001",//Z#408 Etc/GMT+3
- "001",//Z#409 Etc/GMT+4
- "001",//Z#410 Etc/GMT+5
- "001",//Z#411 Etc/GMT+6
- "001",//Z#412 Etc/GMT+7
- "001",//Z#413 Etc/GMT+8
- "001",//Z#414 Etc/GMT+9
- "001",//Z#415 Etc/GMT-0
- "001",//Z#416 Etc/GMT-1
- "001",//Z#417 Etc/GMT-10
- "001",//Z#418 Etc/GMT-11
- "001",//Z#419 Etc/GMT-12
- "001",//Z#420 Etc/GMT-13
- "001",//Z#421 Etc/GMT-14
- "001",//Z#422 Etc/GMT-2
- "001",//Z#423 Etc/GMT-3
- "001",//Z#424 Etc/GMT-4
- "001",//Z#425 Etc/GMT-5
- "001",//Z#426 Etc/GMT-6
- "001",//Z#427 Etc/GMT-7
- "001",//Z#428 Etc/GMT-8
- "001",//Z#429 Etc/GMT-9
- "001",//Z#430 Etc/GMT0
- "001",//Z#431 Etc/Greenwich
- "001",//Z#432 Etc/UCT
- "001",//Z#433 Etc/UTC
- "001",//Z#434 Etc/Universal
- "001",//Z#435 Etc/Unknown
- "001",//Z#436 Etc/Zulu
- "NL", //Z#437 Europe/Amsterdam
- "AD", //Z#438 Europe/Andorra
- "RU", //Z#439 Europe/Astrakhan
- "GR", //Z#440 Europe/Athens
- "GB", //Z#441 Europe/Belfast
- "RS", //Z#442 Europe/Belgrade
- "DE", //Z#443 Europe/Berlin
- "SK", //Z#444 Europe/Bratislava
- "BE", //Z#445 Europe/Brussels
- "RO", //Z#446 Europe/Bucharest
- "HU", //Z#447 Europe/Budapest
- "DE", //Z#448 Europe/Busingen
- "MD", //Z#449 Europe/Chisinau
- "DK", //Z#450 Europe/Copenhagen
- "IE", //Z#451 Europe/Dublin
- "GI", //Z#452 Europe/Gibraltar
- "GG", //Z#453 Europe/Guernsey
- "FI", //Z#454 Europe/Helsinki
- "IM", //Z#455 Europe/Isle_of_Man
- "TR", //Z#456 Europe/Istanbul
- "JE", //Z#457 Europe/Jersey
- "RU", //Z#458 Europe/Kaliningrad
- "UA", //Z#459 Europe/Kiev
- "RU", //Z#460 Europe/Kirov
- "PT", //Z#461 Europe/Lisbon
- "SI", //Z#462 Europe/Ljubljana
- "GB", //Z#463 Europe/London
- "LU", //Z#464 Europe/Luxembourg
- "ES", //Z#465 Europe/Madrid
- "MT", //Z#466 Europe/Malta
- "AX", //Z#467 Europe/Mariehamn
- "BY", //Z#468 Europe/Minsk
- "MC", //Z#469 Europe/Monaco
- "RU", //Z#470 Europe/Moscow
- "CY", //Z#471 Europe/Nicosia
- "NO", //Z#472 Europe/Oslo
- "FR", //Z#473 Europe/Paris
- "ME", //Z#474 Europe/Podgorica
- "CZ", //Z#475 Europe/Prague
- "LV", //Z#476 Europe/Riga
- "IT", //Z#477 Europe/Rome
- "RU", //Z#478 Europe/Samara
- "SM", //Z#479 Europe/San_Marino
- "BA", //Z#480 Europe/Sarajevo
- "RU", //Z#481 Europe/Saratov
- "UA", //Z#482 Europe/Simferopol
- "MK", //Z#483 Europe/Skopje
- "BG", //Z#484 Europe/Sofia
- "SE", //Z#485 Europe/Stockholm
- "EE", //Z#486 Europe/Tallinn
- "AL", //Z#487 Europe/Tirane
- "MD", //Z#488 Europe/Tiraspol
- "RU", //Z#489 Europe/Ulyanovsk
- "UA", //Z#490 Europe/Uzhgorod
- "LI", //Z#491 Europe/Vaduz
- "VA", //Z#492 Europe/Vatican
- "AT", //Z#493 Europe/Vienna
- "LT", //Z#494 Europe/Vilnius
- "RU", //Z#495 Europe/Volgograd
- "PL", //Z#496 Europe/Warsaw
- "HR", //Z#497 Europe/Zagreb
- "UA", //Z#498 Europe/Zaporozhye
- "CH", //Z#499 Europe/Zurich
- "001",//Z#500 Factory
- "GB", //Z#501 GB
- "GB", //Z#502 GB-Eire
- "001",//Z#503 GMT
- "001",//Z#504 GMT+0
- "001",//Z#505 GMT-0
- "001",//Z#506 GMT0
- "001",//Z#507 Greenwich
- "001",//Z#508 HST
- "HK", //Z#509 Hongkong
- "US", //Z#510 IET
- "IN", //Z#511 IST
- "IS", //Z#512 Iceland
- "MG", //Z#513 Indian/Antananarivo
- "IO", //Z#514 Indian/Chagos
- "CX", //Z#515 Indian/Christmas
- "CC", //Z#516 Indian/Cocos
- "KM", //Z#517 Indian/Comoro
- "TF", //Z#518 Indian/Kerguelen
- "SC", //Z#519 Indian/Mahe
- "MV", //Z#520 Indian/Maldives
- "MU", //Z#521 Indian/Mauritius
- "YT", //Z#522 Indian/Mayotte
- "RE", //Z#523 Indian/Reunion
- "IR", //Z#524 Iran
- "IL", //Z#525 Israel
- "JP", //Z#526 JST
- "JM", //Z#527 Jamaica
- "JP", //Z#528 Japan
- "MH", //Z#529 Kwajalein
- "LY", //Z#530 Libya
- "001",//Z#531 MET
- "WS", //Z#532 MIT
- "001",//Z#533 MST
- "001",//Z#534 MST7MDT
- "MX", //Z#535 Mexico/BajaNorte
- "MX", //Z#536 Mexico/BajaSur
- "MX", //Z#537 Mexico/General
- "AM", //Z#538 NET
- "NZ", //Z#539 NST
- "NZ", //Z#540 NZ
- "NZ", //Z#541 NZ-CHAT
- "US", //Z#542 Navajo
- "PK", //Z#543 PLT
- "US", //Z#544 PNT
- "CN", //Z#545 PRC
- "PR", //Z#546 PRT
- "US", //Z#547 PST
- "001",//Z#548 PST8PDT
- "WS", //Z#549 Pacific/Apia
- "NZ", //Z#550 Pacific/Auckland
- "PG", //Z#551 Pacific/Bougainville
- "NZ", //Z#552 Pacific/Chatham
- "FM", //Z#553 Pacific/Chuuk
- "CL", //Z#554 Pacific/Easter
- "VU", //Z#555 Pacific/Efate
- "KI", //Z#556 Pacific/Enderbury
- "TK", //Z#557 Pacific/Fakaofo
- "FJ", //Z#558 Pacific/Fiji
- "TV", //Z#559 Pacific/Funafuti
- "EC", //Z#560 Pacific/Galapagos
- "PF", //Z#561 Pacific/Gambier
- "SB", //Z#562 Pacific/Guadalcanal
- "GU", //Z#563 Pacific/Guam
- "US", //Z#564 Pacific/Honolulu
- "UM", //Z#565 Pacific/Johnston
- "KI", //Z#566 Pacific/Kiritimati
- "FM", //Z#567 Pacific/Kosrae
- "MH", //Z#568 Pacific/Kwajalein
- "MH", //Z#569 Pacific/Majuro
- "PF", //Z#570 Pacific/Marquesas
- "UM", //Z#571 Pacific/Midway
- "NR", //Z#572 Pacific/Nauru
- "NU", //Z#573 Pacific/Niue
- "NF", //Z#574 Pacific/Norfolk
- "NC", //Z#575 Pacific/Noumea
- "AS", //Z#576 Pacific/Pago_Pago
- "PW", //Z#577 Pacific/Palau
- "PN", //Z#578 Pacific/Pitcairn
- "FM", //Z#579 Pacific/Pohnpei
- "FM", //Z#580 Pacific/Ponape
- "PG", //Z#581 Pacific/Port_Moresby
- "CK", //Z#582 Pacific/Rarotonga
- "MP", //Z#583 Pacific/Saipan
- "AS", //Z#584 Pacific/Samoa
- "PF", //Z#585 Pacific/Tahiti
- "KI", //Z#586 Pacific/Tarawa
- "TO", //Z#587 Pacific/Tongatapu
- "FM", //Z#588 Pacific/Truk
- "UM", //Z#589 Pacific/Wake
- "WF", //Z#590 Pacific/Wallis
- "FM", //Z#591 Pacific/Yap
- "PL", //Z#592 Poland
- "PT", //Z#593 Portugal
- "TW", //Z#594 ROC
- "KR", //Z#595 ROK
- "SB", //Z#596 SST
- "SG", //Z#597 Singapore
- "001",//Z#598 SystemV/AST4
- "001",//Z#599 SystemV/AST4ADT
- "001",//Z#600 SystemV/CST6
- "001",//Z#601 SystemV/CST6CDT
- "001",//Z#602 SystemV/EST5
- "001",//Z#603 SystemV/EST5EDT
- "001",//Z#604 SystemV/HST10
- "001",//Z#605 SystemV/MST7
- "001",//Z#606 SystemV/MST7MDT
- "001",//Z#607 SystemV/PST8
- "001",//Z#608 SystemV/PST8PDT
- "001",//Z#609 SystemV/YST9
- "001",//Z#610 SystemV/YST9YDT
- "TR", //Z#611 Turkey
- "001",//Z#612 UCT
- "US", //Z#613 US/Alaska
- "US", //Z#614 US/Aleutian
- "US", //Z#615 US/Arizona
- "US", //Z#616 US/Central
- "US", //Z#617 US/East-Indiana
- "US", //Z#618 US/Eastern
- "US", //Z#619 US/Hawaii
- "US", //Z#620 US/Indiana-Starke
- "US", //Z#621 US/Michigan
- "US", //Z#622 US/Mountain
- "US", //Z#623 US/Pacific
- "US", //Z#624 US/Pacific-New
- "AS", //Z#625 US/Samoa
- "001",//Z#626 UTC
- "001",//Z#627 Universal
- "VN", //Z#628 VST
- "RU", //Z#629 W-SU
- "001",//Z#630 WET
- "001",//Z#631 Zulu
+ "CL", //Z#190 America/Punta_Arenas
+ "CA", //Z#191 America/Rainy_River
+ "CA", //Z#192 America/Rankin_Inlet
+ "BR", //Z#193 America/Recife
+ "CA", //Z#194 America/Regina
+ "CA", //Z#195 America/Resolute
+ "BR", //Z#196 America/Rio_Branco
+ "AR", //Z#197 America/Rosario
+ "MX", //Z#198 America/Santa_Isabel
+ "BR", //Z#199 America/Santarem
+ "CL", //Z#200 America/Santiago
+ "DO", //Z#201 America/Santo_Domingo
+ "BR", //Z#202 America/Sao_Paulo
+ "GL", //Z#203 America/Scoresbysund
+ "US", //Z#204 America/Shiprock
+ "US", //Z#205 America/Sitka
+ "BL", //Z#206 America/St_Barthelemy
+ "CA", //Z#207 America/St_Johns
+ "KN", //Z#208 America/St_Kitts
+ "LC", //Z#209 America/St_Lucia
+ "VI", //Z#210 America/St_Thomas
+ "VC", //Z#211 America/St_Vincent
+ "CA", //Z#212 America/Swift_Current
+ "HN", //Z#213 America/Tegucigalpa
+ "GL", //Z#214 America/Thule
+ "CA", //Z#215 America/Thunder_Bay
+ "MX", //Z#216 America/Tijuana
+ "CA", //Z#217 America/Toronto
+ "VG", //Z#218 America/Tortola
+ "CA", //Z#219 America/Vancouver
+ "TT", //Z#220 America/Virgin
+ "CA", //Z#221 America/Whitehorse
+ "CA", //Z#222 America/Winnipeg
+ "US", //Z#223 America/Yakutat
+ "CA", //Z#224 America/Yellowknife
+ "AQ", //Z#225 Antarctica/Casey
+ "AQ", //Z#226 Antarctica/Davis
+ "AQ", //Z#227 Antarctica/DumontDUrville
+ "AU", //Z#228 Antarctica/Macquarie
+ "AQ", //Z#229 Antarctica/Mawson
+ "AQ", //Z#230 Antarctica/McMurdo
+ "AQ", //Z#231 Antarctica/Palmer
+ "AQ", //Z#232 Antarctica/Rothera
+ "NZ", //Z#233 Antarctica/South_Pole
+ "AQ", //Z#234 Antarctica/Syowa
+ "AQ", //Z#235 Antarctica/Troll
+ "AQ", //Z#236 Antarctica/Vostok
+ "SJ", //Z#237 Arctic/Longyearbyen
+ "YE", //Z#238 Asia/Aden
+ "KZ", //Z#239 Asia/Almaty
+ "JO", //Z#240 Asia/Amman
+ "RU", //Z#241 Asia/Anadyr
+ "KZ", //Z#242 Asia/Aqtau
+ "KZ", //Z#243 Asia/Aqtobe
+ "TM", //Z#244 Asia/Ashgabat
+ "TM", //Z#245 Asia/Ashkhabad
+ "KZ", //Z#246 Asia/Atyrau
+ "IQ", //Z#247 Asia/Baghdad
+ "BH", //Z#248 Asia/Bahrain
+ "AZ", //Z#249 Asia/Baku
+ "TH", //Z#250 Asia/Bangkok
+ "RU", //Z#251 Asia/Barnaul
+ "LB", //Z#252 Asia/Beirut
+ "KG", //Z#253 Asia/Bishkek
+ "BN", //Z#254 Asia/Brunei
+ "IN", //Z#255 Asia/Calcutta
+ "RU", //Z#256 Asia/Chita
+ "MN", //Z#257 Asia/Choibalsan
+ "CN", //Z#258 Asia/Chongqing
+ "CN", //Z#259 Asia/Chungking
+ "LK", //Z#260 Asia/Colombo
+ "BD", //Z#261 Asia/Dacca
+ "SY", //Z#262 Asia/Damascus
+ "BD", //Z#263 Asia/Dhaka
+ "TL", //Z#264 Asia/Dili
+ "AE", //Z#265 Asia/Dubai
+ "TJ", //Z#266 Asia/Dushanbe
+ "CY", //Z#267 Asia/Famagusta
+ "PS", //Z#268 Asia/Gaza
+ "CN", //Z#269 Asia/Harbin
+ "PS", //Z#270 Asia/Hebron
+ "VN", //Z#271 Asia/Ho_Chi_Minh
+ "HK", //Z#272 Asia/Hong_Kong
+ "MN", //Z#273 Asia/Hovd
+ "RU", //Z#274 Asia/Irkutsk
+ "TR", //Z#275 Asia/Istanbul
+ "ID", //Z#276 Asia/Jakarta
+ "ID", //Z#277 Asia/Jayapura
+ "IL", //Z#278 Asia/Jerusalem
+ "AF", //Z#279 Asia/Kabul
+ "RU", //Z#280 Asia/Kamchatka
+ "PK", //Z#281 Asia/Karachi
+ "CN", //Z#282 Asia/Kashgar
+ "NP", //Z#283 Asia/Kathmandu
+ "NP", //Z#284 Asia/Katmandu
+ "RU", //Z#285 Asia/Khandyga
+ "IN", //Z#286 Asia/Kolkata
+ "RU", //Z#287 Asia/Krasnoyarsk
+ "MY", //Z#288 Asia/Kuala_Lumpur
+ "MY", //Z#289 Asia/Kuching
+ "KW", //Z#290 Asia/Kuwait
+ "MO", //Z#291 Asia/Macao
+ "MO", //Z#292 Asia/Macau
+ "RU", //Z#293 Asia/Magadan
+ "ID", //Z#294 Asia/Makassar
+ "PH", //Z#295 Asia/Manila
+ "OM", //Z#296 Asia/Muscat
+ "CY", //Z#297 Asia/Nicosia
+ "RU", //Z#298 Asia/Novokuznetsk
+ "RU", //Z#299 Asia/Novosibirsk
+ "RU", //Z#300 Asia/Omsk
+ "KZ", //Z#301 Asia/Oral
+ "KH", //Z#302 Asia/Phnom_Penh
+ "ID", //Z#303 Asia/Pontianak
+ "KP", //Z#304 Asia/Pyongyang
+ "QA", //Z#305 Asia/Qatar
+ "KZ", //Z#306 Asia/Qostanay
+ "KZ", //Z#307 Asia/Qyzylorda
+ "MM", //Z#308 Asia/Rangoon
+ "SA", //Z#309 Asia/Riyadh
+ "VN", //Z#310 Asia/Saigon
+ "RU", //Z#311 Asia/Sakhalin
+ "UZ", //Z#312 Asia/Samarkand
+ "KR", //Z#313 Asia/Seoul
+ "CN", //Z#314 Asia/Shanghai
+ "SG", //Z#315 Asia/Singapore
+ "RU", //Z#316 Asia/Srednekolymsk
+ "TW", //Z#317 Asia/Taipei
+ "UZ", //Z#318 Asia/Tashkent
+ "GE", //Z#319 Asia/Tbilisi
+ "IR", //Z#320 Asia/Tehran
+ "IL", //Z#321 Asia/Tel_Aviv
+ "BT", //Z#322 Asia/Thimbu
+ "BT", //Z#323 Asia/Thimphu
+ "JP", //Z#324 Asia/Tokyo
+ "RU", //Z#325 Asia/Tomsk
+ "ID", //Z#326 Asia/Ujung_Pandang
+ "MN", //Z#327 Asia/Ulaanbaatar
+ "MN", //Z#328 Asia/Ulan_Bator
+ "CN", //Z#329 Asia/Urumqi
+ "RU", //Z#330 Asia/Ust-Nera
+ "LA", //Z#331 Asia/Vientiane
+ "RU", //Z#332 Asia/Vladivostok
+ "RU", //Z#333 Asia/Yakutsk
+ "MM", //Z#334 Asia/Yangon
+ "RU", //Z#335 Asia/Yekaterinburg
+ "AM", //Z#336 Asia/Yerevan
+ "PT", //Z#337 Atlantic/Azores
+ "BM", //Z#338 Atlantic/Bermuda
+ "ES", //Z#339 Atlantic/Canary
+ "CV", //Z#340 Atlantic/Cape_Verde
+ "FO", //Z#341 Atlantic/Faeroe
+ "FO", //Z#342 Atlantic/Faroe
+ "NO", //Z#343 Atlantic/Jan_Mayen
+ "PT", //Z#344 Atlantic/Madeira
+ "IS", //Z#345 Atlantic/Reykjavik
+ "GS", //Z#346 Atlantic/South_Georgia
+ "SH", //Z#347 Atlantic/St_Helena
+ "FK", //Z#348 Atlantic/Stanley
+ "AU", //Z#349 Australia/ACT
+ "AU", //Z#350 Australia/Adelaide
+ "AU", //Z#351 Australia/Brisbane
+ "AU", //Z#352 Australia/Broken_Hill
+ "AU", //Z#353 Australia/Canberra
+ "AU", //Z#354 Australia/Currie
+ "AU", //Z#355 Australia/Darwin
+ "AU", //Z#356 Australia/Eucla
+ "AU", //Z#357 Australia/Hobart
+ "AU", //Z#358 Australia/LHI
+ "AU", //Z#359 Australia/Lindeman
+ "AU", //Z#360 Australia/Lord_Howe
+ "AU", //Z#361 Australia/Melbourne
+ "AU", //Z#362 Australia/NSW
+ "AU", //Z#363 Australia/North
+ "AU", //Z#364 Australia/Perth
+ "AU", //Z#365 Australia/Queensland
+ "AU", //Z#366 Australia/South
+ "AU", //Z#367 Australia/Sydney
+ "AU", //Z#368 Australia/Tasmania
+ "AU", //Z#369 Australia/Victoria
+ "AU", //Z#370 Australia/West
+ "AU", //Z#371 Australia/Yancowinna
+ "BR", //Z#372 BET
+ "BD", //Z#373 BST
+ "BR", //Z#374 Brazil/Acre
+ "BR", //Z#375 Brazil/DeNoronha
+ "BR", //Z#376 Brazil/East
+ "BR", //Z#377 Brazil/West
+ "MZ", //Z#378 CAT
+ "001",//Z#379 CET
+ "CA", //Z#380 CNT
+ "US", //Z#381 CST
+ "001",//Z#382 CST6CDT
+ "CN", //Z#383 CTT
+ "CA", //Z#384 Canada/Atlantic
+ "CA", //Z#385 Canada/Central
+ "CA", //Z#386 Canada/East-Saskatchewan
+ "CA", //Z#387 Canada/Eastern
+ "CA", //Z#388 Canada/Mountain
+ "CA", //Z#389 Canada/Newfoundland
+ "CA", //Z#390 Canada/Pacific
+ "CA", //Z#391 Canada/Saskatchewan
+ "CA", //Z#392 Canada/Yukon
+ "CL", //Z#393 Chile/Continental
+ "CL", //Z#394 Chile/EasterIsland
+ "CU", //Z#395 Cuba
+ "KE", //Z#396 EAT
+ "FR", //Z#397 ECT
+ "001",//Z#398 EET
+ "001",//Z#399 EST
+ "001",//Z#400 EST5EDT
+ "EG", //Z#401 Egypt
+ "IE", //Z#402 Eire
+ "001",//Z#403 Etc/GMT
+ "001",//Z#404 Etc/GMT+0
+ "001",//Z#405 Etc/GMT+1
+ "001",//Z#406 Etc/GMT+10
+ "001",//Z#407 Etc/GMT+11
+ "001",//Z#408 Etc/GMT+12
+ "001",//Z#409 Etc/GMT+2
+ "001",//Z#410 Etc/GMT+3
+ "001",//Z#411 Etc/GMT+4
+ "001",//Z#412 Etc/GMT+5
+ "001",//Z#413 Etc/GMT+6
+ "001",//Z#414 Etc/GMT+7
+ "001",//Z#415 Etc/GMT+8
+ "001",//Z#416 Etc/GMT+9
+ "001",//Z#417 Etc/GMT-0
+ "001",//Z#418 Etc/GMT-1
+ "001",//Z#419 Etc/GMT-10
+ "001",//Z#420 Etc/GMT-11
+ "001",//Z#421 Etc/GMT-12
+ "001",//Z#422 Etc/GMT-13
+ "001",//Z#423 Etc/GMT-14
+ "001",//Z#424 Etc/GMT-2
+ "001",//Z#425 Etc/GMT-3
+ "001",//Z#426 Etc/GMT-4
+ "001",//Z#427 Etc/GMT-5
+ "001",//Z#428 Etc/GMT-6
+ "001",//Z#429 Etc/GMT-7
+ "001",//Z#430 Etc/GMT-8
+ "001",//Z#431 Etc/GMT-9
+ "001",//Z#432 Etc/GMT0
+ "001",//Z#433 Etc/Greenwich
+ "001",//Z#434 Etc/UCT
+ "001",//Z#435 Etc/UTC
+ "001",//Z#436 Etc/Universal
+ "001",//Z#437 Etc/Unknown
+ "001",//Z#438 Etc/Zulu
+ "NL", //Z#439 Europe/Amsterdam
+ "AD", //Z#440 Europe/Andorra
+ "RU", //Z#441 Europe/Astrakhan
+ "GR", //Z#442 Europe/Athens
+ "GB", //Z#443 Europe/Belfast
+ "RS", //Z#444 Europe/Belgrade
+ "DE", //Z#445 Europe/Berlin
+ "SK", //Z#446 Europe/Bratislava
+ "BE", //Z#447 Europe/Brussels
+ "RO", //Z#448 Europe/Bucharest
+ "HU", //Z#449 Europe/Budapest
+ "DE", //Z#450 Europe/Busingen
+ "MD", //Z#451 Europe/Chisinau
+ "DK", //Z#452 Europe/Copenhagen
+ "IE", //Z#453 Europe/Dublin
+ "GI", //Z#454 Europe/Gibraltar
+ "GG", //Z#455 Europe/Guernsey
+ "FI", //Z#456 Europe/Helsinki
+ "IM", //Z#457 Europe/Isle_of_Man
+ "TR", //Z#458 Europe/Istanbul
+ "JE", //Z#459 Europe/Jersey
+ "RU", //Z#460 Europe/Kaliningrad
+ "UA", //Z#461 Europe/Kiev
+ "RU", //Z#462 Europe/Kirov
+ "PT", //Z#463 Europe/Lisbon
+ "SI", //Z#464 Europe/Ljubljana
+ "GB", //Z#465 Europe/London
+ "LU", //Z#466 Europe/Luxembourg
+ "ES", //Z#467 Europe/Madrid
+ "MT", //Z#468 Europe/Malta
+ "AX", //Z#469 Europe/Mariehamn
+ "BY", //Z#470 Europe/Minsk
+ "MC", //Z#471 Europe/Monaco
+ "RU", //Z#472 Europe/Moscow
+ "CY", //Z#473 Europe/Nicosia
+ "NO", //Z#474 Europe/Oslo
+ "FR", //Z#475 Europe/Paris
+ "ME", //Z#476 Europe/Podgorica
+ "CZ", //Z#477 Europe/Prague
+ "LV", //Z#478 Europe/Riga
+ "IT", //Z#479 Europe/Rome
+ "RU", //Z#480 Europe/Samara
+ "SM", //Z#481 Europe/San_Marino
+ "BA", //Z#482 Europe/Sarajevo
+ "RU", //Z#483 Europe/Saratov
+ "UA", //Z#484 Europe/Simferopol
+ "MK", //Z#485 Europe/Skopje
+ "BG", //Z#486 Europe/Sofia
+ "SE", //Z#487 Europe/Stockholm
+ "EE", //Z#488 Europe/Tallinn
+ "AL", //Z#489 Europe/Tirane
+ "MD", //Z#490 Europe/Tiraspol
+ "RU", //Z#491 Europe/Ulyanovsk
+ "UA", //Z#492 Europe/Uzhgorod
+ "LI", //Z#493 Europe/Vaduz
+ "VA", //Z#494 Europe/Vatican
+ "AT", //Z#495 Europe/Vienna
+ "LT", //Z#496 Europe/Vilnius
+ "RU", //Z#497 Europe/Volgograd
+ "PL", //Z#498 Europe/Warsaw
+ "HR", //Z#499 Europe/Zagreb
+ "UA", //Z#500 Europe/Zaporozhye
+ "CH", //Z#501 Europe/Zurich
+ "001",//Z#502 Factory
+ "GB", //Z#503 GB
+ "GB", //Z#504 GB-Eire
+ "001",//Z#505 GMT
+ "001",//Z#506 GMT+0
+ "001",//Z#507 GMT-0
+ "001",//Z#508 GMT0
+ "001",//Z#509 Greenwich
+ "001",//Z#510 HST
+ "HK", //Z#511 Hongkong
+ "US", //Z#512 IET
+ "IN", //Z#513 IST
+ "IS", //Z#514 Iceland
+ "MG", //Z#515 Indian/Antananarivo
+ "IO", //Z#516 Indian/Chagos
+ "CX", //Z#517 Indian/Christmas
+ "CC", //Z#518 Indian/Cocos
+ "KM", //Z#519 Indian/Comoro
+ "TF", //Z#520 Indian/Kerguelen
+ "SC", //Z#521 Indian/Mahe
+ "MV", //Z#522 Indian/Maldives
+ "MU", //Z#523 Indian/Mauritius
+ "YT", //Z#524 Indian/Mayotte
+ "RE", //Z#525 Indian/Reunion
+ "IR", //Z#526 Iran
+ "IL", //Z#527 Israel
+ "JP", //Z#528 JST
+ "JM", //Z#529 Jamaica
+ "JP", //Z#530 Japan
+ "MH", //Z#531 Kwajalein
+ "LY", //Z#532 Libya
+ "001",//Z#533 MET
+ "WS", //Z#534 MIT
+ "001",//Z#535 MST
+ "001",//Z#536 MST7MDT
+ "MX", //Z#537 Mexico/BajaNorte
+ "MX", //Z#538 Mexico/BajaSur
+ "MX", //Z#539 Mexico/General
+ "AM", //Z#540 NET
+ "NZ", //Z#541 NST
+ "NZ", //Z#542 NZ
+ "NZ", //Z#543 NZ-CHAT
+ "US", //Z#544 Navajo
+ "PK", //Z#545 PLT
+ "US", //Z#546 PNT
+ "CN", //Z#547 PRC
+ "PR", //Z#548 PRT
+ "US", //Z#549 PST
+ "001",//Z#550 PST8PDT
+ "WS", //Z#551 Pacific/Apia
+ "NZ", //Z#552 Pacific/Auckland
+ "PG", //Z#553 Pacific/Bougainville
+ "NZ", //Z#554 Pacific/Chatham
+ "FM", //Z#555 Pacific/Chuuk
+ "CL", //Z#556 Pacific/Easter
+ "VU", //Z#557 Pacific/Efate
+ "KI", //Z#558 Pacific/Enderbury
+ "TK", //Z#559 Pacific/Fakaofo
+ "FJ", //Z#560 Pacific/Fiji
+ "TV", //Z#561 Pacific/Funafuti
+ "EC", //Z#562 Pacific/Galapagos
+ "PF", //Z#563 Pacific/Gambier
+ "SB", //Z#564 Pacific/Guadalcanal
+ "GU", //Z#565 Pacific/Guam
+ "US", //Z#566 Pacific/Honolulu
+ "UM", //Z#567 Pacific/Johnston
+ "KI", //Z#568 Pacific/Kiritimati
+ "FM", //Z#569 Pacific/Kosrae
+ "MH", //Z#570 Pacific/Kwajalein
+ "MH", //Z#571 Pacific/Majuro
+ "PF", //Z#572 Pacific/Marquesas
+ "UM", //Z#573 Pacific/Midway
+ "NR", //Z#574 Pacific/Nauru
+ "NU", //Z#575 Pacific/Niue
+ "NF", //Z#576 Pacific/Norfolk
+ "NC", //Z#577 Pacific/Noumea
+ "AS", //Z#578 Pacific/Pago_Pago
+ "PW", //Z#579 Pacific/Palau
+ "PN", //Z#580 Pacific/Pitcairn
+ "FM", //Z#581 Pacific/Pohnpei
+ "FM", //Z#582 Pacific/Ponape
+ "PG", //Z#583 Pacific/Port_Moresby
+ "CK", //Z#584 Pacific/Rarotonga
+ "MP", //Z#585 Pacific/Saipan
+ "AS", //Z#586 Pacific/Samoa
+ "PF", //Z#587 Pacific/Tahiti
+ "KI", //Z#588 Pacific/Tarawa
+ "TO", //Z#589 Pacific/Tongatapu
+ "FM", //Z#590 Pacific/Truk
+ "UM", //Z#591 Pacific/Wake
+ "WF", //Z#592 Pacific/Wallis
+ "FM", //Z#593 Pacific/Yap
+ "PL", //Z#594 Poland
+ "PT", //Z#595 Portugal
+ "TW", //Z#596 ROC
+ "KR", //Z#597 ROK
+ "SB", //Z#598 SST
+ "SG", //Z#599 Singapore
+ "001",//Z#600 SystemV/AST4
+ "001",//Z#601 SystemV/AST4ADT
+ "001",//Z#602 SystemV/CST6
+ "001",//Z#603 SystemV/CST6CDT
+ "001",//Z#604 SystemV/EST5
+ "001",//Z#605 SystemV/EST5EDT
+ "001",//Z#606 SystemV/HST10
+ "001",//Z#607 SystemV/MST7
+ "001",//Z#608 SystemV/MST7MDT
+ "001",//Z#609 SystemV/PST8
+ "001",//Z#610 SystemV/PST8PDT
+ "001",//Z#611 SystemV/YST9
+ "001",//Z#612 SystemV/YST9YDT
+ "TR", //Z#613 Turkey
+ "001",//Z#614 UCT
+ "US", //Z#615 US/Alaska
+ "US", //Z#616 US/Aleutian
+ "US", //Z#617 US/Arizona
+ "US", //Z#618 US/Central
+ "US", //Z#619 US/East-Indiana
+ "US", //Z#620 US/Eastern
+ "US", //Z#621 US/Hawaii
+ "US", //Z#622 US/Indiana-Starke
+ "US", //Z#623 US/Michigan
+ "US", //Z#624 US/Mountain
+ "US", //Z#625 US/Pacific
+ "US", //Z#626 US/Pacific-New
+ "AS", //Z#627 US/Samoa
+ "001",//Z#628 UTC
+ "001",//Z#629 Universal
+ "VN", //Z#630 VST
+ "RU", //Z#631 W-SU
+ "001",//Z#632 WET
+ "001",//Z#633 Zulu
}
}
diff --git a/intl/icu/source/data/unidata/FractionalUCA.txt b/intl/icu/source/data/unidata/FractionalUCA.txt
index dbc3985d9..5c7e303dd 100644
--- a/intl/icu/source/data/unidata/FractionalUCA.txt
+++ b/intl/icu/source/data/unidata/FractionalUCA.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 and later: Unicode, Inc. and others.
+# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# Fractional UCA Table, generated from the UCA DUCET
# 2016-06-03
diff --git a/intl/icu/source/data/unidata/UCARules.txt b/intl/icu/source/data/unidata/UCARules.txt
index 57dbcb2fc..ca3dd5df6 100644
--- a/intl/icu/source/data/unidata/UCARules.txt
+++ b/intl/icu/source/data/unidata/UCARules.txt
@@ -1,4 +1,4 @@
-# UCA_Rules_SHORT.txt
+# UCA_Rules_SHORT.txt
# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
# Date: 2016-06-03, 18:30:56 GMT
diff --git a/intl/icu/source/data/unidata/changes.txt b/intl/icu/source/data/unidata/changes.txt
index 74425830c..345790793 100644
--- a/intl/icu/source/data/unidata/changes.txt
+++ b/intl/icu/source/data/unidata/changes.txt
@@ -1,4 +1,4 @@
-* Copyright (C) 2016 and later: Unicode, Inc. and others.
+* Copyright (C) 2016 and later: Unicode, Inc. and others.
* License & terms of use: http://www.unicode.org/copyright.html
* Copyright (C) 2004-2016, International Business Machines
* Corporation and others. All Rights Reserved.
diff --git a/intl/icu/source/data/unidata/confusables.txt b/intl/icu/source/data/unidata/confusables.txt
index acef24afc..c9b8b5b43 100644
--- a/intl/icu/source/data/unidata/confusables.txt
+++ b/intl/icu/source/data/unidata/confusables.txt
@@ -1,4 +1,4 @@
-# confusables.txt
+# confusables.txt
# Date: 2016-04-05, 11:47:12 GMT
# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
diff --git a/intl/icu/source/data/unidata/confusablesWholeScript.txt b/intl/icu/source/data/unidata/confusablesWholeScript.txt
index 0d5d8c3cf..ad335c3d9 100644
--- a/intl/icu/source/data/unidata/confusablesWholeScript.txt
+++ b/intl/icu/source/data/unidata/confusablesWholeScript.txt
@@ -1,4 +1,4 @@
-# Summary: Whole-Script Confusables
+# Summary: Whole-Script Confusables
# File: confusablesWholeScript.txt
# Version: 8.0.0
# Generated: 2015-05-17, 03:09:04 GMT
diff --git a/intl/icu/source/data/xml/brkitr/de.xml b/intl/icu/source/data/xml/brkitr/de.xml
index 23144d312..6649e6bce 100644
--- a/intl/icu/source/data/xml/brkitr/de.xml
+++ b/intl/icu/source/data/xml/brkitr/de.xml
@@ -14,7 +14,7 @@
>
<ldml>
<identity>
- <version number="$Revision: 38848 $"/>
+ <version number="$Revision$"/>
<language type="de"/>
</identity>
</ldml>
diff --git a/intl/icu/source/data/xml/brkitr/es.xml b/intl/icu/source/data/xml/brkitr/es.xml
index 3465f1981..bc08a1a6c 100644
--- a/intl/icu/source/data/xml/brkitr/es.xml
+++ b/intl/icu/source/data/xml/brkitr/es.xml
@@ -14,7 +14,7 @@
>
<ldml>
<identity>
- <version number="$Revision: 38848 $"/>
+ <version number="$Revision$"/>
<language type="es"/>
</identity>
</ldml>
diff --git a/intl/icu/source/data/xml/brkitr/fr.xml b/intl/icu/source/data/xml/brkitr/fr.xml
index af51689f9..0ab5e8a10 100644
--- a/intl/icu/source/data/xml/brkitr/fr.xml
+++ b/intl/icu/source/data/xml/brkitr/fr.xml
@@ -14,7 +14,7 @@
>
<ldml>
<identity>
- <version number="$Revision: 38848 $"/>
+ <version number="$Revision$"/>
<language type="fr"/>
</identity>
</ldml>
diff --git a/intl/icu/source/data/xml/brkitr/it.xml b/intl/icu/source/data/xml/brkitr/it.xml
index 4d078d0e9..a5ebe420e 100644
--- a/intl/icu/source/data/xml/brkitr/it.xml
+++ b/intl/icu/source/data/xml/brkitr/it.xml
@@ -14,7 +14,7 @@
>
<ldml>
<identity>
- <version number="$Revision: 38848 $"/>
+ <version number="$Revision$"/>
<language type="it"/>
</identity>
</ldml>
diff --git a/intl/icu/source/data/xml/brkitr/pt.xml b/intl/icu/source/data/xml/brkitr/pt.xml
index 153f0550a..646278228 100644
--- a/intl/icu/source/data/xml/brkitr/pt.xml
+++ b/intl/icu/source/data/xml/brkitr/pt.xml
@@ -14,7 +14,7 @@
>
<ldml>
<identity>
- <version number="$Revision: 38848 $"/>
+ <version number="$Revision$"/>
<language type="pt"/>
</identity>
</ldml>
diff --git a/intl/icu/source/data/xml/brkitr/ru.xml b/intl/icu/source/data/xml/brkitr/ru.xml
index 45026ee70..f70b4b559 100644
--- a/intl/icu/source/data/xml/brkitr/ru.xml
+++ b/intl/icu/source/data/xml/brkitr/ru.xml
@@ -14,7 +14,7 @@
>
<ldml>
<identity>
- <version number="$Revision: 38848 $"/>
+ <version number="$Revision$"/>
<language type="ru"/>
</identity>
</ldml>
diff --git a/intl/icu/source/data/zone/af.txt b/intl/icu/source/data/zone/af.txt
index bcd504b0c..4ac0c3731 100644
--- a/intl/icu/source/data/zone/af.txt
+++ b/intl/icu/source/data/zone/af.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
af{
Version{"2.1.29.44"}
diff --git a/intl/icu/source/data/zone/agq.txt b/intl/icu/source/data/zone/agq.txt
index cf862eb01..2d629827e 100644
--- a/intl/icu/source/data/zone/agq.txt
+++ b/intl/icu/source/data/zone/agq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
agq{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ak.txt b/intl/icu/source/data/zone/ak.txt
index 886a027c9..08a314813 100644
--- a/intl/icu/source/data/zone/ak.txt
+++ b/intl/icu/source/data/zone/ak.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ak{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/am.txt b/intl/icu/source/data/zone/am.txt
index 48fab27e4..c8dc1bf78 100644
--- a/intl/icu/source/data/zone/am.txt
+++ b/intl/icu/source/data/zone/am.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
am{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ar.txt b/intl/icu/source/data/zone/ar.txt
index d8d48b3d5..c2f1ed11f 100644
--- a/intl/icu/source/data/zone/ar.txt
+++ b/intl/icu/source/data/zone/ar.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ar{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/as.txt b/intl/icu/source/data/zone/as.txt
index 6cd0399d4..d7b18655c 100644
--- a/intl/icu/source/data/zone/as.txt
+++ b/intl/icu/source/data/zone/as.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
as{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/asa.txt b/intl/icu/source/data/zone/asa.txt
index 1a7a328f8..034652052 100644
--- a/intl/icu/source/data/zone/asa.txt
+++ b/intl/icu/source/data/zone/asa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
asa{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ast.txt b/intl/icu/source/data/zone/ast.txt
index 10a62ebaf..5c8bd3e84 100644
--- a/intl/icu/source/data/zone/ast.txt
+++ b/intl/icu/source/data/zone/ast.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ast{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/az.txt b/intl/icu/source/data/zone/az.txt
index c98d5bc68..9655b4ad5 100644
--- a/intl/icu/source/data/zone/az.txt
+++ b/intl/icu/source/data/zone/az.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/az_AZ.txt b/intl/icu/source/data/zone/az_AZ.txt
index caf84c095..7a07cbada 100644
--- a/intl/icu/source/data/zone/az_AZ.txt
+++ b/intl/icu/source/data/zone/az_AZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_AZ{
"%%ALIAS"{"az_Latn_AZ"}
diff --git a/intl/icu/source/data/zone/az_Cyrl.txt b/intl/icu/source/data/zone/az_Cyrl.txt
index adbb8b773..eaed11994 100644
--- a/intl/icu/source/data/zone/az_Cyrl.txt
+++ b/intl/icu/source/data/zone/az_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_Cyrl{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/az_Latn.txt b/intl/icu/source/data/zone/az_Latn.txt
index 59182e903..bf3068dc2 100644
--- a/intl/icu/source/data/zone/az_Latn.txt
+++ b/intl/icu/source/data/zone/az_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
az_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/az_Latn_AZ.txt b/intl/icu/source/data/zone/az_Latn_AZ.txt
index 36c6e61ba..cf643e1d6 100644
--- a/intl/icu/source/data/zone/az_Latn_AZ.txt
+++ b/intl/icu/source/data/zone/az_Latn_AZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/bas.txt b/intl/icu/source/data/zone/bas.txt
index df5f99942..4fa0fc38e 100644
--- a/intl/icu/source/data/zone/bas.txt
+++ b/intl/icu/source/data/zone/bas.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bas{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/be.txt b/intl/icu/source/data/zone/be.txt
index 3b7e6adf3..b64981462 100644
--- a/intl/icu/source/data/zone/be.txt
+++ b/intl/icu/source/data/zone/be.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
be{
Version{"2.1.29.66"}
diff --git a/intl/icu/source/data/zone/bem.txt b/intl/icu/source/data/zone/bem.txt
index da7f81d15..fb0a43ff6 100644
--- a/intl/icu/source/data/zone/bem.txt
+++ b/intl/icu/source/data/zone/bem.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bem{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/bez.txt b/intl/icu/source/data/zone/bez.txt
index 9208dac77..8dbf42e3e 100644
--- a/intl/icu/source/data/zone/bez.txt
+++ b/intl/icu/source/data/zone/bez.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bez{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/bg.txt b/intl/icu/source/data/zone/bg.txt
index bba96f355..abb9df9e6 100644
--- a/intl/icu/source/data/zone/bg.txt
+++ b/intl/icu/source/data/zone/bg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bg{
Version{"2.1.30.6"}
diff --git a/intl/icu/source/data/zone/bm.txt b/intl/icu/source/data/zone/bm.txt
index 5220e4972..e455016e3 100644
--- a/intl/icu/source/data/zone/bm.txt
+++ b/intl/icu/source/data/zone/bm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bm{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/bn.txt b/intl/icu/source/data/zone/bn.txt
index 7964ac18f..cb686dcbf 100644
--- a/intl/icu/source/data/zone/bn.txt
+++ b/intl/icu/source/data/zone/bn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bn{
Version{"2.1.29.44"}
diff --git a/intl/icu/source/data/zone/bo.txt b/intl/icu/source/data/zone/bo.txt
index 1abad4450..fe402097d 100644
--- a/intl/icu/source/data/zone/bo.txt
+++ b/intl/icu/source/data/zone/bo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/br.txt b/intl/icu/source/data/zone/br.txt
index 56df5a784..b2ceca128 100644
--- a/intl/icu/source/data/zone/br.txt
+++ b/intl/icu/source/data/zone/br.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
br{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/brx.txt b/intl/icu/source/data/zone/brx.txt
index a5ba89394..a01569f95 100644
--- a/intl/icu/source/data/zone/brx.txt
+++ b/intl/icu/source/data/zone/brx.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
brx{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/bs.txt b/intl/icu/source/data/zone/bs.txt
index 4693f965f..b20ab097b 100644
--- a/intl/icu/source/data/zone/bs.txt
+++ b/intl/icu/source/data/zone/bs.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/bs_BA.txt b/intl/icu/source/data/zone/bs_BA.txt
index e5e3a4657..b347c85a5 100644
--- a/intl/icu/source/data/zone/bs_BA.txt
+++ b/intl/icu/source/data/zone/bs_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_BA{
"%%ALIAS"{"bs_Latn_BA"}
diff --git a/intl/icu/source/data/zone/bs_Cyrl.txt b/intl/icu/source/data/zone/bs_Cyrl.txt
index 40e65159b..9c9a96947 100644
--- a/intl/icu/source/data/zone/bs_Cyrl.txt
+++ b/intl/icu/source/data/zone/bs_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Cyrl{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/bs_Latn.txt b/intl/icu/source/data/zone/bs_Latn.txt
index 9163b6927..bdd79b703 100644
--- a/intl/icu/source/data/zone/bs_Latn.txt
+++ b/intl/icu/source/data/zone/bs_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
bs_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/bs_Latn_BA.txt b/intl/icu/source/data/zone/bs_Latn_BA.txt
index 3ef1cc405..8d21c41a0 100644
--- a/intl/icu/source/data/zone/bs_Latn_BA.txt
+++ b/intl/icu/source/data/zone/bs_Latn_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/ca.txt b/intl/icu/source/data/zone/ca.txt
index b6b838be8..e64745f6e 100644
--- a/intl/icu/source/data/zone/ca.txt
+++ b/intl/icu/source/data/zone/ca.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ca{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ce.txt b/intl/icu/source/data/zone/ce.txt
index b10333de0..9ebf917d4 100644
--- a/intl/icu/source/data/zone/ce.txt
+++ b/intl/icu/source/data/zone/ce.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ce{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/cgg.txt b/intl/icu/source/data/zone/cgg.txt
index 3a9d46bbd..05d1d1832 100644
--- a/intl/icu/source/data/zone/cgg.txt
+++ b/intl/icu/source/data/zone/cgg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cgg{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/chr.txt b/intl/icu/source/data/zone/chr.txt
index 0ff86ffc6..255cff6b7 100644
--- a/intl/icu/source/data/zone/chr.txt
+++ b/intl/icu/source/data/zone/chr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
chr{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/ckb.txt b/intl/icu/source/data/zone/ckb.txt
index 730bc407a..89980d400 100644
--- a/intl/icu/source/data/zone/ckb.txt
+++ b/intl/icu/source/data/zone/ckb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ckb{
Version{"2.1.27.84"}
diff --git a/intl/icu/source/data/zone/cs.txt b/intl/icu/source/data/zone/cs.txt
index ef5c806b7..73d2986ed 100644
--- a/intl/icu/source/data/zone/cs.txt
+++ b/intl/icu/source/data/zone/cs.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cs{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/cy.txt b/intl/icu/source/data/zone/cy.txt
index c9de30eab..be49b1289 100644
--- a/intl/icu/source/data/zone/cy.txt
+++ b/intl/icu/source/data/zone/cy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
cy{
Version{"2.1.30.6"}
diff --git a/intl/icu/source/data/zone/da.txt b/intl/icu/source/data/zone/da.txt
index afbd9085a..667d87343 100644
--- a/intl/icu/source/data/zone/da.txt
+++ b/intl/icu/source/data/zone/da.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
da{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/dav.txt b/intl/icu/source/data/zone/dav.txt
index bb1d36da1..da1b0b714 100644
--- a/intl/icu/source/data/zone/dav.txt
+++ b/intl/icu/source/data/zone/dav.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dav{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/de.txt b/intl/icu/source/data/zone/de.txt
index d82636ba7..a72db35fb 100644
--- a/intl/icu/source/data/zone/de.txt
+++ b/intl/icu/source/data/zone/de.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
de{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/dje.txt b/intl/icu/source/data/zone/dje.txt
index c327cf0e9..cc5c02843 100644
--- a/intl/icu/source/data/zone/dje.txt
+++ b/intl/icu/source/data/zone/dje.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dje{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/dsb.txt b/intl/icu/source/data/zone/dsb.txt
index cd2845346..0098a0d30 100644
--- a/intl/icu/source/data/zone/dsb.txt
+++ b/intl/icu/source/data/zone/dsb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dsb{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/dua.txt b/intl/icu/source/data/zone/dua.txt
index df62568b4..4e055cdf9 100644
--- a/intl/icu/source/data/zone/dua.txt
+++ b/intl/icu/source/data/zone/dua.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dua{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/dyo.txt b/intl/icu/source/data/zone/dyo.txt
index e0f09cc20..06c21ffbf 100644
--- a/intl/icu/source/data/zone/dyo.txt
+++ b/intl/icu/source/data/zone/dyo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dyo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/dz.txt b/intl/icu/source/data/zone/dz.txt
index 090531676..d217131e2 100644
--- a/intl/icu/source/data/zone/dz.txt
+++ b/intl/icu/source/data/zone/dz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
dz{
Version{"2.1.29.61"}
diff --git a/intl/icu/source/data/zone/ebu.txt b/intl/icu/source/data/zone/ebu.txt
index 377061464..42954c76f 100644
--- a/intl/icu/source/data/zone/ebu.txt
+++ b/intl/icu/source/data/zone/ebu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ebu{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ee.txt b/intl/icu/source/data/zone/ee.txt
index 0bd58e2e4..cf662614f 100644
--- a/intl/icu/source/data/zone/ee.txt
+++ b/intl/icu/source/data/zone/ee.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ee{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/el.txt b/intl/icu/source/data/zone/el.txt
index 518c597a7..54bf9fd4f 100644
--- a/intl/icu/source/data/zone/el.txt
+++ b/intl/icu/source/data/zone/el.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
el{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/en.txt b/intl/icu/source/data/zone/en.txt
index 6c61d28fc..3b04aeb16 100644
--- a/intl/icu/source/data/zone/en.txt
+++ b/intl/icu/source/data/zone/en.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en{
Version{"2.1.30.50"}
diff --git a/intl/icu/source/data/zone/en_001.txt b/intl/icu/source/data/zone/en_001.txt
index 98cf11d69..4c4b605e3 100644
--- a/intl/icu/source/data/zone/en_001.txt
+++ b/intl/icu/source/data/zone/en_001.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_001{
Version{"2.1.29.54"}
diff --git a/intl/icu/source/data/zone/en_150.txt b/intl/icu/source/data/zone/en_150.txt
index 1329a7550..da89523b0 100644
--- a/intl/icu/source/data/zone/en_150.txt
+++ b/intl/icu/source/data/zone/en_150.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_150{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_AG.txt b/intl/icu/source/data/zone/en_AG.txt
index 85efa69c1..c1126ccac 100644
--- a/intl/icu/source/data/zone/en_AG.txt
+++ b/intl/icu/source/data/zone/en_AG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_AI.txt b/intl/icu/source/data/zone/en_AI.txt
index b2ab82a90..ddd76e935 100644
--- a/intl/icu/source/data/zone/en_AI.txt
+++ b/intl/icu/source/data/zone/en_AI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_AT.txt b/intl/icu/source/data/zone/en_AT.txt
index 13def3a0f..28a31366b 100644
--- a/intl/icu/source/data/zone/en_AT.txt
+++ b/intl/icu/source/data/zone/en_AT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AT{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/zone/en_AU.txt b/intl/icu/source/data/zone/en_AU.txt
index 4073e96eb..4ab12611b 100644
--- a/intl/icu/source/data/zone/en_AU.txt
+++ b/intl/icu/source/data/zone/en_AU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_AU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_BB.txt b/intl/icu/source/data/zone/en_BB.txt
index 0cc013f0a..83b10f134 100644
--- a/intl/icu/source/data/zone/en_BB.txt
+++ b/intl/icu/source/data/zone/en_BB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_BE.txt b/intl/icu/source/data/zone/en_BE.txt
index 9772d9179..b7356c61e 100644
--- a/intl/icu/source/data/zone/en_BE.txt
+++ b/intl/icu/source/data/zone/en_BE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_BM.txt b/intl/icu/source/data/zone/en_BM.txt
index 817b1d4db..0e83ae213 100644
--- a/intl/icu/source/data/zone/en_BM.txt
+++ b/intl/icu/source/data/zone/en_BM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_BS.txt b/intl/icu/source/data/zone/en_BS.txt
index de6b10199..cf13bfe2c 100644
--- a/intl/icu/source/data/zone/en_BS.txt
+++ b/intl/icu/source/data/zone/en_BS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_BW.txt b/intl/icu/source/data/zone/en_BW.txt
index 172a690d5..17d906be6 100644
--- a/intl/icu/source/data/zone/en_BW.txt
+++ b/intl/icu/source/data/zone/en_BW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_BZ.txt b/intl/icu/source/data/zone/en_BZ.txt
index 1c3fa3919..14829b279 100644
--- a/intl/icu/source/data/zone/en_BZ.txt
+++ b/intl/icu/source/data/zone/en_BZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_BZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_CA.txt b/intl/icu/source/data/zone/en_CA.txt
index 123df70a8..1a2250c5f 100644
--- a/intl/icu/source/data/zone/en_CA.txt
+++ b/intl/icu/source/data/zone/en_CA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_CC.txt b/intl/icu/source/data/zone/en_CC.txt
index 2859e20a1..04974647c 100644
--- a/intl/icu/source/data/zone/en_CC.txt
+++ b/intl/icu/source/data/zone/en_CC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_CH.txt b/intl/icu/source/data/zone/en_CH.txt
index 135de3899..751598267 100644
--- a/intl/icu/source/data/zone/en_CH.txt
+++ b/intl/icu/source/data/zone/en_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CH{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/zone/en_CK.txt b/intl/icu/source/data/zone/en_CK.txt
index ea5960050..a7a61c0a4 100644
--- a/intl/icu/source/data/zone/en_CK.txt
+++ b/intl/icu/source/data/zone/en_CK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_CM.txt b/intl/icu/source/data/zone/en_CM.txt
index 174b85f09..2ce6f1537 100644
--- a/intl/icu/source/data/zone/en_CM.txt
+++ b/intl/icu/source/data/zone/en_CM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_CX.txt b/intl/icu/source/data/zone/en_CX.txt
index ae52aeeeb..50f1e1322 100644
--- a/intl/icu/source/data/zone/en_CX.txt
+++ b/intl/icu/source/data/zone/en_CX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CX{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_CY.txt b/intl/icu/source/data/zone/en_CY.txt
index ccbf61916..bee3916a5 100644
--- a/intl/icu/source/data/zone/en_CY.txt
+++ b/intl/icu/source/data/zone/en_CY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_CY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_DE.txt b/intl/icu/source/data/zone/en_DE.txt
index 51c69cb51..3875baae7 100644
--- a/intl/icu/source/data/zone/en_DE.txt
+++ b/intl/icu/source/data/zone/en_DE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DE{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/zone/en_DG.txt b/intl/icu/source/data/zone/en_DG.txt
index 8b4d81743..d0905b755 100644
--- a/intl/icu/source/data/zone/en_DG.txt
+++ b/intl/icu/source/data/zone/en_DG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_DK.txt b/intl/icu/source/data/zone/en_DK.txt
index 69e0cad99..16d128ab7 100644
--- a/intl/icu/source/data/zone/en_DK.txt
+++ b/intl/icu/source/data/zone/en_DK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DK{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/zone/en_DM.txt b/intl/icu/source/data/zone/en_DM.txt
index 6811cff12..eb5bbfbcf 100644
--- a/intl/icu/source/data/zone/en_DM.txt
+++ b/intl/icu/source/data/zone/en_DM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_DM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_ER.txt b/intl/icu/source/data/zone/en_ER.txt
index feb2d1ded..32cc958e6 100644
--- a/intl/icu/source/data/zone/en_ER.txt
+++ b/intl/icu/source/data/zone/en_ER.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ER{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_FI.txt b/intl/icu/source/data/zone/en_FI.txt
index 8906ed5d0..f730f07dd 100644
--- a/intl/icu/source/data/zone/en_FI.txt
+++ b/intl/icu/source/data/zone/en_FI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FI{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/zone/en_FJ.txt b/intl/icu/source/data/zone/en_FJ.txt
index b22339a2f..7ebd79ca9 100644
--- a/intl/icu/source/data/zone/en_FJ.txt
+++ b/intl/icu/source/data/zone/en_FJ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FJ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_FK.txt b/intl/icu/source/data/zone/en_FK.txt
index cf7774edc..2bf572496 100644
--- a/intl/icu/source/data/zone/en_FK.txt
+++ b/intl/icu/source/data/zone/en_FK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_FM.txt b/intl/icu/source/data/zone/en_FM.txt
index 0d69e7144..99961ceec 100644
--- a/intl/icu/source/data/zone/en_FM.txt
+++ b/intl/icu/source/data/zone/en_FM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_FM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_GB.txt b/intl/icu/source/data/zone/en_GB.txt
index 813a9017a..8d650e6d9 100644
--- a/intl/icu/source/data/zone/en_GB.txt
+++ b/intl/icu/source/data/zone/en_GB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_GD.txt b/intl/icu/source/data/zone/en_GD.txt
index 69be2478f..49fe1e0d0 100644
--- a/intl/icu/source/data/zone/en_GD.txt
+++ b/intl/icu/source/data/zone/en_GD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GD{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_GG.txt b/intl/icu/source/data/zone/en_GG.txt
index f898103fa..91004568c 100644
--- a/intl/icu/source/data/zone/en_GG.txt
+++ b/intl/icu/source/data/zone/en_GG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_GH.txt b/intl/icu/source/data/zone/en_GH.txt
index 695bcb905..4bb4fdf0c 100644
--- a/intl/icu/source/data/zone/en_GH.txt
+++ b/intl/icu/source/data/zone/en_GH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_GI.txt b/intl/icu/source/data/zone/en_GI.txt
index f74502bcd..0c02a5b4d 100644
--- a/intl/icu/source/data/zone/en_GI.txt
+++ b/intl/icu/source/data/zone/en_GI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_GM.txt b/intl/icu/source/data/zone/en_GM.txt
index 9f860581f..6166348f7 100644
--- a/intl/icu/source/data/zone/en_GM.txt
+++ b/intl/icu/source/data/zone/en_GM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_GU.txt b/intl/icu/source/data/zone/en_GU.txt
index 3958772d8..536158326 100644
--- a/intl/icu/source/data/zone/en_GU.txt
+++ b/intl/icu/source/data/zone/en_GU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GU{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/en_GY.txt b/intl/icu/source/data/zone/en_GY.txt
index 2ea70c67c..31c598346 100644
--- a/intl/icu/source/data/zone/en_GY.txt
+++ b/intl/icu/source/data/zone/en_GY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_GY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_HK.txt b/intl/icu/source/data/zone/en_HK.txt
index 230908deb..3f867301f 100644
--- a/intl/icu/source/data/zone/en_HK.txt
+++ b/intl/icu/source/data/zone/en_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_HK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_IE.txt b/intl/icu/source/data/zone/en_IE.txt
index b379acb9b..30cd08c1a 100644
--- a/intl/icu/source/data/zone/en_IE.txt
+++ b/intl/icu/source/data/zone/en_IE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_IL.txt b/intl/icu/source/data/zone/en_IL.txt
index 55e362c62..746e7281c 100644
--- a/intl/icu/source/data/zone/en_IL.txt
+++ b/intl/icu/source/data/zone/en_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IL{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_IM.txt b/intl/icu/source/data/zone/en_IM.txt
index 50ab53d95..a687af69b 100644
--- a/intl/icu/source/data/zone/en_IM.txt
+++ b/intl/icu/source/data/zone/en_IM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_IN.txt b/intl/icu/source/data/zone/en_IN.txt
index 8031c6952..13cd99616 100644
--- a/intl/icu/source/data/zone/en_IN.txt
+++ b/intl/icu/source/data/zone/en_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_IO.txt b/intl/icu/source/data/zone/en_IO.txt
index d2c4f915d..b69bf8429 100644
--- a/intl/icu/source/data/zone/en_IO.txt
+++ b/intl/icu/source/data/zone/en_IO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_IO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_JE.txt b/intl/icu/source/data/zone/en_JE.txt
index 9f48fef04..038bb26f9 100644
--- a/intl/icu/source/data/zone/en_JE.txt
+++ b/intl/icu/source/data/zone/en_JE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_JE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_JM.txt b/intl/icu/source/data/zone/en_JM.txt
index 11356e70f..0d2496752 100644
--- a/intl/icu/source/data/zone/en_JM.txt
+++ b/intl/icu/source/data/zone/en_JM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_JM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_KE.txt b/intl/icu/source/data/zone/en_KE.txt
index d0fb5bc7a..1f207ab41 100644
--- a/intl/icu/source/data/zone/en_KE.txt
+++ b/intl/icu/source/data/zone/en_KE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KE{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_KI.txt b/intl/icu/source/data/zone/en_KI.txt
index 862415465..2124576d0 100644
--- a/intl/icu/source/data/zone/en_KI.txt
+++ b/intl/icu/source/data/zone/en_KI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KI{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_KN.txt b/intl/icu/source/data/zone/en_KN.txt
index b68c8f161..da57520f3 100644
--- a/intl/icu/source/data/zone/en_KN.txt
+++ b/intl/icu/source/data/zone/en_KN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_KY.txt b/intl/icu/source/data/zone/en_KY.txt
index febcc6f32..ebb848e32 100644
--- a/intl/icu/source/data/zone/en_KY.txt
+++ b/intl/icu/source/data/zone/en_KY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_KY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_LC.txt b/intl/icu/source/data/zone/en_LC.txt
index b781315c3..0804526bb 100644
--- a/intl/icu/source/data/zone/en_LC.txt
+++ b/intl/icu/source/data/zone/en_LC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_LR.txt b/intl/icu/source/data/zone/en_LR.txt
index f40114f3b..9db9c6b97 100644
--- a/intl/icu/source/data/zone/en_LR.txt
+++ b/intl/icu/source/data/zone/en_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LR{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_LS.txt b/intl/icu/source/data/zone/en_LS.txt
index 62394c744..b1fc894dc 100644
--- a/intl/icu/source/data/zone/en_LS.txt
+++ b/intl/icu/source/data/zone/en_LS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_LS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_MG.txt b/intl/icu/source/data/zone/en_MG.txt
index 3ceed1d53..558c02b8f 100644
--- a/intl/icu/source/data/zone/en_MG.txt
+++ b/intl/icu/source/data/zone/en_MG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_MH.txt b/intl/icu/source/data/zone/en_MH.txt
index 7c71ddda5..52d731689 100644
--- a/intl/icu/source/data/zone/en_MH.txt
+++ b/intl/icu/source/data/zone/en_MH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MH{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/en_MO.txt b/intl/icu/source/data/zone/en_MO.txt
index 574019fec..31a3035a9 100644
--- a/intl/icu/source/data/zone/en_MO.txt
+++ b/intl/icu/source/data/zone/en_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_MP.txt b/intl/icu/source/data/zone/en_MP.txt
index 47dbb44c7..053f4de02 100644
--- a/intl/icu/source/data/zone/en_MP.txt
+++ b/intl/icu/source/data/zone/en_MP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MP{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/en_MS.txt b/intl/icu/source/data/zone/en_MS.txt
index 195a41771..1d0c8d66a 100644
--- a/intl/icu/source/data/zone/en_MS.txt
+++ b/intl/icu/source/data/zone/en_MS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_MT.txt b/intl/icu/source/data/zone/en_MT.txt
index 5602dfc61..af48d2411 100644
--- a/intl/icu/source/data/zone/en_MT.txt
+++ b/intl/icu/source/data/zone/en_MT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MT{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_MU.txt b/intl/icu/source/data/zone/en_MU.txt
index 120b52474..f46695610 100644
--- a/intl/icu/source/data/zone/en_MU.txt
+++ b/intl/icu/source/data/zone/en_MU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_MW.txt b/intl/icu/source/data/zone/en_MW.txt
index dffb54a87..70e2f5b1f 100644
--- a/intl/icu/source/data/zone/en_MW.txt
+++ b/intl/icu/source/data/zone/en_MW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_MY.txt b/intl/icu/source/data/zone/en_MY.txt
index 6cd68af43..3f03a1a77 100644
--- a/intl/icu/source/data/zone/en_MY.txt
+++ b/intl/icu/source/data/zone/en_MY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_MY{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_NA.txt b/intl/icu/source/data/zone/en_NA.txt
index 432db401a..c99f85ea8 100644
--- a/intl/icu/source/data/zone/en_NA.txt
+++ b/intl/icu/source/data/zone/en_NA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_NF.txt b/intl/icu/source/data/zone/en_NF.txt
index 1ed73166d..0165f120d 100644
--- a/intl/icu/source/data/zone/en_NF.txt
+++ b/intl/icu/source/data/zone/en_NF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NF{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_NG.txt b/intl/icu/source/data/zone/en_NG.txt
index 4eadb53d8..0d7717984 100644
--- a/intl/icu/source/data/zone/en_NG.txt
+++ b/intl/icu/source/data/zone/en_NG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_NH.txt b/intl/icu/source/data/zone/en_NH.txt
index 958b96bda..6bd32f2e3 100644
--- a/intl/icu/source/data/zone/en_NH.txt
+++ b/intl/icu/source/data/zone/en_NH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NH{
"%%ALIAS"{"en_VU"}
diff --git a/intl/icu/source/data/zone/en_NL.txt b/intl/icu/source/data/zone/en_NL.txt
index d0f6862e7..33524b50a 100644
--- a/intl/icu/source/data/zone/en_NL.txt
+++ b/intl/icu/source/data/zone/en_NL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NL{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/zone/en_NR.txt b/intl/icu/source/data/zone/en_NR.txt
index 1c1d8e792..5be05cc7c 100644
--- a/intl/icu/source/data/zone/en_NR.txt
+++ b/intl/icu/source/data/zone/en_NR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NR{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_NU.txt b/intl/icu/source/data/zone/en_NU.txt
index b2fde8fd1..a42ecc72b 100644
--- a/intl/icu/source/data/zone/en_NU.txt
+++ b/intl/icu/source/data/zone/en_NU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_NZ.txt b/intl/icu/source/data/zone/en_NZ.txt
index 5a00b84dc..2284c6fab 100644
--- a/intl/icu/source/data/zone/en_NZ.txt
+++ b/intl/icu/source/data/zone/en_NZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_NZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_PG.txt b/intl/icu/source/data/zone/en_PG.txt
index 58ac3ca25..604510c9d 100644
--- a/intl/icu/source/data/zone/en_PG.txt
+++ b/intl/icu/source/data/zone/en_PG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_PH.txt b/intl/icu/source/data/zone/en_PH.txt
index 5264c4069..609a3b622 100644
--- a/intl/icu/source/data/zone/en_PH.txt
+++ b/intl/icu/source/data/zone/en_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_PK.txt b/intl/icu/source/data/zone/en_PK.txt
index 0df78243e..0e57e8ac0 100644
--- a/intl/icu/source/data/zone/en_PK.txt
+++ b/intl/icu/source/data/zone/en_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_PN.txt b/intl/icu/source/data/zone/en_PN.txt
index cd620b3f9..43dd00d51 100644
--- a/intl/icu/source/data/zone/en_PN.txt
+++ b/intl/icu/source/data/zone/en_PN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PN{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_PW.txt b/intl/icu/source/data/zone/en_PW.txt
index 3825c9fec..5afb37694 100644
--- a/intl/icu/source/data/zone/en_PW.txt
+++ b/intl/icu/source/data/zone/en_PW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_PW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_RH.txt b/intl/icu/source/data/zone/en_RH.txt
index b60f708fb..2ac5ccfba 100644
--- a/intl/icu/source/data/zone/en_RH.txt
+++ b/intl/icu/source/data/zone/en_RH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_RH{
"%%ALIAS"{"en_ZW"}
diff --git a/intl/icu/source/data/zone/en_RW.txt b/intl/icu/source/data/zone/en_RW.txt
index c96970e20..95977a055 100644
--- a/intl/icu/source/data/zone/en_RW.txt
+++ b/intl/icu/source/data/zone/en_RW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_RW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SB.txt b/intl/icu/source/data/zone/en_SB.txt
index a81f9eb69..e7b621e17 100644
--- a/intl/icu/source/data/zone/en_SB.txt
+++ b/intl/icu/source/data/zone/en_SB.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SB{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SC.txt b/intl/icu/source/data/zone/en_SC.txt
index c907a3c34..ec0c78bf5 100644
--- a/intl/icu/source/data/zone/en_SC.txt
+++ b/intl/icu/source/data/zone/en_SC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SD.txt b/intl/icu/source/data/zone/en_SD.txt
index 13595013b..087c2624b 100644
--- a/intl/icu/source/data/zone/en_SD.txt
+++ b/intl/icu/source/data/zone/en_SD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SD{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SE.txt b/intl/icu/source/data/zone/en_SE.txt
index 452ce9cb0..4b87a459b 100644
--- a/intl/icu/source/data/zone/en_SE.txt
+++ b/intl/icu/source/data/zone/en_SE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SE{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/zone/en_SG.txt b/intl/icu/source/data/zone/en_SG.txt
index 91ebb3ee7..93041e90c 100644
--- a/intl/icu/source/data/zone/en_SG.txt
+++ b/intl/icu/source/data/zone/en_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SH.txt b/intl/icu/source/data/zone/en_SH.txt
index d6f5383bb..c1ae40dfb 100644
--- a/intl/icu/source/data/zone/en_SH.txt
+++ b/intl/icu/source/data/zone/en_SH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SH{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SI.txt b/intl/icu/source/data/zone/en_SI.txt
index 1b945e783..c92c07f73 100644
--- a/intl/icu/source/data/zone/en_SI.txt
+++ b/intl/icu/source/data/zone/en_SI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SI{
%%Parent{"en_150"}
diff --git a/intl/icu/source/data/zone/en_SL.txt b/intl/icu/source/data/zone/en_SL.txt
index b530744c2..4d33768f1 100644
--- a/intl/icu/source/data/zone/en_SL.txt
+++ b/intl/icu/source/data/zone/en_SL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SL{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SS.txt b/intl/icu/source/data/zone/en_SS.txt
index 3cc405e0e..fdbb4a4d1 100644
--- a/intl/icu/source/data/zone/en_SS.txt
+++ b/intl/icu/source/data/zone/en_SS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SX.txt b/intl/icu/source/data/zone/en_SX.txt
index 0349554e7..e9bd0354f 100644
--- a/intl/icu/source/data/zone/en_SX.txt
+++ b/intl/icu/source/data/zone/en_SX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SX{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_SZ.txt b/intl/icu/source/data/zone/en_SZ.txt
index 23325bf14..008bdc892 100644
--- a/intl/icu/source/data/zone/en_SZ.txt
+++ b/intl/icu/source/data/zone/en_SZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_SZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_TC.txt b/intl/icu/source/data/zone/en_TC.txt
index 82dff11d6..2eda36a72 100644
--- a/intl/icu/source/data/zone/en_TC.txt
+++ b/intl/icu/source/data/zone/en_TC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_TK.txt b/intl/icu/source/data/zone/en_TK.txt
index 0d759acab..1b2cd2648 100644
--- a/intl/icu/source/data/zone/en_TK.txt
+++ b/intl/icu/source/data/zone/en_TK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TK{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_TO.txt b/intl/icu/source/data/zone/en_TO.txt
index bb3bbcd09..445f612fc 100644
--- a/intl/icu/source/data/zone/en_TO.txt
+++ b/intl/icu/source/data/zone/en_TO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TO{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_TT.txt b/intl/icu/source/data/zone/en_TT.txt
index fdc2c64c1..8c4eb3347 100644
--- a/intl/icu/source/data/zone/en_TT.txt
+++ b/intl/icu/source/data/zone/en_TT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TT{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_TV.txt b/intl/icu/source/data/zone/en_TV.txt
index c4732547a..310771b7d 100644
--- a/intl/icu/source/data/zone/en_TV.txt
+++ b/intl/icu/source/data/zone/en_TV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TV{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_TZ.txt b/intl/icu/source/data/zone/en_TZ.txt
index b428e00d5..9def12391 100644
--- a/intl/icu/source/data/zone/en_TZ.txt
+++ b/intl/icu/source/data/zone/en_TZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_TZ{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_UG.txt b/intl/icu/source/data/zone/en_UG.txt
index c3d87d061..01e5e0abe 100644
--- a/intl/icu/source/data/zone/en_UG.txt
+++ b/intl/icu/source/data/zone/en_UG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_UG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_VC.txt b/intl/icu/source/data/zone/en_VC.txt
index c6d63b47f..4c87e83a9 100644
--- a/intl/icu/source/data/zone/en_VC.txt
+++ b/intl/icu/source/data/zone/en_VC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VC{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_VG.txt b/intl/icu/source/data/zone/en_VG.txt
index 366c5ea7f..2bd5b3097 100644
--- a/intl/icu/source/data/zone/en_VG.txt
+++ b/intl/icu/source/data/zone/en_VG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VG{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_VU.txt b/intl/icu/source/data/zone/en_VU.txt
index 2f6cb29fa..e34a26666 100644
--- a/intl/icu/source/data/zone/en_VU.txt
+++ b/intl/icu/source/data/zone/en_VU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_VU{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_WS.txt b/intl/icu/source/data/zone/en_WS.txt
index 982e5aac9..97b48b5d8 100644
--- a/intl/icu/source/data/zone/en_WS.txt
+++ b/intl/icu/source/data/zone/en_WS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_WS{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_ZA.txt b/intl/icu/source/data/zone/en_ZA.txt
index da3b52c61..3e3601ce7 100644
--- a/intl/icu/source/data/zone/en_ZA.txt
+++ b/intl/icu/source/data/zone/en_ZA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZA{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_ZM.txt b/intl/icu/source/data/zone/en_ZM.txt
index 3c21a77a7..d7fc8207e 100644
--- a/intl/icu/source/data/zone/en_ZM.txt
+++ b/intl/icu/source/data/zone/en_ZM.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZM{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/en_ZW.txt b/intl/icu/source/data/zone/en_ZW.txt
index 452c04949..3faff86b0 100644
--- a/intl/icu/source/data/zone/en_ZW.txt
+++ b/intl/icu/source/data/zone/en_ZW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
en_ZW{
%%Parent{"en_001"}
diff --git a/intl/icu/source/data/zone/eo.txt b/intl/icu/source/data/zone/eo.txt
index f741c1d04..2eab45a67 100644
--- a/intl/icu/source/data/zone/eo.txt
+++ b/intl/icu/source/data/zone/eo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/es.txt b/intl/icu/source/data/zone/es.txt
index 52e09dd63..769ff2890 100644
--- a/intl/icu/source/data/zone/es.txt
+++ b/intl/icu/source/data/zone/es.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es{
Version{"2.1.28.80"}
diff --git a/intl/icu/source/data/zone/es_419.txt b/intl/icu/source/data/zone/es_419.txt
index 4771b755b..b9d0d38f9 100644
--- a/intl/icu/source/data/zone/es_419.txt
+++ b/intl/icu/source/data/zone/es_419.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_419{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/zone/es_AR.txt b/intl/icu/source/data/zone/es_AR.txt
index 0c0087fae..c41c4961e 100644
--- a/intl/icu/source/data/zone/es_AR.txt
+++ b/intl/icu/source/data/zone/es_AR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_AR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_BO.txt b/intl/icu/source/data/zone/es_BO.txt
index 9e5426d95..8be780f22 100644
--- a/intl/icu/source/data/zone/es_BO.txt
+++ b/intl/icu/source/data/zone/es_BO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_BO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_BR.txt b/intl/icu/source/data/zone/es_BR.txt
index 14d1f6785..0e936587f 100644
--- a/intl/icu/source/data/zone/es_BR.txt
+++ b/intl/icu/source/data/zone/es_BR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_BR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_CL.txt b/intl/icu/source/data/zone/es_CL.txt
index 61e86d209..ccbdb7feb 100644
--- a/intl/icu/source/data/zone/es_CL.txt
+++ b/intl/icu/source/data/zone/es_CL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CL{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_CO.txt b/intl/icu/source/data/zone/es_CO.txt
index 4219b8dba..e728f00f3 100644
--- a/intl/icu/source/data/zone/es_CO.txt
+++ b/intl/icu/source/data/zone/es_CO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_CR.txt b/intl/icu/source/data/zone/es_CR.txt
index 979123132..f093ce328 100644
--- a/intl/icu/source/data/zone/es_CR.txt
+++ b/intl/icu/source/data/zone/es_CR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_CU.txt b/intl/icu/source/data/zone/es_CU.txt
index dbd4f5609..3d9841b4b 100644
--- a/intl/icu/source/data/zone/es_CU.txt
+++ b/intl/icu/source/data/zone/es_CU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_CU{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_DO.txt b/intl/icu/source/data/zone/es_DO.txt
index a6b9a31e3..537a3a4d8 100644
--- a/intl/icu/source/data/zone/es_DO.txt
+++ b/intl/icu/source/data/zone/es_DO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_DO{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_EC.txt b/intl/icu/source/data/zone/es_EC.txt
index 4c19011d8..242dea7da 100644
--- a/intl/icu/source/data/zone/es_EC.txt
+++ b/intl/icu/source/data/zone/es_EC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_EC{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_GT.txt b/intl/icu/source/data/zone/es_GT.txt
index 10e201074..1afc6b1da 100644
--- a/intl/icu/source/data/zone/es_GT.txt
+++ b/intl/icu/source/data/zone/es_GT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_GT{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_HN.txt b/intl/icu/source/data/zone/es_HN.txt
index c16f2603d..fc5dece4a 100644
--- a/intl/icu/source/data/zone/es_HN.txt
+++ b/intl/icu/source/data/zone/es_HN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_HN{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_MX.txt b/intl/icu/source/data/zone/es_MX.txt
index ac923bd9e..db5d8ca72 100644
--- a/intl/icu/source/data/zone/es_MX.txt
+++ b/intl/icu/source/data/zone/es_MX.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_MX{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_NI.txt b/intl/icu/source/data/zone/es_NI.txt
index df7b8c182..c33777b11 100644
--- a/intl/icu/source/data/zone/es_NI.txt
+++ b/intl/icu/source/data/zone/es_NI.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_NI{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_PA.txt b/intl/icu/source/data/zone/es_PA.txt
index 1a137ed9f..64dcebcc6 100644
--- a/intl/icu/source/data/zone/es_PA.txt
+++ b/intl/icu/source/data/zone/es_PA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PA{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_PE.txt b/intl/icu/source/data/zone/es_PE.txt
index 2285f6a42..62df0d533 100644
--- a/intl/icu/source/data/zone/es_PE.txt
+++ b/intl/icu/source/data/zone/es_PE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PE{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_PR.txt b/intl/icu/source/data/zone/es_PR.txt
index 6ccc3f959..189085071 100644
--- a/intl/icu/source/data/zone/es_PR.txt
+++ b/intl/icu/source/data/zone/es_PR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PR{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_PY.txt b/intl/icu/source/data/zone/es_PY.txt
index 236550605..a8538415c 100644
--- a/intl/icu/source/data/zone/es_PY.txt
+++ b/intl/icu/source/data/zone/es_PY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_PY{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_SV.txt b/intl/icu/source/data/zone/es_SV.txt
index ce06214ce..cbf095fd9 100644
--- a/intl/icu/source/data/zone/es_SV.txt
+++ b/intl/icu/source/data/zone/es_SV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_SV{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_US.txt b/intl/icu/source/data/zone/es_US.txt
index 3def8589a..1d764d366 100644
--- a/intl/icu/source/data/zone/es_US.txt
+++ b/intl/icu/source/data/zone/es_US.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_US{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_UY.txt b/intl/icu/source/data/zone/es_UY.txt
index 724311e5e..5d6d6afbc 100644
--- a/intl/icu/source/data/zone/es_UY.txt
+++ b/intl/icu/source/data/zone/es_UY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_UY{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/es_VE.txt b/intl/icu/source/data/zone/es_VE.txt
index 5b0c53cb3..4f3373839 100644
--- a/intl/icu/source/data/zone/es_VE.txt
+++ b/intl/icu/source/data/zone/es_VE.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
es_VE{
%%Parent{"es_419"}
diff --git a/intl/icu/source/data/zone/et.txt b/intl/icu/source/data/zone/et.txt
index 9633500e8..fb75a9504 100644
--- a/intl/icu/source/data/zone/et.txt
+++ b/intl/icu/source/data/zone/et.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
et{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/eu.txt b/intl/icu/source/data/zone/eu.txt
index ebb3ce8bc..79731f45c 100644
--- a/intl/icu/source/data/zone/eu.txt
+++ b/intl/icu/source/data/zone/eu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eu{
Version{"2.1.29.20"}
diff --git a/intl/icu/source/data/zone/ewo.txt b/intl/icu/source/data/zone/ewo.txt
index d180ce5c4..bb54f1dc5 100644
--- a/intl/icu/source/data/zone/ewo.txt
+++ b/intl/icu/source/data/zone/ewo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ewo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/fa.txt b/intl/icu/source/data/zone/fa.txt
index ec4565aef..44dae022a 100644
--- a/intl/icu/source/data/zone/fa.txt
+++ b/intl/icu/source/data/zone/fa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fa{
Version{"2.1.29.44"}
diff --git a/intl/icu/source/data/zone/ff.txt b/intl/icu/source/data/zone/ff.txt
index 0cbeb8dd0..7bc0b6ec0 100644
--- a/intl/icu/source/data/zone/ff.txt
+++ b/intl/icu/source/data/zone/ff.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/fi.txt b/intl/icu/source/data/zone/fi.txt
index ab8a0e826..4c69fffd1 100644
--- a/intl/icu/source/data/zone/fi.txt
+++ b/intl/icu/source/data/zone/fi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fi{
Version{"2.1.29.88"}
diff --git a/intl/icu/source/data/zone/fil.txt b/intl/icu/source/data/zone/fil.txt
index 1cc258f9a..bb807bfaf 100644
--- a/intl/icu/source/data/zone/fil.txt
+++ b/intl/icu/source/data/zone/fil.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fil{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/fil_PH.txt b/intl/icu/source/data/zone/fil_PH.txt
index 5b83d8215..cbd1275ac 100644
--- a/intl/icu/source/data/zone/fil_PH.txt
+++ b/intl/icu/source/data/zone/fil_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/fo.txt b/intl/icu/source/data/zone/fo.txt
index 87431a7a2..dfe3aef98 100644
--- a/intl/icu/source/data/zone/fo.txt
+++ b/intl/icu/source/data/zone/fo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fo{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/fr.txt b/intl/icu/source/data/zone/fr.txt
index 8fef05311..24342da68 100644
--- a/intl/icu/source/data/zone/fr.txt
+++ b/intl/icu/source/data/zone/fr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/fr_CA.txt b/intl/icu/source/data/zone/fr_CA.txt
index b1893f321..68dcd0363 100644
--- a/intl/icu/source/data/zone/fr_CA.txt
+++ b/intl/icu/source/data/zone/fr_CA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_CA{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/zone/fr_GF.txt b/intl/icu/source/data/zone/fr_GF.txt
index ac93cd714..f7c1334e5 100644
--- a/intl/icu/source/data/zone/fr_GF.txt
+++ b/intl/icu/source/data/zone/fr_GF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fr_GF{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/fur.txt b/intl/icu/source/data/zone/fur.txt
index 00f4b7466..840af0586 100644
--- a/intl/icu/source/data/zone/fur.txt
+++ b/intl/icu/source/data/zone/fur.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fur{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/fy.txt b/intl/icu/source/data/zone/fy.txt
index 9a0794a32..4c556fe8f 100644
--- a/intl/icu/source/data/zone/fy.txt
+++ b/intl/icu/source/data/zone/fy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fy{
Version{"2.1.29.44"}
diff --git a/intl/icu/source/data/zone/ga.txt b/intl/icu/source/data/zone/ga.txt
index 1479e6798..86e7d0fb9 100644
--- a/intl/icu/source/data/zone/ga.txt
+++ b/intl/icu/source/data/zone/ga.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ga{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/gd.txt b/intl/icu/source/data/zone/gd.txt
index 55fc793ee..11d6846b2 100644
--- a/intl/icu/source/data/zone/gd.txt
+++ b/intl/icu/source/data/zone/gd.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gd{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/gl.txt b/intl/icu/source/data/zone/gl.txt
index 334b691bc..bcf0c3f47 100644
--- a/intl/icu/source/data/zone/gl.txt
+++ b/intl/icu/source/data/zone/gl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gl{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/gsw.txt b/intl/icu/source/data/zone/gsw.txt
index 060e64d8a..78e8769a9 100644
--- a/intl/icu/source/data/zone/gsw.txt
+++ b/intl/icu/source/data/zone/gsw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gsw{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/gu.txt b/intl/icu/source/data/zone/gu.txt
index 572a2abac..1895cbcc6 100644
--- a/intl/icu/source/data/zone/gu.txt
+++ b/intl/icu/source/data/zone/gu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gu{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/guz.txt b/intl/icu/source/data/zone/guz.txt
index d53b6091a..79d17b51e 100644
--- a/intl/icu/source/data/zone/guz.txt
+++ b/intl/icu/source/data/zone/guz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
guz{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/gv.txt b/intl/icu/source/data/zone/gv.txt
index 5e6a4fa69..d277c1c0c 100644
--- a/intl/icu/source/data/zone/gv.txt
+++ b/intl/icu/source/data/zone/gv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
gv{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ha.txt b/intl/icu/source/data/zone/ha.txt
index b81756837..36f9d93b7 100644
--- a/intl/icu/source/data/zone/ha.txt
+++ b/intl/icu/source/data/zone/ha.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ha{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/haw.txt b/intl/icu/source/data/zone/haw.txt
index 368b72b54..dba75af21 100644
--- a/intl/icu/source/data/zone/haw.txt
+++ b/intl/icu/source/data/zone/haw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
haw{
Version{"2.1.27.98"}
diff --git a/intl/icu/source/data/zone/he.txt b/intl/icu/source/data/zone/he.txt
index 763c7f0ee..ddc5ead43 100644
--- a/intl/icu/source/data/zone/he.txt
+++ b/intl/icu/source/data/zone/he.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
he{
Version{"2.1.29.27"}
diff --git a/intl/icu/source/data/zone/he_IL.txt b/intl/icu/source/data/zone/he_IL.txt
index 71039533a..c4c98fed2 100644
--- a/intl/icu/source/data/zone/he_IL.txt
+++ b/intl/icu/source/data/zone/he_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/hi.txt b/intl/icu/source/data/zone/hi.txt
index d6be4d49a..57fb30c47 100644
--- a/intl/icu/source/data/zone/hi.txt
+++ b/intl/icu/source/data/zone/hi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hi{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/hr.txt b/intl/icu/source/data/zone/hr.txt
index 41dc6fc27..fe2291c8c 100644
--- a/intl/icu/source/data/zone/hr.txt
+++ b/intl/icu/source/data/zone/hr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hr{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/hsb.txt b/intl/icu/source/data/zone/hsb.txt
index 8ac4696eb..bf739fbae 100644
--- a/intl/icu/source/data/zone/hsb.txt
+++ b/intl/icu/source/data/zone/hsb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hsb{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/hu.txt b/intl/icu/source/data/zone/hu.txt
index 308594f23..5afe05913 100644
--- a/intl/icu/source/data/zone/hu.txt
+++ b/intl/icu/source/data/zone/hu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hu{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/hy.txt b/intl/icu/source/data/zone/hy.txt
index 994121d2c..69b61f556 100644
--- a/intl/icu/source/data/zone/hy.txt
+++ b/intl/icu/source/data/zone/hy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
hy{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/id.txt b/intl/icu/source/data/zone/id.txt
index aa6aec743..04dcb4105 100644
--- a/intl/icu/source/data/zone/id.txt
+++ b/intl/icu/source/data/zone/id.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
id{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/id_ID.txt b/intl/icu/source/data/zone/id_ID.txt
index 20daa236e..e7af68c1b 100644
--- a/intl/icu/source/data/zone/id_ID.txt
+++ b/intl/icu/source/data/zone/id_ID.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/ig.txt b/intl/icu/source/data/zone/ig.txt
index fcbb8946c..2fdf9f2af 100644
--- a/intl/icu/source/data/zone/ig.txt
+++ b/intl/icu/source/data/zone/ig.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ig{
Version{"2.1.27.84"}
diff --git a/intl/icu/source/data/zone/ii.txt b/intl/icu/source/data/zone/ii.txt
index 23c3b4cf6..04edba65c 100644
--- a/intl/icu/source/data/zone/ii.txt
+++ b/intl/icu/source/data/zone/ii.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ii{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/in.txt b/intl/icu/source/data/zone/in.txt
index 02335238a..05ecf2873 100644
--- a/intl/icu/source/data/zone/in.txt
+++ b/intl/icu/source/data/zone/in.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
in{
"%%ALIAS"{"id"}
diff --git a/intl/icu/source/data/zone/in_ID.txt b/intl/icu/source/data/zone/in_ID.txt
index acec72c6e..9f9ef5ff1 100644
--- a/intl/icu/source/data/zone/in_ID.txt
+++ b/intl/icu/source/data/zone/in_ID.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
in_ID{
"%%ALIAS"{"id_ID"}
diff --git a/intl/icu/source/data/zone/is.txt b/intl/icu/source/data/zone/is.txt
index 7b14d8432..03bbf3c72 100644
--- a/intl/icu/source/data/zone/is.txt
+++ b/intl/icu/source/data/zone/is.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
is{
Version{"2.1.29.65"}
diff --git a/intl/icu/source/data/zone/it.txt b/intl/icu/source/data/zone/it.txt
index 2cff359fa..e00a8c942 100644
--- a/intl/icu/source/data/zone/it.txt
+++ b/intl/icu/source/data/zone/it.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
it{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/iw.txt b/intl/icu/source/data/zone/iw.txt
index d59865d1c..8d9fabbe3 100644
--- a/intl/icu/source/data/zone/iw.txt
+++ b/intl/icu/source/data/zone/iw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
iw{
"%%ALIAS"{"he"}
diff --git a/intl/icu/source/data/zone/iw_IL.txt b/intl/icu/source/data/zone/iw_IL.txt
index cf1666a68..3976d06e2 100644
--- a/intl/icu/source/data/zone/iw_IL.txt
+++ b/intl/icu/source/data/zone/iw_IL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
iw_IL{
"%%ALIAS"{"he_IL"}
diff --git a/intl/icu/source/data/zone/ja.txt b/intl/icu/source/data/zone/ja.txt
index 1aeb4b78a..0dc15b51f 100644
--- a/intl/icu/source/data/zone/ja.txt
+++ b/intl/icu/source/data/zone/ja.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ja{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ja_JP.txt b/intl/icu/source/data/zone/ja_JP.txt
index 933dd40c6..c9911f147 100644
--- a/intl/icu/source/data/zone/ja_JP.txt
+++ b/intl/icu/source/data/zone/ja_JP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/ja_JP_TRADITIONAL.txt b/intl/icu/source/data/zone/ja_JP_TRADITIONAL.txt
index 2a23df32f..0965cc557 100644
--- a/intl/icu/source/data/zone/ja_JP_TRADITIONAL.txt
+++ b/intl/icu/source/data/zone/ja_JP_TRADITIONAL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ja_JP_TRADITIONAL{
calendar{
diff --git a/intl/icu/source/data/zone/jgo.txt b/intl/icu/source/data/zone/jgo.txt
index 8d91378e6..6e0b8b74a 100644
--- a/intl/icu/source/data/zone/jgo.txt
+++ b/intl/icu/source/data/zone/jgo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
jgo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/jmc.txt b/intl/icu/source/data/zone/jmc.txt
index 97c22083c..34bc28953 100644
--- a/intl/icu/source/data/zone/jmc.txt
+++ b/intl/icu/source/data/zone/jmc.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
jmc{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ka.txt b/intl/icu/source/data/zone/ka.txt
index 1e87efda6..96b6d05ad 100644
--- a/intl/icu/source/data/zone/ka.txt
+++ b/intl/icu/source/data/zone/ka.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ka{
Version{"2.1.29.20"}
diff --git a/intl/icu/source/data/zone/kab.txt b/intl/icu/source/data/zone/kab.txt
index 6264be23f..916234188 100644
--- a/intl/icu/source/data/zone/kab.txt
+++ b/intl/icu/source/data/zone/kab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kab{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/kam.txt b/intl/icu/source/data/zone/kam.txt
index 3d2273b3a..ad41d387a 100644
--- a/intl/icu/source/data/zone/kam.txt
+++ b/intl/icu/source/data/zone/kam.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kam{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/kde.txt b/intl/icu/source/data/zone/kde.txt
index 31a55fa24..e63c052e3 100644
--- a/intl/icu/source/data/zone/kde.txt
+++ b/intl/icu/source/data/zone/kde.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kde{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/kea.txt b/intl/icu/source/data/zone/kea.txt
index c9a750571..57c3fcf24 100644
--- a/intl/icu/source/data/zone/kea.txt
+++ b/intl/icu/source/data/zone/kea.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kea{
Version{"2.1.27.46"}
diff --git a/intl/icu/source/data/zone/khq.txt b/intl/icu/source/data/zone/khq.txt
index 747e59878..d84835b8d 100644
--- a/intl/icu/source/data/zone/khq.txt
+++ b/intl/icu/source/data/zone/khq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
khq{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ki.txt b/intl/icu/source/data/zone/ki.txt
index c5e32d3e0..36772c0be 100644
--- a/intl/icu/source/data/zone/ki.txt
+++ b/intl/icu/source/data/zone/ki.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ki{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/kk.txt b/intl/icu/source/data/zone/kk.txt
index 7838749fd..7e54dd471 100644
--- a/intl/icu/source/data/zone/kk.txt
+++ b/intl/icu/source/data/zone/kk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kk{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/kkj.txt b/intl/icu/source/data/zone/kkj.txt
index fcd2f91a3..13382bb0b 100644
--- a/intl/icu/source/data/zone/kkj.txt
+++ b/intl/icu/source/data/zone/kkj.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kkj{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/kl.txt b/intl/icu/source/data/zone/kl.txt
index 0cd0df173..8b90c4d6c 100644
--- a/intl/icu/source/data/zone/kl.txt
+++ b/intl/icu/source/data/zone/kl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kl{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/kln.txt b/intl/icu/source/data/zone/kln.txt
index 467e5a4fe..6c79d3009 100644
--- a/intl/icu/source/data/zone/kln.txt
+++ b/intl/icu/source/data/zone/kln.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kln{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/km.txt b/intl/icu/source/data/zone/km.txt
index 1fe27355b..6198fdeec 100644
--- a/intl/icu/source/data/zone/km.txt
+++ b/intl/icu/source/data/zone/km.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
km{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/kn.txt b/intl/icu/source/data/zone/kn.txt
index ebcfd354c..d60f01cba 100644
--- a/intl/icu/source/data/zone/kn.txt
+++ b/intl/icu/source/data/zone/kn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kn{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ko.txt b/intl/icu/source/data/zone/ko.txt
index ab59f709f..8bc53c5b7 100644
--- a/intl/icu/source/data/zone/ko.txt
+++ b/intl/icu/source/data/zone/ko.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ko{
Version{"2.1.29.22"}
diff --git a/intl/icu/source/data/zone/ko_KP.txt b/intl/icu/source/data/zone/ko_KP.txt
index 81d1fa686..b625c8922 100644
--- a/intl/icu/source/data/zone/ko_KP.txt
+++ b/intl/icu/source/data/zone/ko_KP.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ko_KP{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/kok.txt b/intl/icu/source/data/zone/kok.txt
index 6d532fe11..989ff0100 100644
--- a/intl/icu/source/data/zone/kok.txt
+++ b/intl/icu/source/data/zone/kok.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kok{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ks.txt b/intl/icu/source/data/zone/ks.txt
index c2b1b7180..38cb940a9 100644
--- a/intl/icu/source/data/zone/ks.txt
+++ b/intl/icu/source/data/zone/ks.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ks{
Version{"2.1.30.6"}
diff --git a/intl/icu/source/data/zone/ksb.txt b/intl/icu/source/data/zone/ksb.txt
index 0ea702f8d..755d529c3 100644
--- a/intl/icu/source/data/zone/ksb.txt
+++ b/intl/icu/source/data/zone/ksb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksb{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ksf.txt b/intl/icu/source/data/zone/ksf.txt
index 2945bf70e..090b5ae31 100644
--- a/intl/icu/source/data/zone/ksf.txt
+++ b/intl/icu/source/data/zone/ksf.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksf{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ksh.txt b/intl/icu/source/data/zone/ksh.txt
index 040763b2a..3d276555f 100644
--- a/intl/icu/source/data/zone/ksh.txt
+++ b/intl/icu/source/data/zone/ksh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ksh{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/kw.txt b/intl/icu/source/data/zone/kw.txt
index 29bf74918..f7fe9d972 100644
--- a/intl/icu/source/data/zone/kw.txt
+++ b/intl/icu/source/data/zone/kw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
kw{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ky.txt b/intl/icu/source/data/zone/ky.txt
index afaffeec4..dce00ccda 100644
--- a/intl/icu/source/data/zone/ky.txt
+++ b/intl/icu/source/data/zone/ky.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ky{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/lag.txt b/intl/icu/source/data/zone/lag.txt
index f5ff88b16..229724781 100644
--- a/intl/icu/source/data/zone/lag.txt
+++ b/intl/icu/source/data/zone/lag.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lag{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/lb.txt b/intl/icu/source/data/zone/lb.txt
index 78c3d8012..8d7d9507e 100644
--- a/intl/icu/source/data/zone/lb.txt
+++ b/intl/icu/source/data/zone/lb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lb{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/lg.txt b/intl/icu/source/data/zone/lg.txt
index 6087db766..1792ebfc1 100644
--- a/intl/icu/source/data/zone/lg.txt
+++ b/intl/icu/source/data/zone/lg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lg{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/lkt.txt b/intl/icu/source/data/zone/lkt.txt
index 661a0d3e6..37f349963 100644
--- a/intl/icu/source/data/zone/lkt.txt
+++ b/intl/icu/source/data/zone/lkt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lkt{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ln.txt b/intl/icu/source/data/zone/ln.txt
index 2dfe87a13..b805b4432 100644
--- a/intl/icu/source/data/zone/ln.txt
+++ b/intl/icu/source/data/zone/ln.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ln{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/lo.txt b/intl/icu/source/data/zone/lo.txt
index 3c98d132b..6c697b0fd 100644
--- a/intl/icu/source/data/zone/lo.txt
+++ b/intl/icu/source/data/zone/lo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lo{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/lrc.txt b/intl/icu/source/data/zone/lrc.txt
index aae633755..35bb1486b 100644
--- a/intl/icu/source/data/zone/lrc.txt
+++ b/intl/icu/source/data/zone/lrc.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lrc{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/lt.txt b/intl/icu/source/data/zone/lt.txt
index 65004f645..9fd849a32 100644
--- a/intl/icu/source/data/zone/lt.txt
+++ b/intl/icu/source/data/zone/lt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lt{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/lu.txt b/intl/icu/source/data/zone/lu.txt
index 1844a9e81..9674f742b 100644
--- a/intl/icu/source/data/zone/lu.txt
+++ b/intl/icu/source/data/zone/lu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lu{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/luo.txt b/intl/icu/source/data/zone/luo.txt
index 8b41c72a7..962d8f103 100644
--- a/intl/icu/source/data/zone/luo.txt
+++ b/intl/icu/source/data/zone/luo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
luo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/luy.txt b/intl/icu/source/data/zone/luy.txt
index 82ba6c773..4352947e7 100644
--- a/intl/icu/source/data/zone/luy.txt
+++ b/intl/icu/source/data/zone/luy.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
luy{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/lv.txt b/intl/icu/source/data/zone/lv.txt
index f45f2b91a..6e7683916 100644
--- a/intl/icu/source/data/zone/lv.txt
+++ b/intl/icu/source/data/zone/lv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
lv{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/mas.txt b/intl/icu/source/data/zone/mas.txt
index f6364e81f..e624697f8 100644
--- a/intl/icu/source/data/zone/mas.txt
+++ b/intl/icu/source/data/zone/mas.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mas{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/mer.txt b/intl/icu/source/data/zone/mer.txt
index b3efda133..ac5fa74f2 100644
--- a/intl/icu/source/data/zone/mer.txt
+++ b/intl/icu/source/data/zone/mer.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mer{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/mfe.txt b/intl/icu/source/data/zone/mfe.txt
index 4049c9fb4..b71536ddf 100644
--- a/intl/icu/source/data/zone/mfe.txt
+++ b/intl/icu/source/data/zone/mfe.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mfe{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/mg.txt b/intl/icu/source/data/zone/mg.txt
index 426e87165..39cd2c2e8 100644
--- a/intl/icu/source/data/zone/mg.txt
+++ b/intl/icu/source/data/zone/mg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mg{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/mgh.txt b/intl/icu/source/data/zone/mgh.txt
index 78a88c606..78a56e58b 100644
--- a/intl/icu/source/data/zone/mgh.txt
+++ b/intl/icu/source/data/zone/mgh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mgh{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/mgo.txt b/intl/icu/source/data/zone/mgo.txt
index 673dd6f18..bdca7b1ee 100644
--- a/intl/icu/source/data/zone/mgo.txt
+++ b/intl/icu/source/data/zone/mgo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mgo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/mk.txt b/intl/icu/source/data/zone/mk.txt
index 438fb7835..79b84b794 100644
--- a/intl/icu/source/data/zone/mk.txt
+++ b/intl/icu/source/data/zone/mk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mk{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ml.txt b/intl/icu/source/data/zone/ml.txt
index 8673436a0..237a48727 100644
--- a/intl/icu/source/data/zone/ml.txt
+++ b/intl/icu/source/data/zone/ml.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ml{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/mn.txt b/intl/icu/source/data/zone/mn.txt
index 888eb1c98..eeb4d886c 100644
--- a/intl/icu/source/data/zone/mn.txt
+++ b/intl/icu/source/data/zone/mn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mn{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/mo.txt b/intl/icu/source/data/zone/mo.txt
index 64025913d..a698deb33 100644
--- a/intl/icu/source/data/zone/mo.txt
+++ b/intl/icu/source/data/zone/mo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mo{
"%%ALIAS"{"ro_MD"}
diff --git a/intl/icu/source/data/zone/mr.txt b/intl/icu/source/data/zone/mr.txt
index 79d956bb4..b7e9ac66b 100644
--- a/intl/icu/source/data/zone/mr.txt
+++ b/intl/icu/source/data/zone/mr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mr{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ms.txt b/intl/icu/source/data/zone/ms.txt
index 2d4e0ed31..0d68867b3 100644
--- a/intl/icu/source/data/zone/ms.txt
+++ b/intl/icu/source/data/zone/ms.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ms{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/mt.txt b/intl/icu/source/data/zone/mt.txt
index b63df9c28..a0ba89c26 100644
--- a/intl/icu/source/data/zone/mt.txt
+++ b/intl/icu/source/data/zone/mt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mt{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/mua.txt b/intl/icu/source/data/zone/mua.txt
index 7eb9c8fd1..17026c70b 100644
--- a/intl/icu/source/data/zone/mua.txt
+++ b/intl/icu/source/data/zone/mua.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mua{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/my.txt b/intl/icu/source/data/zone/my.txt
index 9250abdfa..ddf358f69 100644
--- a/intl/icu/source/data/zone/my.txt
+++ b/intl/icu/source/data/zone/my.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
my{
Version{"2.1.30.50"}
diff --git a/intl/icu/source/data/zone/mzn.txt b/intl/icu/source/data/zone/mzn.txt
index 587af2402..524763fc4 100644
--- a/intl/icu/source/data/zone/mzn.txt
+++ b/intl/icu/source/data/zone/mzn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mzn{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/naq.txt b/intl/icu/source/data/zone/naq.txt
index af5f8cb24..65cf61b1f 100644
--- a/intl/icu/source/data/zone/naq.txt
+++ b/intl/icu/source/data/zone/naq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
naq{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/nb.txt b/intl/icu/source/data/zone/nb.txt
index c77688120..93ae6f549 100644
--- a/intl/icu/source/data/zone/nb.txt
+++ b/intl/icu/source/data/zone/nb.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nb{
Version{"2.1.30.7"}
diff --git a/intl/icu/source/data/zone/nb_NO.txt b/intl/icu/source/data/zone/nb_NO.txt
index fdac28bf6..dcfaf4a4e 100644
--- a/intl/icu/source/data/zone/nb_NO.txt
+++ b/intl/icu/source/data/zone/nb_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/nd.txt b/intl/icu/source/data/zone/nd.txt
index 0d8929160..e4bdbb048 100644
--- a/intl/icu/source/data/zone/nd.txt
+++ b/intl/icu/source/data/zone/nd.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nd{
Version{"2.1.27.65"}
diff --git a/intl/icu/source/data/zone/nds.txt b/intl/icu/source/data/zone/nds.txt
index f5e699cbb..fbf3a026c 100644
--- a/intl/icu/source/data/zone/nds.txt
+++ b/intl/icu/source/data/zone/nds.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nds{
Version{"2.1.28.71"}
diff --git a/intl/icu/source/data/zone/ne.txt b/intl/icu/source/data/zone/ne.txt
index b6aba18ff..e0e0657bb 100644
--- a/intl/icu/source/data/zone/ne.txt
+++ b/intl/icu/source/data/zone/ne.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ne{
Version{"2.1.29.20"}
diff --git a/intl/icu/source/data/zone/ne_IN.txt b/intl/icu/source/data/zone/ne_IN.txt
index 21b11b4cf..8e9a42e78 100644
--- a/intl/icu/source/data/zone/ne_IN.txt
+++ b/intl/icu/source/data/zone/ne_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ne_IN{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/nl.txt b/intl/icu/source/data/zone/nl.txt
index c8e01a618..c903bc364 100644
--- a/intl/icu/source/data/zone/nl.txt
+++ b/intl/icu/source/data/zone/nl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/nl_SR.txt b/intl/icu/source/data/zone/nl_SR.txt
index bcf09f5c0..07f3bcf23 100644
--- a/intl/icu/source/data/zone/nl_SR.txt
+++ b/intl/icu/source/data/zone/nl_SR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nl_SR{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/nmg.txt b/intl/icu/source/data/zone/nmg.txt
index 4cecd2e2e..3c93ee781 100644
--- a/intl/icu/source/data/zone/nmg.txt
+++ b/intl/icu/source/data/zone/nmg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nmg{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/nn.txt b/intl/icu/source/data/zone/nn.txt
index 6b0f3783b..fafb569ff 100644
--- a/intl/icu/source/data/zone/nn.txt
+++ b/intl/icu/source/data/zone/nn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nn{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/nn_NO.txt b/intl/icu/source/data/zone/nn_NO.txt
index 4e8a5f78d..5793f5f55 100644
--- a/intl/icu/source/data/zone/nn_NO.txt
+++ b/intl/icu/source/data/zone/nn_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/nnh.txt b/intl/icu/source/data/zone/nnh.txt
index 27539e7aa..5cbd11e7d 100644
--- a/intl/icu/source/data/zone/nnh.txt
+++ b/intl/icu/source/data/zone/nnh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nnh{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/no.txt b/intl/icu/source/data/zone/no.txt
index 097a923cd..8b021f546 100644
--- a/intl/icu/source/data/zone/no.txt
+++ b/intl/icu/source/data/zone/no.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no{
"%%ALIAS"{"nb"}
diff --git a/intl/icu/source/data/zone/no_NO.txt b/intl/icu/source/data/zone/no_NO.txt
index 188a8a4a6..b3403f663 100644
--- a/intl/icu/source/data/zone/no_NO.txt
+++ b/intl/icu/source/data/zone/no_NO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no_NO{
"%%ALIAS"{"nb_NO"}
diff --git a/intl/icu/source/data/zone/no_NO_NY.txt b/intl/icu/source/data/zone/no_NO_NY.txt
index aa897fe6f..c380c1c3e 100644
--- a/intl/icu/source/data/zone/no_NO_NY.txt
+++ b/intl/icu/source/data/zone/no_NO_NY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
no_NO_NY{
"%%ALIAS"{"nn_NO"}
diff --git a/intl/icu/source/data/zone/nus.txt b/intl/icu/source/data/zone/nus.txt
index fc494d092..5d1629cdc 100644
--- a/intl/icu/source/data/zone/nus.txt
+++ b/intl/icu/source/data/zone/nus.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nus{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/nyn.txt b/intl/icu/source/data/zone/nyn.txt
index 68ccc90a0..baed13cad 100644
--- a/intl/icu/source/data/zone/nyn.txt
+++ b/intl/icu/source/data/zone/nyn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
nyn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/om.txt b/intl/icu/source/data/zone/om.txt
index 31ebaa875..957d41b80 100644
--- a/intl/icu/source/data/zone/om.txt
+++ b/intl/icu/source/data/zone/om.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
om{
Version{"2.1.27.98"}
diff --git a/intl/icu/source/data/zone/or.txt b/intl/icu/source/data/zone/or.txt
index 5fa084ec8..0cc2d4b1e 100644
--- a/intl/icu/source/data/zone/or.txt
+++ b/intl/icu/source/data/zone/or.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
or{
Version{"2.1.27.78"}
diff --git a/intl/icu/source/data/zone/os.txt b/intl/icu/source/data/zone/os.txt
index 3d8f70e47..aa50b8a2d 100644
--- a/intl/icu/source/data/zone/os.txt
+++ b/intl/icu/source/data/zone/os.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
os{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/pa.txt b/intl/icu/source/data/zone/pa.txt
index bb86dd7db..50fb89009 100644
--- a/intl/icu/source/data/zone/pa.txt
+++ b/intl/icu/source/data/zone/pa.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/pa_Arab.txt b/intl/icu/source/data/zone/pa_Arab.txt
index f5602411a..3bf582d67 100644
--- a/intl/icu/source/data/zone/pa_Arab.txt
+++ b/intl/icu/source/data/zone/pa_Arab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_Arab{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/pa_Arab_PK.txt b/intl/icu/source/data/zone/pa_Arab_PK.txt
index e6b58610a..921493302 100644
--- a/intl/icu/source/data/zone/pa_Arab_PK.txt
+++ b/intl/icu/source/data/zone/pa_Arab_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/pa_Guru.txt b/intl/icu/source/data/zone/pa_Guru.txt
index f060f3b8d..f0313fa28 100644
--- a/intl/icu/source/data/zone/pa_Guru.txt
+++ b/intl/icu/source/data/zone/pa_Guru.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_Guru{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/pa_Guru_IN.txt b/intl/icu/source/data/zone/pa_Guru_IN.txt
index adeae3fec..9c26f66bd 100644
--- a/intl/icu/source/data/zone/pa_Guru_IN.txt
+++ b/intl/icu/source/data/zone/pa_Guru_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/pa_IN.txt b/intl/icu/source/data/zone/pa_IN.txt
index b18bba68d..0c4702dd8 100644
--- a/intl/icu/source/data/zone/pa_IN.txt
+++ b/intl/icu/source/data/zone/pa_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_IN{
"%%ALIAS"{"pa_Guru_IN"}
diff --git a/intl/icu/source/data/zone/pa_PK.txt b/intl/icu/source/data/zone/pa_PK.txt
index 1c66c7b37..24e745c3f 100644
--- a/intl/icu/source/data/zone/pa_PK.txt
+++ b/intl/icu/source/data/zone/pa_PK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pa_PK{
"%%ALIAS"{"pa_Arab_PK"}
diff --git a/intl/icu/source/data/zone/pl.txt b/intl/icu/source/data/zone/pl.txt
index d113fcd18..87c665974 100644
--- a/intl/icu/source/data/zone/pl.txt
+++ b/intl/icu/source/data/zone/pl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pl{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ps.txt b/intl/icu/source/data/zone/ps.txt
index a7e4ef1ad..01e56b49c 100644
--- a/intl/icu/source/data/zone/ps.txt
+++ b/intl/icu/source/data/zone/ps.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ps{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/pt.txt b/intl/icu/source/data/zone/pt.txt
index e4a9c2fe4..fa77cb782 100644
--- a/intl/icu/source/data/zone/pt.txt
+++ b/intl/icu/source/data/zone/pt.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/pt_AO.txt b/intl/icu/source/data/zone/pt_AO.txt
index fd8146185..adbce77cd 100644
--- a/intl/icu/source/data/zone/pt_AO.txt
+++ b/intl/icu/source/data/zone/pt_AO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_AO{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_CH.txt b/intl/icu/source/data/zone/pt_CH.txt
index 5f1b386fe..a8855c5db 100644
--- a/intl/icu/source/data/zone/pt_CH.txt
+++ b/intl/icu/source/data/zone/pt_CH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_CH{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_CV.txt b/intl/icu/source/data/zone/pt_CV.txt
index fcc850391..f861b4eb5 100644
--- a/intl/icu/source/data/zone/pt_CV.txt
+++ b/intl/icu/source/data/zone/pt_CV.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_CV{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_GQ.txt b/intl/icu/source/data/zone/pt_GQ.txt
index 5a098d1e9..981da7b3d 100644
--- a/intl/icu/source/data/zone/pt_GQ.txt
+++ b/intl/icu/source/data/zone/pt_GQ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_GQ{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_GW.txt b/intl/icu/source/data/zone/pt_GW.txt
index 5c5a88aae..e0c2c3db5 100644
--- a/intl/icu/source/data/zone/pt_GW.txt
+++ b/intl/icu/source/data/zone/pt_GW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_GW{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_LU.txt b/intl/icu/source/data/zone/pt_LU.txt
index 009ec80dd..3c00b8b0b 100644
--- a/intl/icu/source/data/zone/pt_LU.txt
+++ b/intl/icu/source/data/zone/pt_LU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_LU{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_MO.txt b/intl/icu/source/data/zone/pt_MO.txt
index 7f5733a40..655b57636 100644
--- a/intl/icu/source/data/zone/pt_MO.txt
+++ b/intl/icu/source/data/zone/pt_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_MO{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_MZ.txt b/intl/icu/source/data/zone/pt_MZ.txt
index a2609b7ff..0c556f3ba 100644
--- a/intl/icu/source/data/zone/pt_MZ.txt
+++ b/intl/icu/source/data/zone/pt_MZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_MZ{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_PT.txt b/intl/icu/source/data/zone/pt_PT.txt
index 513e05b3c..d54414e51 100644
--- a/intl/icu/source/data/zone/pt_PT.txt
+++ b/intl/icu/source/data/zone/pt_PT.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_PT{
Version{"2.1.29.54"}
diff --git a/intl/icu/source/data/zone/pt_ST.txt b/intl/icu/source/data/zone/pt_ST.txt
index a88061aab..e383f4888 100644
--- a/intl/icu/source/data/zone/pt_ST.txt
+++ b/intl/icu/source/data/zone/pt_ST.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_ST{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/pt_TL.txt b/intl/icu/source/data/zone/pt_TL.txt
index 9a837a18a..c9fa7165b 100644
--- a/intl/icu/source/data/zone/pt_TL.txt
+++ b/intl/icu/source/data/zone/pt_TL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
pt_TL{
%%Parent{"pt_PT"}
diff --git a/intl/icu/source/data/zone/qu.txt b/intl/icu/source/data/zone/qu.txt
index ffaf7107a..3e6cc8f7f 100644
--- a/intl/icu/source/data/zone/qu.txt
+++ b/intl/icu/source/data/zone/qu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu{
Version{"2.1.27.98"}
diff --git a/intl/icu/source/data/zone/qu_BO.txt b/intl/icu/source/data/zone/qu_BO.txt
index 87edc7069..226ca2e08 100644
--- a/intl/icu/source/data/zone/qu_BO.txt
+++ b/intl/icu/source/data/zone/qu_BO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu_BO{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/qu_EC.txt b/intl/icu/source/data/zone/qu_EC.txt
index 7644300eb..9f08de48f 100644
--- a/intl/icu/source/data/zone/qu_EC.txt
+++ b/intl/icu/source/data/zone/qu_EC.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
qu_EC{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/rm.txt b/intl/icu/source/data/zone/rm.txt
index a325b09f0..a717d6fe4 100644
--- a/intl/icu/source/data/zone/rm.txt
+++ b/intl/icu/source/data/zone/rm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rm{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/rn.txt b/intl/icu/source/data/zone/rn.txt
index 955969388..779556171 100644
--- a/intl/icu/source/data/zone/rn.txt
+++ b/intl/icu/source/data/zone/rn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ro.txt b/intl/icu/source/data/zone/ro.txt
index e1859a945..dbc737d5c 100644
--- a/intl/icu/source/data/zone/ro.txt
+++ b/intl/icu/source/data/zone/ro.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ro{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ro_MD.txt b/intl/icu/source/data/zone/ro_MD.txt
index 44f810a5e..f6d40f575 100644
--- a/intl/icu/source/data/zone/ro_MD.txt
+++ b/intl/icu/source/data/zone/ro_MD.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/rof.txt b/intl/icu/source/data/zone/rof.txt
index 702e45aca..453c06925 100644
--- a/intl/icu/source/data/zone/rof.txt
+++ b/intl/icu/source/data/zone/rof.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rof{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/root.txt b/intl/icu/source/data/zone/root.txt
index 0bbd53c2a..c37e3f143 100644
--- a/intl/icu/source/data/zone/root.txt
+++ b/intl/icu/source/data/zone/root.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* ICU <specials> source: <path>/common/main/root.xml
diff --git a/intl/icu/source/data/zone/ru.txt b/intl/icu/source/data/zone/ru.txt
index a5d30d80c..bee8ed8e3 100644
--- a/intl/icu/source/data/zone/ru.txt
+++ b/intl/icu/source/data/zone/ru.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ru{
Version{"2.1.29.20"}
diff --git a/intl/icu/source/data/zone/rw.txt b/intl/icu/source/data/zone/rw.txt
index 278e88e49..d9ae69c2d 100644
--- a/intl/icu/source/data/zone/rw.txt
+++ b/intl/icu/source/data/zone/rw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rw{
Version{"2.1.27.98"}
diff --git a/intl/icu/source/data/zone/rwk.txt b/intl/icu/source/data/zone/rwk.txt
index a2ab739a4..df0b5bfc6 100644
--- a/intl/icu/source/data/zone/rwk.txt
+++ b/intl/icu/source/data/zone/rwk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
rwk{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/sah.txt b/intl/icu/source/data/zone/sah.txt
index 1bcd3229a..4636d083c 100644
--- a/intl/icu/source/data/zone/sah.txt
+++ b/intl/icu/source/data/zone/sah.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sah{
Version{"2.1.27.87"}
diff --git a/intl/icu/source/data/zone/saq.txt b/intl/icu/source/data/zone/saq.txt
index 02a8dd1b1..ab6b3165a 100644
--- a/intl/icu/source/data/zone/saq.txt
+++ b/intl/icu/source/data/zone/saq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
saq{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/sbp.txt b/intl/icu/source/data/zone/sbp.txt
index d7cbb78d2..2001957c3 100644
--- a/intl/icu/source/data/zone/sbp.txt
+++ b/intl/icu/source/data/zone/sbp.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sbp{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/se.txt b/intl/icu/source/data/zone/se.txt
index 9c617cfea..5986b17ae 100644
--- a/intl/icu/source/data/zone/se.txt
+++ b/intl/icu/source/data/zone/se.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
se{
Version{"2.1.27.98"}
diff --git a/intl/icu/source/data/zone/seh.txt b/intl/icu/source/data/zone/seh.txt
index c7195e2dc..a20c06733 100644
--- a/intl/icu/source/data/zone/seh.txt
+++ b/intl/icu/source/data/zone/seh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
seh{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ses.txt b/intl/icu/source/data/zone/ses.txt
index 0be2d296f..ed7790c0e 100644
--- a/intl/icu/source/data/zone/ses.txt
+++ b/intl/icu/source/data/zone/ses.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ses{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/sg.txt b/intl/icu/source/data/zone/sg.txt
index 76eae0083..3160b2b8d 100644
--- a/intl/icu/source/data/zone/sg.txt
+++ b/intl/icu/source/data/zone/sg.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sg{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/sh.txt b/intl/icu/source/data/zone/sh.txt
index 74b646a22..24ed34953 100644
--- a/intl/icu/source/data/zone/sh.txt
+++ b/intl/icu/source/data/zone/sh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh{
"%%ALIAS"{"sr_Latn"}
diff --git a/intl/icu/source/data/zone/sh_BA.txt b/intl/icu/source/data/zone/sh_BA.txt
index 93bdac63f..9cb7b42e9 100644
--- a/intl/icu/source/data/zone/sh_BA.txt
+++ b/intl/icu/source/data/zone/sh_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_BA{
"%%ALIAS"{"sr_Latn_BA"}
diff --git a/intl/icu/source/data/zone/sh_CS.txt b/intl/icu/source/data/zone/sh_CS.txt
index 224568a08..d9f1cba21 100644
--- a/intl/icu/source/data/zone/sh_CS.txt
+++ b/intl/icu/source/data/zone/sh_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_CS{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/zone/sh_YU.txt b/intl/icu/source/data/zone/sh_YU.txt
index 8a7d46098..d36ba555d 100644
--- a/intl/icu/source/data/zone/sh_YU.txt
+++ b/intl/icu/source/data/zone/sh_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sh_YU{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/zone/shi.txt b/intl/icu/source/data/zone/shi.txt
index 04c375f33..9db6fac16 100644
--- a/intl/icu/source/data/zone/shi.txt
+++ b/intl/icu/source/data/zone/shi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/shi_Latn.txt b/intl/icu/source/data/zone/shi_Latn.txt
index 2065b9646..037996c7a 100644
--- a/intl/icu/source/data/zone/shi_Latn.txt
+++ b/intl/icu/source/data/zone/shi_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_Latn{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/shi_MA.txt b/intl/icu/source/data/zone/shi_MA.txt
index 00de1b1b2..1a317da47 100644
--- a/intl/icu/source/data/zone/shi_MA.txt
+++ b/intl/icu/source/data/zone/shi_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_MA{
"%%ALIAS"{"shi_Tfng_MA"}
diff --git a/intl/icu/source/data/zone/shi_Tfng.txt b/intl/icu/source/data/zone/shi_Tfng.txt
index 1713a5c08..d8a40c314 100644
--- a/intl/icu/source/data/zone/shi_Tfng.txt
+++ b/intl/icu/source/data/zone/shi_Tfng.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
shi_Tfng{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/shi_Tfng_MA.txt b/intl/icu/source/data/zone/shi_Tfng_MA.txt
index 978cd5cab..0b10edbea 100644
--- a/intl/icu/source/data/zone/shi_Tfng_MA.txt
+++ b/intl/icu/source/data/zone/shi_Tfng_MA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/si.txt b/intl/icu/source/data/zone/si.txt
index f8c4af1c6..047d3536a 100644
--- a/intl/icu/source/data/zone/si.txt
+++ b/intl/icu/source/data/zone/si.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
si{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/sk.txt b/intl/icu/source/data/zone/sk.txt
index 0e7b2a9ec..973783dd4 100644
--- a/intl/icu/source/data/zone/sk.txt
+++ b/intl/icu/source/data/zone/sk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sk{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/sl.txt b/intl/icu/source/data/zone/sl.txt
index 981a2ec0d..61c875729 100644
--- a/intl/icu/source/data/zone/sl.txt
+++ b/intl/icu/source/data/zone/sl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sl{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/smn.txt b/intl/icu/source/data/zone/smn.txt
index c205f9629..d9c41c9a0 100644
--- a/intl/icu/source/data/zone/smn.txt
+++ b/intl/icu/source/data/zone/smn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
smn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/sn.txt b/intl/icu/source/data/zone/sn.txt
index bf8d5b3d0..5bbc89025 100644
--- a/intl/icu/source/data/zone/sn.txt
+++ b/intl/icu/source/data/zone/sn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sn{
Version{"2.1.27.98"}
diff --git a/intl/icu/source/data/zone/so.txt b/intl/icu/source/data/zone/so.txt
index 62f9115cc..477cbecdc 100644
--- a/intl/icu/source/data/zone/so.txt
+++ b/intl/icu/source/data/zone/so.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
so{
Version{"2.1.27.78"}
diff --git a/intl/icu/source/data/zone/sq.txt b/intl/icu/source/data/zone/sq.txt
index 9969538e5..c7a34612f 100644
--- a/intl/icu/source/data/zone/sq.txt
+++ b/intl/icu/source/data/zone/sq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sq{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/sr.txt b/intl/icu/source/data/zone/sr.txt
index a6a7f2221..3bad868e0 100644
--- a/intl/icu/source/data/zone/sr.txt
+++ b/intl/icu/source/data/zone/sr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/sr_BA.txt b/intl/icu/source/data/zone/sr_BA.txt
index edad17f70..97eb38298 100644
--- a/intl/icu/source/data/zone/sr_BA.txt
+++ b/intl/icu/source/data/zone/sr_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_BA{
"%%ALIAS"{"sr_Cyrl_BA"}
diff --git a/intl/icu/source/data/zone/sr_CS.txt b/intl/icu/source/data/zone/sr_CS.txt
index 5f8becfab..6b3d70789 100644
--- a/intl/icu/source/data/zone/sr_CS.txt
+++ b/intl/icu/source/data/zone/sr_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_CS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/zone/sr_Cyrl.txt b/intl/icu/source/data/zone/sr_Cyrl.txt
index 7cf7067f2..9a07b98e6 100644
--- a/intl/icu/source/data/zone/sr_Cyrl.txt
+++ b/intl/icu/source/data/zone/sr_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/sr_Cyrl_BA.txt b/intl/icu/source/data/zone/sr_Cyrl_BA.txt
index 51e1655a5..9629942a2 100644
--- a/intl/icu/source/data/zone/sr_Cyrl_BA.txt
+++ b/intl/icu/source/data/zone/sr_Cyrl_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/sr_Cyrl_CS.txt b/intl/icu/source/data/zone/sr_Cyrl_CS.txt
index 9325e5a76..b19156a02 100644
--- a/intl/icu/source/data/zone/sr_Cyrl_CS.txt
+++ b/intl/icu/source/data/zone/sr_Cyrl_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_CS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/zone/sr_Cyrl_RS.txt b/intl/icu/source/data/zone/sr_Cyrl_RS.txt
index 7ef8fabce..fec1168e2 100644
--- a/intl/icu/source/data/zone/sr_Cyrl_RS.txt
+++ b/intl/icu/source/data/zone/sr_Cyrl_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/sr_Cyrl_XK.txt b/intl/icu/source/data/zone/sr_Cyrl_XK.txt
index d7d4a860b..d7233695f 100644
--- a/intl/icu/source/data/zone/sr_Cyrl_XK.txt
+++ b/intl/icu/source/data/zone/sr_Cyrl_XK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/sr_Cyrl_YU.txt b/intl/icu/source/data/zone/sr_Cyrl_YU.txt
index 806d42c43..63c1837be 100644
--- a/intl/icu/source/data/zone/sr_Cyrl_YU.txt
+++ b/intl/icu/source/data/zone/sr_Cyrl_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Cyrl_YU{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/zone/sr_Latn.txt b/intl/icu/source/data/zone/sr_Latn.txt
index 3fccbb19c..1c769dbbe 100644
--- a/intl/icu/source/data/zone/sr_Latn.txt
+++ b/intl/icu/source/data/zone/sr_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/sr_Latn_BA.txt b/intl/icu/source/data/zone/sr_Latn_BA.txt
index f4b62ac33..a893d10a5 100644
--- a/intl/icu/source/data/zone/sr_Latn_BA.txt
+++ b/intl/icu/source/data/zone/sr_Latn_BA.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/sr_Latn_CS.txt b/intl/icu/source/data/zone/sr_Latn_CS.txt
index 0952735a9..f189ad3dc 100644
--- a/intl/icu/source/data/zone/sr_Latn_CS.txt
+++ b/intl/icu/source/data/zone/sr_Latn_CS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_CS{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/zone/sr_Latn_ME.txt b/intl/icu/source/data/zone/sr_Latn_ME.txt
index 4cc6fe9ba..b2eac102b 100644
--- a/intl/icu/source/data/zone/sr_Latn_ME.txt
+++ b/intl/icu/source/data/zone/sr_Latn_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/sr_Latn_RS.txt b/intl/icu/source/data/zone/sr_Latn_RS.txt
index 76d38f8b7..104aa2f83 100644
--- a/intl/icu/source/data/zone/sr_Latn_RS.txt
+++ b/intl/icu/source/data/zone/sr_Latn_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/sr_Latn_YU.txt b/intl/icu/source/data/zone/sr_Latn_YU.txt
index 2747ab210..593433b95 100644
--- a/intl/icu/source/data/zone/sr_Latn_YU.txt
+++ b/intl/icu/source/data/zone/sr_Latn_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_Latn_YU{
"%%ALIAS"{"sr_Latn_RS"}
diff --git a/intl/icu/source/data/zone/sr_ME.txt b/intl/icu/source/data/zone/sr_ME.txt
index 32dc91046..4205d8e05 100644
--- a/intl/icu/source/data/zone/sr_ME.txt
+++ b/intl/icu/source/data/zone/sr_ME.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_ME{
"%%ALIAS"{"sr_Latn_ME"}
diff --git a/intl/icu/source/data/zone/sr_RS.txt b/intl/icu/source/data/zone/sr_RS.txt
index 674ff7755..bd699280f 100644
--- a/intl/icu/source/data/zone/sr_RS.txt
+++ b/intl/icu/source/data/zone/sr_RS.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_RS{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/zone/sr_XK.txt b/intl/icu/source/data/zone/sr_XK.txt
index 9628a2763..2191f808f 100644
--- a/intl/icu/source/data/zone/sr_XK.txt
+++ b/intl/icu/source/data/zone/sr_XK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_XK{
"%%ALIAS"{"sr_Cyrl_XK"}
diff --git a/intl/icu/source/data/zone/sr_YU.txt b/intl/icu/source/data/zone/sr_YU.txt
index 26563d041..8876f0fda 100644
--- a/intl/icu/source/data/zone/sr_YU.txt
+++ b/intl/icu/source/data/zone/sr_YU.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sr_YU{
"%%ALIAS"{"sr_Cyrl_RS"}
diff --git a/intl/icu/source/data/zone/sv.txt b/intl/icu/source/data/zone/sv.txt
index d2236b61a..72ebff431 100644
--- a/intl/icu/source/data/zone/sv.txt
+++ b/intl/icu/source/data/zone/sv.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sv{
Version{"2.1.30.7"}
diff --git a/intl/icu/source/data/zone/sw.txt b/intl/icu/source/data/zone/sw.txt
index 2f6d4f7b0..48db678ce 100644
--- a/intl/icu/source/data/zone/sw.txt
+++ b/intl/icu/source/data/zone/sw.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
sw{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ta.txt b/intl/icu/source/data/zone/ta.txt
index 997bb2905..72b9c3e31 100644
--- a/intl/icu/source/data/zone/ta.txt
+++ b/intl/icu/source/data/zone/ta.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ta_MY.txt b/intl/icu/source/data/zone/ta_MY.txt
index 51a810b11..bd275e2d3 100644
--- a/intl/icu/source/data/zone/ta_MY.txt
+++ b/intl/icu/source/data/zone/ta_MY.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_MY{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ta_SG.txt b/intl/icu/source/data/zone/ta_SG.txt
index d2bb02bec..ca6906396 100644
--- a/intl/icu/source/data/zone/ta_SG.txt
+++ b/intl/icu/source/data/zone/ta_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ta_SG{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/te.txt b/intl/icu/source/data/zone/te.txt
index 5ecef37c6..98f913a5d 100644
--- a/intl/icu/source/data/zone/te.txt
+++ b/intl/icu/source/data/zone/te.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
te{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/teo.txt b/intl/icu/source/data/zone/teo.txt
index 146e7dd13..7695faf28 100644
--- a/intl/icu/source/data/zone/teo.txt
+++ b/intl/icu/source/data/zone/teo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
teo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/th.txt b/intl/icu/source/data/zone/th.txt
index 0aedb1065..98c724f04 100644
--- a/intl/icu/source/data/zone/th.txt
+++ b/intl/icu/source/data/zone/th.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
th{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/th_TH.txt b/intl/icu/source/data/zone/th_TH.txt
index 7a34bc971..5b502fab2 100644
--- a/intl/icu/source/data/zone/th_TH.txt
+++ b/intl/icu/source/data/zone/th_TH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/th_TH_TRADITIONAL.txt b/intl/icu/source/data/zone/th_TH_TRADITIONAL.txt
index d72e493f4..204799cb1 100644
--- a/intl/icu/source/data/zone/th_TH_TRADITIONAL.txt
+++ b/intl/icu/source/data/zone/th_TH_TRADITIONAL.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
th_TH_TRADITIONAL{
calendar{
diff --git a/intl/icu/source/data/zone/ti.txt b/intl/icu/source/data/zone/ti.txt
index c8f5b445b..1ec48a38e 100644
--- a/intl/icu/source/data/zone/ti.txt
+++ b/intl/icu/source/data/zone/ti.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ti{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/tl.txt b/intl/icu/source/data/zone/tl.txt
index 4e521f927..29859d8a3 100644
--- a/intl/icu/source/data/zone/tl.txt
+++ b/intl/icu/source/data/zone/tl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tl{
"%%ALIAS"{"fil"}
diff --git a/intl/icu/source/data/zone/tl_PH.txt b/intl/icu/source/data/zone/tl_PH.txt
index 07c9f9047..75489b84b 100644
--- a/intl/icu/source/data/zone/tl_PH.txt
+++ b/intl/icu/source/data/zone/tl_PH.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tl_PH{
"%%ALIAS"{"fil_PH"}
diff --git a/intl/icu/source/data/zone/to.txt b/intl/icu/source/data/zone/to.txt
index 2df0b9428..bdb49042c 100644
--- a/intl/icu/source/data/zone/to.txt
+++ b/intl/icu/source/data/zone/to.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
to{
Version{"2.1.27.98"}
diff --git a/intl/icu/source/data/zone/tr.txt b/intl/icu/source/data/zone/tr.txt
index ec37be156..84e4beea3 100644
--- a/intl/icu/source/data/zone/tr.txt
+++ b/intl/icu/source/data/zone/tr.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tr{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/twq.txt b/intl/icu/source/data/zone/twq.txt
index c29e7620a..b9365133d 100644
--- a/intl/icu/source/data/zone/twq.txt
+++ b/intl/icu/source/data/zone/twq.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
twq{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/tzm.txt b/intl/icu/source/data/zone/tzm.txt
index 6050ffb7b..b73ecf619 100644
--- a/intl/icu/source/data/zone/tzm.txt
+++ b/intl/icu/source/data/zone/tzm.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
tzm{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/ug.txt b/intl/icu/source/data/zone/ug.txt
index 8804f4b62..0393a19a3 100644
--- a/intl/icu/source/data/zone/ug.txt
+++ b/intl/icu/source/data/zone/ug.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ug{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/uk.txt b/intl/icu/source/data/zone/uk.txt
index 9305a576d..74da928f4 100644
--- a/intl/icu/source/data/zone/uk.txt
+++ b/intl/icu/source/data/zone/uk.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uk{
Version{"2.1.29.38"}
diff --git a/intl/icu/source/data/zone/ur.txt b/intl/icu/source/data/zone/ur.txt
index c722c724b..58cfc05e3 100644
--- a/intl/icu/source/data/zone/ur.txt
+++ b/intl/icu/source/data/zone/ur.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ur{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/ur_IN.txt b/intl/icu/source/data/zone/ur_IN.txt
index dc086a967..5c677f1d0 100644
--- a/intl/icu/source/data/zone/ur_IN.txt
+++ b/intl/icu/source/data/zone/ur_IN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ur_IN{
Version{"2.1.27.79"}
diff --git a/intl/icu/source/data/zone/uz.txt b/intl/icu/source/data/zone/uz.txt
index c628ec37f..10c77d4a5 100644
--- a/intl/icu/source/data/zone/uz.txt
+++ b/intl/icu/source/data/zone/uz.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz{
Version{"2.1.29.44"}
diff --git a/intl/icu/source/data/zone/uz_AF.txt b/intl/icu/source/data/zone/uz_AF.txt
index 24ca29458..6dbfd1008 100644
--- a/intl/icu/source/data/zone/uz_AF.txt
+++ b/intl/icu/source/data/zone/uz_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_AF{
"%%ALIAS"{"uz_Arab_AF"}
diff --git a/intl/icu/source/data/zone/uz_Arab.txt b/intl/icu/source/data/zone/uz_Arab.txt
index 349e6c18b..861d69908 100644
--- a/intl/icu/source/data/zone/uz_Arab.txt
+++ b/intl/icu/source/data/zone/uz_Arab.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Arab{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/uz_Arab_AF.txt b/intl/icu/source/data/zone/uz_Arab_AF.txt
index e45d70894..1ded58208 100644
--- a/intl/icu/source/data/zone/uz_Arab_AF.txt
+++ b/intl/icu/source/data/zone/uz_Arab_AF.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/uz_Cyrl.txt b/intl/icu/source/data/zone/uz_Cyrl.txt
index e2946446e..7d87d408f 100644
--- a/intl/icu/source/data/zone/uz_Cyrl.txt
+++ b/intl/icu/source/data/zone/uz_Cyrl.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Cyrl{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/uz_Latn.txt b/intl/icu/source/data/zone/uz_Latn.txt
index 64e0e6b8e..8d2a5497c 100644
--- a/intl/icu/source/data/zone/uz_Latn.txt
+++ b/intl/icu/source/data/zone/uz_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_Latn{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/uz_Latn_UZ.txt b/intl/icu/source/data/zone/uz_Latn_UZ.txt
index 2d34effaf..baf22c9bb 100644
--- a/intl/icu/source/data/zone/uz_Latn_UZ.txt
+++ b/intl/icu/source/data/zone/uz_Latn_UZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/uz_UZ.txt b/intl/icu/source/data/zone/uz_UZ.txt
index ffac5329b..24a145bfb 100644
--- a/intl/icu/source/data/zone/uz_UZ.txt
+++ b/intl/icu/source/data/zone/uz_UZ.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
uz_UZ{
"%%ALIAS"{"uz_Latn_UZ"}
diff --git a/intl/icu/source/data/zone/vai.txt b/intl/icu/source/data/zone/vai.txt
index 6c2d77526..eb8f8e469 100644
--- a/intl/icu/source/data/zone/vai.txt
+++ b/intl/icu/source/data/zone/vai.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/vai_LR.txt b/intl/icu/source/data/zone/vai_LR.txt
index 27d42387f..7d7bd4f9d 100644
--- a/intl/icu/source/data/zone/vai_LR.txt
+++ b/intl/icu/source/data/zone/vai_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_LR{
"%%ALIAS"{"vai_Vaii_LR"}
diff --git a/intl/icu/source/data/zone/vai_Latn.txt b/intl/icu/source/data/zone/vai_Latn.txt
index fea3ff680..8006708fc 100644
--- a/intl/icu/source/data/zone/vai_Latn.txt
+++ b/intl/icu/source/data/zone/vai_Latn.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_Latn{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/vai_Vaii.txt b/intl/icu/source/data/zone/vai_Vaii.txt
index 90f9ee927..0dcc58a4f 100644
--- a/intl/icu/source/data/zone/vai_Vaii.txt
+++ b/intl/icu/source/data/zone/vai_Vaii.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vai_Vaii{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/vai_Vaii_LR.txt b/intl/icu/source/data/zone/vai_Vaii_LR.txt
index a17bc11e0..fe47bdb0f 100644
--- a/intl/icu/source/data/zone/vai_Vaii_LR.txt
+++ b/intl/icu/source/data/zone/vai_Vaii_LR.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/vi.txt b/intl/icu/source/data/zone/vi.txt
index 4ac0e3611..2df5c8ba1 100644
--- a/intl/icu/source/data/zone/vi.txt
+++ b/intl/icu/source/data/zone/vi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vi{
Version{"2.1.28.79"}
diff --git a/intl/icu/source/data/zone/vun.txt b/intl/icu/source/data/zone/vun.txt
index 3fecf3e98..6cdc42bfd 100644
--- a/intl/icu/source/data/zone/vun.txt
+++ b/intl/icu/source/data/zone/vun.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
vun{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/wae.txt b/intl/icu/source/data/zone/wae.txt
index 3e6421035..b69bcd8f9 100644
--- a/intl/icu/source/data/zone/wae.txt
+++ b/intl/icu/source/data/zone/wae.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
wae{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/xog.txt b/intl/icu/source/data/zone/xog.txt
index 832d2cc76..510b7f1ff 100644
--- a/intl/icu/source/data/zone/xog.txt
+++ b/intl/icu/source/data/zone/xog.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
xog{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/yav.txt b/intl/icu/source/data/zone/yav.txt
index 8d7de6579..e33d8941e 100644
--- a/intl/icu/source/data/zone/yav.txt
+++ b/intl/icu/source/data/zone/yav.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yav{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/yi.txt b/intl/icu/source/data/zone/yi.txt
index 2432bf9ba..b51cb37ee 100644
--- a/intl/icu/source/data/zone/yi.txt
+++ b/intl/icu/source/data/zone/yi.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yi{
Version{"2.1.27.97"}
diff --git a/intl/icu/source/data/zone/yo.txt b/intl/icu/source/data/zone/yo.txt
index f2f3e6de9..009f324e1 100644
--- a/intl/icu/source/data/zone/yo.txt
+++ b/intl/icu/source/data/zone/yo.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yo{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/yue.txt b/intl/icu/source/data/zone/yue.txt
index 74be47fbb..cb5ff5553 100644
--- a/intl/icu/source/data/zone/yue.txt
+++ b/intl/icu/source/data/zone/yue.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
yue{
Version{"2.1.28.76"}
diff --git a/intl/icu/source/data/zone/zgh.txt b/intl/icu/source/data/zone/zgh.txt
index 9ee504e70..66c52971a 100644
--- a/intl/icu/source/data/zone/zgh.txt
+++ b/intl/icu/source/data/zone/zgh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zgh{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/zh.txt b/intl/icu/source/data/zone/zh.txt
index 018109879..11888252e 100644
--- a/intl/icu/source/data/zone/zh.txt
+++ b/intl/icu/source/data/zone/zh.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh{
Version{"2.1.29.84"}
diff --git a/intl/icu/source/data/zone/zh_CN.txt b/intl/icu/source/data/zone/zh_CN.txt
index c9151613a..46ee1b6c9 100644
--- a/intl/icu/source/data/zone/zh_CN.txt
+++ b/intl/icu/source/data/zone/zh_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_CN{
"%%ALIAS"{"zh_Hans_CN"}
diff --git a/intl/icu/source/data/zone/zh_HK.txt b/intl/icu/source/data/zone/zh_HK.txt
index fe72a0ea4..5e36e52e0 100644
--- a/intl/icu/source/data/zone/zh_HK.txt
+++ b/intl/icu/source/data/zone/zh_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_HK{
"%%ALIAS"{"zh_Hant_HK"}
diff --git a/intl/icu/source/data/zone/zh_Hans.txt b/intl/icu/source/data/zone/zh_Hans.txt
index 111a2e0e0..3b68a48d9 100644
--- a/intl/icu/source/data/zone/zh_Hans.txt
+++ b/intl/icu/source/data/zone/zh_Hans.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans{
Version{"2.1.27.40"}
diff --git a/intl/icu/source/data/zone/zh_Hans_CN.txt b/intl/icu/source/data/zone/zh_Hans_CN.txt
index 70a6a77b3..841acc687 100644
--- a/intl/icu/source/data/zone/zh_Hans_CN.txt
+++ b/intl/icu/source/data/zone/zh_Hans_CN.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/zh_Hans_SG.txt b/intl/icu/source/data/zone/zh_Hans_SG.txt
index 640818c90..fcf4bd7b6 100644
--- a/intl/icu/source/data/zone/zh_Hans_SG.txt
+++ b/intl/icu/source/data/zone/zh_Hans_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hans_SG{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/zone/zh_Hant.txt b/intl/icu/source/data/zone/zh_Hant.txt
index 5e6dadeea..47eceb6e1 100644
--- a/intl/icu/source/data/zone/zh_Hant.txt
+++ b/intl/icu/source/data/zone/zh_Hant.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant{
%%Parent{"root"}
diff --git a/intl/icu/source/data/zone/zh_Hant_HK.txt b/intl/icu/source/data/zone/zh_Hant_HK.txt
index 614f66922..d94d74b0d 100644
--- a/intl/icu/source/data/zone/zh_Hant_HK.txt
+++ b/intl/icu/source/data/zone/zh_Hant_HK.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant_HK{
Version{"2.1.27.99"}
diff --git a/intl/icu/source/data/zone/zh_Hant_MO.txt b/intl/icu/source/data/zone/zh_Hant_MO.txt
index 1814082fe..794665815 100644
--- a/intl/icu/source/data/zone/zh_Hant_MO.txt
+++ b/intl/icu/source/data/zone/zh_Hant_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_Hant_MO{
%%Parent{"zh_Hant_HK"}
diff --git a/intl/icu/source/data/zone/zh_Hant_TW.txt b/intl/icu/source/data/zone/zh_Hant_TW.txt
index b62ad6927..908f4881b 100644
--- a/intl/icu/source/data/zone/zh_Hant_TW.txt
+++ b/intl/icu/source/data/zone/zh_Hant_TW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
diff --git a/intl/icu/source/data/zone/zh_MO.txt b/intl/icu/source/data/zone/zh_MO.txt
index 6565bf7c3..71455b9cd 100644
--- a/intl/icu/source/data/zone/zh_MO.txt
+++ b/intl/icu/source/data/zone/zh_MO.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_MO{
"%%ALIAS"{"zh_Hant_MO"}
diff --git a/intl/icu/source/data/zone/zh_SG.txt b/intl/icu/source/data/zone/zh_SG.txt
index bf277736b..141f3dc58 100644
--- a/intl/icu/source/data/zone/zh_SG.txt
+++ b/intl/icu/source/data/zone/zh_SG.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_SG{
"%%ALIAS"{"zh_Hans_SG"}
diff --git a/intl/icu/source/data/zone/zh_TW.txt b/intl/icu/source/data/zone/zh_TW.txt
index 9372c5067..ae82eca78 100644
--- a/intl/icu/source/data/zone/zh_TW.txt
+++ b/intl/icu/source/data/zone/zh_TW.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zh_TW{
"%%ALIAS"{"zh_Hant_TW"}
diff --git a/intl/icu/source/data/zone/zu.txt b/intl/icu/source/data/zone/zu.txt
index 64c350499..9a807b94d 100644
--- a/intl/icu/source/data/zone/zu.txt
+++ b/intl/icu/source/data/zone/zu.txt
@@ -1,4 +1,4 @@
-// © 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
zu{
Version{"2.1.29.22"}
diff --git a/intl/icu/source/extra/uconv/resources/fr.txt b/intl/icu/source/extra/uconv/resources/fr.txt
index 180fb9b67..727931875 100644
--- a/intl/icu/source/extra/uconv/resources/fr.txt
+++ b/intl/icu/source/extra/uconv/resources/fr.txt
@@ -1,4 +1,4 @@
-// -*- Coding: utf-8; -*- [all uconv resource files]
+// -*- Coding: utf-8; -*- [all uconv resource files]
// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
diff --git a/intl/icu/source/extra/uconv/resources/root.txt b/intl/icu/source/extra/uconv/resources/root.txt
index 9b241e08c..33707b246 100644
--- a/intl/icu/source/extra/uconv/resources/root.txt
+++ b/intl/icu/source/extra/uconv/resources/root.txt
@@ -1,4 +1,4 @@
-// -*- Coding: utf-8; -*- [all uconv resource files]
+// -*- Coding: utf-8; -*- [all uconv resource files]
// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//
diff --git a/intl/icu/source/extra/uconv/samples/utf8/armenian.txt b/intl/icu/source/extra/uconv/samples/utf8/armenian.txt
index 21e2a7352..0cceb1bb6 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/armenian.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/armenian.txt
@@ -1,4 +1,4 @@
-Աեցեհի իմ լավ ?ւղիե լավարար,
+Աեցեհի իմ լավ ?ւղիե լավարար,
Կյաեբս չտայի կասկածի մհգիե...
Այեպհս կ?ւզհի մհկե իեծ ?ավատր,
Այեպհս կ?ւզհի ?ավատալ մհկիե։
diff --git a/intl/icu/source/extra/uconv/samples/utf8/banviet.txt b/intl/icu/source/extra/uconv/samples/utf8/banviet.txt
index 7d9cafe73..7e1f5cb07 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/banviet.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/banviet.txt
@@ -1,4 +1,4 @@
-Bần chỉ là một anh nghèo xác, ngày ngày lang-thang
+Bần chỉ là một anh nghèo xác, ngày ngày lang-thang
khắp xóm này qua xóm khác xin ăn. Quần áo
rách-mướp Bần cũng chả coi sao, chân không có giầy và
đầu cũng chẳng có mũ. Giời nắng hay giời mưa Bần
diff --git a/intl/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt b/intl/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt
index d2d2c6cfe..94e366238 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/chinese-ulysses.txt
@@ -1,4 +1,4 @@
-  俺正和首都警署的老特洛伊在凉亭山街角那儿寒喧呢,该死的,冷不丁儿的来了一名扫烟囱的背时家伙,他那长玩意儿差点儿戳进了俺那眼睛里头去。俺转回脑袋,正打算狠々地教训他一顿,没曾想一眼看见石头斜墻街那儿来了个人,道是谁呢,原来是约・哈因斯。
+  俺正和首都警署的老特洛伊在凉亭山街角那儿寒喧呢,该死的,冷不丁儿的来了一名扫烟囱的背时家伙,他那长玩意儿差点儿戳进了俺那眼睛里头去。俺转回脑袋,正打算狠々地教训他一顿,没曾想一眼看见石头斜墻街那儿来了个人,道是谁呢,原来是约・哈因斯。
  ___囉,约,俺说。你怎么样?那个扫烟囱的背时家伙,用他的长把儿刷子差点儿把我的眼睛捅掉。你看见了吗?
  ___煤烟到,运气好,约说。你刚才说话的那个老小子是谁?
  ___老特洛伊呗,俺说,原来是部队的。那家伙又是扫帚又是梯子,把交通都堵塞起来了,俺恨不得把他逮起来。
diff --git a/intl/icu/source/extra/uconv/samples/utf8/croat.txt b/intl/icu/source/extra/uconv/samples/utf8/croat.txt
index 406e264c0..2500a40dd 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/croat.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/croat.txt
@@ -1,2 +1,2 @@
-Dobar dan! Kako ste? Ja sam Marina
+Dobar dan! Kako ste? Ja sam Marina
Dodigović. Kako se Vi zovete?
diff --git a/intl/icu/source/extra/uconv/samples/utf8/danish.txt b/intl/icu/source/extra/uconv/samples/utf8/danish.txt
index 70111d290..4f02a6ea4 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/danish.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/danish.txt
@@ -1,4 +1,4 @@
- Foto ______ det formodede fødehus, hjørnet ______ Hans Jensensstræde og Bangs Boder.
+ Foto ______ det formodede fødehus, hjørnet ______ Hans Jensensstræde og Bangs Boder.
(H. C. Andersens Hus, Odense).
BARNDOMSOMGIVELSERNE</b>
diff --git a/intl/icu/source/extra/uconv/samples/utf8/greek.txt b/intl/icu/source/extra/uconv/samples/utf8/greek.txt
index 383222ea1..473303faa 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/greek.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/greek.txt
@@ -1,4 +1,4 @@
-<html lang="gr" dir="ltr">
+<html lang="gr" dir="ltr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UNICODE-1-1-UTF-8">
</head>
diff --git a/intl/icu/source/extra/uconv/samples/utf8/hangul.txt b/intl/icu/source/extra/uconv/samples/utf8/hangul.txt
index 3e8071c4a..7557f2c15 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/hangul.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/hangul.txt
@@ -1,2 +1,2 @@
-도서관
+도서관
한국
diff --git a/intl/icu/source/extra/uconv/samples/utf8/hania.txt b/intl/icu/source/extra/uconv/samples/utf8/hania.txt
index c7e36c6f7..ff133eac8 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/hania.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/hania.txt
@@ -1,2 +1,2 @@
-圖書館
+圖書館
韓國 \ No newline at end of file
diff --git a/intl/icu/source/extra/uconv/samples/utf8/jap.txt b/intl/icu/source/extra/uconv/samples/utf8/jap.txt
index 47a6b3eca..7768896d4 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/jap.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/jap.txt
@@ -1,4 +1,4 @@
-ウインカリッスの日本語
+ウインカリッスの日本語
  「ユーザーフレンドリ」|と|呼ばれる|
  りゆうは、ごく |普通の|人がごく|
  関単に |使用 |方法を|マスター|でき、|
diff --git a/intl/icu/source/extra/uconv/samples/utf8/korean.txt b/intl/icu/source/extra/uconv/samples/utf8/korean.txt
index bc2c3dccb..9628ef687 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/korean.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/korean.txt
@@ -1,4 +1,4 @@
-중앙일보 - 사건/사회 - 극지탐험 협회결
+중앙일보 - 사건/사회 - 극지탐험 협회결
극지탐험 협회결성 체계적 연구
 지구상의 3대 극지라 불리는 남극·북극·에베레스트를 한번이라
도 다녀와야 정회원으로 들어갈 수 있는 한국극지협회가 발족다
diff --git a/intl/icu/source/extra/uconv/samples/utf8/linji.txt b/intl/icu/source/extra/uconv/samples/utf8/linji.txt
index 8eb0ec003..6fe5922a4 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/linji.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/linji.txt
@@ -1,4 +1,4 @@
-*臨濟語錄
+*臨濟語錄
鎮州臨濟慧照禪師語錄序。
延康殿學士金紫光祿大夫真。
定府路安撫使兼馬步軍都總。
diff --git a/intl/icu/source/extra/uconv/samples/utf8/many.txt b/intl/icu/source/extra/uconv/samples/utf8/many.txt
index 47af19648..730882428 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/many.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/many.txt
@@ -1,4 +1,4 @@
-外国語の勉強と教え
+外国語の勉強と教え
Изучение и обучение иностранных языков
語文教學・语文教学
Enseñanza y estudio de idiomas
diff --git a/intl/icu/source/extra/uconv/samples/utf8/maopoem.txt b/intl/icu/source/extra/uconv/samples/utf8/maopoem.txt
index 6c27be8ba..61aeead1d 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/maopoem.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/maopoem.txt
@@ -1,4 +1,4 @@
-和毛泽东 <<重上井冈山>>. 严永欣, 一九八八年
+和毛泽东 <<重上井冈山>>. 严永欣, 一九八八年
和毛泽东 <<重上井冈山>>. 严永欣, 一九八八年.
久有归天愿
diff --git a/intl/icu/source/extra/uconv/samples/utf8/russian.txt b/intl/icu/source/extra/uconv/samples/utf8/russian.txt
index ce3a85cc0..53ca12644 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/russian.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/russian.txt
@@ -1,4 +1,4 @@
-Американские суда находятся в международных водах. Япония
+Американские суда находятся в международных водах. Япония
выразила серьезное беспокойство советскими действиями.
Пентагон беспокойства не проявил. США проводят подобное слеже-
ние за советскими судами в Карибском море. Правда, количество
diff --git a/intl/icu/source/extra/uconv/samples/utf8/simplechinese.txt b/intl/icu/source/extra/uconv/samples/utf8/simplechinese.txt
index 79e89247c..70f7f6e40 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/simplechinese.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/simplechinese.txt
@@ -1,4 +1,4 @@
-简介
+简介
CALIS 是一个专为语文教学而设计的电脑软件。在当今这个电脑时代,"电脑辅助教学"是一个极为教师与学生所喜欢的教学媒体。
diff --git a/intl/icu/source/extra/uconv/samples/utf8/turkish.txt b/intl/icu/source/extra/uconv/samples/utf8/turkish.txt
index 88a28db92..733945dff 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/turkish.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/turkish.txt
@@ -1,4 +1,4 @@
-Yukarda mavi gök, asağıda yağız yer yaratıldıkta; ikisinin arasında insan
+Yukarda mavi gök, asağıda yağız yer yaratıldıkta; ikisinin arasında insan
oğlu yaratılmış. İnsan oğulları üzerine ecdadım Bumın hakan, İstemi hakan
tahta oturmuş; oturarak Türk milletinin ülkesini, türesini, idare edivermiş,
tanzim edivermis. Dört taraf hep düşman imiş. Asker sevk edip dört taraftaki
diff --git a/intl/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt b/intl/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt
index fdc1d1c9d..54c04fd66 100644
--- a/intl/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt
+++ b/intl/icu/source/extra/uconv/samples/utf8/utf-8-demo.txt
@@ -1,4 +1,4 @@
-UTF-8 encoded sample plain-text file
+UTF-8 encoded sample plain-text file
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
This file is a place-holder. The original file is available from Markus Kuhn's website at http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt.
diff --git a/intl/icu/source/extra/uconv/uconv.vcxproj b/intl/icu/source/extra/uconv/uconv.vcxproj
index dffa4c5b4..5660a7abc 100644
--- a/intl/icu/source/extra/uconv/uconv.vcxproj
+++ b/intl/icu/source/extra/uconv/uconv.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/extra/uconv/uconv.vcxproj.filters b/intl/icu/source/extra/uconv/uconv.vcxproj.filters
index 04ed73b5d..acf3adf13 100644
--- a/intl/icu/source/extra/uconv/uconv.vcxproj.filters
+++ b/intl/icu/source/extra/uconv/uconv.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/i18n/i18n.vcxproj b/intl/icu/source/i18n/i18n.vcxproj
index 869d3a951..eecf1ab12 100644
--- a/intl/icu/source/i18n/i18n.vcxproj
+++ b/intl/icu/source/i18n/i18n.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/i18n/i18n.vcxproj.filters b/intl/icu/source/i18n/i18n.vcxproj.filters
index 57bf52f28..af1511ecb 100644
--- a/intl/icu/source/i18n/i18n.vcxproj.filters
+++ b/intl/icu/source/i18n/i18n.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="collation">
diff --git a/intl/icu/source/i18n/japancal.cpp b/intl/icu/source/i18n/japancal.cpp
index 93ab8008b..e49e20b94 100644
--- a/intl/icu/source/i18n/japancal.cpp
+++ b/intl/icu/source/i18n/japancal.cpp
@@ -276,7 +276,8 @@ static const struct {
{ 1868, 9, 8 }, // Meiji 232
{ 1912, 7, 30 }, // Taisho 233
{ 1926, 12, 25 }, // Showa 234
- { 1989, 1, 8 } // Heisei 235
+ { 1989, 1, 8 }, // Heisei 235
+ { 2019, 5, 1 } // Reiwa 236
};
#define kEraCount UPRV_LENGTHOF(kEraInfo)
diff --git a/intl/icu/source/i18n/zonemeta.cpp b/intl/icu/source/i18n/zonemeta.cpp
index fdf333c37..dd3bf202f 100644
--- a/intl/icu/source/i18n/zonemeta.cpp
+++ b/intl/icu/source/i18n/zonemeta.cpp
@@ -683,7 +683,6 @@ ZoneMeta::createMetazoneMappings(const UnicodeString &tzid) {
mzMappings = new UVector(deleteOlsonToMetaMappingEntry, NULL, status);
if (U_FAILURE(status)) {
delete mzMappings;
- deleteOlsonToMetaMappingEntry(entry);
uprv_free(entry);
break;
}
diff --git a/intl/icu/source/io/io.vcxproj b/intl/icu/source/io/io.vcxproj
index 3173e9208..f39a60928 100644
--- a/intl/icu/source/io/io.vcxproj
+++ b/intl/icu/source/io/io.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/io/io.vcxproj.filters b/intl/icu/source/io/io.vcxproj.filters
index 61252bff3..3498faca0 100644
--- a/intl/icu/source/io/io.vcxproj.filters
+++ b/intl/icu/source/io/io.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/stubdata/stubdata.vcxproj b/intl/icu/source/stubdata/stubdata.vcxproj
index 36291a345..8e7a343f4 100644
--- a/intl/icu/source/stubdata/stubdata.vcxproj
+++ b/intl/icu/source/stubdata/stubdata.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/stubdata/stubdata.vcxproj.filters b/intl/icu/source/stubdata/stubdata.vcxproj.filters
index f2742598d..df13c0f91 100644
--- a/intl/icu/source/stubdata/stubdata.vcxproj.filters
+++ b/intl/icu/source/stubdata/stubdata.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/ctestfw/ctestfw.vcxproj b/intl/icu/source/tools/ctestfw/ctestfw.vcxproj
index 3ffa3e317..5346c649b 100644
--- a/intl/icu/source/tools/ctestfw/ctestfw.vcxproj
+++ b/intl/icu/source/tools/ctestfw/ctestfw.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/ctestfw/ctestfw.vcxproj.filters b/intl/icu/source/tools/ctestfw/ctestfw.vcxproj.filters
index 31da517dd..426b626f3 100644
--- a/intl/icu/source/tools/ctestfw/ctestfw.vcxproj.filters
+++ b/intl/icu/source/tools/ctestfw/ctestfw.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/genbrk/genbrk.vcxproj b/intl/icu/source/tools/genbrk/genbrk.vcxproj
index fa47d5552..159f19583 100644
--- a/intl/icu/source/tools/genbrk/genbrk.vcxproj
+++ b/intl/icu/source/tools/genbrk/genbrk.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/genbrk/genbrk.vcxproj.filters b/intl/icu/source/tools/genbrk/genbrk.vcxproj.filters
index cfa644e39..55c79540c 100644
--- a/intl/icu/source/tools/genbrk/genbrk.vcxproj.filters
+++ b/intl/icu/source/tools/genbrk/genbrk.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/genccode/genccode.vcxproj b/intl/icu/source/tools/genccode/genccode.vcxproj
index d9b4196a9..b12f7a18b 100644
--- a/intl/icu/source/tools/genccode/genccode.vcxproj
+++ b/intl/icu/source/tools/genccode/genccode.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/genccode/genccode.vcxproj.filters b/intl/icu/source/tools/genccode/genccode.vcxproj.filters
index 87d4e0502..8d547a282 100644
--- a/intl/icu/source/tools/genccode/genccode.vcxproj.filters
+++ b/intl/icu/source/tools/genccode/genccode.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/gencfu/gencfu.vcxproj b/intl/icu/source/tools/gencfu/gencfu.vcxproj
index 9bb9f1d91..d13eeb317 100644
--- a/intl/icu/source/tools/gencfu/gencfu.vcxproj
+++ b/intl/icu/source/tools/gencfu/gencfu.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/gencfu/gencfu.vcxproj.filters b/intl/icu/source/tools/gencfu/gencfu.vcxproj.filters
index 096a235f7..e927e1764 100644
--- a/intl/icu/source/tools/gencfu/gencfu.vcxproj.filters
+++ b/intl/icu/source/tools/gencfu/gencfu.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Header Files">
diff --git a/intl/icu/source/tools/gencmn/gencmn.vcxproj b/intl/icu/source/tools/gencmn/gencmn.vcxproj
index 43096fe5f..a60047ed0 100644
--- a/intl/icu/source/tools/gencmn/gencmn.vcxproj
+++ b/intl/icu/source/tools/gencmn/gencmn.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/gencmn/gencmn.vcxproj.filters b/intl/icu/source/tools/gencmn/gencmn.vcxproj.filters
index d69b20663..2e4d07ecf 100644
--- a/intl/icu/source/tools/gencmn/gencmn.vcxproj.filters
+++ b/intl/icu/source/tools/gencmn/gencmn.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/gencnval/gencnval.vcxproj b/intl/icu/source/tools/gencnval/gencnval.vcxproj
index 911400283..f661b6f62 100644
--- a/intl/icu/source/tools/gencnval/gencnval.vcxproj
+++ b/intl/icu/source/tools/gencnval/gencnval.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/gencnval/gencnval.vcxproj.filters b/intl/icu/source/tools/gencnval/gencnval.vcxproj.filters
index 20f10c506..1e3f26228 100644
--- a/intl/icu/source/tools/gencnval/gencnval.vcxproj.filters
+++ b/intl/icu/source/tools/gencnval/gencnval.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/gendict/gendict.vcxproj b/intl/icu/source/tools/gendict/gendict.vcxproj
index 373f02f1a..69d25740e 100644
--- a/intl/icu/source/tools/gendict/gendict.vcxproj
+++ b/intl/icu/source/tools/gendict/gendict.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/gendict/gendict.vcxproj.filters b/intl/icu/source/tools/gendict/gendict.vcxproj.filters
index 52823d6f9..8670f2e6d 100644
--- a/intl/icu/source/tools/gendict/gendict.vcxproj.filters
+++ b/intl/icu/source/tools/gendict/gendict.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/gennorm2/gennorm2.vcxproj b/intl/icu/source/tools/gennorm2/gennorm2.vcxproj
index 99625ebde..e761c751d 100644
--- a/intl/icu/source/tools/gennorm2/gennorm2.vcxproj
+++ b/intl/icu/source/tools/gennorm2/gennorm2.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/genrb/derb.vcxproj b/intl/icu/source/tools/genrb/derb.vcxproj
index 2777eec91..7306d3285 100644
--- a/intl/icu/source/tools/genrb/derb.vcxproj
+++ b/intl/icu/source/tools/genrb/derb.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/genrb/derb.vcxproj.filters b/intl/icu/source/tools/genrb/derb.vcxproj.filters
index c62d61288..ac79d5ce4 100644
--- a/intl/icu/source/tools/genrb/derb.vcxproj.filters
+++ b/intl/icu/source/tools/genrb/derb.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/genrb/genrb.vcxproj b/intl/icu/source/tools/genrb/genrb.vcxproj
index d79545016..cca2f27e7 100644
--- a/intl/icu/source/tools/genrb/genrb.vcxproj
+++ b/intl/icu/source/tools/genrb/genrb.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/genrb/genrb.vcxproj.filters b/intl/icu/source/tools/genrb/genrb.vcxproj.filters
index 73de73044..f7735e9ba 100644
--- a/intl/icu/source/tools/genrb/genrb.vcxproj.filters
+++ b/intl/icu/source/tools/genrb/genrb.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/gensprep/gensprep.vcxproj b/intl/icu/source/tools/gensprep/gensprep.vcxproj
index e2260a5b4..c3b5234a6 100644
--- a/intl/icu/source/tools/gensprep/gensprep.vcxproj
+++ b/intl/icu/source/tools/gensprep/gensprep.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/gensprep/gensprep.vcxproj.filters b/intl/icu/source/tools/gensprep/gensprep.vcxproj.filters
index 2791b3aa6..14bb064f0 100644
--- a/intl/icu/source/tools/gensprep/gensprep.vcxproj.filters
+++ b/intl/icu/source/tools/gensprep/gensprep.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/gentest/gentest.vcxproj b/intl/icu/source/tools/gentest/gentest.vcxproj
index 7815094c4..887cd325e 100644
--- a/intl/icu/source/tools/gentest/gentest.vcxproj
+++ b/intl/icu/source/tools/gentest/gentest.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/gentest/gentest.vcxproj.filters b/intl/icu/source/tools/gentest/gentest.vcxproj.filters
index 8d6187a6a..49c3399ab 100644
--- a/intl/icu/source/tools/gentest/gentest.vcxproj.filters
+++ b/intl/icu/source/tools/gentest/gentest.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/icuinfo/icuinfo.vcxproj b/intl/icu/source/tools/icuinfo/icuinfo.vcxproj
index 33a0bd63f..7e2d17880 100644
--- a/intl/icu/source/tools/icuinfo/icuinfo.vcxproj
+++ b/intl/icu/source/tools/icuinfo/icuinfo.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/icuinfo/testplug.vcxproj b/intl/icu/source/tools/icuinfo/testplug.vcxproj
index 80db3320b..f27740fc6 100644
--- a/intl/icu/source/tools/icuinfo/testplug.vcxproj
+++ b/intl/icu/source/tools/icuinfo/testplug.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/icuinfo/testplug.vcxproj.filters b/intl/icu/source/tools/icuinfo/testplug.vcxproj.filters
index 5c9125e5d..497fa7455 100644
--- a/intl/icu/source/tools/icuinfo/testplug.vcxproj.filters
+++ b/intl/icu/source/tools/icuinfo/testplug.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/icupkg/icupkg.vcxproj b/intl/icu/source/tools/icupkg/icupkg.vcxproj
index 321640dd8..d43d6504d 100644
--- a/intl/icu/source/tools/icupkg/icupkg.vcxproj
+++ b/intl/icu/source/tools/icupkg/icupkg.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/icuswap/icuswap.vcxproj b/intl/icu/source/tools/icuswap/icuswap.vcxproj
index 38a10a91d..1031ff557 100644
--- a/intl/icu/source/tools/icuswap/icuswap.vcxproj
+++ b/intl/icu/source/tools/icuswap/icuswap.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/makeconv/makeconv.vcxproj b/intl/icu/source/tools/makeconv/makeconv.vcxproj
index 3895e898f..c32328fed 100644
--- a/intl/icu/source/tools/makeconv/makeconv.vcxproj
+++ b/intl/icu/source/tools/makeconv/makeconv.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/makeconv/makeconv.vcxproj.filters b/intl/icu/source/tools/makeconv/makeconv.vcxproj.filters
index b5232c7c7..3f2e90abf 100644
--- a/intl/icu/source/tools/makeconv/makeconv.vcxproj.filters
+++ b/intl/icu/source/tools/makeconv/makeconv.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/pkgdata/pkgdata.vcxproj b/intl/icu/source/tools/pkgdata/pkgdata.vcxproj
index 9f4e58911..1b343eb8c 100644
--- a/intl/icu/source/tools/pkgdata/pkgdata.vcxproj
+++ b/intl/icu/source/tools/pkgdata/pkgdata.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/pkgdata/pkgdata.vcxproj.filters b/intl/icu/source/tools/pkgdata/pkgdata.vcxproj.filters
index dc530aba1..74d84d3cc 100644
--- a/intl/icu/source/tools/pkgdata/pkgdata.vcxproj.filters
+++ b/intl/icu/source/tools/pkgdata/pkgdata.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/icu/source/tools/toolutil/toolutil.vcxproj b/intl/icu/source/tools/toolutil/toolutil.vcxproj
index 6567fae12..8064dcfa3 100644
--- a/intl/icu/source/tools/toolutil/toolutil.vcxproj
+++ b/intl/icu/source/tools/toolutil/toolutil.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/tzcode/icuzdump.vcxproj b/intl/icu/source/tools/tzcode/icuzdump.vcxproj
index 23c85b42f..018c2d469 100644
--- a/intl/icu/source/tools/tzcode/icuzdump.vcxproj
+++ b/intl/icu/source/tools/tzcode/icuzdump.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
diff --git a/intl/icu/source/tools/tzcode/icuzdump.vcxproj.filters b/intl/icu/source/tools/tzcode/icuzdump.vcxproj.filters
index 8004a63a1..3eef4683f 100644
--- a/intl/icu/source/tools/tzcode/icuzdump.vcxproj.filters
+++ b/intl/icu/source/tools/tzcode/icuzdump.vcxproj.filters
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
diff --git a/intl/patch-icu.sh b/intl/patch-icu.sh
new file mode 100644
index 000000000..b96bc1831
--- /dev/null
+++ b/intl/patch-icu.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+set -e
+
+# Ensure that $Date$ in the checked-out git files expands timezone-agnostically,
+# so that this script's behavior is consistent when run from any time zone.
+export TZ=UTC
+
+# Also ensure GIT-INFO is consistently English.
+export LANG=en_US.UTF-8
+export LANGUAGE=en_US
+export LC_ALL=en_US.UTF-8
+
+icu_dir=`dirname $0`/icu
+
+for patch in \
+ bug-915735 \
+ suppress-warnings.diff \
+ bug-1172609-timezone-recreateDefault.diff \
+ bug-1198952-workaround-make-3.82-bug.diff \
+ bug-1228227-bug-1263325-libc++-gcc_hidden.diff \
+ ucol_getKeywordValuesForLocale-ulist_resetList.diff \
+; do
+ echo "Applying local patch $patch"
+ patch -d ${icu_dir}/../../ -p1 --no-backup-if-mismatch < ${icu_dir}/../icu-patches/$patch
+done
+
diff --git a/intl/tzdata/GIT-INFO b/intl/tzdata/GIT-INFO
new file mode 100644
index 000000000..9c6206b1b
--- /dev/null
+++ b/intl/tzdata/GIT-INFO
@@ -0,0 +1,5 @@
+commit a1dd3c5661404aa93924e737aeb86acf130b8889
+Author: yumaoka <y.umaoka@gmail.com>
+Date: Tue Mar 26 19:02:10 2019 -0400
+
+ ICU-20522 tzdata2019a updates
diff --git a/intl/tzdata/SVN-INFO b/intl/tzdata/SVN-INFO
deleted file mode 100644
index 3b665bdfc..000000000
--- a/intl/tzdata/SVN-INFO
+++ /dev/null
@@ -1,10 +0,0 @@
-Path: 44
-URL: https://ssl.icu-project.org/repos/icu/data/trunk/tzdata/icunew/2018e/44
-Relative URL: ^/data/trunk/tzdata/icunew/2018e/44
-Repository Root: https://ssl.icu-project.org/repos/icu
-Repository UUID: 251d0590-4201-4cf1-90de-194747b24ca1
-Node Kind: directory
-Last Changed Author: yoshito
-Last Changed Rev: 41324
-Last Changed Date: 2018-05-04 22:02:44 +0000 (Fr, 04 Mai 2018)
-
diff --git a/intl/tzdata/VERSION b/intl/tzdata/VERSION
new file mode 100644
index 000000000..149d790c3
--- /dev/null
+++ b/intl/tzdata/VERSION
@@ -0,0 +1 @@
+2019a
diff --git a/intl/tzdata/source/be/metaZones.res b/intl/tzdata/source/be/metaZones.res
index 9e94fdc8d..3df8225d6 100644
--- a/intl/tzdata/source/be/metaZones.res
+++ b/intl/tzdata/source/be/metaZones.res
Binary files differ
diff --git a/intl/tzdata/source/be/timezoneTypes.res b/intl/tzdata/source/be/timezoneTypes.res
index 1bfa57ece..eee67cfff 100644
--- a/intl/tzdata/source/be/timezoneTypes.res
+++ b/intl/tzdata/source/be/timezoneTypes.res
Binary files differ
diff --git a/intl/tzdata/source/be/windowsZones.res b/intl/tzdata/source/be/windowsZones.res
index 356411c0f..e6bb5af0f 100644
--- a/intl/tzdata/source/be/windowsZones.res
+++ b/intl/tzdata/source/be/windowsZones.res
Binary files differ
diff --git a/intl/tzdata/source/be/zoneinfo64.res b/intl/tzdata/source/be/zoneinfo64.res
index 7d39e0650..fc5c0f58e 100644
--- a/intl/tzdata/source/be/zoneinfo64.res
+++ b/intl/tzdata/source/be/zoneinfo64.res
Binary files differ
diff --git a/intl/tzdata/source/ee/metaZones.res b/intl/tzdata/source/ee/metaZones.res
index b5d94a8bc..e495c2aa9 100644
--- a/intl/tzdata/source/ee/metaZones.res
+++ b/intl/tzdata/source/ee/metaZones.res
Binary files differ
diff --git a/intl/tzdata/source/ee/timezoneTypes.res b/intl/tzdata/source/ee/timezoneTypes.res
index 9001738e6..046835436 100644
--- a/intl/tzdata/source/ee/timezoneTypes.res
+++ b/intl/tzdata/source/ee/timezoneTypes.res
Binary files differ
diff --git a/intl/tzdata/source/ee/windowsZones.res b/intl/tzdata/source/ee/windowsZones.res
index 56f1b19ec..2a6500de3 100644
--- a/intl/tzdata/source/ee/windowsZones.res
+++ b/intl/tzdata/source/ee/windowsZones.res
Binary files differ
diff --git a/intl/tzdata/source/ee/zoneinfo64.res b/intl/tzdata/source/ee/zoneinfo64.res
index 425d7f838..faef29683 100644
--- a/intl/tzdata/source/ee/zoneinfo64.res
+++ b/intl/tzdata/source/ee/zoneinfo64.res
Binary files differ
diff --git a/intl/tzdata/source/le/metaZones.res b/intl/tzdata/source/le/metaZones.res
index 2da7c9bad..3b3ee0134 100644
--- a/intl/tzdata/source/le/metaZones.res
+++ b/intl/tzdata/source/le/metaZones.res
Binary files differ
diff --git a/intl/tzdata/source/le/timezoneTypes.res b/intl/tzdata/source/le/timezoneTypes.res
index de11dd4e2..895ed2174 100644
--- a/intl/tzdata/source/le/timezoneTypes.res
+++ b/intl/tzdata/source/le/timezoneTypes.res
Binary files differ
diff --git a/intl/tzdata/source/le/windowsZones.res b/intl/tzdata/source/le/windowsZones.res
index 2409ae877..77b503f23 100644
--- a/intl/tzdata/source/le/windowsZones.res
+++ b/intl/tzdata/source/le/windowsZones.res
Binary files differ
diff --git a/intl/tzdata/source/le/zoneinfo64.res b/intl/tzdata/source/le/zoneinfo64.res
index f609847ef..7e0afd405 100644
--- a/intl/tzdata/source/le/zoneinfo64.res
+++ b/intl/tzdata/source/le/zoneinfo64.res
Binary files differ
diff --git a/intl/tzdata/source/metaZones.txt b/intl/tzdata/source/metaZones.txt
index ba47caa8d..d6b002005 100644
--- a/intl/tzdata/source/metaZones.txt
+++ b/intl/tzdata/source/metaZones.txt
@@ -813,7 +813,7 @@ metaZones:table(nofallback){
{
"Europe_Western",
"1985-12-31 23:00",
- "9999-12-31 23:59",
+ "2018-10-28 02:00",
}
}
"Africa:Ceuta"{
@@ -862,7 +862,7 @@ metaZones:table(nofallback){
{
"Europe_Western",
"1976-04-14 01:00",
- "9999-12-31 23:59",
+ "2018-10-28 02:00",
}
}
"Africa:Freetown"{
@@ -1035,6 +1035,11 @@ metaZones:table(nofallback){
{
"Africa_Western",
"2018-01-01 01:00",
+ "2019-01-01 01:00",
+ }
+ {
+ "GMT",
+ "2019-01-01 01:00",
"9999-12-31 23:59",
}
}
@@ -2076,6 +2081,16 @@ metaZones:table(nofallback){
{
"Alaska",
"2015-11-01 10:00",
+ "2018-11-04 10:00",
+ }
+ {
+ "America_Pacific",
+ "2018-11-04 10:00",
+ "2019-01-20 10:00",
+ }
+ {
+ "Alaska",
+ "2019-01-20 10:00",
"9999-12-31 23:59",
}
}
@@ -2559,7 +2574,7 @@ metaZones:table(nofallback){
{
"Casey",
"2016-10-21 16:00",
- "2016-03-10 17:00",
+ "2018-03-10 17:00",
}
{
"Australia_Western",
@@ -3132,11 +3147,11 @@ metaZones:table(nofallback){
{
"Pyongyang",
"2015-08-14 15:00",
- "2018-05-05 08:30",
+ "2018-05-04 15:00",
}
{
"Korea",
- "2018-05-05 08:30",
+ "2018-05-04 15:00",
"9999-12-31 23:59",
}
}
@@ -3152,6 +3167,13 @@ metaZones:table(nofallback){
"9999-12-31 23:59",
}
}
+ "Asia:Qostanay"{
+ {
+ "Kazakhstan_Eastern",
+ "2004-10-30 21:00",
+ "9999-12-31 23:59",
+ }
+ }
"Asia:Qyzylorda"{
{
"Kizilorda",
@@ -3166,6 +3188,11 @@ metaZones:table(nofallback){
{
"Kazakhstan_Eastern",
"2004-10-30 21:00",
+ "2018-12-20 18:00",
+ }
+ {
+ "Kazakhstan_Western",
+ "2018-12-20 18:00",
"9999-12-31 23:59",
}
}
@@ -3992,6 +4019,11 @@ metaZones:table(nofallback){
{
"Moscow",
"1992-03-28 22:00",
+ "2018-10-27 23:00",
+ }
+ {
+ "Volgograd",
+ "2018-10-27 23:00",
"9999-12-31 23:59",
}
}
@@ -4211,11 +4243,11 @@ metaZones:table(nofallback){
{
"Kwajalein",
"1970-01-01 00:00",
- "1993-08-20 12:00",
+ "1993-08-21 12:00",
}
{
"Marshall_Islands",
- "1993-08-20 12:00",
+ "1993-08-21 12:00",
"9999-12-31 23:59",
}
}
diff --git a/intl/tzdata/source/timezoneTypes.txt b/intl/tzdata/source/timezoneTypes.txt
index 92be78c5d..4bcf72720 100644
--- a/intl/tzdata/source/timezoneTypes.txt
+++ b/intl/tzdata/source/timezoneTypes.txt
@@ -416,6 +416,7 @@ timezoneTypes:table(nofallback){
"Asia:Pontianak"{"idpnk"}
"Asia:Pyongyang"{"kpfnj"}
"Asia:Qatar"{"qadoh"}
+ "Asia:Qostanay"{"kzksn"}
"Asia:Qyzylorda"{"kzkzo"}
"Asia:Rangoon"{"mmrgn"}
"Asia:Riyadh"{"saruh"}
diff --git a/intl/tzdata/source/windowsZones.txt b/intl/tzdata/source/windowsZones.txt
index 6428c54e8..e29b769c9 100644
--- a/intl/tzdata/source/windowsZones.txt
+++ b/intl/tzdata/source/windowsZones.txt
@@ -17,8 +17,8 @@ windowsZones:table(nofallback){
"Alaskan Standard Time"{
001{"America/Anchorage"}
US{
- "America/Anchorage America/Juneau America/Metlakatla America/Nome Ame"
- "rica/Sitka America/Yakutat"
+ "America/Anchorage America/Juneau America/Nome America/Sitka America/"
+ "Yakutat"
}
}
"Aleutian Standard Time"{
@@ -130,7 +130,7 @@ windowsZones:table(nofallback){
CN{"Asia/Urumqi"}
IO{"Indian/Chagos"}
KG{"Asia/Bishkek"}
- KZ{"Asia/Almaty Asia/Qyzylorda"}
+ KZ{"Asia/Almaty Asia/Qostanay"}
ZZ{"Etc/GMT-6"}
}
"Central Brazilian Standard Time"{
@@ -287,7 +287,7 @@ windowsZones:table(nofallback){
}
"GTB Standard Time"{
001{"Europe/Bucharest"}
- CY{"Asia/Nicosia"}
+ CY{"Asia/Famagusta Asia/Nicosia"}
GR{"Europe/Athens"}
RO{"Europe/Bucharest"}
}
@@ -468,7 +468,7 @@ windowsZones:table(nofallback){
"Pacific Standard Time"{
001{"America/Los_Angeles"}
CA{"America/Vancouver America/Dawson America/Whitehorse"}
- US{"America/Los_Angeles"}
+ US{"America/Los_Angeles America/Metlakatla"}
ZZ{"PST8PDT"}
}
"Pakistan Standard Time"{
@@ -580,6 +580,10 @@ windowsZones:table(nofallback){
001{"Pacific/Apia"}
WS{"Pacific/Apia"}
}
+ "Sao Tome Standard Time"{
+ 001{"Africa/Sao_Tome"}
+ ST{"Africa/Sao_Tome"}
+ }
"Saratov Standard Time"{
001{"Europe/Saratov"}
RU{"Europe/Saratov"}
@@ -654,7 +658,6 @@ windowsZones:table(nofallback){
}
"Turkey Standard Time"{
001{"Europe/Istanbul"}
- CY{"Asia/Famagusta"}
TR{"Europe/Istanbul"}
}
"Turks And Caicos Standard Time"{
@@ -746,7 +749,6 @@ windowsZones:table(nofallback){
GQ{"Africa/Malabo"}
NE{"Africa/Niamey"}
NG{"Africa/Lagos"}
- ST{"Africa/Sao_Tome"}
TD{"Africa/Ndjamena"}
TN{"Africa/Tunis"}
ZZ{"Etc/GMT-1"}
@@ -777,7 +779,7 @@ windowsZones:table(nofallback){
"West Asia Standard Time"{
001{"Asia/Tashkent"}
AQ{"Antarctica/Mawson"}
- KZ{"Asia/Oral Asia/Aqtau Asia/Aqtobe Asia/Atyrau"}
+ KZ{"Asia/Oral Asia/Aqtau Asia/Aqtobe Asia/Atyrau Asia/Qyzylorda"}
MV{"Indian/Maldives"}
TF{"Indian/Kerguelen"}
TJ{"Asia/Dushanbe"}
diff --git a/intl/tzdata/source/zoneinfo64.txt b/intl/tzdata/source/zoneinfo64.txt
index 519db6fad..e64943419 100644
--- a/intl/tzdata/source/zoneinfo64.txt
+++ b/intl/tzdata/source/zoneinfo64.txt
@@ -3,20 +3,20 @@
// License & terms of use: http://www.unicode.org/copyright.html#License
//---------------------------------------------------------
// Build tool: tz2icu
-// Build date: Fri May 4 16:06:17 2018
+// Build date: Tue Mar 26 16:57:59 2019
// tz database: ftp://ftp.iana.org/tz/
-// tz version: 2018e
-// ICU version: 61.1
+// tz version: 2019a
+// ICU version: 64.1
//---------------------------------------------------------
// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<
// >> !!! >>> DO NOT EDIT <<< !!! <<
//---------------------------------------------------------
zoneinfo64:table(nofallback) {
- TZVersion { "2018e" }
+ TZVersion { "2019a" }
Zones:array {
- /* ACT */ :int { 354 } //Z#0
- /* AET */ :int { 366 } //Z#1
+ /* ACT */ :int { 355 } //Z#0
+ /* AET */ :int { 367 } //Z#1
/* AGT */ :int { 64 } //Z#2
/* ART */ :int { 18 } //Z#3
/* AST */ :int { 60 } //Z#4
@@ -24,7 +24,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1830383032 }
typeOffsets:intvector { -968, 0, 0, 0 }
typeMap:bin { "01" }
- links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 55, 346 }
+ links:intvector { 5, 11, 13, 21, 22, 27, 38, 51, 52, 55, 347 }
} //Z#5
/* Africa/Accra */ :table {
trans:intvector { -1640995148, -1556841600, -1546388400, -1525305600, -1514852400, -1493769600, -1483316400, -1462233600, -1451780400, -1430611200, -1420158000, -1399075200, -1388622000, -1367539200, -1357086000, -1336003200, -1325550000, -1304380800, -1293927600, -1272844800, -1262391600, -1241308800, -1230855600, -1209772800, -1199319600, -1178150400, -1167697200, -1146614400, -1136161200, -1115078400, -1104625200, -1083542400, -1073089200, -1051920000, -1041466800, -1020384000, -1009930800, -988848000, -978394800, -957312000, -946858800, -925689600, -915236400, -894153600, -883700400, -862617600, -852164400 }
@@ -56,16 +56,12 @@ zoneinfo64:table(nofallback) {
trans:intvector { -929844000, -923108400, -906170400, -892868400, -875844000, -857790000, -844308000, -825822000, -812685600, -794199600, -779853600, -762663600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -71107200, -52707600, -39484800, -21171600, -7948800, 10364400, 23587200, 41900400, 55123200, 73522800, 86745600, 105058800, 118281600, 136594800, 149817600, 168130800, 181353600, 199753200, 212976000, 231289200, 244512000, 262825200, 276048000, 294361200, 307584000, 325983600, 339206400, 357519600, 370742400, 396399600, 402278400, 426812400, 433814400, 452214000, 465436800, 483750000, 496972800, 515286000, 528508800, 546822000, 560044800, 578444400, 591667200, 610412400, 623203200, 641516400, 654739200, 673052400, 686275200, 704674800, 717897600, 736210800, 749433600, 767746800, 780969600, 799020000, 812322000, 830469600, 843771600, 861919200, 875221200, 893368800, 906670800, 925423200, 938725200, 956872800, 970174800, 988322400, 1001624400, 1019772000, 1033074000, 1051221600, 1064523600, 1083276000, 1096578000, 1114725600, 1128027600, 1146175200, 1158872400, 1177624800, 1189112400, 1209074400, 1219957200, 1240524000, 1250802000, 1272578400, 1281474000, 1284069600, 1285880400, 1400191200, 1403816400, 1406844000, 1411678800 }
typeOffsets:intvector { 7509, 0, 7200, 0, 7200, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 3, 18, 400 }
+ links:intvector { 3, 18, 401 }
} //Z#18
/* Africa/Casablanca */ :table {
- trans:intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1540692000, 1553997600, 1557021600, 1560045600, 1572141600, 1585447200, 1587261600, 1590285600, 1603591200, 1616896800, 1618106400, 1621130400, 1635645600, 1651975200, 1667095200, 1682215200, 1698544800, 1713060000, 1729994400, 1743904800, 1761444000, 1774749600, 1792893600, 1806199200, 1824948000, 1837648800, 1856397600, 1869098400, 1887847200, 1901152800, 1919296800, 1932602400, 1950746400, 1964052000, 1982800800, 1995501600, 2014250400, 2026951200, 2045700000, 2058400800, 2077149600, 2090455200, 2107994400, 2121904800, 2138234400 }
- transPost32:intvector { 0, -2141612896, 0, -2122864096 }
+ trans:intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1557021600, 1560045600, 1587261600, 1590285600, 1618106400, 1621130400, 1648346400, 1651975200, 1679191200, 1682215200, 1710036000, 1713060000, 1740276000, 1743904800, 1771120800, 1774144800, 1801965600, 1804989600, 1832205600, 1835229600, 1863050400, 1866074400, 1893290400, 1896919200, 1924135200, 1927159200, 1954980000, 1958004000, 1985220000, 1988848800, 2016064800, 2019088800, 2046304800, 2049933600, 2077149600, 2080173600, 2107994400, 2111018400, 2138234400, 2141863200 }
typeOffsets:intvector { -1820, 0, 0, 0, 0, 3600, 3600, 0 }
- typeMap:bin { "0102010201020102010201020102010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- finalRule { "Morocco" }
- finalRaw:int { 0 }
- finalYear:int { 2039 }
+ typeMap:bin { "01020102010201020102010201020102010301020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" }
} //Z#19
/* Africa/Ceuta */ :table {
transPre32:intvector { -1, 2117514496 }
@@ -82,13 +78,9 @@ zoneinfo64:table(nofallback) {
/* Africa/Djibouti */ :int { 48 } //Z#24
/* Africa/Douala */ :int { 36 } //Z#25
/* Africa/El_Aaiun */ :table {
- trans:intvector { -1136070432, 198291600, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1540692000, 1553997600, 1557021600, 1560045600, 1572141600, 1585447200, 1587261600, 1590285600, 1603591200, 1616896800, 1618106400, 1621130400, 1635645600, 1651975200, 1667095200, 1682215200, 1698544800, 1713060000, 1729994400, 1743904800, 1761444000, 1774749600, 1792893600, 1806199200, 1824948000, 1837648800, 1856397600, 1869098400, 1887847200, 1901152800, 1919296800, 1932602400, 1950746400, 1964052000, 1982800800, 1995501600, 2014250400, 2026951200, 2045700000, 2058400800, 2077149600, 2090455200, 2107994400, 2121904800, 2138234400 }
- transPost32:intvector { 0, -2141612896, 0, -2122864096 }
+ trans:intvector { -1136070432, 198291600, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 1509242400, 1521943200, 1526176800, 1529200800, 1557021600, 1560045600, 1587261600, 1590285600, 1618106400, 1621130400, 1648346400, 1651975200, 1679191200, 1682215200, 1710036000, 1713060000, 1740276000, 1743904800, 1771120800, 1774144800, 1801965600, 1804989600, 1832205600, 1835229600, 1863050400, 1866074400, 1893290400, 1896919200, 1924135200, 1927159200, 1954980000, 1958004000, 1985220000, 1988848800, 2016064800, 2019088800, 2046304800, 2049933600, 2077149600, 2080173600, 2107994400, 2111018400, 2138234400, 2141863200 }
typeOffsets:intvector { -3168, 0, -3600, 0, 0, 0, 0, 3600 }
- typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- finalRule { "Morocco" }
- finalRaw:int { 0 }
- finalYear:int { 2039 }
+ typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203" }
} //Z#26
/* Africa/Freetown */ :int { 5 } //Z#27
/* Africa/Gaborone */ :int { 43 } //Z#28
@@ -129,7 +121,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -2109291020 }
typeOffsets:intvector { 7820, 0, 7200, 0 }
typeMap:bin { "01" }
- links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 377 }
+ links:intvector { 15, 17, 28, 29, 34, 40, 41, 43, 378 }
} //Z#43
/* Africa/Maseru */ :int { 30 } //Z#44
/* Africa/Mbabane */ :int { 30 } //Z#45
@@ -143,7 +135,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1309746436, -1262314800, -946780200, -315629100 }
typeOffsets:intvector { 8836, 0, 9000, 0, 9900, 0, 10800, 0 }
typeMap:bin { "03010203" }
- links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 395, 514, 518, 523 }
+ links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 396, 515, 519, 524 }
} //Z#48
/* Africa/Ndjamena */ :table {
trans:intvector { -1830387612, 308703600, 321314400 }
@@ -156,16 +148,16 @@ zoneinfo64:table(nofallback) {
/* Africa/Porto-Novo */ :int { 36 } //Z#53
/* Africa/Sao_Tome */ :table {
transPre32:intvector { -1, 1581055280 }
- trans:intvector { -1830384000, 1514768400 }
+ trans:intvector { -1830384000, 1514768400, 1546304400 }
typeOffsets:intvector { 1616, 0, -2205, 0, 0, 0, 3600, 0 }
- typeMap:bin { "010203" }
+ typeMap:bin { "01020302" }
} //Z#54
/* Africa/Timbuktu */ :int { 5 } //Z#55
/* Africa/Tripoli */ :table {
trans:intvector { -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000, 1352505600, 1364515200, 1382659200 }
typeOffsets:intvector { 3164, 0, 3600, 0, 3600, 3600, 7200, 0 }
typeMap:bin { "0102010201020103010201020102010201020102010201020103010203010203" }
- links:intvector { 56, 531 }
+ links:intvector { 56, 532 }
} //Z#56
/* Africa/Tunis */ :table {
transPre32:intvector { -1, 1497764852 }
@@ -187,7 +179,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -36000 }
finalYear:int { 2008 }
- links:intvector { 59, 80, 615 }
+ links:intvector { 59, 80, 616 }
} //Z#59
/* America/Anchorage */ :table {
transPre32:intvector { -1, 1069743569, -1, 2106016072 }
@@ -197,7 +189,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -32400 }
finalYear:int { 2008 }
- links:intvector { 4, 60, 614 }
+ links:intvector { 4, 60, 615 }
} //Z#60
/* America/Anguilla */ :int { 186 } //Z#61
/* America/Antigua */ :int { 186 } //Z#62
@@ -397,7 +389,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 98, 380, 617 }
+ links:intvector { 98, 381, 618 }
} //Z#98
/* America/Chihuahua */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 }
@@ -463,7 +455,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- links:intvector { 109, 204, 543, 623 }
+ links:intvector { 109, 204, 544, 624 }
} //Z#109
/* America/Detroit */ :table {
trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
@@ -472,7 +464,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 110, 622 }
+ links:intvector { 110, 623 }
} //Z#110
/* America/Dominica */ :int { 186 } //Z#111
/* America/Edmonton */ :table {
@@ -482,7 +474,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- links:intvector { 112, 387 }
+ links:intvector { 112, 388 }
} //Z#112
/* America/Eirunepe */ :table {
trans:intvector { -1767208832, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 750834000, 761716800, 1214283600, 1384056000 }
@@ -566,7 +558,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -14400 }
finalYear:int { 2008 }
- links:intvector { 128, 383 }
+ links:intvector { 128, 384 }
} //Z#128
/* America/Havana */ :table {
transPre32:intvector { -1, 1770465464 }
@@ -576,7 +568,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Cuba" }
finalRaw:int { -18000 }
finalYear:int { 2014 }
- links:intvector { 129, 394 }
+ links:intvector { 129, 395 }
} //Z#129
/* America/Hermosillo */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -873828000, -661539600, 28800, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400 }
@@ -591,7 +583,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 117, 131, 139, 511, 618 }
+ links:intvector { 117, 131, 139, 512, 619 }
} //Z#131
/* America/Indiana/Knox */ :table {
transPre32:intvector { -1, 1577320096 }
@@ -601,7 +593,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 132, 147, 621 }
+ links:intvector { 132, 147, 622 }
} //Z#132
/* America/Indiana/Marengo */ :table {
transPre32:intvector { -1, 1577320096 }
@@ -678,7 +670,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1827687170, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 }
typeOffsets:intvector { -18430, 0, -18000, 0, -18000, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- links:intvector { 142, 528 }
+ links:intvector { 142, 529 }
} //Z#142
/* America/Jujuy */ :int { 68 } //Z#143
/* America/Juneau */ :table {
@@ -730,7 +722,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 151, 548, 624, 625 }
+ links:intvector { 151, 549, 625, 626 }
} //Z#151
/* America/Louisville */ :int { 145 } //Z#152
/* America/Lower_Princes */ :int { 105 } //Z#153
@@ -749,7 +741,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1767211196, -1206954000, -1191358800, -1175371200, -1159822800, -633816000, -622065600, -602280000, -591829200, -570744000, -560206800, -539121600, -531349200, -191361600, -184194000, -155160000, -150066000, -128894400, -121122000, -99950400, -89586000, -68414400, -57963600, 499752000, 511239600, 530596800, 540270000, 562132800, 571201200, 750830400, 761713200 }
typeOffsets:intvector { -14404, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 156, 376 }
+ links:intvector { 156, 377 }
} //Z#156
/* America/Marigot */ :int { 186 } //Z#157
/* America/Martinique */ :table {
@@ -772,7 +764,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Mexico" }
finalRaw:int { -25200 }
finalYear:int { 2003 }
- links:intvector { 160, 537 }
+ links:intvector { 160, 538 }
} //Z#160
/* America/Mendoza */ :int { 70 } //Z#161
/* America/Menominee */ :table {
@@ -794,12 +786,12 @@ zoneinfo64:table(nofallback) {
} //Z#163
/* America/Metlakatla */ :table {
transPre32:intvector { -1, 1069743569, -1, 2106011674 }
- trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 1446372000, 1457866800, 1478426400 }
+ trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 1446372000, 1457866800, 1478426400, 1489316400, 1509876000, 1520766000, 1541325600, 1547978400, 1552215600, 1572775200 }
typeOffsets:intvector { 54822, 0, -32400, 0, -32400, 3600, -31578, 0, -28800, 0, -28800, 3600 }
- typeMap:bin { "03040504050405040504050405040504050405040504050405040504050405040504010201" }
+ typeMap:bin { "0304050405040504050405040504050405040504050405040504050405040504050401020102010204010201" }
finalRule { "US" }
finalRaw:int { -32400 }
- finalYear:int { 2017 }
+ finalYear:int { 2020 }
} //Z#164
/* America/Mexico_City */ :table {
trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, -975261600, -963169200, -917114400, -907354800, -821901600, -810068400, -627501600, -612990000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 989136000, 1001833200, 1018166400, 1035702000 }
@@ -808,7 +800,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Mexico" }
finalRaw:int { -21600 }
finalYear:int { 2003 }
- links:intvector { 165, 538 }
+ links:intvector { 165, 539 }
} //Z#165
/* America/Miquelon */ :table {
trans:intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 }
@@ -858,7 +850,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 173, 619 }
+ links:intvector { 173, 620 }
} //Z#173
/* America/Nipigon */ :table {
transPre32:intvector { -1, 1928233280 }
@@ -882,7 +874,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1767217820, -1206961200, -1191366000, -1175378400, -1159830000, -633823200, -622072800, -602287200, -591836400, -570751200, -560214000, -539128800, -531356400, -191368800, -184201200, -155167200, -150073200, -128901600, -121129200, -99957600, -89593200, -68421600, -57970800, 499744800, 511232400, 530589600, 540262800, 562125600, 571194000, 592970400, 602038800, 624420000, 634698000, 938916000, 951613200, 970970400, 971571600, 1003024800, 1013907600 }
typeOffsets:intvector { -7780, 0, -7200, 0, -7200, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 176, 374 }
+ links:intvector { 176, 375 }
} //Z#176
/* America/North_Dakota/Beulah */ :table {
transPre32:intvector { -1, 1577323696 }
@@ -944,7 +936,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 }
typeOffsets:intvector { -26898, 0, -25200, 0, -25200, 3600 }
typeMap:bin { "0102010201020102010201" }
- links:intvector { 184, 545, 616 }
+ links:intvector { 184, 546, 617 }
} //Z#184
/* America/Port-au-Prince */ :table {
transPre32:intvector { -1, 1770463056 }
@@ -972,7 +964,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -873057600, -765399600 }
typeOffsets:intvector { -15865, 0, -14400, 0, -14400, 3600 }
typeMap:bin { "010201" }
- links:intvector { 189, 547 }
+ links:intvector { 189, 548 }
} //Z#189
/* America/Punta_Arenas */ :table {
transPre32:intvector { -1, 1770462716 }
@@ -1006,7 +998,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -2030202084, -1632063600, -1615132800, -1251651600, -1238349600, -1220202000, -1206900000, -1188752400, -1175450400, -1156698000, -1144000800, -1125248400, -1111946400, -1032714000, -1016992800, -1001264400, -986148000, -969814800, -954093600, -937760400, -922039200, -906310800, -890589600, -880210800, -765388800, -748450800, -732729600, -715791600, -702489600, -684342000, -671040000, -652892400, -639590400, -620838000, -608140800, -589388400, -576086400, -557938800, -544636800, -526489200, -513187200, -495039600, -481737600, -463590000, -450288000, -431535600, -418233600, -400086000, -386784000, -337186800, -321465600, -305737200 }
typeOffsets:intvector { -25116, 0, -25200, 0, -25200, 3600, -21600, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- links:intvector { 194, 385, 390 }
+ links:intvector { 194, 386, 391 }
} //Z#194
/* America/Resolute */ :table {
trans:intvector { -704937600, -147895200, -131565600, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
@@ -1020,7 +1012,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1767209328, -1206950400, -1191355200, -1175367600, -1159819200, -633812400, -622062000, -602276400, -591825600, -570740400, -560203200, -539118000, -531345600, -191358000, -184190400, -155156400, -150062400, -128890800, -121118400, -99946800, -89582400, -68410800, -57960000, 499755600, 511243200, 530600400, 540273600, 562136400, 571204800, 1214283600, 1384056000 }
typeOffsets:intvector { -16272, 0, -18000, 0, -18000, 3600, -14400, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010301" }
- links:intvector { 187, 196, 373 }
+ links:intvector { 187, 196, 374 }
} //Z#196
/* America/Rosario */ :int { 67 } //Z#197
/* America/Santa_Isabel */ :int { 216 } //Z#198
@@ -1030,13 +1022,13 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" }
} //Z#199
/* America/Santiago */ :table {
- trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 }
+ trans:intvector { -1892661434, -1688410800, -1619205434, -1593806400, -1335986234, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200 }
typeOffsets:intvector { -16966, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 }
- typeMap:bin { "0100030002010201020102010201030103040301030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
+ typeMap:bin { "0100030002010201020102010201030103040301030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
finalRule { "Chile" }
finalRaw:int { -14400 }
- finalYear:int { 2017 }
- links:intvector { 200, 392 }
+ finalYear:int { 2020 }
+ links:intvector { 200, 393 }
} //Z#200
/* America/Santo_Domingo */ :table {
transPre32:intvector { -1, 1770462472 }
@@ -1052,7 +1044,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Brazil" }
finalRaw:int { -10800 }
finalYear:int { 2039 }
- links:intvector { 202, 371, 375 }
+ links:intvector { 202, 372, 376 }
} //Z#202
/* America/Scoresbysund */ :table {
trans:intvector { -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -1080,7 +1072,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -12600 }
finalYear:int { 2013 }
- links:intvector { 207, 379, 388 }
+ links:intvector { 207, 380, 389 }
} //Z#207
/* America/St_Kitts */ :int { 186 } //Z#208
/* America/St_Lucia */ :int { 186 } //Z#209
@@ -1120,7 +1112,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2011 }
- links:intvector { 115, 198, 216, 536 }
+ links:intvector { 115, 198, 216, 537 }
} //Z#216
/* America/Toronto */ :table {
transPre32:intvector { -1, 1928231148 }
@@ -1130,7 +1122,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- links:intvector { 170, 217, 386 }
+ links:intvector { 170, 217, 387 }
} //Z#217
/* America/Tortola */ :int { 186 } //Z#218
/* America/Vancouver */ :table {
@@ -1141,7 +1133,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 219, 389 }
+ links:intvector { 219, 390 }
} //Z#219
/* America/Virgin */ :int { 186 } //Z#220
/* America/Whitehorse */ :table {
@@ -1152,7 +1144,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- links:intvector { 221, 391 }
+ links:intvector { 221, 392 }
} //Z#221
/* America/Winnipeg */ :table {
transPre32:intvector { -1, 1692709012 }
@@ -1162,7 +1154,7 @@ zoneinfo64:table(nofallback) {
finalRule { "Canada" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- links:intvector { 222, 384 }
+ links:intvector { 222, 385 }
} //Z#222
/* America/Yakutat */ :table {
transPre32:intvector { -1, 1069743569, -1, 2106013631 }
@@ -1207,7 +1199,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 0, 0, 18000, 0, 21600, 0 }
typeMap:bin { "0201" }
} //Z#229
- /* Antarctica/McMurdo */ :int { 551 } //Z#230
+ /* Antarctica/McMurdo */ :int { 552 } //Z#230
/* Antarctica/Palmer */ :table {
trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1480820400 }
typeOffsets:intvector { 0, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
@@ -1218,7 +1210,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 0, 0, -10800, 0 }
typeMap:bin { "01" }
} //Z#232
- /* Antarctica/South_Pole */ :int { 551 } //Z#233
+ /* Antarctica/South_Pole */ :int { 552 } //Z#233
/* Antarctica/Syowa */ :table {
trans:intvector { -407808000 }
typeOffsets:intvector { 0, 0, 10800, 0 }
@@ -1237,8 +1229,8 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 0, 0, 21600, 0 }
typeMap:bin { "01" }
} //Z#236
- /* Arctic/Longyearbyen */ :int { 473 } //Z#237
- /* Asia/Aden */ :int { 308 } //Z#238
+ /* Arctic/Longyearbyen */ :int { 474 } //Z#237
+ /* Asia/Aden */ :int { 309 } //Z#238
/* Asia/Almaty */ :table {
trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 }
typeOffsets:intvector { 18468, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
@@ -1295,7 +1287,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1570084924 }
typeOffsets:intvector { 24124, 0, 25200, 0 }
typeMap:bin { "01" }
- links:intvector { 250, 302, 330 }
+ links:intvector { 250, 302, 331 }
} //Z#250
/* Asia/Barnaul */ :table {
trans:intvector { -1579844100, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 801590400, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1459022400 }
@@ -1332,8 +1324,8 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 27480, 0, 25200, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600 }
typeMap:bin { "010205040504050405040504050405040504050405040504050405040504050405040504050405040504050405040203020302" }
} //Z#257
- /* Asia/Chongqing */ :int { 313 } //Z#258
- /* Asia/Chungking */ :int { 313 } //Z#259
+ /* Asia/Chongqing */ :int { 314 } //Z#258
+ /* Asia/Chungking */ :int { 314 } //Z#259
/* Asia/Colombo */ :table {
transPre32:intvector { -1, 1454807332 }
trans:intvector { -2019705572, -883287000, -862639200, -764051400, 832962600, 846266400, 1145039400 }
@@ -1354,7 +1346,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -891582800, -872058600, -862637400, -576138600, 1245430800, 1262278800 }
typeOffsets:intvector { 21700, 0, 19800, 0, 21200, 0, 21600, 0, 21600, 3600, 23400, 0 }
typeMap:bin { "02050105030403" }
- links:intvector { 261, 263, 372 }
+ links:intvector { 261, 263, 373 }
} //Z#263
/* Asia/Dili */ :table {
trans:intvector { -1830414140, -879152400, 199897200, 969120000 }
@@ -1382,19 +1374,19 @@ zoneinfo64:table(nofallback) {
} //Z#267
/* Asia/Gaza */ :table {
transPre32:intvector { -1, 2109557424 }
- trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
+ trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334015200, 337644000, 452556000, 462232800, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
typeOffsets:intvector { 8272, 0, 7200, 0, 7200, 3600 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Palestine" }
finalRaw:int { 7200 }
finalYear:int { 2017 }
} //Z#268
- /* Asia/Harbin */ :int { 313 } //Z#269
+ /* Asia/Harbin */ :int { 314 } //Z#269
/* Asia/Hebron */ :table {
transPre32:intvector { -1, 2109557273 }
- trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
+ trans:intvector { -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334015200, 337644000, 452556000, 462232800, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445547600, 1458946800, 1477692000 }
typeOffsets:intvector { 8423, 0, 7200, 0, 7200, 3600 }
- typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Palestine" }
finalRaw:int { 7200 }
finalYear:int { 2017 }
@@ -1403,13 +1395,13 @@ zoneinfo64:table(nofallback) {
trans:intvector { -2004073600, -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 }
typeOffsets:intvector { 25600, 0, 25200, 0, 25590, 0, 28800, 0, 32400, 0 }
typeMap:bin { "020103040103010301" }
- links:intvector { 271, 309, 629 }
+ links:intvector { 271, 310, 630 }
} //Z#271
/* Asia/Hong_Kong */ :table {
- trans:intvector { -2056693002, -907389000, -891667800, -884246400, -766746000, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -542352600, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 }
- typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 3600, 32400, 0 }
- typeMap:bin { "010201030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 272, 510 }
+ trans:intvector { -2056690800, -900909000, -891579600, -884248200, -766659600, -747981000, -728544600, -717049800, -694503000, -683785800, -668064600, -654755400, -636615000, -623305800, -605165400, -591856200, -573715800, -559801800, -541661400, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132816600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 }
+ typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 3600, 30600, 0, 32400, 0 }
+ typeMap:bin { "010203040102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ links:intvector { 272, 511 }
} //Z#272
/* Asia/Hovd */ :table {
trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, 1111777200, 1127498400, 1143226800, 1159552800, 1427482800, 1443196800, 1458932400, 1474646400 }
@@ -1421,7 +1413,7 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 25025, 0, 25200, 0, 25200, 3600, 28800, 0, 28800, 3600, 32400, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
} //Z#274
- /* Asia/Istanbul */ :int { 457 } //Z#275
+ /* Asia/Istanbul */ :int { 458 } //Z#275
/* Asia/Jakarta */ :table {
trans:intvector { -1451719200, -1172906400, -876641400, -766054800, -683883000, -620812800, -189415800 }
typeOffsets:intvector { 25632, 0, 25200, 0, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
@@ -1434,13 +1426,13 @@ zoneinfo64:table(nofallback) {
} //Z#277
/* Asia/Jerusalem */ :table {
transPre32:intvector { -1, 1454818042 }
- trans:intvector { -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1382828400 }
+ trans:intvector { -1641003640, -933645600, -857358000, -844300800, -825822000, -812685600, -794199600, -779853600, -762656400, -748310400, -731127600, -681962400, -673243200, -667962000, -652327200, -636426000, -622087200, -608947200, -591847200, -572486400, -558576000, -542851200, -527731200, -514425600, -490845600, -482986800, -459475200, -451537200, -428551200, -418262400, -400032000, -387428400, 142380000, 150843600, 167176800, 178664400, 334015200, 337644000, 452556000, 462232800, 482277600, 495579600, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 826840800, 842821200, 858895200, 874184400, 890344800, 905029200, 923011200, 936313200, 955670400, 970783200, 986770800, 1001282400, 1017356400, 1033941600, 1048806000, 1065132000, 1081292400, 1095804000, 1112313600, 1128812400, 1143763200, 1159657200, 1175212800, 1189897200, 1206662400, 1223161200, 1238112000, 1254006000, 1269561600, 1284246000, 1301616000, 1317510000, 1333065600, 1348354800, 1364515200, 1382828400 }
typeOffsets:intvector { 8454, 0, 7200, 0, 7200, 3600, 7200, 7200, 8440, 0 }
- typeMap:bin { "0401020102010201020102010302010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "040102010201020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Zion" }
finalRaw:int { 7200 }
finalYear:int { 2014 }
- links:intvector { 278, 320, 526 }
+ links:intvector { 278, 321, 527 }
} //Z#278
/* Asia/Kabul */ :table {
transPre32:intvector { -1, 1770429088 }
@@ -1457,9 +1449,9 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1988166492, -862637400, -764145000, -576135000, 1018119600, 1033840800, 1212260400, 1225476000, 1239735600, 1257012000 }
typeOffsets:intvector { 16092, 0, 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 }
typeMap:bin { "03040301020102010201" }
- links:intvector { 281, 544 }
+ links:intvector { 281, 545 }
} //Z#281
- /* Asia/Kashgar */ :int { 328 } //Z#282
+ /* Asia/Kashgar */ :int { 329 } //Z#282
/* Asia/Kathmandu */ :table {
trans:intvector { -1577943676, 504901800 }
typeOffsets:intvector { 20476, 0, 19800, 0, 20700, 0 }
@@ -1477,7 +1469,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -2019705670, -891581400, -872058600, -862637400, -764145000 }
typeOffsets:intvector { 21208, 0, 19270, 0, 19800, 0, 19800, 3600, 21200, 0 }
typeMap:bin { "04010203020302" }
- links:intvector { 255, 286, 512 }
+ links:intvector { 255, 286, 513 }
} //Z#286
/* Asia/Krasnoyarsk */ :table {
trans:intvector { -1577513486, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288465200, 1301166000, 1414260000 }
@@ -1495,12 +1487,12 @@ zoneinfo64:table(nofallback) {
typeOffsets:intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 }
typeMap:bin { "010203020302030203020302030203020402" }
} //Z#289
- /* Asia/Kuwait */ :int { 308 } //Z#290
+ /* Asia/Kuwait */ :int { 309 } //Z#290
/* Asia/Macao */ :int { 292 } //Z#291
/* Asia/Macau */ :table {
- trans:intvector { -1830412800, -277360200, -257405400, -245910600, -225955800, -214473600, -194506200, -182406600, -163056600, -150969600, -131619600, -117088200, -101367000, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72201600, 87922800, 103651200, 119977200, 135705600, 151439400, 167167800, 182889000, 198617400, 214338600, 230067000, 245788200, 261504000, 277225200, 292953600, 309279600, 325008000, 340729200 }
- typeOffsets:intvector { 27260, 0, 28800, 0, 28800, 3600 }
- typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ trans:intvector { -2056692850, -884509200, -873280800, -855918000, -841744800, -828529200, -765363600, -747046800, -733827600, -716461200, -697021200, -683715600, -667990800, -654771600, -636627600, -623322000, -605178000, -591872400, -573642000, -559818000, -541674000, -528368400, -510224400, -498128400, -478774800, -466678800, -446720400, -435229200, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, -213856200, -194506200, -182406600, -163056600, -148537800, -132820200, -117088200, -101370600, -85638600, -69312600, -53584200, -37863000, -22134600, -6413400, 9315000, 25036200, 40764600, 56485800, 72214200, 88540200, 104268600, 119989800, 126041400, 151439400, 167167800, 182889000, 198617400, 214338600, 295385400, 309292200 }
+ typeOffsets:intvector { 27250, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600 }
+ typeMap:bin { "0103040304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
links:intvector { 291, 292 }
} //Z#292
/* Asia/Magadan */ :table {
@@ -1512,7 +1504,7 @@ zoneinfo64:table(nofallback) {
trans:intvector { -1172908656, -880272000, -766054800 }
typeOffsets:intvector { 28656, 0, 28800, 0, 32400, 0 }
typeMap:bin { "010201" }
- links:intvector { 294, 325 }
+ links:intvector { 294, 326 }
} //Z#294
/* Asia/Manila */ :table {
transPre32:intvector { -1, 350346256, -1, 2065645456 }
@@ -1528,7 +1520,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EUAsia" }
finalRaw:int { 7200 }
finalYear:int { 2000 }
- links:intvector { 297, 472 }
+ links:intvector { 297, 473 }
} //Z#297
/* Asia/Novokuznetsk */ :table {
trans:intvector { -1441259328, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1035658800, 1048964400, 1067108400, 1080414000, 1099162800, 1111863600, 1130612400, 1143313200, 1162062000, 1174762800, 1193511600, 1206817200, 1224961200, 1238266800, 1256410800, 1269716400, 1288468800, 1301169600 }
@@ -1557,7 +1549,7 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "02040203020301" }
} //Z#303
/* Asia/Pyongyang */ :table {
- trans:intvector { -1948782180, -1830414600, 1439564400, 1525447800 }
+ trans:intvector { -1948782180, -1830414600, 1439564400, 1525446000 }
typeOffsets:intvector { 30180, 0, 30600, 0, 32400, 0 }
typeMap:bin { "01020102" }
} //Z#304
@@ -1567,146 +1559,152 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "0201" }
links:intvector { 248, 305 }
} //Z#305
+ /* Asia/Qostanay */ :table {
+ trans:intvector { -1441167268, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 }
+ typeOffsets:intvector { 15268, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
+ typeMap:bin { "010304050403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030405" }
+ } //Z#306
/* Asia/Qyzylorda */ :table {
- trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695768400, 701812800, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 }
+ trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695768400, 701812800, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1545328800 }
typeOffsets:intvector { 15712, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
- typeMap:bin { "010304050403040304030403040304030403040304030203050403040304030403040304030403040304030403040304030405" }
- } //Z#306
- /* Asia/Rangoon */ :int { 333 } //Z#307
+ typeMap:bin { "01030405040304030403040304030403040304030403020305040304030403040304030403040304030403040304030403040503" }
+ } //Z#307
+ /* Asia/Rangoon */ :int { 334 } //Z#308
/* Asia/Riyadh */ :table {
trans:intvector { -719636812 }
typeOffsets:intvector { 11212, 0, 10800, 0 }
typeMap:bin { "01" }
- links:intvector { 238, 290, 308 }
- } //Z#308
- /* Asia/Saigon */ :int { 271 } //Z#309
+ links:intvector { 238, 290, 309 }
+ } //Z#309
+ /* Asia/Saigon */ :int { 271 } //Z#310
/* Asia/Sakhalin */ :table {
trans:intvector { -2031039048, -768560400, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200, 1459008000 }
typeOffsets:intvector { 34248, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600 }
typeMap:bin { "010405040504050405040504050405040504050405040302040504050405040504050403020302030203020302030203020302030203020302030203020302040204" }
- } //Z#310
+ } //Z#311
/* Asia/Samarkand */ :table {
trans:intvector { -1441168073, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686091600 }
typeOffsets:intvector { 16073, 0, 14400, 0, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010203040302030203020302030203020302030203020302" }
- } //Z#311
+ } //Z#312
/* Asia/Seoul */ :table {
trans:intvector { -1948782472, -1830414600, -498128400, -462702600, -451733400, -429784200, -418296600, -399544200, -387451800, -368094600, -356002200, -336645000, -324552600, -305195400, -293103000, -264933000, 547578000, 560883600, 579027600, 592333200 }
typeOffsets:intvector { 30472, 0, 30600, 0, 30600, 3600, 32400, 0, 32400, 3600 }
typeMap:bin { "0103010201020102010201020102010304030403" }
- links:intvector { 312, 596 }
- } //Z#312
+ links:intvector { 313, 597 }
+ } //Z#313
/* Asia/Shanghai */ :table {
transPre32:intvector { -1, 2117485353 }
- trans:intvector { -933494400, -923130000, -908784000, -891594000, 515520000, 527007600, 545155200, 558457200, 576604800, 589906800, 608659200, 621961200, 640108800, 653410800, 671558400, 684860400 }
+ trans:intvector { -933667200, -922093200, -908870400, -888829200, -881049600, -767869200, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -650019600, 515527200, 527014800, 545162400, 558464400, 577216800, 589914000, 608666400, 621968400, 640116000, 653418000, 671565600, 684867600 }
typeOffsets:intvector { 29143, 0, 28800, 0, 28800, 3600 }
- typeMap:bin { "0102010201020102010201020102010201" }
- links:intvector { 258, 259, 269, 313, 382, 546 }
- } //Z#313
+ typeMap:bin { "010201020102010201020102010201020102010201020102010201" }
+ links:intvector { 258, 259, 269, 314, 383, 547 }
+ } //Z#314
/* Asia/Singapore */ :table {
trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 }
typeOffsets:intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 }
typeMap:bin { "01020304060405" }
- links:intvector { 314, 598 }
- } //Z#314
+ links:intvector { 315, 599 }
+ } //Z#315
/* Asia/Srednekolymsk */ :table {
trans:intvector { -1441188892, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1414245600 }
typeOffsets:intvector { 36892, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#315
+ } //Z#316
/* Asia/Taipei */ :table {
transPre32:intvector { -1, 1959718936 }
trans:intvector { -1017820800, -766224000, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 299606400, 307551600 }
typeOffsets:intvector { 29160, 0, 28800, 0, 28800, 3600, 32400, 0 }
typeMap:bin { "0103010201020102010201020102010201020102010201020102010201020102010201020102010201" }
- links:intvector { 316, 595 }
- } //Z#316
+ links:intvector { 317, 596 }
+ } //Z#317
/* Asia/Tashkent */ :table {
trans:intvector { -1441168631, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600 }
typeOffsets:intvector { 16631, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 }
typeMap:bin { "010304030403040304030403040304030403040304030201" }
- } //Z#317
+ } //Z#318
/* Asia/Tbilisi */ :table {
trans:intvector { -1441162751, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701816400, 717537600, 733266000, 748987200, 764715600, 780436800, 796161600, 811882800, 828216000, 877806000, 891115200, 909255600, 922564800, 941310000, 954014400, 972759600, 985464000, 1004209200, 1017518400, 1035658800, 1048968000, 1067108400, 1080417600, 1088276400, 1099177200, 1111878000 }
typeOffsets:intvector { 10751, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "0103040304030403040304030403040304030403040302010201020102030403040304030403040304030403040304020103" }
- } //Z#318
+ } //Z#319
/* Asia/Tehran */ :table {
- trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800 }
+ trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667400, 1253561400, 1269203400, 1285097400, 1300739400, 1316633400, 1332275400, 1348169400, 1363897800, 1379791800, 1395433800, 1411327800, 1426969800, 1442863800, 1458505800, 1474399800, 1490128200, 1506022200, 1521664200, 1537558200, 1553200200, 1569094200, 1584736200, 1600630200, 1616358600, 1632252600, 1647894600, 1663788600, 1679430600, 1695324600, 1710966600, 1726860600, 1742589000, 1758483000, 1774125000, 1790019000, 1805661000, 1821555000, 1837197000, 1853091000, 1868733000, 1884627000, 1900355400, 1916249400, 1931891400, 1947785400, 1963427400, 1979321400, 1994963400, 2010857400, 2026585800, 2042479800, 2058121800, 2074015800, 2089657800, 2105551800, 2121193800, 2137087800 }
+ transPost32:intvector { 0, -2142151096, 0, -2126257096, 0, -2110615096, 0, -2094721096, 0, -2079079096, 0, -2063185096, 0, -2047543096, 0, -2031649096, 0, -2015920696, 0, -2000026696, 0, -1984384696, 0, -1968490696, 0, -1952848696, 0, -1936954696, 0, -1921312696, 0, -1905418696, 0, -1889690296, 0, -1873796296, 0, -1858154296, 0, -1842260296, 0, -1826618296, 0, -1810724296, 0, -1795082296, 0, -1779188296, 0, -1763459896, 0, -1747565896, 0, -1731923896, 0, -1716029896, 0, -1700387896, 0, -1684493896, 0, -1668851896, 0, -1652957896, 0, -1637229496, 0, -1621335496, 0, -1605693496, 0, -1589799496, 0, -1574157496, 0, -1558263496, 0, -1542621496, 0, -1526727496, 0, -1510999096, 0, -1495105096, 0, -1479463096, 0, -1463569096, 0, -1447927096, 0, -1432033096, 0, -1416391096, 0, -1400497096, 0, -1384855096, 0, -1368961096, 0, -1353232696, 0, -1337338696, 0, -1321696696, 0, -1305802696, 0, -1290160696, 0, -1274266696, 0, -1258624696, 0, -1242730696, 0, -1227002296, 0, -1211108296, 0, -1195466296, 0, -1179572296, 0, -1163930296, 0, -1148036296, 0, -1132394296, 0, -1116500296, 0, -1100771896, 0, -1084877896, 0, -1069235896, 0, -1053341896, 0, -1037699896, 0, -1021805896, 0, -1006163896, 0, -990269896, 0, -974541496, 0, -958647496, 0, -943005496, 0, -927111496, 0, -911469496, 0, -895575496, 0, -879933496, 0, -864039496, 0, -848311096, 0, -832417096, 0, -816775096, 0, -800881096, 0, -785239096, 0, -769345096, 0, -753703096, 0, -737809096, 0, -722080696, 0, -706186696, 0, -690544696, 0, -674650696, 0, -659008696, 0, -643114696, 0, -627472696, 0, -611578696, 0, -595850296, 0, -579956296, 0, -564314296, 0, -548420296 }
typeOffsets:intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 }
- typeMap:bin { "01030403010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
+ typeMap:bin { "010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
finalRule { "Iran" }
finalRaw:int { 12600 }
- finalYear:int { 2037 }
- links:intvector { 319, 525 }
- } //Z#319
- /* Asia/Tel_Aviv */ :int { 278 } //Z#320
- /* Asia/Thimbu */ :int { 322 } //Z#321
+ finalYear:int { 2089 }
+ links:intvector { 320, 526 }
+ } //Z#320
+ /* Asia/Tel_Aviv */ :int { 278 } //Z#321
+ /* Asia/Thimbu */ :int { 323 } //Z#322
/* Asia/Thimphu */ :table {
trans:intvector { -706341516, 560025000 }
typeOffsets:intvector { 21516, 0, 19800, 0, 21600, 0 }
typeMap:bin { "0102" }
- links:intvector { 321, 322 }
- } //Z#322
+ links:intvector { 322, 323 }
+ } //Z#323
/* Asia/Tokyo */ :table {
transPre32:intvector { -1, 1707254896 }
- trans:intvector { -683802000, -672314400, -654771600, -640864800, -620298000, -609415200, -588848400, -577965600 }
+ trans:intvector { -683802000, -672310800, -654771600, -640861200, -620298000, -609411600, -588848400, -577962000 }
typeOffsets:intvector { 33539, 0, 32400, 0, 32400, 3600 }
typeMap:bin { "010201020102010201" }
- links:intvector { 323, 527, 529 }
- } //Z#323
+ links:intvector { 324, 528, 530 }
+ } //Z#324
/* Asia/Tomsk */ :table {
trans:intvector { -1578807591, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 972759600, 985460400, 1004209200, 1017514800, 1020193200, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1111867200, 1130616000, 1143316800, 1162065600, 1174766400, 1193515200, 1206820800, 1224964800, 1238270400, 1256414400, 1269720000, 1288468800, 1301169600, 1414263600, 1464465600 }
typeOffsets:intvector { 20391, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600 }
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304020102010201020102010201020102010201030103" }
- } //Z#324
- /* Asia/Ujung_Pandang */ :int { 294 } //Z#325
+ } //Z#325
+ /* Asia/Ujung_Pandang */ :int { 294 } //Z#326
/* Asia/Ulaanbaatar */ :table {
trans:intvector { -2032931252, 252435600, 417974400, 433782000, 449596800, 465318000, 481046400, 496767600, 512496000, 528217200, 543945600, 559666800, 575395200, 591116400, 606844800, 622566000, 638294400, 654620400, 670348800, 686070000, 701798400, 717519600, 733248000, 748969200, 764697600, 780418800, 796147200, 811868400, 828201600, 843922800, 859651200, 875372400, 891100800, 906822000, 988394400, 1001696400, 1017424800, 1033146000, 1048874400, 1064595600, 1080324000, 1096045200, 1111773600, 1127494800, 1143223200, 1159549200, 1427479200, 1443193200, 1458928800, 1474642800 }
typeOffsets:intvector { 25652, 0, 25200, 0, 28800, 0, 28800, 3600 }
typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
- links:intvector { 326, 327 }
- } //Z#326
- /* Asia/Ulan_Bator */ :int { 326 } //Z#327
+ links:intvector { 327, 328 }
+ } //Z#327
+ /* Asia/Ulan_Bator */ :int { 327 } //Z#328
/* Asia/Urumqi */ :table {
trans:intvector { -1325483420 }
typeOffsets:intvector { 21020, 0, 21600, 0 }
typeMap:bin { "01" }
- links:intvector { 282, 328 }
- } //Z#328
+ links:intvector { 282, 329 }
+ } //Z#329
/* Asia/Ust-Nera */ :table {
trans:intvector { -1579426374, -1247558400, 354898800, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1315828800, 1414249200 }
typeOffsets:intvector { 34374, 0, 28800, 0, 32400, 0, 36000, 0, 36000, 3600, 39600, 0, 39600, 3600, 43200, 0 }
typeMap:bin { "010206050605060506050605060506050605060506050403050605060506050605060506050605060506050605060506050605060506050605060506050605070503" }
- } //Z#329
- /* Asia/Vientiane */ :int { 250 } //Z#330
+ } //Z#330
+ /* Asia/Vientiane */ :int { 250 } //Z#331
/* Asia/Vladivostok */ :table {
trans:intvector { -1487321251, -1247562000, 354895200, 370702800, 386431200, 402238800, 417967200, 433774800, 449589600, 465321600, 481046400, 496771200, 512496000, 528220800, 543945600, 559670400, 575395200, 591120000, 606844800, 622569600, 638294400, 654624000, 670348800, 686077200, 695754000, 701798400, 717523200, 733248000, 748972800, 764697600, 780422400, 796147200, 811872000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 972748800, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143302400, 1162051200, 1174752000, 1193500800, 1206806400, 1224950400, 1238256000, 1256400000, 1269705600, 1288454400, 1301155200, 1414249200 }
typeOffsets:intvector { 31651, 0, 32400, 0, 32400, 3600, 36000, 0, 36000, 3600, 39600, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#331
+ } //Z#332
/* Asia/Yakutsk */ :table {
trans:intvector { -1579423138, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 972752400, 985453200, 1004202000, 1017507600, 1035651600, 1048957200, 1067101200, 1080406800, 1099155600, 1111856400, 1130605200, 1143306000, 1162054800, 1174755600, 1193504400, 1206810000, 1224954000, 1238259600, 1256403600, 1269709200, 1288458000, 1301158800, 1414252800 }
typeOffsets:intvector { 31138, 0, 28800, 0, 28800, 3600, 32400, 0, 32400, 3600, 36000, 0 }
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#332
+ } //Z#333
/* Asia/Yangon */ :table {
trans:intvector { -1577946287, -873268200, -778410000 }
typeOffsets:intvector { 23087, 0, 23400, 0, 32400, 0 }
typeMap:bin { "010201" }
- links:intvector { 307, 333 }
- } //Z#333
+ links:intvector { 308, 334 }
+ } //Z#334
/* Asia/Yekaterinburg */ :table {
trans:intvector { -1688270553, -1592610305, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1111870800, 1130619600, 1143320400, 1162069200, 1174770000, 1193518800, 1206824400, 1224968400, 1238274000, 1256418000, 1269723600, 1288472400, 1301173200, 1414267200 }
typeOffsets:intvector { 14553, 0, 13505, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 }
typeMap:bin { "010204050405040504050405040504050405040504050403020405040504050405040504050405040504050405040504050405040504050405040504050405040604" }
- } //Z#334
+ } //Z#335
/* Asia/Yerevan */ :table {
trans:intvector { -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288476000, 1301176800, 1319925600 }
typeOffsets:intvector { 10680, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "0103040304030403040304030403040304030403040302010201020102010203040304030403040304030403040304030403040304030403040304030403" }
- links:intvector { 335, 539 }
- } //Z#335
+ links:intvector { 336, 540 }
+ } //Z#336
/* Atlantic/Azores */ :table {
transPre32:intvector { -1, 1581063056 }
trans:intvector { -1830376800, -1689548400, -1677794400, -1667430000, -1647730800, -1635807600, -1616194800, -1604358000, -1584658800, -1572735600, -1553036400, -1541199600, -1521500400, -1442444400, -1426806000, -1379286000, -1364770800, -1348441200, -1333321200, -1316386800, -1301266800, -1284332400, -1269817200, -1221433200, -1206918000, -1191193200, -1175468400, -1127689200, -1111964400, -1096844400, -1080514800, -1063580400, -1049065200, -1033340400, -1017615600, -1002495600, -986166000, -969231600, -950482800, -942015600, -922662000, -906937200, -891126000, -877302000, -873676800, -864000000, -857948400, -845852400, -842832000, -831340800, -825894000, -814402800, -810777600, -799891200, -794444400, -782953200, -779328000, -768441600, -762994800, -749084400, -733359600, -717624000, -701899200, -686174400, -670449600, -654724800, -639000000, -591825600, -575496000, -559771200, -544046400, -528321600, -512596800, -496872000, -481147200, -465422400, -449697600, -433972800, -417643200, -401918400, -386193600, -370468800, -354744000, -339019200, -323294400, -307569600, -291844800, -276120000, -260395200, -244670400, -228340800, -212616000, -196891200, -181166400, -165441600, -149716800, -133992000, -118267200, 228272400, 243997200, 260326800, 276051600, 291776400, 307504800, 323226000, 338954400, 354679200, 370404000, 386128800, 401853600, 417582000, 433303200, 449028000, 465357600, 481082400, 496807200, 512532000, 528256800, 543981600, 559706400, 575431200, 591156000, 606880800, 622605600, 638330400, 654660000, 670384800, 686109600, 701834400, 717559200, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -1715,7 +1713,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { -3600 }
finalYear:int { 1997 }
- } //Z#336
+ } //Z#337
/* Atlantic/Bermuda */ :table {
trans:intvector { -1262281242, 136360800, 152082000, 167810400, 183531600, 199260000, 215586000, 230709600, 247035600, 262764000, 278485200, 294213600, 309934800, 325663200, 341384400, 357112800, 372834000, 388562400, 404888400, 420012000, 436338000, 452066400, 467787600, 483516000, 499237200, 514965600, 530686800, 544600800, 562136400, 576050400, 594190800, 607500000, 625640400, 638949600, 657090000, 671004000, 688539600, 702453600, 719989200, 733903200, 752043600, 765352800, 783493200, 796802400, 814942800, 828856800, 846392400, 860306400, 877842000, 891756000, 909291600, 923205600, 941346000, 954655200, 972795600, 986104800, 1004245200, 1018159200, 1035694800, 1049608800, 1067144400, 1081058400, 1099198800, 1112508000, 1130648400, 1143957600, 1162098000, 1173592800, 1194152400 }
typeOffsets:intvector { -15558, 0, -14400, 0, -14400, 3600 }
@@ -1723,7 +1721,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -14400 }
finalYear:int { 2008 }
- } //Z#337
+ } //Z#338
/* Atlantic/Canary */ :table {
trans:intvector { -1509663504, -733874400, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -3696, 0, -3600, 0, 0, 0, 0, 3600 }
@@ -1731,13 +1729,13 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#338
+ } //Z#339
/* Atlantic/Cape_Verde */ :table {
trans:intvector { -1830376800, -862610400, -764118000, 186120000 }
typeOffsets:intvector { -5644, 0, -7200, 0, -7200, 3600, -3600, 0 }
typeMap:bin { "01020103" }
- } //Z#339
- /* Atlantic/Faeroe */ :int { 341 } //Z#340
+ } //Z#340
+ /* Atlantic/Faeroe */ :int { 342 } //Z#341
/* Atlantic/Faroe */ :table {
trans:intvector { -1955748776, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -1624, 0, 0, 0, 0, 3600 }
@@ -1745,9 +1743,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 340, 341 }
- } //Z#341
- /* Atlantic/Jan_Mayen */ :int { 473 } //Z#342
+ links:intvector { 341, 342 }
+ } //Z#342
+ /* Atlantic/Jan_Mayen */ :int { 474 } //Z#343
/* Atlantic/Madeira */ :table {
trans:intvector { -1830380400, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -986169600, -969235200, -950486400, -942019200, -922665600, -906940800, -891129600, -877305600, -873680400, -864003600, -857952000, -845856000, -842835600, -831344400, -825897600, -814406400, -810781200, -799894800, -794448000, -782956800, -779331600, -768445200, -762998400, -749088000, -733363200, -717627600, -701902800, -686178000, -670453200, -654728400, -639003600, -591829200, -575499600, -559774800, -544050000, -528325200, -512600400, -496875600, -481150800, -465426000, -449701200, -433976400, -417646800, -401922000, -386197200, -370472400, -354747600, -339022800, -323298000, -307573200, -291848400, -276123600, -260398800, -244674000, -228344400, -212619600, -196894800, -181170000, -165445200, -149720400, -133995600, -118270800, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -4056, 0, -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 }
@@ -1755,25 +1753,25 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#343
+ } //Z#344
/* Atlantic/Reykjavik */ :table {
trans:intvector { -1956609120, -1668211200, -1647212400, -1636675200, -1613430000, -1605139200, -1581894000, -1539561600, -1531350000, -968025600, -952293600, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -510789600, -496879200, -479340000, -465429600, -447890400, -433980000, -415836000, -401925600, -384386400, -370476000, -352936800, -339026400, -321487200, -307576800, -290037600, -276127200, -258588000, -244677600, -226533600, -212623200, -195084000, -181173600, -163634400, -149724000, -132184800, -118274400, -100735200, -86824800, -68680800, -54770400 }
typeOffsets:intvector { -5280, 0, -3600, 0, -3600, 3600, 0, 0 }
typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- links:intvector { 344, 513 }
- } //Z#344
+ links:intvector { 345, 514 }
+ } //Z#345
/* Atlantic/South_Georgia */ :table {
transPre32:intvector { -1, 1770454464 }
typeOffsets:intvector { -8768, 0, -7200, 0 }
typeMap:bin { "01" }
- } //Z#345
- /* Atlantic/St_Helena */ :int { 5 } //Z#346
+ } //Z#346
+ /* Atlantic/St_Helena */ :int { 5 } //Z#347
/* Atlantic/Stanley */ :table {
trans:intvector { -1824235716, -1018209600, -1003093200, -986760000, -971643600, -954705600, -939589200, -923256000, -908139600, -891806400, -876690000, -860356800, -852066000, 420609600, 433306800, 452052000, 464151600, 483501600, 495601200, 514350000, 527054400, 545799600, 558504000, 577249200, 589953600, 608698800, 621403200, 640753200, 652852800, 672202800, 684907200, 703652400, 716356800, 735102000, 747806400, 766551600, 779256000, 798001200, 810705600, 830055600, 842760000, 861505200, 874209600, 892954800, 905659200, 924404400, 937108800, 955854000, 968558400, 987310800, 999410400, 1019365200, 1030860000, 1050814800, 1062914400, 1082264400, 1094364000, 1113714000, 1125813600, 1145163600, 1157263200, 1176613200, 1188712800, 1208667600, 1220767200, 1240117200, 1252216800, 1271566800, 1283666400 }
typeOffsets:intvector { -13884, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 }
typeMap:bin { "010201020102010201020102010304030403020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" }
- } //Z#347
- /* Australia/ACT */ :int { 366 } //Z#348
+ } //Z#348
+ /* Australia/ACT */ :int { 367 } //Z#349
/* Australia/Adelaide */ :table {
transPre32:intvector { -1, 1930857236, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 384280200, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 637691400, 657045000, 667931400, 688494600, 701195400, 719944200, 731435400, 751998600, 764094600, 783448200, 796149000, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 }
@@ -1782,15 +1780,15 @@ zoneinfo64:table(nofallback) {
finalRule { "AS" }
finalRaw:int { 34200 }
finalYear:int { 2009 }
- links:intvector { 349, 365 }
- } //Z#349
+ links:intvector { 350, 366 }
+ } //Z#350
/* Australia/Brisbane */ :table {
transPre32:intvector { -1, 1928175368 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200 }
typeOffsets:intvector { 36728, 0, 36000, 0, 36000, 3600 }
typeMap:bin { "0102010201020102010201020102010201" }
- links:intvector { 350, 364 }
- } //Z#350
+ links:intvector { 351, 365 }
+ } //Z#351
/* Australia/Broken_Hill */ :table {
transPre32:intvector { -1, 1930856548, -1, 1980016096, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400, 57688200, 67969800, 89137800, 100024200, 120587400, 131473800, 152037000, 162923400, 183486600, 194977800, 215541000, 226427400, 246990600, 257877000, 278440200, 289326600, 309889800, 320776200, 341339400, 352225800, 372789000, 386699400, 404843400, 415729800, 436293000, 447179400, 467742600, 478629000, 499192200, 511288200, 530037000, 542737800, 562091400, 574792200, 594145800, 606241800, 625595400, 636481800, 657045000, 667931400, 688494600, 699381000, 719944200, 731435400, 751998600, 762885000, 783448200, 794334600, 814897800, 828203400, 846347400, 859653000, 877797000, 891102600, 909246600, 922552200, 941301000, 954001800, 972750600, 985451400, 1004200200, 1017505800, 1035649800, 1048955400, 1067099400, 1080405000, 1099153800, 1111854600, 1130603400, 1143909000, 1162053000, 1174753800, 1193502600, 1207413000, 1223137800 }
@@ -1799,9 +1797,9 @@ zoneinfo64:table(nofallback) {
finalRule { "AS" }
finalRaw:int { 34200 }
finalYear:int { 2009 }
- links:intvector { 351, 370 }
- } //Z#351
- /* Australia/Canberra */ :int { 366 } //Z#352
+ links:intvector { 352, 371 }
+ } //Z#352
+ /* Australia/Canberra */ :int { 367 } //Z#353
/* Australia/Currie */ :table {
transPre32:intvector { -1, 1949172768 }
trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 }
@@ -1810,20 +1808,20 @@ zoneinfo64:table(nofallback) {
finalRule { "AT" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- } //Z#353
+ } //Z#354
/* Australia/Darwin */ :table {
transPre32:intvector { -1, 1930859096, -1, 2064778096 }
trans:intvector { -1672565340, -1665390600, -883639800, -876126600, -860398200, -844677000, -828343800, -813227400 }
typeOffsets:intvector { 31400, 0, 32400, 0, 34200, 0, 34200, 3600 }
typeMap:bin { "01020302030203020302" }
- links:intvector { 0, 354, 362 }
- } //Z#354
+ links:intvector { 0, 355, 363 }
+ } //Z#355
/* Australia/Eucla */ :table {
transPre32:intvector { -1, 1957038768 }
trans:intvector { -1672562640, -1665387900, -883637100, -876123900, -860395500, -844674300, 152039700, 162926100, 436295700, 447182100, 690311700, 699383700, 1165079700, 1174756500, 1193505300, 1206810900, 1224954900, 1238260500 }
typeOffsets:intvector { 30928, 0, 31500, 0, 31500, 3600 }
typeMap:bin { "01020102010201020102010201020102010201" }
- } //Z#355
+ } //Z#356
/* Australia/Hobart */ :table {
transPre32:intvector { -1, 1949171940 }
trans:intvector { -1680508800, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 670348800, 686678400, 701798400, 718128000, 733248000, 749577600, 764697600, 781027200, 796147200, 812476800, 828201600, 844531200, 859651200, 875980800, 891100800, 907430400, 922550400, 938880000, 954000000, 967305600, 985449600, 1002384000, 1017504000, 1033833600, 1048953600, 1065283200, 1080403200, 1096732800, 1111852800, 1128182400, 1143907200, 1159632000, 1174752000, 1191686400, 1207411200, 1223136000 }
@@ -1832,15 +1830,15 @@ zoneinfo64:table(nofallback) {
finalRule { "AT" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 356, 367 }
- } //Z#356
- /* Australia/LHI */ :int { 359 } //Z#357
+ links:intvector { 357, 368 }
+ } //Z#357
+ /* Australia/LHI */ :int { 360 } //Z#358
/* Australia/Lindeman */ :table {
transPre32:intvector { -1, 1928176340 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200 }
typeOffsets:intvector { 35756, 0, 36000, 0, 36000, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- } //Z#358
+ } //Z#359
/* Australia/Lord_Howe */ :table {
transPre32:intvector { -1, 1930852316 }
trans:intvector { 352216800, 372785400, 384273000, 404839800, 415722600, 436289400, 447172200, 467739000, 478621800, 499188600, 511282800, 530033400, 542732400, 562087800, 574786800, 594142200, 606236400, 625591800, 636476400, 657041400, 667926000, 688491000, 699375600, 719940600, 731430000, 751995000, 762879600, 783444600, 794329200, 814894200, 828198000, 846343800, 859647600, 877793400, 891097200, 909243000, 922546800, 941297400, 953996400, 967303800, 985446000, 1004196600, 1017500400, 1035646200, 1048950000, 1067095800, 1080399600, 1099150200, 1111849200, 1130599800, 1143903600, 1162049400, 1174748400, 1193499000, 1207407600, 1223134200 }
@@ -1849,8 +1847,8 @@ zoneinfo64:table(nofallback) {
finalRule { "LH" }
finalRaw:int { 37800 }
finalYear:int { 2009 }
- links:intvector { 357, 359 }
- } //Z#359
+ links:intvector { 358, 360 }
+ } //Z#360
/* Australia/Melbourne */ :table {
transPre32:intvector { -1, 1930855704 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 384278400, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 561484800, 574790400, 594144000, 606240000, 625593600, 637689600, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 796147200, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 }
@@ -1859,19 +1857,19 @@ zoneinfo64:table(nofallback) {
finalRule { "AV" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 360, 368 }
- } //Z#360
- /* Australia/NSW */ :int { 366 } //Z#361
- /* Australia/North */ :int { 354 } //Z#362
+ links:intvector { 361, 369 }
+ } //Z#361
+ /* Australia/NSW */ :int { 367 } //Z#362
+ /* Australia/North */ :int { 355 } //Z#363
/* Australia/Perth */ :table {
transPre32:intvector { -1, 1957041892 }
trans:intvector { -1672559940, -1665385200, -883634400, -876121200, -860392800, -844671600, 152042400, 162928800, 436298400, 447184800, 690314400, 699386400, 1165082400, 1174759200, 1193508000, 1206813600, 1224957600, 1238263200 }
typeOffsets:intvector { 27804, 0, 28800, 0, 28800, 3600 }
typeMap:bin { "01020102010201020102010201020102010201" }
- links:intvector { 363, 369 }
- } //Z#363
- /* Australia/Queensland */ :int { 350 } //Z#364
- /* Australia/South */ :int { 349 } //Z#365
+ links:intvector { 364, 370 }
+ } //Z#364
+ /* Australia/Queensland */ :int { 351 } //Z#365
+ /* Australia/South */ :int { 350 } //Z#366
/* Australia/Sydney */ :table {
transPre32:intvector { -1, 1930854204 }
trans:intvector { -1672567140, -1665392400, -883641600, -876128400, -860400000, -844678800, -828345600, -813229200, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386697600, 404841600, 415728000, 436291200, 447177600, 467740800, 478627200, 499190400, 511286400, 530035200, 542736000, 562089600, 574790400, 594144000, 606240000, 625593600, 636480000, 657043200, 667929600, 688492800, 699379200, 719942400, 731433600, 751996800, 762883200, 783446400, 794332800, 814896000, 828201600, 846345600, 859651200, 877795200, 891100800, 909244800, 922550400, 941299200, 954000000, 967305600, 985449600, 1004198400, 1017504000, 1035648000, 1048953600, 1067097600, 1080403200, 1099152000, 1111852800, 1130601600, 1143907200, 1162051200, 1174752000, 1193500800, 1207411200, 1223136000 }
@@ -1880,19 +1878,19 @@ zoneinfo64:table(nofallback) {
finalRule { "AN" }
finalRaw:int { 36000 }
finalYear:int { 2009 }
- links:intvector { 1, 348, 352, 361, 366 }
- } //Z#366
- /* Australia/Tasmania */ :int { 356 } //Z#367
- /* Australia/Victoria */ :int { 360 } //Z#368
- /* Australia/West */ :int { 363 } //Z#369
- /* Australia/Yancowinna */ :int { 351 } //Z#370
- /* BET */ :int { 202 } //Z#371
- /* BST */ :int { 263 } //Z#372
- /* Brazil/Acre */ :int { 196 } //Z#373
- /* Brazil/DeNoronha */ :int { 176 } //Z#374
- /* Brazil/East */ :int { 202 } //Z#375
- /* Brazil/West */ :int { 156 } //Z#376
- /* CAT */ :int { 43 } //Z#377
+ links:intvector { 1, 349, 353, 362, 367 }
+ } //Z#367
+ /* Australia/Tasmania */ :int { 357 } //Z#368
+ /* Australia/Victoria */ :int { 361 } //Z#369
+ /* Australia/West */ :int { 364 } //Z#370
+ /* Australia/Yancowinna */ :int { 352 } //Z#371
+ /* BET */ :int { 202 } //Z#372
+ /* BST */ :int { 263 } //Z#373
+ /* Brazil/Acre */ :int { 196 } //Z#374
+ /* Brazil/DeNoronha */ :int { 176 } //Z#375
+ /* Brazil/East */ :int { 202 } //Z#376
+ /* Brazil/West */ :int { 156 } //Z#377
+ /* CAT */ :int { 43 } //Z#378
/* CET */ :table {
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 3600, 0, 3600, 3600 }
@@ -1900,9 +1898,9 @@ zoneinfo64:table(nofallback) {
finalRule { "C-Eur" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#378
- /* CNT */ :int { 207 } //Z#379
- /* CST */ :int { 98 } //Z#380
+ } //Z#379
+ /* CNT */ :int { 207 } //Z#380
+ /* CST */ :int { 98 } //Z#381
/* CST6CDT */ :table {
trans:intvector { -1633276800, -1615136400, -1601827200, -1583686800, -880214400, -765392400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 152089200, 162374400, 183538800, 199267200, 215593200, 230716800, 247042800, 262771200, 278492400, 294220800, 309942000, 325670400, 341391600, 357120000, 372841200, 388569600, 404895600, 420019200, 436345200, 452073600, 467794800, 483523200, 499244400, 514972800, 530694000, 544608000, 562143600, 576057600, 594198000, 607507200, 625647600, 638956800, 657097200, 671011200, 688546800, 702460800, 719996400, 733910400, 752050800, 765360000, 783500400, 796809600, 814950000, 828864000, 846399600, 860313600, 877849200, 891763200, 909298800, 923212800, 941353200, 954662400, 972802800, 986112000, 1004252400, 1018166400, 1035702000, 1049616000, 1067151600, 1081065600, 1099206000, 1112515200, 1130655600, 1143964800, 1162105200, 1173600000, 1194159600 }
typeOffsets:intvector { -21600, 0, -21600, 3600 }
@@ -1910,22 +1908,22 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -21600 }
finalYear:int { 2008 }
- } //Z#381
- /* CTT */ :int { 313 } //Z#382
- /* Canada/Atlantic */ :int { 128 } //Z#383
- /* Canada/Central */ :int { 222 } //Z#384
- /* Canada/East-Saskatchewan */ :int { 194 } //Z#385
- /* Canada/Eastern */ :int { 217 } //Z#386
- /* Canada/Mountain */ :int { 112 } //Z#387
- /* Canada/Newfoundland */ :int { 207 } //Z#388
- /* Canada/Pacific */ :int { 219 } //Z#389
- /* Canada/Saskatchewan */ :int { 194 } //Z#390
- /* Canada/Yukon */ :int { 221 } //Z#391
- /* Chile/Continental */ :int { 200 } //Z#392
- /* Chile/EasterIsland */ :int { 555 } //Z#393
- /* Cuba */ :int { 129 } //Z#394
- /* EAT */ :int { 48 } //Z#395
- /* ECT */ :int { 474 } //Z#396
+ } //Z#382
+ /* CTT */ :int { 314 } //Z#383
+ /* Canada/Atlantic */ :int { 128 } //Z#384
+ /* Canada/Central */ :int { 222 } //Z#385
+ /* Canada/East-Saskatchewan */ :int { 194 } //Z#386
+ /* Canada/Eastern */ :int { 217 } //Z#387
+ /* Canada/Mountain */ :int { 112 } //Z#388
+ /* Canada/Newfoundland */ :int { 207 } //Z#389
+ /* Canada/Pacific */ :int { 219 } //Z#390
+ /* Canada/Saskatchewan */ :int { 194 } //Z#391
+ /* Canada/Yukon */ :int { 221 } //Z#392
+ /* Chile/Continental */ :int { 200 } //Z#393
+ /* Chile/EasterIsland */ :int { 556 } //Z#394
+ /* Cuba */ :int { 129 } //Z#395
+ /* EAT */ :int { 48 } //Z#396
+ /* ECT */ :int { 475 } //Z#397
/* EET */ :table {
trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 7200, 0, 7200, 3600 }
@@ -1933,10 +1931,10 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#397
+ } //Z#398
/* EST */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#398
+ } //Z#399
/* EST5EDT */ :table {
trans:intvector { -1633280400, -1615140000, -1601830800, -1583690400, -880218000, -765396000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
typeOffsets:intvector { -18000, 0, -18000, 3600 }
@@ -1944,108 +1942,105 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
- } //Z#399
- /* Egypt */ :int { 18 } //Z#400
- /* Eire */ :int { 452 } //Z#401
+ } //Z#400
+ /* Egypt */ :int { 18 } //Z#401
+ /* Eire */ :int { 453 } //Z#402
/* Etc/GMT */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 402, 403, 416, 431, 432, 504, 505, 506, 507, 508 }
- } //Z#402
- /* Etc/GMT+0 */ :int { 402 } //Z#403
+ links:intvector { 403, 404, 417, 432, 433, 505, 506, 507, 508, 509 }
+ } //Z#403
+ /* Etc/GMT+0 */ :int { 403 } //Z#404
/* Etc/GMT+1 */ :table {
typeOffsets:intvector { -3600, 0 }
- } //Z#404
+ } //Z#405
/* Etc/GMT+10 */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#405
+ } //Z#406
/* Etc/GMT+11 */ :table {
typeOffsets:intvector { -39600, 0 }
- } //Z#406
+ } //Z#407
/* Etc/GMT+12 */ :table {
typeOffsets:intvector { -43200, 0 }
- } //Z#407
+ } //Z#408
/* Etc/GMT+2 */ :table {
typeOffsets:intvector { -7200, 0 }
- } //Z#408
+ } //Z#409
/* Etc/GMT+3 */ :table {
typeOffsets:intvector { -10800, 0 }
- } //Z#409
+ } //Z#410
/* Etc/GMT+4 */ :table {
typeOffsets:intvector { -14400, 0 }
- } //Z#410
+ } //Z#411
/* Etc/GMT+5 */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#411
+ } //Z#412
/* Etc/GMT+6 */ :table {
typeOffsets:intvector { -21600, 0 }
- } //Z#412
+ } //Z#413
/* Etc/GMT+7 */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#413
+ } //Z#414
/* Etc/GMT+8 */ :table {
typeOffsets:intvector { -28800, 0 }
- } //Z#414
+ } //Z#415
/* Etc/GMT+9 */ :table {
typeOffsets:intvector { -32400, 0 }
- } //Z#415
- /* Etc/GMT-0 */ :int { 402 } //Z#416
+ } //Z#416
+ /* Etc/GMT-0 */ :int { 403 } //Z#417
/* Etc/GMT-1 */ :table {
typeOffsets:intvector { 3600, 0 }
- } //Z#417
+ } //Z#418
/* Etc/GMT-10 */ :table {
typeOffsets:intvector { 36000, 0 }
- } //Z#418
+ } //Z#419
/* Etc/GMT-11 */ :table {
typeOffsets:intvector { 39600, 0 }
- } //Z#419
+ } //Z#420
/* Etc/GMT-12 */ :table {
typeOffsets:intvector { 43200, 0 }
- } //Z#420
+ } //Z#421
/* Etc/GMT-13 */ :table {
typeOffsets:intvector { 46800, 0 }
- } //Z#421
+ } //Z#422
/* Etc/GMT-14 */ :table {
typeOffsets:intvector { 50400, 0 }
- } //Z#422
+ } //Z#423
/* Etc/GMT-2 */ :table {
typeOffsets:intvector { 7200, 0 }
- } //Z#423
+ } //Z#424
/* Etc/GMT-3 */ :table {
typeOffsets:intvector { 10800, 0 }
- } //Z#424
+ } //Z#425
/* Etc/GMT-4 */ :table {
typeOffsets:intvector { 14400, 0 }
- } //Z#425
+ } //Z#426
/* Etc/GMT-5 */ :table {
typeOffsets:intvector { 18000, 0 }
- } //Z#426
+ } //Z#427
/* Etc/GMT-6 */ :table {
typeOffsets:intvector { 21600, 0 }
- } //Z#427
+ } //Z#428
/* Etc/GMT-7 */ :table {
typeOffsets:intvector { 25200, 0 }
- } //Z#428
+ } //Z#429
/* Etc/GMT-8 */ :table {
typeOffsets:intvector { 28800, 0 }
- } //Z#429
+ } //Z#430
/* Etc/GMT-9 */ :table {
typeOffsets:intvector { 32400, 0 }
- } //Z#430
- /* Etc/GMT0 */ :int { 402 } //Z#431
- /* Etc/Greenwich */ :int { 402 } //Z#432
- /* Etc/UCT */ :table {
- typeOffsets:intvector { 0, 0 }
- links:intvector { 433, 613 }
- } //Z#433
+ } //Z#431
+ /* Etc/GMT0 */ :int { 403 } //Z#432
+ /* Etc/Greenwich */ :int { 403 } //Z#433
+ /* Etc/UCT */ :int { 435 } //Z#434
/* Etc/UTC */ :table {
typeOffsets:intvector { 0, 0 }
- links:intvector { 434, 435, 437, 627, 628, 632 }
- } //Z#434
- /* Etc/Universal */ :int { 434 } //Z#435
+ links:intvector { 434, 435, 436, 438, 614, 628, 629, 633 }
+ } //Z#435
+ /* Etc/Universal */ :int { 435 } //Z#436
/* Etc/Unknown */ :table {
typeOffsets:intvector { 0, 0 }
- } //Z#436
- /* Etc/Zulu */ :int { 434 } //Z#437
+ } //Z#437
+ /* Etc/Zulu */ :int { 435 } //Z#438
/* Europe/Amsterdam */ :table {
trans:intvector { -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1124489972, -1111961972, -1092953972, -1080512372, -1061331572, -1049062772, -1029190772, -1025745572, -1017613200, -998259600, -986163600, -966723600, -954109200, -935022000, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 }
@@ -2053,7 +2048,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#438
+ } //Z#439
/* Europe/Andorra */ :table {
transPre32:intvector { -1, 2117514132 }
trans:intvector { -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2062,12 +2057,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#439
+ } //Z#440
/* Europe/Astrakhan */ :table {
trans:intvector { -1441249932, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 }
typeOffsets:intvector { 11532, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "01030403040304030403040304030403040302010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#440
+ } //Z#441
/* Europe/Athens */ :table {
trans:intvector { -1686101632, -1182996000, -1178161200, -906861600, -904878000, -857257200, -844477200, -828237600, -812422800, -552362400, -541652400, 166485600, 186184800, 198028800, 213753600, 228873600, 244080000, 260323200, 275446800, 291798000, 307407600, 323388000, 338936400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5692, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 }
@@ -2075,8 +2070,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#441
- /* Europe/Belfast */ :int { 464 } //Z#442
+ } //Z#442
+ /* Europe/Belfast */ :int { 465 } //Z#443
/* Europe/Belgrade */ :table {
transPre32:intvector { -1, 1581051976 }
trans:intvector { -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2085,8 +2080,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 443, 463, 475, 481, 484, 498 }
- } //Z#443
+ links:intvector { 444, 464, 476, 482, 485, 499 }
+ } //Z#444
/* Europe/Berlin */ :table {
transPre32:intvector { -1, 1872912888 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -776563200, -765936000, -761180400, -748479600, -733273200, -717631200, -714610800, -710380800, -701910000, -684975600, -670460400, -654130800, -639010800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2095,8 +2090,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#444
- /* Europe/Bratislava */ :int { 476 } //Z#445
+ } //Z#445
+ /* Europe/Bratislava */ :int { 477 } //Z#446
/* Europe/Brussels */ :table {
transPre32:intvector { -1, 1844014246 }
trans:intvector { -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -934668000, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2105,7 +2100,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#446
+ } //Z#447
/* Europe/Bucharest */ :table {
trans:intvector { -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686095200, 701820000, 717544800, 733269600, 748994400, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
typeOffsets:intvector { 6264, 0, 7200, 0, 7200, 3600 }
@@ -2113,7 +2108,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- } //Z#447
+ } //Z#448
/* Europe/Budapest */ :table {
transPre32:intvector { -1, 1794028316 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1633212000, -1618700400, -1600466400, -1581202800, -906771600, -857257200, -844556400, -828226800, -812502000, -796777200, -778471200, -762660000, -749689200, -733359600, -717634800, -701910000, -686185200, -670460400, -654130800, -639010800, -621990000, -605660400, -492656400, -481168800, -461120400, -449632800, -428547600, -418269600, -397094400, -386809200, 323827200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2122,8 +2117,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#448
- /* Europe/Busingen */ :int { 500 } //Z#449
+ } //Z#449
+ /* Europe/Busingen */ :int { 501 } //Z#450
/* Europe/Chisinau */ :table {
transPre32:intvector { -1, 1454819576 }
trans:intvector { -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 641944800, 654652800, 670377600, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859680000, 877824000 }
@@ -2132,8 +2127,8 @@ zoneinfo64:table(nofallback) {
finalRule { "Moldova" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- links:intvector { 450, 489 }
- } //Z#450
+ links:intvector { 451, 490 }
+ } //Z#451
/* Europe/Copenhagen */ :table {
transPre32:intvector { -1, 1896673076 }
trans:intvector { -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2142,7 +2137,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#451
+ } //Z#452
/* Europe/Dublin */ :table {
transPre32:intvector { -1, 1473317596 }
trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733356000, -719445600, -699487200, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
@@ -2151,8 +2146,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 401, 452 }
- } //Z#452
+ links:intvector { 402, 453 }
+ } //Z#453
/* Europe/Gibraltar */ :table {
transPre32:intvector { -1, 1473317380 }
trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2161,8 +2156,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#453
- /* Europe/Guernsey */ :int { 464 } //Z#454
+ } //Z#454
+ /* Europe/Guernsey */ :int { 465 } //Z#455
/* Europe/Helsinki */ :table {
trans:intvector { -1535938789, -875671200, -859773600, 354672000, 370396800, 386121600, 401846400, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5989, 0, 7200, 0, 7200, 3600 }
@@ -2170,23 +2165,23 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- links:intvector { 455, 468 }
- } //Z#455
- /* Europe/Isle_of_Man */ :int { 464 } //Z#456
+ links:intvector { 456, 469 }
+ } //Z#456
+ /* Europe/Isle_of_Man */ :int { 465 } //Z#457
/* Europe/Istanbul */ :table {
transPre32:intvector { -1, 1454819544 }
trans:intvector { -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931140000, -922762800, -917834400, -892436400, -875844000, -857358000, -781063200, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -621828000, -606970800, -590032800, -575434800, -235620000, -228279600, -177732000, -165726000, 10533600, 23835600, 41983200, 55285200, 74037600, 87339600, 107910000, 121219200, 133920000, 152676000, 165362400, 183502800, 202428000, 215557200, 228866400, 245797200, 260316000, 277246800, 308779200, 323827200, 340228800, 354672000, 371678400, 386121600, 403128000, 428446800, 433886400, 482792400, 496702800, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686098800, 701823600, 717548400, 733273200, 748998000, 764118000, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301274000, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396227600, 1414285200, 1427590800, 1446944400, 1459040400, 1473195600 }
typeOffsets:intvector { 6952, 0, 7016, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030504050405040504050403020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" }
- links:intvector { 275, 457, 612 }
- } //Z#457
- /* Europe/Jersey */ :int { 464 } //Z#458
+ links:intvector { 275, 458, 613 }
+ } //Z#458
+ /* Europe/Jersey */ :int { 465 } //Z#459
/* Europe/Kaliningrad */ :table {
transPre32:intvector { -1, 1872911176 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -788922000, -778730400, -762663600, -757389600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000, 1414278000 }
typeOffsets:intvector { 4920, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "01020102010201020102010201030403050605060506050605060506050605060504030403040304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
- } //Z#459
+ } //Z#460
/* Europe/Kiev */ :table {
trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2194,12 +2189,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#460
+ } //Z#461
/* Europe/Kirov */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 11928, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "010304030403040304030403040304030403020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" }
- } //Z#461
+ } //Z#462
/* Europe/Lisbon */ :table {
trans:intvector { -1830384000, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942022800, -922669200, -906944400, -891133200, -877309200, -873684000, -864007200, -857955600, -845859600, -842839200, -831348000, -825901200, -814410000, -810784800, -799898400, -794451600, -782960400, -779335200, -768448800, -763002000, -749091600, -733366800, -717631200, -701906400, -686181600, -670456800, -654732000, -639007200, -591832800, -575503200, -559778400, -544053600, -528328800, -512604000, -496879200, -481154400, -465429600, -449704800, -433980000, -417650400, -401925600, -386200800, -370476000, -354751200, -339026400, -323301600, -307576800, -291852000, -276127200, -260402400, -244677600, -228348000, -212623200, -196898400, -181173600, -165448800, -149724000, -133999200, -118274400, 212544000, 228268800, 243993600, 260323200, 276048000, 291772800, 307501200, 323222400, 338950800, 354675600, 370400400, 386125200, 401850000, 417578400, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { -2205, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
@@ -2207,9 +2202,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 462, 594 }
- } //Z#462
- /* Europe/Ljubljana */ :int { 443 } //Z#463
+ links:intvector { 463, 595 }
+ } //Z#463
+ /* Europe/Ljubljana */ :int { 444 } //Z#464
/* Europe/London */ :table {
transPre32:intvector { -1, 442304971 }
trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -904518000, -896050800, -875487600, -864601200, -844038000, -832546800, -812588400, -798073200, -781052400, -772066800, -764805600, -748476000, -733356000, -719445600, -717030000, -706748400, -699487200, -687996000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
@@ -2218,8 +2213,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- links:intvector { 442, 454, 456, 458, 464, 502, 503 }
- } //Z#464
+ links:intvector { 443, 455, 457, 459, 465, 503, 504 }
+ } //Z#465
/* Europe/Luxembourg */ :table {
trans:intvector { -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1160344800, -1143410400, -1127685600, -1111960800, -1096840800, -1080511200, -1063576800, -1049061600, -1033336800, -1017612000, -1002492000, -986162400, -969228000, -950479200, -942012000, -935186400, -857257200, -844556400, -828226800, -812502000, -797986800, -781052400, -766623600, -745455600, -733273200, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 1476, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 }
@@ -2227,7 +2222,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#465
+ } //Z#466
/* Europe/Madrid */ :table {
transPre32:intvector { -1, 2117514496 }
trans:intvector { -1631926800, -1616889600, -1601168400, -1585353600, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -1284339600, -1269820800, -1026954000, -1017619200, -1001898000, -999482400, -986090400, -954115200, -940208400, -873079200, -862621200, -842839200, -828320400, -811389600, -796870800, -779940000, -765421200, -748490400, -733971600, -652327200, -639018000, 135122400, 150246000, 166572000, 181695600, 196812000, 212540400, 228866400, 243990000, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2236,7 +2231,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#466
+ } //Z#467
/* Europe/Malta */ :table {
transPre32:intvector { -1, 1891488612 }
trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812588400, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 102380400, 118105200, 135730800, 148518000, 167187600, 180489600, 198637200, 211939200, 230086800, 243388800, 261536400, 274838400, 292986000, 306288000, 323312400, 338342400, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2245,14 +2240,14 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#467
- /* Europe/Mariehamn */ :int { 455 } //Z#468
+ } //Z#468
+ /* Europe/Mariehamn */ :int { 456 } //Z#469
/* Europe/Minsk */ :table {
transPre32:intvector { -1, 1454819880 }
trans:intvector { -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600, 922579200, 941328000, 954028800, 972777600, 985478400, 1004227200, 1017532800, 1035676800, 1048982400, 1067126400, 1080432000, 1099180800, 1111881600, 1130630400, 1143331200, 1162080000, 1174780800, 1193529600, 1206835200, 1224979200, 1238284800, 1256428800, 1269734400, 1288483200, 1301184000 }
typeOffsets:intvector { 6616, 0, 3600, 0, 3600, 3600, 6600, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
typeMap:bin { "0304060201020102060706070607060706070607060706070607060504050405040504050405040504050405040504050405040504050405040504050405040504050406" }
- } //Z#469
+ } //Z#470
/* Europe/Monaco */ :table {
transPre32:intvector { -1, 1808287124 }
trans:intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -904438800, -891136800, -877827600, -857257200, -844556400, -828226800, -812502000, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2261,14 +2256,14 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#470
+ } //Z#471
/* Europe/Moscow */ :table {
trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593820800, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400, 0 }
typeMap:bin { "0304030504050706070807060106070607060706070607060706070607060706070602010607060706070607060706070607060706070607060706070607060706070607060706070607060906" }
- links:intvector { 471, 630 }
- } //Z#471
- /* Europe/Nicosia */ :int { 297 } //Z#472
+ links:intvector { 472, 631 }
+ } //Z#472
+ /* Europe/Nicosia */ :int { 297 } //Z#473
/* Europe/Oslo */ :table {
transPre32:intvector { -1, 1928209516 }
trans:intvector { -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2277,8 +2272,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 237, 342, 473 }
- } //Z#473
+ links:intvector { 237, 343, 474 }
+ } //Z#474
/* Europe/Paris */ :table {
trans:intvector { -1855958901, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1143421200, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -986173200, -969238800, -950490000, -942012000, -932436000, -857257200, -844556400, -828226800, -812502000, -800071200, -796266000, -781052400, -766623600, 196819200, 212540400, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 561, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 }
@@ -2286,9 +2281,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 396, 474 }
- } //Z#474
- /* Europe/Podgorica */ :int { 443 } //Z#475
+ links:intvector { 397, 475 }
+ } //Z#475
+ /* Europe/Podgorica */ :int { 444 } //Z#476
/* Europe/Prague */ :table {
transPre32:intvector { -1, 1825565432 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -746578800, -733359600, -728517600, -721260000, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2297,8 +2292,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 445, 476 }
- } //Z#476
+ links:intvector { 446, 477 }
+ } //Z#477
/* Europe/Riga */ :table {
trans:intvector { -1632008194, -1618702594, -1601681794, -1597275394, -1377308194, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 843955200, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 985482000, 1004230800 }
typeOffsets:intvector { 5794, 0, 3600, 0, 3600, 3600, 5794, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2306,7 +2301,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2002 }
- } //Z#477
+ } //Z#478
/* Europe/Rome */ :table {
transPre32:intvector { -1, 1891402096 }
trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 107910000, 118191600, 138754800, 149641200, 170809200, 181090800, 202258800, 212540400, 233103600, 243990000, 265158000, 276044400, 296607600, 307494000, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2315,27 +2310,27 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 478, 480, 493 }
- } //Z#478
+ links:intvector { 479, 481, 494 }
+ } //Z#479
/* Europe/Samara */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701820000, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017525600, 1035669600, 1048975200, 1067119200, 1080424800, 1099173600, 1111874400, 1130623200, 1143324000, 1162072800, 1174773600, 1193522400, 1206828000, 1224972000, 1238277600, 1256421600, 1269727200, 1288479600, 1301180400 }
typeOffsets:intvector { 12020, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "02040504050405040504050405040504050403020302010204050405040504050405040504050405040504050405040504050405040504050405040504030204" }
- } //Z#479
- /* Europe/San_Marino */ :int { 478 } //Z#480
- /* Europe/Sarajevo */ :int { 443 } //Z#481
+ } //Z#480
+ /* Europe/San_Marino */ :int { 479 } //Z#481
+ /* Europe/Sarajevo */ :int { 444 } //Z#482
/* Europe/Saratov */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1480806000 }
typeOffsets:intvector { 11058, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
- } //Z#482
+ } //Z#483
/* Europe/Simferopol */ :table {
transPre32:intvector { -1, 1454818312 }
trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701820000, 717541200, 733269600, 748990800, 764719200, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396137600, 1414274400 }
typeOffsets:intvector { 8184, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600, 14400, 0 }
typeMap:bin { "050306020102010206070607060706070607060706070607060706030403040304070607060706040304030403040304030403040304030403040304030403040304030403040304030806" }
- } //Z#483
- /* Europe/Skopje */ :int { 443 } //Z#484
+ } //Z#484
+ /* Europe/Skopje */ :int { 444 } //Z#485
/* Europe/Sofia */ :table {
transPre32:intvector { -1, 1454820900, -1, 1925440280 }
trans:intvector { -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 859683600, 877827600 }
@@ -2344,7 +2339,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1998 }
- } //Z#485
+ } //Z#486
/* Europe/Stockholm */ :table {
transPre32:intvector { -1, 1423286164, -1, 2085974882 }
trans:intvector { -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2353,7 +2348,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#486
+ } //Z#487
/* Europe/Tallinn */ :table {
trans:intvector { -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909277200, 922582800, 941331600, 1017536400, 1035680400 }
typeOffsets:intvector { 5940, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 }
@@ -2361,7 +2356,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2003 }
- } //Z#487
+ } //Z#488
/* Europe/Tirane */ :table {
trans:intvector { -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 4760, 0, 3600, 0, 3600, 3600 }
@@ -2369,13 +2364,13 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#488
- /* Europe/Tiraspol */ :int { 450 } //Z#489
+ } //Z#489
+ /* Europe/Tiraspol */ :int { 451 } //Z#490
/* Europe/Ulyanovsk */ :table {
trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1459033200 }
typeOffsets:intvector { 11616, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
typeMap:bin { "030506050605060506050605060506050605040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050305" }
- } //Z#490
+ } //Z#491
/* Europe/Uzhgorod */ :table {
transPre32:intvector { -1, 1794027544 }
trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
@@ -2384,9 +2379,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#491
- /* Europe/Vaduz */ :int { 500 } //Z#492
- /* Europe/Vatican */ :int { 478 } //Z#493
+ } //Z#492
+ /* Europe/Vaduz */ :int { 501 } //Z#493
+ /* Europe/Vatican */ :int { 479 } //Z#494
/* Europe/Vienna */ :table {
transPre32:intvector { -1, 1872912175 }
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -748479600, -733359600, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2395,7 +2390,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#494
+ } //Z#495
/* Europe/Vilnius */ :table {
transPre32:intvector { -1, 1454820420 }
trans:intvector { -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891133200, 909277200, 922582800, 941331600, 1048986000, 1067130000 }
@@ -2404,12 +2399,12 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 2004 }
- } //Z#495
+ } //Z#496
/* Europe/Volgograd */ :table {
- trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400 }
+ trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004223600, 1017529200, 1035673200, 1048978800, 1067122800, 1080428400, 1099177200, 1111878000, 1130626800, 1143327600, 1162076400, 1174777200, 1193526000, 1206831600, 1224975600, 1238281200, 1256425200, 1269730800, 1288479600, 1301180400, 1414274400, 1540681200 }
typeOffsets:intvector { 10660, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 }
- typeMap:bin { "010304030403040304030403040304030201020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" }
- } //Z#496
+ typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" }
+ } //Z#497
/* Europe/Warsaw */ :table {
trans:intvector { -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208396800, -197510400, -176342400, -166060800, 228873600, 243993600, 260323200, 276048000, 291772800, 307497600, 323827200, 338947200, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 5040, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 }
@@ -2417,9 +2412,9 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 497, 593 }
- } //Z#497
- /* Europe/Zagreb */ :int { 443 } //Z#498
+ links:intvector { 498, 594 }
+ } //Z#498
+ /* Europe/Zagreb */ :int { 444 } //Z#499
/* Europe/Zaporozhye */ :table {
transPre32:intvector { -1, 1454818056 }
trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796179600, 811904400, 828234000, 846378000 }
@@ -2428,7 +2423,7 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 7200 }
finalYear:int { 1997 }
- } //Z#499
+ } //Z#500
/* Europe/Zurich */ :table {
transPre32:intvector { -1, 619768448, -1, 1909720710 }
trans:intvector { -904435200, -891129600, -872985600, -859680000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
@@ -2437,75 +2432,75 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- links:intvector { 449, 492, 500 }
- } //Z#500
+ links:intvector { 450, 493, 501 }
+ } //Z#501
/* Factory */ :table {
typeOffsets:intvector { 0, 0 }
- } //Z#501
- /* GB */ :int { 464 } //Z#502
- /* GB-Eire */ :int { 464 } //Z#503
- /* GMT */ :int { 402 } //Z#504
- /* GMT+0 */ :int { 402 } //Z#505
- /* GMT-0 */ :int { 402 } //Z#506
- /* GMT0 */ :int { 402 } //Z#507
- /* Greenwich */ :int { 402 } //Z#508
+ } //Z#502
+ /* GB */ :int { 465 } //Z#503
+ /* GB-Eire */ :int { 465 } //Z#504
+ /* GMT */ :int { 403 } //Z#505
+ /* GMT+0 */ :int { 403 } //Z#506
+ /* GMT-0 */ :int { 403 } //Z#507
+ /* GMT0 */ :int { 403 } //Z#508
+ /* Greenwich */ :int { 403 } //Z#509
/* HST */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#509
- /* Hongkong */ :int { 272 } //Z#510
- /* IET */ :int { 131 } //Z#511
- /* IST */ :int { 286 } //Z#512
- /* Iceland */ :int { 344 } //Z#513
- /* Indian/Antananarivo */ :int { 48 } //Z#514
+ } //Z#510
+ /* Hongkong */ :int { 272 } //Z#511
+ /* IET */ :int { 131 } //Z#512
+ /* IST */ :int { 286 } //Z#513
+ /* Iceland */ :int { 345 } //Z#514
+ /* Indian/Antananarivo */ :int { 48 } //Z#515
/* Indian/Chagos */ :table {
trans:intvector { -1988167780, 820436400 }
typeOffsets:intvector { 17380, 0, 18000, 0, 21600, 0 }
typeMap:bin { "0102" }
- } //Z#515
+ } //Z#516
/* Indian/Christmas */ :table {
transPre32:intvector { -1, 1930865124 }
typeOffsets:intvector { 25372, 0, 25200, 0 }
typeMap:bin { "01" }
- } //Z#516
+ } //Z#517
/* Indian/Cocos */ :table {
transPre32:intvector { -1, 2085955236 }
typeOffsets:intvector { 23260, 0, 23400, 0 }
typeMap:bin { "01" }
- } //Z#517
- /* Indian/Comoro */ :int { 48 } //Z#518
+ } //Z#518
+ /* Indian/Comoro */ :int { 48 } //Z#519
/* Indian/Kerguelen */ :table {
trans:intvector { -631152000 }
typeOffsets:intvector { 0, 0, 18000, 0 }
typeMap:bin { "01" }
- } //Z#519
+ } //Z#520
/* Indian/Mahe */ :table {
trans:intvector { -2006653308 }
typeOffsets:intvector { 13308, 0, 14400, 0 }
typeMap:bin { "01" }
- } //Z#520
+ } //Z#521
/* Indian/Maldives */ :table {
trans:intvector { -315636840 }
typeOffsets:intvector { 17640, 0, 18000, 0 }
typeMap:bin { "01" }
- } //Z#521
+ } //Z#522
/* Indian/Mauritius */ :table {
trans:intvector { -1988164200, 403041600, 417034800, 1224972000, 1238274000 }
typeOffsets:intvector { 13800, 0, 14400, 0, 14400, 3600 }
typeMap:bin { "0102010201" }
- } //Z#522
- /* Indian/Mayotte */ :int { 48 } //Z#523
+ } //Z#523
+ /* Indian/Mayotte */ :int { 48 } //Z#524
/* Indian/Reunion */ :table {
trans:intvector { -1848886912 }
typeOffsets:intvector { 13312, 0, 14400, 0 }
typeMap:bin { "01" }
- } //Z#524
- /* Iran */ :int { 319 } //Z#525
- /* Israel */ :int { 278 } //Z#526
- /* JST */ :int { 323 } //Z#527
- /* Jamaica */ :int { 142 } //Z#528
- /* Japan */ :int { 323 } //Z#529
- /* Kwajalein */ :int { 569 } //Z#530
- /* Libya */ :int { 56 } //Z#531
+ } //Z#525
+ /* Iran */ :int { 320 } //Z#526
+ /* Israel */ :int { 278 } //Z#527
+ /* JST */ :int { 324 } //Z#528
+ /* Jamaica */ :int { 142 } //Z#529
+ /* Japan */ :int { 324 } //Z#530
+ /* Kwajalein */ :int { 570 } //Z#531
+ /* Libya */ :int { 56 } //Z#532
/* MET */ :table {
trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 3600, 0, 3600, 3600 }
@@ -2513,11 +2508,11 @@ zoneinfo64:table(nofallback) {
finalRule { "C-Eur" }
finalRaw:int { 3600 }
finalYear:int { 1997 }
- } //Z#532
- /* MIT */ :int { 550 } //Z#533
+ } //Z#533
+ /* MIT */ :int { 551 } //Z#534
/* MST */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#534
+ } //Z#535
/* MST7MDT */ :table {
trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526800, 499248000, 514976400, 530697600, 544611600, 562147200, 576061200, 594201600, 607510800, 625651200, 638960400, 657100800, 671014800, 688550400, 702464400, 720000000, 733914000, 752054400, 765363600, 783504000, 796813200, 814953600, 828867600, 846403200, 860317200, 877852800, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 986115600, 1004256000, 1018170000, 1035705600, 1049619600, 1067155200, 1081069200, 1099209600, 1112518800, 1130659200, 1143968400, 1162108800, 1173603600, 1194163200 }
typeOffsets:intvector { -25200, 0, -25200, 3600 }
@@ -2525,20 +2520,20 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -25200 }
finalYear:int { 2008 }
- } //Z#535
- /* Mexico/BajaNorte */ :int { 216 } //Z#536
- /* Mexico/BajaSur */ :int { 160 } //Z#537
- /* Mexico/General */ :int { 165 } //Z#538
- /* NET */ :int { 335 } //Z#539
- /* NST */ :int { 551 } //Z#540
- /* NZ */ :int { 551 } //Z#541
- /* NZ-CHAT */ :int { 553 } //Z#542
- /* Navajo */ :int { 109 } //Z#543
- /* PLT */ :int { 281 } //Z#544
- /* PNT */ :int { 184 } //Z#545
- /* PRC */ :int { 313 } //Z#546
- /* PRT */ :int { 189 } //Z#547
- /* PST */ :int { 151 } //Z#548
+ } //Z#536
+ /* Mexico/BajaNorte */ :int { 216 } //Z#537
+ /* Mexico/BajaSur */ :int { 160 } //Z#538
+ /* Mexico/General */ :int { 165 } //Z#539
+ /* NET */ :int { 336 } //Z#540
+ /* NST */ :int { 552 } //Z#541
+ /* NZ */ :int { 552 } //Z#542
+ /* NZ-CHAT */ :int { 554 } //Z#543
+ /* Navajo */ :int { 109 } //Z#544
+ /* PLT */ :int { 281 } //Z#545
+ /* PNT */ :int { 184 } //Z#546
+ /* PRC */ :int { 314 } //Z#547
+ /* PRT */ :int { 189 } //Z#548
+ /* PST */ :int { 151 } //Z#549
/* PST8PDT */ :table {
trans:intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530400, 499251600, 514980000, 530701200, 544615200, 562150800, 576064800, 594205200, 607514400, 625654800, 638964000, 657104400, 671018400, 688554000, 702468000, 720003600, 733917600, 752058000, 765367200, 783507600, 796816800, 814957200, 828871200, 846406800, 860320800, 877856400, 891770400, 909306000, 923220000, 941360400, 954669600, 972810000, 986119200, 1004259600, 1018173600, 1035709200, 1049623200, 1067158800, 1081072800, 1099213200, 1112522400, 1130662800, 1143972000, 1162112400, 1173607200, 1194166800 }
typeOffsets:intvector { -28800, 0, -28800, 3600 }
@@ -2546,7 +2541,7 @@ zoneinfo64:table(nofallback) {
finalRule { "US" }
finalRaw:int { -28800 }
finalYear:int { 2008 }
- } //Z#549
+ } //Z#550
/* Pacific/Apia */ :table {
transPre32:intvector { -1, 1849542912 }
trans:intvector { -1861878784, -631110600, 1285498800, 1301752800, 1316872800, 1325239200, 1333202400, 1348927200 }
@@ -2555,8 +2550,8 @@ zoneinfo64:table(nofallback) {
finalRule { "WS" }
finalRaw:int { 46800 }
finalYear:int { 2013 }
- links:intvector { 533, 550 }
- } //Z#550
+ links:intvector { 534, 551 }
+ } //Z#551
/* Pacific/Auckland */ :table {
transPre32:intvector { -1, 1102531752 }
trans:intvector { -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
@@ -2565,14 +2560,14 @@ zoneinfo64:table(nofallback) {
finalRule { "NZ" }
finalRaw:int { 43200 }
finalYear:int { 2009 }
- links:intvector { 230, 233, 540, 541, 551 }
- } //Z#551
+ links:intvector { 230, 233, 541, 542, 552 }
+ } //Z#552
/* Pacific/Bougainville */ :table {
transPre32:intvector { -1, 1454789160, -1, 1928176784 }
trans:intvector { -868010400, -768906000, 1419696000 }
typeOffsets:intvector { 37336, 0, 32400, 0, 35312, 0, 36000, 0, 39600, 0 }
typeMap:bin { "0203010304" }
- } //Z#552
+ } //Z#553
/* Pacific/Chatham */ :table {
transPre32:intvector { -1, 1102529668 }
trans:intvector { -757426500, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 795535200, 812469600, 826984800, 844524000, 858434400, 875973600, 889884000, 907423200, 921938400, 938872800, 953388000, 970322400, 984837600, 1002376800, 1016287200, 1033826400, 1047736800, 1065276000, 1079791200, 1096725600, 1111240800, 1128175200, 1142690400, 1159624800, 1174140000, 1191074400, 1207404000, 1222524000 }
@@ -2581,40 +2576,41 @@ zoneinfo64:table(nofallback) {
finalRule { "Chatham" }
finalRaw:int { 45900 }
finalYear:int { 2009 }
- links:intvector { 542, 553 }
- } //Z#553
- /* Pacific/Chuuk */ :table {
- transPre32:intvector { -1, 2117478068 }
- typeOffsets:intvector { 36428, 0, 36000, 0 }
- typeMap:bin { "01" }
- links:intvector { 554, 589, 592 }
+ links:intvector { 543, 554 }
} //Z#554
+ /* Pacific/Chuuk */ :table {
+ transPre32:intvector { -1, 350338868, -1, 2117478068 }
+ trans:intvector { -1743674400, -1606813200, -907408800, -770634000 }
+ typeOffsets:intvector { -49972, 0, 32400, 0, 36000, 0, 36428, 0 }
+ typeMap:bin { "030201020102" }
+ links:intvector { 555, 590, 593 }
+ } //Z#555
/* Pacific/Easter */ :table {
- trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200 }
+ trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 845179200, 859690800, 876628800, 889930800, 906868800, 923194800, 939528000, 952830000, 971582400, 984279600, 1003032000, 1015729200, 1034481600, 1047178800, 1065931200, 1079233200, 1097380800, 1110682800, 1128830400, 1142132400, 1160884800, 1173582000, 1192334400, 1206846000, 1223784000, 1237086000, 1255233600, 1270350000, 1286683200, 1304823600, 1313899200, 1335668400, 1346558400, 1367118000, 1378612800, 1398567600, 1410062400, 1463281200, 1471147200, 1494730800, 1502596800, 1526180400, 1534046400, 1554606000, 1567915200 }
typeOffsets:intvector { -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 }
- typeMap:bin { "010201020102010201020102010201020102010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
+ typeMap:bin { "010201020102010201020102010201020102010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" }
finalRule { "Chile" }
finalRaw:int { -21600 }
- finalYear:int { 2017 }
- links:intvector { 393, 555 }
- } //Z#555
+ finalYear:int { 2020 }
+ links:intvector { 394, 556 }
+ } //Z#556
/* Pacific/Efate */ :table {
trans:intvector { -1829387596, 433256400, 448977600, 467298000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 }
typeOffsets:intvector { 40396, 0, 39600, 0, 39600, 3600 }
typeMap:bin { "010201020102010201020102010201020102010201" }
- } //Z#556
+ } //Z#557
/* Pacific/Enderbury */ :table {
transPre32:intvector { -1, 2117555556 }
trans:intvector { 307627200, 788871600 }
typeOffsets:intvector { -41060, 0, -43200, 0, -39600, 0, 46800, 0 }
typeMap:bin { "010203" }
- } //Z#557
+ } //Z#558
/* Pacific/Fakaofo */ :table {
transPre32:intvector { -1, 2117555592 }
trans:intvector { 1325242800 }
typeOffsets:intvector { -41096, 0, -39600, 0, 46800, 0 }
typeMap:bin { "0102" }
- } //Z#558
+ } //Z#559
/* Pacific/Fiji */ :table {
trans:intvector { -1709985344, 909842400, 920124000, 941896800, 951573600, 1259416800, 1269698400, 1287842400, 1299333600, 1319292000, 1327154400, 1350741600, 1358604000, 1382796000, 1390050000, 1414850400, 1421503200, 1446300000 }
typeOffsets:intvector { 42944, 0, 43200, 0, 43200, 3600 }
@@ -2622,170 +2618,172 @@ zoneinfo64:table(nofallback) {
finalRule { "Fiji" }
finalRaw:int { 43200 }
finalYear:int { 2016 }
- } //Z#559
+ } //Z#560
/* Pacific/Funafuti */ :table {
transPre32:intvector { -1, 2117471484 }
typeOffsets:intvector { 43012, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#560
+ } //Z#561
/* Pacific/Galapagos */ :table {
trans:intvector { -1230746496, 504939600, 722930400, 728888400 }
typeOffsets:intvector { -21504, 0, -21600, 0, -21600, 3600, -18000, 0 }
typeMap:bin { "03010201" }
- } //Z#561
+ } //Z#562
/* Pacific/Gambier */ :table {
trans:intvector { -1806678012 }
typeOffsets:intvector { -32388, 0, -32400, 0 }
typeMap:bin { "01" }
- } //Z#562
+ } //Z#563
/* Pacific/Guadalcanal */ :table {
trans:intvector { -1806748788 }
typeOffsets:intvector { 38388, 0, 39600, 0 }
typeMap:bin { "01" }
- links:intvector { 563, 597 }
- } //Z#563
+ links:intvector { 564, 598 }
+ } //Z#564
/* Pacific/Guam */ :table {
transPre32:intvector { -1, 350340556, -1, 2117479756 }
- typeOffsets:intvector { -51660, 0, 34740, 0, 36000, 0 }
- typeMap:bin { "0102" }
- links:intvector { 564, 584 }
- } //Z#564
+ trans:intvector { -885549600, -802256400, -331891200, -281610000, -73728000, -29415540, -16704000, -10659600, 9907200, 21394800, 41356800, 52844400, 124819200, 130863600, 201888000, 209487660, 230659200, 241542000 }
+ typeOffsets:intvector { -51660, 0, 32400, 0, 34740, 0, 36000, 0, 36000, 3600 }
+ typeMap:bin { "0203010304030403040304030403040304030403" }
+ links:intvector { 565, 585 }
+ } //Z#565
/* Pacific/Honolulu */ :table {
transPre32:intvector { -1, 1960865982 }
trans:intvector { -1157283000, -1155436200, -880198200, -765376200, -712150200 }
typeOffsets:intvector { -37886, 0, -37800, 0, -37800, 3600, -36000, 0 }
typeMap:bin { "010201020103" }
- links:intvector { 565, 566, 620 }
- } //Z#565
- /* Pacific/Johnston */ :int { 565 } //Z#566
+ links:intvector { 566, 567, 621 }
+ } //Z#566
+ /* Pacific/Johnston */ :int { 566 } //Z#567
/* Pacific/Kiritimati */ :table {
transPre32:intvector { -1, 2117552256 }
trans:intvector { 307622400, 788868000 }
typeOffsets:intvector { -37760, 0, -38400, 0, -36000, 0, 50400, 0 }
typeMap:bin { "010203" }
- } //Z#567
- /* Pacific/Kosrae */ :table {
- transPre32:intvector { -1, 2117475380 }
- trans:intvector { -7988400, 915105600 }
- typeOffsets:intvector { 39116, 0, 39600, 0, 43200, 0 }
- typeMap:bin { "010201" }
} //Z#568
+ /* Pacific/Kosrae */ :table {
+ transPre32:intvector { -1, 350336180, -1, 2117475380 }
+ trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -770634000, -7988400, 915105600 }
+ typeOffsets:intvector { -47284, 0, 32400, 0, 36000, 0, 39116, 0, 39600, 0, 43200, 0 }
+ typeMap:bin { "030401040201040504" }
+ } //Z#569
/* Pacific/Kwajalein */ :table {
transPre32:intvector { -1, 2117474336 }
- trans:intvector { -7988400, 745848000 }
- typeOffsets:intvector { 40160, 0, -43200, 0, 39600, 0, 43200, 0 }
- typeMap:bin { "020103" }
- links:intvector { 530, 569 }
- } //Z#569
+ trans:intvector { -1041418800, -907408800, -817462800, -7988400, 745934400 }
+ typeOffsets:intvector { 40160, 0, -43200, 0, 32400, 0, 36000, 0, 39600, 0, 43200, 0 }
+ typeMap:bin { "040302040105" }
+ links:intvector { 531, 570 }
+ } //Z#570
/* Pacific/Majuro */ :table {
transPre32:intvector { -1, 2117473408 }
- trans:intvector { -7988400 }
- typeOffsets:intvector { 41088, 0, 39600, 0, 43200, 0 }
- typeMap:bin { "0102" }
- } //Z#570
+ trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -818067600, -7988400 }
+ typeOffsets:intvector { 41088, 0, 32400, 0, 36000, 0, 39600, 0, 43200, 0 }
+ typeMap:bin { "03010302010304" }
+ } //Z#571
/* Pacific/Marquesas */ :table {
trans:intvector { -1806676920 }
typeOffsets:intvector { -33480, 0, -34200, 0 }
typeMap:bin { "01" }
- } //Z#571
- /* Pacific/Midway */ :int { 577 } //Z#572
+ } //Z#572
+ /* Pacific/Midway */ :int { 578 } //Z#573
/* Pacific/Nauru */ :table {
- trans:intvector { -1545131260, -877347000, -800960400, 294323400 }
+ trans:intvector { -1545131260, -862918200, -767350800, 287418600 }
typeOffsets:intvector { 40060, 0, 32400, 0, 41400, 0, 43200, 0 }
typeMap:bin { "02010203" }
- } //Z#573
+ } //Z#574
/* Pacific/Niue */ :table {
transPre32:intvector { -1, 2117555276 }
trans:intvector { -599575200, 276089400 }
typeOffsets:intvector { -40780, 0, -41400, 0, -40800, 0, -39600, 0 }
typeMap:bin { "020103" }
- } //Z#574
+ } //Z#575
/* Pacific/Norfolk */ :table {
transPre32:intvector { -1, 2117474184 }
trans:intvector { -599656320, 152029800, 162912600, 1443882600 }
typeOffsets:intvector { 40312, 0, 39600, 0, 40320, 0, 41400, 0, 41400, 3600 }
typeMap:bin { "0203040301" }
- } //Z#575
+ } //Z#576
/* Pacific/Noumea */ :table {
trans:intvector { -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 }
typeOffsets:intvector { 39948, 0, 39600, 0, 39600, 3600 }
typeMap:bin { "01020102010201" }
- } //Z#576
+ } //Z#577
/* Pacific/Pago_Pago */ :table {
transPre32:intvector { -1, 1849542664 }
trans:intvector { -1861879032 }
typeOffsets:intvector { 45432, 0, -40968, 0, -39600, 0 }
typeMap:bin { "0102" }
- links:intvector { 572, 577, 585, 626 }
- } //Z#577
- /* Pacific/Palau */ :table {
- transPre32:intvector { -1, 2117482220 }
- typeOffsets:intvector { 32276, 0, 32400, 0 }
- typeMap:bin { "01" }
+ links:intvector { 573, 578, 586, 627 }
} //Z#578
+ /* Pacific/Palau */ :table {
+ transPre32:intvector { -1, 350343020, -1, 2117482220 }
+ typeOffsets:intvector { -54124, 0, 32276, 0, 32400, 0 }
+ typeMap:bin { "0102" }
+ } //Z#579
/* Pacific/Pitcairn */ :table {
transPre32:intvector { -1, 2117545716 }
trans:intvector { 893665800 }
typeOffsets:intvector { -31220, 0, -30600, 0, -28800, 0 }
typeMap:bin { "0102" }
- } //Z#579
- /* Pacific/Pohnpei */ :table {
- transPre32:intvector { -1, 2117476524 }
- typeOffsets:intvector { 37972, 0, 39600, 0 }
- typeMap:bin { "01" }
- links:intvector { 580, 581 }
} //Z#580
- /* Pacific/Ponape */ :int { 580 } //Z#581
+ /* Pacific/Pohnpei */ :table {
+ transPre32:intvector { -1, 350337324, -1, 2117476524 }
+ trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -770634000 }
+ typeOffsets:intvector { -48428, 0, 32400, 0, 36000, 0, 37972, 0, 39600, 0 }
+ typeMap:bin { "03040104020104" }
+ links:intvector { 581, 582 }
+ } //Z#581
+ /* Pacific/Ponape */ :int { 581 } //Z#582
/* Pacific/Port_Moresby */ :table {
transPre32:intvector { -1, 1454791176, -1, 1928176784 }
typeOffsets:intvector { 35320, 0, 35312, 0, 36000, 0 }
typeMap:bin { "0102" }
- } //Z#582
+ } //Z#583
/* Pacific/Rarotonga */ :table {
transPre32:intvector { -1, 2117552840 }
trans:intvector { 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 }
typeOffsets:intvector { -38344, 0, -37800, 0, -36000, 0, -36000, 1800 }
typeMap:bin { "010302030203020302030203020302030203020302030203020302" }
- } //Z#583
- /* Pacific/Saipan */ :int { 564 } //Z#584
- /* Pacific/Samoa */ :int { 577 } //Z#585
+ } //Z#584
+ /* Pacific/Saipan */ :int { 565 } //Z#585
+ /* Pacific/Samoa */ :int { 578 } //Z#586
/* Pacific/Tahiti */ :table {
trans:intvector { -1806674504 }
typeOffsets:intvector { -35896, 0, -36000, 0 }
typeMap:bin { "01" }
- } //Z#586
+ } //Z#587
/* Pacific/Tarawa */ :table {
transPre32:intvector { -1, 2117472972 }
typeOffsets:intvector { 41524, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#587
+ } //Z#588
/* Pacific/Tongatapu */ :table {
transPre32:intvector { -1, 2117470136 }
trans:intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800 }
typeOffsets:intvector { 44360, 0, 44400, 0, 46800, 0, 46800, 3600 }
typeMap:bin { "01020302030203020302" }
- } //Z#588
- /* Pacific/Truk */ :int { 554 } //Z#589
+ } //Z#589
+ /* Pacific/Truk */ :int { 555 } //Z#590
/* Pacific/Wake */ :table {
transPre32:intvector { -1, 2117474508 }
typeOffsets:intvector { 39988, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#590
+ } //Z#591
/* Pacific/Wallis */ :table {
transPre32:intvector { -1, 2117470376 }
typeOffsets:intvector { 44120, 0, 43200, 0 }
typeMap:bin { "01" }
- } //Z#591
- /* Pacific/Yap */ :int { 554 } //Z#592
- /* Poland */ :int { 497 } //Z#593
- /* Portugal */ :int { 462 } //Z#594
- /* ROC */ :int { 316 } //Z#595
- /* ROK */ :int { 312 } //Z#596
- /* SST */ :int { 563 } //Z#597
- /* Singapore */ :int { 314 } //Z#598
+ } //Z#592
+ /* Pacific/Yap */ :int { 555 } //Z#593
+ /* Poland */ :int { 498 } //Z#594
+ /* Portugal */ :int { 463 } //Z#595
+ /* ROC */ :int { 317 } //Z#596
+ /* ROK */ :int { 313 } //Z#597
+ /* SST */ :int { 564 } //Z#598
+ /* Singapore */ :int { 315 } //Z#599
/* SystemV/AST4 */ :table {
typeOffsets:intvector { -14400, 0 }
- } //Z#599
+ } //Z#600
/* SystemV/AST4ADT */ :table {
transPre32:intvector { -1, 2096195296, -1, 2111916496, -1, 2127644896, -1, 2143366096 }
trans:intvector { -2135872800, -2120151600, -2104423200, -2088702000, -2072973600, -2056647600, -2040919200, -2025198000, -2009469600, -1993748400, -1978020000, -1962298800, -1946570400, -1930849200, -1915120800, -1898794800, -1883671200, -1867345200, -1851616800, -1835895600, -1820167200, -1804446000, -1788717600, -1772996400, -1757268000, -1741546800, -1725818400, -1709492400, -1693764000, -1678042800, -1662314400, -1646593200, -1630864800, -1615143600, -1599415200, -1583694000, -1567965600, -1551639600, -1536516000, -1520190000, -1504461600, -1488740400, -1473012000, -1457290800, -1441562400, -1425841200, -1410112800, -1394391600, -1378663200, -1362337200, -1347213600, -1330887600, -1315159200, -1299438000, -1283709600, -1267988400, -1252260000, -1236538800, -1220810400, -1205089200, -1189360800, -1173034800, -1157306400, -1141585200, -1125856800, -1110135600, -1094407200, -1078686000, -1062957600, -1047236400, -1031508000, -1015182000, -1000058400, -983732400, -968004000, -952282800, -936554400, -920833200, -905104800, -889383600, -873655200, -857934000, -842205600, -825879600, -810151200, -794430000, -778701600, -762980400, -747252000, -731530800, -715802400, -700081200, -684352800, -668026800, -652903200, -636577200, -620848800, -605127600, -589399200, -573678000, -557949600, -542228400, -526500000, -510778800, -495050400, -478724400, -463600800, -447274800, -431546400, -415825200, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 126684000, 154501200, 162367200, 183531600, 199260000, 215586000 }
@@ -2794,10 +2792,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -14400 }
finalYear:int { 1977 }
- } //Z#600
+ } //Z#601
/* SystemV/CST6 */ :table {
typeOffsets:intvector { -21600, 0 }
- } //Z#601
+ } //Z#602
/* SystemV/CST6CDT */ :table {
transPre32:intvector { -1, 2096202496, -1, 2111923696, -1, 2127652096, -1, 2143373296 }
trans:intvector { -2135865600, -2120144400, -2104416000, -2088694800, -2072966400, -2056640400, -2040912000, -2025190800, -2009462400, -1993741200, -1978012800, -1962291600, -1946563200, -1930842000, -1915113600, -1898787600, -1883664000, -1867338000, -1851609600, -1835888400, -1820160000, -1804438800, -1788710400, -1772989200, -1757260800, -1741539600, -1725811200, -1709485200, -1693756800, -1678035600, -1662307200, -1646586000, -1630857600, -1615136400, -1599408000, -1583686800, -1567958400, -1551632400, -1536508800, -1520182800, -1504454400, -1488733200, -1473004800, -1457283600, -1441555200, -1425834000, -1410105600, -1394384400, -1378656000, -1362330000, -1347206400, -1330880400, -1315152000, -1299430800, -1283702400, -1267981200, -1252252800, -1236531600, -1220803200, -1205082000, -1189353600, -1173027600, -1157299200, -1141578000, -1125849600, -1110128400, -1094400000, -1078678800, -1062950400, -1047229200, -1031500800, -1015174800, -1000051200, -983725200, -967996800, -952275600, -936547200, -920826000, -905097600, -889376400, -873648000, -857926800, -842198400, -825872400, -810144000, -794422800, -778694400, -762973200, -747244800, -731523600, -715795200, -700074000, -684345600, -668019600, -652896000, -636570000, -620841600, -605120400, -589392000, -573670800, -557942400, -542221200, -526492800, -510771600, -495043200, -478717200, -463593600, -447267600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -131562000, -116438400, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 154508400, 162374400, 183538800, 199267200, 215593200 }
@@ -2806,10 +2804,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -21600 }
finalYear:int { 1977 }
- } //Z#602
+ } //Z#603
/* SystemV/EST5 */ :table {
typeOffsets:intvector { -18000, 0 }
- } //Z#603
+ } //Z#604
/* SystemV/EST5EDT */ :table {
transPre32:intvector { -1, 2096198896, -1, 2111920096, -1, 2127648496, -1, 2143369696 }
trans:intvector { -2135869200, -2120148000, -2104419600, -2088698400, -2072970000, -2056644000, -2040915600, -2025194400, -2009466000, -1993744800, -1978016400, -1962295200, -1946566800, -1930845600, -1915117200, -1898791200, -1883667600, -1867341600, -1851613200, -1835892000, -1820163600, -1804442400, -1788714000, -1772992800, -1757264400, -1741543200, -1725814800, -1709488800, -1693760400, -1678039200, -1662310800, -1646589600, -1630861200, -1615140000, -1599411600, -1583690400, -1567962000, -1551636000, -1536512400, -1520186400, -1504458000, -1488736800, -1473008400, -1457287200, -1441558800, -1425837600, -1410109200, -1394388000, -1378659600, -1362333600, -1347210000, -1330884000, -1315155600, -1299434400, -1283706000, -1267984800, -1252256400, -1236535200, -1220806800, -1205085600, -1189357200, -1173031200, -1157302800, -1141581600, -1125853200, -1110132000, -1094403600, -1078682400, -1062954000, -1047232800, -1031504400, -1015178400, -1000054800, -983728800, -968000400, -952279200, -936550800, -920829600, -905101200, -889380000, -873651600, -857930400, -842202000, -825876000, -810147600, -794426400, -778698000, -762976800, -747248400, -731527200, -715798800, -700077600, -684349200, -668023200, -652899600, -636573600, -620845200, -605124000, -589395600, -573674400, -557946000, -542224800, -526496400, -510775200, -495046800, -478720800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 154504800, 162370800, 183535200, 199263600, 215589600 }
@@ -2818,13 +2816,13 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -18000 }
finalYear:int { 1977 }
- } //Z#604
+ } //Z#605
/* SystemV/HST10 */ :table {
typeOffsets:intvector { -36000, 0 }
- } //Z#605
+ } //Z#606
/* SystemV/MST7 */ :table {
typeOffsets:intvector { -25200, 0 }
- } //Z#606
+ } //Z#607
/* SystemV/MST7MDT */ :table {
transPre32:intvector { -1, 2096206096, -1, 2111927296, -1, 2127655696, -1, 2143376896 }
trans:intvector { -2135862000, -2120140800, -2104412400, -2088691200, -2072962800, -2056636800, -2040908400, -2025187200, -2009458800, -1993737600, -1978009200, -1962288000, -1946559600, -1930838400, -1915110000, -1898784000, -1883660400, -1867334400, -1851606000, -1835884800, -1820156400, -1804435200, -1788706800, -1772985600, -1757257200, -1741536000, -1725807600, -1709481600, -1693753200, -1678032000, -1662303600, -1646582400, -1630854000, -1615132800, -1599404400, -1583683200, -1567954800, -1551628800, -1536505200, -1520179200, -1504450800, -1488729600, -1473001200, -1457280000, -1441551600, -1425830400, -1410102000, -1394380800, -1378652400, -1362326400, -1347202800, -1330876800, -1315148400, -1299427200, -1283698800, -1267977600, -1252249200, -1236528000, -1220799600, -1205078400, -1189350000, -1173024000, -1157295600, -1141574400, -1125846000, -1110124800, -1094396400, -1078675200, -1062946800, -1047225600, -1031497200, -1015171200, -1000047600, -983721600, -967993200, -952272000, -936543600, -920822400, -905094000, -889372800, -873644400, -857923200, -842194800, -825868800, -810140400, -794419200, -778690800, -762969600, -747241200, -731520000, -715791600, -700070400, -684342000, -668016000, -652892400, -636566400, -620838000, -605116800, -589388400, -573667200, -557938800, -542217600, -526489200, -510768000, -495039600, -478713600, -463590000, -447264000, -431535600, -415814400, -400086000, -384364800, -368636400, -352915200, -337186800, -321465600, -305737200, -289411200, -273682800, -257961600, -242233200, -226512000, -210783600, -195062400, -179334000, -163612800, -147884400, -131558400, -116434800, -100108800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 154512000, 162378000, 183542400, 199270800, 215596800 }
@@ -2833,10 +2831,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -25200 }
finalYear:int { 1977 }
- } //Z#607
+ } //Z#608
/* SystemV/PST8 */ :table {
typeOffsets:intvector { -28800, 0 }
- } //Z#608
+ } //Z#609
/* SystemV/PST8PDT */ :table {
transPre32:intvector { -1, 2096209696, -1, 2111930896, -1, 2127659296, -1, 2143380496 }
trans:intvector { -2135858400, -2120137200, -2104408800, -2088687600, -2072959200, -2056633200, -2040904800, -2025183600, -2009455200, -1993734000, -1978005600, -1962284400, -1946556000, -1930834800, -1915106400, -1898780400, -1883656800, -1867330800, -1851602400, -1835881200, -1820152800, -1804431600, -1788703200, -1772982000, -1757253600, -1741532400, -1725804000, -1709478000, -1693749600, -1678028400, -1662300000, -1646578800, -1630850400, -1615129200, -1599400800, -1583679600, -1567951200, -1551625200, -1536501600, -1520175600, -1504447200, -1488726000, -1472997600, -1457276400, -1441548000, -1425826800, -1410098400, -1394377200, -1378648800, -1362322800, -1347199200, -1330873200, -1315144800, -1299423600, -1283695200, -1267974000, -1252245600, -1236524400, -1220796000, -1205074800, -1189346400, -1173020400, -1157292000, -1141570800, -1125842400, -1110121200, -1094392800, -1078671600, -1062943200, -1047222000, -1031493600, -1015167600, -1000044000, -983718000, -967989600, -952268400, -936540000, -920818800, -905090400, -889369200, -873640800, -857919600, -842191200, -825865200, -810136800, -794415600, -778687200, -762966000, -747237600, -731516400, -715788000, -700066800, -684338400, -668012400, -652888800, -636562800, -620834400, -605113200, -589384800, -573663600, -557935200, -542214000, -526485600, -510764400, -495036000, -478710000, -463586400, -447260400, -431532000, -415810800, -400082400, -384361200, -368632800, -352911600, -337183200, -321462000, -305733600, -289407600, -273679200, -257958000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 154515600, 162381600, 183546000, 199274400, 215600400 }
@@ -2845,10 +2843,10 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -28800 }
finalYear:int { 1977 }
- } //Z#609
+ } //Z#610
/* SystemV/YST9 */ :table {
typeOffsets:intvector { -32400, 0 }
- } //Z#610
+ } //Z#611
/* SystemV/YST9YDT */ :table {
transPre32:intvector { -1, 2096213296, -1, 2111934496, -1, 2127662896, -1, 2143384096 }
trans:intvector { -2135854800, -2120133600, -2104405200, -2088684000, -2072955600, -2056629600, -2040901200, -2025180000, -2009451600, -1993730400, -1978002000, -1962280800, -1946552400, -1930831200, -1915102800, -1898776800, -1883653200, -1867327200, -1851598800, -1835877600, -1820149200, -1804428000, -1788699600, -1772978400, -1757250000, -1741528800, -1725800400, -1709474400, -1693746000, -1678024800, -1662296400, -1646575200, -1630846800, -1615125600, -1599397200, -1583676000, -1567947600, -1551621600, -1536498000, -1520172000, -1504443600, -1488722400, -1472994000, -1457272800, -1441544400, -1425823200, -1410094800, -1394373600, -1378645200, -1362319200, -1347195600, -1330869600, -1315141200, -1299420000, -1283691600, -1267970400, -1252242000, -1236520800, -1220792400, -1205071200, -1189342800, -1173016800, -1157288400, -1141567200, -1125838800, -1110117600, -1094389200, -1078668000, -1062939600, -1047218400, -1031490000, -1015164000, -1000040400, -983714400, -967986000, -952264800, -936536400, -920815200, -905086800, -889365600, -873637200, -857916000, -842187600, -825861600, -810133200, -794412000, -778683600, -762962400, -747234000, -731512800, -715784400, -700063200, -684334800, -668008800, -652885200, -636559200, -620830800, -605109600, -589381200, -573660000, -557931600, -542210400, -526482000, -510760800, -495032400, -478706400, -463582800, -447256800, -431528400, -415807200, -400078800, -384357600, -368629200, -352908000, -337179600, -321458400, -305730000, -289404000, -273675600, -257954400, -242226000, -226504800, -210776400, -195055200, -179326800, -163605600, -147877200, -131551200, -116427600, -100101600, -84373200, -68652000, -52923600, -37202400, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 154519200, 162385200, 183549600, 199278000, 215604000 }
@@ -2857,26 +2855,26 @@ zoneinfo64:table(nofallback) {
finalRule { "SystemV" }
finalRaw:int { -32400 }
finalYear:int { 1977 }
- } //Z#611
- /* Turkey */ :int { 457 } //Z#612
- /* UCT */ :int { 433 } //Z#613
- /* US/Alaska */ :int { 60 } //Z#614
- /* US/Aleutian */ :int { 59 } //Z#615
- /* US/Arizona */ :int { 184 } //Z#616
- /* US/Central */ :int { 98 } //Z#617
- /* US/East-Indiana */ :int { 131 } //Z#618
- /* US/Eastern */ :int { 173 } //Z#619
- /* US/Hawaii */ :int { 565 } //Z#620
- /* US/Indiana-Starke */ :int { 132 } //Z#621
- /* US/Michigan */ :int { 110 } //Z#622
- /* US/Mountain */ :int { 109 } //Z#623
- /* US/Pacific */ :int { 151 } //Z#624
- /* US/Pacific-New */ :int { 151 } //Z#625
- /* US/Samoa */ :int { 577 } //Z#626
- /* UTC */ :int { 434 } //Z#627
- /* Universal */ :int { 434 } //Z#628
- /* VST */ :int { 271 } //Z#629
- /* W-SU */ :int { 471 } //Z#630
+ } //Z#612
+ /* Turkey */ :int { 458 } //Z#613
+ /* UCT */ :int { 435 } //Z#614
+ /* US/Alaska */ :int { 60 } //Z#615
+ /* US/Aleutian */ :int { 59 } //Z#616
+ /* US/Arizona */ :int { 184 } //Z#617
+ /* US/Central */ :int { 98 } //Z#618
+ /* US/East-Indiana */ :int { 131 } //Z#619
+ /* US/Eastern */ :int { 173 } //Z#620
+ /* US/Hawaii */ :int { 566 } //Z#621
+ /* US/Indiana-Starke */ :int { 132 } //Z#622
+ /* US/Michigan */ :int { 110 } //Z#623
+ /* US/Mountain */ :int { 109 } //Z#624
+ /* US/Pacific */ :int { 151 } //Z#625
+ /* US/Pacific-New */ :int { 151 } //Z#626
+ /* US/Samoa */ :int { 578 } //Z#627
+ /* UTC */ :int { 435 } //Z#628
+ /* Universal */ :int { 435 } //Z#629
+ /* VST */ :int { 271 } //Z#630
+ /* W-SU */ :int { 472 } //Z#631
/* WET */ :table {
trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 }
typeOffsets:intvector { 0, 0, 0, 3600 }
@@ -2884,8 +2882,8 @@ zoneinfo64:table(nofallback) {
finalRule { "EU" }
finalRaw:int { 0 }
finalYear:int { 1997 }
- } //Z#631
- /* Zulu */ :int { 434 } //Z#632
+ } //Z#632
+ /* Zulu */ :int { 435 } //Z#633
}
Names {
"ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6
@@ -2986,93 +2984,94 @@ zoneinfo64:table(nofallback) {
,"Asia/Macau","Asia/Magadan","Asia/Makassar","Asia/Manila" // 295
,"Asia/Muscat","Asia/Nicosia","Asia/Novokuznetsk","Asia/Novosibirsk" // 299
,"Asia/Omsk","Asia/Oral","Asia/Phnom_Penh","Asia/Pontianak" // 303
- ,"Asia/Pyongyang","Asia/Qatar","Asia/Qyzylorda","Asia/Rangoon" // 307
- ,"Asia/Riyadh","Asia/Saigon","Asia/Sakhalin","Asia/Samarkand" // 311
- ,"Asia/Seoul","Asia/Shanghai","Asia/Singapore","Asia/Srednekolymsk" // 315
- ,"Asia/Taipei","Asia/Tashkent","Asia/Tbilisi","Asia/Tehran" // 319
- ,"Asia/Tel_Aviv","Asia/Thimbu","Asia/Thimphu","Asia/Tokyo" // 323
- ,"Asia/Tomsk","Asia/Ujung_Pandang","Asia/Ulaanbaatar" // 326
- ,"Asia/Ulan_Bator","Asia/Urumqi","Asia/Ust-Nera","Asia/Vientiane" // 330
- ,"Asia/Vladivostok","Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 334
- ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 337
- ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 340
- ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 343
- ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 346
- ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 349
- ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 352
- ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 355
- ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 358
- ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 361
- ,"Australia/North","Australia/Perth","Australia/Queensland" // 364
- ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 367
- ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 370
- ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 375
- ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 382
- ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 385
- ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 388
- ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 391
- ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 395
- ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 402
- ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 406
- ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 411
- ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 416
- ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 420
- ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 424
- ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 429
- ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 434
- ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 438
- ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 441
- ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 444
- ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 447
- ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 450
- ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 453
- ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 456
- ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 459
- ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 463
- ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 466
- ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 470
- ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 474
- ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 478
- ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 481
- ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 484
- ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 487
- ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 490
- ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 493
- ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 496
- ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 499
- ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 505
- ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 511
- ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 515
- ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 518
- ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 521
- ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 524
- ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 530
- ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 536
- ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 541
- ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 549
- ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 552
- ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 555
- ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 558
- ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 561
- ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 564
- ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 567
- ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 570
- ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 573
- ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 576
- ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 579
- ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 582
- ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 585
- ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 588
- ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 592
- ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 598
- ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 602
- ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 606
- ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 609
- ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 614
- ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 618
- ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 622
- ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 626
- ,"UTC","Universal","VST","W-SU","WET","Zulu" // 632
+ ,"Asia/Pyongyang","Asia/Qatar","Asia/Qostanay","Asia/Qyzylorda" // 307
+ ,"Asia/Rangoon","Asia/Riyadh","Asia/Saigon","Asia/Sakhalin" // 311
+ ,"Asia/Samarkand","Asia/Seoul","Asia/Shanghai","Asia/Singapore" // 315
+ ,"Asia/Srednekolymsk","Asia/Taipei","Asia/Tashkent" // 318
+ ,"Asia/Tbilisi","Asia/Tehran","Asia/Tel_Aviv","Asia/Thimbu" // 322
+ ,"Asia/Thimphu","Asia/Tokyo","Asia/Tomsk","Asia/Ujung_Pandang" // 326
+ ,"Asia/Ulaanbaatar","Asia/Ulan_Bator","Asia/Urumqi" // 329
+ ,"Asia/Ust-Nera","Asia/Vientiane","Asia/Vladivostok" // 332
+ ,"Asia/Yakutsk","Asia/Yangon","Asia/Yekaterinburg" // 335
+ ,"Asia/Yerevan","Atlantic/Azores","Atlantic/Bermuda" // 338
+ ,"Atlantic/Canary","Atlantic/Cape_Verde","Atlantic/Faeroe" // 341
+ ,"Atlantic/Faroe","Atlantic/Jan_Mayen","Atlantic/Madeira" // 344
+ ,"Atlantic/Reykjavik","Atlantic/South_Georgia","Atlantic/St_Helena" // 347
+ ,"Atlantic/Stanley","Australia/ACT","Australia/Adelaide" // 350
+ ,"Australia/Brisbane","Australia/Broken_Hill","Australia/Canberra" // 353
+ ,"Australia/Currie","Australia/Darwin","Australia/Eucla" // 356
+ ,"Australia/Hobart","Australia/LHI","Australia/Lindeman" // 359
+ ,"Australia/Lord_Howe","Australia/Melbourne","Australia/NSW" // 362
+ ,"Australia/North","Australia/Perth","Australia/Queensland" // 365
+ ,"Australia/South","Australia/Sydney","Australia/Tasmania" // 368
+ ,"Australia/Victoria","Australia/West","Australia/Yancowinna" // 371
+ ,"BET","BST","Brazil/Acre","Brazil/DeNoronha","Brazil/East" // 376
+ ,"Brazil/West","CAT","CET","CNT","CST","CST6CDT","CTT" // 383
+ ,"Canada/Atlantic","Canada/Central","Canada/East-Saskatchewan" // 386
+ ,"Canada/Eastern","Canada/Mountain","Canada/Newfoundland" // 389
+ ,"Canada/Pacific","Canada/Saskatchewan","Canada/Yukon" // 392
+ ,"Chile/Continental","Chile/EasterIsland","Cuba","EAT" // 396
+ ,"ECT","EET","EST","EST5EDT","Egypt","Eire","Etc/GMT" // 403
+ ,"Etc/GMT+0","Etc/GMT+1","Etc/GMT+10","Etc/GMT+11" // 407
+ ,"Etc/GMT+12","Etc/GMT+2","Etc/GMT+3","Etc/GMT+4","Etc/GMT+5" // 412
+ ,"Etc/GMT+6","Etc/GMT+7","Etc/GMT+8","Etc/GMT+9","Etc/GMT-0" // 417
+ ,"Etc/GMT-1","Etc/GMT-10","Etc/GMT-11","Etc/GMT-12" // 421
+ ,"Etc/GMT-13","Etc/GMT-14","Etc/GMT-2","Etc/GMT-3" // 425
+ ,"Etc/GMT-4","Etc/GMT-5","Etc/GMT-6","Etc/GMT-7","Etc/GMT-8" // 430
+ ,"Etc/GMT-9","Etc/GMT0","Etc/Greenwich","Etc/UCT","Etc/UTC" // 435
+ ,"Etc/Universal","Etc/Unknown","Etc/Zulu","Europe/Amsterdam" // 439
+ ,"Europe/Andorra","Europe/Astrakhan","Europe/Athens" // 442
+ ,"Europe/Belfast","Europe/Belgrade","Europe/Berlin" // 445
+ ,"Europe/Bratislava","Europe/Brussels","Europe/Bucharest" // 448
+ ,"Europe/Budapest","Europe/Busingen","Europe/Chisinau" // 451
+ ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 454
+ ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 457
+ ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 460
+ ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 464
+ ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 467
+ ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 471
+ ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 475
+ ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 479
+ ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 482
+ ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 485
+ ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 488
+ ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 491
+ ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 494
+ ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 497
+ ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 500
+ ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 506
+ ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 512
+ ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 516
+ ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 519
+ ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 522
+ ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 525
+ ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 531
+ ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 537
+ ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 542
+ ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 550
+ ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 553
+ ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 556
+ ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 559
+ ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 562
+ ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 565
+ ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kiritimati" // 568
+ ,"Pacific/Kosrae","Pacific/Kwajalein","Pacific/Majuro" // 571
+ ,"Pacific/Marquesas","Pacific/Midway","Pacific/Nauru" // 574
+ ,"Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 577
+ ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 580
+ ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 583
+ ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 586
+ ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 589
+ ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 593
+ ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 599
+ ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 603
+ ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 607
+ ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 610
+ ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 615
+ ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 619
+ ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 623
+ ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 627
+ ,"UTC","Universal","VST","W-SU","WET","Zulu" // 633
}
Rules {
AN:intvector {
@@ -3100,7 +3099,7 @@ zoneinfo64:table(nofallback) {
8, -30, -1, 9900, 1, 3, 1, -1, 9900, 1, 3600
} //_#7
Chile:intvector {
- 7, 9, -1, 14400, 2, 4, 9, -1, 10800, 2, 3600
+ 8, 2, -1, 14400, 2, 3, 2, -1, 10800, 2, 3600
} //_#8
Cuba:intvector {
2, 8, -1, 0, 1, 10, 1, -1, 0, 1, 3600
@@ -3111,66 +3110,60 @@ zoneinfo64:table(nofallback) {
EUAsia:intvector {
2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 3600
} //_#11
- Eire:intvector {
- 9, -31, -1, 3600, 2, 2, -31, -1, 3600, 2, -3600
- } //_#12
Fiji:intvector {
- 10, 1, -1, 7200, 0, 0, 14, -1, 10800, 0, 3600
- } //_#13
+ 10, 1, -1, 7200, 0, 0, 13, -1, 10800, 0, 3600
+ } //_#12
Haiti:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
- } //_#14
+ } //_#13
Iran:intvector {
- 2, 21, 0, 0, 0, 8, 21, 0, 0, 0, 3600
- } //_#15
+ 2, 20, 0, 86400, 0, 8, 20, 0, 86400, 0, 3600
+ } //_#14
Jordan:intvector {
2, -31, -5, 86400, 0, 9, -31, -6, 0, 1, 3600
- } //_#16
+ } //_#15
LH:intvector {
9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800
- } //_#17
+ } //_#16
Lebanon:intvector {
2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600
- } //_#18
+ } //_#17
Mexico:intvector {
3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#19
+ } //_#18
Moldova:intvector {
2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600
- } //_#20
- Morocco:intvector {
- 2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600
- } //_#21
+ } //_#19
NZ:intvector {
8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
- } //_#22
+ } //_#20
Palestine:intvector {
- 2, 22, -7, 3600, 0, 9, -31, -7, 3600, 0, 3600
- } //_#23
+ 2, 24, -7, 3600, 0, 9, -31, -7, 3600, 0, 3600
+ } //_#21
Para:intvector {
9, 1, -1, 0, 0, 2, 22, -1, 0, 0, 3600
- } //_#24
+ } //_#22
Syria:intvector {
2, -31, -6, 0, 0, 9, -31, -6, 0, 0, 3600
- } //_#25
+ } //_#23
SystemV:intvector {
3, -30, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#26
+ } //_#24
Thule:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
- } //_#27
+ } //_#25
Troll:intvector {
2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 7200
- } //_#28
+ } //_#26
US:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
- } //_#29
+ } //_#27
WS:intvector {
8, -30, -1, 10800, 0, 3, 1, -1, 14400, 0, 3600
- } //_#30
+ } //_#28
Zion:intvector {
2, 23, -6, 7200, 0, 9, -31, -1, 7200, 0, 3600
- } //_#31
+ } //_#29
}
Regions:array {
"AU", //Z#0 ACT
@@ -3479,332 +3472,333 @@ zoneinfo64:table(nofallback) {
"ID", //Z#303 Asia/Pontianak
"KP", //Z#304 Asia/Pyongyang
"QA", //Z#305 Asia/Qatar
- "KZ", //Z#306 Asia/Qyzylorda
- "MM", //Z#307 Asia/Rangoon
- "SA", //Z#308 Asia/Riyadh
- "VN", //Z#309 Asia/Saigon
- "RU", //Z#310 Asia/Sakhalin
- "UZ", //Z#311 Asia/Samarkand
- "KR", //Z#312 Asia/Seoul
- "CN", //Z#313 Asia/Shanghai
- "SG", //Z#314 Asia/Singapore
- "RU", //Z#315 Asia/Srednekolymsk
- "TW", //Z#316 Asia/Taipei
- "UZ", //Z#317 Asia/Tashkent
- "GE", //Z#318 Asia/Tbilisi
- "IR", //Z#319 Asia/Tehran
- "IL", //Z#320 Asia/Tel_Aviv
- "BT", //Z#321 Asia/Thimbu
- "BT", //Z#322 Asia/Thimphu
- "JP", //Z#323 Asia/Tokyo
- "RU", //Z#324 Asia/Tomsk
- "ID", //Z#325 Asia/Ujung_Pandang
- "MN", //Z#326 Asia/Ulaanbaatar
- "MN", //Z#327 Asia/Ulan_Bator
- "CN", //Z#328 Asia/Urumqi
- "RU", //Z#329 Asia/Ust-Nera
- "LA", //Z#330 Asia/Vientiane
- "RU", //Z#331 Asia/Vladivostok
- "RU", //Z#332 Asia/Yakutsk
- "MM", //Z#333 Asia/Yangon
- "RU", //Z#334 Asia/Yekaterinburg
- "AM", //Z#335 Asia/Yerevan
- "PT", //Z#336 Atlantic/Azores
- "BM", //Z#337 Atlantic/Bermuda
- "ES", //Z#338 Atlantic/Canary
- "CV", //Z#339 Atlantic/Cape_Verde
- "FO", //Z#340 Atlantic/Faeroe
- "FO", //Z#341 Atlantic/Faroe
- "NO", //Z#342 Atlantic/Jan_Mayen
- "PT", //Z#343 Atlantic/Madeira
- "IS", //Z#344 Atlantic/Reykjavik
- "GS", //Z#345 Atlantic/South_Georgia
- "SH", //Z#346 Atlantic/St_Helena
- "FK", //Z#347 Atlantic/Stanley
- "AU", //Z#348 Australia/ACT
- "AU", //Z#349 Australia/Adelaide
- "AU", //Z#350 Australia/Brisbane
- "AU", //Z#351 Australia/Broken_Hill
- "AU", //Z#352 Australia/Canberra
- "AU", //Z#353 Australia/Currie
- "AU", //Z#354 Australia/Darwin
- "AU", //Z#355 Australia/Eucla
- "AU", //Z#356 Australia/Hobart
- "AU", //Z#357 Australia/LHI
- "AU", //Z#358 Australia/Lindeman
- "AU", //Z#359 Australia/Lord_Howe
- "AU", //Z#360 Australia/Melbourne
- "AU", //Z#361 Australia/NSW
- "AU", //Z#362 Australia/North
- "AU", //Z#363 Australia/Perth
- "AU", //Z#364 Australia/Queensland
- "AU", //Z#365 Australia/South
- "AU", //Z#366 Australia/Sydney
- "AU", //Z#367 Australia/Tasmania
- "AU", //Z#368 Australia/Victoria
- "AU", //Z#369 Australia/West
- "AU", //Z#370 Australia/Yancowinna
- "BR", //Z#371 BET
- "BD", //Z#372 BST
- "BR", //Z#373 Brazil/Acre
- "BR", //Z#374 Brazil/DeNoronha
- "BR", //Z#375 Brazil/East
- "BR", //Z#376 Brazil/West
- "MZ", //Z#377 CAT
- "001",//Z#378 CET
- "CA", //Z#379 CNT
- "US", //Z#380 CST
- "001",//Z#381 CST6CDT
- "CN", //Z#382 CTT
- "CA", //Z#383 Canada/Atlantic
- "CA", //Z#384 Canada/Central
- "CA", //Z#385 Canada/East-Saskatchewan
- "CA", //Z#386 Canada/Eastern
- "CA", //Z#387 Canada/Mountain
- "CA", //Z#388 Canada/Newfoundland
- "CA", //Z#389 Canada/Pacific
- "CA", //Z#390 Canada/Saskatchewan
- "CA", //Z#391 Canada/Yukon
- "CL", //Z#392 Chile/Continental
- "CL", //Z#393 Chile/EasterIsland
- "CU", //Z#394 Cuba
- "KE", //Z#395 EAT
- "FR", //Z#396 ECT
- "001",//Z#397 EET
- "001",//Z#398 EST
- "001",//Z#399 EST5EDT
- "EG", //Z#400 Egypt
- "IE", //Z#401 Eire
- "001",//Z#402 Etc/GMT
- "001",//Z#403 Etc/GMT+0
- "001",//Z#404 Etc/GMT+1
- "001",//Z#405 Etc/GMT+10
- "001",//Z#406 Etc/GMT+11
- "001",//Z#407 Etc/GMT+12
- "001",//Z#408 Etc/GMT+2
- "001",//Z#409 Etc/GMT+3
- "001",//Z#410 Etc/GMT+4
- "001",//Z#411 Etc/GMT+5
- "001",//Z#412 Etc/GMT+6
- "001",//Z#413 Etc/GMT+7
- "001",//Z#414 Etc/GMT+8
- "001",//Z#415 Etc/GMT+9
- "001",//Z#416 Etc/GMT-0
- "001",//Z#417 Etc/GMT-1
- "001",//Z#418 Etc/GMT-10
- "001",//Z#419 Etc/GMT-11
- "001",//Z#420 Etc/GMT-12
- "001",//Z#421 Etc/GMT-13
- "001",//Z#422 Etc/GMT-14
- "001",//Z#423 Etc/GMT-2
- "001",//Z#424 Etc/GMT-3
- "001",//Z#425 Etc/GMT-4
- "001",//Z#426 Etc/GMT-5
- "001",//Z#427 Etc/GMT-6
- "001",//Z#428 Etc/GMT-7
- "001",//Z#429 Etc/GMT-8
- "001",//Z#430 Etc/GMT-9
- "001",//Z#431 Etc/GMT0
- "001",//Z#432 Etc/Greenwich
- "001",//Z#433 Etc/UCT
- "001",//Z#434 Etc/UTC
- "001",//Z#435 Etc/Universal
- "001",//Z#436 Etc/Unknown
- "001",//Z#437 Etc/Zulu
- "NL", //Z#438 Europe/Amsterdam
- "AD", //Z#439 Europe/Andorra
- "RU", //Z#440 Europe/Astrakhan
- "GR", //Z#441 Europe/Athens
- "GB", //Z#442 Europe/Belfast
- "RS", //Z#443 Europe/Belgrade
- "DE", //Z#444 Europe/Berlin
- "SK", //Z#445 Europe/Bratislava
- "BE", //Z#446 Europe/Brussels
- "RO", //Z#447 Europe/Bucharest
- "HU", //Z#448 Europe/Budapest
- "DE", //Z#449 Europe/Busingen
- "MD", //Z#450 Europe/Chisinau
- "DK", //Z#451 Europe/Copenhagen
- "IE", //Z#452 Europe/Dublin
- "GI", //Z#453 Europe/Gibraltar
- "GG", //Z#454 Europe/Guernsey
- "FI", //Z#455 Europe/Helsinki
- "IM", //Z#456 Europe/Isle_of_Man
- "TR", //Z#457 Europe/Istanbul
- "JE", //Z#458 Europe/Jersey
- "RU", //Z#459 Europe/Kaliningrad
- "UA", //Z#460 Europe/Kiev
- "RU", //Z#461 Europe/Kirov
- "PT", //Z#462 Europe/Lisbon
- "SI", //Z#463 Europe/Ljubljana
- "GB", //Z#464 Europe/London
- "LU", //Z#465 Europe/Luxembourg
- "ES", //Z#466 Europe/Madrid
- "MT", //Z#467 Europe/Malta
- "AX", //Z#468 Europe/Mariehamn
- "BY", //Z#469 Europe/Minsk
- "MC", //Z#470 Europe/Monaco
- "RU", //Z#471 Europe/Moscow
- "CY", //Z#472 Europe/Nicosia
- "NO", //Z#473 Europe/Oslo
- "FR", //Z#474 Europe/Paris
- "ME", //Z#475 Europe/Podgorica
- "CZ", //Z#476 Europe/Prague
- "LV", //Z#477 Europe/Riga
- "IT", //Z#478 Europe/Rome
- "RU", //Z#479 Europe/Samara
- "SM", //Z#480 Europe/San_Marino
- "BA", //Z#481 Europe/Sarajevo
- "RU", //Z#482 Europe/Saratov
- "UA", //Z#483 Europe/Simferopol
- "MK", //Z#484 Europe/Skopje
- "BG", //Z#485 Europe/Sofia
- "SE", //Z#486 Europe/Stockholm
- "EE", //Z#487 Europe/Tallinn
- "AL", //Z#488 Europe/Tirane
- "MD", //Z#489 Europe/Tiraspol
- "RU", //Z#490 Europe/Ulyanovsk
- "UA", //Z#491 Europe/Uzhgorod
- "LI", //Z#492 Europe/Vaduz
- "VA", //Z#493 Europe/Vatican
- "AT", //Z#494 Europe/Vienna
- "LT", //Z#495 Europe/Vilnius
- "RU", //Z#496 Europe/Volgograd
- "PL", //Z#497 Europe/Warsaw
- "HR", //Z#498 Europe/Zagreb
- "UA", //Z#499 Europe/Zaporozhye
- "CH", //Z#500 Europe/Zurich
- "001",//Z#501 Factory
- "GB", //Z#502 GB
- "GB", //Z#503 GB-Eire
- "001",//Z#504 GMT
- "001",//Z#505 GMT+0
- "001",//Z#506 GMT-0
- "001",//Z#507 GMT0
- "001",//Z#508 Greenwich
- "001",//Z#509 HST
- "HK", //Z#510 Hongkong
- "US", //Z#511 IET
- "IN", //Z#512 IST
- "IS", //Z#513 Iceland
- "MG", //Z#514 Indian/Antananarivo
- "IO", //Z#515 Indian/Chagos
- "CX", //Z#516 Indian/Christmas
- "CC", //Z#517 Indian/Cocos
- "KM", //Z#518 Indian/Comoro
- "TF", //Z#519 Indian/Kerguelen
- "SC", //Z#520 Indian/Mahe
- "MV", //Z#521 Indian/Maldives
- "MU", //Z#522 Indian/Mauritius
- "YT", //Z#523 Indian/Mayotte
- "RE", //Z#524 Indian/Reunion
- "IR", //Z#525 Iran
- "IL", //Z#526 Israel
- "JP", //Z#527 JST
- "JM", //Z#528 Jamaica
- "JP", //Z#529 Japan
- "MH", //Z#530 Kwajalein
- "LY", //Z#531 Libya
- "001",//Z#532 MET
- "WS", //Z#533 MIT
- "001",//Z#534 MST
- "001",//Z#535 MST7MDT
- "MX", //Z#536 Mexico/BajaNorte
- "MX", //Z#537 Mexico/BajaSur
- "MX", //Z#538 Mexico/General
- "AM", //Z#539 NET
- "NZ", //Z#540 NST
- "NZ", //Z#541 NZ
- "NZ", //Z#542 NZ-CHAT
- "US", //Z#543 Navajo
- "PK", //Z#544 PLT
- "US", //Z#545 PNT
- "CN", //Z#546 PRC
- "PR", //Z#547 PRT
- "US", //Z#548 PST
- "001",//Z#549 PST8PDT
- "WS", //Z#550 Pacific/Apia
- "NZ", //Z#551 Pacific/Auckland
- "PG", //Z#552 Pacific/Bougainville
- "NZ", //Z#553 Pacific/Chatham
- "FM", //Z#554 Pacific/Chuuk
- "CL", //Z#555 Pacific/Easter
- "VU", //Z#556 Pacific/Efate
- "KI", //Z#557 Pacific/Enderbury
- "TK", //Z#558 Pacific/Fakaofo
- "FJ", //Z#559 Pacific/Fiji
- "TV", //Z#560 Pacific/Funafuti
- "EC", //Z#561 Pacific/Galapagos
- "PF", //Z#562 Pacific/Gambier
- "SB", //Z#563 Pacific/Guadalcanal
- "GU", //Z#564 Pacific/Guam
- "US", //Z#565 Pacific/Honolulu
- "UM", //Z#566 Pacific/Johnston
- "KI", //Z#567 Pacific/Kiritimati
- "FM", //Z#568 Pacific/Kosrae
- "MH", //Z#569 Pacific/Kwajalein
- "MH", //Z#570 Pacific/Majuro
- "PF", //Z#571 Pacific/Marquesas
- "UM", //Z#572 Pacific/Midway
- "NR", //Z#573 Pacific/Nauru
- "NU", //Z#574 Pacific/Niue
- "NF", //Z#575 Pacific/Norfolk
- "NC", //Z#576 Pacific/Noumea
- "AS", //Z#577 Pacific/Pago_Pago
- "PW", //Z#578 Pacific/Palau
- "PN", //Z#579 Pacific/Pitcairn
- "FM", //Z#580 Pacific/Pohnpei
- "FM", //Z#581 Pacific/Ponape
- "PG", //Z#582 Pacific/Port_Moresby
- "CK", //Z#583 Pacific/Rarotonga
- "MP", //Z#584 Pacific/Saipan
- "AS", //Z#585 Pacific/Samoa
- "PF", //Z#586 Pacific/Tahiti
- "KI", //Z#587 Pacific/Tarawa
- "TO", //Z#588 Pacific/Tongatapu
- "FM", //Z#589 Pacific/Truk
- "UM", //Z#590 Pacific/Wake
- "WF", //Z#591 Pacific/Wallis
- "FM", //Z#592 Pacific/Yap
- "PL", //Z#593 Poland
- "PT", //Z#594 Portugal
- "TW", //Z#595 ROC
- "KR", //Z#596 ROK
- "SB", //Z#597 SST
- "SG", //Z#598 Singapore
- "001",//Z#599 SystemV/AST4
- "001",//Z#600 SystemV/AST4ADT
- "001",//Z#601 SystemV/CST6
- "001",//Z#602 SystemV/CST6CDT
- "001",//Z#603 SystemV/EST5
- "001",//Z#604 SystemV/EST5EDT
- "001",//Z#605 SystemV/HST10
- "001",//Z#606 SystemV/MST7
- "001",//Z#607 SystemV/MST7MDT
- "001",//Z#608 SystemV/PST8
- "001",//Z#609 SystemV/PST8PDT
- "001",//Z#610 SystemV/YST9
- "001",//Z#611 SystemV/YST9YDT
- "TR", //Z#612 Turkey
- "001",//Z#613 UCT
- "US", //Z#614 US/Alaska
- "US", //Z#615 US/Aleutian
- "US", //Z#616 US/Arizona
- "US", //Z#617 US/Central
- "US", //Z#618 US/East-Indiana
- "US", //Z#619 US/Eastern
- "US", //Z#620 US/Hawaii
- "US", //Z#621 US/Indiana-Starke
- "US", //Z#622 US/Michigan
- "US", //Z#623 US/Mountain
- "US", //Z#624 US/Pacific
- "US", //Z#625 US/Pacific-New
- "AS", //Z#626 US/Samoa
- "001",//Z#627 UTC
- "001",//Z#628 Universal
- "VN", //Z#629 VST
- "RU", //Z#630 W-SU
- "001",//Z#631 WET
- "001",//Z#632 Zulu
+ "KZ", //Z#306 Asia/Qostanay
+ "KZ", //Z#307 Asia/Qyzylorda
+ "MM", //Z#308 Asia/Rangoon
+ "SA", //Z#309 Asia/Riyadh
+ "VN", //Z#310 Asia/Saigon
+ "RU", //Z#311 Asia/Sakhalin
+ "UZ", //Z#312 Asia/Samarkand
+ "KR", //Z#313 Asia/Seoul
+ "CN", //Z#314 Asia/Shanghai
+ "SG", //Z#315 Asia/Singapore
+ "RU", //Z#316 Asia/Srednekolymsk
+ "TW", //Z#317 Asia/Taipei
+ "UZ", //Z#318 Asia/Tashkent
+ "GE", //Z#319 Asia/Tbilisi
+ "IR", //Z#320 Asia/Tehran
+ "IL", //Z#321 Asia/Tel_Aviv
+ "BT", //Z#322 Asia/Thimbu
+ "BT", //Z#323 Asia/Thimphu
+ "JP", //Z#324 Asia/Tokyo
+ "RU", //Z#325 Asia/Tomsk
+ "ID", //Z#326 Asia/Ujung_Pandang
+ "MN", //Z#327 Asia/Ulaanbaatar
+ "MN", //Z#328 Asia/Ulan_Bator
+ "CN", //Z#329 Asia/Urumqi
+ "RU", //Z#330 Asia/Ust-Nera
+ "LA", //Z#331 Asia/Vientiane
+ "RU", //Z#332 Asia/Vladivostok
+ "RU", //Z#333 Asia/Yakutsk
+ "MM", //Z#334 Asia/Yangon
+ "RU", //Z#335 Asia/Yekaterinburg
+ "AM", //Z#336 Asia/Yerevan
+ "PT", //Z#337 Atlantic/Azores
+ "BM", //Z#338 Atlantic/Bermuda
+ "ES", //Z#339 Atlantic/Canary
+ "CV", //Z#340 Atlantic/Cape_Verde
+ "FO", //Z#341 Atlantic/Faeroe
+ "FO", //Z#342 Atlantic/Faroe
+ "NO", //Z#343 Atlantic/Jan_Mayen
+ "PT", //Z#344 Atlantic/Madeira
+ "IS", //Z#345 Atlantic/Reykjavik
+ "GS", //Z#346 Atlantic/South_Georgia
+ "SH", //Z#347 Atlantic/St_Helena
+ "FK", //Z#348 Atlantic/Stanley
+ "AU", //Z#349 Australia/ACT
+ "AU", //Z#350 Australia/Adelaide
+ "AU", //Z#351 Australia/Brisbane
+ "AU", //Z#352 Australia/Broken_Hill
+ "AU", //Z#353 Australia/Canberra
+ "AU", //Z#354 Australia/Currie
+ "AU", //Z#355 Australia/Darwin
+ "AU", //Z#356 Australia/Eucla
+ "AU", //Z#357 Australia/Hobart
+ "AU", //Z#358 Australia/LHI
+ "AU", //Z#359 Australia/Lindeman
+ "AU", //Z#360 Australia/Lord_Howe
+ "AU", //Z#361 Australia/Melbourne
+ "AU", //Z#362 Australia/NSW
+ "AU", //Z#363 Australia/North
+ "AU", //Z#364 Australia/Perth
+ "AU", //Z#365 Australia/Queensland
+ "AU", //Z#366 Australia/South
+ "AU", //Z#367 Australia/Sydney
+ "AU", //Z#368 Australia/Tasmania
+ "AU", //Z#369 Australia/Victoria
+ "AU", //Z#370 Australia/West
+ "AU", //Z#371 Australia/Yancowinna
+ "BR", //Z#372 BET
+ "BD", //Z#373 BST
+ "BR", //Z#374 Brazil/Acre
+ "BR", //Z#375 Brazil/DeNoronha
+ "BR", //Z#376 Brazil/East
+ "BR", //Z#377 Brazil/West
+ "MZ", //Z#378 CAT
+ "001",//Z#379 CET
+ "CA", //Z#380 CNT
+ "US", //Z#381 CST
+ "001",//Z#382 CST6CDT
+ "CN", //Z#383 CTT
+ "CA", //Z#384 Canada/Atlantic
+ "CA", //Z#385 Canada/Central
+ "CA", //Z#386 Canada/East-Saskatchewan
+ "CA", //Z#387 Canada/Eastern
+ "CA", //Z#388 Canada/Mountain
+ "CA", //Z#389 Canada/Newfoundland
+ "CA", //Z#390 Canada/Pacific
+ "CA", //Z#391 Canada/Saskatchewan
+ "CA", //Z#392 Canada/Yukon
+ "CL", //Z#393 Chile/Continental
+ "CL", //Z#394 Chile/EasterIsland
+ "CU", //Z#395 Cuba
+ "KE", //Z#396 EAT
+ "FR", //Z#397 ECT
+ "001",//Z#398 EET
+ "001",//Z#399 EST
+ "001",//Z#400 EST5EDT
+ "EG", //Z#401 Egypt
+ "IE", //Z#402 Eire
+ "001",//Z#403 Etc/GMT
+ "001",//Z#404 Etc/GMT+0
+ "001",//Z#405 Etc/GMT+1
+ "001",//Z#406 Etc/GMT+10
+ "001",//Z#407 Etc/GMT+11
+ "001",//Z#408 Etc/GMT+12
+ "001",//Z#409 Etc/GMT+2
+ "001",//Z#410 Etc/GMT+3
+ "001",//Z#411 Etc/GMT+4
+ "001",//Z#412 Etc/GMT+5
+ "001",//Z#413 Etc/GMT+6
+ "001",//Z#414 Etc/GMT+7
+ "001",//Z#415 Etc/GMT+8
+ "001",//Z#416 Etc/GMT+9
+ "001",//Z#417 Etc/GMT-0
+ "001",//Z#418 Etc/GMT-1
+ "001",//Z#419 Etc/GMT-10
+ "001",//Z#420 Etc/GMT-11
+ "001",//Z#421 Etc/GMT-12
+ "001",//Z#422 Etc/GMT-13
+ "001",//Z#423 Etc/GMT-14
+ "001",//Z#424 Etc/GMT-2
+ "001",//Z#425 Etc/GMT-3
+ "001",//Z#426 Etc/GMT-4
+ "001",//Z#427 Etc/GMT-5
+ "001",//Z#428 Etc/GMT-6
+ "001",//Z#429 Etc/GMT-7
+ "001",//Z#430 Etc/GMT-8
+ "001",//Z#431 Etc/GMT-9
+ "001",//Z#432 Etc/GMT0
+ "001",//Z#433 Etc/Greenwich
+ "001",//Z#434 Etc/UCT
+ "001",//Z#435 Etc/UTC
+ "001",//Z#436 Etc/Universal
+ "001",//Z#437 Etc/Unknown
+ "001",//Z#438 Etc/Zulu
+ "NL", //Z#439 Europe/Amsterdam
+ "AD", //Z#440 Europe/Andorra
+ "RU", //Z#441 Europe/Astrakhan
+ "GR", //Z#442 Europe/Athens
+ "GB", //Z#443 Europe/Belfast
+ "RS", //Z#444 Europe/Belgrade
+ "DE", //Z#445 Europe/Berlin
+ "SK", //Z#446 Europe/Bratislava
+ "BE", //Z#447 Europe/Brussels
+ "RO", //Z#448 Europe/Bucharest
+ "HU", //Z#449 Europe/Budapest
+ "DE", //Z#450 Europe/Busingen
+ "MD", //Z#451 Europe/Chisinau
+ "DK", //Z#452 Europe/Copenhagen
+ "IE", //Z#453 Europe/Dublin
+ "GI", //Z#454 Europe/Gibraltar
+ "GG", //Z#455 Europe/Guernsey
+ "FI", //Z#456 Europe/Helsinki
+ "IM", //Z#457 Europe/Isle_of_Man
+ "TR", //Z#458 Europe/Istanbul
+ "JE", //Z#459 Europe/Jersey
+ "RU", //Z#460 Europe/Kaliningrad
+ "UA", //Z#461 Europe/Kiev
+ "RU", //Z#462 Europe/Kirov
+ "PT", //Z#463 Europe/Lisbon
+ "SI", //Z#464 Europe/Ljubljana
+ "GB", //Z#465 Europe/London
+ "LU", //Z#466 Europe/Luxembourg
+ "ES", //Z#467 Europe/Madrid
+ "MT", //Z#468 Europe/Malta
+ "AX", //Z#469 Europe/Mariehamn
+ "BY", //Z#470 Europe/Minsk
+ "MC", //Z#471 Europe/Monaco
+ "RU", //Z#472 Europe/Moscow
+ "CY", //Z#473 Europe/Nicosia
+ "NO", //Z#474 Europe/Oslo
+ "FR", //Z#475 Europe/Paris
+ "ME", //Z#476 Europe/Podgorica
+ "CZ", //Z#477 Europe/Prague
+ "LV", //Z#478 Europe/Riga
+ "IT", //Z#479 Europe/Rome
+ "RU", //Z#480 Europe/Samara
+ "SM", //Z#481 Europe/San_Marino
+ "BA", //Z#482 Europe/Sarajevo
+ "RU", //Z#483 Europe/Saratov
+ "UA", //Z#484 Europe/Simferopol
+ "MK", //Z#485 Europe/Skopje
+ "BG", //Z#486 Europe/Sofia
+ "SE", //Z#487 Europe/Stockholm
+ "EE", //Z#488 Europe/Tallinn
+ "AL", //Z#489 Europe/Tirane
+ "MD", //Z#490 Europe/Tiraspol
+ "RU", //Z#491 Europe/Ulyanovsk
+ "UA", //Z#492 Europe/Uzhgorod
+ "LI", //Z#493 Europe/Vaduz
+ "VA", //Z#494 Europe/Vatican
+ "AT", //Z#495 Europe/Vienna
+ "LT", //Z#496 Europe/Vilnius
+ "RU", //Z#497 Europe/Volgograd
+ "PL", //Z#498 Europe/Warsaw
+ "HR", //Z#499 Europe/Zagreb
+ "UA", //Z#500 Europe/Zaporozhye
+ "CH", //Z#501 Europe/Zurich
+ "001",//Z#502 Factory
+ "GB", //Z#503 GB
+ "GB", //Z#504 GB-Eire
+ "001",//Z#505 GMT
+ "001",//Z#506 GMT+0
+ "001",//Z#507 GMT-0
+ "001",//Z#508 GMT0
+ "001",//Z#509 Greenwich
+ "001",//Z#510 HST
+ "HK", //Z#511 Hongkong
+ "US", //Z#512 IET
+ "IN", //Z#513 IST
+ "IS", //Z#514 Iceland
+ "MG", //Z#515 Indian/Antananarivo
+ "IO", //Z#516 Indian/Chagos
+ "CX", //Z#517 Indian/Christmas
+ "CC", //Z#518 Indian/Cocos
+ "KM", //Z#519 Indian/Comoro
+ "TF", //Z#520 Indian/Kerguelen
+ "SC", //Z#521 Indian/Mahe
+ "MV", //Z#522 Indian/Maldives
+ "MU", //Z#523 Indian/Mauritius
+ "YT", //Z#524 Indian/Mayotte
+ "RE", //Z#525 Indian/Reunion
+ "IR", //Z#526 Iran
+ "IL", //Z#527 Israel
+ "JP", //Z#528 JST
+ "JM", //Z#529 Jamaica
+ "JP", //Z#530 Japan
+ "MH", //Z#531 Kwajalein
+ "LY", //Z#532 Libya
+ "001",//Z#533 MET
+ "WS", //Z#534 MIT
+ "001",//Z#535 MST
+ "001",//Z#536 MST7MDT
+ "MX", //Z#537 Mexico/BajaNorte
+ "MX", //Z#538 Mexico/BajaSur
+ "MX", //Z#539 Mexico/General
+ "AM", //Z#540 NET
+ "NZ", //Z#541 NST
+ "NZ", //Z#542 NZ
+ "NZ", //Z#543 NZ-CHAT
+ "US", //Z#544 Navajo
+ "PK", //Z#545 PLT
+ "US", //Z#546 PNT
+ "CN", //Z#547 PRC
+ "PR", //Z#548 PRT
+ "US", //Z#549 PST
+ "001",//Z#550 PST8PDT
+ "WS", //Z#551 Pacific/Apia
+ "NZ", //Z#552 Pacific/Auckland
+ "PG", //Z#553 Pacific/Bougainville
+ "NZ", //Z#554 Pacific/Chatham
+ "FM", //Z#555 Pacific/Chuuk
+ "CL", //Z#556 Pacific/Easter
+ "VU", //Z#557 Pacific/Efate
+ "KI", //Z#558 Pacific/Enderbury
+ "TK", //Z#559 Pacific/Fakaofo
+ "FJ", //Z#560 Pacific/Fiji
+ "TV", //Z#561 Pacific/Funafuti
+ "EC", //Z#562 Pacific/Galapagos
+ "PF", //Z#563 Pacific/Gambier
+ "SB", //Z#564 Pacific/Guadalcanal
+ "GU", //Z#565 Pacific/Guam
+ "US", //Z#566 Pacific/Honolulu
+ "UM", //Z#567 Pacific/Johnston
+ "KI", //Z#568 Pacific/Kiritimati
+ "FM", //Z#569 Pacific/Kosrae
+ "MH", //Z#570 Pacific/Kwajalein
+ "MH", //Z#571 Pacific/Majuro
+ "PF", //Z#572 Pacific/Marquesas
+ "UM", //Z#573 Pacific/Midway
+ "NR", //Z#574 Pacific/Nauru
+ "NU", //Z#575 Pacific/Niue
+ "NF", //Z#576 Pacific/Norfolk
+ "NC", //Z#577 Pacific/Noumea
+ "AS", //Z#578 Pacific/Pago_Pago
+ "PW", //Z#579 Pacific/Palau
+ "PN", //Z#580 Pacific/Pitcairn
+ "FM", //Z#581 Pacific/Pohnpei
+ "FM", //Z#582 Pacific/Ponape
+ "PG", //Z#583 Pacific/Port_Moresby
+ "CK", //Z#584 Pacific/Rarotonga
+ "MP", //Z#585 Pacific/Saipan
+ "AS", //Z#586 Pacific/Samoa
+ "PF", //Z#587 Pacific/Tahiti
+ "KI", //Z#588 Pacific/Tarawa
+ "TO", //Z#589 Pacific/Tongatapu
+ "FM", //Z#590 Pacific/Truk
+ "UM", //Z#591 Pacific/Wake
+ "WF", //Z#592 Pacific/Wallis
+ "FM", //Z#593 Pacific/Yap
+ "PL", //Z#594 Poland
+ "PT", //Z#595 Portugal
+ "TW", //Z#596 ROC
+ "KR", //Z#597 ROK
+ "SB", //Z#598 SST
+ "SG", //Z#599 Singapore
+ "001",//Z#600 SystemV/AST4
+ "001",//Z#601 SystemV/AST4ADT
+ "001",//Z#602 SystemV/CST6
+ "001",//Z#603 SystemV/CST6CDT
+ "001",//Z#604 SystemV/EST5
+ "001",//Z#605 SystemV/EST5EDT
+ "001",//Z#606 SystemV/HST10
+ "001",//Z#607 SystemV/MST7
+ "001",//Z#608 SystemV/MST7MDT
+ "001",//Z#609 SystemV/PST8
+ "001",//Z#610 SystemV/PST8PDT
+ "001",//Z#611 SystemV/YST9
+ "001",//Z#612 SystemV/YST9YDT
+ "TR", //Z#613 Turkey
+ "001",//Z#614 UCT
+ "US", //Z#615 US/Alaska
+ "US", //Z#616 US/Aleutian
+ "US", //Z#617 US/Arizona
+ "US", //Z#618 US/Central
+ "US", //Z#619 US/East-Indiana
+ "US", //Z#620 US/Eastern
+ "US", //Z#621 US/Hawaii
+ "US", //Z#622 US/Indiana-Starke
+ "US", //Z#623 US/Michigan
+ "US", //Z#624 US/Mountain
+ "US", //Z#625 US/Pacific
+ "US", //Z#626 US/Pacific-New
+ "AS", //Z#627 US/Samoa
+ "001",//Z#628 UTC
+ "001",//Z#629 Universal
+ "VN", //Z#630 VST
+ "RU", //Z#631 W-SU
+ "001",//Z#632 WET
+ "001",//Z#633 Zulu
}
}
diff --git a/intl/update-icu.sh b/intl/update-icu.sh
index 62af808ae..4983b6670 100755
--- a/intl/update-icu.sh
+++ b/intl/update-icu.sh
@@ -5,26 +5,44 @@
set -e
-# Usage: update-icu.sh <URL of ICU SVN with release>
-# E.g., for ICU 58.1: update-icu.sh https://ssl.icu-project.org/repos/icu/icu/tags/release-58-1/
+# Update to an ICU release:
+# Usage: update-icu.sh <URL of ICU GIT> <release tag name>
+# E.g., for ICU 62.1: update-icu.sh https://github.com/unicode-org/icu.git release-62-1
+#
+# Update to an ICU maintenance branch:
+# Usage: update-icu.sh <URL of ICU GIT> <maintenance name>
+# E.g., for ICU 62.1: update-icu.sh https://github.com/unicode-org/icu.git maint/maint-62
-if [ $# -lt 1 ]; then
- echo "Usage: update-icu.sh <URL of ICU SVN with release>"
+if [ $# -lt 2 ]; then
+ echo "Usage: update-icu.sh <URL of ICU GIT> <release tag name>"
exit 1
fi
-# Ensure that $Date$ in the checked-out svn files expands timezone-agnostically,
+# Ensure that $Date$ in the checked-out git files expands timezone-agnostically,
# so that this script's behavior is consistent when run from any time zone.
export TZ=UTC
-# Also ensure SVN-INFO isn't localized.
-export LANG=C
+# Also ensure GIT-INFO is consistently English.
+export LANG=en_US.UTF-8
+export LANGUAGE=en_US
+export LC_ALL=en_US.UTF-8
icu_dir=`dirname $0`/icu
# Remove intl/icu/source, then replace it with a clean export.
rm -rf ${icu_dir}/source
-svn export $1/source/ ${icu_dir}/source
+tmpclonedir=$(mktemp -d)
+git clone --depth 1 --branch $2 $1 ${tmpclonedir}
+cp -r ${tmpclonedir}/icu4c/source ${icu_dir}/source
+
+# Record `git log`.
+# (This ensures that if ICU modifications are performed properly, it's always
+# possible to run the command at the top of this script and make no changes to
+# the tree.)
+git -C ${tmpclonedir} log -1 > ${icu_dir}/GIT-INFO
+
+# Clean up after ourselves.
+rm -rf ${tmpclonedir}
# remove layoutex, tests, and samples, but leave makefiles in place
find ${icu_dir}/source/layoutex -name '*Makefile.in' -prune -or -type f -print | xargs rm
@@ -47,13 +65,6 @@ rm ${icu_dir}/source/data/translit/*
rm ${icu_dir}/source/data/unit/*.mk
rm ${icu_dir}/source/data/unit/*.txt
-# Record `svn info`, eliding the line that changes every time the entire ICU
-# repository (not just the path within it we care about) receives a commit.
-# (This ensures that if ICU modifications are performed properly, it's always
-# possible to run the command at the top of this script and make no changes to
-# the tree.)
-svn info $1 | grep -v '^Revision: [[:digit:]]\+$' > ${icu_dir}/SVN-INFO
-
for patch in \
bug-915735 \
suppress-warnings.diff \
@@ -73,7 +84,7 @@ python ${topsrcdir}/js/src/tests/ecma_6/String/make-normalize-generateddata-inpu
# build a new ICU data file.
python `dirname $0`/icu_sources_data.py $topsrcdir
-hg addremove ${icu_dir} ${topsrcdir}/config/external/icu
+#hg addremove ${icu_dir} ${topsrcdir}/config/external/icu
# Check local tzdata version.
`dirname $0`/update-tzdata.sh -c
diff --git a/intl/update-tzdata.sh b/intl/update-tzdata.sh
index 93b973a7d..03a7ac5f4 100755
--- a/intl/update-tzdata.sh
+++ b/intl/update-tzdata.sh
@@ -8,18 +8,20 @@ set -e
# Usage: update-tzdata.sh <tzdata version>
# E.g., for tzdata2016f: update-tzdata.sh 2016f
-# Ensure that $Date$ in the checked-out svn files expands timezone-agnostically,
+# Ensure that $Date$ in the checked-out git files expands timezone-agnostically,
# so that this script's behavior is consistent when run from any time zone.
export TZ=UTC
-# Also ensure SVN-INFO isn't localized.
-export LANG=C
+# Also ensure GIT-INFO is consistently English.
+export LANG=en_US.UTF-8
+export LANGUAGE=en_US
+export LC_ALL=en_US.UTF-8
# Path to icupkg executable, typically located at $ICU_DIR/bin/icupkg.
icu_pkg=
# Force updates even when current tzdata is newer than the requested version.
force=false
-# Dry run, doesn't run 'svn export' and 'icupkg'.
+# Dry run, doesn't run 'git clone' and 'icupkg'.
dry=false
# Compare ICU and local tzdata versions (used by update-icu.sh).
check_version=false
@@ -49,11 +51,11 @@ icudata_dir=`dirname "$0"`/../config/external/icu/data
icu_dir=`dirname "$0"`/icu
tzdata_dir=`dirname "$0"`/tzdata
tzdata_files="${tzdata_dir}"/files.txt
-tzdata_url=https://ssl.icu-project.org/repos/icu/data/trunk/tzdata/icunew/${tzdata_version}/44/
+tzdata_url=https://github.com/unicode-org/icu-data.git
icu_tzdata_version=`grep --only-matching --perl-regexp --regexp="tz version:\s+\K.*$" "${icu_dir}"/source/data/misc/zoneinfo64.txt`
local_tzdata_version=
-if [ -f "${tzdata_dir}"/SVN-INFO ]; then
- local_tzdata_version=`grep --only-matching --perl-regexp --regexp="^URL: .*tzdata/icunew/\K[0-9a-z]+" "${tzdata_dir}"/SVN-INFO`
+if [ -f "${tzdata_dir}"/VERSION ]; then
+ local_tzdata_version=`grep --only-matching --perl-regexp --regexp="^\K[0-9a-z]+" "${tzdata_dir}"/VERSION`
fi
# Check ICU and current local tzdata versions.
@@ -118,20 +120,21 @@ else
echo "INFO: ICU data file (big endian) not found, skipping..."
fi
-# Retrieve tzdata from svn.
+# Retrieve tzdata from git.
if [ $dry = false ]; then
echo "INFO: Downloading tzdata${tzdata_version}"
# Remove intl/tzdata/source, then replace it with a clean export.
rm -r "${tzdata_dir}"/source
- svn export "${tzdata_url}" "${tzdata_dir}"/source
-fi
+ git clone --depth 1 "${tzdata_url}" "${tzdata_dir}"/source
+ git -C "${tzdata_dir}"/source filter-branch --prune-empty --subdirectory-filter tzdata/icunew/${tzdata_version}/44 HEAD
-# Record `svn info`, eliding the line that changes every time the entire ICU
-# tzdata repository (not just the path within it we care about) receives a
-# commit.
-if [ $dry = false ]; then
- svn info "${tzdata_url}" | grep --invert-match '^Revision: [[:digit:]]\+$' > "${tzdata_dir}"/SVN-INFO
+ # Record `git log` and the tzdata version.
+ git -C "${tzdata_dir}"/source log -1 > "${tzdata_dir}"/GIT-INFO
+ echo "${tzdata_version}" > "${tzdata_dir}"/VERSION
+
+ # Remove the .git directory.
+ rm -rf "${tzdata_dir}"/source/.git
fi
# Update ICU data.
@@ -161,11 +164,6 @@ if [ $dry = false ]; then
update_icu_data "be" "${icudata_file_be}"
fi
- hg addremove "${tzdata_dir}" "${icudata_file_le}"
- if [ -n "${icudata_file_be}" ]; then
- hg addremove "${icudata_file_be}"
- fi
-
echo "INFO: Successfully updated tzdata!"
- echo "INFO: Please run js/src/builtin/make_intl_data.py to update additional time zone files for SpiderMonkey."
+ echo "INFO: Please run js/src/builtin/intl/make_intl_data.py to update additional time zone files for SpiderMonkey."
fi
diff --git a/js/ipc/JavaScriptParent.cpp b/js/ipc/JavaScriptParent.cpp
index 6cf9e0591..aafd7f565 100644
--- a/js/ipc/JavaScriptParent.cpp
+++ b/js/ipc/JavaScriptParent.cpp
@@ -9,6 +9,7 @@
#include "mozilla/dom/ContentParent.h"
#include "mozilla/dom/ScriptSettings.h"
#include "nsJSUtils.h"
+#include "nsIScriptError.h"
#include "jsfriendapi.h"
#include "jswrapper.h"
#include "js/Proxy.h"
diff --git a/js/public/CallArgs.h b/js/public/CallArgs.h
index a7774309a..aae7121ad 100644
--- a/js/public/CallArgs.h
+++ b/js/public/CallArgs.h
@@ -128,7 +128,10 @@ class MOZ_STACK_CLASS CallArgsBase : public WantUsedRval
protected:
Value* argv_;
unsigned argc_;
- bool constructing_;
+ bool constructing_:1;
+
+ // True if the caller does not use the return value.
+ bool ignoresReturnValue_:1;
public:
// CALLEE ACCESS
@@ -164,6 +167,10 @@ class MOZ_STACK_CLASS CallArgsBase : public WantUsedRval
return true;
}
+ bool ignoresReturnValue() const {
+ return ignoresReturnValue_;
+ }
+
MutableHandleValue newTarget() const {
MOZ_ASSERT(constructing_);
return MutableHandleValue::fromMarkedLocation(&this->argv_[argc_]);
@@ -280,14 +287,17 @@ class MOZ_STACK_CLASS CallArgs : public detail::CallArgsBase<detail::IncludeUsed
{
private:
friend CallArgs CallArgsFromVp(unsigned argc, Value* vp);
- friend CallArgs CallArgsFromSp(unsigned stackSlots, Value* sp, bool constructing);
+ friend CallArgs CallArgsFromSp(unsigned stackSlots, Value* sp, bool constructing,
+ bool ignoresReturnValue);
- static CallArgs create(unsigned argc, Value* argv, bool constructing) {
+ static CallArgs create(unsigned argc, Value* argv, bool constructing,
+ bool ignoresReturnValue = false) {
CallArgs args;
args.clearUsedRval();
args.argv_ = argv;
args.argc_ = argc;
args.constructing_ = constructing;
+ args.ignoresReturnValue_ = ignoresReturnValue;
#ifdef DEBUG
for (unsigned i = 0; i < argc; ++i)
MOZ_ASSERT_IF(argv[i].isGCThing(), !GCThingIsMarkedGray(GCCellPtr(argv[i])));
@@ -314,9 +324,11 @@ CallArgsFromVp(unsigned argc, Value* vp)
// eventually move it to an internal header. Embedders should use
// JS::CallArgsFromVp!
MOZ_ALWAYS_INLINE CallArgs
-CallArgsFromSp(unsigned stackSlots, Value* sp, bool constructing = false)
+CallArgsFromSp(unsigned stackSlots, Value* sp, bool constructing = false,
+ bool ignoresReturnValue = false)
{
- return CallArgs::create(stackSlots - constructing, sp - stackSlots, constructing);
+ return CallArgs::create(stackSlots - constructing, sp - stackSlots, constructing,
+ ignoresReturnValue);
}
} // namespace JS
diff --git a/js/src/builtin/AtomicsObject.cpp b/js/src/builtin/AtomicsObject.cpp
index 2551f3b7d..ceee83349 100644
--- a/js/src/builtin/AtomicsObject.cpp
+++ b/js/src/builtin/AtomicsObject.cpp
@@ -834,7 +834,7 @@ js::atomics_wait(JSContext* cx, unsigned argc, Value* vp)
}
bool
-js::atomics_wake(JSContext* cx, unsigned argc, Value* vp)
+js::atomics_notify(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
HandleValue objv = args.get(0);
@@ -874,7 +874,7 @@ js::atomics_wake(JSContext* cx, unsigned argc, Value* vp)
iter = iter->lower_pri;
if (c->offset != offset || !c->rt->fx.isWaiting())
continue;
- c->rt->fx.wake(FutexRuntime::WakeExplicit);
+ c->rt->fx.notify(FutexRuntime::NotifyExplicit);
++woken;
--count;
} while (count > 0 && iter != waiters);
@@ -950,7 +950,7 @@ js::FutexRuntime::isWaiting()
// When a worker is awoken for an interrupt it goes into state
// WaitingNotifiedForInterrupt for a short time before it actually
// wakes up and goes into WaitingInterrupted. In those states the
- // worker is still waiting, and if an explicit wake arrives the
+ // worker is still waiting, and if an explicit notify arrives the
// worker transitions to Woken. See further comments in
// FutexRuntime::wait().
return state_ == Waiting || state_ == WaitingInterrupted || state_ == WaitingNotifiedForInterrupt;
@@ -1029,14 +1029,14 @@ js::FutexRuntime::wait(JSContext* cx, js::UniqueLock<js::Mutex>& locked,
// should be woken when the interrupt handler returns.
// To that end, we flag the thread as interrupted around
// the interrupt and check state_ when the interrupt
- // handler returns. A wake() call that reaches the
+ // handler returns. A notify() call that reaches the
// runtime during the interrupt sets state_ to Woken.
//
// - It is in principle possible for wait() to be
// reentered on the same thread/runtime and waiting on the
// same location and to yet again be interrupted and enter
// the interrupt handler. In this case, it is important
- // that when another agent wakes waiters, all waiters using
+ // that when another agent notifies waiters, all waiters using
// the same runtime on the same location are woken in LIFO
// order; FIFO may be the required order, but FIFO would
// fail to wake up the innermost call. Interrupts are
@@ -1073,25 +1073,25 @@ finished:
}
void
-js::FutexRuntime::wake(WakeReason reason)
+js::FutexRuntime::notify(NotifyReason reason)
{
MOZ_ASSERT(isWaiting());
- if ((state_ == WaitingInterrupted || state_ == WaitingNotifiedForInterrupt) && reason == WakeExplicit) {
+ if ((state_ == WaitingInterrupted || state_ == WaitingNotifiedForInterrupt) && reason == NotifyExplicit) {
state_ = Woken;
return;
}
switch (reason) {
- case WakeExplicit:
+ case NotifyExplicit:
state_ = Woken;
break;
- case WakeForJSInterrupt:
+ case NotifyForJSInterrupt:
if (state_ == WaitingNotifiedForInterrupt)
return;
state_ = WaitingNotifiedForInterrupt;
break;
default:
- MOZ_CRASH("bad WakeReason in FutexRuntime::wake()");
+ MOZ_CRASH("bad NotifyReason in FutexRuntime::notify()");
}
cond_->notify_all();
}
@@ -1108,7 +1108,8 @@ const JSFunctionSpec AtomicsMethods[] = {
JS_INLINABLE_FN("xor", atomics_xor, 3,0, AtomicsXor),
JS_INLINABLE_FN("isLockFree", atomics_isLockFree, 1,0, AtomicsIsLockFree),
JS_FN("wait", atomics_wait, 4,0),
- JS_FN("wake", atomics_wake, 3,0),
+ JS_FN("notify", atomics_notify, 3,0),
+ JS_FN("wake", atomics_notify, 3,0), //Legacy name
JS_FS_END
};
@@ -1116,7 +1117,7 @@ JSObject*
AtomicsObject::initClass(JSContext* cx, Handle<GlobalObject*> global)
{
// Create Atomics Object.
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!objProto)
return nullptr;
RootedObject Atomics(cx, NewObjectWithGivenProto(cx, &AtomicsObject::class_, objProto,
diff --git a/js/src/builtin/AtomicsObject.h b/js/src/builtin/AtomicsObject.h
index adb6fb986..6511dc8bf 100644
--- a/js/src/builtin/AtomicsObject.h
+++ b/js/src/builtin/AtomicsObject.h
@@ -36,7 +36,7 @@ MOZ_MUST_USE bool atomics_or(JSContext* cx, unsigned argc, Value* vp);
MOZ_MUST_USE bool atomics_xor(JSContext* cx, unsigned argc, Value* vp);
MOZ_MUST_USE bool atomics_isLockFree(JSContext* cx, unsigned argc, Value* vp);
MOZ_MUST_USE bool atomics_wait(JSContext* cx, unsigned argc, Value* vp);
-MOZ_MUST_USE bool atomics_wake(JSContext* cx, unsigned argc, Value* vp);
+MOZ_MUST_USE bool atomics_notify(JSContext* cx, unsigned argc, Value* vp);
/* asm.js callouts */
namespace wasm { class Instance; }
@@ -63,10 +63,10 @@ public:
MOZ_MUST_USE bool initInstance();
void destroyInstance();
- // Parameters to wake().
- enum WakeReason {
- WakeExplicit, // Being asked to wake up by another thread
- WakeForJSInterrupt // Interrupt requested
+ // Parameters to notify().
+ enum NotifyReason {
+ NotifyExplicit, // Being asked to wake up by another thread
+ NotifyForJSInterrupt // Interrupt requested
};
// Result code from wait().
@@ -83,29 +83,27 @@ public:
// times allowed; specify mozilla::Nothing() for an indefinite
// wait.
//
- // wait() will not wake up spuriously. It will return true and
- // set *result to a return code appropriate for
- // Atomics.wait() on success, and return false on error.
+ // wait() will not wake up spuriously.
MOZ_MUST_USE bool wait(JSContext* cx, js::UniqueLock<js::Mutex>& locked,
mozilla::Maybe<mozilla::TimeDuration>& timeout, WaitResult* result);
- // Wake the thread represented by this Runtime.
+ // Notify the thread represented by this Runtime.
//
// The futex lock must be held around this call. (The sleeping
- // thread will not wake up until the caller of Atomics.wake()
+ // thread will not wake up until the caller of Atomics.notify()
// releases the lock.)
//
// If the thread is not waiting then this method does nothing.
//
// If the thread is waiting in a call to wait() and the
- // reason is WakeExplicit then the wait() call will return
+ // reason is NotifyExplicit then the wait() call will return
// with Woken.
//
// If the thread is waiting in a call to wait() and the
- // reason is WakeForJSInterrupt then the wait() will return
+ // reason is NotifyForJSInterrupt then the wait() will return
// with WaitingNotifiedForInterrupt; in the latter case the caller
// of wait() must handle the interrupt.
- void wake(WakeReason reason);
+ void notify(NotifyReason reason);
bool isWaiting();
@@ -128,7 +126,7 @@ public:
// interrupt handler
WaitingInterrupted, // We are waiting, but have been interrupted
// and are running the interrupt handler
- Woken // Woken by a script call to Atomics.wake
+ Woken // Woken by a script call to Atomics.notify
};
// Condition variable that this runtime will wait on.
diff --git a/js/src/builtin/Intl.cpp b/js/src/builtin/Intl.cpp
index 71f7b58d4..0cd0c62dd 100644
--- a/js/src/builtin/Intl.cpp
+++ b/js/src/builtin/Intl.cpp
@@ -270,7 +270,7 @@ Collator(JSContext* cx, const CallArgs& args, bool construct)
// See https://github.com/tc39/ecma402/issues/57
if (!construct) {
// ES Intl 1st ed., 10.1.2.1 step 3
- JSObject* intl = cx->global()->getOrCreateIntlObject(cx);
+ JSObject* intl = GlobalObject::getOrCreateIntlObject(cx, cx->global());
if (!intl)
return false;
RootedValue self(cx, args.thisv());
@@ -298,7 +298,7 @@ Collator(JSContext* cx, const CallArgs& args, bool construct)
return false;
if (!proto) {
- proto = cx->global()->getOrCreateCollatorPrototype(cx);
+ proto = GlobalObject::getOrCreateCollatorPrototype(cx, cx->global());
if (!proto)
return false;
}
@@ -358,11 +358,12 @@ collator_finalize(FreeOp* fop, JSObject* obj)
static JSObject*
CreateCollatorPrototype(JSContext* cx, HandleObject Intl, Handle<GlobalObject*> global)
{
- RootedFunction ctor(cx, global->createConstructor(cx, &Collator, cx->names().Collator, 0));
+ RootedFunction ctor(cx, GlobalObject::createConstructor(cx, &Collator, cx->names().Collator,
+ 0));
if (!ctor)
return nullptr;
- RootedNativeObject proto(cx, global->createBlankPrototype(cx, &CollatorClass));
+ RootedNativeObject proto(cx, GlobalObject::createBlankPrototype(cx, global, &CollatorClass));
if (!proto)
return nullptr;
proto->setReservedSlot(UCOLLATOR_SLOT, PrivateValue(nullptr));
@@ -772,7 +773,7 @@ NumberFormat(JSContext* cx, const CallArgs& args, bool construct)
// See https://github.com/tc39/ecma402/issues/57
if (!construct) {
// ES Intl 1st ed., 11.1.2.1 step 3
- JSObject* intl = cx->global()->getOrCreateIntlObject(cx);
+ JSObject* intl = GlobalObject::getOrCreateIntlObject(cx, cx->global());
if (!intl)
return false;
RootedValue self(cx, args.thisv());
@@ -800,7 +801,7 @@ NumberFormat(JSContext* cx, const CallArgs& args, bool construct)
return false;
if (!proto) {
- proto = cx->global()->getOrCreateNumberFormatPrototype(cx);
+ proto = GlobalObject::getOrCreateNumberFormatPrototype(cx, cx->global());
if (!proto)
return false;
}
@@ -862,11 +863,12 @@ static JSObject*
CreateNumberFormatPrototype(JSContext* cx, HandleObject Intl, Handle<GlobalObject*> global)
{
RootedFunction ctor(cx);
- ctor = global->createConstructor(cx, &NumberFormat, cx->names().NumberFormat, 0);
+ ctor = GlobalObject::createConstructor(cx, &NumberFormat, cx->names().NumberFormat, 0);
if (!ctor)
return nullptr;
- RootedNativeObject proto(cx, global->createBlankPrototype(cx, &NumberFormatClass));
+ RootedNativeObject proto(cx, GlobalObject::createBlankPrototype(cx, global,
+ &NumberFormatClass));
if (!proto)
return nullptr;
proto->setReservedSlot(UNUMBER_FORMAT_SLOT, PrivateValue(nullptr));
@@ -1250,7 +1252,7 @@ DateTimeFormat(JSContext* cx, const CallArgs& args, bool construct)
// See https://github.com/tc39/ecma402/issues/57
if (!construct) {
// ES Intl 1st ed., 12.1.2.1 step 3
- JSObject* intl = cx->global()->getOrCreateIntlObject(cx);
+ JSObject* intl = GlobalObject::getOrCreateIntlObject(cx, cx->global());
if (!intl)
return false;
RootedValue self(cx, args.thisv());
@@ -1278,7 +1280,7 @@ DateTimeFormat(JSContext* cx, const CallArgs& args, bool construct)
return false;
if (!proto) {
- proto = cx->global()->getOrCreateDateTimeFormatPrototype(cx);
+ proto = GlobalObject::getOrCreateDateTimeFormatPrototype(cx, cx->global());
if (!proto)
return false;
}
@@ -1340,11 +1342,12 @@ static JSObject*
CreateDateTimeFormatPrototype(JSContext* cx, HandleObject Intl, Handle<GlobalObject*> global)
{
RootedFunction ctor(cx);
- ctor = global->createConstructor(cx, &DateTimeFormat, cx->names().DateTimeFormat, 0);
+ ctor = GlobalObject::createConstructor(cx, &DateTimeFormat, cx->names().DateTimeFormat, 0);
if (!ctor)
return nullptr;
- RootedNativeObject proto(cx, global->createBlankPrototype(cx, &DateTimeFormatClass));
+ RootedNativeObject proto(cx, GlobalObject::createBlankPrototype(cx, global,
+ &DateTimeFormatClass));
if (!proto)
return nullptr;
proto->setReservedSlot(UDATE_FORMAT_SLOT, PrivateValue(nullptr));
@@ -2731,10 +2734,10 @@ static const JSFunctionSpec intl_static_methods[] = {
* Initializes the Intl Object and its standard built-in properties.
* Spec: ECMAScript Internationalization API Specification, 8.0, 8.1
*/
-bool
+/* static */ bool
GlobalObject::initIntlObject(JSContext* cx, Handle<GlobalObject*> global)
{
- RootedObject proto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!proto)
return false;
diff --git a/js/src/builtin/IntlTimeZoneData.h b/js/src/builtin/IntlTimeZoneData.h
index fa808c0b9..8f963ffbc 100644
--- a/js/src/builtin/IntlTimeZoneData.h
+++ b/js/src/builtin/IntlTimeZoneData.h
@@ -1,5 +1,5 @@
// Generated by make_intl_data.py. DO NOT EDIT.
-// tzdata version = 2018e
+// tzdata version = 2019a
#ifndef builtin_IntlTimeZoneData_h
#define builtin_IntlTimeZoneData_h
diff --git a/js/src/builtin/MapObject.cpp b/js/src/builtin/MapObject.cpp
index c496cfb77..34e2e566d 100644
--- a/js/src/builtin/MapObject.cpp
+++ b/js/src/builtin/MapObject.cpp
@@ -164,7 +164,7 @@ MapIteratorObject::kind() const
return MapObject::IteratorKind(i);
}
-bool
+/* static */ bool
GlobalObject::initMapIteratorProto(JSContext* cx, Handle<GlobalObject*> global)
{
Rooted<JSObject*> base(cx, GlobalObject::getOrCreateIteratorPrototype(cx, global));
@@ -924,7 +924,7 @@ SetIteratorObject::kind() const
return SetObject::IteratorKind(i);
}
-bool
+/* static */ bool
GlobalObject::initSetIteratorProto(JSContext* cx, Handle<GlobalObject*> global)
{
Rooted<JSObject*> base(cx, GlobalObject::getOrCreateIteratorPrototype(cx, global));
diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp
index 710c7a76c..798ef46e1 100644
--- a/js/src/builtin/ModuleObject.cpp
+++ b/js/src/builtin/ModuleObject.cpp
@@ -103,7 +103,7 @@ GlobalObject::initImportEntryProto(JSContext* cx, Handle<GlobalObject*> global)
JS_PS_END
};
- RootedObject proto(cx, global->createBlankPrototype<PlainObject>(cx));
+ RootedObject proto(cx, GlobalObject::createBlankPrototype<PlainObject>(cx, global));
if (!proto)
return false;
@@ -169,7 +169,7 @@ GlobalObject::initExportEntryProto(JSContext* cx, Handle<GlobalObject*> global)
JS_PS_END
};
- RootedObject proto(cx, global->createBlankPrototype<PlainObject>(cx));
+ RootedObject proto(cx, GlobalObject::createBlankPrototype<PlainObject>(cx, global));
if (!proto)
return false;
@@ -788,7 +788,7 @@ AssertModuleScopesMatch(ModuleObject* module)
}
void
-ModuleObject::fixEnvironmentsAfterCompartmentMerge(JSContext* cx)
+ModuleObject::fixEnvironmentsAfterCompartmentMerge()
{
AssertModuleScopesMatch(this);
initialEnvironment().fixEnclosingEnvironmentAfterCompartmentMerge(script()->global());
@@ -947,7 +947,7 @@ ModuleObject::evaluate(JSContext* cx, HandleModuleObject self, MutableHandleValu
ModuleObject::createNamespace(JSContext* cx, HandleModuleObject self, HandleObject exports)
{
MOZ_ASSERT(!self->namespace_());
- MOZ_ASSERT(exports->is<ArrayObject>() || exports->is<UnboxedArrayObject>());
+ MOZ_ASSERT(exports->is<ArrayObject>());
RootedModuleNamespaceObject ns(cx, ModuleNamespaceObject::create(cx, self));
if (!ns)
@@ -1020,7 +1020,7 @@ GlobalObject::initModuleProto(JSContext* cx, Handle<GlobalObject*> global)
JS_FS_END
};
- RootedObject proto(cx, global->createBlankPrototype<PlainObject>(cx));
+ RootedObject proto(cx, GlobalObject::createBlankPrototype<PlainObject>(cx, global));
if (!proto)
return false;
diff --git a/js/src/builtin/ModuleObject.h b/js/src/builtin/ModuleObject.h
index d0ed8ed08..e83520ebe 100644
--- a/js/src/builtin/ModuleObject.h
+++ b/js/src/builtin/ModuleObject.h
@@ -244,7 +244,7 @@ class ModuleObject : public NativeObject
#ifdef DEBUG
static bool IsFrozen(JSContext* cx, HandleModuleObject self);
#endif
- void fixEnvironmentsAfterCompartmentMerge(JSContext* cx);
+ void fixEnvironmentsAfterCompartmentMerge();
JSScript* script() const;
Scope* enclosingScope() const;
diff --git a/js/src/builtin/Object.cpp b/js/src/builtin/Object.cpp
index 389bb57db..56c77f304 100644
--- a/js/src/builtin/Object.cpp
+++ b/js/src/builtin/Object.cpp
@@ -525,18 +525,6 @@ js::obj_toString(JSContext* cx, unsigned argc, Value* vp)
return true;
}
-
-bool
-js::obj_valueOf(JSContext* cx, unsigned argc, Value* vp)
-{
- CallArgs args = CallArgsFromVp(argc, vp);
- RootedObject obj(cx, ToObject(cx, args.thisv()));
- if (!obj)
- return false;
- args.rval().setObject(*obj);
- return true;
-}
-
static bool
obj_setPrototypeOf(JSContext* cx, unsigned argc, Value* vp)
{
@@ -1301,7 +1289,7 @@ static const JSFunctionSpec object_methods[] = {
#endif
JS_FN(js_toString_str, obj_toString, 0,0),
JS_SELF_HOSTED_FN(js_toLocaleString_str, "Object_toLocaleString", 0, 0),
- JS_FN(js_valueOf_str, obj_valueOf, 0,0),
+ JS_SELF_HOSTED_FN(js_valueOf_str, "Object_valueOf", 0,0),
#if JS_HAS_OBJ_WATCHPOINT
JS_FN(js_watch_str, obj_watch, 2,0),
JS_FN(js_unwatch_str, obj_unwatch, 1,0),
@@ -1420,8 +1408,8 @@ FinishObjectClassInit(JSContext* cx, JS::HandleObject ctor, JS::HandleObject pro
* only set the [[Prototype]] if it hasn't already been set.
*/
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
- if (global->shouldSplicePrototype(cx)) {
- if (!global->splicePrototype(cx, global->getClass(), tagged))
+ if (global->shouldSplicePrototype()) {
+ if (!JSObject::splicePrototype(cx, global, global->getClass(), tagged))
return false;
}
return true;
diff --git a/js/src/builtin/Object.h b/js/src/builtin/Object.h
index 09512be36..8231888b1 100644
--- a/js/src/builtin/Object.h
+++ b/js/src/builtin/Object.h
@@ -25,9 +25,6 @@ obj_construct(JSContext* cx, unsigned argc, JS::Value* vp);
MOZ_MUST_USE bool
obj_propertyIsEnumerable(JSContext* cx, unsigned argc, Value* vp);
-MOZ_MUST_USE bool
-obj_valueOf(JSContext* cx, unsigned argc, JS::Value* vp);
-
PlainObject*
ObjectCreateImpl(JSContext* cx, HandleObject proto, NewObjectKind newKind = GenericObject,
HandleObjectGroup group = nullptr);
diff --git a/js/src/builtin/Object.js b/js/src/builtin/Object.js
index a7440aec7..9ed1be0e1 100644
--- a/js/src/builtin/Object.js
+++ b/js/src/builtin/Object.js
@@ -87,6 +87,12 @@ function Object_toLocaleString() {
return callContentFunction(O.toString, O);
}
+// ES 2017 draft bb96899bb0d9ef9be08164a26efae2ee5f25e875 19.1.3.7
+function Object_valueOf() {
+ // Step 1.
+ return ToObject(this);
+}
+
// ES7 draft (2016 March 8) B.2.2.3
function ObjectDefineSetter(name, setter) {
// Step 1.
diff --git a/js/src/builtin/Promise.cpp b/js/src/builtin/Promise.cpp
index c781a336d..ec7845e89 100644
--- a/js/src/builtin/Promise.cpp
+++ b/js/src/builtin/Promise.cpp
@@ -603,7 +603,7 @@ ResolvePromise(JSContext* cx, Handle<PromiseObject*> promise, HandleValue valueO
// Now that everything else is done, do the things the debugger needs.
// Step 7 of RejectPromise implemented in onSettled.
- promise->onSettled(cx);
+ PromiseObject::onSettled(cx, promise);
// Step 7 of FulfillPromise.
// Step 8 of RejectPromise.
@@ -1947,26 +1947,23 @@ PerformPromiseRace(JSContext *cx, JS::ForOfIterator& iterator, HandleObject C,
}
// ES2016, Sub-steps of 25.4.4.4 and 25.4.4.5.
-static MOZ_MUST_USE bool
-CommonStaticResolveRejectImpl(JSContext* cx, unsigned argc, Value* vp, ResolutionMode mode)
+static MOZ_MUST_USE JSObject*
+CommonStaticResolveRejectImpl(JSContext* cx, HandleValue thisVal, HandleValue argVal,
+ ResolutionMode mode)
{
- CallArgs args = CallArgsFromVp(argc, vp);
- RootedValue x(cx, args.get(0));
-
// Steps 1-2.
- if (!args.thisv().isObject()) {
+ if (!thisVal.isObject()) {
const char* msg = mode == ResolveMode
? "Receiver of Promise.resolve call"
: "Receiver of Promise.reject call";
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_NOT_NONNULL_OBJECT, msg);
- return false;
+ return nullptr;
}
- RootedValue cVal(cx, args.thisv());
- RootedObject C(cx, &cVal.toObject());
+ RootedObject C(cx, &thisVal.toObject());
// Step 3 of Resolve.
- if (mode == ResolveMode && x.isObject()) {
- RootedObject xObj(cx, &x.toObject());
+ if (mode == ResolveMode && argVal.isObject()) {
+ RootedObject xObj(cx, &argVal.toObject());
bool isPromise = false;
if (xObj->is<PromiseObject>()) {
isPromise = true;
@@ -1985,11 +1982,9 @@ CommonStaticResolveRejectImpl(JSContext* cx, unsigned argc, Value* vp, Resolutio
if (isPromise) {
RootedValue ctorVal(cx);
if (!GetProperty(cx, xObj, xObj, cx->names().constructor, &ctorVal))
- return false;
- if (ctorVal == cVal) {
- args.rval().set(x);
- return true;
- }
+ return nullptr;
+ if (ctorVal == thisVal)
+ return xObj;
}
}
@@ -1998,15 +1993,17 @@ CommonStaticResolveRejectImpl(JSContext* cx, unsigned argc, Value* vp, Resolutio
RootedObject resolveFun(cx);
RootedObject rejectFun(cx);
if (!NewPromiseCapability(cx, C, &promise, &resolveFun, &rejectFun, true))
- return false;
+ return nullptr;
// Step 5 of Resolve, 4 of Reject.
- if (!RunResolutionFunction(cx, mode == ResolveMode ? resolveFun : rejectFun, x, mode, promise))
- return false;
+ if (!RunResolutionFunction(cx, mode == ResolveMode ? resolveFun : rejectFun, argVal, mode,
+ promise))
+ {
+ return nullptr;
+ }
// Step 6 of Resolve, 4 of Reject.
- args.rval().setObject(*promise);
- return true;
+ return promise;
}
/**
@@ -2015,7 +2012,14 @@ CommonStaticResolveRejectImpl(JSContext* cx, unsigned argc, Value* vp, Resolutio
bool
js::Promise_reject(JSContext* cx, unsigned argc, Value* vp)
{
- return CommonStaticResolveRejectImpl(cx, argc, vp, RejectMode);
+ CallArgs args = CallArgsFromVp(argc, vp);
+ RootedValue thisVal(cx, args.thisv());
+ RootedValue argVal(cx, args.get(0));
+ JSObject* result = CommonStaticResolveRejectImpl(cx, thisVal, argVal, RejectMode);
+ if (!result)
+ return false;
+ args.rval().setObject(*result);
+ return true;
}
/**
@@ -2024,19 +2028,11 @@ js::Promise_reject(JSContext* cx, unsigned argc, Value* vp)
/* static */ JSObject*
PromiseObject::unforgeableReject(JSContext* cx, HandleValue value)
{
- // Steps 1-2 (omitted).
-
- // Roughly step 3.
- Rooted<PromiseObject*> promise(cx, CreatePromiseObjectInternal(cx));
- if (!promise)
+ RootedObject promiseCtor(cx, JS::GetPromiseConstructor(cx));
+ if (!promiseCtor)
return nullptr;
-
- // Roughly step 4.
- if (!ResolvePromise(cx, promise, value, JS::PromiseState::Rejected))
- return nullptr;
-
- // Step 5.
- return promise;
+ RootedValue cVal(cx, ObjectValue(*promiseCtor));
+ return CommonStaticResolveRejectImpl(cx, cVal, value, RejectMode);
}
/**
@@ -2045,7 +2041,14 @@ PromiseObject::unforgeableReject(JSContext* cx, HandleValue value)
bool
js::Promise_static_resolve(JSContext* cx, unsigned argc, Value* vp)
{
- return CommonStaticResolveRejectImpl(cx, argc, vp, ResolveMode);
+ CallArgs args = CallArgsFromVp(argc, vp);
+ RootedValue thisVal(cx, args.thisv());
+ RootedValue argVal(cx, args.get(0));
+ JSObject* result = CommonStaticResolveRejectImpl(cx, thisVal, argVal, ResolveMode);
+ if (!result)
+ return false;
+ args.rval().setObject(*result);
+ return true;
}
/**
@@ -2054,30 +2057,11 @@ js::Promise_static_resolve(JSContext* cx, unsigned argc, Value* vp)
/* static */ JSObject*
PromiseObject::unforgeableResolve(JSContext* cx, HandleValue value)
{
- // Steps 1-2 (omitted).
-
- // Step 3.
- if (value.isObject()) {
- JSObject* obj = &value.toObject();
- if (IsWrapper(obj))
- obj = CheckedUnwrap(obj);
- // Instead of getting the `constructor` property, do an unforgeable
- // check.
- if (obj && obj->is<PromiseObject>())
- return obj;
- }
-
- // Step 4.
- Rooted<PromiseObject*> promise(cx, CreatePromiseObjectInternal(cx));
- if (!promise)
+ RootedObject promiseCtor(cx, JS::GetPromiseConstructor(cx));
+ if (!promiseCtor)
return nullptr;
-
- // Steps 5.
- if (!ResolvePromiseInternal(cx, promise, value))
- return nullptr;
-
- // Step 6.
- return promise;
+ RootedValue cVal(cx, ObjectValue(*promiseCtor));
+ return CommonStaticResolveRejectImpl(cx, cVal, value, ResolveMode);
}
// ES2016, 25.4.4.6, implemented in Promise.js.
@@ -2647,14 +2631,14 @@ PromiseObject::dependentPromises(JSContext* cx, MutableHandle<GCVector<Value>> v
return true;
}
-bool
-PromiseObject::resolve(JSContext* cx, HandleValue resolutionValue)
+/* static */ bool
+PromiseObject::resolve(JSContext* cx, Handle<PromiseObject*> promise, HandleValue resolutionValue)
{
- MOZ_ASSERT(!PromiseHasAnyFlag(*this, PROMISE_FLAG_ASYNC));
- if (state() != JS::PromiseState::Pending)
+ MOZ_ASSERT(!PromiseHasAnyFlag(*promise, PROMISE_FLAG_ASYNC));
+ if (promise->state() != JS::PromiseState::Pending)
return true;
- RootedObject resolveFun(cx, GetResolveFunctionFromPromise(this));
+ RootedObject resolveFun(cx, GetResolveFunctionFromPromise(promise));
RootedValue funVal(cx, ObjectValue(*resolveFun));
// For xray'd Promises, the resolve fun may have been created in another
@@ -2670,14 +2654,14 @@ PromiseObject::resolve(JSContext* cx, HandleValue resolutionValue)
return Call(cx, funVal, UndefinedHandleValue, args, &dummy);
}
-bool
-PromiseObject::reject(JSContext* cx, HandleValue rejectionValue)
+/* static */ bool
+PromiseObject::reject(JSContext* cx, Handle<PromiseObject*> promise, HandleValue rejectionValue)
{
- MOZ_ASSERT(!PromiseHasAnyFlag(*this, PROMISE_FLAG_ASYNC));
- if (state() != JS::PromiseState::Pending)
+ MOZ_ASSERT(!PromiseHasAnyFlag(*promise, PROMISE_FLAG_ASYNC));
+ if (promise->state() != JS::PromiseState::Pending)
return true;
- RootedValue funVal(cx, this->getFixedSlot(PromiseSlot_RejectFunction));
+ RootedValue funVal(cx, promise->getFixedSlot(PromiseSlot_RejectFunction));
MOZ_ASSERT(IsCallable(funVal));
FixedInvokeArgs<1> args(cx);
@@ -2687,10 +2671,9 @@ PromiseObject::reject(JSContext* cx, HandleValue rejectionValue)
return Call(cx, funVal, UndefinedHandleValue, args, &dummy);
}
-void
-PromiseObject::onSettled(JSContext* cx)
+/* static */ void
+PromiseObject::onSettled(JSContext* cx, Handle<PromiseObject*> promise)
{
- Rooted<PromiseObject*> promise(cx, this);
RootedObject stack(cx);
if (cx->options().asyncStack() || cx->compartment()->isDebuggee()) {
if (!JS::CaptureCurrentStack(cx, &stack, JS::StackCapture(JS::AllFrames()))) {
@@ -2750,7 +2733,7 @@ PromiseTask::executeAndFinish(JSContext* cx)
static JSObject*
CreatePromisePrototype(JSContext* cx, JSProtoKey key)
{
- return cx->global()->createBlankPrototype(cx, &PromiseObject::protoClass_);
+ return GlobalObject::createBlankPrototype(cx, cx->global(), &PromiseObject::protoClass_);
}
static const JSFunctionSpec promise_methods[] = {
diff --git a/js/src/builtin/Promise.h b/js/src/builtin/Promise.h
index bb4778631..c76dc358c 100644
--- a/js/src/builtin/Promise.h
+++ b/js/src/builtin/Promise.h
@@ -66,10 +66,12 @@ class PromiseObject : public NativeObject
return getFixedSlot(PromiseSlot_ReactionsOrResult);
}
- MOZ_MUST_USE bool resolve(JSContext* cx, HandleValue resolutionValue);
- MOZ_MUST_USE bool reject(JSContext* cx, HandleValue rejectionValue);
+ static MOZ_MUST_USE bool resolve(JSContext* cx, Handle<PromiseObject*> promise,
+ HandleValue resolutionValue);
+ static MOZ_MUST_USE bool reject(JSContext* cx, Handle<PromiseObject*> promise,
+ HandleValue rejectionValue);
- void onSettled(JSContext* cx);
+ static void onSettled(JSContext* cx, Handle<PromiseObject*> promise);
double allocationTime() { return getFixedSlot(PromiseSlot_AllocationTime).toNumber(); }
double resolutionTime() { return getFixedSlot(PromiseSlot_ResolutionTime).toNumber(); }
diff --git a/js/src/builtin/Reflect.cpp b/js/src/builtin/Reflect.cpp
index 2f509a226..4e7fae78c 100644
--- a/js/src/builtin/Reflect.cpp
+++ b/js/src/builtin/Reflect.cpp
@@ -268,7 +268,8 @@ static const JSFunctionSpec methods[] = {
JSObject*
js::InitReflect(JSContext* cx, HandleObject obj)
{
- RootedObject proto(cx, obj->as<GlobalObject>().getOrCreateObjectPrototype(cx));
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!proto)
return nullptr;
diff --git a/js/src/builtin/ReflectParse.cpp b/js/src/builtin/ReflectParse.cpp
index beff58e13..8e8bb2417 100644
--- a/js/src/builtin/ReflectParse.cpp
+++ b/js/src/builtin/ReflectParse.cpp
@@ -3044,7 +3044,12 @@ ASTSerializer::expression(ParseNode* pn, MutableHandleValue dst)
MOZ_ASSERT(pn->pn_pos.encloses(next->pn_pos));
RootedValue expr(cx);
- expr.setString(next->pn_atom);
+ if (next->isKind(PNK_RAW_UNDEFINED)) {
+ expr.setUndefined();
+ } else {
+ MOZ_ASSERT(next->isKind(PNK_TEMPLATE_STRING));
+ expr.setString(next->pn_atom);
+ }
cooked.infallibleAppend(expr);
}
@@ -3136,6 +3141,7 @@ ASTSerializer::expression(ParseNode* pn, MutableHandleValue dst)
case PNK_TRUE:
case PNK_FALSE:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
return literal(pn, dst);
case PNK_YIELD_STAR:
@@ -3216,6 +3222,8 @@ ASTSerializer::property(ParseNode* pn, MutableHandleValue dst)
return expression(pn->pn_kid, &val) &&
builder.prototypeMutation(val, &pn->pn_pos, dst);
}
+ if (pn->isKind(PNK_SPREAD))
+ return expression(pn, dst);
PropKind kind;
switch (pn->getOp()) {
@@ -3276,6 +3284,10 @@ ASTSerializer::literal(ParseNode* pn, MutableHandleValue dst)
val.setNull();
break;
+ case PNK_RAW_UNDEFINED:
+ val.setUndefined();
+ break;
+
case PNK_TRUE:
val.setBoolean(true);
break;
@@ -3332,6 +3344,16 @@ ASTSerializer::objectPattern(ParseNode* pn, MutableHandleValue dst)
return false;
for (ParseNode* propdef = pn->pn_head; propdef; propdef = propdef->pn_next) {
+ if (propdef->isKind(PNK_SPREAD)) {
+ RootedValue target(cx);
+ RootedValue spread(cx);
+ if (!pattern(propdef->pn_kid, &target))
+ return false;
+ if(!builder.spreadExpression(target, &propdef->pn_pos, &spread))
+ return false;
+ elts.infallibleAppend(spread);
+ continue;
+ }
LOCAL_ASSERT(propdef->isKind(PNK_MUTATEPROTO) != propdef->isOp(JSOP_INITPROP));
RootedValue key(cx);
@@ -3407,12 +3429,7 @@ ASTSerializer::function(ParseNode* pn, ASTType type, MutableHandleValue dst)
: GeneratorStyle::None;
bool isAsync = pn->pn_funbox->isAsync();
- bool isExpression =
-#if JS_HAS_EXPR_CLOSURES
- func->isExprBody();
-#else
- false;
-#endif
+ bool isExpression = pn->pn_funbox->isExprBody();
RootedValue id(cx);
RootedAtom funcAtom(cx, func->explicitName());
diff --git a/js/src/builtin/RegExp.cpp b/js/src/builtin/RegExp.cpp
index b20f41c53..7cf20d23c 100644
--- a/js/src/builtin/RegExp.cpp
+++ b/js/src/builtin/RegExp.cpp
@@ -140,12 +140,12 @@ ExecuteRegExpImpl(JSContext* cx, RegExpStatics* res, RegExpShared& re, HandleLin
/* Legacy ExecuteRegExp behavior is baked into the JSAPI. */
bool
-js::ExecuteRegExpLegacy(JSContext* cx, RegExpStatics* res, RegExpObject& reobj,
+js::ExecuteRegExpLegacy(JSContext* cx, RegExpStatics* res, Handle<RegExpObject*> reobj,
HandleLinearString input, size_t* lastIndex, bool test,
MutableHandleValue rval)
{
RegExpGuard shared(cx);
- if (!reobj.getShared(cx, &shared))
+ if (!RegExpObject::getShared(cx, reobj, &shared))
return false;
ScopedMatchPairs matches(&cx->tempLifoAlloc());
@@ -801,7 +801,7 @@ const JSFunctionSpec js::regexp_methods[] = {
name(JSContext* cx, unsigned argc, Value* vp) \
{ \
CallArgs args = CallArgsFromVp(argc, vp); \
- RegExpStatics* res = cx->global()->getRegExpStatics(cx); \
+ RegExpStatics* res = GlobalObject::getRegExpStatics(cx, cx->global()); \
if (!res) \
return false; \
code; \
@@ -827,7 +827,7 @@ DEFINE_STATIC_GETTER(static_paren9_getter, STATIC_PAREN_GETTER_CODE(9))
static bool \
name(JSContext* cx, unsigned argc, Value* vp) \
{ \
- RegExpStatics* res = cx->global()->getRegExpStatics(cx); \
+ RegExpStatics* res = GlobalObject::getRegExpStatics(cx, cx->global()); \
if (!res) \
return false; \
code; \
@@ -838,7 +838,7 @@ static bool
static_input_setter(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
- RegExpStatics* res = cx->global()->getRegExpStatics(cx);
+ RegExpStatics* res = GlobalObject::getRegExpStatics(cx, cx->global());
if (!res)
return false;
@@ -918,12 +918,12 @@ ExecuteRegExp(JSContext* cx, HandleObject regexp, HandleString string,
Rooted<RegExpObject*> reobj(cx, &regexp->as<RegExpObject>());
RegExpGuard re(cx);
- if (!reobj->getShared(cx, &re))
+ if (!RegExpObject::getShared(cx, reobj, &re))
return RegExpRunStatus_Error;
RegExpStatics* res;
if (staticsUpdate == UpdateRegExpStatics) {
- res = cx->global()->getRegExpStatics(cx);
+ res = GlobalObject::getRegExpStatics(cx, cx->global());
if (!res)
return RegExpRunStatus_Error;
} else {
@@ -1725,7 +1725,7 @@ js::intrinsic_GetElemBaseForLambda(JSContext* cx, unsigned argc, Value* vp)
if (!fun->isInterpreted() || fun->isClassConstructor())
return true;
- JSScript* script = fun->getOrCreateScript(cx);
+ JSScript* script = JSFunction::getOrCreateScript(cx, fun);
if (!script)
return false;
@@ -1800,7 +1800,7 @@ js::intrinsic_GetStringDataProperty(JSContext* cx, unsigned argc, Value* vp)
return false;
RootedValue v(cx);
- if (HasDataProperty(cx, nobj, AtomToId(atom), v.address()) && v.isString())
+ if (GetPropertyPure(cx, nobj, AtomToId(atom), v.address()) && v.isString())
args.rval().set(v);
else
args.rval().setUndefined();
diff --git a/js/src/builtin/RegExp.h b/js/src/builtin/RegExp.h
index 715656f40..4e0ff6948 100644
--- a/js/src/builtin/RegExp.h
+++ b/js/src/builtin/RegExp.h
@@ -31,7 +31,7 @@ enum RegExpStaticsUpdate { UpdateRegExpStatics, DontUpdateRegExpStatics };
* |chars| and |length|.
*/
MOZ_MUST_USE bool
-ExecuteRegExpLegacy(JSContext* cx, RegExpStatics* res, RegExpObject& reobj,
+ExecuteRegExpLegacy(JSContext* cx, RegExpStatics* res, Handle<RegExpObject*> reobj,
HandleLinearString input, size_t* lastIndex, bool test,
MutableHandleValue rval);
diff --git a/js/src/builtin/SIMD.cpp b/js/src/builtin/SIMD.cpp
index 2383922db..5fe691152 100644
--- a/js/src/builtin/SIMD.cpp
+++ b/js/src/builtin/SIMD.cpp
@@ -475,7 +475,7 @@ const Class SimdObject::class_ = {
&SimdObjectClassOps
};
-bool
+/* static */ bool
GlobalObject::initSimdObject(JSContext* cx, Handle<GlobalObject*> global)
{
// SIMD relies on the TypedObject module being initialized.
@@ -483,11 +483,11 @@ GlobalObject::initSimdObject(JSContext* cx, Handle<GlobalObject*> global)
// to be able to call GetTypedObjectModule(). It is NOT necessary
// to install the TypedObjectModule global, but at the moment
// those two things are not separable.
- if (!global->getOrCreateTypedObjectModule(cx))
+ if (!GlobalObject::getOrCreateTypedObjectModule(cx, global))
return false;
RootedObject globalSimdObject(cx);
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!objProto)
return false;
@@ -510,7 +510,7 @@ static bool
CreateSimdType(JSContext* cx, Handle<GlobalObject*> global, HandlePropertyName stringRepr,
SimdType simdType, const JSFunctionSpec* methods)
{
- RootedObject funcProto(cx, global->getOrCreateFunctionPrototype(cx));
+ RootedObject funcProto(cx, GlobalObject::getOrCreateFunctionPrototype(cx, global));
if (!funcProto)
return false;
@@ -531,7 +531,7 @@ CreateSimdType(JSContext* cx, Handle<GlobalObject*> global, HandlePropertyName s
return false;
// Create prototype property, which inherits from Object.prototype.
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!objProto)
return false;
Rooted<TypedProto*> proto(cx);
@@ -551,7 +551,7 @@ CreateSimdType(JSContext* cx, Handle<GlobalObject*> global, HandlePropertyName s
}
// Bind type descriptor to the global SIMD object
- RootedObject globalSimdObject(cx, global->getOrCreateSimdGlobalObject(cx));
+ RootedObject globalSimdObject(cx, GlobalObject::getOrCreateSimdGlobalObject(cx, global));
MOZ_ASSERT(globalSimdObject);
RootedValue typeValue(cx, ObjectValue(*typeDescr));
@@ -568,7 +568,7 @@ CreateSimdType(JSContext* cx, Handle<GlobalObject*> global, HandlePropertyName s
return !!typeDescr;
}
-bool
+/* static */ bool
GlobalObject::initSimdType(JSContext* cx, Handle<GlobalObject*> global, SimdType simdType)
{
#define CREATE_(Type) \
@@ -584,13 +584,13 @@ GlobalObject::initSimdType(JSContext* cx, Handle<GlobalObject*> global, SimdType
#undef CREATE_
}
-SimdTypeDescr*
+/* static */ SimdTypeDescr*
GlobalObject::getOrCreateSimdTypeDescr(JSContext* cx, Handle<GlobalObject*> global,
SimdType simdType)
{
MOZ_ASSERT(unsigned(simdType) < unsigned(SimdType::Count), "Invalid SIMD type");
- RootedObject globalSimdObject(cx, global->getOrCreateSimdGlobalObject(cx));
+ RootedObject globalSimdObject(cx, GlobalObject::getOrCreateSimdGlobalObject(cx, global));
if (!globalSimdObject)
return nullptr;
@@ -628,8 +628,8 @@ SimdObject::resolve(JSContext* cx, JS::HandleObject obj, JS::HandleId id, bool*
JSObject*
js::InitSimdClass(JSContext* cx, HandleObject obj)
{
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
- return global->getOrCreateSimdGlobalObject(cx);
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ return GlobalObject::getOrCreateSimdGlobalObject(cx, global);
}
template<typename V>
diff --git a/js/src/builtin/SymbolObject.cpp b/js/src/builtin/SymbolObject.cpp
index ae38d5371..8fa860ef3 100644
--- a/js/src/builtin/SymbolObject.cpp
+++ b/js/src/builtin/SymbolObject.cpp
@@ -53,17 +53,17 @@ const JSFunctionSpec SymbolObject::staticMethods[] = {
JSObject*
SymbolObject::initClass(JSContext* cx, HandleObject obj)
{
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
// This uses &JSObject::class_ because: "The Symbol prototype object is an
// ordinary object. It is not a Symbol instance and does not have a
// [[SymbolData]] internal slot." (ES6 rev 24, 19.4.3)
- RootedObject proto(cx, global->createBlankPrototype<PlainObject>(cx));
+ RootedObject proto(cx, GlobalObject::createBlankPrototype<PlainObject>(cx, global));
if (!proto)
return nullptr;
- RootedFunction ctor(cx, global->createConstructor(cx, construct,
- ClassName(JSProto_Symbol, cx), 0));
+ RootedFunction ctor(cx, GlobalObject::createConstructor(cx, construct,
+ ClassName(JSProto_Symbol, cx), 0));
if (!ctor)
return nullptr;
diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp
index c896ce5d1..992fe2c97 100644
--- a/js/src/builtin/TestingFunctions.cpp
+++ b/js/src/builtin/TestingFunctions.cpp
@@ -3218,13 +3218,13 @@ ByteSizeOfScript(JSContext*cx, unsigned argc, Value* vp)
return false;
}
- JSFunction* fun = &args[0].toObject().as<JSFunction>();
+ RootedFunction fun(cx, &args[0].toObject().as<JSFunction>());
if (fun->isNative()) {
JS_ReportErrorASCII(cx, "Argument must be a scripted function");
return false;
}
- RootedScript script(cx, fun->getOrCreateScript(cx));
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, fun));
if (!script)
return false;
@@ -3319,7 +3319,8 @@ GetConstructorName(JSContext* cx, unsigned argc, Value* vp)
}
RootedAtom name(cx);
- if (!args[0].toObject().constructorDisplayAtom(cx, &name))
+ RootedObject obj(cx, &args[0].toObject());
+ if (!JSObject::constructorDisplayAtom(cx, obj, &name))
return false;
if (name) {
@@ -4023,7 +4024,7 @@ DisRegExp(JSContext* cx, unsigned argc, Value* vp)
return false;
}
- if (!reobj->dumpBytecode(cx, match_only, input))
+ if (!RegExpObject::dumpBytecode(cx, reobj, match_only, input))
return false;
args.rval().setUndefined();
@@ -4042,6 +4043,32 @@ IsConstructor(JSContext* cx, unsigned argc, Value* vp)
return true;
}
+static bool
+GetErrorNotes(JSContext* cx, unsigned argc, Value* vp)
+{
+ CallArgs args = CallArgsFromVp(argc, vp);
+ if (!args.requireAtLeast(cx, "getErrorNotes", 1))
+ return false;
+
+ if (!args[0].isObject() || !args[0].toObject().is<ErrorObject>()) {
+ args.rval().setNull();
+ return true;
+ }
+
+ JSErrorReport* report = args[0].toObject().as<ErrorObject>().getErrorReport();
+ if (!report) {
+ args.rval().setNull();
+ return true;
+ }
+
+ RootedObject notesArray(cx, CreateErrorNotesArray(cx, report));
+ if (!notesArray)
+ return false;
+
+ args.rval().setObject(*notesArray);
+ return true;
+}
+
static const JSFunctionSpecWithHelp TestingFunctions[] = {
JS_FN_HELP("gc", ::GC, 0, 0,
"gc([obj] | 'zone' [, 'shrinking'])",
@@ -4576,6 +4603,10 @@ static const JSFunctionSpecWithHelp FuzzingUnsafeTestingFunctions[] = {
" Dumps RegExp bytecode."),
#endif
+ JS_FN_HELP("getErrorNotes", GetErrorNotes, 1, 0,
+"getErrorNotes(error)",
+" Returns an array of error notes."),
+
JS_FS_HELP_END
};
diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp
index 0dfc1123a..ff3680774 100644
--- a/js/src/builtin/TypedObject.cpp
+++ b/js/src/builtin/TypedObject.cpp
@@ -1124,11 +1124,11 @@ DefineSimpleTypeDescr(JSContext* cx,
typename T::Type type,
HandlePropertyName className)
{
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!objProto)
return false;
- RootedObject funcProto(cx, global->getOrCreateFunctionPrototype(cx));
+ RootedObject funcProto(cx, GlobalObject::getOrCreateFunctionPrototype(cx, global));
if (!funcProto)
return false;
@@ -1185,7 +1185,7 @@ DefineMetaTypeDescr(JSContext* cx,
if (!className)
return nullptr;
- RootedObject funcProto(cx, global->getOrCreateFunctionPrototype(cx));
+ RootedObject funcProto(cx, GlobalObject::getOrCreateFunctionPrototype(cx, global));
if (!funcProto)
return nullptr;
@@ -1197,7 +1197,7 @@ DefineMetaTypeDescr(JSContext* cx,
// Create ctor.prototype.prototype, which inherits from Object.__proto__
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!objProto)
return nullptr;
RootedObject protoProto(cx);
@@ -1216,7 +1216,7 @@ DefineMetaTypeDescr(JSContext* cx,
const int constructorLength = 2;
RootedFunction ctor(cx);
- ctor = global->createConstructor(cx, T::construct, className, constructorLength);
+ ctor = GlobalObject::createConstructor(cx, T::construct, className, constructorLength);
if (!ctor ||
!LinkConstructorAndPrototype(cx, ctor, proto) ||
!DefinePropertiesAndFunctions(cx, proto,
@@ -1240,10 +1240,10 @@ DefineMetaTypeDescr(JSContext* cx,
* initializer for the `TypedObject` class populate the
* `TypedObject` global (which is referred to as "module" herein).
*/
-bool
+/* static */ bool
GlobalObject::initTypedObjectModule(JSContext* cx, Handle<GlobalObject*> global)
{
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!objProto)
return false;
@@ -1317,9 +1317,8 @@ GlobalObject::initTypedObjectModule(JSContext* cx, Handle<GlobalObject*> global)
JSObject*
js::InitTypedObjectModuleObject(JSContext* cx, HandleObject obj)
{
- MOZ_ASSERT(obj->is<GlobalObject>());
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
- return global->getOrCreateTypedObjectModule(cx);
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ return GlobalObject::getOrCreateTypedObjectModule(cx, global);
}
/******************************************************************************
diff --git a/js/src/builtin/Utilities.js b/js/src/builtin/Utilities.js
index c73bc5e7f..d5f233d05 100644
--- a/js/src/builtin/Utilities.js
+++ b/js/src/builtin/Utilities.js
@@ -229,6 +229,69 @@ function GetInternalError(msg) {
// To be used when a function is required but calling it shouldn't do anything.
function NullFunction() {}
+// Object Rest/Spread Properties proposal
+// Abstract operation: CopyDataProperties (target, source, excluded)
+function CopyDataProperties(target, source, excluded) {
+ // Step 1.
+ assert(IsObject(target), "target is an object");
+
+ // Step 2.
+ assert(IsObject(excluded), "excluded is an object");
+
+ // Steps 3, 6.
+ if (source === undefined || source === null)
+ return;
+
+ // Step 4.a.
+ source = ToObject(source);
+
+ // Step 4.b.
+ var keys = OwnPropertyKeys(source, JSITER_OWNONLY | JSITER_HIDDEN | JSITER_SYMBOLS);
+
+ // Step 5.
+ for (var index = 0; index < keys.length; index++) {
+ var key = keys[index];
+
+ // We abbreviate this by calling propertyIsEnumerable which is faster
+ // and returns false for not defined properties.
+ if (!callFunction(std_Object_hasOwnProperty, excluded, key) && callFunction(std_Object_propertyIsEnumerable, source, key))
+ _DefineDataProperty(target, key, source[key]);
+ }
+
+ // Step 6 (Return).
+}
+
+// Object Rest/Spread Properties proposal
+// Abstract operation: CopyDataProperties (target, source, excluded)
+function CopyDataPropertiesUnfiltered(target, source) {
+ // Step 1.
+ assert(IsObject(target), "target is an object");
+
+ // Step 2 (Not applicable).
+
+ // Steps 3, 6.
+ if (source === undefined || source === null)
+ return;
+
+ // Step 4.a.
+ source = ToObject(source);
+
+ // Step 4.b.
+ var keys = OwnPropertyKeys(source, JSITER_OWNONLY | JSITER_HIDDEN | JSITER_SYMBOLS);
+
+ // Step 5.
+ for (var index = 0; index < keys.length; index++) {
+ var key = keys[index];
+
+ // We abbreviate this by calling propertyIsEnumerable which is faster
+ // and returns false for not defined properties.
+ if (callFunction(std_Object_propertyIsEnumerable, source, key))
+ _DefineDataProperty(target, key, source[key]);
+ }
+
+ // Step 6 (Return).
+}
+
/*************************************** Testing functions ***************************************/
function outer() {
return function inner() {
diff --git a/js/src/builtin/WeakMapObject.cpp b/js/src/builtin/WeakMapObject.cpp
index 555b9e03a..dcfa19776 100644
--- a/js/src/builtin/WeakMapObject.cpp
+++ b/js/src/builtin/WeakMapObject.cpp
@@ -350,14 +350,14 @@ InitWeakMapClass(JSContext* cx, HandleObject obj, bool defineMembers)
{
MOZ_ASSERT(obj->isNative());
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
RootedPlainObject proto(cx, NewBuiltinClassInstance<PlainObject>(cx));
if (!proto)
return nullptr;
- RootedFunction ctor(cx, global->createConstructor(cx, WeakMap_construct,
- cx->names().WeakMap, 0));
+ RootedFunction ctor(cx, GlobalObject::createConstructor(cx, WeakMap_construct,
+ cx->names().WeakMap, 0));
if (!ctor)
return nullptr;
diff --git a/js/src/builtin/WeakSetObject.cpp b/js/src/builtin/WeakSetObject.cpp
index 7ea3f2fef..fbe5e418c 100644
--- a/js/src/builtin/WeakSetObject.cpp
+++ b/js/src/builtin/WeakSetObject.cpp
@@ -41,14 +41,15 @@ const JSFunctionSpec WeakSetObject::methods[] = {
};
JSObject*
-WeakSetObject::initClass(JSContext* cx, JSObject* obj)
+WeakSetObject::initClass(JSContext* cx, HandleObject obj)
{
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
RootedPlainObject proto(cx, NewBuiltinClassInstance<PlainObject>(cx));
if (!proto)
return nullptr;
- Rooted<JSFunction*> ctor(cx, global->createConstructor(cx, construct, ClassName(JSProto_WeakSet, cx), 0));
+ Rooted<JSFunction*> ctor(cx, GlobalObject::createConstructor(cx, construct,
+ ClassName(JSProto_WeakSet, cx), 0));
if (!ctor ||
!LinkConstructorAndPrototype(cx, ctor, proto) ||
!DefinePropertiesAndFunctions(cx, proto, properties, methods) ||
diff --git a/js/src/builtin/WeakSetObject.h b/js/src/builtin/WeakSetObject.h
index 0a6ff33f3..50e54c182 100644
--- a/js/src/builtin/WeakSetObject.h
+++ b/js/src/builtin/WeakSetObject.h
@@ -16,7 +16,7 @@ class WeakSetObject : public NativeObject
public:
static const unsigned RESERVED_SLOTS = 1;
- static JSObject* initClass(JSContext* cx, JSObject* obj);
+ static JSObject* initClass(JSContext* cx, HandleObject obj);
static const Class class_;
private:
diff --git a/js/src/frontend/BytecodeCompiler.cpp b/js/src/frontend/BytecodeCompiler.cpp
index b5be5f5ac..a1abbfeda 100644
--- a/js/src/frontend/BytecodeCompiler.cpp
+++ b/js/src/frontend/BytecodeCompiler.cpp
@@ -77,7 +77,13 @@ class MOZ_STACK_CLASS BytecodeCompiler
bool canLazilyParse();
bool createParser();
bool createSourceAndParser(Maybe<uint32_t> parameterListEnd = Nothing());
- bool createScript(uint32_t preludeStart = 0);
+
+ // If toString{Start,End} are not explicitly passed, assume the script's
+ // offsets in the source used to parse it are the same as what should be
+ // used to compute its Function.prototype.toString() value.
+ bool createScript();
+ bool createScript(uint32_t toStringStart, uint32_t toStringEnd);
+
bool emplaceEmitter(Maybe<BytecodeEmitter>& emitter, SharedContext* sharedContext);
bool handleParseFailure(const Directives& newDirectives);
bool deoptimizeArgumentsInEnclosingScripts(JSContext* cx, HandleObject environment);
@@ -242,11 +248,17 @@ BytecodeCompiler::createSourceAndParser(Maybe<uint32_t> parameterListEnd /* = No
}
bool
-BytecodeCompiler::createScript(uint32_t preludeStart /* = 0 */)
+BytecodeCompiler::createScript()
+{
+ return createScript(0, sourceBuffer.length());
+}
+
+bool
+BytecodeCompiler::createScript(uint32_t toStringStart, uint32_t toStringEnd)
{
script = JSScript::Create(cx, options,
sourceObject, /* sourceStart = */ 0, sourceBuffer.length(),
- preludeStart);
+ toStringStart, toStringEnd);
return script != nullptr;
}
@@ -287,7 +299,8 @@ BytecodeCompiler::deoptimizeArgumentsInEnclosingScripts(JSContext* cx, HandleObj
RootedObject env(cx, environment);
while (env->is<EnvironmentObject>() || env->is<DebugEnvironmentProxy>()) {
if (env->is<CallObject>()) {
- RootedScript script(cx, env->as<CallObject>().callee().getOrCreateScript(cx));
+ RootedFunction fun(cx, &env->as<CallObject>().callee());
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, fun));
if (!script)
return false;
if (script->argumentsHasVarBinding()) {
@@ -457,7 +470,7 @@ BytecodeCompiler::compileStandaloneFunction(MutableHandleFunction fun,
if (fn->pn_funbox->function()->isInterpreted()) {
MOZ_ASSERT(fun == fn->pn_funbox->function());
- if (!createScript(fn->pn_funbox->preludeStart))
+ if (!createScript(fn->pn_funbox->toStringStart, fn->pn_funbox->toStringEnd))
return false;
Maybe<BytecodeEmitter> emitter;
@@ -652,7 +665,7 @@ frontend::CompileLazyFunction(JSContext* cx, Handle<LazyScript*> lazy, const cha
Rooted<JSScript*> script(cx, JSScript::Create(cx, options, sourceObject,
lazy->begin(), lazy->end(),
- lazy->preludeStart()));
+ lazy->toStringStart(), lazy->toStringEnd()));
if (!script)
return false;
diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp
index c524184d6..309d6c290 100644
--- a/js/src/frontend/BytecodeEmitter.cpp
+++ b/js/src/frontend/BytecodeEmitter.cpp
@@ -3069,6 +3069,7 @@ BytecodeEmitter::checkSideEffects(ParseNode* pn, bool* answer)
case PNK_TRUE:
case PNK_FALSE:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
case PNK_ELISION:
case PNK_GENERATOR:
case PNK_NUMBER:
@@ -3538,9 +3539,10 @@ BytecodeEmitter::needsImplicitThis()
bool
BytecodeEmitter::maybeSetDisplayURL()
{
- if (tokenStream()->hasDisplayURL()) {
- if (!parser->ss->setDisplayURL(cx, tokenStream()->displayURL()))
+ if (tokenStream().hasDisplayURL()) {
+ if (!parser->ss->setDisplayURL(cx, tokenStream().displayURL())) {
return false;
+ }
}
return true;
}
@@ -3548,10 +3550,11 @@ BytecodeEmitter::maybeSetDisplayURL()
bool
BytecodeEmitter::maybeSetSourceMap()
{
- if (tokenStream()->hasSourceMapURL()) {
+ if (tokenStream().hasSourceMapURL()) {
MOZ_ASSERT(!parser->ss->hasSourceMapURL());
- if (!parser->ss->setSourceMapURL(cx, tokenStream()->sourceMapURL()))
+ if (!parser->ss->setSourceMapURL(cx, tokenStream().sourceMapURL())) {
return false;
+ }
}
/*
@@ -3590,21 +3593,21 @@ BytecodeEmitter::tellDebuggerAboutCompiledScript(ExclusiveContext* cx)
}
}
-inline TokenStream*
+inline TokenStream&
BytecodeEmitter::tokenStream()
{
- return &parser->tokenStream;
+ return parser->tokenStream;
}
bool
BytecodeEmitter::reportError(ParseNode* pn, unsigned errorNumber, ...)
{
- TokenPos pos = pn ? pn->pn_pos : tokenStream()->currentToken().pos;
+ TokenPos pos = pn ? pn->pn_pos : tokenStream().currentToken().pos;
va_list args;
va_start(args, errorNumber);
- bool result = tokenStream()->reportCompileErrorNumberVA(pos.begin, JSREPORT_ERROR,
- errorNumber, args);
+ bool result = tokenStream().reportCompileErrorNumberVA(nullptr, pos.begin, JSREPORT_ERROR,
+ errorNumber, args);
va_end(args);
return result;
}
@@ -3612,11 +3615,12 @@ BytecodeEmitter::reportError(ParseNode* pn, unsigned errorNumber, ...)
bool
BytecodeEmitter::reportExtraWarning(ParseNode* pn, unsigned errorNumber, ...)
{
- TokenPos pos = pn ? pn->pn_pos : tokenStream()->currentToken().pos;
+ TokenPos pos = pn ? pn->pn_pos : tokenStream().currentToken().pos;
va_list args;
va_start(args, errorNumber);
- bool result = tokenStream()->reportExtraWarningErrorNumberVA(pos.begin, errorNumber, args);
+ bool result = tokenStream().reportExtraWarningErrorNumberVA(nullptr, pos.begin,
+ errorNumber, args);
va_end(args);
return result;
}
@@ -3624,12 +3628,12 @@ BytecodeEmitter::reportExtraWarning(ParseNode* pn, unsigned errorNumber, ...)
bool
BytecodeEmitter::reportStrictModeError(ParseNode* pn, unsigned errorNumber, ...)
{
- TokenPos pos = pn ? pn->pn_pos : tokenStream()->currentToken().pos;
+ TokenPos pos = pn ? pn->pn_pos : tokenStream().currentToken().pos;
va_list args;
va_start(args, errorNumber);
- bool result = tokenStream()->reportStrictModeErrorNumberVA(pos.begin, sc->strict(),
- errorNumber, args);
+ bool result = tokenStream().reportStrictModeErrorNumberVA(nullptr, pos.begin, sc->strict(),
+ errorNumber, args);
va_end(args);
return result;
}
@@ -4599,7 +4603,7 @@ BytecodeEmitter::emitSwitch(ParseNode* pn)
// If the expression is a literal, suppress line number emission so
// that debugging works more naturally.
if (caseValue) {
- if (!emitTree(caseValue,
+ if (!emitTree(caseValue, ValueUsage::WantValue,
caseValue->isLiteral() ? SUPPRESS_LINENOTE : EMIT_LINENOTE))
{
return false;
@@ -5810,36 +5814,78 @@ BytecodeEmitter::emitDestructuringOpsObject(ParseNode* pattern, DestructuringFla
if (!emitRequireObjectCoercible()) // ... RHS
return false;
+ bool needsRestPropertyExcludedSet = pattern->pn_count > 1 &&
+ pattern->last()->isKind(PNK_SPREAD);
+ if (needsRestPropertyExcludedSet) {
+ if (!emitDestructuringObjRestExclusionSet(pattern)) // ... RHS SET
+ return false;
+
+ if (!emit1(JSOP_SWAP)) // ... SET RHS
+ return false;
+ }
+
for (ParseNode* member = pattern->pn_head; member; member = member->pn_next) {
ParseNode* subpattern;
- if (member->isKind(PNK_MUTATEPROTO))
+ if (member->isKind(PNK_MUTATEPROTO) || member->isKind(PNK_SPREAD))
subpattern = member->pn_kid;
else
subpattern = member->pn_right;
+
ParseNode* lhs = subpattern;
+ MOZ_ASSERT_IF(member->isKind(PNK_SPREAD), !lhs->isKind(PNK_ASSIGN));
if (lhs->isKind(PNK_ASSIGN))
lhs = lhs->pn_left;
size_t emitted;
- if (!emitDestructuringLHSRef(lhs, &emitted)) // ... RHS *LREF
+ if (!emitDestructuringLHSRef(lhs, &emitted)) // ... *SET RHS *LREF
return false;
// Duplicate the value being destructured to use as a reference base.
if (emitted) {
- if (!emitDupAt(emitted)) // ... RHS *LREF RHS
+ if (!emitDupAt(emitted)) // ... *SET RHS *LREF RHS
return false;
} else {
- if (!emit1(JSOP_DUP)) // ... RHS RHS
+ if (!emit1(JSOP_DUP)) // ... *SET RHS RHS
return false;
}
+ if (member->isKind(PNK_SPREAD)) {
+ if (!updateSourceCoordNotes(member->pn_pos.begin))
+ return false;
+
+ if (!emitNewInit(JSProto_Object)) // ... *SET RHS *LREF RHS TARGET
+ return false;
+ if (!emit1(JSOP_DUP)) // ... *SET RHS *LREF RHS TARGET TARGET
+ return false;
+ if (!emit2(JSOP_PICK, 2)) // ... *SET RHS *LREF TARGET TARGET RHS
+ return false;
+
+ if (needsRestPropertyExcludedSet) {
+ if (!emit2(JSOP_PICK, emitted + 4)) // ... RHS *LREF TARGET TARGET RHS SET
+ return false;
+ }
+
+ CopyOption option = needsRestPropertyExcludedSet
+ ? CopyOption::Filtered
+ : CopyOption::Unfiltered;
+ if (!emitCopyDataProperties(option)) // ... RHS *LREF TARGET
+ return false;
+
+ // Destructure TARGET per this member's lhs.
+ if (!emitSetOrInitializeDestructuring(lhs, flav)) // ... RHS
+ return false;
+
+ MOZ_ASSERT(member == pattern->last(), "Rest property is always last");
+ break;
+ }
+
// Now push the property name currently being matched, which is the
// current property name "label" on the left of a colon in the object
// initialiser.
bool needsGetElem = true;
if (member->isKind(PNK_MUTATEPROTO)) {
- if (!emitAtomOp(cx->names().proto, JSOP_GETPROP)) // ... RHS *LREF PROP
+ if (!emitAtomOp(cx->names().proto, JSOP_GETPROP)) // ... *SET RHS *LREF PROP
return false;
needsGetElem = false;
} else {
@@ -5847,40 +5893,131 @@ BytecodeEmitter::emitDestructuringOpsObject(ParseNode* pattern, DestructuringFla
ParseNode* key = member->pn_left;
if (key->isKind(PNK_NUMBER)) {
- if (!emitNumberOp(key->pn_dval)) // ... RHS *LREF RHS KEY
+ if (!emitNumberOp(key->pn_dval)) // ... *SET RHS *LREF RHS KEY
return false;
} else if (key->isKind(PNK_OBJECT_PROPERTY_NAME) || key->isKind(PNK_STRING)) {
- PropertyName* name = key->pn_atom->asPropertyName();
-
- // The parser already checked for atoms representing indexes and
- // used PNK_NUMBER instead, but also watch for ids which TI treats
- // as indexes for simplification of downstream analysis.
- jsid id = NameToId(name);
- if (id != IdToTypeId(id)) {
- if (!emitTree(key)) // ... RHS *LREF RHS KEY
+ if (!emitAtomOp(key->pn_atom, JSOP_GETPROP)) // ... *SET RHS *LREF PROP
+ return false;
+ needsGetElem = false;
+ } else {
+ if (!emitComputedPropertyName(key)) // ... *SET RHS *LREF RHS KEY
+ return false;
+
+ // Add the computed property key to the exclusion set.
+ if (needsRestPropertyExcludedSet) {
+ if (!emitDupAt(emitted + 3)) // ... SET RHS *LREF RHS KEY SET
return false;
- } else {
- if (!emitAtomOp(name, JSOP_GETPROP)) // ... RHS *LREF PROP
+ if (!emitDupAt(1)) // ... SET RHS *LREF RHS KEY SET KEY
+ return false;
+ if (!emit1(JSOP_UNDEFINED)) // ... SET RHS *LREF RHS KEY SET KEY UNDEFINED
+ return false;
+ if (!emit1(JSOP_INITELEM)) // ... SET RHS *LREF RHS KEY SET
+ return false;
+ if (!emit1(JSOP_POP)) // ... SET RHS *LREF RHS KEY
return false;
- needsGetElem = false;
}
- } else {
- if (!emitComputedPropertyName(key)) // ... RHS *LREF RHS KEY
- return false;
}
}
// Get the property value if not done already.
- if (needsGetElem && !emitElemOpBase(JSOP_GETELEM)) // ... RHS *LREF PROP
+ if (needsGetElem && !emitElemOpBase(JSOP_GETELEM)) // ... *SET RHS *LREF PROP
return false;
if (subpattern->isKind(PNK_ASSIGN)) {
- if (!emitDefault(subpattern->pn_right, lhs)) // ... RHS *LREF VALUE
+ if (!emitDefault(subpattern->pn_right, lhs)) // ... *SET RHS *LREF VALUE
return false;
}
// Destructure PROP per this member's lhs.
- if (!emitSetOrInitializeDestructuring(subpattern, flav)) // ... RHS
+ if (!emitSetOrInitializeDestructuring(subpattern, flav)) // ... *SET RHS
+ return false;
+ }
+
+ return true;
+}
+
+bool
+BytecodeEmitter::emitDestructuringObjRestExclusionSet(ParseNode* pattern)
+{
+ MOZ_ASSERT(pattern->isKind(PNK_OBJECT));
+ MOZ_ASSERT(pattern->isArity(PN_LIST));
+ MOZ_ASSERT(pattern->last()->isKind(PNK_SPREAD));
+
+ ptrdiff_t offset = this->offset();
+ if (!emitNewInit(JSProto_Object))
+ return false;
+
+ // Try to construct the shape of the object as we go, so we can emit a
+ // JSOP_NEWOBJECT with the final shape instead.
+ // In the case of computed property names and indices, we cannot fix the
+ // shape at bytecode compile time. When the shape cannot be determined,
+ // |obj| is nulled out.
+
+ // No need to do any guessing for the object kind, since we know the upper
+ // bound of how many properties we plan to have.
+ gc::AllocKind kind = gc::GetGCObjectKind(pattern->pn_count - 1);
+ RootedPlainObject obj(cx, NewBuiltinClassInstance<PlainObject>(cx, kind, TenuredObject));
+ if (!obj)
+ return false;
+
+ RootedAtom pnatom(cx);
+ for (ParseNode* member = pattern->pn_head; member; member = member->pn_next) {
+ if (member->isKind(PNK_SPREAD))
+ break;
+
+ bool isIndex = false;
+ if (member->isKind(PNK_MUTATEPROTO)) {
+ pnatom.set(cx->names().proto);
+ } else {
+ ParseNode* key = member->pn_left;
+ if (key->isKind(PNK_NUMBER)) {
+ if (!emitNumberOp(key->pn_dval))
+ return false;
+ isIndex = true;
+ } else if (key->isKind(PNK_OBJECT_PROPERTY_NAME) || key->isKind(PNK_STRING)) {
+ pnatom.set(key->pn_atom);
+ } else {
+ // Otherwise this is a computed property name which needs to
+ // be added dynamically.
+ obj.set(nullptr);
+ continue;
+ }
+ }
+
+ // Initialize elements with |undefined|.
+ if (!emit1(JSOP_UNDEFINED))
+ return false;
+
+ if (isIndex) {
+ obj.set(nullptr);
+ if (!emit1(JSOP_INITELEM))
+ return false;
+ } else {
+ uint32_t index;
+ if (!makeAtomIndex(pnatom, &index))
+ return false;
+
+ if (obj) {
+ MOZ_ASSERT(!obj->inDictionaryMode());
+ Rooted<jsid> id(cx, AtomToId(pnatom));
+ if (!NativeDefineProperty(cx, obj, id, UndefinedHandleValue, nullptr, nullptr,
+ JSPROP_ENUMERATE))
+ {
+ return false;
+ }
+ if (obj->inDictionaryMode())
+ obj.set(nullptr);
+ }
+
+ if (!emitIndex32(JSOP_INITPROP, index))
+ return false;
+ }
+ }
+
+ if (obj) {
+ // The object survived and has a predictable shape: update the
+ // original bytecode.
+ if (!replaceNewInitWithNewObject(obj, offset))
return false;
}
@@ -6242,6 +6379,9 @@ ParseNode::getConstantValue(ExclusiveContext* cx, AllowConstantObjects allowObje
case PNK_NULL:
vp.setNull();
return true;
+ case PNK_RAW_UNDEFINED:
+ vp.setUndefined();
+ return true;
case PNK_CALLSITEOBJ:
case PNK_ARRAY: {
unsigned count;
@@ -6281,8 +6421,8 @@ ParseNode::getConstantValue(ExclusiveContext* cx, AllowConstantObjects allowObje
}
MOZ_ASSERT(idx == count);
- JSObject* obj = ObjectGroup::newArrayObject(cx, values.begin(), values.length(),
- newKind, arrayKind);
+ ArrayObject* obj = ObjectGroup::newArrayObject(cx, values.begin(), values.length(),
+ newKind, arrayKind);
if (!obj)
return false;
@@ -6645,7 +6785,7 @@ BytecodeEmitter::emitLexicalScopeBody(ParseNode* body, EmitLineNumberNote emitLi
}
// Line notes were updated by emitLexicalScope.
- return emitTree(body, emitLineNote);
+ return emitTree(body, ValueUsage::WantValue, emitLineNote);
}
// Using MOZ_NEVER_INLINE in here is a workaround for llvm.org/pr14047. See
@@ -6747,9 +6887,9 @@ BytecodeEmitter::emitRequireObjectCoercible()
return false;
if (!emit2(JSOP_PICK, 2)) // VAL REQUIREOBJECTCOERCIBLE UNDEFINED VAL
return false;
- if (!emitCall(JSOP_CALL, 1)) // VAL IGNORED
+ if (!emitCall(JSOP_CALL_IGNORES_RV, 1))// VAL IGNORED
return false;
- checkTypeSet(JSOP_CALL);
+ checkTypeSet(JSOP_CALL_IGNORES_RV);
if (!emit1(JSOP_POP)) // VAL
return false;
@@ -6759,6 +6899,53 @@ BytecodeEmitter::emitRequireObjectCoercible()
}
bool
+BytecodeEmitter::emitCopyDataProperties(CopyOption option)
+{
+ DebugOnly<int32_t> depth = this->stackDepth;
+
+ uint32_t argc;
+ if (option == CopyOption::Filtered) {
+ MOZ_ASSERT(depth > 2); // TARGET SOURCE SET
+ argc = 3;
+
+ if (!emitAtomOp(cx->names().CopyDataProperties,
+ JSOP_GETINTRINSIC)) // TARGET SOURCE SET COPYDATAPROPERTIES
+ {
+ return false;
+ }
+ } else {
+ MOZ_ASSERT(depth > 1); // TARGET SOURCE
+ argc = 2;
+
+ if (!emitAtomOp(cx->names().CopyDataPropertiesUnfiltered,
+ JSOP_GETINTRINSIC)) // TARGET SOURCE COPYDATAPROPERTIES
+ {
+ return false;
+ }
+ }
+
+ if (!emit1(JSOP_UNDEFINED)) // TARGET SOURCE *SET COPYDATAPROPERTIES UNDEFINED
+ return false;
+ if (!emit2(JSOP_PICK, argc + 1)) // SOURCE *SET COPYDATAPROPERTIES UNDEFINED TARGET
+ return false;
+ if (!emit2(JSOP_PICK, argc + 1)) // *SET COPYDATAPROPERTIES UNDEFINED TARGET SOURCE
+ return false;
+ if (option == CopyOption::Filtered) {
+ if (!emit2(JSOP_PICK, argc + 1)) // COPYDATAPROPERTIES UNDEFINED TARGET SOURCE SET
+ return false;
+ }
+ if (!emitCall(JSOP_CALL_IGNORES_RV, argc)) // IGNORED
+ return false;
+ checkTypeSet(JSOP_CALL_IGNORES_RV);
+
+ if (!emit1(JSOP_POP)) // -
+ return false;
+
+ MOZ_ASSERT(depth - int(argc) == this->stackDepth);
+ return true;
+}
+
+bool
BytecodeEmitter::emitIterator()
{
// Convert iterable to iterator.
@@ -7269,12 +7456,14 @@ BytecodeEmitter::emitCStyleFor(ParseNode* pn, EmitterScope* headLexicalEmitterSc
// scope, but we still need to emit code for the initializers.)
if (!updateSourceCoordNotes(init->pn_pos.begin))
return false;
- if (!emitTree(init))
- return false;
-
- if (!init->isForLoopDeclaration()) {
+ if (init->isForLoopDeclaration()) {
+ if (!emitTree(init))
+ return false;
+ } else {
// 'init' is an expression, not a declaration. emitTree left its
// value on the stack.
+ if (!emitTree(init, ValueUsage::IgnoreValue))
+ return false;
if (!emit1(JSOP_POP))
return false;
}
@@ -7356,7 +7545,7 @@ BytecodeEmitter::emitCStyleFor(ParseNode* pn, EmitterScope* headLexicalEmitterSc
if (!updateSourceCoordNotes(update->pn_pos.begin))
return false;
- if (!emitTree(update))
+ if (!emitTree(update, ValueUsage::IgnoreValue))
return false;
if (!emit1(JSOP_POP))
return false;
@@ -7839,7 +8028,8 @@ BytecodeEmitter::emitFunction(ParseNode* pn, bool needsProto)
Rooted<JSObject*> sourceObject(cx, script->sourceObject());
Rooted<JSScript*> script(cx, JSScript::Create(cx, options, sourceObject,
funbox->bufStart, funbox->bufEnd,
- funbox->preludeStart));
+ funbox->toStringStart,
+ funbox->toStringEnd));
if (!script)
return false;
@@ -8682,8 +8872,9 @@ BytecodeEmitter::emitStatement(ParseNode* pn)
if (useful) {
JSOp op = wantval ? JSOP_SETRVAL : JSOP_POP;
+ ValueUsage valueUsage = wantval ? ValueUsage::WantValue : ValueUsage::IgnoreValue;
MOZ_ASSERT_IF(pn2->isKind(PNK_ASSIGN), pn2->isOp(JSOP_NOP));
- if (!emitTree(pn2))
+ if (!emitTree(pn2, valueUsage))
return false;
if (!emit1(op))
return false;
@@ -9033,7 +9224,7 @@ BytecodeEmitter::emitOptimizeSpread(ParseNode* arg0, JumpList* jmp, bool* emitte
}
bool
-BytecodeEmitter::emitCallOrNew(ParseNode* pn)
+BytecodeEmitter::emitCallOrNew(ParseNode* pn, ValueUsage valueUsage /* = ValueUsage::WantValue */)
{
bool callop = pn->isKind(PNK_CALL) || pn->isKind(PNK_TAGGED_TEMPLATE);
/*
@@ -9192,7 +9383,7 @@ BytecodeEmitter::emitCallOrNew(ParseNode* pn)
return false;
}
- if (!emitArray(args, argc, JSOP_SPREADCALLARRAY))
+ if (!emitArray(args, argc))
return false;
if (optCodeEmitted) {
@@ -9212,13 +9403,20 @@ BytecodeEmitter::emitCallOrNew(ParseNode* pn)
}
if (!spread) {
- if (!emitCall(pn->getOp(), argc, pn))
- return false;
+ if (pn->getOp() == JSOP_CALL && valueUsage == ValueUsage::IgnoreValue) {
+ if (!emitCall(JSOP_CALL_IGNORES_RV, argc, pn))
+ return false;
+ checkTypeSet(JSOP_CALL_IGNORES_RV);
+ } else {
+ if (!emitCall(pn->getOp(), argc, pn))
+ return false;
+ checkTypeSet(pn->getOp());
+ }
} else {
if (!emit1(pn->getOp()))
return false;
+ checkTypeSet(pn->getOp());
}
- checkTypeSet(pn->getOp());
if (pn->isOp(JSOP_EVAL) ||
pn->isOp(JSOP_STRICTEVAL) ||
pn->isOp(JSOP_SPREADEVAL) ||
@@ -9316,12 +9514,13 @@ BytecodeEmitter::emitLogical(ParseNode* pn)
}
bool
-BytecodeEmitter::emitSequenceExpr(ParseNode* pn)
+BytecodeEmitter::emitSequenceExpr(ParseNode* pn,
+ ValueUsage valueUsage /* = ValueUsage::WantValue */)
{
for (ParseNode* child = pn->pn_head; ; child = child->pn_next) {
if (!updateSourceCoordNotes(child->pn_pos.begin))
return false;
- if (!emitTree(child))
+ if (!emitTree(child, child->pn_next ? ValueUsage::IgnoreValue : valueUsage))
return false;
if (!child->pn_next)
break;
@@ -9384,7 +9583,8 @@ BytecodeEmitter::emitLabeledStatement(const LabeledStatement* pn)
}
bool
-BytecodeEmitter::emitConditionalExpression(ConditionalExpression& conditional)
+BytecodeEmitter::emitConditionalExpression(ConditionalExpression& conditional,
+ ValueUsage valueUsage /* = ValueUsage::WantValue */)
{
/* Emit the condition, then branch if false to the else part. */
if (!emitTree(&conditional.condition()))
@@ -9394,13 +9594,13 @@ BytecodeEmitter::emitConditionalExpression(ConditionalExpression& conditional)
if (!ifThenElse.emitCond())
return false;
- if (!emitTreeInBranch(&conditional.thenExpression()))
+ if (!emitTreeInBranch(&conditional.thenExpression(), valueUsage))
return false;
if (!ifThenElse.emitElse())
return false;
- if (!emitTreeInBranch(&conditional.elseExpression()))
+ if (!emitTreeInBranch(&conditional.elseExpression(), valueUsage))
return false;
if (!ifThenElse.emitEnd())
@@ -9429,6 +9629,22 @@ BytecodeEmitter::emitPropertyList(ParseNode* pn, MutableHandlePlainObject objp,
continue;
}
+ if (propdef->isKind(PNK_SPREAD)) {
+ MOZ_ASSERT(type == ObjectLiteral);
+
+ if (!emit1(JSOP_DUP))
+ return false;
+
+ if (!emitTree(propdef->pn_kid))
+ return false;
+
+ if (!emitCopyDataProperties(CopyOption::Unfiltered))
+ return false;
+
+ objp.set(nullptr);
+ continue;
+ }
+
bool extraPop = false;
if (type == ClassBody && propdef->as<ClassMethod>().isStatic()) {
extraPop = true;
@@ -9452,16 +9668,6 @@ BytecodeEmitter::emitPropertyList(ParseNode* pn, MutableHandlePlainObject objp,
{
continue;
}
-
- // The parser already checked for atoms representing indexes and
- // used PNK_NUMBER instead, but also watch for ids which TI treats
- // as indexes for simpliciation of downstream analysis.
- jsid id = NameToId(key->pn_atom->asPropertyName());
- if (id != IdToTypeId(id)) {
- if (!emitTree(key))
- return false;
- isIndex = true;
- }
} else {
if (!emitComputedPropertyName(key))
return false;
@@ -9542,8 +9748,7 @@ BytecodeEmitter::emitPropertyList(ParseNode* pn, MutableHandlePlainObject objp,
MOZ_ASSERT(!IsHiddenInitOp(op));
MOZ_ASSERT(!objp->inDictionaryMode());
Rooted<jsid> id(cx, AtomToId(key->pn_atom));
- RootedValue undefinedValue(cx, UndefinedValue());
- if (!NativeDefineProperty(cx, objp, id, undefinedValue, nullptr, nullptr,
+ if (!NativeDefineProperty(cx, objp, id, UndefinedHandleValue, nullptr, nullptr,
JSPROP_ENUMERATE))
{
return false;
@@ -9586,15 +9791,16 @@ BytecodeEmitter::emitObject(ParseNode* pn)
if (!emitNewInit(JSProto_Object))
return false;
- /*
- * Try to construct the shape of the object as we go, so we can emit a
- * JSOP_NEWOBJECT with the final shape instead.
- */
- RootedPlainObject obj(cx);
- // No need to do any guessing for the object kind, since we know exactly
- // how many properties we plan to have.
+ // Try to construct the shape of the object as we go, so we can emit a
+ // JSOP_NEWOBJECT with the final shape instead.
+ // In the case of computed property names and indices, we cannot fix the
+ // shape at bytecode compile time. When the shape cannot be determined,
+ // |obj| is nulled out.
+
+ // No need to do any guessing for the object kind, since we know the upper
+ // bound of how many properties we plan to have.
gc::AllocKind kind = gc::GetGCObjectKind(pn->pn_count);
- obj = NewBuiltinClassInstance<PlainObject>(cx, kind, TenuredObject);
+ RootedPlainObject obj(cx, NewBuiltinClassInstance<PlainObject>(cx, kind, TenuredObject));
if (!obj)
return false;
@@ -9602,25 +9808,34 @@ BytecodeEmitter::emitObject(ParseNode* pn)
return false;
if (obj) {
- /*
- * The object survived and has a predictable shape: update the original
- * bytecode.
- */
- ObjectBox* objbox = parser->newObjectBox(obj);
- if (!objbox)
+ // The object survived and has a predictable shape: update the original
+ // bytecode.
+ if (!replaceNewInitWithNewObject(obj, offset))
return false;
+ }
- static_assert(JSOP_NEWINIT_LENGTH == JSOP_NEWOBJECT_LENGTH,
- "newinit and newobject must have equal length to edit in-place");
+ return true;
+}
- uint32_t index = objectList.add(objbox);
- jsbytecode* code = this->code(offset);
- code[0] = JSOP_NEWOBJECT;
- code[1] = jsbytecode(index >> 24);
- code[2] = jsbytecode(index >> 16);
- code[3] = jsbytecode(index >> 8);
- code[4] = jsbytecode(index);
- }
+bool
+BytecodeEmitter::replaceNewInitWithNewObject(JSObject* obj, ptrdiff_t offset)
+{
+ ObjectBox* objbox = parser->newObjectBox(obj);
+ if (!objbox)
+ return false;
+
+ static_assert(JSOP_NEWINIT_LENGTH == JSOP_NEWOBJECT_LENGTH,
+ "newinit and newobject must have equal length to edit in-place");
+
+ uint32_t index = objectList.add(objbox);
+ jsbytecode* code = this->code(offset);
+
+ MOZ_ASSERT(code[0] == JSOP_NEWINIT);
+ code[0] = JSOP_NEWOBJECT;
+ code[1] = jsbytecode(index >> 24);
+ code[2] = jsbytecode(index >> 16);
+ code[3] = jsbytecode(index >> 8);
+ code[4] = jsbytecode(index);
return true;
}
@@ -9683,11 +9898,11 @@ BytecodeEmitter::emitArrayLiteral(ParseNode* pn)
}
}
- return emitArray(pn->pn_head, pn->pn_count, JSOP_NEWARRAY);
+ return emitArray(pn->pn_head, pn->pn_count);
}
bool
-BytecodeEmitter::emitArray(ParseNode* pn, uint32_t count, JSOp op)
+BytecodeEmitter::emitArray(ParseNode* pn, uint32_t count)
{
/*
@@ -9698,7 +9913,6 @@ BytecodeEmitter::emitArray(ParseNode* pn, uint32_t count, JSOp op)
* to avoid dup'ing and popping the array as each element is added, as
* JSOP_SETELEM/JSOP_SETPROP would do.
*/
- MOZ_ASSERT(op == JSOP_NEWARRAY || op == JSOP_SPREADCALLARRAY);
uint32_t nspread = 0;
for (ParseNode* elt = pn; elt; elt = elt->pn_next) {
@@ -9719,7 +9933,7 @@ BytecodeEmitter::emitArray(ParseNode* pn, uint32_t count, JSOp op)
// For arrays with spread, this is a very pessimistic allocation, the
// minimum possible final size.
- if (!emitUint32Operand(op, count - nspread)) // ARRAY
+ if (!emitUint32Operand(JSOP_NEWARRAY, count - nspread)) // ARRAY
return false;
ParseNode* pn2 = pn;
@@ -10220,6 +10434,13 @@ BytecodeEmitter::emitClass(ParseNode* pn)
return false;
}
} else {
+ // In the case of default class constructors, emit the start and end
+ // offsets in the source buffer as source notes so that when we
+ // actually make the constructor during execution, we can give it the
+ // correct toString output.
+ if (!newSrcNote3(SRC_CLASS_SPAN, ptrdiff_t(pn->pn_pos.begin), ptrdiff_t(pn->pn_pos.end)))
+ return false;
+
JSAtom *name = names ? names->innerBinding()->pn_atom : cx->names().empty;
if (heritageExpression) {
if (!emitAtomOp(name, JSOP_DERIVEDCONSTRUCTOR))
@@ -10274,7 +10495,8 @@ BytecodeEmitter::emitClass(ParseNode* pn)
}
bool
-BytecodeEmitter::emitTree(ParseNode* pn, EmitLineNumberNote emitLineNote)
+BytecodeEmitter::emitTree(ParseNode* pn, ValueUsage valueUsage /* = ValueUsage::WantValue */,
+ EmitLineNumberNote emitLineNote /* = EMIT_LINENOTE */)
{
JS_CHECK_RECURSION(cx, return false);
@@ -10396,7 +10618,7 @@ BytecodeEmitter::emitTree(ParseNode* pn, EmitLineNumberNote emitLineNote)
break;
case PNK_COMMA:
- if (!emitSequenceExpr(pn))
+ if (!emitSequenceExpr(pn, valueUsage))
return false;
break;
@@ -10418,7 +10640,7 @@ BytecodeEmitter::emitTree(ParseNode* pn, EmitLineNumberNote emitLineNote)
break;
case PNK_CONDITIONAL:
- if (!emitConditionalExpression(pn->as<ConditionalExpression>()))
+ if (!emitConditionalExpression(pn->as<ConditionalExpression>(), valueUsage))
return false;
break;
@@ -10531,7 +10753,7 @@ BytecodeEmitter::emitTree(ParseNode* pn, EmitLineNumberNote emitLineNote)
case PNK_CALL:
case PNK_GENEXP:
case PNK_SUPERCALL:
- if (!emitCallOrNew(pn))
+ if (!emitCallOrNew(pn, valueUsage))
return false;
break;
@@ -10637,6 +10859,7 @@ BytecodeEmitter::emitTree(ParseNode* pn, EmitLineNumberNote emitLineNote)
case PNK_TRUE:
case PNK_FALSE:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
if (!emit1(pn->getOp()))
return false;
break;
@@ -10688,12 +10911,13 @@ BytecodeEmitter::emitTree(ParseNode* pn, EmitLineNumberNote emitLineNote)
}
bool
-BytecodeEmitter::emitTreeInBranch(ParseNode* pn)
+BytecodeEmitter::emitTreeInBranch(ParseNode* pn,
+ ValueUsage valueUsage /* = ValueUsage::WantValue */)
{
// Code that may be conditionally executed always need their own TDZ
// cache.
TDZCheckCache tdzCache(this);
- return emitTree(pn);
+ return emitTree(pn, valueUsage);
}
static bool
diff --git a/js/src/frontend/BytecodeEmitter.h b/js/src/frontend/BytecodeEmitter.h
index 814fa11d4..595ee6405 100644
--- a/js/src/frontend/BytecodeEmitter.h
+++ b/js/src/frontend/BytecodeEmitter.h
@@ -171,6 +171,11 @@ struct JumpList {
void patchAll(jsbytecode* code, JumpTarget target);
};
+enum class ValueUsage {
+ WantValue,
+ IgnoreValue
+};
+
struct MOZ_STACK_CLASS BytecodeEmitter
{
class TDZCheckCache;
@@ -356,7 +361,7 @@ struct MOZ_STACK_CLASS BytecodeEmitter
MOZ_MUST_USE bool maybeSetSourceMap();
void tellDebuggerAboutCompiledScript(ExclusiveContext* cx);
- inline TokenStream* tokenStream();
+ inline TokenStream& tokenStream();
BytecodeVector& code() const { return current->code; }
jsbytecode* code(ptrdiff_t offset) const { return current->code.begin() + offset; }
@@ -434,10 +439,12 @@ struct MOZ_STACK_CLASS BytecodeEmitter
};
// Emit code for the tree rooted at pn.
- MOZ_MUST_USE bool emitTree(ParseNode* pn, EmitLineNumberNote emitLineNote = EMIT_LINENOTE);
+ MOZ_MUST_USE bool emitTree(ParseNode* pn, ValueUsage valueUsage = ValueUsage::WantValue,
+ EmitLineNumberNote emitLineNote = EMIT_LINENOTE);
// Emit code for the tree rooted at pn with its own TDZ cache.
- MOZ_MUST_USE bool emitTreeInBranch(ParseNode* pn);
+ MOZ_MUST_USE bool emitTreeInBranch(ParseNode* pn,
+ ValueUsage valueUsage = ValueUsage::WantValue);
// Emit global, eval, or module code for tree rooted at body. Always
// encompasses the entire source.
@@ -521,7 +528,7 @@ struct MOZ_STACK_CLASS BytecodeEmitter
MOZ_MUST_USE bool emitAtomOp(ParseNode* pn, JSOp op);
MOZ_MUST_USE bool emitArrayLiteral(ParseNode* pn);
- MOZ_MUST_USE bool emitArray(ParseNode* pn, uint32_t count, JSOp op);
+ MOZ_MUST_USE bool emitArray(ParseNode* pn, uint32_t count);
MOZ_MUST_USE bool emitArrayComp(ParseNode* pn);
MOZ_MUST_USE bool emitInternedScopeOp(uint32_t index, JSOp op);
@@ -533,6 +540,8 @@ struct MOZ_STACK_CLASS BytecodeEmitter
MOZ_NEVER_INLINE MOZ_MUST_USE bool emitFunction(ParseNode* pn, bool needsProto = false);
MOZ_NEVER_INLINE MOZ_MUST_USE bool emitObject(ParseNode* pn);
+ MOZ_MUST_USE bool replaceNewInitWithNewObject(JSObject* obj, ptrdiff_t offset);
+
MOZ_MUST_USE bool emitHoistedFunctionsInList(ParseNode* pn);
MOZ_MUST_USE bool emitPropertyList(ParseNode* pn, MutableHandlePlainObject objp,
@@ -660,6 +669,10 @@ struct MOZ_STACK_CLASS BytecodeEmitter
// []/{} expression).
MOZ_MUST_USE bool emitSetOrInitializeDestructuring(ParseNode* target, DestructuringFlavor flav);
+ // emitDestructuringObjRestExclusionSet emits the property exclusion set
+ // for the rest-property in an object pattern.
+ MOZ_MUST_USE bool emitDestructuringObjRestExclusionSet(ParseNode* pattern);
+
// emitDestructuringOps assumes the to-be-destructured value has been
// pushed on the stack and emits code to destructure each part of a [] or
// {} lhs expression.
@@ -677,6 +690,15 @@ struct MOZ_STACK_CLASS BytecodeEmitter
// object, with no overall effect on the stack.
MOZ_MUST_USE bool emitRequireObjectCoercible();
+ enum class CopyOption {
+ Filtered, Unfiltered
+ };
+
+ // Calls either the |CopyDataProperties| or the
+ // |CopyDataPropertiesUnfiltered| intrinsic function, consumes three (or
+ // two in the latter case) elements from the stack.
+ MOZ_MUST_USE bool emitCopyDataProperties(CopyOption option);
+
// emitIterator expects the iterable to already be on the stack.
// It will replace that stack value with the corresponding iterator
MOZ_MUST_USE bool emitIterator();
@@ -724,16 +746,18 @@ struct MOZ_STACK_CLASS BytecodeEmitter
MOZ_MUST_USE bool emitRightAssociative(ParseNode* pn);
MOZ_MUST_USE bool emitLeftAssociative(ParseNode* pn);
MOZ_MUST_USE bool emitLogical(ParseNode* pn);
- MOZ_MUST_USE bool emitSequenceExpr(ParseNode* pn);
+ MOZ_MUST_USE bool emitSequenceExpr(ParseNode* pn,
+ ValueUsage valueUsage = ValueUsage::WantValue);
MOZ_NEVER_INLINE MOZ_MUST_USE bool emitIncOrDec(ParseNode* pn);
- MOZ_MUST_USE bool emitConditionalExpression(ConditionalExpression& conditional);
+ MOZ_MUST_USE bool emitConditionalExpression(ConditionalExpression& conditional,
+ ValueUsage valueUsage = ValueUsage::WantValue);
MOZ_MUST_USE bool isRestParameter(ParseNode* pn, bool* result);
MOZ_MUST_USE bool emitOptimizeSpread(ParseNode* arg0, JumpList* jmp, bool* emitted);
- MOZ_MUST_USE bool emitCallOrNew(ParseNode* pn);
+ MOZ_MUST_USE bool emitCallOrNew(ParseNode* pn, ValueUsage valueUsage = ValueUsage::WantValue);
MOZ_MUST_USE bool emitSelfHostedCallFunction(ParseNode* pn);
MOZ_MUST_USE bool emitSelfHostedResumeGenerator(ParseNode* pn);
MOZ_MUST_USE bool emitSelfHostedForceInterpreter(ParseNode* pn);
diff --git a/js/src/frontend/FoldConstants.cpp b/js/src/frontend/FoldConstants.cpp
index 6f62ffac6..689fa02b4 100644
--- a/js/src/frontend/FoldConstants.cpp
+++ b/js/src/frontend/FoldConstants.cpp
@@ -378,6 +378,7 @@ ContainsHoistedDeclaration(ExclusiveContext* cx, ParseNode* node, bool* result)
case PNK_TRUE:
case PNK_FALSE:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
case PNK_THIS:
case PNK_ELISION:
case PNK_NUMBER:
@@ -468,6 +469,7 @@ IsEffectless(ParseNode* node)
node->isKind(PNK_TEMPLATE_STRING) ||
node->isKind(PNK_NUMBER) ||
node->isKind(PNK_NULL) ||
+ node->isKind(PNK_RAW_UNDEFINED) ||
node->isKind(PNK_FUNCTION) ||
node->isKind(PNK_GENEXP);
}
@@ -492,6 +494,7 @@ Boolish(ParseNode* pn)
case PNK_FALSE:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
return Falsy;
case PNK_VOID: {
@@ -1342,15 +1345,8 @@ FoldElement(ExclusiveContext* cx, ParseNode** nodePtr, Parser<FullParseHandler>&
if (!name)
return true;
- // Also don't optimize if the name doesn't map directly to its id for TI's
- // purposes.
- if (NameToId(name) != IdToTypeId(NameToId(name)))
- return true;
-
// Optimization 3: We have expr["foo"] where foo is not an index. Convert
// to a property access (like expr.foo) that optimizes better downstream.
- // Don't bother with this for names that TI considers to be indexes, to
- // simplify downstream analysis.
ParseNode* dottedAccess = parser.handler.newPropertyAccess(expr, name, node->pn_pos.end);
if (!dottedAccess)
return false;
@@ -1643,6 +1639,7 @@ Fold(ExclusiveContext* cx, ParseNode** pnp, Parser<FullParseHandler>& parser, bo
case PNK_TRUE:
case PNK_FALSE:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
case PNK_ELISION:
case PNK_NUMBER:
case PNK_DEBUGGER:
diff --git a/js/src/frontend/FullParseHandler.h b/js/src/frontend/FullParseHandler.h
index b619cf24c..2d7f57e1e 100644
--- a/js/src/frontend/FullParseHandler.h
+++ b/js/src/frontend/FullParseHandler.h
@@ -10,6 +10,8 @@
#include "mozilla/Attributes.h"
#include "mozilla/PodOperations.h"
+#include <string.h>
+
#include "frontend/ParseNode.h"
#include "frontend/SharedContext.h"
@@ -181,6 +183,10 @@ class FullParseHandler
return new_<NullLiteral>(pos);
}
+ ParseNode* newRawUndefinedLiteral(const TokenPos& pos) {
+ return new_<RawUndefinedLiteral>(pos);
+ }
+
// The Boxer object here is any object that can allocate ObjectBoxes.
// Specifically, a Boxer has a .newObjectBox(T) method that accepts a
// Rooted<RegExpObject*> argument and returns an ObjectBox*.
@@ -296,10 +302,9 @@ class FullParseHandler
}
MOZ_MUST_USE bool addSpreadElement(ParseNode* literal, uint32_t begin, ParseNode* inner) {
- TokenPos pos(begin, inner->pn_pos.end);
- ParseNode* spread = new_<UnaryNode>(PNK_SPREAD, JSOP_NOP, pos, inner);
+ ParseNode* spread = newSpread(begin, inner);
if (!spread)
- return null();
+ return false;
literal->append(spread);
literal->pn_xflags |= PNX_ARRAYHOLESPREAD | PNX_NONCONST;
return true;
@@ -327,8 +332,10 @@ class FullParseHandler
return literal;
}
- ParseNode* newClass(ParseNode* name, ParseNode* heritage, ParseNode* methodBlock) {
- return new_<ClassNode>(name, heritage, methodBlock);
+ ParseNode* newClass(ParseNode* name, ParseNode* heritage, ParseNode* methodBlock,
+ const TokenPos& pos)
+ {
+ return new_<ClassNode>(name, heritage, methodBlock, pos);
}
ParseNode* newClassMethodList(uint32_t begin) {
return new_<ListNode>(PNK_CLASSMETHODLIST, TokenPos(begin, begin + 1));
@@ -388,6 +395,18 @@ class FullParseHandler
return true;
}
+ MOZ_MUST_USE bool addSpreadProperty(ParseNode* literal, uint32_t begin, ParseNode* inner) {
+ MOZ_ASSERT(literal->isKind(PNK_OBJECT));
+ MOZ_ASSERT(literal->isArity(PN_LIST));
+
+ setListFlag(literal, PNX_NONCONST);
+ ParseNode* spread = newSpread(begin, inner);
+ if (!spread)
+ return false;
+ literal->append(spread);
+ return true;
+ }
+
MOZ_MUST_USE bool addObjectMethodDefinition(ParseNode* literal, ParseNode* key, ParseNode* fn,
JSOp op)
{
@@ -870,29 +889,29 @@ class FullParseHandler
return node->isKind(PNK_NAME);
}
- bool nameIsEvalAnyParentheses(ParseNode* node, ExclusiveContext* cx) {
- MOZ_ASSERT(isNameAnyParentheses(node),
- "must only call this function on known names");
+ bool isArgumentsAnyParentheses(ParseNode* node, ExclusiveContext* cx) {
+ return node->isKind(PNK_NAME) && node->pn_atom == cx->names().arguments;
+ }
- return node->pn_atom == cx->names().eval;
+ bool isEvalAnyParentheses(ParseNode* node, ExclusiveContext* cx) {
+ return node->isKind(PNK_NAME) && node->pn_atom == cx->names().eval;
}
const char* nameIsArgumentsEvalAnyParentheses(ParseNode* node, ExclusiveContext* cx) {
MOZ_ASSERT(isNameAnyParentheses(node),
"must only call this function on known names");
- if (nameIsEvalAnyParentheses(node, cx))
+ if (isEvalAnyParentheses(node, cx))
return js_eval_str;
- if (node->pn_atom == cx->names().arguments)
+ if (isArgumentsAnyParentheses(node, cx))
return js_arguments_str;
return nullptr;
}
- bool nameIsUnparenthesizedAsync(ParseNode* node, ExclusiveContext* cx) {
- MOZ_ASSERT(isNameAnyParentheses(node),
- "must only call this function on known names");
-
- return node->pn_atom == cx->names().async;
+ bool isAsyncKeyword(ParseNode* node, ExclusiveContext* cx) {
+ return node->isKind(PNK_NAME) &&
+ node->pn_pos.begin + strlen("async") == node->pn_pos.end &&
+ node->pn_atom == cx->names().async;
}
bool isCall(ParseNode* pn) {
diff --git a/js/src/frontend/GenerateReservedWords.py b/js/src/frontend/GenerateReservedWords.py
new file mode 100644
index 000000000..bd698cc5f
--- /dev/null
+++ b/js/src/frontend/GenerateReservedWords.py
@@ -0,0 +1,213 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import re
+import sys
+
+def read_reserved_word_list(filename):
+ macro_pat = re.compile(r"^\s*macro\(([^,]+), *[^,]+, *[^\)]+\)\s*\\?$")
+
+ reserved_word_list = []
+ index = 0
+ with open(filename, 'r') as f:
+ for line in f:
+ m = macro_pat.search(line)
+ if m:
+ reserved_word_list.append((index, m.group(1)))
+ index += 1
+
+ assert(len(reserved_word_list) != 0)
+
+ return reserved_word_list
+
+def line(opt, s):
+ opt['output'].write('{}{}\n'.format(' ' * opt['indent_level'], s))
+
+def indent(opt):
+ opt['indent_level'] += 1
+
+def dedent(opt):
+ opt['indent_level'] -= 1
+
+def span_and_count_at(reserved_word_list, column):
+ assert(len(reserved_word_list) != 0);
+
+ chars_dict = {}
+ for index, word in reserved_word_list:
+ chars_dict[ord(word[column])] = True
+
+ chars = sorted(chars_dict.keys())
+ return chars[-1] - chars[0] + 1, len(chars)
+
+def optimal_switch_column(opt, reserved_word_list, columns, unprocessed_columns):
+ assert(len(reserved_word_list) != 0);
+ assert(unprocessed_columns != 0);
+
+ min_count = 0
+ min_span = 0
+ min_count_index = 0
+ min_span_index = 0
+
+ for index in range(0, unprocessed_columns):
+ span, count = span_and_count_at(reserved_word_list, columns[index])
+ assert(span != 0)
+
+ if span == 1:
+ assert(count == 1)
+ return 1, True
+
+ assert(count != 1)
+ if index == 0 or min_span > span:
+ min_span = span
+ min_span_index = index
+
+ if index == 0 or min_count > count:
+ min_count = count
+ min_count_index = index
+
+ if min_count <= opt['use_if_threshold']:
+ return min_count_index, True
+
+ return min_span_index, False
+
+def split_list_per_column(reserved_word_list, column):
+ assert(len(reserved_word_list) != 0);
+
+ column_dict = {}
+ for item in reserved_word_list:
+ index, word = item
+ per_column = column_dict.setdefault(word[column], [])
+ per_column.append(item)
+
+ return sorted(column_dict.items(), key=lambda (char, word): ord(char))
+
+def generate_letter_switch(opt, unprocessed_columns, reserved_word_list,
+ columns=None):
+ assert(len(reserved_word_list) != 0);
+
+ if not columns:
+ columns = range(0, unprocessed_columns)
+
+ if len(reserved_word_list) == 1:
+ index, word = reserved_word_list[0]
+
+ if unprocessed_columns == 0:
+ line(opt, 'JSRW_GOT_MATCH({}) /* {} */'.format(index, word))
+ return
+
+ if unprocessed_columns > opt['char_tail_test_threshold']:
+ line(opt, 'JSRW_TEST_GUESS({}) /* {} */'.format(index, word))
+ return
+
+ conds = []
+ for column in columns[0:unprocessed_columns]:
+ quoted = repr(word[column])
+ conds.append('JSRW_AT({})=={}'.format(column, quoted))
+
+ line(opt, 'if ({}) {{'.format(' && '.join(conds)))
+
+ indent(opt)
+ line(opt, 'JSRW_GOT_MATCH({}) /* {} */'.format(index, word))
+ dedent(opt)
+
+ line(opt, '}')
+ line(opt, 'JSRW_NO_MATCH()')
+ return
+
+ assert(unprocessed_columns != 0);
+
+ optimal_column_index, use_if = optimal_switch_column(opt, reserved_word_list,
+ columns,
+ unprocessed_columns)
+ optimal_column = columns[optimal_column_index]
+
+ # Make a copy to avoid breaking passed list.
+ columns = columns[:]
+ columns[optimal_column_index] = columns[unprocessed_columns - 1]
+
+ list_per_column = split_list_per_column(reserved_word_list, optimal_column)
+
+ if not use_if:
+ line(opt, 'switch (JSRW_AT({})) {{'.format(optimal_column))
+
+ for char, reserved_word_list_per_column in list_per_column:
+ quoted = repr(char)
+ if use_if:
+ line(opt, 'if (JSRW_AT({}) == {}) {{'.format(optimal_column,
+ quoted))
+ else:
+ line(opt, ' case {}:'.format(quoted))
+
+ indent(opt)
+ generate_letter_switch(opt, unprocessed_columns - 1,
+ reserved_word_list_per_column, columns)
+ dedent(opt)
+
+ if use_if:
+ line(opt, '}')
+
+ if not use_if:
+ line(opt, '}')
+
+ line(opt, 'JSRW_NO_MATCH()')
+
+def split_list_per_length(reserved_word_list):
+ assert(len(reserved_word_list) != 0);
+
+ length_dict = {}
+ for item in reserved_word_list:
+ index, word = item
+ per_length = length_dict.setdefault(len(word), [])
+ per_length.append(item)
+
+ return sorted(length_dict.items(), key=lambda (length, word): length)
+
+def generate_switch(opt, reserved_word_list):
+ assert(len(reserved_word_list) != 0);
+
+ line(opt, '/*')
+ line(opt, ' * Generating switch for the list of {} entries:'.format(len(reserved_word_list)))
+ for index, word in reserved_word_list:
+ line(opt, ' * {}'.format(word))
+ line(opt, ' */')
+
+ list_per_length = split_list_per_length(reserved_word_list)
+
+ use_if = False
+ if len(list_per_length) < opt['use_if_threshold']:
+ use_if = True
+
+ if not use_if:
+ line(opt, 'switch (JSRW_LENGTH()) {')
+
+ for length, reserved_word_list_per_length in list_per_length:
+ if use_if:
+ line(opt, 'if (JSRW_LENGTH() == {}) {{'.format(length))
+ else:
+ line(opt, ' case {}:'.format(length))
+
+ indent(opt)
+ generate_letter_switch(opt, length, reserved_word_list_per_length)
+ dedent(opt)
+
+ if use_if:
+ line(opt, '}')
+
+ if not use_if:
+ line(opt, '}')
+ line(opt, 'JSRW_NO_MATCH()')
+
+def main(output, reserved_words_h):
+ reserved_word_list = read_reserved_word_list(reserved_words_h)
+
+ opt = {
+ 'indent_level': 1,
+ 'use_if_threshold': 3,
+ 'char_tail_test_threshold': 4,
+ 'output': output
+ }
+ generate_switch(opt, reserved_word_list)
+
+if __name__ == '__main__':
+ main(sys.stdout, *sys.argv[1:])
diff --git a/js/src/frontend/NameAnalysisTypes.h b/js/src/frontend/NameAnalysisTypes.h
index d39e177fb..2d327c827 100644
--- a/js/src/frontend/NameAnalysisTypes.h
+++ b/js/src/frontend/NameAnalysisTypes.h
@@ -78,6 +78,7 @@ enum class DeclarationKind : uint8_t
Const,
Import,
BodyLevelFunction,
+ ModuleBodyLevelFunction,
LexicalFunction,
VarForAnnexBLexicalFunction,
SimpleCatchParameter,
@@ -95,6 +96,7 @@ DeclarationKindToBindingKind(DeclarationKind kind)
case DeclarationKind::Var:
case DeclarationKind::BodyLevelFunction:
+ case DeclarationKind::ModuleBodyLevelFunction:
case DeclarationKind::VarForAnnexBLexicalFunction:
case DeclarationKind::ForOfVar:
return BindingKind::Var;
@@ -124,6 +126,7 @@ DeclarationKindIsLexical(DeclarationKind kind)
// Used in Parser to track declared names.
class DeclaredNameInfo
{
+ uint32_t pos_;
DeclarationKind kind_;
// If the declared name is a binding, whether the binding is closed
@@ -132,8 +135,9 @@ class DeclaredNameInfo
bool closedOver_;
public:
- explicit DeclaredNameInfo(DeclarationKind kind)
- : kind_(kind),
+ explicit DeclaredNameInfo(DeclarationKind kind, uint32_t pos)
+ : pos_(pos),
+ kind_(kind),
closedOver_(false)
{ }
@@ -144,6 +148,12 @@ class DeclaredNameInfo
return kind_;
}
+ static const uint32_t npos = uint32_t(-1);
+
+ uint32_t pos() const {
+ return pos_;
+ }
+
void alterKind(DeclarationKind kind) {
kind_ = kind;
}
diff --git a/js/src/frontend/NameFunctions.cpp b/js/src/frontend/NameFunctions.cpp
index ce1318f0b..dc54d0a88 100644
--- a/js/src/frontend/NameFunctions.cpp
+++ b/js/src/frontend/NameFunctions.cpp
@@ -316,7 +316,8 @@ class NameResolver
return false;
// Next is the callsite object node. This node only contains
- // internal strings and an array -- no user-controlled expressions.
+ // internal strings or undefined and an array -- no user-controlled
+ // expressions.
element = element->pn_next;
#ifdef DEBUG
{
@@ -326,7 +327,7 @@ class NameResolver
for (ParseNode* kid = array->pn_head; kid; kid = kid->pn_next)
MOZ_ASSERT(kid->isKind(PNK_TEMPLATE_STRING));
for (ParseNode* next = array->pn_next; next; next = next->pn_next)
- MOZ_ASSERT(next->isKind(PNK_TEMPLATE_STRING));
+ MOZ_ASSERT(next->isKind(PNK_TEMPLATE_STRING) || next->isKind(PNK_RAW_UNDEFINED));
}
#endif
@@ -382,6 +383,7 @@ class NameResolver
case PNK_TRUE:
case PNK_FALSE:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
case PNK_ELISION:
case PNK_GENERATOR:
case PNK_NUMBER:
diff --git a/js/src/frontend/ParseNode.cpp b/js/src/frontend/ParseNode.cpp
index 91f17625c..5fe64e3d3 100644
--- a/js/src/frontend/ParseNode.cpp
+++ b/js/src/frontend/ParseNode.cpp
@@ -190,6 +190,7 @@ PushNodeChildren(ParseNode* pn, NodeStack* stack)
case PNK_TRUE:
case PNK_FALSE:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
case PNK_ELISION:
case PNK_GENERATOR:
case PNK_NUMBER:
@@ -685,6 +686,7 @@ NullaryNode::dump()
case PNK_TRUE: fprintf(stderr, "#true"); break;
case PNK_FALSE: fprintf(stderr, "#false"); break;
case PNK_NULL: fprintf(stderr, "#null"); break;
+ case PNK_RAW_UNDEFINED: fprintf(stderr, "#undefined"); break;
case PNK_NUMBER: {
ToCStringBuf cbuf;
diff --git a/js/src/frontend/ParseNode.h b/js/src/frontend/ParseNode.h
index c3523afe4..1f20f3988 100644
--- a/js/src/frontend/ParseNode.h
+++ b/js/src/frontend/ParseNode.h
@@ -54,6 +54,7 @@ class ObjectBox;
F(TRUE) \
F(FALSE) \
F(NULL) \
+ F(RAW_UNDEFINED) \
F(THIS) \
F(FUNCTION) \
F(MODULE) \
@@ -406,7 +407,8 @@ IsTypeofKind(ParseNodeKind kind)
* PNK_NUMBER dval pn_dval: double value of numeric literal
* PNK_TRUE, nullary pn_op: JSOp bytecode
* PNK_FALSE,
- * PNK_NULL
+ * PNK_NULL,
+ * PNK_RAW_UNDEFINED
*
* PNK_THIS, unary pn_kid: '.this' Name if function `this`, else nullptr
* PNK_SUPERBASE unary pn_kid: '.this' Name
@@ -686,7 +688,8 @@ class ParseNode
isKind(PNK_STRING) ||
isKind(PNK_TRUE) ||
isKind(PNK_FALSE) ||
- isKind(PNK_NULL);
+ isKind(PNK_NULL) ||
+ isKind(PNK_RAW_UNDEFINED);
}
/* Return true if this node appears in a Directive Prologue. */
@@ -1141,6 +1144,16 @@ class NullLiteral : public ParseNode
explicit NullLiteral(const TokenPos& pos) : ParseNode(PNK_NULL, JSOP_NULL, PN_NULLARY, pos) { }
};
+// This is only used internally, currently just for tagged templates.
+// It represents the value 'undefined' (aka `void 0`), like NullLiteral
+// represents the value 'null'.
+class RawUndefinedLiteral : public ParseNode
+{
+ public:
+ explicit RawUndefinedLiteral(const TokenPos& pos)
+ : ParseNode(PNK_RAW_UNDEFINED, JSOP_UNDEFINED, PN_NULLARY, pos) { }
+};
+
class BooleanLiteral : public ParseNode
{
public:
@@ -1296,8 +1309,9 @@ struct ClassNames : public BinaryNode {
};
struct ClassNode : public TernaryNode {
- ClassNode(ParseNode* names, ParseNode* heritage, ParseNode* methodsOrBlock)
- : TernaryNode(PNK_CLASS, JSOP_NOP, names, heritage, methodsOrBlock)
+ ClassNode(ParseNode* names, ParseNode* heritage, ParseNode* methodsOrBlock,
+ const TokenPos& pos)
+ : TernaryNode(PNK_CLASS, JSOP_NOP, names, heritage, methodsOrBlock, pos)
{
MOZ_ASSERT_IF(names, names->is<ClassNames>());
MOZ_ASSERT(methodsOrBlock->is<LexicalScopeNode>() ||
@@ -1361,6 +1375,7 @@ ParseNode::isConstant()
case PNK_STRING:
case PNK_TEMPLATE_STRING:
case PNK_NULL:
+ case PNK_RAW_UNDEFINED:
case PNK_FALSE:
case PNK_TRUE:
return true;
diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp
index 3b7a0e612..0c279591f 100644
--- a/js/src/frontend/Parser.cpp
+++ b/js/src/frontend/Parser.cpp
@@ -19,6 +19,8 @@
#include "frontend/Parser.h"
+#include "mozilla/Sprintf.h"
+
#include <new>
#include "jsapi.h"
@@ -62,19 +64,33 @@ using AddDeclaredNamePtr = ParseContext::Scope::AddDeclaredNamePtr;
using BindingIter = ParseContext::Scope::BindingIter;
using UsedNamePtr = UsedNameTracker::UsedNameMap::Ptr;
-/* Read a token. Report an error and return null() if that token isn't of type tt. */
-#define MUST_MATCH_TOKEN_MOD(tt, modifier, errorNumber) \
+// Read a token. Report an error and return null() if that token doesn't match
+// to the condition. Do not use MUST_MATCH_TOKEN_INTERNAL directly.
+#define MUST_MATCH_TOKEN_INTERNAL(cond, modifier, errorReport) \
JS_BEGIN_MACRO \
TokenKind token; \
if (!tokenStream.getToken(&token, modifier)) \
return null(); \
- if (token != tt) { \
- error(errorNumber); \
+ if (!(cond)) { \
+ errorReport; \
return null(); \
} \
JS_END_MACRO
-#define MUST_MATCH_TOKEN(tt, errno) MUST_MATCH_TOKEN_MOD(tt, TokenStream::None, errno)
+#define MUST_MATCH_TOKEN_MOD(tt, modifier, errorNumber) \
+ MUST_MATCH_TOKEN_INTERNAL(token == tt, modifier, error(errorNumber))
+
+#define MUST_MATCH_TOKEN(tt, errorNumber) \
+ MUST_MATCH_TOKEN_MOD(tt, TokenStream::None, errorNumber)
+
+#define MUST_MATCH_TOKEN_FUNC_MOD(func, modifier, errorNumber) \
+ MUST_MATCH_TOKEN_INTERNAL((func)(token), modifier, error(errorNumber))
+
+#define MUST_MATCH_TOKEN_FUNC(func, errorNumber) \
+ MUST_MATCH_TOKEN_FUNC_MOD(func, TokenStream::None, errorNumber)
+
+#define MUST_MATCH_TOKEN_MOD_WITH_REPORT(tt, modifier, errorReport) \
+ MUST_MATCH_TOKEN_INTERNAL(token == tt, modifier, errorReport)
template <class T, class U>
static inline void
@@ -106,6 +122,7 @@ DeclarationKindString(DeclarationKind kind)
case DeclarationKind::Import:
return "import";
case DeclarationKind::BodyLevelFunction:
+ case DeclarationKind::ModuleBodyLevelFunction:
case DeclarationKind::LexicalFunction:
return "function";
case DeclarationKind::VarForAnnexBLexicalFunction:
@@ -127,7 +144,8 @@ StatementKindIsBraced(StatementKind kind)
kind == StatementKind::Switch ||
kind == StatementKind::Try ||
kind == StatementKind::Catch ||
- kind == StatementKind::Finally;
+ kind == StatementKind::Finally ||
+ kind == StatementKind::Class;
}
void
@@ -189,11 +207,12 @@ ParseContext::Scope::addCatchParameters(ParseContext* pc, Scope& catchParamScope
for (DeclaredNameMap::Range r = catchParamScope.declared_->all(); !r.empty(); r.popFront()) {
DeclarationKind kind = r.front().value()->kind();
+ uint32_t pos = r.front().value()->pos();
MOZ_ASSERT(DeclarationKindIsCatchParameter(kind));
JSAtom* name = r.front().key();
AddDeclaredNamePtr p = lookupDeclaredNameForAdd(name);
MOZ_ASSERT(!p);
- if (!addDeclaredName(pc, p, name, kind))
+ if (!addDeclaredName(pc, p, name, kind, pos))
return false;
}
@@ -332,7 +351,8 @@ ParseContext::init()
namedLambdaScope_->lookupDeclaredNameForAdd(fun->explicitName());
MOZ_ASSERT(!p);
if (!namedLambdaScope_->addDeclaredName(this, p, fun->explicitName(),
- DeclarationKind::Const))
+ DeclarationKind::Const,
+ DeclaredNameInfo::npos))
{
return false;
}
@@ -441,7 +461,7 @@ UsedNameTracker::rewind(RewindToken token)
}
FunctionBox::FunctionBox(ExclusiveContext* cx, LifoAlloc& alloc, ObjectBox* traceListHead,
- JSFunction* fun, uint32_t preludeStart,
+ JSFunction* fun, uint32_t toStringStart,
Directives directives, bool extraWarnings,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind)
: ObjectBox(fun, traceListHead),
@@ -455,7 +475,8 @@ FunctionBox::FunctionBox(ExclusiveContext* cx, LifoAlloc& alloc, ObjectBox* trac
bufEnd(0),
startLine(1),
startColumn(0),
- preludeStart(preludeStart),
+ toStringStart(toStringStart),
+ toStringEnd(0),
length(0),
generatorKindBits_(GeneratorKindAsBits(generatorKind)),
asyncKindBits_(AsyncKindAsBits(asyncKind)),
@@ -474,6 +495,7 @@ FunctionBox::FunctionBox(ExclusiveContext* cx, LifoAlloc& alloc, ObjectBox* trac
usesThis(false),
usesReturn(false),
hasRest_(false),
+ isExprBody_(false),
funCxFlags()
{
// Functions created at parse time may be set singleton after parsing and
@@ -525,10 +547,16 @@ FunctionBox::initWithEnclosingParseContext(ParseContext* enclosing, FunctionSynt
allowNewTarget_ = true;
allowSuperProperty_ = fun->allowSuperProperty();
- if (kind == DerivedClassConstructor) {
- setDerivedClassConstructor();
- allowSuperCall_ = true;
- needsThisTDZChecks_ = true;
+ if (kind == ClassConstructor || kind == DerivedClassConstructor) {
+ auto stmt = enclosing->findInnermostStatement<ParseContext::ClassStatement>();
+ MOZ_ASSERT(stmt);
+ stmt->constructorBox = this;
+
+ if (kind == DerivedClassConstructor) {
+ setDerivedClassConstructor();
+ allowSuperCall_ = true;
+ needsThisTDZChecks_ = true;
+ }
}
if (isGenexpLambda)
@@ -570,97 +598,136 @@ FunctionBox::initWithEnclosingScope(Scope* enclosingScope)
computeInWith(enclosingScope);
}
-template <typename ParseHandler>
void
-Parser<ParseHandler>::error(unsigned errorNumber, ...)
+ParserBase::error(unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
#ifdef DEBUG
bool result =
#endif
- tokenStream.reportCompileErrorNumberVA(pos().begin, JSREPORT_ERROR, errorNumber, args);
+ tokenStream.reportCompileErrorNumberVA(nullptr, pos().begin, JSREPORT_ERROR,
+ errorNumber, args);
MOZ_ASSERT(!result, "reporting an error returned true?");
va_end(args);
}
-template <typename ParseHandler>
void
-Parser<ParseHandler>::errorAt(uint32_t offset, unsigned errorNumber, ...)
+ParserBase::errorWithNotes(UniquePtr<JSErrorNotes> notes, unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
#ifdef DEBUG
bool result =
#endif
- tokenStream.reportCompileErrorNumberVA(offset, JSREPORT_ERROR, errorNumber, args);
+ tokenStream.reportCompileErrorNumberVA(Move(notes), pos().begin, JSREPORT_ERROR,
+ errorNumber, args);
+ MOZ_ASSERT(!result, "reporting an error returned true?");
+ va_end(args);
+}
+
+void
+ParserBase::errorAt(uint32_t offset, unsigned errorNumber, ...)
+{
+ va_list args;
+ va_start(args, errorNumber);
+#ifdef DEBUG
+ bool result =
+#endif
+ tokenStream.reportCompileErrorNumberVA(nullptr, offset, JSREPORT_ERROR, errorNumber, args);
+ MOZ_ASSERT(!result, "reporting an error returned true?");
+ va_end(args);
+}
+
+void
+ParserBase::errorWithNotesAt(UniquePtr<JSErrorNotes> notes, uint32_t offset,
+ unsigned errorNumber, ...)
+{
+ va_list args;
+ va_start(args, errorNumber);
+#ifdef DEBUG
+ bool result =
+#endif
+ tokenStream.reportCompileErrorNumberVA(Move(notes), offset, JSREPORT_ERROR,
+ errorNumber, args);
MOZ_ASSERT(!result, "reporting an error returned true?");
va_end(args);
}
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::warning(unsigned errorNumber, ...)
+ParserBase::warning(unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
bool result =
- tokenStream.reportCompileErrorNumberVA(pos().begin, JSREPORT_WARNING, errorNumber, args);
+ tokenStream.reportCompileErrorNumberVA(nullptr, pos().begin, JSREPORT_WARNING,
+ errorNumber, args);
va_end(args);
return result;
}
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::warningAt(uint32_t offset, unsigned errorNumber, ...)
+ParserBase::warningAt(uint32_t offset, unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
bool result =
- tokenStream.reportCompileErrorNumberVA(offset, JSREPORT_WARNING, errorNumber, args);
+ tokenStream.reportCompileErrorNumberVA(nullptr, offset, JSREPORT_WARNING,
+ errorNumber, args);
va_end(args);
return result;
}
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::extraWarning(unsigned errorNumber, ...)
+ParserBase::extraWarning(unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
- bool result = tokenStream.reportExtraWarningErrorNumberVA(pos().begin, errorNumber, args);
+ bool result = tokenStream.reportExtraWarningErrorNumberVA(nullptr, pos().begin,
+ errorNumber, args);
va_end(args);
return result;
}
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::strictModeError(unsigned errorNumber, ...)
+ParserBase::extraWarningAt(uint32_t offset, unsigned errorNumber, ...)
+{
+ va_list args;
+ va_start(args, errorNumber);
+
+ bool result =
+ tokenStream.reportExtraWarningErrorNumberVA(nullptr, offset, errorNumber, args);
+
+ va_end(args);
+ return result;
+}
+
+bool
+ParserBase::strictModeError(unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
bool res =
- tokenStream.reportStrictModeErrorNumberVA(pos().begin, pc->sc()->strict(),
+ tokenStream.reportStrictModeErrorNumberVA(nullptr, pos().begin, pc->sc()->strict(),
errorNumber, args);
va_end(args);
return res;
}
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::strictModeErrorAt(uint32_t offset, unsigned errorNumber, ...)
+ParserBase::strictModeErrorAt(uint32_t offset, unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
bool res =
- tokenStream.reportStrictModeErrorNumberVA(offset, pc->sc()->strict(), errorNumber, args);
+ tokenStream.reportStrictModeErrorNumberVA(nullptr, offset, pc->sc()->strict(),
+ errorNumber, args);
va_end(args);
return res;
}
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::reportNoOffset(ParseReportKind kind, bool strict, unsigned errorNumber, ...)
+ParserBase::reportNoOffset(ParseReportKind kind, bool strict, unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
@@ -668,17 +735,21 @@ Parser<ParseHandler>::reportNoOffset(ParseReportKind kind, bool strict, unsigned
uint32_t offset = TokenStream::NoOffset;
switch (kind) {
case ParseError:
- result = tokenStream.reportCompileErrorNumberVA(offset, JSREPORT_ERROR, errorNumber, args);
+ result = tokenStream.reportCompileErrorNumberVA(nullptr, offset, JSREPORT_ERROR,
+ errorNumber, args);
break;
case ParseWarning:
result =
- tokenStream.reportCompileErrorNumberVA(offset, JSREPORT_WARNING, errorNumber, args);
+ tokenStream.reportCompileErrorNumberVA(nullptr, offset, JSREPORT_WARNING,
+ errorNumber, args);
break;
case ParseExtraWarning:
- result = tokenStream.reportExtraWarningErrorNumberVA(offset, errorNumber, args);
+ result = tokenStream.reportExtraWarningErrorNumberVA(nullptr, offset,
+ errorNumber, args);
break;
case ParseStrictError:
- result = tokenStream.reportStrictModeErrorNumberVA(offset, strict, errorNumber, args);
+ result = tokenStream.reportStrictModeErrorNumberVA(nullptr, offset, strict,
+ errorNumber, args);
break;
}
va_end(args);
@@ -686,7 +757,7 @@ Parser<ParseHandler>::reportNoOffset(ParseReportKind kind, bool strict, unsigned
}
template <>
-bool
+inline bool
Parser<FullParseHandler>::abortIfSyntaxParser()
{
handler.disableSyntaxParser();
@@ -694,23 +765,21 @@ Parser<FullParseHandler>::abortIfSyntaxParser()
}
template <>
-bool
+inline bool
Parser<SyntaxParseHandler>::abortIfSyntaxParser()
{
abortedSyntaxParse = true;
return false;
}
-template <typename ParseHandler>
-Parser<ParseHandler>::Parser(ExclusiveContext* cx, LifoAlloc& alloc,
- const ReadOnlyCompileOptions& options,
- const char16_t* chars, size_t length,
- bool foldConstants,
- UsedNameTracker& usedNames,
- Parser<SyntaxParseHandler>* syntaxParser,
- LazyScript* lazyOuterFunction)
- : AutoGCRooter(cx, PARSER),
- context(cx),
+ParserBase::ParserBase(ExclusiveContext* cx, LifoAlloc& alloc,
+ const ReadOnlyCompileOptions& options,
+ const char16_t* chars, size_t length,
+ bool foldConstants,
+ UsedNameTracker& usedNames,
+ Parser<SyntaxParseHandler>* syntaxParser,
+ LazyScript* lazyOuterFunction)
+ : context(cx),
alloc(alloc),
tokenStream(cx, options, chars, length, thisForCtor()),
traceListHead(nullptr),
@@ -725,17 +794,44 @@ Parser<ParseHandler>::Parser(ExclusiveContext* cx, LifoAlloc& alloc,
#endif
abortedSyntaxParse(false),
isUnexpectedEOF_(false),
- handler(cx, alloc, tokenStream, syntaxParser, lazyOuterFunction)
+ awaitIsKeyword_(false)
{
cx->perThreadData->frontendCollectionPool.addActiveCompilation();
+ tempPoolMark = alloc.mark();
+}
+
+ParserBase::~ParserBase()
+{
+ alloc.release(tempPoolMark);
+
+ /*
+ * The parser can allocate enormous amounts of memory for large functions.
+ * Eagerly free the memory now (which otherwise won't be freed until the
+ * next GC) to avoid unnecessary OOMs.
+ */
+ alloc.freeAllIfHugeAndUnused();
+
+ context->perThreadData->frontendCollectionPool.removeActiveCompilation();
+}
+template <typename ParseHandler>
+Parser<ParseHandler>::Parser(ExclusiveContext* cx, LifoAlloc& alloc,
+ const ReadOnlyCompileOptions& options,
+ const char16_t* chars, size_t length,
+ bool foldConstants,
+ UsedNameTracker& usedNames,
+ Parser<SyntaxParseHandler>* syntaxParser,
+ LazyScript* lazyOuterFunction)
+ : ParserBase(cx, alloc, options, chars, length, foldConstants, usedNames, syntaxParser,
+ lazyOuterFunction),
+ AutoGCRooter(cx, PARSER),
+ handler(cx, alloc, tokenStream, syntaxParser, lazyOuterFunction)
+{
// The Mozilla specific JSOPTION_EXTRA_WARNINGS option adds extra warnings
// which are not generated if functions are parsed lazily. Note that the
// standard "use strict" does not inhibit lazy parsing.
if (options.extraWarningsOption)
handler.disableSyntaxParser();
-
- tempPoolMark = alloc.mark();
}
template<typename ParseHandler>
@@ -746,26 +842,29 @@ Parser<ParseHandler>::checkOptions()
checkOptionsCalled = true;
#endif
- if (!tokenStream.checkOptions())
- return false;
-
- return true;
+ return tokenStream.checkOptions();
}
template <typename ParseHandler>
Parser<ParseHandler>::~Parser()
{
MOZ_ASSERT(checkOptionsCalled);
- alloc.release(tempPoolMark);
+}
- /*
- * The parser can allocate enormous amounts of memory for large functions.
- * Eagerly free the memory now (which otherwise won't be freed until the
- * next GC) to avoid unnecessary OOMs.
- */
- alloc.freeAllIfHugeAndUnused();
+template <>
+void
+Parser<SyntaxParseHandler>::setAwaitIsKeyword(bool isKeyword)
+{
+ awaitIsKeyword_ = isKeyword;
+}
- context->perThreadData->frontendCollectionPool.removeActiveCompilation();
+template <>
+void
+Parser<FullParseHandler>::setAwaitIsKeyword(bool isKeyword)
+{
+ awaitIsKeyword_ = isKeyword;
+ if (Parser<SyntaxParseHandler>* parser = handler.syntaxParser)
+ parser->setAwaitIsKeyword(isKeyword);
}
template <typename ParseHandler>
@@ -795,7 +894,7 @@ Parser<ParseHandler>::newObjectBox(JSObject* obj)
template <typename ParseHandler>
FunctionBox*
-Parser<ParseHandler>::newFunctionBox(Node fn, JSFunction* fun, uint32_t preludeStart,
+Parser<ParseHandler>::newFunctionBox(Node fn, JSFunction* fun, uint32_t toStringStart,
Directives inheritedDirectives,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind,
bool tryAnnexB)
@@ -811,7 +910,7 @@ Parser<ParseHandler>::newFunctionBox(Node fn, JSFunction* fun, uint32_t preludeS
* function.
*/
FunctionBox* funbox =
- alloc.new_<FunctionBox>(context, alloc, traceListHead, fun, preludeStart,
+ alloc.new_<FunctionBox>(context, alloc, traceListHead, fun, toStringStart,
inheritedDirectives, options().extraWarningsOption,
generatorKind, asyncKind);
if (!funbox) {
@@ -894,38 +993,17 @@ Parser<ParseHandler>::parse()
/*
* Strict mode forbids introducing new definitions for 'eval', 'arguments', or
- * for any strict mode reserved keyword.
+ * for any strict mode reserved word.
*/
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::isValidStrictBinding(PropertyName* name)
+ParserBase::isValidStrictBinding(PropertyName* name)
{
return name != context->names().eval &&
name != context->names().arguments &&
name != context->names().let &&
name != context->names().static_ &&
- !(IsKeyword(name) && name != context->names().await);
-}
-
-/*
- * Check that it is permitted to introduce a binding for |name|. Use |pos| for
- * reporting error locations.
- */
-template <typename ParseHandler>
-bool
-Parser<ParseHandler>::checkStrictBinding(PropertyName* name, TokenPos pos)
-{
- if (!pc->sc()->needStrictChecks())
- return true;
-
- if (!isValidStrictBinding(name)) {
- JSAutoByteString bytes;
- if (!AtomToPrintableString(context, name, &bytes))
- return false;
- return strictModeErrorAt(pos.begin, JSMSG_BAD_BINDING, bytes.ptr());
- }
-
- return true;
+ name != context->names().yield &&
+ !IsStrictReservedWord(name);
}
/*
@@ -952,13 +1030,71 @@ Parser<ParseHandler>::hasValidSimpleStrictParameterNames()
template <typename ParseHandler>
void
-Parser<ParseHandler>::reportRedeclaration(HandlePropertyName name, DeclarationKind kind,
- TokenPos pos)
+Parser<ParseHandler>::reportMissingClosing(unsigned errorNumber, unsigned noteNumber,
+ uint32_t openedPos)
+{
+ auto notes = MakeUnique<JSErrorNotes>();
+ if (!notes)
+ return;
+
+ uint32_t line, column;
+ tokenStream.srcCoords.lineNumAndColumnIndex(openedPos, &line, &column);
+
+ const size_t MaxWidth = sizeof("4294967295");
+ char columnNumber[MaxWidth];
+ SprintfLiteral(columnNumber, "%" PRIu32, column);
+ char lineNumber[MaxWidth];
+ SprintfLiteral(lineNumber, "%" PRIu32, line);
+
+ if (!notes->addNoteASCII(pc->sc()->context,
+ getFilename(), line, column,
+ GetErrorMessage, nullptr,
+ noteNumber, lineNumber, columnNumber))
+ {
+ return;
+ }
+
+ errorWithNotes(Move(notes), errorNumber);
+}
+
+template <typename ParseHandler>
+void
+Parser<ParseHandler>::reportRedeclaration(HandlePropertyName name, DeclarationKind prevKind,
+ TokenPos pos, uint32_t prevPos)
{
JSAutoByteString bytes;
if (!AtomToPrintableString(context, name, &bytes))
return;
- errorAt(pos.begin, JSMSG_REDECLARED_VAR, DeclarationKindString(kind), bytes.ptr());
+
+ if (prevPos == DeclaredNameInfo::npos) {
+ errorAt(pos.begin, JSMSG_REDECLARED_VAR, DeclarationKindString(prevKind), bytes.ptr());
+ return;
+ }
+
+ auto notes = MakeUnique<JSErrorNotes>();
+ if (!notes)
+ return;
+
+ uint32_t line, column;
+ tokenStream.srcCoords.lineNumAndColumnIndex(prevPos, &line, &column);
+
+ const size_t MaxWidth = sizeof("4294967295");
+ char columnNumber[MaxWidth];
+ SprintfLiteral(columnNumber, "%" PRIu32, column);
+ char lineNumber[MaxWidth];
+ SprintfLiteral(lineNumber, "%" PRIu32, line);
+
+ if (!notes->addNoteASCII(pc->sc()->context,
+ getFilename(), line, column,
+ GetErrorMessage, nullptr,
+ JSMSG_REDECLARED_PREV,
+ lineNumber, columnNumber))
+ {
+ return;
+ }
+
+ errorWithNotesAt(Move(notes), pos.begin, JSMSG_REDECLARED_VAR,
+ DeclarationKindString(prevKind), bytes.ptr());
}
// notePositionalFormalParameter is called for both the arguments of a regular
@@ -973,6 +1109,7 @@ Parser<ParseHandler>::reportRedeclaration(HandlePropertyName name, DeclarationKi
template <typename ParseHandler>
bool
Parser<ParseHandler>::notePositionalFormalParameter(Node fn, HandlePropertyName name,
+ uint32_t beginPos,
bool disallowDuplicateParams,
bool* duplicatedParam)
{
@@ -997,7 +1134,7 @@ Parser<ParseHandler>::notePositionalFormalParameter(Node fn, HandlePropertyName
*duplicatedParam = true;
} else {
DeclarationKind kind = DeclarationKind::PositionalFormalParameter;
- if (!pc->functionScope().addDeclaredName(pc, p, name, kind))
+ if (!pc->functionScope().addDeclaredName(pc, p, name, kind, beginPos))
return false;
}
@@ -1010,9 +1147,6 @@ Parser<ParseHandler>::notePositionalFormalParameter(Node fn, HandlePropertyName
if (!paramNode)
return false;
- if (!checkStrictBinding(name, pos()))
- return false;
-
handler.addFunctionFormalParameter(fn, paramNode);
return true;
}
@@ -1104,8 +1238,8 @@ DeclarationKindIsParameter(DeclarationKind kind)
template <typename ParseHandler>
bool
-Parser<ParseHandler>::tryDeclareVar(HandlePropertyName name, DeclarationKind kind,
- Maybe<DeclarationKind>* redeclaredKind)
+Parser<ParseHandler>::tryDeclareVar(HandlePropertyName name, DeclarationKind kind, uint32_t beginPos,
+ Maybe<DeclarationKind>* redeclaredKind, uint32_t* prevPos)
{
MOZ_ASSERT(DeclarationKindIsVar(kind));
@@ -1178,17 +1312,29 @@ Parser<ParseHandler>::tryDeclareVar(HandlePropertyName name, DeclarationKind kin
if (!annexB35Allowance && !annexB33Allowance) {
*redeclaredKind = Some(declaredKind);
+ *prevPos = p->value()->pos();
return true;
}
+ } else if (kind == DeclarationKind::VarForAnnexBLexicalFunction) {
+ MOZ_ASSERT(DeclarationKindIsParameter(declaredKind));
+
+ // Annex B.3.3.1 disallows redeclaring parameter names.
+ // We don't need to set *prevPos here since this case is not
+ // an error.
+ *redeclaredKind = Some(declaredKind);
+ return true;
}
} else {
- if (!scope->addDeclaredName(pc, p, name, kind))
+ if (!scope->addDeclaredName(pc, p, name, kind, beginPos))
return false;
}
}
- if (!pc->sc()->strict() && pc->sc()->isEvalContext())
+ if (!pc->sc()->strict() && pc->sc()->isEvalContext()) {
*redeclaredKind = isVarRedeclaredInEval(name, kind);
+ // We don't have position information at runtime.
+ *prevPos = DeclaredNameInfo::npos;
+ }
return true;
}
@@ -1196,11 +1342,34 @@ Parser<ParseHandler>::tryDeclareVar(HandlePropertyName name, DeclarationKind kin
template <typename ParseHandler>
bool
Parser<ParseHandler>::tryDeclareVarForAnnexBLexicalFunction(HandlePropertyName name,
- bool* tryAnnexB)
+ uint32_t beginPos, bool* tryAnnexB)
{
Maybe<DeclarationKind> redeclaredKind;
- if (!tryDeclareVar(name, DeclarationKind::VarForAnnexBLexicalFunction, &redeclaredKind))
+ uint32_t unused;
+ if (!tryDeclareVar(name, DeclarationKind::VarForAnnexBLexicalFunction, beginPos,
+ &redeclaredKind, &unused))
+ {
return false;
+ }
+
+ if (!redeclaredKind && pc->isFunctionBox()) {
+ ParseContext::Scope& funScope = pc->functionScope();
+ ParseContext::Scope& varScope = pc->varScope();
+ if (&funScope != &varScope) {
+ // Annex B.3.3.1 disallows redeclaring parameter names. In the
+ // presence of parameter expressions, parameter names are on the
+ // function scope, which encloses the var scope. This means
+ // tryDeclareVar call above would not catch this case, so test it
+ // manually.
+ if (AddDeclaredNamePtr p = funScope.lookupDeclaredNameForAdd(name)) {
+ DeclarationKind declaredKind = p->value()->kind();
+ if (DeclarationKindIsParameter(declaredKind))
+ redeclaredKind = Some(declaredKind);
+ else
+ MOZ_ASSERT(FunctionScope::isSpecialName(context, name));
+ }
+ }
+ }
if (redeclaredKind) {
// If an early error would have occurred, undo all the
@@ -1248,25 +1417,41 @@ Parser<ParseHandler>::noteDeclaredName(HandlePropertyName name, DeclarationKind
if (pc->useAsmOrInsideUseAsm())
return true;
- if (!checkStrictBinding(name, pos))
- return false;
-
switch (kind) {
case DeclarationKind::Var:
case DeclarationKind::BodyLevelFunction:
case DeclarationKind::ForOfVar: {
Maybe<DeclarationKind> redeclaredKind;
- if (!tryDeclareVar(name, kind, &redeclaredKind))
+ uint32_t prevPos;
+ if (!tryDeclareVar(name, kind, pos.begin, &redeclaredKind, &prevPos))
return false;
if (redeclaredKind) {
- reportRedeclaration(name, *redeclaredKind, pos);
+ reportRedeclaration(name, *redeclaredKind, pos, prevPos);
return false;
}
break;
}
+ case DeclarationKind::ModuleBodyLevelFunction: {
+ MOZ_ASSERT(pc->atModuleLevel());
+
+ AddDeclaredNamePtr p = pc->varScope().lookupDeclaredNameForAdd(name);
+ if (p) {
+ reportRedeclaration(name, p->value()->kind(), pos, p->value()->pos());
+ return false;
+ }
+
+ if (!pc->varScope().addDeclaredName(pc, p, name, kind, pos.begin))
+ return false;
+
+ // Body-level functions in modules are always closed over.
+ pc->varScope().lookupDeclaredName(name)->value()->setClosedOver();
+
+ break;
+ }
+
case DeclarationKind::FormalParameter: {
// It is an early error if any non-positional formal parameter name
// (e.g., destructuring formal parameter) is duplicated.
@@ -1277,7 +1462,7 @@ Parser<ParseHandler>::noteDeclaredName(HandlePropertyName name, DeclarationKind
return false;
}
- if (!pc->functionScope().addDeclaredName(pc, p, name, kind))
+ if (!pc->functionScope().addDeclaredName(pc, p, name, kind, pos.begin))
return false;
break;
@@ -1300,7 +1485,7 @@ Parser<ParseHandler>::noteDeclaredName(HandlePropertyName name, DeclarationKind
(p->value()->kind() != DeclarationKind::LexicalFunction &&
p->value()->kind() != DeclarationKind::VarForAnnexBLexicalFunction))
{
- reportRedeclaration(name, p->value()->kind(), pos);
+ reportRedeclaration(name, p->value()->kind(), pos, p->value()->pos());
return false;
}
@@ -1308,7 +1493,7 @@ Parser<ParseHandler>::noteDeclaredName(HandlePropertyName name, DeclarationKind
// declaration that shadows the VarForAnnexBLexicalFunction.
p->value()->alterKind(kind);
} else {
- if (!scope->addDeclaredName(pc, p, name, kind))
+ if (!scope->addDeclaredName(pc, p, name, kind, pos.begin))
return false;
}
@@ -1348,7 +1533,7 @@ Parser<ParseHandler>::noteDeclaredName(HandlePropertyName name, DeclarationKind
if (pc->isFunctionExtraBodyVarScopeInnermost()) {
DeclaredNamePtr p = pc->functionScope().lookupDeclaredName(name);
if (p && DeclarationKindIsParameter(p->value()->kind())) {
- reportRedeclaration(name, p->value()->kind(), pos);
+ reportRedeclaration(name, p->value()->kind(), pos, p->value()->pos());
return false;
}
}
@@ -1365,12 +1550,12 @@ Parser<ParseHandler>::noteDeclaredName(HandlePropertyName name, DeclarationKind
p = scope->lookupDeclaredNameForAdd(name);
MOZ_ASSERT(!p);
} else {
- reportRedeclaration(name, p->value()->kind(), pos);
+ reportRedeclaration(name, p->value()->kind(), pos, p->value()->pos());
return false;
}
}
- if (!p && !scope->addDeclaredName(pc, p, name, kind))
+ if (!p && !scope->addDeclaredName(pc, p, name, kind, pos.begin))
return false;
break;
@@ -1742,11 +1927,8 @@ Parser<FullParseHandler>::newFunctionScopeData(ParseContext::Scope& scope, bool
case BindingKind::Var:
// The only vars in the function scope when there are parameter
// exprs, which induces a separate var environment, should be the
- // special internal bindings.
- MOZ_ASSERT_IF(hasParameterExprs,
- bi.name() == context->names().arguments ||
- bi.name() == context->names().dotThis ||
- bi.name() == context->names().dotGenerator);
+ // special bindings.
+ MOZ_ASSERT_IF(hasParameterExprs, FunctionScope::isSpecialName(context, bi.name()));
if (!vars.append(binding))
return Nothing();
break;
@@ -2031,7 +2213,7 @@ Parser<FullParseHandler>::moduleBody(ModuleSharedContext* modulesc)
if (!mn)
return null();
- AutoAwaitIsKeyword awaitIsKeyword(&tokenStream, true);
+ AutoAwaitIsKeyword<FullParseHandler> awaitIsKeyword(this, true);
ParseNode* pn = statementList(YieldIsKeyword);
if (!pn)
return null();
@@ -2123,8 +2305,11 @@ Parser<ParseHandler>::declareFunctionThis()
ParseContext::Scope& funScope = pc->functionScope();
AddDeclaredNamePtr p = funScope.lookupDeclaredNameForAdd(dotThis);
MOZ_ASSERT(!p);
- if (!funScope.addDeclaredName(pc, p, dotThis, DeclarationKind::Var))
+ if (!funScope.addDeclaredName(pc, p, dotThis, DeclarationKind::Var,
+ DeclaredNameInfo::npos))
+ {
return false;
+ }
funbox->setHasThisBinding();
}
@@ -2166,14 +2351,17 @@ Parser<ParseHandler>::declareDotGeneratorName()
ParseContext::Scope& funScope = pc->functionScope();
HandlePropertyName dotGenerator = context->names().dotGenerator;
AddDeclaredNamePtr p = funScope.lookupDeclaredNameForAdd(dotGenerator);
- if (!p && !funScope.addDeclaredName(pc, p, dotGenerator, DeclarationKind::Var))
+ if (!p && !funScope.addDeclaredName(pc, p, dotGenerator, DeclarationKind::Var,
+ DeclaredNameInfo::npos))
+ {
return false;
+ }
return true;
}
template <typename ParseHandler>
bool
-Parser<ParseHandler>::finishFunctionScopes()
+Parser<ParseHandler>::finishFunctionScopes(bool isStandaloneFunction)
{
FunctionBox* funbox = pc->functionBox();
@@ -2182,7 +2370,7 @@ Parser<ParseHandler>::finishFunctionScopes()
return false;
}
- if (funbox->function()->isNamedLambda()) {
+ if (funbox->function()->isNamedLambda() && !isStandaloneFunction) {
if (!propagateFreeNamesAndMarkClosedOverBindings(pc->namedLambdaScope()))
return false;
}
@@ -2192,9 +2380,9 @@ Parser<ParseHandler>::finishFunctionScopes()
template <>
bool
-Parser<FullParseHandler>::finishFunction()
+Parser<FullParseHandler>::finishFunction(bool isStandaloneFunction /* = false */)
{
- if (!finishFunctionScopes())
+ if (!finishFunctionScopes(isStandaloneFunction))
return false;
FunctionBox* funbox = pc->functionBox();
@@ -2215,7 +2403,7 @@ Parser<FullParseHandler>::finishFunction()
funbox->functionScopeBindings().set(*bindings);
}
- if (funbox->function()->isNamedLambda()) {
+ if (funbox->function()->isNamedLambda() && !isStandaloneFunction) {
Maybe<LexicalScope::Data*> bindings = newLexicalScopeData(pc->namedLambdaScope());
if (!bindings)
return false;
@@ -2227,14 +2415,14 @@ Parser<FullParseHandler>::finishFunction()
template <>
bool
-Parser<SyntaxParseHandler>::finishFunction()
+Parser<SyntaxParseHandler>::finishFunction(bool isStandaloneFunction /* = false */)
{
// The LazyScript for a lazily parsed function needs to know its set of
// free variables and inner functions so that when it is fully parsed, we
// can skip over any already syntax parsed inner functions and still
// retain correct scope information.
- if (!finishFunctionScopes())
+ if (!finishFunctionScopes(isStandaloneFunction))
return false;
// There are too many bindings or inner functions to be saved into the
@@ -2251,7 +2439,7 @@ Parser<SyntaxParseHandler>::finishFunction()
LazyScript* lazy = LazyScript::Create(context, fun, pc->closedOverBindingsForLazy(),
pc->innerFunctionsForLazy, versionNumber(),
funbox->bufStart, funbox->bufEnd,
- funbox->preludeStart,
+ funbox->toStringStart,
funbox->startLine, funbox->startColumn);
if (!lazy)
return false;
@@ -2264,6 +2452,8 @@ Parser<SyntaxParseHandler>::finishFunction()
lazy->setAsyncKind(funbox->asyncKind());
if (funbox->hasRest())
lazy->setHasRest();
+ if (funbox->isExprBody())
+ lazy->setIsExprBody();
if (funbox->isLikelyConstructorWrapper())
lazy->setLikelyConstructorWrapper();
if (funbox->isDerivedClassConstructor())
@@ -2340,7 +2530,7 @@ Parser<FullParseHandler>::standaloneFunction(HandleFunction fun,
return null();
fn->pn_body = argsbody;
- FunctionBox* funbox = newFunctionBox(fn, fun, /* preludeStart = */ 0, inheritedDirectives,
+ FunctionBox* funbox = newFunctionBox(fn, fun, /* toStringStart = */ 0, inheritedDirectives,
generatorKind, asyncKind, /* tryAnnexB = */ false);
if (!funbox)
return null();
@@ -2352,9 +2542,9 @@ Parser<FullParseHandler>::standaloneFunction(HandleFunction fun,
funpc.setIsStandaloneFunctionBody();
YieldHandling yieldHandling = GetYieldHandling(generatorKind, asyncKind);
- AutoAwaitIsKeyword awaitIsKeyword(&tokenStream, asyncKind == AsyncFunction);
+ AutoAwaitIsKeyword<FullParseHandler> awaitIsKeyword(this, asyncKind == AsyncFunction);
if (!functionFormalParametersAndBody(InAllowed, yieldHandling, fn, Statement,
- parameterListEnd))
+ parameterListEnd, /* isStandaloneFunction = */ true))
{
return null();
}
@@ -2414,8 +2604,11 @@ Parser<ParseHandler>::declareFunctionArgumentsObject()
if (tryDeclareArguments) {
AddDeclaredNamePtr p = funScope.lookupDeclaredNameForAdd(argumentsName);
if (!p) {
- if (!funScope.addDeclaredName(pc, p, argumentsName, DeclarationKind::Var))
+ if (!funScope.addDeclaredName(pc, p, argumentsName, DeclarationKind::Var,
+ DeclaredNameInfo::npos))
+ {
return false;
+ }
funbox->declaredArguments = true;
funbox->usesArguments = true;
} else if (hasExtraBodyVarScope) {
@@ -2631,39 +2824,59 @@ Parser<ParseHandler>::newFunction(HandleAtom atom, FunctionSyntaxKind kind,
/*
* WARNING: Do not call this function directly.
- * Call either MatchOrInsertSemicolonAfterExpression or
- * MatchOrInsertSemicolonAfterNonExpression instead, depending on context.
+ * Call either matchOrInsertSemicolonAfterExpression or
+ * matchOrInsertSemicolonAfterNonExpression instead, depending on context.
*/
-static bool
-MatchOrInsertSemicolonHelper(TokenStream& ts, TokenStream::Modifier modifier)
+template <typename ParseHandler>
+bool
+Parser<ParseHandler>::matchOrInsertSemicolonHelper(TokenStream::Modifier modifier)
{
TokenKind tt = TOK_EOF;
- if (!ts.peekTokenSameLine(&tt, modifier))
+ if (!tokenStream.peekTokenSameLine(&tt, modifier))
return false;
if (tt != TOK_EOF && tt != TOK_EOL && tt != TOK_SEMI && tt != TOK_RC) {
+ /*
+ * When current token is `await` and it's outside of async function,
+ * it's possibly intended to be an await expression.
+ *
+ * await f();
+ * ^
+ * |
+ * tried to insert semicolon here
+ *
+ * Detect this situation and throw an understandable error. Otherwise
+ * we'd throw a confusing "missing ; before statement" error.
+ */
+ if (!pc->isAsync() && tokenStream.currentToken().type == TOK_AWAIT) {
+ error(JSMSG_AWAIT_OUTSIDE_ASYNC);
+ return false;
+ }
+
/* Advance the scanner for proper error location reporting. */
- ts.consumeKnownToken(tt, modifier);
- ts.reportError(JSMSG_SEMI_BEFORE_STMNT);
+ tokenStream.consumeKnownToken(tt, modifier);
+ error(JSMSG_SEMI_BEFORE_STMNT);
return false;
}
bool matched;
- if (!ts.matchToken(&matched, TOK_SEMI, modifier))
+ if (!tokenStream.matchToken(&matched, TOK_SEMI, modifier))
return false;
if (!matched && modifier == TokenStream::None)
- ts.addModifierException(TokenStream::OperandIsNone);
+ tokenStream.addModifierException(TokenStream::OperandIsNone);
return true;
}
-static bool
-MatchOrInsertSemicolonAfterExpression(TokenStream& ts)
+template <typename ParseHandler>
+bool
+Parser<ParseHandler>::matchOrInsertSemicolonAfterExpression()
{
- return MatchOrInsertSemicolonHelper(ts, TokenStream::None);
+ return matchOrInsertSemicolonHelper(TokenStream::None);
}
-static bool
-MatchOrInsertSemicolonAfterNonExpression(TokenStream& ts)
+template <typename ParseHandler>
+bool
+Parser<ParseHandler>::matchOrInsertSemicolonAfterNonExpression()
{
- return MatchOrInsertSemicolonHelper(ts, TokenStream::Operand);
+ return matchOrInsertSemicolonHelper(TokenStream::Operand);
}
template <typename ParseHandler>
@@ -2757,7 +2970,7 @@ Parser<ParseHandler>::functionArguments(YieldHandling yieldHandling, FunctionSyn
firstTokenModifier = funbox->isAsync() ? TokenStream::None : TokenStream::Operand;
if (!tokenStream.peekToken(&tt, firstTokenModifier))
return false;
- if (tt == TOK_NAME || tt == TOK_YIELD) {
+ if (TokenKindIsPossibleIdentifier(tt)) {
parenFreeArrow = true;
argModifier = firstTokenModifier;
}
@@ -2813,7 +3026,7 @@ Parser<ParseHandler>::functionArguments(YieldHandling yieldHandling, FunctionSyn
if (!tokenStream.getToken(&tt, argModifier))
return false;
argModifier = TokenStream::Operand;
- MOZ_ASSERT_IF(parenFreeArrow, tt == TOK_NAME || tt == TOK_YIELD);
+ MOZ_ASSERT_IF(parenFreeArrow, TokenKindIsPossibleIdentifier(tt));
if (tt == TOK_TRIPLEDOT) {
if (IsSetterKind(kind)) {
@@ -2834,7 +3047,7 @@ Parser<ParseHandler>::functionArguments(YieldHandling yieldHandling, FunctionSyn
if (!tokenStream.getToken(&tt))
return false;
- if (tt != TOK_NAME && tt != TOK_YIELD && tt != TOK_LB && tt != TOK_LC) {
+ if (!TokenKindIsPossibleIdentifier(tt) && tt != TOK_LB && tt != TOK_LC) {
error(JSMSG_NO_REST_NAME);
return false;
}
@@ -2864,26 +3077,21 @@ Parser<ParseHandler>::functionArguments(YieldHandling yieldHandling, FunctionSyn
break;
}
- case TOK_NAME:
- case TOK_YIELD: {
- if (parenFreeArrow)
- funbox->setStart(tokenStream);
-
- if (funbox->isAsync() && tokenStream.currentName() == context->names().await) {
- // `await` is already gotten as TOK_NAME for the following
- // case:
- //
- // async await => 1
- error(JSMSG_RESERVED_ID, "await");
+ default: {
+ if (!TokenKindIsPossibleIdentifier(tt)) {
+ error(JSMSG_MISSING_FORMAL);
return false;
}
+ if (parenFreeArrow)
+ funbox->setStart(tokenStream);
+
RootedPropertyName name(context, bindingIdentifier(yieldHandling));
if (!name)
return false;
- if (!notePositionalFormalParameter(funcpn, name, disallowDuplicateParams,
- &duplicatedParam))
+ if (!notePositionalFormalParameter(funcpn, name, pos().begin,
+ disallowDuplicateParams, &duplicatedParam))
{
return false;
}
@@ -2892,10 +3100,6 @@ Parser<ParseHandler>::functionArguments(YieldHandling yieldHandling, FunctionSyn
break;
}
-
- default:
- error(JSMSG_MISSING_FORMAL);
- return false;
}
if (positionalFormals.length() >= ARGNO_LIMIT) {
@@ -2989,7 +3193,7 @@ Parser<ParseHandler>::functionArguments(YieldHandling yieldHandling, FunctionSyn
template <>
bool
-Parser<FullParseHandler>::skipLazyInnerFunction(ParseNode* pn, uint32_t preludeStart,
+Parser<FullParseHandler>::skipLazyInnerFunction(ParseNode* pn, uint32_t toStringStart,
FunctionSyntaxKind kind, bool tryAnnexB)
{
// When a lazily-parsed function is called, we only fully parse (and emit)
@@ -2999,7 +3203,7 @@ Parser<FullParseHandler>::skipLazyInnerFunction(ParseNode* pn, uint32_t preludeS
RootedFunction fun(context, handler.nextLazyInnerFunction());
MOZ_ASSERT(!fun->isLegacyGenerator());
- FunctionBox* funbox = newFunctionBox(pn, fun, preludeStart, Directives(/* strict = */ false),
+ FunctionBox* funbox = newFunctionBox(pn, fun, toStringStart, Directives(/* strict = */ false),
fun->generatorKind(), fun->asyncKind(), tryAnnexB);
if (!funbox)
return false;
@@ -3007,6 +3211,8 @@ Parser<FullParseHandler>::skipLazyInnerFunction(ParseNode* pn, uint32_t preludeS
LazyScript* lazy = fun->lazyScript();
if (lazy->needsHomeObject())
funbox->setNeedsHomeObject();
+ if (lazy->isExprBody())
+ funbox->setIsExprBody();
PropagateTransitiveParseFlags(lazy, pc->sc());
@@ -3019,17 +3225,22 @@ Parser<FullParseHandler>::skipLazyInnerFunction(ParseNode* pn, uint32_t preludeS
if (!tokenStream.advance(fun->lazyScript()->end() - userbufBase))
return false;
- if (kind == Statement && fun->isExprBody()) {
- if (!MatchOrInsertSemicolonAfterExpression(tokenStream))
+#if JS_HAS_EXPR_CLOSURES
+ // Only expression closure can be Statement kind.
+ // If we remove expression closure, we can remove isExprBody flag from
+ // LazyScript and JSScript.
+ if (kind == Statement && funbox->isExprBody()) {
+ if (!matchOrInsertSemicolonAfterExpression())
return false;
}
+#endif
return true;
}
template <>
bool
-Parser<SyntaxParseHandler>::skipLazyInnerFunction(Node pn, uint32_t preludeStart,
+Parser<SyntaxParseHandler>::skipLazyInnerFunction(Node pn, uint32_t toStringStart,
FunctionSyntaxKind kind, bool tryAnnexB)
{
MOZ_CRASH("Cannot skip lazy inner functions when syntax parsing");
@@ -3082,7 +3293,7 @@ template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::templateLiteral(YieldHandling yieldHandling)
{
- Node pn = noSubstitutionTemplate();
+ Node pn = noSubstitutionUntaggedTemplate();
if (!pn)
return null();
@@ -3095,7 +3306,7 @@ Parser<ParseHandler>::templateLiteral(YieldHandling yieldHandling)
if (!addExprAndGetNextTemplStrToken(yieldHandling, nodeList, &tt))
return null();
- pn = noSubstitutionTemplate();
+ pn = noSubstitutionUntaggedTemplate();
if (!pn)
return null();
@@ -3106,7 +3317,7 @@ Parser<ParseHandler>::templateLiteral(YieldHandling yieldHandling)
template <typename ParseHandler>
typename ParseHandler::Node
-Parser<ParseHandler>::functionDefinition(uint32_t preludeStart, Node pn, InHandling inHandling,
+Parser<ParseHandler>::functionDefinition(uint32_t toStringStart, Node pn, InHandling inHandling,
YieldHandling yieldHandling,
HandleAtom funName, FunctionSyntaxKind kind,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind,
@@ -3119,7 +3330,7 @@ Parser<ParseHandler>::functionDefinition(uint32_t preludeStart, Node pn, InHandl
// functions, which are also lazy. Instead, their free variables and
// source extents are recorded and may be skipped.
if (handler.canSkipLazyInnerFunctions()) {
- if (!skipLazyInnerFunction(pn, preludeStart, kind, tryAnnexB))
+ if (!skipLazyInnerFunction(pn, toStringStart, kind, tryAnnexB))
return null();
return pn;
}
@@ -3152,7 +3363,7 @@ Parser<ParseHandler>::functionDefinition(uint32_t preludeStart, Node pn, InHandl
// reparse a function due to failed syntax parsing and encountering new
// "use foo" directives.
while (true) {
- if (trySyntaxParseInnerFunction(pn, fun, preludeStart, inHandling, yieldHandling, kind,
+ if (trySyntaxParseInnerFunction(pn, fun, toStringStart, inHandling, yieldHandling, kind,
generatorKind, asyncKind, tryAnnexB, directives,
&newDirectives))
{
@@ -3181,7 +3392,7 @@ Parser<ParseHandler>::functionDefinition(uint32_t preludeStart, Node pn, InHandl
template <>
bool
Parser<FullParseHandler>::trySyntaxParseInnerFunction(ParseNode* pn, HandleFunction fun,
- uint32_t preludeStart,
+ uint32_t toStringStart,
InHandling inHandling,
YieldHandling yieldHandling,
FunctionSyntaxKind kind,
@@ -3215,13 +3426,13 @@ Parser<FullParseHandler>::trySyntaxParseInnerFunction(ParseNode* pn, HandleFunct
// Make a FunctionBox before we enter the syntax parser, because |pn|
// still expects a FunctionBox to be attached to it during BCE, and
// the syntax parser cannot attach one to it.
- FunctionBox* funbox = newFunctionBox(pn, fun, preludeStart, inheritedDirectives,
+ FunctionBox* funbox = newFunctionBox(pn, fun, toStringStart, inheritedDirectives,
generatorKind, asyncKind, tryAnnexB);
if (!funbox)
return false;
funbox->initWithEnclosingParseContext(pc, kind);
- if (!parser->innerFunction(SyntaxParseHandler::NodeGeneric, pc, funbox, preludeStart,
+ if (!parser->innerFunction(SyntaxParseHandler::NodeGeneric, pc, funbox, toStringStart,
inHandling, yieldHandling, kind,
inheritedDirectives, newDirectives))
{
@@ -3249,14 +3460,14 @@ Parser<FullParseHandler>::trySyntaxParseInnerFunction(ParseNode* pn, HandleFunct
} while (false);
// We failed to do a syntax parse above, so do the full parse.
- return innerFunction(pn, pc, fun, preludeStart, inHandling, yieldHandling, kind,
+ return innerFunction(pn, pc, fun, toStringStart, inHandling, yieldHandling, kind,
generatorKind, asyncKind, tryAnnexB, inheritedDirectives, newDirectives);
}
template <>
bool
Parser<SyntaxParseHandler>::trySyntaxParseInnerFunction(Node pn, HandleFunction fun,
- uint32_t preludeStart,
+ uint32_t toStringStart,
InHandling inHandling,
YieldHandling yieldHandling,
FunctionSyntaxKind kind,
@@ -3267,14 +3478,14 @@ Parser<SyntaxParseHandler>::trySyntaxParseInnerFunction(Node pn, HandleFunction
Directives* newDirectives)
{
// This is already a syntax parser, so just parse the inner function.
- return innerFunction(pn, pc, fun, preludeStart, inHandling, yieldHandling, kind,
+ return innerFunction(pn, pc, fun, toStringStart, inHandling, yieldHandling, kind,
generatorKind, asyncKind, tryAnnexB, inheritedDirectives, newDirectives);
}
template <typename ParseHandler>
bool
Parser<ParseHandler>::innerFunction(Node pn, ParseContext* outerpc, FunctionBox* funbox,
- uint32_t preludeStart,
+ uint32_t toStringStart,
InHandling inHandling, YieldHandling yieldHandling,
FunctionSyntaxKind kind, Directives inheritedDirectives,
Directives* newDirectives)
@@ -3298,7 +3509,7 @@ Parser<ParseHandler>::innerFunction(Node pn, ParseContext* outerpc, FunctionBox*
template <typename ParseHandler>
bool
Parser<ParseHandler>::innerFunction(Node pn, ParseContext* outerpc, HandleFunction fun,
- uint32_t preludeStart,
+ uint32_t toStringStart,
InHandling inHandling, YieldHandling yieldHandling,
FunctionSyntaxKind kind,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind,
@@ -3310,13 +3521,13 @@ Parser<ParseHandler>::innerFunction(Node pn, ParseContext* outerpc, HandleFuncti
// parser. In that case, outerpc is a ParseContext from the full parser
// instead of the current top of the stack of the syntax parser.
- FunctionBox* funbox = newFunctionBox(pn, fun, preludeStart, inheritedDirectives,
+ FunctionBox* funbox = newFunctionBox(pn, fun, toStringStart, inheritedDirectives,
generatorKind, asyncKind, tryAnnexB);
if (!funbox)
return false;
funbox->initWithEnclosingParseContext(outerpc, kind);
- return innerFunction(pn, outerpc, funbox, preludeStart, inHandling, yieldHandling, kind,
+ return innerFunction(pn, outerpc, funbox, toStringStart, inHandling, yieldHandling, kind,
inheritedDirectives, newDirectives);
}
@@ -3324,7 +3535,7 @@ template <typename ParseHandler>
bool
Parser<ParseHandler>::appendToCallSiteObj(Node callSiteObj)
{
- Node cookedNode = noSubstitutionTemplate();
+ Node cookedNode = noSubstitutionTaggedTemplate();
if (!cookedNode)
return false;
@@ -3352,7 +3563,7 @@ Parser<FullParseHandler>::standaloneLazyFunction(HandleFunction fun, bool strict
return null();
Directives directives(strict);
- FunctionBox* funbox = newFunctionBox(pn, fun, /* preludeStart = */ 0, directives,
+ FunctionBox* funbox = newFunctionBox(pn, fun, /* toStringStart = */ 0, directives,
generatorKind, asyncKind, /* tryAnnexB = */ false);
if (!funbox)
return null();
@@ -3402,7 +3613,8 @@ bool
Parser<ParseHandler>::functionFormalParametersAndBody(InHandling inHandling,
YieldHandling yieldHandling,
Node pn, FunctionSyntaxKind kind,
- Maybe<uint32_t> parameterListEnd /* = Nothing() */)
+ Maybe<uint32_t> parameterListEnd /* = Nothing() */,
+ bool isStandaloneFunction /* = false */)
{
// Given a properly initialized parse context, try to parse an actual
// function without concern for conversion to strict mode, use of lazy
@@ -3411,9 +3623,14 @@ Parser<ParseHandler>::functionFormalParametersAndBody(InHandling inHandling,
FunctionBox* funbox = pc->functionBox();
RootedFunction fun(context, funbox->function());
- AutoAwaitIsKeyword awaitIsKeyword(&tokenStream, funbox->isAsync());
- if (!functionArguments(yieldHandling, kind, pn))
- return false;
+ // See below for an explanation why arrow function parameters and arrow
+ // function bodies are parsed with different yield/await settings.
+ {
+ bool asyncOrArrowInAsync = funbox->isAsync() || (kind == Arrow && awaitIsKeyword());
+ AutoAwaitIsKeyword<ParseHandler> awaitIsKeyword(this, asyncOrArrowInAsync);
+ if (!functionArguments(yieldHandling, kind, pn))
+ return false;
+ }
Maybe<ParseContext::VarScope> varScope;
if (funbox->hasParameterExprs) {
@@ -3446,6 +3663,7 @@ Parser<ParseHandler>::functionFormalParametersAndBody(InHandling inHandling,
TokenKind tt;
if (!tokenStream.getToken(&tt, TokenStream::Operand))
return false;
+ uint32_t openedPos = 0;
if (tt != TOK_LC) {
if ((funbox->isStarGenerator() && !funbox->isAsync()) || kind == Method ||
kind == GetterNoExpressionClosure || kind == SetterNoExpressionClosure ||
@@ -3466,9 +3684,9 @@ Parser<ParseHandler>::functionFormalParametersAndBody(InHandling inHandling,
tokenStream.ungetToken();
bodyType = ExpressionBody;
-#if JS_HAS_EXPR_CLOSURES
- fun->setIsExprBody();
-#endif
+ funbox->setIsExprBody();
+ } else {
+ openedPos = pos().begin;
}
// Arrow function parameters inherit yieldHandling from the enclosing
@@ -3476,41 +3694,59 @@ Parser<ParseHandler>::functionFormalParametersAndBody(InHandling inHandling,
// |yield| in the parameters is either a name or keyword, depending on
// whether the arrow function is enclosed in a generator function or not.
// Whereas the |yield| in the function body is always parsed as a name.
+ // The same goes when parsing |await| in arrow functions.
YieldHandling bodyYieldHandling = GetYieldHandling(pc->generatorKind(), pc->asyncKind());
- Node body = functionBody(inHandling, bodyYieldHandling, kind, bodyType);
- if (!body)
- return false;
+ Node body;
+ {
+ AutoAwaitIsKeyword<ParseHandler> awaitIsKeyword(this, funbox->isAsync());
+ body = functionBody(inHandling, bodyYieldHandling, kind, bodyType);
+ if (!body)
+ return false;
+ }
- if ((kind != Method && !IsConstructorKind(kind)) && fun->explicitName()) {
+ if ((kind == Statement || kind == Expression) && fun->explicitName()) {
RootedPropertyName propertyName(context, fun->explicitName()->asPropertyName());
- if (!checkStrictBinding(propertyName, handler.getPosition(pn)))
+ YieldHandling nameYieldHandling;
+ if (kind == Expression) {
+ // Named lambda has binding inside it.
+ nameYieldHandling = bodyYieldHandling;
+ } else {
+ // Otherwise YieldHandling cannot be checked at this point
+ // because of different context.
+ // It should already be checked before this point.
+ nameYieldHandling = YieldIsName;
+ }
+
+ // We already use the correct await-handling at this point, therefore
+ // we don't need call AutoAwaitIsKeyword here.
+
+ if (!checkBindingIdentifier(propertyName, handler.getPosition(pn).begin,
+ nameYieldHandling))
+ {
return false;
+ }
}
if (bodyType == StatementListBody) {
- bool matched;
- if (!tokenStream.matchToken(&matched, TOK_RC, TokenStream::Operand))
- return false;
- if (!matched) {
- error(JSMSG_CURLY_AFTER_BODY);
- return false;
- }
- funbox->bufEnd = pos().end;
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::Operand,
+ reportMissingClosing(JSMSG_CURLY_AFTER_BODY,
+ JSMSG_CURLY_OPENED, openedPos));
+ funbox->setEnd(pos().end);
} else {
#if !JS_HAS_EXPR_CLOSURES
MOZ_ASSERT(kind == Arrow);
#endif
if (tokenStream.hadError())
return false;
- funbox->bufEnd = pos().end;
- if (kind == Statement && !MatchOrInsertSemicolonAfterExpression(tokenStream))
+ funbox->setEnd(pos().end);
+ if (kind == Statement && !matchOrInsertSemicolonAfterExpression())
return false;
}
if (IsMethodDefinitionKind(kind) && pc->superScopeNeedsHomeObject())
funbox->setNeedsHomeObject();
- if (!finishFunction())
+ if (!finishFunction(isStandaloneFunction))
return false;
handler.setEndPosition(body, pos().begin);
@@ -3522,26 +3758,11 @@ Parser<ParseHandler>::functionFormalParametersAndBody(InHandling inHandling,
template <typename ParseHandler>
typename ParseHandler::Node
-Parser<ParseHandler>::functionStmt(uint32_t preludeStart, YieldHandling yieldHandling,
+Parser<ParseHandler>::functionStmt(uint32_t toStringStart, YieldHandling yieldHandling,
DefaultHandling defaultHandling, FunctionAsyncKind asyncKind)
{
MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_FUNCTION));
- // Annex B.3.4 says we can parse function declarations unbraced under if
- // or else as if it were braced. That is, |if (x) function f() {}| is
- // parsed as |if (x) { function f() {} }|.
- Maybe<ParseContext::Statement> synthesizedStmtForAnnexB;
- Maybe<ParseContext::Scope> synthesizedScopeForAnnexB;
- if (!pc->sc()->strict()) {
- ParseContext::Statement* stmt = pc->innermostStatement();
- if (stmt && stmt->kind() == StatementKind::If) {
- synthesizedStmtForAnnexB.emplace(pc, StatementKind::Block);
- synthesizedScopeForAnnexB.emplace(this);
- if (!synthesizedScopeForAnnexB->init(pc))
- return null();
- }
- }
-
// In sloppy mode, Annex B.3.2 allows labelled function declarations.
// Otherwise it's a parse error.
ParseContext::Statement* declaredInStmt = pc->innermostStatement();
@@ -3577,7 +3798,7 @@ Parser<ParseHandler>::functionStmt(uint32_t preludeStart, YieldHandling yieldHan
}
RootedPropertyName name(context);
- if (tt == TOK_NAME || tt == TOK_YIELD) {
+ if (TokenKindIsPossibleIdentifier(tt)) {
name = bindingIdentifier(yieldHandling);
if (!name)
return null();
@@ -3602,19 +3823,18 @@ Parser<ParseHandler>::functionStmt(uint32_t preludeStart, YieldHandling yieldHan
// early error, do so. This 'var' binding would be assigned
// the function object when its declaration is reached, not at
// the start of the block.
- if (!tryDeclareVarForAnnexBLexicalFunction(name, &tryAnnexB))
+ if (!tryDeclareVarForAnnexBLexicalFunction(name, pos().begin, &tryAnnexB))
return null();
}
if (!noteDeclaredName(name, DeclarationKind::LexicalFunction, pos()))
return null();
} else {
- if (!noteDeclaredName(name, DeclarationKind::BodyLevelFunction, pos()))
+ DeclarationKind kind = pc->atModuleLevel()
+ ? DeclarationKind::ModuleBodyLevelFunction
+ : DeclarationKind::BodyLevelFunction;
+ if (!noteDeclaredName(name, kind, pos()))
return null();
-
- // Body-level functions in modules are always closed over.
- if (pc->atModuleLevel())
- pc->varScope().lookupDeclaredName(name)->value()->setClosedOver();
}
Node pn = handler.newFunctionStatement();
@@ -3622,30 +3842,18 @@ Parser<ParseHandler>::functionStmt(uint32_t preludeStart, YieldHandling yieldHan
return null();
YieldHandling newYieldHandling = GetYieldHandling(generatorKind, asyncKind);
- Node fun = functionDefinition(preludeStart, pn, InAllowed, newYieldHandling,
+ return functionDefinition(toStringStart, pn, InAllowed, newYieldHandling,
name, Statement, generatorKind, asyncKind, tryAnnexB);
- if (!fun)
- return null();
-
- if (synthesizedStmtForAnnexB) {
- Node synthesizedStmtList = handler.newStatementList(handler.getPosition(fun));
- if (!synthesizedStmtList)
- return null();
- handler.addStatementToList(synthesizedStmtList, fun);
- return finishLexicalScope(*synthesizedScopeForAnnexB, synthesizedStmtList);
- }
-
- return fun;
}
template <typename ParseHandler>
typename ParseHandler::Node
-Parser<ParseHandler>::functionExpr(uint32_t preludeStart, InvokedPrediction invoked,
+Parser<ParseHandler>::functionExpr(uint32_t toStringStart, InvokedPrediction invoked,
FunctionAsyncKind asyncKind)
{
MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_FUNCTION));
- AutoAwaitIsKeyword awaitIsKeyword(&tokenStream, asyncKind == AsyncFunction);
+ AutoAwaitIsKeyword<ParseHandler> awaitIsKeyword(this, asyncKind == AsyncFunction);
GeneratorKind generatorKind = asyncKind == AsyncFunction ? StarGenerator : NotGenerator;
TokenKind tt;
if (!tokenStream.getToken(&tt))
@@ -3664,7 +3872,7 @@ Parser<ParseHandler>::functionExpr(uint32_t preludeStart, InvokedPrediction invo
YieldHandling yieldHandling = GetYieldHandling(generatorKind, asyncKind);
RootedPropertyName name(context);
- if (tt == TOK_NAME || tt == TOK_YIELD) {
+ if (TokenKindIsPossibleIdentifier(tt)) {
name = bindingIdentifier(yieldHandling);
if (!name)
return null();
@@ -3679,7 +3887,7 @@ Parser<ParseHandler>::functionExpr(uint32_t preludeStart, InvokedPrediction invo
if (invoked)
pn = handler.setLikelyIIFE(pn);
- return functionDefinition(preludeStart, pn, InAllowed, yieldHandling, name, Expression,
+ return functionDefinition(toStringStart, pn, InAllowed, yieldHandling, name, Expression,
generatorKind, asyncKind);
}
@@ -3701,18 +3909,6 @@ IsEscapeFreeStringLiteral(const TokenPos& pos, JSAtom* str)
return pos.begin + str->length() + 2 == pos.end;
}
-template <typename ParseHandler>
-bool
-Parser<ParseHandler>::checkUnescapedName()
-{
- const Token& token = tokenStream.currentToken();
- if (!token.nameContainsEscape())
- return true;
-
- errorAt(token.pos.begin, JSMSG_ESCAPED_KEYWORD);
- return false;
-}
-
template <>
bool
Parser<SyntaxParseHandler>::asmJS(Node list)
@@ -3931,7 +4127,7 @@ Parser<ParseHandler>::matchLabel(YieldHandling yieldHandling, MutableHandle<Prop
if (!tokenStream.peekTokenSameLine(&tt, TokenStream::Operand))
return false;
- if (tt == TOK_NAME || tt == TOK_YIELD) {
+ if (TokenKindIsPossibleIdentifier(tt)) {
tokenStream.consumeKnownToken(tt, TokenStream::Operand);
label.set(labelIdentifier(yieldHandling));
@@ -3954,8 +4150,17 @@ Parser<ParseHandler>::PossibleError::error(ErrorKind kind)
{
if (kind == ErrorKind::Expression)
return exprError_;
- MOZ_ASSERT(kind == ErrorKind::Destructuring);
- return destructuringError_;
+ if (kind == ErrorKind::Destructuring)
+ return destructuringError_;
+ MOZ_ASSERT(kind == ErrorKind::DestructuringWarning);
+ return destructuringWarning_;
+}
+
+template <typename ParseHandler>
+bool
+Parser<ParseHandler>::PossibleError::hasPendingDestructuringError()
+{
+ return hasError(ErrorKind::Destructuring);
}
template <typename ParseHandler>
@@ -3999,6 +4204,14 @@ Parser<ParseHandler>::PossibleError::setPendingDestructuringErrorAt(const TokenP
template <typename ParseHandler>
void
+Parser<ParseHandler>::PossibleError::setPendingDestructuringWarningAt(const TokenPos& pos,
+ unsigned errorNumber)
+{
+ setPending(ErrorKind::DestructuringWarning, pos, errorNumber);
+}
+
+template <typename ParseHandler>
+void
Parser<ParseHandler>::PossibleError::setPendingExpressionErrorAt(const TokenPos& pos,
unsigned errorNumber)
{
@@ -4019,23 +4232,36 @@ Parser<ParseHandler>::PossibleError::checkForError(ErrorKind kind)
template <typename ParseHandler>
bool
-Parser<ParseHandler>::PossibleError::checkForDestructuringError()
+Parser<ParseHandler>::PossibleError::checkForWarning(ErrorKind kind)
+{
+ if (!hasError(kind))
+ return true;
+
+ Error& err = error(kind);
+ return parser_.extraWarningAt(err.offset_, err.errorNumber_);
+}
+
+template <typename ParseHandler>
+bool
+Parser<ParseHandler>::PossibleError::checkForDestructuringErrorOrWarning()
{
// Clear pending expression error, because we're definitely not in an
// expression context.
setResolved(ErrorKind::Expression);
- // Report any pending destructuring error.
- return checkForError(ErrorKind::Destructuring);
+ // Report any pending destructuring error or warning.
+ return checkForError(ErrorKind::Destructuring) &&
+ checkForWarning(ErrorKind::DestructuringWarning);
}
template <typename ParseHandler>
bool
Parser<ParseHandler>::PossibleError::checkForExpressionError()
{
- // Clear pending destructuring error, because we're definitely not in a
- // destructuring context.
+ // Clear pending destructuring error or warning, because we're definitely
+ // not in a destructuring context.
setResolved(ErrorKind::Destructuring);
+ setResolved(ErrorKind::DestructuringWarning);
// Report any pending expression error.
return checkForError(ErrorKind::Expression);
@@ -4067,191 +4293,272 @@ Parser<ParseHandler>::PossibleError::transferErrorsTo(PossibleError* other)
transferErrorTo(ErrorKind::Expression, other);
}
-template <>
-bool
-Parser<FullParseHandler>::checkDestructuringName(ParseNode* expr, Maybe<DeclarationKind> maybeDecl)
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::bindingInitializer(Node lhs, DeclarationKind kind,
+ YieldHandling yieldHandling)
{
- MOZ_ASSERT(!handler.isUnparenthesizedDestructuringPattern(expr));
-
- // Parentheses are forbidden around destructuring *patterns* (but allowed
- // around names). Use our nicer error message for parenthesized, nested
- // patterns.
- if (handler.isParenthesizedDestructuringPattern(expr)) {
- errorAt(expr->pn_pos.begin, JSMSG_BAD_DESTRUCT_PARENS);
- return false;
- }
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_ASSIGN));
- // This expression might be in a variable-binding pattern where only plain,
- // unparenthesized names are permitted.
- if (maybeDecl) {
- // Destructuring patterns in declarations must only contain
- // unparenthesized names.
- if (!handler.isUnparenthesizedName(expr)) {
- errorAt(expr->pn_pos.begin, JSMSG_NO_VARIABLE_NAME);
- return false;
- }
+ if (kind == DeclarationKind::FormalParameter)
+ pc->functionBox()->hasParameterExprs = true;
- RootedPropertyName name(context, expr->name());
- return noteDeclaredName(name, *maybeDecl, expr->pn_pos);
- }
+ Node rhs = assignExpr(InAllowed, yieldHandling, TripledotProhibited);
+ if (!rhs)
+ return null();
- // Otherwise this is an expression in destructuring outside a declaration.
- if (handler.isNameAnyParentheses(expr)) {
- if (const char* chars = handler.nameIsArgumentsEvalAnyParentheses(expr, context)) {
- if (!strictModeErrorAt(expr->pn_pos.begin, JSMSG_BAD_STRICT_ASSIGN, chars))
- return false;
- }
+ handler.checkAndSetIsDirectRHSAnonFunction(rhs);
- return true;
- }
+ Node assign = handler.newAssignment(PNK_ASSIGN, lhs, rhs, JSOP_NOP);
+ if (!assign)
+ return null();
- if (handler.isPropertyAccess(expr))
- return true;
+ if (foldConstants && !FoldConstants(context, &assign, this))
+ return null();
- errorAt(expr->pn_pos.begin, JSMSG_BAD_DESTRUCT_TARGET);
- return false;
+ return assign;
}
-template <>
-bool
-Parser<FullParseHandler>::checkDestructuringPattern(ParseNode* pattern,
- Maybe<DeclarationKind> maybeDecl,
- PossibleError* possibleError /* = nullptr */);
-
-template <>
-bool
-Parser<FullParseHandler>::checkDestructuringObject(ParseNode* objectPattern,
- Maybe<DeclarationKind> maybeDecl)
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::bindingIdentifier(DeclarationKind kind, YieldHandling yieldHandling)
{
- MOZ_ASSERT(objectPattern->isKind(PNK_OBJECT));
+ RootedPropertyName name(context, bindingIdentifier(yieldHandling));
+ if (!name)
+ return null();
- for (ParseNode* member = objectPattern->pn_head; member; member = member->pn_next) {
- ParseNode* target;
- if (member->isKind(PNK_MUTATEPROTO)) {
- target = member->pn_kid;
- } else {
- MOZ_ASSERT(member->isKind(PNK_COLON) || member->isKind(PNK_SHORTHAND));
- MOZ_ASSERT_IF(member->isKind(PNK_SHORTHAND),
- member->pn_left->isKind(PNK_OBJECT_PROPERTY_NAME) &&
- member->pn_right->isKind(PNK_NAME) &&
- member->pn_left->pn_atom == member->pn_right->pn_atom);
+ Node binding = newName(name);
+ if (!binding || !noteDeclaredName(name, kind, pos()))
+ return null();
- target = member->pn_right;
- }
- if (handler.isUnparenthesizedAssignment(target))
- target = target->pn_left;
+ return binding;
+}
- if (handler.isUnparenthesizedDestructuringPattern(target)) {
- if (!checkDestructuringPattern(target, maybeDecl))
- return false;
- } else {
- if (!checkDestructuringName(target, maybeDecl))
- return false;
- }
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::bindingIdentifierOrPattern(DeclarationKind kind, YieldHandling yieldHandling,
+ TokenKind tt)
+{
+ if (tt == TOK_LB)
+ return arrayBindingPattern(kind, yieldHandling);
+
+ if (tt == TOK_LC)
+ return objectBindingPattern(kind, yieldHandling);
+
+ if (!TokenKindIsPossibleIdentifierName(tt)) {
+ error(JSMSG_NO_VARIABLE_NAME);
+ return null();
}
- return true;
+ return bindingIdentifier(kind, yieldHandling);
}
-template <>
-bool
-Parser<FullParseHandler>::checkDestructuringArray(ParseNode* arrayPattern,
- Maybe<DeclarationKind> maybeDecl)
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::objectBindingPattern(DeclarationKind kind, YieldHandling yieldHandling)
{
- MOZ_ASSERT(arrayPattern->isKind(PNK_ARRAY));
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_LC));
- for (ParseNode* element = arrayPattern->pn_head; element; element = element->pn_next) {
- if (element->isKind(PNK_ELISION))
- continue;
+ JS_CHECK_RECURSION(context, return null());
- ParseNode* target;
- if (element->isKind(PNK_SPREAD)) {
- if (element->pn_next) {
- errorAt(element->pn_next->pn_pos.begin, JSMSG_PARAMETER_AFTER_REST);
- return false;
- }
- target = element->pn_kid;
- } else if (handler.isUnparenthesizedAssignment(element)) {
- target = element->pn_left;
+ uint32_t begin = pos().begin;
+ Node literal = handler.newObjectLiteral(begin);
+ if (!literal)
+ return null();
+
+ Maybe<DeclarationKind> declKind = Some(kind);
+ RootedAtom propAtom(context);
+ for (;;) {
+ TokenKind tt;
+ if (!tokenStream.peekToken(&tt))
+ return null();
+ if (tt == TOK_RC)
+ break;
+
+ if (tt == TOK_TRIPLEDOT) {
+ // rest-binding property
+ tokenStream.consumeKnownToken(TOK_TRIPLEDOT);
+ uint32_t begin = pos().begin;
+
+ TokenKind tt;
+ if (!tokenStream.getToken(&tt))
+ return null();
+
+ Node inner = bindingIdentifierOrPattern(kind, yieldHandling, tt);
+ if (!inner)
+ return null();
+
+ if (!handler.addSpreadProperty(literal, begin, inner))
+ return null();
} else {
- target = element;
+ TokenPos namePos = tokenStream.nextToken().pos;
+
+ PropertyType propType;
+ Node propName = propertyName(yieldHandling, declKind, literal, &propType, &propAtom);
+ if (!propName)
+ return null();
+ if (propType == PropertyType::Normal) {
+ // Handle e.g., |var {p: x} = o| and |var {p: x=0} = o|.
+
+ if (!tokenStream.getToken(&tt, TokenStream::Operand))
+ return null();
+
+ Node binding = bindingIdentifierOrPattern(kind, yieldHandling, tt);
+ if (!binding)
+ return null();
+
+ bool hasInitializer;
+ if (!tokenStream.matchToken(&hasInitializer, TOK_ASSIGN))
+ return null();
+
+ Node bindingExpr = hasInitializer
+ ? bindingInitializer(binding, kind, yieldHandling)
+ : binding;
+ if (!bindingExpr)
+ return null();
+
+ if (!handler.addPropertyDefinition(literal, propName, bindingExpr))
+ return null();
+ } else if (propType == PropertyType::Shorthand) {
+ // Handle e.g., |var {x, y} = o| as destructuring shorthand
+ // for |var {x: x, y: y} = o|.
+ MOZ_ASSERT(TokenKindIsPossibleIdentifierName(tt));
+
+ Node binding = bindingIdentifier(kind, yieldHandling);
+ if (!binding)
+ return null();
+
+ if (!handler.addShorthand(literal, propName, binding))
+ return null();
+ } else if (propType == PropertyType::CoverInitializedName) {
+ // Handle e.g., |var {x=1, y=2} = o| as destructuring
+ // shorthand with default values.
+ MOZ_ASSERT(TokenKindIsPossibleIdentifierName(tt));
+
+ Node binding = bindingIdentifier(kind, yieldHandling);
+ if (!binding)
+ return null();
+
+ tokenStream.consumeKnownToken(TOK_ASSIGN);
+
+ Node bindingExpr = bindingInitializer(binding, kind, yieldHandling);
+ if (!bindingExpr)
+ return null();
+
+ if (!handler.addPropertyDefinition(literal, propName, bindingExpr))
+ return null();
+ } else {
+ errorAt(namePos.begin, JSMSG_NO_VARIABLE_NAME);
+ return null();
+
+ }
}
- if (handler.isUnparenthesizedDestructuringPattern(target)) {
- if (!checkDestructuringPattern(target, maybeDecl))
- return false;
- } else {
- if (!checkDestructuringName(target, maybeDecl))
- return false;
+ bool matched;
+ if (!tokenStream.matchToken(&matched, TOK_COMMA))
+ return null();
+ if (!matched)
+ break;
+ if (tt == TOK_TRIPLEDOT) {
+ error(JSMSG_REST_WITH_COMMA);
+ return null();
}
}
- return true;
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::None,
+ reportMissingClosing(JSMSG_CURLY_AFTER_LIST,
+ JSMSG_CURLY_OPENED, begin));
+
+ handler.setEndPosition(literal, pos().end);
+ return literal;
}
-/*
- * Destructuring patterns can appear in two kinds of contexts:
- *
- * - assignment-like: assignment expressions and |for| loop heads. In
- * these cases, the patterns' property value positions can be
- * arbitrary lvalue expressions; the destructuring is just a fancy
- * assignment.
- *
- * - binding-like: |var| and |let| declarations, functions' formal
- * parameter lists, |catch| clauses, and comprehension tails. In
- * these cases, the patterns' property value positions must be
- * simple names; the destructuring defines them as new variables.
- *
- * In both cases, other code parses the pattern as an arbitrary
- * primaryExpr, and then, here in checkDestructuringPattern, verify
- * that the tree is a valid AssignmentPattern or BindingPattern.
- *
- * In assignment-like contexts, we parse the pattern with
- * pc->inDestructuringDecl clear, so the lvalue expressions in the
- * pattern are parsed normally. primaryExpr links variable references
- * into the appropriate use chains; creates placeholder definitions;
- * and so on. checkDestructuringPattern won't bind any new names and
- * we specialize lvalues as appropriate.
- *
- * In declaration-like contexts, the normal variable reference
- * processing would just be an obstruction, because we're going to
- * define the names that appear in the property value positions as new
- * variables anyway. In this case, we parse the pattern with
- * pc->inDestructuringDecl set, which directs primaryExpr to leave
- * whatever name nodes it creates unconnected. Then, here in
- * checkDestructuringPattern, we require the pattern's property value
- * positions to be simple names, and define them as appropriate to the
- * context.
- */
-template <>
-bool
-Parser<FullParseHandler>::checkDestructuringPattern(ParseNode* pattern,
- Maybe<DeclarationKind> maybeDecl,
- PossibleError* possibleError /* = nullptr */)
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::arrayBindingPattern(DeclarationKind kind, YieldHandling yieldHandling)
{
- if (pattern->isKind(PNK_ARRAYCOMP)) {
- errorAt(pattern->pn_pos.begin, JSMSG_ARRAY_COMP_LEFTSIDE);
- return false;
- }
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_LB));
- bool isDestructuring = pattern->isKind(PNK_ARRAY)
- ? checkDestructuringArray(pattern, maybeDecl)
- : checkDestructuringObject(pattern, maybeDecl);
+ JS_CHECK_RECURSION(context, return null());
- // Report any pending destructuring error.
- if (isDestructuring && possibleError && !possibleError->checkForDestructuringError())
- return false;
+ uint32_t begin = pos().begin;
+ Node literal = handler.newArrayLiteral(begin);
+ if (!literal)
+ return null();
- return isDestructuring;
-}
+ uint32_t index = 0;
+ TokenStream::Modifier modifier = TokenStream::Operand;
+ for (; ; index++) {
+ if (index >= NativeObject::MAX_DENSE_ELEMENTS_COUNT) {
+ error(JSMSG_ARRAY_INIT_TOO_BIG);
+ return null();
+ }
+
+ TokenKind tt;
+ if (!tokenStream.getToken(&tt, TokenStream::Operand))
+ return null();
+
+ if (tt == TOK_RB) {
+ tokenStream.ungetToken();
+ break;
+ }
+
+ if (tt == TOK_COMMA) {
+ if (!handler.addElision(literal, pos()))
+ return null();
+ } else if (tt == TOK_TRIPLEDOT) {
+ uint32_t begin = pos().begin;
+
+ TokenKind tt;
+ if (!tokenStream.getToken(&tt, TokenStream::Operand))
+ return null();
+
+ Node inner = bindingIdentifierOrPattern(kind, yieldHandling, tt);
+ if (!inner)
+ return null();
+
+ if (!handler.addSpreadElement(literal, begin, inner))
+ return null();
+ } else {
+ Node binding = bindingIdentifierOrPattern(kind, yieldHandling, tt);
+ if (!binding)
+ return null();
+
+ bool hasInitializer;
+ if (!tokenStream.matchToken(&hasInitializer, TOK_ASSIGN))
+ return null();
+
+ Node element = hasInitializer
+ ? bindingInitializer(binding, kind, yieldHandling)
+ : binding;
+ if (!element)
+ return null();
+
+ handler.addArrayElement(literal, element);
+ }
+
+ if (tt != TOK_COMMA) {
+ // If we didn't already match TOK_COMMA in above case.
+ bool matched;
+ if (!tokenStream.matchToken(&matched, TOK_COMMA))
+ return null();
+ if (!matched) {
+ modifier = TokenStream::None;
+ break;
+ }
+ if (tt == TOK_TRIPLEDOT) {
+ error(JSMSG_REST_WITH_COMMA);
+ return null();
+ }
+ }
+ }
+
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RB, modifier,
+ reportMissingClosing(JSMSG_BRACKET_AFTER_LIST,
+ JSMSG_BRACKET_OPENED, begin));
-template <>
-bool
-Parser<SyntaxParseHandler>::checkDestructuringPattern(Node pattern,
- Maybe<DeclarationKind> maybeDecl,
- PossibleError* possibleError /* = nullptr */)
-{
- return abortIfSyntaxParser();
+ handler.setEndPosition(literal, pos().end);
+ return literal;
}
template <typename ParseHandler>
@@ -4262,18 +4569,9 @@ Parser<ParseHandler>::destructuringDeclaration(DeclarationKind kind, YieldHandli
MOZ_ASSERT(tokenStream.isCurrentTokenType(tt));
MOZ_ASSERT(tt == TOK_LB || tt == TOK_LC);
- PossibleError possibleError(*this);
- Node pattern;
- {
- pc->inDestructuringDecl = Some(kind);
- pattern = primaryExpr(yieldHandling, TripledotProhibited, tt, &possibleError);
- pc->inDestructuringDecl = Nothing();
- }
-
- if (!pattern || !checkDestructuringPattern(pattern, Some(kind), &possibleError))
- return null();
-
- return pattern;
+ return tt == TOK_LB
+ ? arrayBindingPattern(kind, yieldHandling)
+ : objectBindingPattern(kind, yieldHandling);
}
template <typename ParseHandler>
@@ -4303,6 +4601,7 @@ typename ParseHandler::Node
Parser<ParseHandler>::blockStatement(YieldHandling yieldHandling, unsigned errorNumber)
{
MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_LC));
+ uint32_t openedPos = pos().begin;
ParseContext::Statement stmt(pc, StatementKind::Block);
ParseContext::Scope scope(this);
@@ -4313,7 +4612,9 @@ Parser<ParseHandler>::blockStatement(YieldHandling yieldHandling, unsigned error
if (!list)
return null();
- MUST_MATCH_TOKEN_MOD(TOK_RC, TokenStream::Operand, errorNumber);
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::Operand,
+ reportMissingClosing(errorNumber, JSMSG_CURLY_OPENED,
+ openedPos));
return finishLexicalScope(scope, list);
}
@@ -4384,6 +4685,12 @@ Parser<ParseHandler>::declarationPattern(Node decl, DeclarationKind declKind, To
// binary operator (examined with modifier None) terminated |init|.
// For all other declarations, through ASI's infinite majesty, a next
// token on a new line would begin an expression.
+ // Similar to the case in initializerInNameDeclaration(), we need to
+ // peek at the next token when assignExpr() is a lazily parsed arrow
+ // function.
+ TokenKind ignored;
+ if (!tokenStream.peekToken(&ignored))
+ return null();
tokenStream.addModifierException(TokenStream::OperandIsNone);
}
@@ -4484,7 +4791,8 @@ Parser<ParseHandler>::declarationName(Node decl, DeclarationKind declKind, Token
ParseNodeKind* forHeadKind, Node* forInOrOfExpression)
{
// Anything other than TOK_YIELD or TOK_NAME is an error.
- if (tt != TOK_NAME && tt != TOK_YIELD) {
+ // Anything other than possible identifier is an error.
+ if (!TokenKindIsPossibleIdentifier(tt)) {
error(JSMSG_NO_VARIABLE_NAME);
return null();
}
@@ -4625,8 +4933,10 @@ Parser<ParseHandler>::declarationList(YieldHandling yieldHandling,
template <typename ParseHandler>
typename ParseHandler::Node
-Parser<ParseHandler>::lexicalDeclaration(YieldHandling yieldHandling, bool isConst)
+Parser<ParseHandler>::lexicalDeclaration(YieldHandling yieldHandling, DeclarationKind kind)
{
+ MOZ_ASSERT(kind == DeclarationKind::Const || kind == DeclarationKind::Let);
+
/*
* Parse body-level lets without a new block object. ES6 specs
* that an execution environment's initial lexical environment
@@ -4638,8 +4948,9 @@ Parser<ParseHandler>::lexicalDeclaration(YieldHandling yieldHandling, bool isCon
*
* See 8.1.1.1.6 and the note in 13.2.1.
*/
- Node decl = declarationList(yieldHandling, isConst ? PNK_CONST : PNK_LET);
- if (!decl || !MatchOrInsertSemicolonAfterExpression(tokenStream))
+ Node decl = declarationList(yieldHandling,
+ kind == DeclarationKind::Const ? PNK_CONST : PNK_LET);
+ if (!decl || !matchOrInsertSemicolonAfterExpression())
return null();
return decl;
@@ -4650,41 +4961,34 @@ bool
Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node importSpecSet)
{
if (tt == TOK_LC) {
- TokenStream::Modifier modifier = TokenStream::KeywordIsName;
while (true) {
// Handle the forms |import {} from 'a'| and
// |import { ..., } from 'a'| (where ... is non empty), by
// escaping the loop early if the next token is }.
- if (!tokenStream.peekToken(&tt, TokenStream::KeywordIsName))
+ if (!tokenStream.getToken(&tt))
return false;
if (tt == TOK_RC)
break;
- // If the next token is a keyword, the previous call to
- // peekToken matched it as a TOK_NAME, and put it in the
- // lookahead buffer, so this call will match keywords as well.
- MUST_MATCH_TOKEN_MOD(TOK_NAME, TokenStream::KeywordIsName, JSMSG_NO_IMPORT_NAME);
+ if (!TokenKindIsPossibleIdentifierName(tt)) {
+ error(JSMSG_NO_IMPORT_NAME);
+ return false;
+ }
+
Rooted<PropertyName*> importName(context, tokenStream.currentName());
TokenPos importNamePos = pos();
- TokenKind maybeAs;
- if (!tokenStream.peekToken(&maybeAs))
+ bool matched;
+ if (!tokenStream.matchToken(&matched, TOK_AS))
return null();
- if (maybeAs == TOK_NAME &&
- tokenStream.nextName() == context->names().as)
- {
- tokenStream.consumeKnownToken(TOK_NAME);
-
- if (!checkUnescapedName())
- return false;
-
+ if (matched) {
TokenKind afterAs;
if (!tokenStream.getToken(&afterAs))
return false;
- if (afterAs != TOK_NAME && afterAs != TOK_YIELD) {
+ if (!TokenKindIsPossibleIdentifierName(afterAs)) {
error(JSMSG_NO_BINDING_NAME);
return false;
}
@@ -4694,10 +4998,7 @@ Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node impor
// by the keyword 'as'.
// See the ImportSpecifier production in ES6 section 15.2.2.
if (IsKeyword(importName)) {
- JSAutoByteString bytes;
- if (!AtomToPrintableString(context, importName, &bytes))
- return false;
- error(JSMSG_AS_AFTER_RESERVED_WORD, bytes.ptr());
+ error(JSMSG_AS_AFTER_RESERVED_WORD, ReservedWordToCharZ(importName));
return false;
}
}
@@ -4722,31 +5023,24 @@ Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node impor
handler.addList(importSpecSet, importSpec);
- bool matched;
- if (!tokenStream.matchToken(&matched, TOK_COMMA))
+ TokenKind next;
+ if (!tokenStream.getToken(&next))
return false;
- if (!matched) {
- modifier = TokenStream::None;
+ if (next == TOK_RC)
break;
+
+ if (next != TOK_COMMA) {
+ error(JSMSG_RC_AFTER_IMPORT_SPEC_LIST);
+ return false;
}
}
-
- MUST_MATCH_TOKEN_MOD(TOK_RC, modifier, JSMSG_RC_AFTER_IMPORT_SPEC_LIST);
} else {
MOZ_ASSERT(tt == TOK_MUL);
- if (!tokenStream.getToken(&tt))
- return false;
- if (tt != TOK_NAME || tokenStream.currentName() != context->names().as) {
- error(JSMSG_AS_AFTER_IMPORT_STAR);
- return false;
- }
-
- if (!checkUnescapedName())
- return false;
+ MUST_MATCH_TOKEN(TOK_AS, JSMSG_AS_AFTER_IMPORT_STAR);
- MUST_MATCH_TOKEN(TOK_NAME, JSMSG_NO_BINDING_NAME);
+ MUST_MATCH_TOKEN_FUNC(TokenKindIsPossibleIdentifierName, JSMSG_NO_BINDING_NAME);
Node importName = newName(context->names().star);
if (!importName)
@@ -4780,14 +5074,6 @@ Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node impor
}
template<>
-bool
-Parser<SyntaxParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node importSpecSet)
-{
- MOZ_ALWAYS_FALSE(abortIfSyntaxParser());
- return false;
-}
-
-template<>
ParseNode*
Parser<FullParseHandler>::importDeclaration()
{
@@ -4807,8 +5093,15 @@ Parser<FullParseHandler>::importDeclaration()
if (!importSpecSet)
return null();
- if (tt == TOK_NAME || tt == TOK_LC || tt == TOK_MUL) {
- if (tt == TOK_NAME) {
+ if (tt == TOK_STRING) {
+ // Handle the form |import 'a'| by leaving the list empty. This is
+ // equivalent to |import {} from 'a'|.
+ importSpecSet->pn_pos.end = importSpecSet->pn_pos.begin;
+ } else {
+ if (tt == TOK_LC || tt == TOK_MUL) {
+ if (!namedImportsOrNamespaceImport(tt, importSpecSet))
+ return null();
+ } else if (TokenKindIsPossibleIdentifierName(tt)) {
// Handle the form |import a from 'b'|, by adding a single import
// specifier to the list, with 'default' as the import name and
// 'a' as the binding name. This is equivalent to
@@ -4851,36 +5144,20 @@ Parser<FullParseHandler>::importDeclaration()
return null();
}
} else {
- if (!namedImportsOrNamespaceImport(tt, importSpecSet))
- return null();
- }
-
- if (!tokenStream.getToken(&tt))
- return null();
-
- if (tt != TOK_NAME || tokenStream.currentName() != context->names().from) {
- error(JSMSG_FROM_AFTER_IMPORT_CLAUSE);
+ error(JSMSG_DECLARATION_AFTER_IMPORT);
return null();
}
- if (!checkUnescapedName())
- return null();
+ MUST_MATCH_TOKEN(TOK_FROM, JSMSG_FROM_AFTER_IMPORT_CLAUSE);
MUST_MATCH_TOKEN(TOK_STRING, JSMSG_MODULE_SPEC_AFTER_FROM);
- } else if (tt == TOK_STRING) {
- // Handle the form |import 'a'| by leaving the list empty. This is
- // equivalent to |import {} from 'a'|.
- importSpecSet->pn_pos.end = importSpecSet->pn_pos.begin;
- } else {
- error(JSMSG_DECLARATION_AFTER_IMPORT);
- return null();
}
Node moduleSpec = stringLiteral();
if (!moduleSpec)
return null();
- if (!MatchOrInsertSemicolonAfterNonExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterNonExpression())
return null();
ParseNode* node =
@@ -4947,284 +5224,539 @@ Parser<SyntaxParseHandler>::checkExportedNamesForDeclaration(Node node)
}
template<>
-ParseNode*
-Parser<FullParseHandler>::exportDeclaration()
+bool
+Parser<FullParseHandler>::checkExportedNameForClause(ParseNode* node)
{
- MOZ_ASSERT(tokenStream.currentToken().type == TOK_EXPORT);
+ return checkExportedName(node->pn_atom);
+}
- if (!pc->atModuleLevel()) {
- error(JSMSG_EXPORT_DECL_AT_TOP_LEVEL);
+template<>
+bool
+Parser<SyntaxParseHandler>::checkExportedNameForClause(Node node)
+{
+ MOZ_ALWAYS_FALSE(abortIfSyntaxParser());
+ return false;
+}
+
+template<>
+bool
+Parser<FullParseHandler>::checkExportedNameForFunction(ParseNode* node)
+{
+ return checkExportedName(node->pn_funbox->function()->explicitName());
+}
+
+template<>
+bool
+Parser<SyntaxParseHandler>::checkExportedNameForFunction(Node node)
+{
+ MOZ_ALWAYS_FALSE(abortIfSyntaxParser());
+ return false;
+}
+
+template<>
+bool
+Parser<FullParseHandler>::checkExportedNameForClass(ParseNode* node)
+{
+ const ClassNode& cls = node->as<ClassNode>();
+ MOZ_ASSERT(cls.names());
+ return checkExportedName(cls.names()->innerBinding()->pn_atom);
+}
+
+template<>
+bool
+Parser<SyntaxParseHandler>::checkExportedNameForClass(Node node)
+{
+ MOZ_ALWAYS_FALSE(abortIfSyntaxParser());
+ return false;
+}
+
+template<>
+bool
+Parser<FullParseHandler>::processExport(ParseNode* node)
+{
+ return pc->sc()->asModuleContext()->builder.processExport(node);
+}
+
+template<>
+bool
+Parser<SyntaxParseHandler>::processExport(Node node)
+{
+ MOZ_ALWAYS_FALSE(abortIfSyntaxParser());
+ return false;
+}
+
+template<>
+bool
+Parser<FullParseHandler>::processExportFrom(ParseNode* node)
+{
+ return pc->sc()->asModuleContext()->builder.processExportFrom(node);
+}
+
+template<>
+bool
+Parser<SyntaxParseHandler>::processExportFrom(Node node)
+{
+ MOZ_ALWAYS_FALSE(abortIfSyntaxParser());
+ return false;
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportFrom(uint32_t begin, Node specList)
+{
+ if (!abortIfSyntaxParser())
return null();
- }
- uint32_t begin = pos().begin;
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_FROM));
- Node kid;
- TokenKind tt;
- if (!tokenStream.getToken(&tt))
+ if (!abortIfSyntaxParser())
return null();
- switch (tt) {
- case TOK_LC: {
- kid = handler.newList(PNK_EXPORT_SPEC_LIST);
- if (!kid)
- return null();
- while (true) {
- // Handle the forms |export {}| and |export { ..., }| (where ...
- // is non empty), by escaping the loop early if the next token
- // is }.
- if (!tokenStream.peekToken(&tt))
- return null();
- if (tt == TOK_RC)
- break;
+ MUST_MATCH_TOKEN(TOK_STRING, JSMSG_MODULE_SPEC_AFTER_FROM);
- MUST_MATCH_TOKEN(TOK_NAME, JSMSG_NO_BINDING_NAME);
- Node bindingName = newName(tokenStream.currentName());
- if (!bindingName)
- return null();
+ Node moduleSpec = stringLiteral();
+ if (!moduleSpec)
+ return null();
- bool foundAs;
- if (!tokenStream.matchContextualKeyword(&foundAs, context->names().as))
- return null();
- if (foundAs)
- MUST_MATCH_TOKEN_MOD(TOK_NAME, TokenStream::KeywordIsName, JSMSG_NO_EXPORT_NAME);
+ if (!matchOrInsertSemicolonAfterNonExpression())
+ return null();
- Node exportName = newName(tokenStream.currentName());
- if (!exportName)
- return null();
+ Node node = handler.newExportFromDeclaration(begin, specList, moduleSpec);
+ if (!node)
+ return null();
- if (!checkExportedName(exportName->pn_atom))
- return null();
+ if (!processExportFrom(node))
+ return null();
- Node exportSpec = handler.newBinary(PNK_EXPORT_SPEC, bindingName, exportName);
- if (!exportSpec)
- return null();
+ return node;
+}
- handler.addList(kid, exportSpec);
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportBatch(uint32_t begin)
+{
+ if (!abortIfSyntaxParser())
+ return null();
- bool matched;
- if (!tokenStream.matchToken(&matched, TOK_COMMA))
- return null();
- if (!matched)
- break;
- }
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_MUL));
- MUST_MATCH_TOKEN(TOK_RC, JSMSG_RC_AFTER_EXPORT_SPEC_LIST);
+ Node kid = handler.newList(PNK_EXPORT_SPEC_LIST);
+ if (!kid)
+ return null();
- // Careful! If |from| follows, even on a new line, it must start a
- // FromClause:
- //
- // export { x }
- // from "foo"; // a single ExportDeclaration
- //
- // But if it doesn't, we might have an ASI opportunity in Operand
- // context, so simply matching a contextual keyword won't work:
- //
- // export { x } // ExportDeclaration, terminated by ASI
- // fro\u006D // ExpressionStatement, the name "from"
- //
- // In that case let MatchOrInsertSemicolonAfterNonExpression sort out
- // ASI or any necessary error.
- TokenKind tt;
- if (!tokenStream.getToken(&tt, TokenStream::Operand))
- return null();
+ // Handle the form |export *| by adding a special export batch
+ // specifier to the list.
+ Node exportSpec = handler.newNullary(PNK_EXPORT_BATCH_SPEC, JSOP_NOP, pos());
+ if (!exportSpec)
+ return null();
- if (tt == TOK_NAME &&
- tokenStream.currentToken().name() == context->names().from &&
- !tokenStream.currentToken().nameContainsEscape())
- {
- MUST_MATCH_TOKEN(TOK_STRING, JSMSG_MODULE_SPEC_AFTER_FROM);
+ handler.addList(kid, exportSpec);
- Node moduleSpec = stringLiteral();
- if (!moduleSpec)
- return null();
+ MUST_MATCH_TOKEN(TOK_FROM, JSMSG_FROM_AFTER_EXPORT_STAR);
- if (!MatchOrInsertSemicolonAfterNonExpression(tokenStream))
- return null();
+ return exportFrom(begin, kid);
+}
- ParseNode* node = handler.newExportFromDeclaration(begin, kid, moduleSpec);
- if (!node || !pc->sc()->asModuleContext()->builder.processExportFrom(node))
- return null();
+template<>
+bool
+Parser<FullParseHandler>::checkLocalExportNames(ParseNode* node)
+{
+ // ES 2017 draft 15.2.3.1.
+ for (ParseNode* next = node->pn_head; next; next = next->pn_next) {
+ ParseNode* name = next->pn_left;
+ MOZ_ASSERT(name->isKind(PNK_NAME));
- return node;
- }
+ RootedPropertyName ident(context, name->pn_atom->asPropertyName());
+ if (!checkLocalExportName(ident, name->pn_pos.begin))
+ return false;
+ }
- tokenStream.ungetToken();
+ return true;
+}
- if (!MatchOrInsertSemicolonAfterNonExpression(tokenStream))
- return null();
- break;
- }
+template<>
+bool
+Parser<SyntaxParseHandler>::checkLocalExportNames(Node node)
+{
+ MOZ_ALWAYS_FALSE(abortIfSyntaxParser());
+ return false;
+}
- case TOK_MUL: {
- kid = handler.newList(PNK_EXPORT_SPEC_LIST);
- if (!kid)
- return null();
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportClause(uint32_t begin)
+{
+ if (!abortIfSyntaxParser())
+ return null();
- // Handle the form |export *| by adding a special export batch
- // specifier to the list.
- Node exportSpec = handler.newNullary(PNK_EXPORT_BATCH_SPEC, JSOP_NOP, pos());
- if (!exportSpec)
- return null();
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_LC));
- handler.addList(kid, exportSpec);
+ Node kid = handler.newList(PNK_EXPORT_SPEC_LIST);
+ if (!kid)
+ return null();
+ TokenKind tt;
+ while (true) {
+ // Handle the forms |export {}| and |export { ..., }| (where ... is non
+ // empty), by escaping the loop early if the next token is }.
if (!tokenStream.getToken(&tt))
return null();
- if (tt != TOK_NAME || tokenStream.currentName() != context->names().from) {
- error(JSMSG_FROM_AFTER_EXPORT_STAR);
+
+ if (tt == TOK_RC)
+ break;
+
+ if (!TokenKindIsPossibleIdentifierName(tt)) {
+ error(JSMSG_NO_BINDING_NAME);
return null();
}
- if (!checkUnescapedName())
+ Node bindingName = newName(tokenStream.currentName());
+ if (!bindingName)
return null();
- MUST_MATCH_TOKEN(TOK_STRING, JSMSG_MODULE_SPEC_AFTER_FROM);
-
- Node moduleSpec = stringLiteral();
- if (!moduleSpec)
+ bool foundAs;
+ if (!tokenStream.matchToken(&foundAs, TOK_AS))
return null();
+ if (foundAs)
+ MUST_MATCH_TOKEN_FUNC(TokenKindIsPossibleIdentifierName, JSMSG_NO_EXPORT_NAME);
- if (!MatchOrInsertSemicolonAfterNonExpression(tokenStream))
+ Node exportName = newName(tokenStream.currentName());
+ if (!exportName)
return null();
- ParseNode* node = handler.newExportFromDeclaration(begin, kid, moduleSpec);
- if (!node || !pc->sc()->asModuleContext()->builder.processExportFrom(node))
+ if (!checkExportedNameForClause(exportName))
return null();
- return node;
+ Node exportSpec = handler.newBinary(PNK_EXPORT_SPEC, bindingName, exportName);
+ if (!exportSpec)
+ return null();
- }
+ handler.addList(kid, exportSpec);
- case TOK_FUNCTION:
- kid = functionStmt(pos().begin, YieldIsKeyword, NameRequired);
- if (!kid)
+ TokenKind next;
+ if (!tokenStream.getToken(&next))
return null();
- if (!checkExportedName(kid->pn_funbox->function()->explicitName()))
- return null();
- break;
+ if (next == TOK_RC)
+ break;
- case TOK_CLASS: {
- kid = classDefinition(YieldIsKeyword, ClassStatement, NameRequired);
- if (!kid)
+ if (next != TOK_COMMA) {
+ error(JSMSG_RC_AFTER_EXPORT_SPEC_LIST);
return null();
+ }
+ }
- const ClassNode& cls = kid->as<ClassNode>();
- MOZ_ASSERT(cls.names());
- if (!checkExportedName(cls.names()->innerBinding()->pn_atom))
- return null();
- break;
- }
+ // Careful! If |from| follows, even on a new line, it must start a
+ // FromClause:
+ //
+ // export { x }
+ // from "foo"; // a single ExportDeclaration
+ //
+ // But if it doesn't, we might have an ASI opportunity in Operand context:
+ //
+ // export { x } // ExportDeclaration, terminated by ASI
+ // fro\u006D // ExpressionStatement, the name "from"
+ //
+ // In that case let matchOrInsertSemicolonAfterNonExpression sort out ASI
+ // or any necessary error.
+ bool matched;
+ if (!tokenStream.matchToken(&matched, TOK_FROM, TokenStream::Operand))
+ return null();
- case TOK_VAR:
- kid = declarationList(YieldIsName, PNK_VAR);
- if (!kid)
- return null();
- if (!MatchOrInsertSemicolonAfterExpression(tokenStream))
- return null();
- if (!checkExportedNamesForDeclaration(kid))
- return null();
- break;
+ if (matched)
+ return exportFrom(begin, kid);
- case TOK_DEFAULT: {
- if (!tokenStream.getToken(&tt, TokenStream::Operand))
- return null();
+ if (!matchOrInsertSemicolonAfterNonExpression())
+ return null();
- if (!checkExportedName(context->names().default_))
- return null();
+ if (!checkLocalExportNames(kid))
+ return null();
- ParseNode* nameNode = nullptr;
- switch (tt) {
- case TOK_FUNCTION:
- kid = functionStmt(pos().begin, YieldIsKeyword, AllowDefaultName);
- if (!kid)
- return null();
- break;
- case TOK_CLASS:
- kid = classDefinition(YieldIsKeyword, ClassStatement, AllowDefaultName);
- if (!kid)
- return null();
- break;
- default: {
- if (tt == TOK_NAME && tokenStream.currentName() == context->names().async) {
- TokenKind nextSameLine = TOK_EOF;
- if (!tokenStream.peekTokenSameLine(&nextSameLine))
- return null();
+ Node node = handler.newExportDeclaration(kid, TokenPos(begin, pos().end));
+ if (!node)
+ return null();
- if (nextSameLine == TOK_FUNCTION) {
- tokenStream.consumeKnownToken(nextSameLine);
- kid = functionStmt(pos().begin, YieldIsName, AllowDefaultName, AsyncFunction);
- if (!kid)
- return null();
- break;
- }
- }
+ if (!processExport(node))
+ return null();
- tokenStream.ungetToken();
- RootedPropertyName name(context, context->names().starDefaultStar);
- nameNode = newName(name);
- if (!nameNode)
- return null();
- if (!noteDeclaredName(name, DeclarationKind::Const, pos()))
- return null();
- kid = assignExpr(InAllowed, YieldIsKeyword, TripledotProhibited);
- if (!kid)
- return null();
- if (!MatchOrInsertSemicolonAfterExpression(tokenStream))
- return null();
- break;
- }
- }
+ return node;
+}
- ParseNode* node = handler.newExportDefaultDeclaration(kid, nameNode,
- TokenPos(begin, pos().end));
- if (!node || !pc->sc()->asModuleContext()->builder.processExport(node))
- return null();
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportVariableStatement(uint32_t begin)
+{
+ if (!abortIfSyntaxParser())
+ return null();
- return node;
- }
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_VAR));
- case TOK_CONST:
- kid = lexicalDeclaration(YieldIsName, /* isConst = */ true);
- if (!kid)
- return null();
- if (!checkExportedNamesForDeclaration(kid))
- return null();
- break;
+ Node kid = declarationList(YieldIsName, PNK_VAR);
+ if (!kid)
+ return null();
+ if (!matchOrInsertSemicolonAfterExpression())
+ return null();
+ if (!checkExportedNamesForDeclaration(kid))
+ return null();
- case TOK_NAME:
- if (tokenStream.currentName() == context->names().let) {
- if (!checkUnescapedName())
- return null();
+ Node node = handler.newExportDeclaration(kid, TokenPos(begin, pos().end));
+ if (!node)
+ return null();
- kid = lexicalDeclaration(YieldIsName, /* isConst = */ false);
- if (!kid)
- return null();
- if (!checkExportedNamesForDeclaration(kid))
- return null();
- break;
- }
- MOZ_FALLTHROUGH;
+ if (!processExport(node))
+ return null();
- default:
- error(JSMSG_DECLARATION_AFTER_EXPORT);
+ return node;
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportFunctionDeclaration(uint32_t begin)
+{
+ if (!abortIfSyntaxParser())
+ return null();
+
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_FUNCTION));
+
+ Node kid = functionStmt(pos().begin, YieldIsKeyword, NameRequired);
+ if (!kid)
+ return null();
+
+ if (!checkExportedNameForFunction(kid))
return null();
- }
- ParseNode* node = handler.newExportDeclaration(kid, TokenPos(begin, pos().end));
- if (!node || !pc->sc()->asModuleContext()->builder.processExport(node))
+ Node node = handler.newExportDeclaration(kid, TokenPos(begin, pos().end));
+ if (!node)
+ return null();
+
+ if (!processExport(node))
return null();
return node;
}
-template<>
-SyntaxParseHandler::Node
-Parser<SyntaxParseHandler>::exportDeclaration()
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportClassDeclaration(uint32_t begin)
{
- JS_ALWAYS_FALSE(abortIfSyntaxParser());
- return SyntaxParseHandler::NodeFailure;
+ if (!abortIfSyntaxParser())
+ return null();
+
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_CLASS));
+
+ Node kid = classDefinition(YieldIsKeyword, ClassStatement, NameRequired);
+ if (!kid)
+ return null();
+
+ if (!checkExportedNameForClass(kid))
+ return null();
+
+ Node node = handler.newExportDeclaration(kid, TokenPos(begin, pos().end));
+ if (!node)
+ return null();
+
+ if (!processExport(node))
+ return null();
+
+ return node;
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportLexicalDeclaration(uint32_t begin, DeclarationKind kind)
+{
+ if (!abortIfSyntaxParser())
+ return null();
+
+ MOZ_ASSERT(kind == DeclarationKind::Const || kind == DeclarationKind::Let);
+ MOZ_ASSERT_IF(kind == DeclarationKind::Const, tokenStream.isCurrentTokenType(TOK_CONST));
+ MOZ_ASSERT_IF(kind == DeclarationKind::Let, tokenStream.isCurrentTokenType(TOK_LET));
+
+ Node kid = lexicalDeclaration(YieldIsName, kind);
+ if (!kid)
+ return null();
+ if (!checkExportedNamesForDeclaration(kid))
+ return null();
+
+ Node node = handler.newExportDeclaration(kid, TokenPos(begin, pos().end));
+ if (!node)
+ return null();
+
+ if (!processExport(node))
+ return null();
+
+ return node;
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportDefaultFunctionDeclaration(uint32_t begin,
+ FunctionAsyncKind asyncKind
+ /* = SyncFunction */)
+{
+ if (!abortIfSyntaxParser())
+ return null();
+
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_FUNCTION));
+
+ Node kid = functionStmt(pos().begin, YieldIsKeyword, AllowDefaultName, asyncKind);
+ if (!kid)
+ return null();
+
+ Node node = handler.newExportDefaultDeclaration(kid, null(), TokenPos(begin, pos().end));
+ if (!node)
+ return null();
+
+ if (!processExport(node))
+ return null();
+
+ return node;
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportDefaultClassDeclaration(uint32_t begin)
+{
+ if (!abortIfSyntaxParser())
+ return null();
+
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_CLASS));
+
+ Node kid = classDefinition(YieldIsKeyword, ClassStatement, AllowDefaultName);
+ if (!kid)
+ return null();
+
+ Node node = handler.newExportDefaultDeclaration(kid, null(), TokenPos(begin, pos().end));
+ if (!node)
+ return null();
+
+ if (!processExport(node))
+ return null();
+
+ return node;
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportDefaultAssignExpr(uint32_t begin)
+{
+ if (!abortIfSyntaxParser())
+ return null();
+
+ RootedPropertyName name(context, context->names().starDefaultStar);
+ Node nameNode = newName(name);
+ if (!nameNode)
+ return null();
+ if (!noteDeclaredName(name, DeclarationKind::Const, pos()))
+ return null();
+
+ Node kid = assignExpr(InAllowed, YieldIsKeyword, TripledotProhibited);
+ if (!kid)
+ return null();
+ if (!matchOrInsertSemicolonAfterExpression())
+ return null();
+
+ Node node = handler.newExportDefaultDeclaration(kid, nameNode, TokenPos(begin, pos().end));
+ if (!node)
+ return null();
+
+ if (!processExport(node))
+ return null();
+
+ return node;
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportDefault(uint32_t begin)
+{
+ if (!abortIfSyntaxParser())
+ return null();
+
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_DEFAULT));
+
+ TokenKind tt;
+ if (!tokenStream.getToken(&tt, TokenStream::Operand))
+ return null();
+
+ if (!checkExportedName(context->names().default_))
+ return null();
+
+ switch (tt) {
+ case TOK_FUNCTION:
+ return exportDefaultFunctionDeclaration(begin);
+
+ case TOK_ASYNC: {
+ TokenKind nextSameLine = TOK_EOF;
+ if (!tokenStream.peekTokenSameLine(&nextSameLine))
+ return null();
+
+ if (nextSameLine == TOK_FUNCTION) {
+ tokenStream.consumeKnownToken(TOK_FUNCTION);
+ return exportDefaultFunctionDeclaration(begin, AsyncFunction);
+ }
+
+ tokenStream.ungetToken();
+ return exportDefaultAssignExpr(begin);
+ }
+
+ case TOK_CLASS:
+ return exportDefaultClassDeclaration(begin);
+
+ default:
+ tokenStream.ungetToken();
+ return exportDefaultAssignExpr(begin);
+ }
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::exportDeclaration()
+{
+ if (!abortIfSyntaxParser())
+ return null();
+
+ MOZ_ASSERT(tokenStream.currentToken().type == TOK_EXPORT);
+
+ if (!pc->atModuleLevel()) {
+ error(JSMSG_EXPORT_DECL_AT_TOP_LEVEL);
+ return null();
+ }
+
+ uint32_t begin = pos().begin;
+
+ TokenKind tt;
+ if (!tokenStream.getToken(&tt))
+ return null();
+ switch (tt) {
+ case TOK_MUL:
+ return exportBatch(begin);
+
+ case TOK_LC:
+ return exportClause(begin);
+
+ case TOK_VAR:
+ return exportVariableStatement(begin);
+
+ case TOK_FUNCTION:
+ return exportFunctionDeclaration(begin);
+
+ case TOK_CLASS:
+ return exportClassDeclaration(begin);
+
+ case TOK_CONST:
+ return exportLexicalDeclaration(begin, DeclarationKind::Const);
+
+ case TOK_LET:
+ return exportLexicalDeclaration(begin, DeclarationKind::Let);
+
+ case TOK_DEFAULT:
+ return exportDefault(begin);
+
+ default:
+ error(JSMSG_DECLARATION_AFTER_EXPORT);
+ return null();
+ }
}
template <typename ParseHandler>
@@ -5236,7 +5768,7 @@ Parser<ParseHandler>::expressionStatement(YieldHandling yieldHandling, InvokedPr
/* possibleError = */ nullptr, invoked);
if (!pnexpr)
return null();
- if (!MatchOrInsertSemicolonAfterExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterExpression())
return null();
return handler.newExprStatement(pnexpr, pos().end);
}
@@ -5249,14 +5781,71 @@ Parser<ParseHandler>::consequentOrAlternative(YieldHandling yieldHandling)
if (!tokenStream.peekToken(&next, TokenStream::Operand))
return null();
- if (next == TOK_FUNCTION) {
- // Apply Annex B.3.4 in non-strict code to allow FunctionDeclaration as
- // the consequent/alternative of an |if| or |else|. Parser::statement
- // will report the strict mode error.
- if (!pc->sc()->strict()) {
- tokenStream.consumeKnownToken(next, TokenStream::Operand);
- return functionStmt(pos().begin, yieldHandling, NameRequired);
+ // Annex B.3.4 says that unbraced FunctionDeclarations under if/else in
+ // non-strict code act as if they were braced: |if (x) function f() {}|
+ // parses as |if (x) { function f() {} }|.
+ //
+ // Careful! FunctionDeclaration doesn't include generators or async
+ // functions.
+ if (next == TOK_ASYNC) {
+ tokenStream.consumeKnownToken(next, TokenStream::Operand);
+
+ // Peek only on the same line: ExpressionStatement's lookahead
+ // restriction is phrased as
+ //
+ // [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
+ //
+ // meaning that code like this is valid:
+ //
+ // if (true)
+ // async // ASI opportunity
+ // function clownshoes() {}
+ TokenKind maybeFunction;
+ if (!tokenStream.peekTokenSameLine(&maybeFunction))
+ return null();
+
+ if (maybeFunction == TOK_FUNCTION) {
+ error(JSMSG_FORBIDDEN_AS_STATEMENT, "async function declarations");
+ return null();
}
+
+ // Otherwise this |async| begins an ExpressionStatement.
+ tokenStream.ungetToken();
+ } else if (next == TOK_FUNCTION) {
+ tokenStream.consumeKnownToken(next, TokenStream::Operand);
+
+ // Parser::statement would handle this, but as this function handles
+ // every other error case, it seems best to handle this.
+ if (pc->sc()->strict()) {
+ error(JSMSG_FORBIDDEN_AS_STATEMENT, "function declarations");
+ return null();
+ }
+
+ TokenKind maybeStar;
+ if (!tokenStream.peekToken(&maybeStar))
+ return null();
+
+ if (maybeStar == TOK_MUL) {
+ error(JSMSG_FORBIDDEN_AS_STATEMENT, "generator declarations");
+ return null();
+ }
+
+ ParseContext::Statement stmt(pc, StatementKind::Block);
+ ParseContext::Scope scope(this);
+ if (!scope.init(pc))
+ return null();
+
+ TokenPos funcPos = pos();
+ Node fun = functionStmt(pos().begin, yieldHandling, NameRequired);
+ if (!fun)
+ return null();
+
+ Node block = handler.newStatementList(funcPos);
+ if (!block)
+ return null();
+
+ handler.addStatementToList(block, fun);
+ return finishLexicalScope(scope, block);
}
return statement(yieldHandling);
@@ -5371,13 +5960,9 @@ Parser<ParseHandler>::matchInOrOf(bool* isForInp, bool* isForOfp)
return false;
*isForInp = tt == TOK_IN;
- *isForOfp = tt == TOK_NAME && tokenStream.currentToken().name() == context->names().of;
- if (!*isForInp && !*isForOfp) {
+ *isForOfp = tt == TOK_OF;
+ if (!*isForInp && !*isForOfp)
tokenStream.ungetToken();
- } else {
- if (tt == TOK_NAME && !checkUnescapedName())
- return false;
- }
MOZ_ASSERT_IF(*isForInp || *isForOfp, *isForInp != *isForOfp);
return true;
@@ -5427,15 +6012,12 @@ Parser<ParseHandler>::forHeadStart(YieldHandling yieldHandling,
if (tt == TOK_CONST) {
parsingLexicalDeclaration = true;
tokenStream.consumeKnownToken(tt, TokenStream::Operand);
- } else if (tt == TOK_NAME &&
- tokenStream.nextName() == context->names().let &&
- !tokenStream.nextNameContainsEscape())
- {
+ } else if (tt == TOK_LET) {
// We could have a {For,Lexical}Declaration, or we could have a
// LeftHandSideExpression with lookahead restrictions so it's not
// ambiguous with the former. Check for a continuation of the former
// to decide which we have.
- tokenStream.consumeKnownToken(TOK_NAME, TokenStream::Operand);
+ tokenStream.consumeKnownToken(TOK_LET, TokenStream::Operand);
TokenKind next;
if (!tokenStream.peekToken(&next))
@@ -5512,7 +6094,7 @@ Parser<ParseHandler>::forHeadStart(YieldHandling yieldHandling,
// Verify the left-hand side expression doesn't have a forbidden form.
if (handler.isUnparenthesizedDestructuringPattern(*forInitialPart)) {
- if (!checkDestructuringPattern(*forInitialPart, Nothing(), &possibleError))
+ if (!possibleError.checkForDestructuringErrorOrWarning())
return false;
} else if (handler.isNameAnyParentheses(*forInitialPart)) {
const char* chars = handler.nameIsArgumentsEvalAnyParentheses(*forInitialPart, context);
@@ -5556,7 +6138,7 @@ Parser<ParseHandler>::forStatement(YieldHandling yieldHandling)
if (allowsForEachIn()) {
bool matched;
- if (!tokenStream.matchContextualKeyword(&matched, context->names().each))
+ if (!tokenStream.matchToken(&matched, TOK_EACH))
return null();
if (matched) {
iflags = JSITER_FOREACH;
@@ -5867,7 +6449,7 @@ Parser<ParseHandler>::continueStatement(YieldHandling yieldHandling)
return null();
}
- if (!MatchOrInsertSemicolonAfterNonExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterNonExpression())
return null();
return handler.newContinueStatement(label, TokenPos(begin, pos().end));
@@ -5907,7 +6489,7 @@ Parser<ParseHandler>::breakStatement(YieldHandling yieldHandling)
}
}
- if (!MatchOrInsertSemicolonAfterNonExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterNonExpression())
return null();
return handler.newBreakStatement(label, TokenPos(begin, pos().end));
@@ -5947,10 +6529,10 @@ Parser<ParseHandler>::returnStatement(YieldHandling yieldHandling)
}
if (exprNode) {
- if (!MatchOrInsertSemicolonAfterExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterExpression())
return null();
} else {
- if (!MatchOrInsertSemicolonAfterNonExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterNonExpression())
return null();
}
@@ -6070,7 +6652,7 @@ Parser<ParseHandler>::yieldExpression(InHandling inHandling)
if (pc->funHasReturnExpr
#if JS_HAS_EXPR_CLOSURES
- || pc->functionBox()->function()->isExprBody()
+ || pc->functionBox()->isExprBody()
#endif
)
{
@@ -6247,7 +6829,7 @@ Parser<ParseHandler>::throwStatement(YieldHandling yieldHandling)
if (!throwExpr)
return null();
- if (!MatchOrInsertSemicolonAfterExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterExpression())
return null();
return handler.newThrowStatement(throwExpr, TokenPos(begin, pos().end));
@@ -6267,12 +6849,12 @@ Parser<ParseHandler>::tryStatement(YieldHandling yieldHandling)
* kid3 is the finally statement
*
* catch nodes are ternary.
- * kid1 is the lvalue (TOK_NAME, TOK_LB, or TOK_LC)
+ * kid1 is the lvalue (possible identifier, TOK_LB, or TOK_LC)
* kid2 is the catch guard or null if no guard
* kid3 is the catch block
*
* catch lvalue nodes are either:
- * TOK_NAME for a single identifier
+ * a single identifier
* TOK_RB or TOK_RC for a destructuring left-hand side
*
* finally nodes are TOK_LC statement lists.
@@ -6282,6 +6864,8 @@ Parser<ParseHandler>::tryStatement(YieldHandling yieldHandling)
{
MUST_MATCH_TOKEN(TOK_LC, JSMSG_CURLY_BEFORE_TRY);
+ uint32_t openedPos = pos().begin;
+
ParseContext::Statement stmt(pc, StatementKind::Try);
ParseContext::Scope scope(this);
if (!scope.init(pc))
@@ -6295,7 +6879,9 @@ Parser<ParseHandler>::tryStatement(YieldHandling yieldHandling)
if (!innerBlock)
return null();
- MUST_MATCH_TOKEN_MOD(TOK_RC, TokenStream::Operand, JSMSG_CURLY_AFTER_TRY);
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::Operand,
+ reportMissingClosing(JSMSG_CURLY_AFTER_TRY,
+ JSMSG_CURLY_OPENED, openedPos));
}
bool hasUnconditionalCatch = false;
@@ -6347,22 +6933,18 @@ Parser<ParseHandler>::tryStatement(YieldHandling yieldHandling)
return null();
break;
- case TOK_NAME:
- case TOK_YIELD: {
- RootedPropertyName param(context, bindingIdentifier(yieldHandling));
- if (!param)
+ default: {
+ if (!TokenKindIsPossibleIdentifierName(tt)) {
+ error(JSMSG_CATCH_IDENTIFIER);
return null();
- catchName = newName(param);
+ }
+
+ catchName = bindingIdentifier(DeclarationKind::SimpleCatchParameter,
+ yieldHandling);
if (!catchName)
return null();
- if (!noteDeclaredName(param, DeclarationKind::SimpleCatchParameter, pos()))
- return null();
break;
}
-
- default:
- error(JSMSG_CATCH_IDENTIFIER);
- return null();
}
Node catchGuard = null();
@@ -6411,6 +6993,8 @@ Parser<ParseHandler>::tryStatement(YieldHandling yieldHandling)
if (tt == TOK_FINALLY) {
MUST_MATCH_TOKEN(TOK_LC, JSMSG_CURLY_BEFORE_FINALLY);
+ uint32_t openedPos = pos().begin;
+
ParseContext::Statement stmt(pc, StatementKind::Finally);
ParseContext::Scope scope(this);
if (!scope.init(pc))
@@ -6424,7 +7008,9 @@ Parser<ParseHandler>::tryStatement(YieldHandling yieldHandling)
if (!finallyBlock)
return null();
- MUST_MATCH_TOKEN_MOD(TOK_RC, TokenStream::Operand, JSMSG_CURLY_AFTER_FINALLY);
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::Operand,
+ reportMissingClosing(JSMSG_CURLY_AFTER_FINALLY,
+ JSMSG_CURLY_OPENED, openedPos));
} else {
tokenStream.ungetToken();
}
@@ -6441,6 +7027,8 @@ typename ParseHandler::Node
Parser<ParseHandler>::catchBlockStatement(YieldHandling yieldHandling,
ParseContext::Scope& catchParamScope)
{
+ uint32_t openedPos = pos().begin;
+
ParseContext::Statement stmt(pc, StatementKind::Block);
// ES 13.15.7 CatchClauseEvaluation
@@ -6460,7 +7048,9 @@ Parser<ParseHandler>::catchBlockStatement(YieldHandling yieldHandling,
if (!list)
return null();
- MUST_MATCH_TOKEN_MOD(TOK_RC, TokenStream::Operand, JSMSG_CURLY_AFTER_CATCH);
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::Operand,
+ reportMissingClosing(JSMSG_CURLY_AFTER_CATCH,
+ JSMSG_CURLY_OPENED, openedPos));
// The catch parameter names are not bound in the body scope, so remove
// them before generating bindings.
@@ -6474,7 +7064,7 @@ Parser<ParseHandler>::debuggerStatement()
{
TokenPos p;
p.begin = pos().begin;
- if (!MatchOrInsertSemicolonAfterNonExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterNonExpression())
return null();
p.end = pos().end;
@@ -6514,6 +7104,7 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
{
MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_CLASS));
+ uint32_t classStartOffset = pos().begin;
bool savedStrictness = setLocalStrictMode(true);
TokenKind tt;
@@ -6521,7 +7112,7 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
return null();
RootedPropertyName name(context);
- if (tt == TOK_NAME || tt == TOK_YIELD) {
+ if (TokenKindIsPossibleIdentifier(tt)) {
name = bindingIdentifier(yieldHandling);
if (!name)
return null();
@@ -6539,16 +7130,20 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
tokenStream.ungetToken();
}
+ // Push a ParseContext::ClassStatement to keep track of the constructor
+ // funbox.
+ ParseContext::ClassStatement classStmt(pc);
+
RootedAtom propAtom(context);
// A named class creates a new lexical scope with a const binding of the
- // class name.
- Maybe<ParseContext::Statement> classStmt;
- Maybe<ParseContext::Scope> classScope;
+ // class name for the "inner name".
+ Maybe<ParseContext::Statement> innerScopeStmt;
+ Maybe<ParseContext::Scope> innerScope;
if (name) {
- classStmt.emplace(pc, StatementKind::Block);
- classScope.emplace(this);
- if (!classScope->init(pc))
+ innerScopeStmt.emplace(pc, StatementKind::Block);
+ innerScope.emplace(this);
+ if (!innerScope->init(pc))
return null();
}
@@ -6575,10 +7170,10 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
if (!classMethods)
return null();
- bool seenConstructor = false;
+ Maybe<DeclarationKind> declKind = Nothing();
for (;;) {
TokenKind tt;
- if (!tokenStream.getToken(&tt, TokenStream::KeywordIsName))
+ if (!tokenStream.getToken(&tt))
return null();
if (tt == TOK_RC)
break;
@@ -6587,22 +7182,18 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
continue;
bool isStatic = false;
- if (tt == TOK_NAME && tokenStream.currentName() == context->names().static_) {
- if (!tokenStream.peekToken(&tt, TokenStream::KeywordIsName))
+ if (tt == TOK_STATIC) {
+ if (!tokenStream.peekToken(&tt))
return null();
if (tt == TOK_RC) {
- tokenStream.consumeKnownToken(tt, TokenStream::KeywordIsName);
+ tokenStream.consumeKnownToken(tt);
error(JSMSG_UNEXPECTED_TOKEN, "property name", TokenKindToDesc(tt));
return null();
}
if (tt != TOK_LP) {
- if (!checkUnescapedName())
- return null();
-
isStatic = true;
} else {
- tokenStream.addModifierException(TokenStream::NoneIsKeywordIsName);
tokenStream.ungetToken();
}
} else {
@@ -6614,7 +7205,7 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
return null();
PropertyType propType;
- Node propName = propertyName(yieldHandling, classMethods, &propType, &propAtom);
+ Node propName = propertyName(yieldHandling, declKind, classMethods, &propType, &propAtom);
if (!propName)
return null();
@@ -6631,16 +7222,17 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
propType = PropertyType::GetterNoExpressionClosure;
if (propType == PropertyType::Setter)
propType = PropertyType::SetterNoExpressionClosure;
- if (!isStatic && propAtom == context->names().constructor) {
+
+ bool isConstructor = !isStatic && propAtom == context->names().constructor;
+ if (isConstructor) {
if (propType != PropertyType::Method) {
errorAt(nameOffset, JSMSG_BAD_METHOD_DEF);
return null();
}
- if (seenConstructor) {
+ if (classStmt.constructorBox) {
errorAt(nameOffset, JSMSG_DUPLICATE_PROPERTY, "constructor");
return null();
}
- seenConstructor = true;
propType = hasHeritage ? PropertyType::DerivedConstructor : PropertyType::Constructor;
} else if (isStatic && propAtom == context->names().prototype) {
errorAt(nameOffset, JSMSG_BAD_METHOD_DEF);
@@ -6665,7 +7257,12 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
if (!tokenStream.isCurrentTokenType(TOK_RB))
funName = propAtom;
}
- Node fn = methodDefinition(nameOffset, propType, funName);
+
+ // Calling toString on constructors need to return the source text for
+ // the entire class. The end offset is unknown at this point in
+ // parsing and will be amended when class parsing finishes below.
+ Node fn = methodDefinition(isConstructor ? classStartOffset : nameOffset,
+ propType, funName);
if (!fn)
return null();
@@ -6676,6 +7273,15 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
return null();
}
+ // Amend the toStringEnd offset for the constructor now that we've
+ // finished parsing the class.
+ uint32_t classEndOffset = pos().end;
+ if (FunctionBox* ctorbox = classStmt.constructorBox) {
+ if (ctorbox->function()->isInterpretedLazy())
+ ctorbox->function()->lazyScript()->setToStringEnd(classEndOffset);
+ ctorbox->toStringEnd = classEndOffset;
+ }
+
Node nameNode = null();
Node methodsOrBlock = classMethods;
if (name) {
@@ -6687,15 +7293,15 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
if (!innerName)
return null();
- Node classBlock = finishLexicalScope(*classScope, classMethods);
+ Node classBlock = finishLexicalScope(*innerScope, classMethods);
if (!classBlock)
return null();
methodsOrBlock = classBlock;
// Pop the inner scope.
- classScope.reset();
- classStmt.reset();
+ innerScope.reset();
+ innerScopeStmt.reset();
Node outerName = null();
if (classContext == ClassStatement) {
@@ -6715,16 +7321,15 @@ Parser<ParseHandler>::classDefinition(YieldHandling yieldHandling,
MOZ_ALWAYS_TRUE(setLocalStrictMode(savedStrictness));
- return handler.newClass(nameNode, classHeritage, methodsOrBlock);
+ return handler.newClass(nameNode, classHeritage, methodsOrBlock,
+ TokenPos(classStartOffset, classEndOffset));
}
template <class ParseHandler>
bool
Parser<ParseHandler>::nextTokenContinuesLetDeclaration(TokenKind next, YieldHandling yieldHandling)
{
- MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_NAME));
- MOZ_ASSERT(tokenStream.currentName() == context->names().let);
- MOZ_ASSERT(!tokenStream.currentToken().nameContainsEscape());
+ MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_LET));
#ifdef DEBUG
TokenKind verify;
@@ -6736,18 +7341,19 @@ Parser<ParseHandler>::nextTokenContinuesLetDeclaration(TokenKind next, YieldHand
if (next == TOK_LB || next == TOK_LC)
return true;
- // Otherwise a let declaration must have a name.
- if (next == TOK_NAME) {
- if (tokenStream.nextName() == context->names().yield) {
- MOZ_ASSERT(tokenStream.nextNameContainsEscape(),
- "token stream should interpret unescaped 'yield' as TOK_YIELD");
-
- // Same as |next == TOK_YIELD|.
- return yieldHandling == YieldIsName;
- }
+ // If we have the name "yield", the grammar parameter exactly states
+ // whether this is okay. (This wasn't true for SpiderMonkey's ancient
+ // legacy generator syntax, but that's dead now.) If YieldIsName,
+ // declaration-parsing code will (if necessary) enforce a strict mode
+ // restriction on defining "yield". If YieldIsKeyword, consider this the
+ // end of the declaration, in case ASI induces a semicolon that makes the
+ // "yield" valid.
+ if (next == TOK_YIELD)
+ return yieldHandling == YieldIsName;
- // One non-"yield" TOK_NAME edge case deserves special comment.
- // Consider this:
+ // Otherwise a let declaration must have a name.
+ if (TokenKindIsPossibleIdentifier(next)) {
+ // A "let" edge case deserves special comment. Consider this:
//
// let // not an ASI opportunity
// let;
@@ -6760,16 +7366,6 @@ Parser<ParseHandler>::nextTokenContinuesLetDeclaration(TokenKind next, YieldHand
return true;
}
- // If we have the name "yield", the grammar parameter exactly states
- // whether this is okay. (This wasn't true for SpiderMonkey's ancient
- // legacy generator syntax, but that's dead now.) If YieldIsName,
- // declaration-parsing code will (if necessary) enforce a strict mode
- // restriction on defining "yield". If YieldIsKeyword, consider this the
- // end of the declaration, in case ASI induces a semicolon that makes the
- // "yield" valid.
- if (next == TOK_YIELD)
- return yieldHandling == YieldIsName;
-
// Otherwise not a let declaration.
return false;
}
@@ -6781,7 +7377,7 @@ Parser<ParseHandler>::variableStatement(YieldHandling yieldHandling)
Node vars = declarationList(yieldHandling, PNK_VAR);
if (!vars)
return null();
- if (!MatchOrInsertSemicolonAfterExpression(tokenStream))
+ if (!matchOrInsertSemicolonAfterExpression())
return null();
return vars;
}
@@ -6832,16 +7428,21 @@ Parser<ParseHandler>::statement(YieldHandling yieldHandling)
return expressionStatement(yieldHandling);
}
- case TOK_NAME: {
+ default: {
+ // Avoid getting next token with None.
+ if (tt == TOK_AWAIT && pc->isAsync())
+ return expressionStatement(yieldHandling);
+
+ if (!TokenKindIsPossibleIdentifier(tt))
+ return expressionStatement(yieldHandling);
+
TokenKind next;
if (!tokenStream.peekToken(&next))
return null();
// |let| here can only be an Identifier, not a declaration. Give nicer
// errors for declaration-looking typos.
- if (!tokenStream.currentToken().nameContainsEscape() &&
- tokenStream.currentName() == context->names().let)
- {
+ if (tt == TOK_LET) {
bool forbiddenLetDeclaration = false;
if (pc->sc()->strict() || versionNumber() >= JSVERSION_1_7) {
@@ -6851,7 +7452,7 @@ Parser<ParseHandler>::statement(YieldHandling yieldHandling)
} else if (next == TOK_LB) {
// Enforce ExpressionStatement's 'let [' lookahead restriction.
forbiddenLetDeclaration = true;
- } else if (next == TOK_LC || next == TOK_NAME) {
+ } else if (next == TOK_LC || TokenKindIsPossibleIdentifier(next)) {
// 'let {' and 'let foo' aren't completely forbidden, if ASI
// causes 'let' to be the entire Statement. But if they're
// same-line, we can aggressively give a better error message.
@@ -6862,7 +7463,7 @@ Parser<ParseHandler>::statement(YieldHandling yieldHandling)
if (!tokenStream.peekTokenSameLine(&nextSameLine))
return null();
- MOZ_ASSERT(nextSameLine == TOK_NAME ||
+ MOZ_ASSERT(TokenKindIsPossibleIdentifier(nextSameLine) ||
nextSameLine == TOK_LC ||
nextSameLine == TOK_EOL);
@@ -6886,9 +7487,6 @@ Parser<ParseHandler>::statement(YieldHandling yieldHandling)
case TOK_NEW:
return expressionStatement(yieldHandling, PredictInvoked);
- default:
- return expressionStatement(yieldHandling);
-
// IfStatement[?Yield, ?Return]
case TOK_IF:
return ifStatement(yieldHandling);
@@ -6934,7 +7532,7 @@ Parser<ParseHandler>::statement(YieldHandling yieldHandling)
return withStatement(yieldHandling);
// LabelledStatement[?Yield, ?Return]
- // This is really handled by TOK_NAME and TOK_YIELD cases above.
+ // This is really handled by default and TOK_YIELD cases above.
// ThrowStatement[?Yield]
case TOK_THROW:
@@ -7040,26 +7638,29 @@ Parser<ParseHandler>::statementListItem(YieldHandling yieldHandling,
return expressionStatement(yieldHandling);
}
- case TOK_NAME: {
+ default: {
+ // Avoid getting next token with None.
+ if (tt == TOK_AWAIT && pc->isAsync())
+ return expressionStatement(yieldHandling);
+
+ if (!TokenKindIsPossibleIdentifier(tt))
+ return expressionStatement(yieldHandling);
+
TokenKind next;
if (!tokenStream.peekToken(&next))
return null();
- if (!tokenStream.currentToken().nameContainsEscape() &&
- tokenStream.currentName() == context->names().let &&
- nextTokenContinuesLetDeclaration(next, yieldHandling))
- {
- return lexicalDeclaration(yieldHandling, /* isConst = */ false);
- }
+ if (tt == TOK_LET && nextTokenContinuesLetDeclaration(next, yieldHandling))
+ return lexicalDeclaration(yieldHandling, DeclarationKind::Let);
- if (tokenStream.currentName() == context->names().async) {
+ if (tt == TOK_ASYNC) {
TokenKind nextSameLine = TOK_EOF;
if (!tokenStream.peekTokenSameLine(&nextSameLine))
return null();
if (nextSameLine == TOK_FUNCTION) {
- uint32_t preludeStart = pos().begin;
+ uint32_t toStringStart = pos().begin;
tokenStream.consumeKnownToken(TOK_FUNCTION);
- return functionStmt(preludeStart, yieldHandling, NameRequired, AsyncFunction);
+ return functionStmt(toStringStart, yieldHandling, NameRequired, AsyncFunction);
}
}
@@ -7072,9 +7673,6 @@ Parser<ParseHandler>::statementListItem(YieldHandling yieldHandling,
case TOK_NEW:
return expressionStatement(yieldHandling, PredictInvoked);
- default:
- return expressionStatement(yieldHandling);
-
// IfStatement[?Yield, ?Return]
case TOK_IF:
return ifStatement(yieldHandling);
@@ -7120,7 +7718,7 @@ Parser<ParseHandler>::statementListItem(YieldHandling yieldHandling,
return withStatement(yieldHandling);
// LabelledStatement[?Yield, ?Return]
- // This is really handled by TOK_NAME and TOK_YIELD cases above.
+ // This is really handled by default and TOK_YIELD cases above.
// ThrowStatement[?Yield]
case TOK_THROW:
@@ -7149,7 +7747,7 @@ Parser<ParseHandler>::statementListItem(YieldHandling yieldHandling,
case TOK_CONST:
// [In] is the default behavior, because for-loops specially parse
// their heads to handle |in| in this situation.
- return lexicalDeclaration(yieldHandling, /* isConst = */ true);
+ return lexicalDeclaration(yieldHandling, DeclarationKind::Const);
// ImportDeclaration (only inside modules)
case TOK_IMPORT:
@@ -7438,26 +8036,6 @@ Parser<ParseHandler>::condExpr1(InHandling inHandling, YieldHandling yieldHandli
return handler.newConditional(condition, thenExpr, elseExpr);
}
-class AutoClearInDestructuringDecl
-{
- ParseContext* pc_;
- Maybe<DeclarationKind> saved_;
-
- public:
- explicit AutoClearInDestructuringDecl(ParseContext* pc)
- : pc_(pc),
- saved_(pc->inDestructuringDecl)
- {
- pc->inDestructuringDecl = Nothing();
- if (saved_ && *saved_ == DeclarationKind::FormalParameter)
- pc->functionBox()->hasParameterExprs = true;
- }
-
- ~AutoClearInDestructuringDecl() {
- pc_->inDestructuringDecl = saved_;
- }
-};
-
template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::assignExpr(InHandling inHandling, YieldHandling yieldHandling,
@@ -7482,10 +8060,13 @@ Parser<ParseHandler>::assignExpr(InHandling inHandling, YieldHandling yieldHandl
if (!tokenStream.getToken(&tt, TokenStream::Operand))
return null();
- uint32_t exprOffset = pos().begin;
+ TokenPos exprPos = pos();
bool endsExpr;
+ // This only handles identifiers that *never* have special meaning anywhere
+ // in the language. Contextual keywords, reserved words in strict mode,
+ // and other hard cases are handled outside this fast path.
if (tt == TOK_NAME) {
if (!tokenStream.nextTokenEndsExpr(&endsExpr))
return null();
@@ -7516,12 +8097,12 @@ Parser<ParseHandler>::assignExpr(InHandling inHandling, YieldHandling yieldHandl
return yieldExpression(inHandling);
bool maybeAsyncArrow = false;
- if (tt == TOK_NAME && tokenStream.currentName() == context->names().async) {
+ if (tt == TOK_ASYNC) {
TokenKind nextSameLine = TOK_EOF;
if (!tokenStream.peekTokenSameLine(&nextSameLine))
return null();
- if (nextSameLine == TOK_NAME || nextSameLine == TOK_YIELD)
+ if (TokenKindIsPossibleIdentifier(nextSameLine))
maybeAsyncArrow = true;
}
@@ -7535,13 +8116,12 @@ Parser<ParseHandler>::assignExpr(InHandling inHandling, YieldHandling yieldHandl
PossibleError possibleErrorInner(*this);
Node lhs;
if (maybeAsyncArrow) {
- tokenStream.consumeKnownToken(TOK_NAME, TokenStream::Operand);
- MOZ_ASSERT(tokenStream.currentName() == context->names().async);
+ tokenStream.consumeKnownToken(TOK_ASYNC, TokenStream::Operand);
TokenKind tt;
if (!tokenStream.getToken(&tt))
return null();
- MOZ_ASSERT(tt == TOK_NAME || tt == TOK_YIELD);
+ MOZ_ASSERT(TokenKindIsPossibleIdentifier(tt));
// Check yield validity here.
RootedPropertyName name(context, bindingIdentifier(yieldHandling));
@@ -7604,28 +8184,24 @@ Parser<ParseHandler>::assignExpr(InHandling inHandling, YieldHandling yieldHandl
if (!tokenStream.getToken(&next, TokenStream::Operand))
return null();
- uint32_t preludeStart = pos().begin;
+ uint32_t toStringStart = pos().begin;
tokenStream.ungetToken();
GeneratorKind generatorKind = NotGenerator;
FunctionAsyncKind asyncKind = SyncFunction;
- if (next == TOK_NAME) {
+ if (next == TOK_ASYNC) {
tokenStream.consumeKnownToken(next, TokenStream::Operand);
- if (tokenStream.currentName() == context->names().async) {
- TokenKind nextSameLine = TOK_EOF;
- if (!tokenStream.peekTokenSameLine(&nextSameLine))
- return null();
+ TokenKind nextSameLine = TOK_EOF;
+ if (!tokenStream.peekTokenSameLine(&nextSameLine))
+ return null();
- if (nextSameLine == TOK_ARROW) {
- tokenStream.ungetToken();
- } else {
- generatorKind = StarGenerator;
- asyncKind = AsyncFunction;
- }
- } else {
+ if (nextSameLine == TOK_ARROW) {
tokenStream.ungetToken();
+ } else {
+ generatorKind = StarGenerator;
+ asyncKind = AsyncFunction;
}
}
@@ -7633,7 +8209,7 @@ Parser<ParseHandler>::assignExpr(InHandling inHandling, YieldHandling yieldHandl
if (!pn)
return null();
- Node arrowFunc = functionDefinition(preludeStart, pn, inHandling, yieldHandling, nullptr,
+ Node arrowFunc = functionDefinition(toStringStart, pn, inHandling, yieldHandling, nullptr,
Arrow, generatorKind, asyncKind);
if (!arrowFunc)
return null();
@@ -7690,12 +8266,12 @@ Parser<ParseHandler>::assignExpr(InHandling inHandling, YieldHandling yieldHandl
return null();
}
- if (!checkDestructuringPattern(lhs, Nothing(), &possibleErrorInner))
+ if (!possibleErrorInner.checkForDestructuringErrorOrWarning())
return null();
} else if (handler.isNameAnyParentheses(lhs)) {
if (const char* chars = handler.nameIsArgumentsEvalAnyParentheses(lhs, context)) {
// |chars| is "arguments" or "eval" here.
- if (!strictModeErrorAt(exprOffset, JSMSG_BAD_STRICT_ASSIGN, chars))
+ if (!strictModeErrorAt(exprPos.begin, JSMSG_BAD_STRICT_ASSIGN, chars))
return null();
}
@@ -7703,23 +8279,22 @@ Parser<ParseHandler>::assignExpr(InHandling inHandling, YieldHandling yieldHandl
} else if (handler.isPropertyAccess(lhs)) {
// Permitted: no additional testing/fixup needed.
} else if (handler.isFunctionCall(lhs)) {
- if (!strictModeErrorAt(exprOffset, JSMSG_BAD_LEFTSIDE_OF_ASS))
+ if (!strictModeErrorAt(exprPos.begin, JSMSG_BAD_LEFTSIDE_OF_ASS))
return null();
+
+ if (possibleError)
+ possibleError->setPendingDestructuringErrorAt(exprPos, JSMSG_BAD_DESTRUCT_TARGET);
} else {
- errorAt(exprOffset, JSMSG_BAD_LEFTSIDE_OF_ASS);
+ errorAt(exprPos.begin, JSMSG_BAD_LEFTSIDE_OF_ASS);
return null();
}
if (!possibleErrorInner.checkForExpressionError())
return null();
- Node rhs;
- {
- AutoClearInDestructuringDecl autoClear(pc);
- rhs = assignExpr(inHandling, yieldHandling, TripledotProhibited);
- if (!rhs)
- return null();
- }
+ Node rhs = assignExpr(inHandling, yieldHandling, TripledotProhibited);
+ if (!rhs)
+ return null();
if (kind == PNK_ASSIGN)
handler.checkAndSetIsDirectRHSAnonFunction(rhs);
@@ -7874,20 +8449,17 @@ Parser<ParseHandler>::unaryExpr(YieldHandling yieldHandling, TripledotHandling t
}
case TOK_AWAIT: {
- if (!pc->isAsync()) {
- // TOK_AWAIT can be returned in module, even if it's not inside
- // async function.
- error(JSMSG_RESERVED_ID, "await");
- return null();
+ if (pc->isAsync()) {
+ Node kid = unaryExpr(yieldHandling, tripledotHandling, possibleError, invoked);
+ if (!kid)
+ return null();
+ pc->lastAwaitOffset = begin;
+ return newAwaitExpression(begin, kid);
}
-
- Node kid = unaryExpr(yieldHandling, tripledotHandling, possibleError, invoked);
- if (!kid)
- return null();
- pc->lastAwaitOffset = begin;
- return newAwaitExpression(begin, kid);
}
+ MOZ_FALLTHROUGH;
+
default: {
Node expr = memberExpr(yieldHandling, tripledotHandling, tt, /* allowCallSyntax = */ true,
possibleError, invoked);
@@ -7949,7 +8521,7 @@ Parser<ParseHandler>::generatorComprehensionLambda(unsigned begin)
// Create box for fun->object early to root it.
Directives directives(/* strict = */ outerpc->sc()->strict());
- FunctionBox* genFunbox = newFunctionBox(genfn, fun, /* preludeStart = */ 0, directives,
+ FunctionBox* genFunbox = newFunctionBox(genfn, fun, /* toStringStart = */ 0, directives,
StarGenerator, SyncFunction, /* tryAnnexB = */ false);
if (!genFunbox)
return null();
@@ -7985,7 +8557,7 @@ Parser<ParseHandler>::generatorComprehensionLambda(unsigned begin)
uint32_t end = pos().end;
handler.setBeginPosition(comp, begin);
handler.setEndPosition(comp, end);
- genFunbox->bufEnd = end;
+ genFunbox->setEnd(end);
handler.addStatementToList(body, comp);
handler.setEndPosition(body, end);
handler.setBeginPosition(genfn, begin);
@@ -8025,8 +8597,10 @@ Parser<ParseHandler>::comprehensionFor(GeneratorKind comprehensionKind)
// FIXME: Destructuring binding (bug 980828).
- MUST_MATCH_TOKEN(TOK_NAME, JSMSG_NO_VARIABLE_NAME);
- RootedPropertyName name(context, tokenStream.currentName());
+ MUST_MATCH_TOKEN_FUNC(TokenKindIsPossibleIdentifier, JSMSG_NO_VARIABLE_NAME);
+ RootedPropertyName name(context, bindingIdentifier(YieldIsKeyword));
+ if (!name)
+ return null();
if (name == context->names().let) {
error(JSMSG_LET_COMP_BINDING);
return null();
@@ -8036,7 +8610,7 @@ Parser<ParseHandler>::comprehensionFor(GeneratorKind comprehensionKind)
if (!lhs)
return null();
bool matched;
- if (!tokenStream.matchContextualKeyword(&matched, context->names().of))
+ if (!tokenStream.matchToken(&matched, TOK_OF))
return null();
if (!matched) {
error(JSMSG_OF_AFTER_FOR_NAME);
@@ -8371,9 +8945,9 @@ Parser<ParseHandler>::memberExpr(YieldHandling yieldHandling, TripledotHandling
Node nextMember;
if (tt == TOK_DOT) {
- if (!tokenStream.getToken(&tt, TokenStream::KeywordIsName))
+ if (!tokenStream.getToken(&tt))
return null();
- if (tt == TOK_NAME) {
+ if (TokenKindIsPossibleIdentifierName(tt)) {
PropertyName* field = tokenStream.currentName();
if (handler.isSuperBase(lhs) && !checkAndMarkSuperScope()) {
error(JSMSG_BAD_SUPERPROP, "property");
@@ -8448,8 +9022,27 @@ Parser<ParseHandler>::memberExpr(YieldHandling yieldHandling, TripledotHandling
JSOp op = JSOP_CALL;
bool maybeAsyncArrow = false;
- if (tt == TOK_LP && handler.isNameAnyParentheses(lhs)) {
- if (handler.nameIsEvalAnyParentheses(lhs, context)) {
+ if (PropertyName* prop = handler.maybeDottedProperty(lhs)) {
+ // Use the JSOP_FUN{APPLY,CALL} optimizations given the
+ // right syntax.
+ if (prop == context->names().apply) {
+ op = JSOP_FUNAPPLY;
+ if (pc->isFunctionBox()) {
+ pc->functionBox()->usesApply = true;
+ }
+ } else if (prop == context->names().call) {
+ op = JSOP_FUNCALL;
+ }
+ } else if (tt == TOK_LP) {
+ if (handler.isAsyncKeyword(lhs, context)) {
+ // |async (| can be the start of an async arrow
+ // function, so we need to defer reporting possible
+ // errors from destructuring syntax. To give better
+ // error messages, we only allow the AsyncArrowHead
+ // part of the CoverCallExpressionAndAsyncArrowHead
+ // syntax when the initial name is "async".
+ maybeAsyncArrow = true;
+ } else if (handler.isEvalAnyParentheses(lhs, context)) {
// Select the right EVAL op and flag pc as having a
// direct eval.
op = pc->sc()->strict() ? JSOP_STRICTEVAL : JSOP_EVAL;
@@ -8466,24 +9059,6 @@ Parser<ParseHandler>::memberExpr(YieldHandling yieldHandling, TripledotHandling
// it. (If we're not in a method, that's fine, so
// ignore the return value.)
checkAndMarkSuperScope();
- } else if (handler.nameIsUnparenthesizedAsync(lhs, context)) {
- // |async (| can be the start of an async arrow
- // function, so we need to defer reporting possible
- // errors from destructuring syntax. To give better
- // error messages, we only allow the AsyncArrowHead
- // part of the CoverCallExpressionAndAsyncArrowHead
- // syntax when the initial name is "async".
- maybeAsyncArrow = true;
- }
- } else if (PropertyName* prop = handler.maybeDottedProperty(lhs)) {
- // Use the JSOP_FUN{APPLY,CALL} optimizations given the
- // right syntax.
- if (prop == context->names().apply) {
- op = JSOP_FUNAPPLY;
- if (pc->isFunctionBox())
- pc->functionBox()->usesApply = true;
- } else if (prop == context->names().call) {
- op = JSOP_FUNCALL;
}
}
@@ -8542,106 +9117,117 @@ Parser<ParseHandler>::newName(PropertyName* name, TokenPos pos)
}
template <typename ParseHandler>
-PropertyName*
-Parser<ParseHandler>::labelOrIdentifierReference(YieldHandling yieldHandling,
- bool yieldTokenizedAsName)
-{
- PropertyName* ident;
- bool isYield;
- const Token& tok = tokenStream.currentToken();
- if (tok.type == TOK_NAME) {
- MOZ_ASSERT(tok.name() != context->names().yield ||
- tok.nameContainsEscape() ||
- yieldTokenizedAsName,
- "tokenizer should have treated unescaped 'yield' as TOK_YIELD");
- MOZ_ASSERT_IF(yieldTokenizedAsName, tok.name() == context->names().yield);
-
- ident = tok.name();
- isYield = ident == context->names().yield;
- } else {
- MOZ_ASSERT(tok.type == TOK_YIELD && !yieldTokenizedAsName);
+bool
+Parser<ParseHandler>::checkLabelOrIdentifierReference(HandlePropertyName ident,
+ uint32_t offset,
+ YieldHandling yieldHandling)
+{
+ if (ident == context->names().yield) {
+ if (yieldHandling == YieldIsKeyword ||
+ versionNumber() >= JSVERSION_1_7)
+ {
+ errorAt(offset, JSMSG_RESERVED_ID, "yield");
+ return false;
+ }
+ if (pc->sc()->needStrictChecks()) {
+ if (!strictModeErrorAt(offset, JSMSG_RESERVED_ID, "yield"))
+ return false;
+ }
- ident = context->names().yield;
- isYield = true;
+ return true;
}
- if (!isYield) {
- if (pc->sc()->strict()) {
- const char* badName = ident == context->names().let
- ? "let"
- : ident == context->names().static_
- ? "static"
- : nullptr;
- if (badName) {
- error(JSMSG_RESERVED_ID, badName);
- return nullptr;
- }
+ if (ident == context->names().await) {
+ if (awaitIsKeyword()) {
+ errorAt(offset, JSMSG_RESERVED_ID, "await");
+ return false;
}
- } else {
- if (yieldHandling == YieldIsKeyword ||
- pc->sc()->strict() ||
- versionNumber() >= JSVERSION_1_7)
- {
- error(JSMSG_RESERVED_ID, "yield");
- return nullptr;
+ return true;
+ }
+
+ if (IsKeyword(ident) || IsReservedWordLiteral(ident)) {
+ errorAt(offset, JSMSG_INVALID_ID, ReservedWordToCharZ(ident));
+ return false;
+ }
+
+ if (IsFutureReservedWord(ident)) {
+ errorAt(offset, JSMSG_RESERVED_ID, ReservedWordToCharZ(ident));
+ return false;
+ }
+
+ if (pc->sc()->needStrictChecks()) {
+ if (IsStrictReservedWord(ident)) {
+ if (!strictModeErrorAt(offset, JSMSG_RESERVED_ID, ReservedWordToCharZ(ident)))
+ return false;
+ return true;
+ }
+
+ if (ident == context->names().let) {
+ if (!strictModeErrorAt(offset, JSMSG_RESERVED_ID, "let"))
+ return false;
+ return true;
+ }
+
+ if (ident == context->names().static_) {
+ if (!strictModeErrorAt(offset, JSMSG_RESERVED_ID, "static"))
+ return false;
+ return true;
}
}
- return ident;
+ return true;
}
template <typename ParseHandler>
-PropertyName*
-Parser<ParseHandler>::bindingIdentifier(YieldHandling yieldHandling)
+bool
+Parser<ParseHandler>::checkBindingIdentifier(HandlePropertyName ident,
+ uint32_t offset,
+ YieldHandling yieldHandling)
{
- PropertyName* ident;
- bool isYield;
- const Token& tok = tokenStream.currentToken();
- if (tok.type == TOK_NAME) {
- MOZ_ASSERT(tok.name() != context->names().yield || tok.nameContainsEscape(),
- "tokenizer should have treated unescaped 'yield' as TOK_YIELD");
+ if (!checkLabelOrIdentifierReference(ident, offset, yieldHandling))
+ return false;
- ident = tok.name();
- isYield = ident == context->names().yield;
- } else {
- MOZ_ASSERT(tok.type == TOK_YIELD);
+ if (pc->sc()->needStrictChecks()) {
+ if (ident == context->names().arguments) {
+ if (!strictModeErrorAt(offset, JSMSG_BAD_STRICT_ASSIGN, "arguments"))
+ return false;
+ return true;
+ }
- ident = context->names().yield;
- isYield = true;
+ if (ident == context->names().eval) {
+ if (!strictModeErrorAt(offset, JSMSG_BAD_STRICT_ASSIGN, "eval"))
+ return false;
+ return true;
+ }
}
- if (!isYield) {
- if (pc->sc()->strict()) {
- const char* badName = ident == context->names().arguments
- ? "arguments"
- : ident == context->names().eval
- ? "eval"
- : nullptr;
- if (badName) {
- error(JSMSG_BAD_STRICT_ASSIGN, badName);
- return nullptr;
- }
+ return true;
+}
- badName = ident == context->names().let
- ? "let"
- : ident == context->names().static_
- ? "static"
- : nullptr;
- if (badName) {
- error(JSMSG_RESERVED_ID, badName);
- return nullptr;
- }
- }
- } else {
- if (yieldHandling == YieldIsKeyword ||
- pc->sc()->strict() ||
- versionNumber() >= JSVERSION_1_7)
- {
- error(JSMSG_RESERVED_ID, "yield");
- return nullptr;
- }
- }
+template <typename ParseHandler>
+PropertyName*
+Parser<ParseHandler>::labelOrIdentifierReference(YieldHandling yieldHandling)
+{
+ // ES 2017 draft 12.1.1.
+ // StringValue of IdentifierName normalizes any Unicode escape sequences
+ // in IdentifierName hence such escapes cannot be used to write an
+ // Identifier whose code point sequence is the same as a ReservedWord.
+ //
+ // Use PropertyName* instead of TokenKind to reflect the normalization.
+ RootedPropertyName ident(context, tokenStream.currentName());
+ if (!checkLabelOrIdentifierReference(ident, pos().begin, yieldHandling))
+ return nullptr;
+ return ident;
+}
+
+template <typename ParseHandler>
+PropertyName*
+Parser<ParseHandler>::bindingIdentifier(YieldHandling yieldHandling)
+{
+ RootedPropertyName ident(context, tokenStream.currentName());
+ if (!checkBindingIdentifier(ident, pos().begin, yieldHandling))
+ return nullptr;
return ident;
}
@@ -8653,7 +9239,7 @@ Parser<ParseHandler>::identifierReference(Handle<PropertyName*> name)
if (!pn)
return null();
- if (!pc->inDestructuringDecl && !noteUsedName(name))
+ if (!noteUsedName(name))
return null();
return pn;
@@ -8668,8 +9254,23 @@ Parser<ParseHandler>::stringLiteral()
template <typename ParseHandler>
typename ParseHandler::Node
-Parser<ParseHandler>::noSubstitutionTemplate()
+Parser<ParseHandler>::noSubstitutionTaggedTemplate()
+{
+ if (tokenStream.hasInvalidTemplateEscape()) {
+ tokenStream.clearInvalidTemplateEscape();
+ return handler.newRawUndefinedLiteral(pos());
+ }
+
+ return handler.newTemplateStringLiteral(stopStringCompression(), pos());
+}
+
+template <typename ParseHandler>
+typename ParseHandler::Node
+Parser<ParseHandler>::noSubstitutionUntaggedTemplate()
{
+ if (!tokenStream.checkForInvalidTemplateEscapeError())
+ return null();
+
return handler.newTemplateStringLiteral(stopStringCompression(), pos());
}
@@ -8705,6 +9306,74 @@ Parser<ParseHandler>::newRegExp()
}
template <typename ParseHandler>
+void
+Parser<ParseHandler>::checkDestructuringAssignmentTarget(Node expr, TokenPos exprPos,
+ PossibleError* possibleError)
+{
+ // Return early if a pending destructuring error is already present.
+ if (possibleError->hasPendingDestructuringError())
+ return;
+
+ if (pc->sc()->needStrictChecks()) {
+ if (handler.isArgumentsAnyParentheses(expr, context)) {
+ if (pc->sc()->strict()) {
+ possibleError->setPendingDestructuringErrorAt(exprPos,
+ JSMSG_BAD_STRICT_ASSIGN_ARGUMENTS);
+ } else {
+ possibleError->setPendingDestructuringWarningAt(exprPos,
+ JSMSG_BAD_STRICT_ASSIGN_ARGUMENTS);
+ }
+ return;
+ }
+
+ if (handler.isEvalAnyParentheses(expr, context)) {
+ if (pc->sc()->strict()) {
+ possibleError->setPendingDestructuringErrorAt(exprPos,
+ JSMSG_BAD_STRICT_ASSIGN_EVAL);
+ } else {
+ possibleError->setPendingDestructuringWarningAt(exprPos,
+ JSMSG_BAD_STRICT_ASSIGN_EVAL);
+ }
+ return;
+ }
+ }
+
+ // The expression must be either a simple assignment target, i.e. a name
+ // or a property accessor, or a nested destructuring pattern.
+ if (!handler.isUnparenthesizedDestructuringPattern(expr) &&
+ !handler.isNameAnyParentheses(expr) &&
+ !handler.isPropertyAccess(expr))
+ {
+ // Parentheses are forbidden around destructuring *patterns* (but
+ // allowed around names). Use our nicer error message for
+ // parenthesized, nested patterns.
+ if (handler.isParenthesizedDestructuringPattern(expr))
+ possibleError->setPendingDestructuringErrorAt(exprPos, JSMSG_BAD_DESTRUCT_PARENS);
+ else
+ possibleError->setPendingDestructuringErrorAt(exprPos, JSMSG_BAD_DESTRUCT_TARGET);
+ }
+}
+
+template <typename ParseHandler>
+void
+Parser<ParseHandler>::checkDestructuringAssignmentElement(Node expr, TokenPos exprPos,
+ PossibleError* possibleError)
+{
+ // ES2018 draft rev 0719f44aab93215ed9a626b2f45bd34f36916834
+ // 12.15.5 Destructuring Assignment
+ //
+ // AssignmentElement[Yield, Await]:
+ // DestructuringAssignmentTarget[?Yield, ?Await]
+ // DestructuringAssignmentTarget[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]
+
+ // If |expr| is an assignment element with an initializer expression, its
+ // destructuring assignment target was already validated in assignExpr().
+ // Otherwise we need to check that |expr| is a valid destructuring target.
+ if (!handler.isUnparenthesizedAssignment(expr))
+ checkDestructuringAssignmentTarget(expr, exprPos, possibleError);
+}
+
+template <typename ParseHandler>
typename ParseHandler::Node
Parser<ParseHandler>::arrayInitializer(YieldHandling yieldHandling, PossibleError* possibleError)
{
@@ -8753,17 +9422,29 @@ Parser<ParseHandler>::arrayInitializer(YieldHandling yieldHandling, PossibleErro
} else if (tt == TOK_TRIPLEDOT) {
tokenStream.consumeKnownToken(TOK_TRIPLEDOT, TokenStream::Operand);
uint32_t begin = pos().begin;
+
+ TokenPos innerPos;
+ if (!tokenStream.peekTokenPos(&innerPos, TokenStream::Operand))
+ return null();
+
Node inner = assignExpr(InAllowed, yieldHandling, TripledotProhibited,
possibleError);
if (!inner)
return null();
+ if (possibleError)
+ checkDestructuringAssignmentTarget(inner, innerPos, possibleError);
if (!handler.addSpreadElement(literal, begin, inner))
return null();
} else {
+ TokenPos elementPos;
+ if (!tokenStream.peekTokenPos(&elementPos, TokenStream::Operand))
+ return null();
Node element = assignExpr(InAllowed, yieldHandling, TripledotProhibited,
possibleError);
if (!element)
return null();
+ if (possibleError)
+ checkDestructuringAssignmentElement(element, elementPos, possibleError);
if (foldConstants && !FoldConstants(context, &element, this))
return null();
handler.addArrayElement(literal, element);
@@ -8783,7 +9464,9 @@ Parser<ParseHandler>::arrayInitializer(YieldHandling yieldHandling, PossibleErro
}
}
- MUST_MATCH_TOKEN_MOD(TOK_RB, modifier, JSMSG_BRACKET_AFTER_LIST);
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RB, modifier,
+ reportMissingClosing(JSMSG_BRACKET_AFTER_LIST,
+ JSMSG_BRACKET_OPENED, begin));
}
handler.setEndPosition(literal, pos().end);
return literal;
@@ -8799,11 +9482,12 @@ DoubleToAtom(ExclusiveContext* cx, double value)
template <typename ParseHandler>
typename ParseHandler::Node
-Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
+Parser<ParseHandler>::propertyName(YieldHandling yieldHandling,
+ const Maybe<DeclarationKind>& maybeDecl, Node propList,
PropertyType* propType, MutableHandleAtom propAtom)
{
TokenKind ltok;
- if (!tokenStream.getToken(&ltok, TokenStream::KeywordIsName))
+ if (!tokenStream.getToken(&ltok))
return null();
MOZ_ASSERT(ltok != TOK_RC, "caller should have handled TOK_RC");
@@ -8812,11 +9496,11 @@ Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
bool isAsync = false;
if (ltok == TOK_MUL) {
isGenerator = true;
- if (!tokenStream.getToken(&ltok, TokenStream::KeywordIsName))
+ if (!tokenStream.getToken(&ltok))
return null();
}
- if (ltok == TOK_NAME && tokenStream.currentName() == context->names().async) {
+ if (ltok == TOK_ASYNC) {
// AsyncMethod[Yield, Await]:
// async [no LineTerminator here] PropertyName[?Yield, ?Await] ...
//
@@ -8832,16 +9516,13 @@ Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
// ComputedPropertyName[Yield, Await]:
// [ ...
TokenKind tt = TOK_EOF;
- if (!tokenStream.peekTokenSameLine(&tt, TokenStream::KeywordIsName))
+ if (!tokenStream.getToken(&tt))
return null();
- if (tt == TOK_STRING || tt == TOK_NUMBER || tt == TOK_LB ||
- tt == TOK_NAME || tt == TOK_YIELD)
- {
+ if (tt != TOK_LP && tt != TOK_COLON && tt != TOK_RC && tt != TOK_ASSIGN) {
isAsync = true;
- tokenStream.consumeKnownToken(tt, TokenStream::KeywordIsName);
ltok = tt;
} else {
- tokenStream.addModifierException(TokenStream::NoneIsKeywordIsName);
+ tokenStream.ungetToken();
}
}
@@ -8863,46 +9544,41 @@ Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
break;
case TOK_LB:
- propName = computedPropertyName(yieldHandling, propList);
+ propName = computedPropertyName(yieldHandling, maybeDecl, propList);
if (!propName)
return null();
break;
- case TOK_NAME: {
+ default: {
+ if (!TokenKindIsPossibleIdentifierName(ltok)) {
+ error(JSMSG_UNEXPECTED_TOKEN, "property name", TokenKindToDesc(ltok));
+ return null();
+ }
+
propAtom.set(tokenStream.currentName());
// Do not look for accessor syntax on generators
- if (isGenerator || isAsync ||
- !(propAtom.get() == context->names().get ||
- propAtom.get() == context->names().set))
- {
+ if (isGenerator || isAsync || !(ltok == TOK_GET || ltok == TOK_SET)) {
propName = handler.newObjectLiteralPropertyName(propAtom, pos());
if (!propName)
return null();
break;
}
- *propType = propAtom.get() == context->names().get ? PropertyType::Getter
- : PropertyType::Setter;
+ *propType = ltok == TOK_GET ? PropertyType::Getter : PropertyType::Setter;
// We have parsed |get| or |set|. Look for an accessor property
// name next.
TokenKind tt;
- if (!tokenStream.peekToken(&tt, TokenStream::KeywordIsName))
+ if (!tokenStream.peekToken(&tt))
return null();
- if (tt == TOK_NAME) {
- if (!checkUnescapedName())
- return null();
-
- tokenStream.consumeKnownToken(TOK_NAME, TokenStream::KeywordIsName);
+ if (TokenKindIsPossibleIdentifierName(tt)) {
+ tokenStream.consumeKnownToken(tt);
propAtom.set(tokenStream.currentName());
return handler.newObjectLiteralPropertyName(propAtom, pos());
}
if (tt == TOK_STRING) {
- if (!checkUnescapedName())
- return null();
-
- tokenStream.consumeKnownToken(TOK_STRING, TokenStream::KeywordIsName);
+ tokenStream.consumeKnownToken(TOK_STRING);
propAtom.set(tokenStream.currentToken().atom());
@@ -8916,10 +9592,7 @@ Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
return stringLiteral();
}
if (tt == TOK_NUMBER) {
- if (!checkUnescapedName())
- return null();
-
- tokenStream.consumeKnownToken(TOK_NUMBER, TokenStream::KeywordIsName);
+ tokenStream.consumeKnownToken(TOK_NUMBER);
propAtom.set(DoubleToAtom(context, tokenStream.currentToken().number()));
if (!propAtom.get())
@@ -8927,19 +9600,15 @@ Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
return newNumber(tokenStream.currentToken());
}
if (tt == TOK_LB) {
- if (!checkUnescapedName())
- return null();
+ tokenStream.consumeKnownToken(TOK_LB);
- tokenStream.consumeKnownToken(TOK_LB, TokenStream::KeywordIsName);
-
- return computedPropertyName(yieldHandling, propList);
+ return computedPropertyName(yieldHandling, maybeDecl, propList);
}
// Not an accessor property after all.
propName = handler.newObjectLiteralPropertyName(propAtom.get(), pos());
if (!propName)
return null();
- tokenStream.addModifierException(TokenStream::NoneIsKeywordIsName);
break;
}
@@ -8957,10 +9626,6 @@ Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
return null();
break;
}
-
- default:
- error(JSMSG_BAD_PROP_ID);
- return null();
}
TokenKind tt;
@@ -8976,7 +9641,9 @@ Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
return propName;
}
- if (ltok == TOK_NAME && (tt == TOK_COMMA || tt == TOK_RC || tt == TOK_ASSIGN)) {
+ if (TokenKindIsPossibleIdentifierName(ltok) &&
+ (tt == TOK_COMMA || tt == TOK_RC || tt == TOK_ASSIGN))
+ {
if (isGenerator) {
error(JSMSG_BAD_PROP_ID);
return null();
@@ -9005,28 +9672,25 @@ Parser<ParseHandler>::propertyName(YieldHandling yieldHandling, Node propList,
template <typename ParseHandler>
typename ParseHandler::Node
-Parser<ParseHandler>::computedPropertyName(YieldHandling yieldHandling, Node literal)
+Parser<ParseHandler>::computedPropertyName(YieldHandling yieldHandling,
+ const Maybe<DeclarationKind>& maybeDecl,
+ Node literal)
{
uint32_t begin = pos().begin;
- Node assignNode;
- {
- // Turn off the inDestructuringDecl flag when parsing computed property
- // names. In short, when parsing 'let {[x + y]: z} = obj;', noteUsedName()
- // should be called on x and y, but not on z. See the comment on
- // Parser<>::checkDestructuringPattern() for details.
- AutoClearInDestructuringDecl autoClear(pc);
- assignNode = assignExpr(InAllowed, yieldHandling, TripledotProhibited);
- if (!assignNode)
- return null();
+ if (maybeDecl) {
+ if (*maybeDecl == DeclarationKind::FormalParameter)
+ pc->functionBox()->hasParameterExprs = true;
+ } else {
+ handler.setListFlag(literal, PNX_NONCONST);
}
- MUST_MATCH_TOKEN(TOK_RB, JSMSG_COMP_PROP_UNTERM_EXPR);
- Node propname = handler.newComputedName(assignNode, begin, pos().end);
- if (!propname)
+ Node assignNode = assignExpr(InAllowed, yieldHandling, TripledotProhibited);
+ if (!assignNode)
return null();
- handler.setListFlag(literal, PNX_NONCONST);
- return propname;
+
+ MUST_MATCH_TOKEN(TOK_RB, JSMSG_COMP_PROP_UNTERM_EXPR);
+ return handler.newComputedName(assignNode, begin, pos().end);
}
template <typename ParseHandler>
@@ -9035,200 +9699,219 @@ Parser<ParseHandler>::objectLiteral(YieldHandling yieldHandling, PossibleError*
{
MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_LC));
+ uint32_t openedPos = pos().begin;
+
Node literal = handler.newObjectLiteral(pos().begin);
if (!literal)
return null();
bool seenPrototypeMutation = false;
bool seenCoverInitializedName = false;
+ Maybe<DeclarationKind> declKind = Nothing();
RootedAtom propAtom(context);
for (;;) {
TokenKind tt;
- if (!tokenStream.getToken(&tt, TokenStream::KeywordIsName))
+ if (!tokenStream.peekToken(&tt))
return null();
if (tt == TOK_RC)
break;
- TokenPos namePos = pos();
-
- tokenStream.ungetToken();
-
- PropertyType propType;
- Node propName = propertyName(yieldHandling, literal, &propType, &propAtom);
- if (!propName)
- return null();
+ if (tt == TOK_TRIPLEDOT) {
+ // object spread
+ tokenStream.consumeKnownToken(TOK_TRIPLEDOT);
+ uint32_t begin = pos().begin;
- if (propType == PropertyType::Normal) {
- Node propExpr = assignExpr(InAllowed, yieldHandling, TripledotProhibited,
- possibleError);
- if (!propExpr)
+ TokenPos innerPos;
+ if (!tokenStream.peekTokenPos(&innerPos, TokenStream::Operand))
return null();
- handler.checkAndSetIsDirectRHSAnonFunction(propExpr);
-
- if (foldConstants && !FoldConstants(context, &propExpr, this))
+ Node inner = assignExpr(InAllowed, yieldHandling, TripledotProhibited,
+ possibleError);
+ if (!inner)
+ return null();
+ if (possibleError)
+ checkDestructuringAssignmentTarget(inner, innerPos, possibleError);
+ if (!handler.addSpreadProperty(literal, begin, inner))
return null();
+ } else {
+ TokenPos namePos = tokenStream.nextToken().pos;
- if (propAtom == context->names().proto) {
- if (seenPrototypeMutation) {
- // Directly report the error when we're not in a
- // destructuring context.
- if (!possibleError) {
- errorAt(namePos.begin, JSMSG_DUPLICATE_PROTO_PROPERTY);
- return null();
- }
+ PropertyType propType;
+ Node propName = propertyName(yieldHandling, declKind, literal, &propType, &propAtom);
+ if (!propName)
- // Otherwise delay error reporting until we've determined
- // whether or not we're destructuring.
- possibleError->setPendingExpressionErrorAt(namePos,
- JSMSG_DUPLICATE_PROTO_PROPERTY);
- }
- seenPrototypeMutation = true;
+ return null();
- // Note: this occurs *only* if we observe TOK_COLON! Only
- // __proto__: v mutates [[Prototype]]. Getters, setters,
- // method/generator definitions, computed property name
- // versions of all of these, and shorthands do not.
- if (!handler.addPrototypeMutation(literal, namePos.begin, propExpr))
+ if (propType == PropertyType::Normal) {
+ TokenPos exprPos;
+ if (!tokenStream.peekTokenPos(&exprPos, TokenStream::Operand))
return null();
- } else {
- if (!handler.isConstant(propExpr))
- handler.setListFlag(literal, PNX_NONCONST);
- if (!handler.addPropertyDefinition(literal, propName, propExpr))
+ Node propExpr = assignExpr(InAllowed, yieldHandling, TripledotProhibited,
+ possibleError);
+ if (!propExpr)
return null();
- }
- } else if (propType == PropertyType::Shorthand) {
- /*
- * Support, e.g., |var {x, y} = o| as destructuring shorthand
- * for |var {x: x, y: y} = o|, and |var o = {x, y}| as initializer
- * shorthand for |var o = {x: x, y: y}|.
- */
- TokenKind propToken = TOK_NAME;
- if (!tokenStream.checkForKeyword(propAtom, &propToken))
- return null();
- if (propToken != TOK_NAME && propToken != TOK_YIELD) {
- error(JSMSG_RESERVED_ID, TokenKindToDesc(propToken));
- return null();
- }
+ handler.checkAndSetIsDirectRHSAnonFunction(propExpr);
- Rooted<PropertyName*> name(context,
- identifierReference(yieldHandling, propToken == TOK_YIELD));
- if (!name)
- return null();
+ if (possibleError)
+ checkDestructuringAssignmentElement(propExpr, exprPos, possibleError);
- Node nameExpr = identifierReference(name);
- if (!nameExpr)
- return null();
+ if (foldConstants && !FoldConstants(context, &propExpr, this))
+ return null();
- if (!handler.addShorthand(literal, propName, nameExpr))
- return null();
- } else if (propType == PropertyType::CoverInitializedName) {
- /*
- * Support, e.g., |var {x=1, y=2} = o| as destructuring shorthand
- * with default values, as per ES6 12.14.5
- */
- TokenKind propToken = TOK_NAME;
- if (!tokenStream.checkForKeyword(propAtom, &propToken))
- return null();
+ if (propAtom == context->names().proto) {
+ if (seenPrototypeMutation) {
+ // Directly report the error when we're not in a
+ // destructuring context.
+ if (!possibleError) {
+ errorAt(namePos.begin, JSMSG_DUPLICATE_PROTO_PROPERTY);
+ return null();
+ }
- if (propToken != TOK_NAME && propToken != TOK_YIELD) {
- error(JSMSG_RESERVED_ID, TokenKindToDesc(propToken));
- return null();
- }
+ // Otherwise delay error reporting until we've
+ // determined whether or not we're destructuring.
+ possibleError->setPendingExpressionErrorAt(namePos,
+ JSMSG_DUPLICATE_PROTO_PROPERTY);
+ }
+ seenPrototypeMutation = true;
- Rooted<PropertyName*> name(context,
- identifierReference(yieldHandling, propToken == TOK_YIELD));
- if (!name)
- return null();
+ // Note: this occurs *only* if we observe TOK_COLON! Only
+ // __proto__: v mutates [[Prototype]]. Getters, setters,
+ // method/generator definitions, computed property name
+ // versions of all of these, and shorthands do not.
+ if (!handler.addPrototypeMutation(literal, namePos.begin, propExpr))
+ return null();
+ } else {
+ if (!handler.isConstant(propExpr))
+ handler.setListFlag(literal, PNX_NONCONST);
- Node lhs = identifierReference(name);
- if (!lhs)
- return null();
+ if (!handler.addPropertyDefinition(literal, propName, propExpr))
+ return null();
+ }
+ } else if (propType == PropertyType::Shorthand) {
+ /*
+ * Support, e.g., |({x, y} = o)| as destructuring shorthand
+ * for |({x: x, y: y} = o)|, and |var o = {x, y}| as
+ * initializer shorthand for |var o = {x: x, y: y}|.
+ */
+ Rooted<PropertyName*> name(context, identifierReference(yieldHandling));
+ if (!name)
+ return null();
- tokenStream.consumeKnownToken(TOK_ASSIGN);
+ Node nameExpr = identifierReference(name);
+ if (!nameExpr)
+ return null();
- if (!seenCoverInitializedName) {
- // "shorthand default" or "CoverInitializedName" syntax is only
- // valid in the case of destructuring.
- seenCoverInitializedName = true;
+ if (possibleError)
+ checkDestructuringAssignmentTarget(nameExpr, namePos, possibleError);
- if (!possibleError) {
- // Destructuring defaults are definitely not allowed in this object literal,
- // because of something the caller knows about the preceding code.
- // For example, maybe the preceding token is an operator: `x + {y=z}`.
- error(JSMSG_COLON_AFTER_ID);
+ if (!handler.addShorthand(literal, propName, nameExpr))
return null();
+ } else if (propType == PropertyType::CoverInitializedName) {
+ /*
+ * Support, e.g., |({x=1, y=2} = o)| as destructuring
+ * shorthand with default values, as per ES6 12.14.5
+ */
+ Rooted<PropertyName*> name(context, identifierReference(yieldHandling));
+ if (!name)
+ return null();
+
+ Node lhs = identifierReference(name);
+ if (!lhs)
+ return null();
+
+ tokenStream.consumeKnownToken(TOK_ASSIGN);
+
+ if (!seenCoverInitializedName) {
+ // "shorthand default" or "CoverInitializedName" syntax is
+ // only valid in the case of destructuring.
+ seenCoverInitializedName = true;
+
+ if (!possibleError) {
+ // Destructuring defaults are definitely not allowed
+ // in this object literal, because of something the
+ // caller knows about the preceding code. For example,
+ // maybe the preceding token is an operator:
+ // |x + {y=z}|.
+ error(JSMSG_COLON_AFTER_ID);
+ return null();
+ }
+
+ // Here we set a pending error so that later in the parse,
+ // once we've determined whether or not we're
+ // destructuring, the error can be reported or ignored
+ // appropriately.
+ possibleError->setPendingExpressionErrorAt(pos(), JSMSG_COLON_AFTER_ID);
}
- // Here we set a pending error so that later in the parse, once we've
- // determined whether or not we're destructuring, the error can be
- // reported or ignored appropriately.
- possibleError->setPendingExpressionErrorAt(pos(), JSMSG_COLON_AFTER_ID);
- }
+ if (const char* chars = handler.nameIsArgumentsEvalAnyParentheses(lhs, context)) {
+ // |chars| is "arguments" or "eval" here.
+ if (!strictModeErrorAt(namePos.begin, JSMSG_BAD_STRICT_ASSIGN, chars))
+ return null();
+ }
- Node rhs;
- {
- // Clearing `inDestructuringDecl` allows name use to be noted
- // in Parser::identifierReference. See bug 1255167.
- AutoClearInDestructuringDecl autoClear(pc);
- rhs = assignExpr(InAllowed, yieldHandling, TripledotProhibited);
+ Node rhs = assignExpr(InAllowed, yieldHandling, TripledotProhibited);
if (!rhs)
return null();
- }
- handler.checkAndSetIsDirectRHSAnonFunction(rhs);
+ handler.checkAndSetIsDirectRHSAnonFunction(rhs);
- Node propExpr = handler.newAssignment(PNK_ASSIGN, lhs, rhs, JSOP_NOP);
- if (!propExpr)
- return null();
-
- if (!handler.addPropertyDefinition(literal, propName, propExpr))
- return null();
+ Node propExpr = handler.newAssignment(PNK_ASSIGN, lhs, rhs, JSOP_NOP);
+ if (!propExpr)
+ return null();
- if (!abortIfSyntaxParser())
- return null();
- } else {
- RootedAtom funName(context);
- if (!tokenStream.isCurrentTokenType(TOK_RB)) {
- funName = propAtom;
+ if (!handler.addPropertyDefinition(literal, propName, propExpr))
+ return null();
+ } else {
+ RootedAtom funName(context);
+ if (!tokenStream.isCurrentTokenType(TOK_RB)) {
+ funName = propAtom;
- if (propType == PropertyType::Getter || propType == PropertyType::Setter) {
- funName = prefixAccessorName(propType, propAtom);
- if (!funName)
- return null();
+ if (propType == PropertyType::Getter || propType == PropertyType::Setter) {
+ funName = prefixAccessorName(propType, propAtom);
+ if (!funName)
+ return null();
+ }
}
- }
- Node fn = methodDefinition(namePos.begin, propType, funName);
- if (!fn)
- return null();
+ Node fn = methodDefinition(namePos.begin, propType, funName);
+ if (!fn)
+ return null();
- handler.checkAndSetIsDirectRHSAnonFunction(fn);
+ handler.checkAndSetIsDirectRHSAnonFunction(fn);
- JSOp op = JSOpFromPropertyType(propType);
- if (!handler.addObjectMethodDefinition(literal, propName, fn, op))
- return null();
+ JSOp op = JSOpFromPropertyType(propType);
+ if (!handler.addObjectMethodDefinition(literal, propName, fn, op))
+ return null();
+
+ if (possibleError) {
+ possibleError->setPendingDestructuringErrorAt(namePos,
+ JSMSG_BAD_DESTRUCT_TARGET);
+ }
+ }
}
- if (!tokenStream.getToken(&tt))
+ bool matched;
+ if (!tokenStream.matchToken(&matched, TOK_COMMA))
return null();
- if (tt == TOK_RC)
+ if (!matched)
break;
- if (tt != TOK_COMMA) {
- error(JSMSG_CURLY_AFTER_LIST);
- return null();
- }
+ if (tt == TOK_TRIPLEDOT && possibleError)
+ possibleError->setPendingDestructuringErrorAt(pos(), JSMSG_REST_WITH_COMMA);
}
+ MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::None,
+ reportMissingClosing(JSMSG_CURLY_AFTER_LIST,
+ JSMSG_CURLY_OPENED, openedPos));
+
handler.setEndPosition(literal, pos().end);
return literal;
}
template <typename ParseHandler>
typename ParseHandler::Node
-Parser<ParseHandler>::methodDefinition(uint32_t preludeStart, PropertyType propType,
+Parser<ParseHandler>::methodDefinition(uint32_t toStringStart, PropertyType propType,
HandleAtom funName)
{
FunctionSyntaxKind kind;
@@ -9282,7 +9965,7 @@ Parser<ParseHandler>::methodDefinition(uint32_t preludeStart, PropertyType propT
if (!pn)
return null();
- return functionDefinition(preludeStart, pn, InAllowed, yieldHandling, funName,
+ return functionDefinition(toStringStart, pn, InAllowed, yieldHandling, funName,
kind, generatorKind, asyncKind);
}
@@ -9312,14 +9995,11 @@ Parser<ParseHandler>::tryNewTarget(Node &newTarget)
if (!tokenStream.getToken(&next))
return false;
- if (next != TOK_NAME || tokenStream.currentName() != context->names().target) {
+ if (next != TOK_TARGET) {
error(JSMSG_UNEXPECTED_TOKEN, "target", TokenKindToDesc(next));
return false;
}
- if (!checkUnescapedName())
- return false;
-
if (!pc->sc()->allowNewTarget()) {
errorAt(begin, JSMSG_BAD_NEWTARGET);
return false;
@@ -9389,7 +10069,6 @@ Parser<ParseHandler>::primaryExpr(YieldHandling yieldHandling, TripledotHandling
if (!expr)
return null();
MUST_MATCH_TOKEN(TOK_RP, JSMSG_PAREN_IN_PAREN);
- handler.setEndPosition(expr, pos().end);
return handler.parenthesize(expr);
}
@@ -9397,22 +10076,26 @@ Parser<ParseHandler>::primaryExpr(YieldHandling yieldHandling, TripledotHandling
return templateLiteral(yieldHandling);
case TOK_NO_SUBS_TEMPLATE:
- return noSubstitutionTemplate();
+ return noSubstitutionUntaggedTemplate();
case TOK_STRING:
return stringLiteral();
- case TOK_YIELD:
- case TOK_NAME: {
- if (tokenStream.currentName() == context->names().async) {
+ default: {
+ if (!TokenKindIsPossibleIdentifier(tt)) {
+ error(JSMSG_UNEXPECTED_TOKEN, "expression", TokenKindToDesc(tt));
+ return null();
+ }
+
+ if (tt == TOK_ASYNC) {
TokenKind nextSameLine = TOK_EOF;
if (!tokenStream.peekTokenSameLine(&nextSameLine))
return null();
if (nextSameLine == TOK_FUNCTION) {
- uint32_t preludeStart = pos().begin;
+ uint32_t toStringStart = pos().begin;
tokenStream.consumeKnownToken(TOK_FUNCTION);
- return functionExpr(preludeStart, PredictUninvoked, AsyncFunction);
+ return functionExpr(toStringStart, PredictUninvoked, AsyncFunction);
}
}
@@ -9476,7 +10159,7 @@ Parser<ParseHandler>::primaryExpr(YieldHandling yieldHandling, TripledotHandling
// the enclosing code is strict mode code, any of "let", "yield",
// or "arguments" should be prohibited. Argument-parsing code
// handles that.
- if (next != TOK_NAME && next != TOK_YIELD) {
+ if (!TokenKindIsPossibleIdentifier(next)) {
error(JSMSG_UNEXPECTED_TOKEN, "rest argument name", TokenKindToDesc(next));
return null();
}
@@ -9503,10 +10186,6 @@ Parser<ParseHandler>::primaryExpr(YieldHandling yieldHandling, TripledotHandling
// Return an arbitrary expression node. See case TOK_RP above.
return handler.newNullLiteral(pos());
}
-
- default:
- error(JSMSG_UNEXPECTED_TOKEN, "expression", TokenKindToDesc(tt));
- return null();
}
}
@@ -9520,9 +10199,8 @@ Parser<ParseHandler>::exprInParens(InHandling inHandling, YieldHandling yieldHan
return expr(inHandling, yieldHandling, tripledotHandling, possibleError, PredictInvoked);
}
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::warnOnceAboutExprClosure()
+ParserBase::warnOnceAboutExprClosure()
{
#ifndef RELEASE_OR_BETA
JSContext* cx = context->maybeJSContext();
@@ -9538,9 +10216,8 @@ Parser<ParseHandler>::warnOnceAboutExprClosure()
return true;
}
-template <typename ParseHandler>
bool
-Parser<ParseHandler>::warnOnceAboutForEach()
+ParserBase::warnOnceAboutForEach()
{
JSContext* cx = context->maybeJSContext();
if (!cx)
diff --git a/js/src/frontend/Parser.h b/js/src/frontend/Parser.h
index 156a1c1b0..88d2dad18 100644
--- a/js/src/frontend/Parser.h
+++ b/js/src/frontend/Parser.h
@@ -85,6 +85,16 @@ class ParseContext : public Nestable<ParseContext>
}
};
+ struct ClassStatement : public Statement
+ {
+ FunctionBox* constructorBox;
+
+ explicit ClassStatement(ParseContext* pc)
+ : Statement(pc, StatementKind::Class),
+ constructorBox(nullptr)
+ { }
+ };
+
// The intra-function scope stack.
//
// Tracks declared and used names within a scope.
@@ -146,9 +156,9 @@ class ParseContext : public Nestable<ParseContext>
}
MOZ_MUST_USE bool addDeclaredName(ParseContext* pc, AddDeclaredNamePtr& p, JSAtom* name,
- DeclarationKind kind)
+ DeclarationKind kind, uint32_t pos)
{
- return maybeReportOOM(pc, declared_->add(p, name, DeclaredNameInfo(kind)));
+ return maybeReportOOM(pc, declared_->add(p, name, DeclaredNameInfo(kind, pos)));
}
// Remove all VarForAnnexBLexicalFunction declarations of a certain
@@ -330,17 +340,6 @@ class ParseContext : public Nestable<ParseContext>
// pointer may be nullptr.
Directives* newDirectives;
- // Set when parsing a declaration-like destructuring pattern. This flag
- // causes PrimaryExpr to create PN_NAME parse nodes for variable references
- // which are not hooked into any definition's use chain, added to any tree
- // context's AtomList, etc. etc. checkDestructuring will do that work
- // later.
- //
- // The comments atop checkDestructuring explain the distinction between
- // assignment-like and declaration-like destructuring patterns, and why
- // they need to be treated differently.
- mozilla::Maybe<DeclarationKind> inDestructuringDecl;
-
// Set when parsing a function and it has 'return <expr>;'
bool funHasReturnExpr;
@@ -432,6 +431,11 @@ class ParseContext : public Nestable<ParseContext>
return Statement::findNearest<T>(innermostStatement_, predicate);
}
+ template <typename T>
+ T* findInnermostStatement() {
+ return Statement::findNearest<T>(innermostStatement_);
+ }
+
AtomVector& positionalFormalParameterNames() {
return *positionalFormalParameterNames_;
}
@@ -532,6 +536,13 @@ ParseContext::Statement::is<ParseContext::LabelStatement>() const
return kind_ == StatementKind::Label;
}
+template <>
+inline bool
+ParseContext::Statement::is<ParseContext::ClassStatement>() const
+{
+ return kind_ == StatementKind::Class;
+}
+
template <typename T>
inline T&
ParseContext::Statement::as()
@@ -735,7 +746,155 @@ class UsedNameTracker
};
template <typename ParseHandler>
-class Parser final : private JS::AutoGCRooter, public StrictModeGetter
+class AutoAwaitIsKeyword;
+
+class ParserBase : public StrictModeGetter
+{
+ private:
+ ParserBase* thisForCtor() { return this; }
+
+ public:
+ ExclusiveContext* const context;
+
+ LifoAlloc& alloc;
+
+ TokenStream tokenStream;
+ LifoAlloc::Mark tempPoolMark;
+
+ /* list of parsed objects for GC tracing */
+ ObjectBox* traceListHead;
+
+ /* innermost parse context (stack-allocated) */
+ ParseContext* pc;
+
+ // For tracking used names in this parsing session.
+ UsedNameTracker& usedNames;
+
+ /* Compression token for aborting. */
+ SourceCompressionTask* sct;
+
+ ScriptSource* ss;
+
+ /* Root atoms and objects allocated for the parsed tree. */
+ AutoKeepAtoms keepAtoms;
+
+ /* Perform constant-folding; must be true when interfacing with the emitter. */
+ const bool foldConstants:1;
+
+ protected:
+#if DEBUG
+ /* Our fallible 'checkOptions' member function has been called. */
+ bool checkOptionsCalled:1;
+#endif
+
+ /*
+ * Not all language constructs can be handled during syntax parsing. If it
+ * is not known whether the parse succeeds or fails, this bit is set and
+ * the parse will return false.
+ */
+ bool abortedSyntaxParse:1;
+
+ /* Unexpected end of input, i.e. TOK_EOF not at top-level. */
+ bool isUnexpectedEOF_:1;
+
+ bool awaitIsKeyword_:1;
+
+ public:
+ bool awaitIsKeyword() const {
+ return awaitIsKeyword_;
+ }
+
+ ParserBase(ExclusiveContext* cx, LifoAlloc& alloc, const ReadOnlyCompileOptions& options,
+ const char16_t* chars, size_t length, bool foldConstants,
+ UsedNameTracker& usedNames, Parser<SyntaxParseHandler>* syntaxParser,
+ LazyScript* lazyOuterFunction);
+ ~ParserBase();
+
+ const char* getFilename() const { return tokenStream.getFilename(); }
+ JSVersion versionNumber() const { return tokenStream.versionNumber(); }
+ TokenPos pos() const { return tokenStream.currentToken().pos; }
+
+ // Determine whether |yield| is a valid name in the current context, or
+ // whether it's prohibited due to strictness, JS version, or occurrence
+ // inside a star generator.
+ bool yieldExpressionsSupported() {
+ return (versionNumber() >= JSVERSION_1_7 || pc->isGenerator()) && !pc->isAsync();
+ }
+
+ virtual bool strictMode() { return pc->sc()->strict(); }
+ bool setLocalStrictMode(bool strict) {
+ MOZ_ASSERT(tokenStream.debugHasNoLookahead());
+ return pc->sc()->setLocalStrictMode(strict);
+ }
+
+ const ReadOnlyCompileOptions& options() const {
+ return tokenStream.options();
+ }
+
+ bool hadAbortedSyntaxParse() {
+ return abortedSyntaxParse;
+ }
+ void clearAbortedSyntaxParse() {
+ abortedSyntaxParse = false;
+ }
+
+ bool isUnexpectedEOF() const { return isUnexpectedEOF_; }
+
+ bool reportNoOffset(ParseReportKind kind, bool strict, unsigned errorNumber, ...);
+
+ /* Report the given error at the current offset. */
+ void error(unsigned errorNumber, ...);
+ void errorWithNotes(UniquePtr<JSErrorNotes> notes, unsigned errorNumber, ...);
+
+ /* Report the given error at the given offset. */
+ void errorAt(uint32_t offset, unsigned errorNumber, ...);
+ void errorWithNotesAt(UniquePtr<JSErrorNotes> notes, uint32_t offset,
+ unsigned errorNumber, ...);
+
+ /*
+ * Handle a strict mode error at the current offset. Report an error if in
+ * strict mode code, or warn if not, using the given error number and
+ * arguments.
+ */
+ MOZ_MUST_USE bool strictModeError(unsigned errorNumber, ...);
+
+ /*
+ * Handle a strict mode error at the given offset. Report an error if in
+ * strict mode code, or warn if not, using the given error number and
+ * arguments.
+ */
+ MOZ_MUST_USE bool strictModeErrorAt(uint32_t offset, unsigned errorNumber, ...);
+
+ /* Report the given warning at the current offset. */
+ MOZ_MUST_USE bool warning(unsigned errorNumber, ...);
+
+ /* Report the given warning at the given offset. */
+ MOZ_MUST_USE bool warningAt(uint32_t offset, unsigned errorNumber, ...);
+
+ /*
+ * If extra warnings are enabled, report the given warning at the current
+ * offset.
+ */
+ MOZ_MUST_USE bool extraWarning(unsigned errorNumber, ...);
+
+ /*
+ * If extra warnings are enabled, report the given warning at the given
+ * offset.
+ */
+ MOZ_MUST_USE bool extraWarningAt(uint32_t offset, unsigned errorNumber, ...);
+
+ bool isValidStrictBinding(PropertyName* name);
+
+ bool warnOnceAboutExprClosure();
+ bool warnOnceAboutForEach();
+
+ protected:
+ enum InvokedPrediction { PredictUninvoked = false, PredictInvoked = true };
+ enum ForInitLocation { InForInit, NotInForInit };
+};
+
+template <typename ParseHandler>
+class Parser final : public ParserBase, private JS::AutoGCRooter
{
private:
using Node = typename ParseHandler::Node;
@@ -788,7 +947,7 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
class MOZ_STACK_CLASS PossibleError
{
private:
- enum class ErrorKind { Expression, Destructuring };
+ enum class ErrorKind { Expression, Destructuring, DestructuringWarning };
enum class ErrorState { None, Pending };
@@ -803,11 +962,12 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
Parser<ParseHandler>& parser_;
Error exprError_;
Error destructuringError_;
+ Error destructuringWarning_;
// Returns the error report.
Error& error(ErrorKind kind);
- // Return true if an error is pending without reporting
+ // Return true if an error is pending without reporting.
bool hasError(ErrorKind kind);
// Resolve any pending error.
@@ -819,7 +979,11 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
// If there is a pending error, report it and return false, otherwise
// return true.
- bool checkForError(ErrorKind kind);
+ MOZ_MUST_USE bool checkForError(ErrorKind kind);
+
+ // If there is a pending warning, report it and return either false or
+ // true depending on the werror option, otherwise return true.
+ MOZ_MUST_USE bool checkForWarning(ErrorKind kind);
// Transfer an existing error to another instance.
void transferErrorTo(ErrorKind kind, PossibleError* other);
@@ -827,23 +991,33 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
public:
explicit PossibleError(Parser<ParseHandler>& parser);
+ // Return true if a pending destructuring error is present.
+ bool hasPendingDestructuringError();
+
// Set a pending destructuring error. Only a single error may be set
// per instance, i.e. subsequent calls to this method are ignored and
// won't overwrite the existing pending error.
void setPendingDestructuringErrorAt(const TokenPos& pos, unsigned errorNumber);
+ // Set a pending destructuring warning. Only a single warning may be
+ // set per instance, i.e. subsequent calls to this method are ignored
+ // and won't overwrite the existing pending warning.
+ void setPendingDestructuringWarningAt(const TokenPos& pos, unsigned errorNumber);
+
// Set a pending expression error. Only a single error may be set per
// instance, i.e. subsequent calls to this method are ignored and won't
// overwrite the existing pending error.
void setPendingExpressionErrorAt(const TokenPos& pos, unsigned errorNumber);
- // If there is a pending destructuring error, report it and return
- // false, otherwise return true. Clears any pending expression error.
- bool checkForDestructuringError();
+ // If there is a pending destructuring error or warning, report it and
+ // return false, otherwise return true. Clears any pending expression
+ // error.
+ MOZ_MUST_USE bool checkForDestructuringErrorOrWarning();
// If there is a pending expression error, report it and return false,
- // otherwise return true. Clears any pending destructuring error.
- bool checkForExpressionError();
+ // otherwise return true. Clears any pending destructuring error or
+ // warning.
+ MOZ_MUST_USE bool checkForExpressionError();
// Pass pending errors between possible error instances. This is useful
// for extending the lifetime of a pending error beyond the scope of
@@ -853,50 +1027,6 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
};
public:
- ExclusiveContext* const context;
-
- LifoAlloc& alloc;
-
- TokenStream tokenStream;
- LifoAlloc::Mark tempPoolMark;
-
- /* list of parsed objects for GC tracing */
- ObjectBox* traceListHead;
-
- /* innermost parse context (stack-allocated) */
- ParseContext* pc;
-
- // For tracking used names in this parsing session.
- UsedNameTracker& usedNames;
-
- /* Compression token for aborting. */
- SourceCompressionTask* sct;
-
- ScriptSource* ss;
-
- /* Root atoms and objects allocated for the parsed tree. */
- AutoKeepAtoms keepAtoms;
-
- /* Perform constant-folding; must be true when interfacing with the emitter. */
- const bool foldConstants:1;
-
- private:
-#if DEBUG
- /* Our fallible 'checkOptions' member function has been called. */
- bool checkOptionsCalled:1;
-#endif
-
- /*
- * Not all language constructs can be handled during syntax parsing. If it
- * is not known whether the parse succeeds or fails, this bit is set and
- * the parse will return false.
- */
- bool abortedSyntaxParse:1;
-
- /* Unexpected end of input, i.e. TOK_EOF not at top-level. */
- bool isUnexpectedEOF_:1;
-
- public:
/* State specific to the kind of parse being performed. */
ParseHandler handler;
@@ -904,45 +1034,14 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
void freeTree(Node node) { handler.freeTree(node); }
public:
- bool reportNoOffset(ParseReportKind kind, bool strict, unsigned errorNumber, ...);
-
- /* Report the given error at the current offset. */
- void error(unsigned errorNumber, ...);
-
- /* Report the given error at the given offset. */
- void errorAt(uint32_t offset, unsigned errorNumber, ...);
-
- /*
- * Handle a strict mode error at the current offset. Report an error if in
- * strict mode code, or warn if not, using the given error number and
- * arguments.
- */
- MOZ_MUST_USE bool strictModeError(unsigned errorNumber, ...);
-
- /*
- * Handle a strict mode error at the given offset. Report an error if in
- * strict mode code, or warn if not, using the given error number and
- * arguments.
- */
- MOZ_MUST_USE bool strictModeErrorAt(uint32_t offset, unsigned errorNumber, ...);
-
- /* Report the given warning at the current offset. */
- MOZ_MUST_USE bool warning(unsigned errorNumber, ...);
-
- /* Report the given warning at the given offset. */
- MOZ_MUST_USE bool warningAt(uint32_t offset, unsigned errorNumber, ...);
-
- /*
- * If extra warnings are enabled, report the given warning at the current
- * offset.
- */
- MOZ_MUST_USE bool extraWarning(unsigned errorNumber, ...);
-
Parser(ExclusiveContext* cx, LifoAlloc& alloc, const ReadOnlyCompileOptions& options,
const char16_t* chars, size_t length, bool foldConstants, UsedNameTracker& usedNames,
Parser<SyntaxParseHandler>* syntaxParser, LazyScript* lazyOuterFunction);
~Parser();
+ friend class AutoAwaitIsKeyword<ParseHandler>;
+ void setAwaitIsKeyword(bool isKeyword);
+
bool checkOptions();
// A Parser::Mark is the extension of the LifoAlloc::Mark to the entire
@@ -967,9 +1066,6 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
friend void js::frontend::MarkParser(JSTracer* trc, JS::AutoGCRooter* parser);
- const char* getFilename() const { return tokenStream.getFilename(); }
- JSVersion versionNumber() const { return tokenStream.versionNumber(); }
-
/*
* Parse a top-level JS script.
*/
@@ -980,7 +1076,7 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
* cx->tempLifoAlloc.
*/
ObjectBox* newObjectBox(JSObject* obj);
- FunctionBox* newFunctionBox(Node fn, JSFunction* fun, uint32_t preludeStart,
+ FunctionBox* newFunctionBox(Node fn, JSFunction* fun, uint32_t toStringStart,
Directives directives,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind,
bool tryAnnexB);
@@ -995,24 +1091,14 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
void trace(JSTracer* trc);
- bool hadAbortedSyntaxParse() {
- return abortedSyntaxParse;
- }
- void clearAbortedSyntaxParse() {
- abortedSyntaxParse = false;
- }
-
- bool isUnexpectedEOF() const { return isUnexpectedEOF_; }
-
- bool checkUnescapedName();
-
private:
Parser* thisForCtor() { return this; }
JSAtom* stopStringCompression();
Node stringLiteral();
- Node noSubstitutionTemplate();
+ Node noSubstitutionTaggedTemplate();
+ Node noSubstitutionUntaggedTemplate();
Node templateLiteral(YieldHandling yieldHandling);
bool taggedTemplate(YieldHandling yieldHandling, Node nodeList, TokenKind tt);
bool appendToCallSiteObj(Node callSiteObj);
@@ -1061,7 +1147,7 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
// Parse an inner function given an enclosing ParseContext and a
// FunctionBox for the inner function.
- bool innerFunction(Node pn, ParseContext* outerpc, FunctionBox* funbox, uint32_t preludeStart,
+ bool innerFunction(Node pn, ParseContext* outerpc, FunctionBox* funbox, uint32_t toStringStart,
InHandling inHandling, YieldHandling yieldHandling,
FunctionSyntaxKind kind,
Directives inheritedDirectives, Directives* newDirectives);
@@ -1070,35 +1156,14 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
// ParseContext is already on the stack.
bool functionFormalParametersAndBody(InHandling inHandling, YieldHandling yieldHandling,
Node pn, FunctionSyntaxKind kind,
- mozilla::Maybe<uint32_t> parameterListEnd = mozilla::Nothing());
-
-
- // Determine whether |yield| is a valid name in the current context, or
- // whether it's prohibited due to strictness, JS version, or occurrence
- // inside a star generator.
- bool yieldExpressionsSupported() {
- return (versionNumber() >= JSVERSION_1_7 || pc->isGenerator()) && !pc->isAsync();
- }
+ mozilla::Maybe<uint32_t> parameterListEnd = mozilla::Nothing(),
+ bool isStandaloneFunction = false);
// Match the current token against the BindingIdentifier production with
// the given Yield parameter. If there is no match, report a syntax
// error.
PropertyName* bindingIdentifier(YieldHandling yieldHandling);
- virtual bool strictMode() { return pc->sc()->strict(); }
- bool setLocalStrictMode(bool strict) {
- MOZ_ASSERT(tokenStream.debugHasNoLookahead());
- return pc->sc()->setLocalStrictMode(strict);
- }
-
- const ReadOnlyCompileOptions& options() const {
- return tokenStream.options();
- }
-
- private:
- enum InvokedPrediction { PredictUninvoked = false, PredictInvoked = true };
- enum ForInitLocation { InForInit, NotInForInit };
-
private:
/*
* JS parsers, from lowest to highest precedence.
@@ -1116,10 +1181,10 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
* Some parsers have two versions: an always-inlined version (with an 'i'
* suffix) and a never-inlined version (with an 'n' suffix).
*/
- Node functionStmt(uint32_t preludeStart,
+ Node functionStmt(uint32_t toStringStart,
YieldHandling yieldHandling, DefaultHandling defaultHandling,
FunctionAsyncKind asyncKind = SyncFunction);
- Node functionExpr(uint32_t preludeStart, InvokedPrediction invoked = PredictUninvoked,
+ Node functionExpr(uint32_t toStringStart, InvokedPrediction invoked = PredictUninvoked,
FunctionAsyncKind asyncKind = SyncFunction);
Node statementList(YieldHandling yieldHandling);
@@ -1160,9 +1225,27 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
// continues a LexicalDeclaration.
bool nextTokenContinuesLetDeclaration(TokenKind next, YieldHandling yieldHandling);
- Node lexicalDeclaration(YieldHandling yieldHandling, bool isConst);
+ Node lexicalDeclaration(YieldHandling yieldHandling, DeclarationKind kind);
Node importDeclaration();
+
+ bool processExport(Node node);
+ bool processExportFrom(Node node);
+
+ Node exportFrom(uint32_t begin, Node specList);
+ Node exportBatch(uint32_t begin);
+ bool checkLocalExportNames(Node node);
+ Node exportClause(uint32_t begin);
+ Node exportFunctionDeclaration(uint32_t begin);
+ Node exportVariableStatement(uint32_t begin);
+ Node exportClassDeclaration(uint32_t begin);
+ Node exportLexicalDeclaration(uint32_t begin, DeclarationKind kind);
+ Node exportDefaultFunctionDeclaration(uint32_t begin,
+ FunctionAsyncKind asyncKind = SyncFunction);
+ Node exportDefaultClassDeclaration(uint32_t begin);
+ Node exportDefaultAssignExpr(uint32_t begin);
+ Node exportDefault(uint32_t begin);
+
Node exportDeclaration();
Node expressionStatement(YieldHandling yieldHandling,
InvokedPrediction invoked = PredictUninvoked);
@@ -1250,7 +1333,7 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
bool tryNewTarget(Node& newTarget);
bool checkAndMarkSuperScope();
- Node methodDefinition(uint32_t preludeStart, PropertyType propType, HandleAtom funName);
+ Node methodDefinition(uint32_t toStringStart, PropertyType propType, HandleAtom funName);
/*
* Additional JS parsers.
@@ -1258,7 +1341,7 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
bool functionArguments(YieldHandling yieldHandling, FunctionSyntaxKind kind,
Node funcpn);
- Node functionDefinition(uint32_t preludeStart, Node pn,
+ Node functionDefinition(uint32_t toStringStart, Node pn,
InHandling inHandling, YieldHandling yieldHandling, HandleAtom name,
FunctionSyntaxKind kind,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind,
@@ -1294,21 +1377,34 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
bool checkExportedName(JSAtom* exportName);
bool checkExportedNamesForDeclaration(Node node);
+ bool checkExportedNameForClause(Node node);
+ bool checkExportedNameForFunction(Node node);
+ bool checkExportedNameForClass(Node node);
+
enum ClassContext { ClassStatement, ClassExpression };
Node classDefinition(YieldHandling yieldHandling, ClassContext classContext,
DefaultHandling defaultHandling);
- PropertyName* labelOrIdentifierReference(YieldHandling yieldHandling,
- bool yieldTokenizedAsName);
+ bool checkLabelOrIdentifierReference(HandlePropertyName ident,
+ uint32_t offset,
+ YieldHandling yieldHandling);
+
+ bool checkLocalExportName(HandlePropertyName ident, uint32_t offset) {
+ return checkLabelOrIdentifierReference(ident, offset, YieldIsName);
+ }
+
+ bool checkBindingIdentifier(HandlePropertyName ident,
+ uint32_t offset,
+ YieldHandling yieldHandling);
+
+ PropertyName* labelOrIdentifierReference(YieldHandling yieldHandling);
PropertyName* labelIdentifier(YieldHandling yieldHandling) {
- return labelOrIdentifierReference(yieldHandling, false);
+ return labelOrIdentifierReference(yieldHandling);
}
- PropertyName* identifierReference(YieldHandling yieldHandling,
- bool yieldTokenizedAsName = false)
- {
- return labelOrIdentifierReference(yieldHandling, yieldTokenizedAsName);
+ PropertyName* identifierReference(YieldHandling yieldHandling) {
+ return labelOrIdentifierReference(yieldHandling);
}
PropertyName* importedBinding() {
@@ -1337,23 +1433,27 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
Node newDotGeneratorName();
bool declareDotGeneratorName();
- bool skipLazyInnerFunction(Node pn, uint32_t preludeStart, FunctionSyntaxKind kind,
+ bool skipLazyInnerFunction(Node pn, uint32_t toStringStart, FunctionSyntaxKind kind,
bool tryAnnexB);
- bool innerFunction(Node pn, ParseContext* outerpc, HandleFunction fun, uint32_t preludeStart,
+ bool innerFunction(Node pn, ParseContext* outerpc, HandleFunction fun, uint32_t toStringStart,
InHandling inHandling, YieldHandling yieldHandling,
FunctionSyntaxKind kind,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind, bool tryAnnexB,
Directives inheritedDirectives, Directives* newDirectives);
- bool trySyntaxParseInnerFunction(Node pn, HandleFunction fun, uint32_t preludeStart,
+ bool trySyntaxParseInnerFunction(Node pn, HandleFunction fun, uint32_t toStringStart,
InHandling inHandling, YieldHandling yieldHandling,
FunctionSyntaxKind kind,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind,
bool tryAnnexB,
Directives inheritedDirectives, Directives* newDirectives);
- bool finishFunctionScopes();
- bool finishFunction();
+ bool finishFunctionScopes(bool isStandaloneFunction);
+ bool finishFunction(bool isStandaloneFunction = false);
bool leaveInnerFunction(ParseContext* outerpc);
+ bool matchOrInsertSemicolonHelper(TokenStream::Modifier modifier);
+ bool matchOrInsertSemicolonAfterExpression();
+ bool matchOrInsertSemicolonAfterNonExpression();
+
public:
enum FunctionCallBehavior {
PermitAssignmentToFunctionCalls,
@@ -1366,21 +1466,22 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
private:
bool checkIncDecOperand(Node operand, uint32_t operandOffset);
bool checkStrictAssignment(Node lhs);
- bool checkStrictBinding(PropertyName* name, TokenPos pos);
bool hasValidSimpleStrictParameterNames();
- bool isValidStrictBinding(PropertyName* name);
+ void reportMissingClosing(unsigned errorNumber, unsigned noteNumber, uint32_t openedPos);
- void reportRedeclaration(HandlePropertyName name, DeclarationKind kind, TokenPos pos);
- bool notePositionalFormalParameter(Node fn, HandlePropertyName name,
+ void reportRedeclaration(HandlePropertyName name, DeclarationKind prevKind, TokenPos pos,
+ uint32_t prevPos);
+ bool notePositionalFormalParameter(Node fn, HandlePropertyName name, uint32_t beginPos,
bool disallowDuplicateParams, bool* duplicatedParam);
bool noteDestructuredPositionalFormalParameter(Node fn, Node destruct);
mozilla::Maybe<DeclarationKind> isVarRedeclaredInEval(HandlePropertyName name,
DeclarationKind kind);
- bool tryDeclareVar(HandlePropertyName name, DeclarationKind kind,
- mozilla::Maybe<DeclarationKind>* redeclaredKind);
- bool tryDeclareVarForAnnexBLexicalFunction(HandlePropertyName name, bool* tryAnnexB);
+ bool tryDeclareVar(HandlePropertyName name, DeclarationKind kind, uint32_t beginPos,
+ mozilla::Maybe<DeclarationKind>* redeclaredKind, uint32_t* prevPos);
+ bool tryDeclareVarForAnnexBLexicalFunction(HandlePropertyName name, uint32_t beginPos,
+ bool* tryAnnexB);
bool checkLexicalDeclarationDirectlyWithinBlock(ParseContext::Statement& stmt,
DeclarationKind kind, TokenPos pos);
bool noteDeclaredName(HandlePropertyName name, DeclarationKind kind, TokenPos pos);
@@ -1399,25 +1500,27 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
mozilla::Maybe<LexicalScope::Data*> newLexicalScopeData(ParseContext::Scope& scope);
Node finishLexicalScope(ParseContext::Scope& scope, Node body);
- Node propertyName(YieldHandling yieldHandling, Node propList,
+ Node propertyName(YieldHandling yieldHandling,
+ const mozilla::Maybe<DeclarationKind>& maybeDecl, Node propList,
PropertyType* propType, MutableHandleAtom propAtom);
- Node computedPropertyName(YieldHandling yieldHandling, Node literal);
+ Node computedPropertyName(YieldHandling yieldHandling,
+ const mozilla::Maybe<DeclarationKind>& maybeDecl, Node literal);
Node arrayInitializer(YieldHandling yieldHandling, PossibleError* possibleError);
Node newRegExp();
Node objectLiteral(YieldHandling yieldHandling, PossibleError* possibleError);
- // Top-level entrypoint into destructuring pattern checking/name-analyzing.
- bool checkDestructuringPattern(Node pattern, mozilla::Maybe<DeclarationKind> maybeDecl,
- PossibleError* possibleError = nullptr);
+ Node bindingInitializer(Node lhs, DeclarationKind kind, YieldHandling yieldHandling);
+ Node bindingIdentifier(DeclarationKind kind, YieldHandling yieldHandling);
+ Node bindingIdentifierOrPattern(DeclarationKind kind, YieldHandling yieldHandling,
+ TokenKind tt);
+ Node objectBindingPattern(DeclarationKind kind, YieldHandling yieldHandling);
+ Node arrayBindingPattern(DeclarationKind kind, YieldHandling yieldHandling);
- // Recursive methods for checking/name-analyzing subcomponents of a
- // destructuring pattern. The array/object methods *must* be passed arrays
- // or objects. The name method may be passed anything but will report an
- // error if not passed a name.
- bool checkDestructuringArray(Node arrayPattern, mozilla::Maybe<DeclarationKind> maybeDecl);
- bool checkDestructuringObject(Node objectPattern, mozilla::Maybe<DeclarationKind> maybeDecl);
- bool checkDestructuringName(Node expr, mozilla::Maybe<DeclarationKind> maybeDecl);
+ void checkDestructuringAssignmentTarget(Node expr, TokenPos exprPos,
+ PossibleError* possibleError);
+ void checkDestructuringAssignmentElement(Node expr, TokenPos exprPos,
+ PossibleError* possibleError);
Node newNumber(const Token& tok) {
return handler.newNumber(tok.number(), tok.decimalPoint(), tok.pos);
@@ -1427,12 +1530,26 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
JSAtom* prefixAccessorName(PropertyType propType, HandleAtom propAtom);
- TokenPos pos() const { return tokenStream.currentToken().pos; }
-
bool asmJS(Node list);
+};
- bool warnOnceAboutExprClosure();
- bool warnOnceAboutForEach();
+template <typename ParseHandler>
+class MOZ_STACK_CLASS AutoAwaitIsKeyword
+{
+ private:
+ Parser<ParseHandler>* parser_;
+ bool oldAwaitIsKeyword_;
+
+ public:
+ AutoAwaitIsKeyword(Parser<ParseHandler>* parser, bool awaitIsKeyword) {
+ parser_ = parser;
+ oldAwaitIsKeyword_ = parser_->awaitIsKeyword_;
+ parser_->setAwaitIsKeyword(awaitIsKeyword);
+ }
+
+ ~AutoAwaitIsKeyword() {
+ parser_->setAwaitIsKeyword(oldAwaitIsKeyword_);
+ }
};
} /* namespace frontend */
diff --git a/js/src/vm/Keywords.h b/js/src/frontend/ReservedWords.h
index ef37c4419..27f5b11c1 100644
--- a/js/src/vm/Keywords.h
+++ b/js/src/frontend/ReservedWords.h
@@ -4,15 +4,16 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-/* A higher-order macro for enumerating keyword tokens. */
+/* A higher-order macro for enumerating reserved word tokens. */
-#ifndef vm_Keywords_h
-#define vm_Keywords_h
+#ifndef vm_ReservedWords_h
+#define vm_ReservedWords_h
-#define FOR_EACH_JAVASCRIPT_KEYWORD(macro) \
+#define FOR_EACH_JAVASCRIPT_RESERVED_WORD(macro) \
macro(false, false_, TOK_FALSE) \
macro(true, true_, TOK_TRUE) \
macro(null, null, TOK_NULL) \
+ \
/* Keywords. */ \
macro(break, break_, TOK_BREAK) \
macro(case, case_, TOK_CASE) \
@@ -36,31 +37,45 @@
macro(this, this_, TOK_THIS) \
macro(throw, throw_, TOK_THROW) \
macro(try, try_, TOK_TRY) \
- macro(typeof, typeof, TOK_TYPEOF) \
+ macro(typeof, typeof_, TOK_TYPEOF) \
macro(var, var, TOK_VAR) \
macro(void, void_, TOK_VOID) \
macro(while, while_, TOK_WHILE) \
macro(with, with, TOK_WITH) \
macro(import, import, TOK_IMPORT) \
- macro(export, export, TOK_EXPORT) \
+ macro(export, export_, TOK_EXPORT) \
macro(class, class_, TOK_CLASS) \
macro(extends, extends, TOK_EXTENDS) \
macro(super, super, TOK_SUPER) \
- /* Reserved keywords. */ \
- macro(enum, enum_, TOK_RESERVED) \
- /* Future reserved keywords, but only in strict mode. */ \
- macro(implements, implements, TOK_STRICT_RESERVED) \
- macro(interface, interface, TOK_STRICT_RESERVED) \
- macro(package, package, TOK_STRICT_RESERVED) \
- macro(private, private_, TOK_STRICT_RESERVED) \
- macro(protected, protected_, TOK_STRICT_RESERVED) \
- macro(public, public_, TOK_STRICT_RESERVED) \
+ \
+ /* Future reserved words. */ \
+ macro(enum, enum_, TOK_ENUM) \
+ \
+ /* Future reserved words, but only in strict mode. */ \
+ macro(implements, implements, TOK_IMPLEMENTS) \
+ macro(interface, interface, TOK_INTERFACE) \
+ macro(package, package, TOK_PACKAGE) \
+ macro(private, private_, TOK_PRIVATE) \
+ macro(protected, protected_, TOK_PROTECTED) \
+ macro(public, public_, TOK_PUBLIC) \
+ \
+ /* Contextual keywords. */ \
+ macro(as, as, TOK_AS) \
+ macro(async, async, TOK_ASYNC) \
macro(await, await, TOK_AWAIT) \
+ macro(each, each, TOK_EACH) \
+ macro(from, from, TOK_FROM) \
+ macro(get, get, TOK_GET) \
+ macro(let, let, TOK_LET) \
+ macro(of, of, TOK_OF) \
+ macro(set, set, TOK_SET) \
+ macro(static, static_, TOK_STATIC) \
+ macro(target, target, TOK_TARGET) \
/* \
* Yield is a token inside function*. Outside of a function*, it is a \
- * future reserved keyword in strict mode, but a keyword in JS1.7 even \
+ * future reserved word in strict mode, but a keyword in JS1.7 even \
* when strict. Punt logic to parser. \
*/ \
macro(yield, yield, TOK_YIELD)
-#endif /* vm_Keywords_h */
+#endif /* vm_ReservedWords_h */
diff --git a/js/src/frontend/SharedContext.h b/js/src/frontend/SharedContext.h
index b20417d5d..013444690 100644
--- a/js/src/frontend/SharedContext.h
+++ b/js/src/frontend/SharedContext.h
@@ -38,6 +38,7 @@ enum class StatementKind : uint8_t
ForOfLoop,
DoLoop,
WhileLoop,
+ Class,
// Used only by BytecodeEmitter.
Spread
@@ -450,7 +451,8 @@ class FunctionBox : public ObjectBox, public SharedContext
uint32_t bufEnd;
uint32_t startLine;
uint32_t startColumn;
- uint32_t preludeStart;
+ uint32_t toStringStart;
+ uint32_t toStringEnd;
uint16_t length;
uint8_t generatorKindBits_; /* The GeneratorKind of this function. */
@@ -473,11 +475,14 @@ class FunctionBox : public ObjectBox, public SharedContext
bool usesThis:1; /* contains 'this' */
bool usesReturn:1; /* contains a 'return' statement */
bool hasRest_:1; /* has rest parameter */
+ bool isExprBody_:1; /* arrow function with expression
+ * body or expression closure:
+ * function(x) x*x */
FunctionContextFlags funCxFlags;
FunctionBox(ExclusiveContext* cx, LifoAlloc& alloc, ObjectBox* traceListHead, JSFunction* fun,
- uint32_t preludeStart, Directives directives, bool extraWarnings,
+ uint32_t toStringStart, Directives directives, bool extraWarnings,
GeneratorKind generatorKind, FunctionAsyncKind asyncKind);
MutableHandle<LexicalScope::Data*> namedLambdaBindings() {
@@ -546,6 +551,11 @@ class FunctionBox : public ObjectBox, public SharedContext
hasRest_ = true;
}
+ bool isExprBody() const { return isExprBody_; }
+ void setIsExprBody() {
+ isExprBody_ = true;
+ }
+
void setGeneratorKind(GeneratorKind kind) {
// A generator kind can be set at initialization, or when "yield" is
// first seen. In both cases the transition can only happen from
@@ -595,6 +605,14 @@ class FunctionBox : public ObjectBox, public SharedContext
tokenStream.srcCoords.lineNumAndColumnIndex(bufStart, &startLine, &startColumn);
}
+ void setEnd(uint32_t end) {
+ // For all functions except class constructors, the buffer and
+ // toString ending positions are the same. Class constructors override
+ // the toString ending position with the end of the class definition.
+ bufEnd = end;
+ toStringEnd = end;
+ }
+
void trace(JSTracer* trc) override;
};
diff --git a/js/src/frontend/SourceNotes.h b/js/src/frontend/SourceNotes.h
index dd2a95ad1..6ae184ae4 100644
--- a/js/src/frontend/SourceNotes.h
+++ b/js/src/frontend/SourceNotes.h
@@ -56,13 +56,14 @@ namespace js {
M(SRC_NEXTCASE, "nextcase", 1) /* Distance forward from one CASE in a CONDSWITCH to \
the next. */ \
M(SRC_ASSIGNOP, "assignop", 0) /* += or another assign-op follows. */ \
+ M(SRC_CLASS_SPAN, "class", 2) /* The starting and ending offsets for the class, used \
+ for toString correctness for default ctors. */ \
M(SRC_TRY, "try", 1) /* JSOP_TRY, offset points to goto at the end of the \
try block. */ \
/* All notes above here are "gettable". See SN_IS_GETTABLE below. */ \
M(SRC_COLSPAN, "colspan", 1) /* Number of columns this opcode spans. */ \
M(SRC_NEWLINE, "newline", 0) /* Bytecode follows a source newline. */ \
M(SRC_SETLINE, "setline", 1) /* A file-absolute source line number note. */ \
- M(SRC_UNUSED20, "unused20", 0) /* Unused. */ \
M(SRC_UNUSED21, "unused21", 0) /* Unused. */ \
M(SRC_UNUSED22, "unused22", 0) /* Unused. */ \
M(SRC_UNUSED23, "unused23", 0) /* Unused. */ \
diff --git a/js/src/frontend/SyntaxParseHandler.h b/js/src/frontend/SyntaxParseHandler.h
index 00ea9d35d..a604b599f 100644
--- a/js/src/frontend/SyntaxParseHandler.h
+++ b/js/src/frontend/SyntaxParseHandler.h
@@ -9,6 +9,8 @@
#include "mozilla/Attributes.h"
+#include <string.h>
+
#include "frontend/ParseNode.h"
#include "frontend/TokenStream.h"
@@ -94,10 +96,13 @@ class SyntaxParseHandler
// Nodes representing unparenthesized names.
NodeUnparenthesizedArgumentsName,
- NodeUnparenthesizedAsyncName,
NodeUnparenthesizedEvalName,
NodeUnparenthesizedName,
+ // Node representing the "async" name, which may actually be a
+ // contextual keyword.
+ NodePotentialAsyncKeyword,
+
// Valuable for recognizing potential destructuring patterns.
NodeUnparenthesizedArray,
NodeUnparenthesizedObject,
@@ -183,8 +188,8 @@ class SyntaxParseHandler
lastAtom = name;
if (name == cx->names().arguments)
return NodeUnparenthesizedArgumentsName;
- if (name == cx->names().async)
- return NodeUnparenthesizedAsyncName;
+ if (pos.begin + strlen("async") == pos.end && name == cx->names().async)
+ return NodePotentialAsyncKeyword;
if (name == cx->names().eval)
return NodeUnparenthesizedEvalName;
return NodeUnparenthesizedName;
@@ -219,6 +224,7 @@ class SyntaxParseHandler
Node newThisLiteral(const TokenPos& pos, Node thisName) { return NodeGeneric; }
Node newNullLiteral(const TokenPos& pos) { return NodeGeneric; }
+ Node newRawUndefinedLiteral(const TokenPos& pos) { return NodeGeneric; }
template <class Boxer>
Node newRegExp(RegExpObject* reobj, const TokenPos& pos, Boxer& boxer) { return NodeGeneric; }
@@ -235,6 +241,10 @@ class SyntaxParseHandler
return NodeUnparenthesizedUnary;
}
+ Node newNullary(ParseNodeKind kind, JSOp op, const TokenPos& pos) {
+ return NodeGeneric;
+ }
+
Node newUnary(ParseNodeKind kind, JSOp op, uint32_t begin, Node kid) {
return NodeUnparenthesizedUnary;
}
@@ -279,7 +289,7 @@ class SyntaxParseHandler
Node newObjectLiteral(uint32_t begin) { return NodeUnparenthesizedObject; }
Node newClassMethodList(uint32_t begin) { return NodeGeneric; }
Node newClassNames(Node outer, Node inner, const TokenPos& pos) { return NodeGeneric; }
- Node newClass(Node name, Node heritage, Node methodBlock) { return NodeGeneric; }
+ Node newClass(Node name, Node heritage, Node methodBlock, const TokenPos& pos) { return NodeGeneric; }
Node newNewTarget(Node newHolder, Node targetHolder) { return NodeGeneric; }
Node newPosHolder(const TokenPos& pos) { return NodeGeneric; }
@@ -288,6 +298,7 @@ class SyntaxParseHandler
MOZ_MUST_USE bool addPrototypeMutation(Node literal, uint32_t begin, Node expr) { return true; }
MOZ_MUST_USE bool addPropertyDefinition(Node literal, Node name, Node expr) { return true; }
MOZ_MUST_USE bool addShorthand(Node literal, Node name, Node expr) { return true; }
+ MOZ_MUST_USE bool addSpreadProperty(Node literal, uint32_t begin, Node inner) { return true; }
MOZ_MUST_USE bool addObjectMethodDefinition(Node literal, Node name, Node fn, JSOp op) { return true; }
MOZ_MUST_USE bool addClassMethodDefinition(Node literal, Node name, Node fn, JSOp op, bool isStatic) { return true; }
Node newYieldExpression(uint32_t begin, Node value, Node gen) { return NodeGeneric; }
@@ -302,6 +313,16 @@ class SyntaxParseHandler
MOZ_MUST_USE bool prependInitialYield(Node stmtList, Node gen) { return true; }
Node newEmptyStatement(const TokenPos& pos) { return NodeEmptyStatement; }
+ Node newExportDeclaration(Node kid, const TokenPos& pos) {
+ return NodeGeneric;
+ }
+ Node newExportFromDeclaration(uint32_t begin, Node exportSpecSet, Node moduleSpec) {
+ return NodeGeneric;
+ }
+ Node newExportDefaultDeclaration(Node kid, Node maybeBinding, const TokenPos& pos) {
+ return NodeGeneric;
+ }
+
Node newSetThis(Node thisName, Node value) { return value; }
Node newExprStatement(Node expr, uint32_t end) {
@@ -497,7 +518,7 @@ class SyntaxParseHandler
return NodeParenthesizedArgumentsName;
if (node == NodeUnparenthesizedEvalName)
return NodeParenthesizedEvalName;
- if (node == NodeUnparenthesizedName || node == NodeUnparenthesizedAsyncName)
+ if (node == NodeUnparenthesizedName || node == NodePotentialAsyncKeyword)
return NodeParenthesizedName;
if (node == NodeUnparenthesizedArray)
@@ -528,9 +549,9 @@ class SyntaxParseHandler
bool isUnparenthesizedName(Node node) {
return node == NodeUnparenthesizedArgumentsName ||
- node == NodeUnparenthesizedAsyncName ||
node == NodeUnparenthesizedEvalName ||
- node == NodeUnparenthesizedName;
+ node == NodeUnparenthesizedName ||
+ node == NodePotentialAsyncKeyword;
}
bool isNameAnyParentheses(Node node) {
@@ -541,9 +562,11 @@ class SyntaxParseHandler
node == NodeParenthesizedName;
}
- bool nameIsEvalAnyParentheses(Node node, ExclusiveContext* cx) {
- MOZ_ASSERT(isNameAnyParentheses(node),
- "must only call this function on known names");
+ bool isArgumentsAnyParentheses(Node node, ExclusiveContext* cx) {
+ return node == NodeUnparenthesizedArgumentsName || node == NodeParenthesizedArgumentsName;
+ }
+
+ bool isEvalAnyParentheses(Node node, ExclusiveContext* cx) {
return node == NodeUnparenthesizedEvalName || node == NodeParenthesizedEvalName;
}
@@ -551,17 +574,15 @@ class SyntaxParseHandler
MOZ_ASSERT(isNameAnyParentheses(node),
"must only call this method on known names");
- if (nameIsEvalAnyParentheses(node, cx))
+ if (isEvalAnyParentheses(node, cx))
return js_eval_str;
- if (node == NodeUnparenthesizedArgumentsName || node == NodeParenthesizedArgumentsName)
+ if (isArgumentsAnyParentheses(node, cx))
return js_arguments_str;
return nullptr;
}
- bool nameIsUnparenthesizedAsync(Node node, ExclusiveContext* cx) {
- MOZ_ASSERT(isNameAnyParentheses(node),
- "must only call this function on known names");
- return node == NodeUnparenthesizedAsyncName;
+ bool isAsyncKeyword(Node node, ExclusiveContext* cx) {
+ return node == NodePotentialAsyncKeyword;
}
PropertyName* maybeDottedProperty(Node node) {
diff --git a/js/src/frontend/TokenKind.h b/js/src/frontend/TokenKind.h
index 6f22d78e5..98f23fec8 100644
--- a/js/src/frontend/TokenKind.h
+++ b/js/src/frontend/TokenKind.h
@@ -81,9 +81,12 @@
\
macro(REGEXP, "regular expression literal") \
macro(TRUE, "boolean literal 'true'") \
+ range(RESERVED_WORD_LITERAL_FIRST, TRUE) \
macro(FALSE, "boolean literal 'false'") \
macro(NULL, "null literal") \
+ range(RESERVED_WORD_LITERAL_LAST, NULL) \
macro(THIS, "keyword 'this'") \
+ range(KEYWORD_FIRST, THIS) \
macro(FUNCTION, "keyword 'function'") \
macro(IF, "keyword 'if'") \
macro(ELSE, "keyword 'else'") \
@@ -106,16 +109,43 @@
macro(FINALLY, "keyword 'finally'") \
macro(THROW, "keyword 'throw'") \
macro(DEBUGGER, "keyword 'debugger'") \
- macro(YIELD, "keyword 'yield'") \
- macro(AWAIT, "keyword 'await'") \
macro(EXPORT, "keyword 'export'") \
macro(IMPORT, "keyword 'import'") \
macro(CLASS, "keyword 'class'") \
macro(EXTENDS, "keyword 'extends'") \
macro(SUPER, "keyword 'super'") \
- macro(RESERVED, "reserved keyword") \
- /* reserved keywords in strict mode */ \
- macro(STRICT_RESERVED, "reserved keyword") \
+ range(KEYWORD_LAST, SUPER) \
+ \
+ /* contextual keywords */ \
+ macro(AS, "'as'") \
+ range(CONTEXTUAL_KEYWORD_FIRST, AS) \
+ macro(ASYNC, "'async'") \
+ macro(AWAIT, "'await'") \
+ macro(EACH, "'each'") \
+ macro(FROM, "'from'") \
+ macro(GET, "'get'") \
+ macro(LET, "'let'") \
+ macro(OF, "'of'") \
+ macro(SET, "'set'") \
+ macro(STATIC, "'static'") \
+ macro(TARGET, "'target'") \
+ macro(YIELD, "'yield'") \
+ range(CONTEXTUAL_KEYWORD_LAST, YIELD) \
+ \
+ /* future reserved words */ \
+ macro(ENUM, "reserved word 'enum'") \
+ range(FUTURE_RESERVED_KEYWORD_FIRST, ENUM) \
+ range(FUTURE_RESERVED_KEYWORD_LAST, ENUM) \
+ \
+ /* reserved words in strict mode */ \
+ macro(IMPLEMENTS, "reserved word 'implements'") \
+ range(STRICT_RESERVED_KEYWORD_FIRST, IMPLEMENTS) \
+ macro(INTERFACE, "reserved word 'interface'") \
+ macro(PACKAGE, "reserved word 'package'") \
+ macro(PRIVATE, "reserved word 'private'") \
+ macro(PROTECTED, "reserved word 'protected'") \
+ macro(PUBLIC, "reserved word 'public'") \
+ range(STRICT_RESERVED_KEYWORD_LAST, PUBLIC) \
\
/* \
* The following token types occupy contiguous ranges to enable easy \
@@ -149,7 +179,9 @@
range(RELOP_LAST, GE) \
\
macro(INSTANCEOF, "keyword 'instanceof'") \
+ range(KEYWORD_BINOP_FIRST, INSTANCEOF) \
macro(IN, "keyword 'in'") \
+ range(KEYWORD_BINOP_LAST, IN) \
\
/* Shift ops, per TokenKindIsShift. */ \
macro(LSH, "'<<'") \
@@ -168,7 +200,9 @@
\
/* Unary operation tokens. */ \
macro(TYPEOF, "keyword 'typeof'") \
+ range(KEYWORD_UNOP_FIRST, TYPEOF) \
macro(VOID, "keyword 'void'") \
+ range(KEYWORD_UNOP_LAST, VOID) \
macro(NOT, "'!'") \
macro(BITNOT, "'~'") \
\
@@ -239,6 +273,61 @@ TokenKindIsAssignment(TokenKind tt)
return TOK_ASSIGNMENT_START <= tt && tt <= TOK_ASSIGNMENT_LAST;
}
+inline MOZ_MUST_USE bool
+TokenKindIsKeyword(TokenKind tt)
+{
+ return (TOK_KEYWORD_FIRST <= tt && tt <= TOK_KEYWORD_LAST) ||
+ (TOK_KEYWORD_BINOP_FIRST <= tt && tt <= TOK_KEYWORD_BINOP_LAST) ||
+ (TOK_KEYWORD_UNOP_FIRST <= tt && tt <= TOK_KEYWORD_UNOP_LAST);
+}
+
+inline MOZ_MUST_USE bool
+TokenKindIsContextualKeyword(TokenKind tt)
+{
+ return TOK_CONTEXTUAL_KEYWORD_FIRST <= tt && tt <= TOK_CONTEXTUAL_KEYWORD_LAST;
+}
+
+inline MOZ_MUST_USE bool
+TokenKindIsFutureReservedWord(TokenKind tt)
+{
+ return TOK_FUTURE_RESERVED_KEYWORD_FIRST <= tt && tt <= TOK_FUTURE_RESERVED_KEYWORD_LAST;
+}
+
+inline MOZ_MUST_USE bool
+TokenKindIsStrictReservedWord(TokenKind tt)
+{
+ return TOK_STRICT_RESERVED_KEYWORD_FIRST <= tt && tt <= TOK_STRICT_RESERVED_KEYWORD_LAST;
+}
+
+inline MOZ_MUST_USE bool
+TokenKindIsReservedWordLiteral(TokenKind tt)
+{
+ return TOK_RESERVED_WORD_LITERAL_FIRST <= tt && tt <= TOK_RESERVED_WORD_LITERAL_LAST;
+}
+
+inline MOZ_MUST_USE bool
+TokenKindIsReservedWord(TokenKind tt)
+{
+ return TokenKindIsKeyword(tt) ||
+ TokenKindIsFutureReservedWord(tt) ||
+ TokenKindIsReservedWordLiteral(tt);
+}
+
+inline MOZ_MUST_USE bool
+TokenKindIsPossibleIdentifier(TokenKind tt)
+{
+ return tt == TOK_NAME ||
+ TokenKindIsContextualKeyword(tt) ||
+ TokenKindIsStrictReservedWord(tt);
+}
+
+inline MOZ_MUST_USE bool
+TokenKindIsPossibleIdentifierName(TokenKind tt)
+{
+ return TokenKindIsPossibleIdentifier(tt) ||
+ TokenKindIsReservedWord(tt);
+}
+
} // namespace frontend
} // namespace js
diff --git a/js/src/frontend/TokenStream.cpp b/js/src/frontend/TokenStream.cpp
index 8438ff7c5..b8623d545 100644
--- a/js/src/frontend/TokenStream.cpp
+++ b/js/src/frontend/TokenStream.cpp
@@ -8,6 +8,7 @@
#include "frontend/TokenStream.h"
+#include "mozilla/ArrayUtils.h"
#include "mozilla/IntegerTypeTraits.h"
#include "mozilla/PodOperations.h"
@@ -23,80 +24,81 @@
#include "jsnum.h"
#include "frontend/BytecodeCompiler.h"
+#include "frontend/ReservedWords.h"
#include "js/CharacterEncoding.h"
#include "js/UniquePtr.h"
#include "vm/HelperThreads.h"
-#include "vm/Keywords.h"
#include "vm/StringBuffer.h"
#include "vm/Unicode.h"
using namespace js;
using namespace js::frontend;
+using mozilla::ArrayLength;
using mozilla::Maybe;
using mozilla::PodAssign;
using mozilla::PodCopy;
using mozilla::PodZero;
-struct KeywordInfo {
- const char* chars; // C string with keyword text
+struct ReservedWordInfo {
+ const char* chars; // C string with reserved word text
TokenKind tokentype;
};
-static const KeywordInfo keywords[] = {
-#define KEYWORD_INFO(keyword, name, type) \
- {js_##keyword##_str, type},
- FOR_EACH_JAVASCRIPT_KEYWORD(KEYWORD_INFO)
-#undef KEYWORD_INFO
+static const ReservedWordInfo reservedWords[] = {
+#define RESERVED_WORD_INFO(word, name, type) \
+ {js_##word##_str, type},
+ FOR_EACH_JAVASCRIPT_RESERVED_WORD(RESERVED_WORD_INFO)
+#undef RESERVED_WORD_INFO
};
-// Returns a KeywordInfo for the specified characters, or nullptr if the string
-// is not a keyword.
+// Returns a ReservedWordInfo for the specified characters, or nullptr if the
+// string is not a reserved word.
template <typename CharT>
-static const KeywordInfo*
-FindKeyword(const CharT* s, size_t length)
+static const ReservedWordInfo*
+FindReservedWord(const CharT* s, size_t length)
{
MOZ_ASSERT(length != 0);
size_t i;
- const KeywordInfo* kw;
+ const ReservedWordInfo* rw;
const char* chars;
-#define JSKW_LENGTH() length
-#define JSKW_AT(column) s[column]
-#define JSKW_GOT_MATCH(index) i = (index); goto got_match;
-#define JSKW_TEST_GUESS(index) i = (index); goto test_guess;
-#define JSKW_NO_MATCH() goto no_match;
-#include "jsautokw.h"
-#undef JSKW_NO_MATCH
-#undef JSKW_TEST_GUESS
-#undef JSKW_GOT_MATCH
-#undef JSKW_AT
-#undef JSKW_LENGTH
+#define JSRW_LENGTH() length
+#define JSRW_AT(column) s[column]
+#define JSRW_GOT_MATCH(index) i = (index); goto got_match;
+#define JSRW_TEST_GUESS(index) i = (index); goto test_guess;
+#define JSRW_NO_MATCH() goto no_match;
+#include "frontend/ReservedWordsGenerated.h"
+#undef JSRW_NO_MATCH
+#undef JSRW_TEST_GUESS
+#undef JSRW_GOT_MATCH
+#undef JSRW_AT
+#undef JSRW_LENGTH
got_match:
- return &keywords[i];
+ return &reservedWords[i];
test_guess:
- kw = &keywords[i];
- chars = kw->chars;
+ rw = &reservedWords[i];
+ chars = rw->chars;
do {
if (*s++ != (unsigned char)(*chars++))
goto no_match;
} while (--length != 0);
- return kw;
+ return rw;
no_match:
return nullptr;
}
-static const KeywordInfo*
-FindKeyword(JSLinearString* str)
+static const ReservedWordInfo*
+FindReservedWord(JSLinearString* str)
{
JS::AutoCheckCannotGC nogc;
return str->hasLatin1Chars()
- ? FindKeyword(str->latin1Chars(nogc), str->length())
- : FindKeyword(str->twoByteChars(nogc), str->length());
+ ? FindReservedWord(str->latin1Chars(nogc), str->length())
+ : FindReservedWord(str->twoByteChars(nogc), str->length());
}
template <typename CharT>
@@ -186,7 +188,68 @@ frontend::IsIdentifier(const char16_t* chars, size_t length)
bool
frontend::IsKeyword(JSLinearString* str)
{
- return FindKeyword(str) != nullptr;
+ if (const ReservedWordInfo* rw = FindReservedWord(str))
+ return TokenKindIsKeyword(rw->tokentype);
+
+ return false;
+}
+
+bool
+frontend::IsFutureReservedWord(JSLinearString* str)
+{
+ if (const ReservedWordInfo* rw = FindReservedWord(str))
+ return TokenKindIsFutureReservedWord(rw->tokentype);
+
+ return false;
+}
+
+bool
+frontend::IsStrictReservedWord(JSLinearString* str)
+{
+ if (const ReservedWordInfo* rw = FindReservedWord(str))
+ return TokenKindIsStrictReservedWord(rw->tokentype);
+
+ return false;
+}
+
+bool
+frontend::IsReservedWordLiteral(JSLinearString* str)
+{
+ if (const ReservedWordInfo* rw = FindReservedWord(str))
+ return TokenKindIsReservedWordLiteral(rw->tokentype);
+
+ return false;
+}
+
+const char*
+frontend::ReservedWordToCharZ(PropertyName* str)
+{
+ const ReservedWordInfo* rw = FindReservedWord(str);
+ if (rw == nullptr)
+ return nullptr;
+
+ switch (rw->tokentype) {
+#define EMIT_CASE(word, name, type) case type: return js_##word##_str;
+ FOR_EACH_JAVASCRIPT_RESERVED_WORD(EMIT_CASE)
+#undef EMIT_CASE
+ default:
+ MOZ_ASSERT_UNREACHABLE("Not a reserved word PropertyName.");
+ }
+ return nullptr;
+}
+
+PropertyName*
+TokenStream::reservedWordToPropertyName(TokenKind tt) const
+{
+ MOZ_ASSERT(tt != TOK_NAME);
+ switch (tt) {
+#define EMIT_CASE(word, name, type) case type: return cx->names().name;
+ FOR_EACH_JAVASCRIPT_RESERVED_WORD(EMIT_CASE)
+#undef EMIT_CASE
+ default:
+ MOZ_ASSERT_UNREACHABLE("Not a reserved word TokenKind.");
+ }
+ return nullptr;
}
TokenStream::SourceCoords::SourceCoords(ExclusiveContext* cx, uint32_t ln)
@@ -223,8 +286,13 @@ TokenStream::SourceCoords::add(uint32_t lineNum, uint32_t lineStartOffset)
// only if lineStartOffsets_.append succeeds, to keep sentinel.
// Otherwise return false to tell TokenStream about OOM.
uint32_t maxPtr = MAX_PTR;
- if (!lineStartOffsets_.append(maxPtr))
+ if (!lineStartOffsets_.append(maxPtr)) {
+ static_assert(mozilla::IsSame<decltype(lineStartOffsets_.allocPolicy()),
+ TempAllocPolicy&>::value,
+ "this function's caller depends on it reporting an "
+ "error on failure, as TempAllocPolicy ensures");
return false;
+ }
lineStartOffsets_[lineIndex] = lineStartOffset;
} else {
@@ -554,8 +622,9 @@ TokenStream::advance(size_t position)
MOZ_MAKE_MEM_UNDEFINED(&cur->type, sizeof(cur->type));
lookahead = 0;
- if (flags.hitOOM)
- return reportError(JSMSG_OUT_OF_MEMORY);
+ if (flags.hitOOM) {
+ return false;
+ }
return true;
}
@@ -599,8 +668,8 @@ TokenStream::seek(const Position& pos, const TokenStream& other)
}
bool
-TokenStream::reportStrictModeErrorNumberVA(uint32_t offset, bool strictMode, unsigned errorNumber,
- va_list args)
+TokenStream::reportStrictModeErrorNumberVA(UniquePtr<JSErrorNotes> notes, uint32_t offset,
+ bool strictMode, unsigned errorNumber, va_list args)
{
// In strict mode code, this is an error, not merely a warning.
unsigned flags;
@@ -611,7 +680,7 @@ TokenStream::reportStrictModeErrorNumberVA(uint32_t offset, bool strictMode, uns
else
return true;
- return reportCompileErrorNumberVA(offset, flags, errorNumber, args);
+ return reportCompileErrorNumberVA(Move(notes), offset, flags, errorNumber, args);
}
void
@@ -637,8 +706,8 @@ CompileError::throwError(JSContext* cx)
}
bool
-TokenStream::reportCompileErrorNumberVA(uint32_t offset, unsigned flags, unsigned errorNumber,
- va_list args)
+TokenStream::reportCompileErrorNumberVA(UniquePtr<JSErrorNotes> notes, uint32_t offset,
+ unsigned flags, unsigned errorNumber, va_list args)
{
bool warning = JSREPORT_IS_WARNING(flags);
@@ -655,6 +724,7 @@ TokenStream::reportCompileErrorNumberVA(uint32_t offset, unsigned flags, unsigne
return false;
CompileError& err = *tempErrPtr;
+ err.notes = Move(notes);
err.flags = flags;
err.errorNumber = errorNumber;
err.filename = filename;
@@ -746,7 +816,7 @@ TokenStream::reportStrictModeError(unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
- bool result = reportStrictModeErrorNumberVA(currentToken().pos.begin, strictMode(),
+ bool result = reportStrictModeErrorNumberVA(nullptr, currentToken().pos.begin, strictMode(),
errorNumber, args);
va_end(args);
return result;
@@ -757,8 +827,8 @@ TokenStream::reportError(unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
- bool result = reportCompileErrorNumberVA(currentToken().pos.begin, JSREPORT_ERROR, errorNumber,
- args);
+ bool result = reportCompileErrorNumberVA(nullptr, currentToken().pos.begin, JSREPORT_ERROR,
+ errorNumber, args);
va_end(args);
return result;
}
@@ -768,30 +838,32 @@ TokenStream::reportErrorNoOffset(unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
- bool result = reportCompileErrorNumberVA(NoOffset, JSREPORT_ERROR, errorNumber,
- args);
+ bool result = reportCompileErrorNumberVA(nullptr, NoOffset, JSREPORT_ERROR,
+ errorNumber, args);
va_end(args);
return result;
}
bool
-TokenStream::reportWarning(unsigned errorNumber, ...)
+TokenStream::warning(unsigned errorNumber, ...)
{
va_list args;
va_start(args, errorNumber);
- bool result = reportCompileErrorNumberVA(currentToken().pos.begin, JSREPORT_WARNING,
+ bool result = reportCompileErrorNumberVA(nullptr, currentToken().pos.begin, JSREPORT_WARNING,
errorNumber, args);
va_end(args);
return result;
}
bool
-TokenStream::reportExtraWarningErrorNumberVA(uint32_t offset, unsigned errorNumber, va_list args)
+TokenStream::reportExtraWarningErrorNumberVA(UniquePtr<JSErrorNotes> notes, uint32_t offset,
+ unsigned errorNumber, va_list args)
{
if (!options().extraWarningsOption)
return true;
- return reportCompileErrorNumberVA(offset, JSREPORT_STRICT|JSREPORT_WARNING, errorNumber, args);
+ return reportCompileErrorNumberVA(Move(notes), offset, JSREPORT_STRICT|JSREPORT_WARNING,
+ errorNumber, args);
}
void
@@ -802,7 +874,34 @@ TokenStream::reportAsmJSError(uint32_t offset, unsigned errorNumber, ...)
unsigned flags = options().throwOnAsmJSValidationFailureOption
? JSREPORT_ERROR
: JSREPORT_WARNING;
- reportCompileErrorNumberVA(offset, flags, errorNumber, args);
+ reportCompileErrorNumberVA(nullptr, offset, flags, errorNumber, args);
+ va_end(args);
+}
+
+void
+TokenStream::error(unsigned errorNumber, ...)
+{
+ va_list args;
+ va_start(args, errorNumber);
+#ifdef DEBUG
+ bool result =
+#endif
+ reportCompileErrorNumberVA(nullptr, currentToken().pos.begin, JSREPORT_ERROR,
+ errorNumber, args);
+ MOZ_ASSERT(!result, "reporting an error returned true?");
+ va_end(args);
+}
+
+void
+TokenStream::errorAt(uint32_t offset, unsigned errorNumber, ...)
+{
+ va_list args;
+ va_start(args, errorNumber);
+#ifdef DEBUG
+ bool result =
+#endif
+ reportCompileErrorNumberVA(nullptr, offset, JSREPORT_ERROR, errorNumber, args);
+ MOZ_ASSERT(!result, "reporting an error returned true?");
va_end(args);
}
@@ -934,34 +1033,49 @@ TokenStream::getDirectives(bool isMultiline, bool shouldWarnDeprecated)
bool
TokenStream::getDirective(bool isMultiline, bool shouldWarnDeprecated,
- const char* directive, int directiveLength,
+ const char* directive, uint8_t directiveLength,
const char* errorMsgPragma,
UniqueTwoByteChars* destination)
{
MOZ_ASSERT(directiveLength <= 18);
char16_t peeked[18];
- int32_t c;
if (peekChars(directiveLength, peeked) && CharsMatch(peeked, directive)) {
- if (shouldWarnDeprecated &&
- !reportWarning(JSMSG_DEPRECATED_PRAGMA, errorMsgPragma))
- return false;
+ if (shouldWarnDeprecated) {
+ if (!warning(JSMSG_DEPRECATED_PRAGMA, errorMsgPragma))
+ return false;
+ }
skipChars(directiveLength);
tokenbuf.clear();
- while ((c = peekChar()) && c != EOF && !unicode::IsSpaceOrBOM2(c)) {
- getChar();
+ do {
+ int32_t c;
+ if (!peekChar(&c))
+ return false;
+
+ if (c == EOF || unicode::IsSpaceOrBOM2(c))
+ break;
+
+ consumeKnownChar(c);
+
// Debugging directives can occur in both single- and multi-line
// comments. If we're currently inside a multi-line comment, we also
// need to recognize multi-line comment terminators.
- if (isMultiline && c == '*' && peekChar() == '/') {
- ungetChar('*');
- break;
+ if (isMultiline && c == '*') {
+ int32_t c2;
+ if (!peekChar(&c2))
+ return false;
+
+ if (c2 == '/') {
+ ungetChar('*');
+ break;
+ }
}
+
if (!tokenbuf.append(c))
return false;
- }
+ } while (true);
if (tokenbuf.empty()) {
// The directive's URL was missing, but this is not quite an
@@ -993,7 +1107,10 @@ TokenStream::getDisplayURL(bool isMultiline, bool shouldWarnDeprecated)
// developer would like to refer to the source as from the source's actual
// URL.
- return getDirective(isMultiline, shouldWarnDeprecated, " sourceURL=", 11,
+ static const char sourceURLDirective[] = " sourceURL=";
+ constexpr uint8_t sourceURLDirectiveLength = ArrayLength(sourceURLDirective) - 1;
+ return getDirective(isMultiline, shouldWarnDeprecated,
+ sourceURLDirective, sourceURLDirectiveLength,
"sourceURL", &displayURL_);
}
@@ -1003,7 +1120,10 @@ TokenStream::getSourceMappingURL(bool isMultiline, bool shouldWarnDeprecated)
// Match comments of the form "//# sourceMappingURL=<url>" or
// "/\* //# sourceMappingURL=<url> *\/"
- return getDirective(isMultiline, shouldWarnDeprecated, " sourceMappingURL=", 18,
+ static const char sourceMappingURLDirective[] = " sourceMappingURL=";
+ constexpr uint8_t sourceMappingURLDirectiveLength = ArrayLength(sourceMappingURLDirective) - 1;
+ return getDirective(isMultiline, shouldWarnDeprecated,
+ sourceMappingURLDirective, sourceMappingURLDirectiveLength,
"sourceMappingURL", &sourceMapURL_);
}
@@ -1110,36 +1230,6 @@ TokenStream::putIdentInTokenbuf(const char16_t* identStart)
return true;
}
-bool
-TokenStream::checkForKeyword(const KeywordInfo* kw, TokenKind* ttp)
-{
- if (!awaitIsKeyword && kw->tokentype == TOK_AWAIT) {
- if (ttp)
- *ttp = TOK_NAME;
- return true;
- }
-
- if (kw->tokentype == TOK_RESERVED)
- return reportError(JSMSG_RESERVED_ID, kw->chars);
-
- if (kw->tokentype == TOK_STRICT_RESERVED)
- return reportStrictModeError(JSMSG_RESERVED_ID, kw->chars);
-
- // Working keyword.
- *ttp = kw->tokentype;
- return true;
-}
-
-bool
-TokenStream::checkForKeyword(JSAtom* atom, TokenKind* ttp)
-{
- const KeywordInfo* kw = FindKeyword(atom);
- if (!kw)
- return true;
-
- return checkForKeyword(kw, ttp);
-}
-
enum FirstCharKind {
// A char16_t has the 'OneChar' kind if it, by itself, constitutes a valid
// token that cannot also be a prefix of a longer token. E.g. ';' has the
@@ -1363,36 +1453,18 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
length = userbuf.addressOfNextRawChar() - identStart;
}
- // Represent keywords as keyword tokens unless told otherwise.
- if (modifier != KeywordIsName) {
- if (const KeywordInfo* kw = FindKeyword(chars, length)) {
- // That said, keywords can't contain escapes. (Contexts where
- // keywords are treated as names, that also sometimes treat
- // keywords as keywords, must manually check this requirement.)
- // There are two exceptions
- // 1) StrictReservedWords: These keywords need to be treated as
- // names in non-strict mode.
- // 2) yield is also treated as a name if it contains an escape
- // sequence. The parser must handle this case separately.
- if (hadUnicodeEscape && !(
- (kw->tokentype == TOK_STRICT_RESERVED && !strictMode()) ||
- kw->tokentype == TOK_YIELD))
- {
- reportError(JSMSG_ESCAPED_KEYWORD);
- goto error;
- }
-
- tp->type = TOK_NAME;
- if (!checkForKeyword(kw, &tp->type))
- goto error;
- if (tp->type != TOK_NAME && !hadUnicodeEscape)
- goto out;
+ // Represent reserved words as reserved word tokens.
+ if (!hadUnicodeEscape) {
+ if (const ReservedWordInfo* rw = FindReservedWord(chars, length)) {
+ tp->type = rw->tokentype;
+ goto out;
}
}
JSAtom* atom = AtomizeChars(cx, chars, length);
- if (!atom)
+ if (!atom) {
goto error;
+ }
tp->type = TOK_NAME;
tp->setName(atom->asPropertyName());
goto out;
@@ -1538,10 +1610,11 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
// grammar. We might not always be so permissive, so we warn
// about it.
if (c >= '8') {
- if (!reportWarning(JSMSG_BAD_OCTAL, c == '8' ? "08" : "09")) {
+ if (!warning(JSMSG_BAD_OCTAL, c == '8' ? "08" : "09"))
goto error;
- }
- goto decimal; // use the decimal scanner for the rest of the number
+
+ // Use the decimal scanner for the rest of the number.
+ goto decimal;
}
c = getCharIgnoreEOL();
}
@@ -1690,7 +1763,8 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
case '/':
// Look for a single-line comment.
if (matchChar('/')) {
- c = peekChar();
+ if (!peekChar(&c))
+ goto error;
if (c == '@' || c == '#') {
bool shouldWarn = getChar() == '@';
if (!getDirectives(false, shouldWarn))
@@ -1757,7 +1831,8 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
RegExpFlag reflags = NoFlags;
unsigned length = tokenbuf.length() + 1;
while (true) {
- c = peekChar();
+ if (!peekChar(&c))
+ goto error;
if (c == 'g' && !(reflags & GlobalFlag))
reflags = RegExpFlag(reflags | GlobalFlag);
else if (c == 'i' && !(reflags & IgnoreCaseFlag))
@@ -1774,7 +1849,8 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
length++;
}
- c = peekChar();
+ if (!peekChar(&c))
+ goto error;
if (JS7_ISLET(c)) {
char buf[2] = { '\0', '\0' };
tp->pos.begin += length + 1;
@@ -1797,8 +1873,13 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
case '-':
if (matchChar('-')) {
- if (peekChar() == '>' && !flags.isDirtyLine)
+ int32_t c2;
+ if (!peekChar(&c2))
+ goto error;
+
+ if (c2 == '>' && !flags.isDirtyLine)
goto skipline;
+
tp->type = TOK_DEC;
} else {
tp->type = matchChar('=') ? TOK_SUBASSIGN : TOK_SUB;
@@ -1814,8 +1895,9 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
MOZ_CRASH("should have jumped to |out| or |error|");
out:
- if (flags.hitOOM)
- return reportError(JSMSG_OUT_OF_MEMORY);
+ if (flags.hitOOM) {
+ return false;
+ }
flags.isDirtyLine = true;
tp->pos.end = userbuf.offset();
@@ -1831,8 +1913,9 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
return true;
error:
- if (flags.hitOOM)
- return reportError(JSMSG_OUT_OF_MEMORY);
+ if (flags.hitOOM) {
+ return false;
+ }
flags.isDirtyLine = true;
tp->pos.end = userbuf.offset();
@@ -1850,37 +1933,6 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier)
}
bool
-TokenStream::getBracedUnicode(uint32_t* cp)
-{
- consumeKnownChar('{');
-
- bool first = true;
- int32_t c;
- uint32_t code = 0;
- while (true) {
- c = getCharIgnoreEOL();
- if (c == EOF)
- return false;
- if (c == '}') {
- if (first)
- return false;
- break;
- }
-
- if (!JS7_ISHEX(c))
- return false;
-
- code = (code << 4) | JS7_UNHEX(c);
- if (code > unicode::NonBMPMax)
- return false;
- first = false;
- }
-
- *cp = code;
- return true;
-}
-
-bool
TokenStream::getStringOrTemplateToken(int untilChar, Token** tp)
{
int c;
@@ -1897,11 +1949,15 @@ TokenStream::getStringOrTemplateToken(int untilChar, Token** tp)
while ((c = getCharIgnoreEOL()) != untilChar) {
if (c == EOF) {
ungetCharIgnoreEOL(c);
- reportError(JSMSG_UNTERMINATED_STRING);
+ error(JSMSG_UNTERMINATED_STRING);
return false;
}
if (c == '\\') {
+ // When parsing templates, we don't immediately report errors for
+ // invalid escapes; these are handled by the parser.
+ // In those cases we don't append to tokenbuf, since it won't be
+ // read.
switch (c = getChar()) {
case 'b': c = '\b'; break;
case 'f': c = '\f'; break;
@@ -1917,12 +1973,73 @@ TokenStream::getStringOrTemplateToken(int untilChar, Token** tp)
// Unicode character specification.
case 'u': {
- if (peekChar() == '{') {
- uint32_t code;
- if (!getBracedUnicode(&code)) {
- reportError(JSMSG_MALFORMED_ESCAPE, "Unicode");
- return false;
- }
+ uint32_t code = 0;
+
+ int32_t c2;
+ if (!peekChar(&c2))
+ return false;
+
+ uint32_t start = userbuf.offset() - 2;
+
+ if (c2 == '{') {
+ consumeKnownChar('{');
+
+ bool first = true;
+ bool valid = true;
+ do {
+ int32_t c = getCharIgnoreEOL();
+ if (c == EOF) {
+ if (parsingTemplate) {
+ setInvalidTemplateEscape(start, InvalidEscapeType::Unicode);
+ valid = false;
+ break;
+ }
+ reportInvalidEscapeError(start, InvalidEscapeType::Unicode);
+ return false;
+ }
+ if (c == '}') {
+ if (first) {
+ if (parsingTemplate) {
+ setInvalidTemplateEscape(start, InvalidEscapeType::Unicode);
+ valid = false;
+ break;
+ }
+ reportInvalidEscapeError(start, InvalidEscapeType::Unicode);
+ return false;
+ }
+ break;
+ }
+
+ if (!JS7_ISHEX(c)) {
+ if (parsingTemplate) {
+ // We put the character back so that we read
+ // it on the next pass, which matters if it
+ // was '`' or '\'.
+ ungetCharIgnoreEOL(c);
+ setInvalidTemplateEscape(start, InvalidEscapeType::Unicode);
+ valid = false;
+ break;
+ }
+ reportInvalidEscapeError(start, InvalidEscapeType::Unicode);
+ return false;
+ }
+
+ code = (code << 4) | JS7_UNHEX(c);
+ if (code > unicode::NonBMPMax) {
+ if (parsingTemplate) {
+ setInvalidTemplateEscape(start + 3, InvalidEscapeType::UnicodeOverflow);
+ valid = false;
+ break;
+ }
+ reportInvalidEscapeError(start + 3, InvalidEscapeType::UnicodeOverflow);
+ return false;
+ }
+
+ first = false;
+ } while (true);
+
+ if (!valid)
+ continue;
MOZ_ASSERT(code <= unicode::NonBMPMax);
if (code < unicode::NonBMPMin) {
@@ -1945,7 +2062,11 @@ TokenStream::getStringOrTemplateToken(int untilChar, Token** tp)
c = (c << 4) + JS7_UNHEX(cp[3]);
skipChars(4);
} else {
- reportError(JSMSG_MALFORMED_ESCAPE, "Unicode");
+ if (parsingTemplate) {
+ setInvalidTemplateEscape(start, InvalidEscapeType::Unicode);
+ continue;
+ }
+ reportInvalidEscapeError(start, InvalidEscapeType::Unicode);
return false;
}
break;
@@ -1958,7 +2079,12 @@ TokenStream::getStringOrTemplateToken(int untilChar, Token** tp)
c = (JS7_UNHEX(cp[0]) << 4) + JS7_UNHEX(cp[1]);
skipChars(2);
} else {
- reportError(JSMSG_MALFORMED_ESCAPE, "hexadecimal");
+ uint32_t start = userbuf.offset() - 2;
+ if (parsingTemplate) {
+ setInvalidTemplateEscape(start, InvalidEscapeType::Hexadecimal);
+ continue;
+ }
+ reportInvalidEscapeError(start, InvalidEscapeType::Hexadecimal);
return false;
}
break;
@@ -1969,13 +2095,14 @@ TokenStream::getStringOrTemplateToken(int untilChar, Token** tp)
if (JS7_ISOCT(c)) {
int32_t val = JS7_UNOCT(c);
- c = peekChar();
+ if (!peekChar(&c))
+ return false;
// Strict mode code allows only \0, then a non-digit.
if (val != 0 || JS7_ISDEC(c)) {
if (parsingTemplate) {
- reportError(JSMSG_DEPRECATED_OCTAL);
- return false;
+ setInvalidTemplateEscape(userbuf.offset() - 2, InvalidEscapeType::Octal);
+ continue;
}
if (!reportStrictModeError(JSMSG_DEPRECATED_OCTAL))
return false;
@@ -1985,7 +2112,8 @@ TokenStream::getStringOrTemplateToken(int untilChar, Token** tp)
if (JS7_ISOCT(c)) {
val = 8 * val + JS7_UNOCT(c);
getChar();
- c = peekChar();
+ if (!peekChar(&c))
+ return false;
if (JS7_ISOCT(c)) {
int32_t save = val;
val = 8 * val + JS7_UNOCT(c);
@@ -2003,7 +2131,7 @@ TokenStream::getStringOrTemplateToken(int untilChar, Token** tp)
} else if (TokenBuf::isRawEOLChar(c)) {
if (!parsingTemplate) {
ungetCharIgnoreEOL(c);
- reportError(JSMSG_UNTERMINATED_STRING);
+ error(JSMSG_UNTERMINATED_STRING);
return false;
}
if (c == '\r') {
diff --git a/js/src/frontend/TokenStream.h b/js/src/frontend/TokenStream.h
index 6ba9fba5a..2744fd144 100644
--- a/js/src/frontend/TokenStream.h
+++ b/js/src/frontend/TokenStream.h
@@ -26,14 +26,13 @@
#include "js/UniquePtr.h"
#include "js/Vector.h"
#include "vm/RegExpObject.h"
+#include "vm/String.h"
struct KeywordInfo;
namespace js {
namespace frontend {
-class AutoAwaitIsKeyword;
-
struct TokenPos {
uint32_t begin; // Offset of the token's first char.
uint32_t end; // Offset of 1 past the token's last char.
@@ -80,6 +79,20 @@ struct TokenPos {
enum DecimalPoint { NoDecimal = false, HasDecimal = true };
+enum class InvalidEscapeType {
+ // No invalid character escapes.
+ None,
+ // A malformed \x escape.
+ Hexadecimal,
+ // A malformed \u escape.
+ Unicode,
+ // An otherwise well-formed \u escape which represents a
+ // codepoint > 10FFFF.
+ UnicodeOverflow,
+ // An octal escape in a template token.
+ Octal
+};
+
class TokenStream;
struct Token
@@ -106,9 +119,6 @@ struct Token
// TOK_DIV.
Operand,
- // Treat keywords as names by returning TOK_NAME.
- KeywordIsName,
-
// Treat subsequent characters as the tail of a template literal, after
// a template substitution, beginning with a "}", continuing with zero
// or more template literal characters, and ending with either "${" or
@@ -150,10 +160,6 @@ struct Token
// If a semicolon is inserted automatically, the next token is already
// gotten with None, but we expect Operand.
OperandIsNone,
-
- // If name of method definition is `get` or `set`, the next token is
- // already gotten with KeywordIsName, but we expect None.
- NoneIsKeywordIsName,
};
friend class TokenStream;
@@ -210,11 +216,6 @@ struct Token
return u.name->JSAtom::asPropertyName(); // poor-man's type verification
}
- bool nameContainsEscape() const {
- PropertyName* n = name();
- return pos.begin + n->length() != pos.end;
- }
-
JSAtom* atom() const {
MOZ_ASSERT(type == TOK_STRING ||
type == TOK_TEMPLATE_HEAD ||
@@ -240,10 +241,22 @@ struct Token
};
class CompileError : public JSErrorReport {
-public:
+ public:
void throwError(JSContext* cx);
};
+extern const char*
+ReservedWordToCharZ(PropertyName* str);
+
+extern MOZ_MUST_USE bool
+IsFutureReservedWord(JSLinearString* str);
+
+extern MOZ_MUST_USE bool
+IsReservedWordLiteral(JSLinearString* str);
+
+extern MOZ_MUST_USE bool
+IsStrictReservedWord(JSLinearString* str);
+
// Ideally, tokenizing would be entirely independent of context. But the
// strict mode flag, which is in SharedContext, affects tokenizing, and
// TokenStream needs to see it.
@@ -330,25 +343,26 @@ class MOZ_STACK_CLASS TokenStream
JSVersion versionNumber() const { return VersionNumber(options().version); }
JSVersion versionWithFlags() const { return options().version; }
+ private:
+ PropertyName* reservedWordToPropertyName(TokenKind tt) const;
+
+ public:
PropertyName* currentName() const {
- if (isCurrentTokenType(TOK_YIELD))
- return cx->names().yield;
- MOZ_ASSERT(isCurrentTokenType(TOK_NAME));
- return currentToken().name();
+ if (isCurrentTokenType(TOK_NAME)) {
+ return currentToken().name();
+ }
+
+ MOZ_ASSERT(TokenKindIsPossibleIdentifierName(currentToken().type));
+ return reservedWordToPropertyName(currentToken().type);
}
PropertyName* nextName() const {
- if (nextToken().type == TOK_YIELD)
- return cx->names().yield;
- MOZ_ASSERT(nextToken().type == TOK_NAME);
- return nextToken().name();
- }
+ if (nextToken().type != TOK_NAME) {
+ return nextToken().name();
+ }
- bool nextNameContainsEscape() const {
- if (nextToken().type == TOK_YIELD)
- return false;
- MOZ_ASSERT(nextToken().type == TOK_NAME);
- return nextToken().nameContainsEscape();
+ MOZ_ASSERT(TokenKindIsPossibleIdentifierName(nextToken().type));
+ return reservedWordToPropertyName(nextToken().type);
}
bool isCurrentTokenAssignment() const {
@@ -361,21 +375,47 @@ class MOZ_STACK_CLASS TokenStream
bool hadError() const { return flags.hadError; }
void clearSawOctalEscape() { flags.sawOctalEscape = false; }
+ bool hasInvalidTemplateEscape() const {
+ return invalidTemplateEscapeType != InvalidEscapeType::None;
+ }
+ void clearInvalidTemplateEscape() {
+ invalidTemplateEscapeType = InvalidEscapeType::None;
+ }
+
+ // If there is an invalid escape in a template, report it and return false,
+ // otherwise return true.
+ bool checkForInvalidTemplateEscapeError() {
+ if (invalidTemplateEscapeType == InvalidEscapeType::None)
+ return true;
+
+ reportInvalidEscapeError(invalidTemplateEscapeOffset, invalidTemplateEscapeType);
+ return false;
+ }
+
// TokenStream-specific error reporters.
bool reportError(unsigned errorNumber, ...);
bool reportErrorNoOffset(unsigned errorNumber, ...);
- bool reportWarning(unsigned errorNumber, ...);
+
+ // Report the given error at the current offset.
+ void error(unsigned errorNumber, ...);
+
+ // Report the given error at the given offset.
+ void errorAt(uint32_t offset, unsigned errorNumber, ...);
+
+ // Warn at the current offset.
+ MOZ_MUST_USE bool warning(unsigned errorNumber, ...);
static const uint32_t NoOffset = UINT32_MAX;
// General-purpose error reporters. You should avoid calling these
- // directly, and instead use the more succinct alternatives (e.g.
- // reportError()) in TokenStream, Parser, and BytecodeEmitter.
- bool reportCompileErrorNumberVA(uint32_t offset, unsigned flags, unsigned errorNumber,
- va_list args);
- bool reportStrictModeErrorNumberVA(uint32_t offset, bool strictMode, unsigned errorNumber,
- va_list args);
- bool reportExtraWarningErrorNumberVA(uint32_t offset, unsigned errorNumber, va_list args);
+ // directly, and instead use the more succinct alternatives (error(),
+ // warning(), &c.) in TokenStream, Parser, and BytecodeEmitter.
+ bool reportCompileErrorNumberVA(UniquePtr<JSErrorNotes> notes, uint32_t offset, unsigned flags,
+ unsigned errorNumber, va_list args);
+ bool reportStrictModeErrorNumberVA(UniquePtr<JSErrorNotes> notes, uint32_t offset,
+ bool strictMode, unsigned errorNumber, va_list args);
+ bool reportExtraWarningErrorNumberVA(UniquePtr<JSErrorNotes> notes, uint32_t offset,
+ unsigned errorNumber, va_list args);
// asm.js reporter
void reportAsmJSError(uint32_t offset, unsigned errorNumber, ...);
@@ -414,6 +454,33 @@ class MOZ_STACK_CLASS TokenStream
bool reportStrictModeError(unsigned errorNumber, ...);
bool strictMode() const { return strictModeGetter && strictModeGetter->strictMode(); }
+ void setInvalidTemplateEscape(uint32_t offset, InvalidEscapeType type) {
+ MOZ_ASSERT(type != InvalidEscapeType::None);
+ if (invalidTemplateEscapeType != InvalidEscapeType::None)
+ return;
+ invalidTemplateEscapeOffset = offset;
+ invalidTemplateEscapeType = type;
+ }
+ void reportInvalidEscapeError(uint32_t offset, InvalidEscapeType type) {
+ switch (type) {
+ case InvalidEscapeType::None:
+ MOZ_ASSERT_UNREACHABLE("unexpected InvalidEscapeType");
+ return;
+ case InvalidEscapeType::Hexadecimal:
+ errorAt(offset, JSMSG_MALFORMED_ESCAPE, "hexadecimal");
+ return;
+ case InvalidEscapeType::Unicode:
+ errorAt(offset, JSMSG_MALFORMED_ESCAPE, "Unicode");
+ return;
+ case InvalidEscapeType::UnicodeOverflow:
+ errorAt(offset, JSMSG_UNICODE_OVERFLOW, "escape sequence");
+ return;
+ case InvalidEscapeType::Octal:
+ errorAt(offset, JSMSG_DEPRECATED_OCTAL);
+ return;
+ }
+ }
+
static JSAtom* atomize(ExclusiveContext* cx, CharBuffer& cb);
MOZ_MUST_USE bool putIdentInTokenbuf(const char16_t* identStart);
@@ -431,21 +498,19 @@ class MOZ_STACK_CLASS TokenStream
{}
};
- bool awaitIsKeyword = false;
- friend class AutoAwaitIsKeyword;
+ uint32_t invalidTemplateEscapeOffset = 0;
+ InvalidEscapeType invalidTemplateEscapeType = InvalidEscapeType::None;
public:
typedef Token::Modifier Modifier;
static constexpr Modifier None = Token::None;
static constexpr Modifier Operand = Token::Operand;
- static constexpr Modifier KeywordIsName = Token::KeywordIsName;
static constexpr Modifier TemplateTail = Token::TemplateTail;
typedef Token::ModifierException ModifierException;
static constexpr ModifierException NoException = Token::NoException;
static constexpr ModifierException NoneIsOperand = Token::NoneIsOperand;
static constexpr ModifierException OperandIsNone = Token::OperandIsNone;
- static constexpr ModifierException NoneIsKeywordIsName = Token::NoneIsKeywordIsName;
void addModifierException(ModifierException modifierException) {
#ifdef DEBUG
@@ -474,10 +539,6 @@ class MOZ_STACK_CLASS TokenStream
MOZ_ASSERT(next.type != TOK_DIV && next.type != TOK_REGEXP,
"next token requires contextual specifier to be parsed unambiguously");
break;
- case NoneIsKeywordIsName:
- MOZ_ASSERT(next.modifier == KeywordIsName);
- MOZ_ASSERT(next.type != TOK_NAME);
- break;
default:
MOZ_CRASH("unexpected modifier exception");
}
@@ -504,18 +565,17 @@ class MOZ_STACK_CLASS TokenStream
return;
}
- if (lookaheadToken.modifierException == NoneIsKeywordIsName) {
- // getToken() permissibly following getToken(KeywordIsName).
- if (modifier == None && lookaheadToken.modifier == KeywordIsName)
- return;
- }
-
MOZ_ASSERT_UNREACHABLE("this token was previously looked up with a "
"different modifier, potentially making "
"tokenization non-deterministic");
#endif
}
+ const Token& nextToken() const {
+ MOZ_ASSERT(hasLookahead());
+ return tokens[(cursor + 1) & ntokensMask];
+ }
+
// Advance to the next token. If the token stream encountered an error,
// return false. Otherwise return true and store the token kind in |*ttp|.
MOZ_MUST_USE bool getToken(TokenKind* ttp, Modifier modifier = None) {
@@ -644,36 +704,6 @@ class MOZ_STACK_CLASS TokenStream
MOZ_ALWAYS_TRUE(matched);
}
- // Like matchToken(..., TOK_NAME) but further matching the name token only
- // if it has the given characters, without containing escape sequences.
- // If the name token has the given characters yet *does* contain an escape,
- // a syntax error will be reported.
- //
- // This latter behavior makes this method unsuitable for use in any context
- // where ASI might occur. In such places, an escaped "contextual keyword"
- // on a new line is the start of an ExpressionStatement, not a continuation
- // of a StatementListItem (or ImportDeclaration or ExportDeclaration, in
- // modules).
- MOZ_MUST_USE bool matchContextualKeyword(bool* matchedp, Handle<PropertyName*> keyword,
- Modifier modifier = None)
- {
- TokenKind token;
- if (!getToken(&token, modifier))
- return false;
- if (token == TOK_NAME && currentToken().name() == keyword) {
- if (currentToken().nameContainsEscape()) {
- reportError(JSMSG_ESCAPED_KEYWORD);
- return false;
- }
-
- *matchedp = true;
- } else {
- *matchedp = false;
- ungetToken();
- }
- return true;
- }
-
MOZ_MUST_USE bool nextTokenEndsExpr(bool* endsExpr) {
TokenKind tt;
if (!peekToken(&tt))
@@ -739,19 +769,6 @@ class MOZ_STACK_CLASS TokenStream
return sourceMapURL_.get();
}
- // If |atom| is not a keyword in this version, return true with *ttp
- // unchanged.
- //
- // If it is a reserved word in this version and strictness mode, and thus
- // can't be present in correct code, report a SyntaxError and return false.
- //
- // If it is a keyword, like "if", return true with the keyword's TokenKind
- // in *ttp.
- MOZ_MUST_USE bool checkForKeyword(JSAtom* atom, TokenKind* ttp);
-
- // Same semantics as above, but for the provided keyword.
- MOZ_MUST_USE bool checkForKeyword(const KeywordInfo* kw, TokenKind* ttp);
-
// This class maps a userbuf offset (which is 0-indexed) to a line number
// (which is 1-indexed) and a column index (which is 0-indexed).
class SourceCoords
@@ -947,7 +964,6 @@ class MOZ_STACK_CLASS TokenStream
MOZ_MUST_USE bool getTokenInternal(TokenKind* ttp, Modifier modifier);
- MOZ_MUST_USE bool getBracedUnicode(uint32_t* code);
MOZ_MUST_USE bool getStringOrTemplateToken(int untilChar, Token** tp);
int32_t getChar();
@@ -964,7 +980,7 @@ class MOZ_STACK_CLASS TokenStream
MOZ_MUST_USE bool getDirectives(bool isMultiline, bool shouldWarnDeprecated);
MOZ_MUST_USE bool getDirective(bool isMultiline, bool shouldWarnDeprecated,
- const char* directive, int directiveLength,
+ const char* directive, uint8_t directiveLength,
const char* errorMsgPragma,
UniquePtr<char16_t[], JS::FreePolicy>* destination);
MOZ_MUST_USE bool getDisplayURL(bool isMultiline, bool shouldWarnDeprecated);
@@ -982,29 +998,30 @@ class MOZ_STACK_CLASS TokenStream
MOZ_ASSERT(c == expect);
}
- int32_t peekChar() {
- int32_t c = getChar();
- ungetChar(c);
- return c;
+ MOZ_MUST_USE bool peekChar(int32_t* c) {
+ *c = getChar();
+ ungetChar(*c);
+ return true;
}
- void skipChars(int n) {
- while (--n >= 0)
- getChar();
+ void skipChars(uint8_t n) {
+ while (n-- > 0) {
+ MOZ_ASSERT(userbuf.hasRawChars());
+ mozilla::DebugOnly<int32_t> c = getCharIgnoreEOL();
+ MOZ_ASSERT(c != '\n');
+ }
}
- void skipCharsIgnoreEOL(int n) {
- while (--n >= 0)
+ void skipCharsIgnoreEOL(uint8_t n) {
+ while (n-- > 0) {
+ MOZ_ASSERT(userbuf.hasRawChars());
getCharIgnoreEOL();
+ }
}
void updateLineInfoForEOL();
void updateFlagsForEOL();
- const Token& nextToken() const {
- MOZ_ASSERT(hasLookahead());
- return tokens[(cursor + 1) & ntokensMask];
- }
bool hasLookahead() const { return lookahead > 0; }
@@ -1029,25 +1046,6 @@ class MOZ_STACK_CLASS TokenStream
StrictModeGetter* strictModeGetter; // used to test for strict mode
};
-class MOZ_STACK_CLASS AutoAwaitIsKeyword
-{
-private:
- TokenStream* ts_;
- bool oldAwaitIsKeyword_;
-
-public:
- AutoAwaitIsKeyword(TokenStream* ts, bool awaitIsKeyword) {
- ts_ = ts;
- oldAwaitIsKeyword_ = ts_->awaitIsKeyword;
- ts_->awaitIsKeyword = awaitIsKeyword;
- }
-
- ~AutoAwaitIsKeyword() {
- ts_->awaitIsKeyword = oldAwaitIsKeyword_;
- ts_ = nullptr;
- }
-};
-
extern const char*
TokenKindToDesc(TokenKind tt);
diff --git a/js/src/gc/Marking.cpp b/js/src/gc/Marking.cpp
index 47d2314c1..da3ef7d0d 100644
--- a/js/src/gc/Marking.cpp
+++ b/js/src/gc/Marking.cpp
@@ -2504,8 +2504,6 @@ js::TenuringTracer::moveObjectToTenured(JSObject* dst, JSObject* src, AllocKind
InlineTypedObject::objectMovedDuringMinorGC(this, dst, src);
} else if (src->is<TypedArrayObject>()) {
tenuredSize += TypedArrayObject::objectMovedDuringMinorGC(this, dst, src, dstKind);
- } else if (src->is<UnboxedArrayObject>()) {
- tenuredSize += UnboxedArrayObject::objectMovedDuringMinorGC(this, dst, src, dstKind);
} else if (src->is<ArgumentsObject>()) {
tenuredSize += ArgumentsObject::objectMovedDuringMinorGC(this, dst, src);
} else if (src->is<ProxyObject>()) {
diff --git a/js/src/irregexp/RegExpParser.cpp b/js/src/irregexp/RegExpParser.cpp
index ccc6ae3eb..8bd88047a 100644
--- a/js/src/irregexp/RegExpParser.cpp
+++ b/js/src/irregexp/RegExpParser.cpp
@@ -243,10 +243,10 @@ RegExpParser<CharT>::RegExpParser(frontend::TokenStream& ts, LifoAlloc* alloc,
template <typename CharT>
RegExpTree*
-RegExpParser<CharT>::ReportError(unsigned errorNumber)
+RegExpParser<CharT>::ReportError(unsigned errorNumber, const char* param /* = nullptr */)
{
gc::AutoSuppressGC suppressGC(ts.context());
- ts.reportError(errorNumber);
+ ts.reportError(errorNumber, param);
return nullptr;
}
@@ -350,7 +350,7 @@ RegExpParser<CharT>::ParseBracedHexEscape(widechar* value)
}
code = (code << 4) | d;
if (code > unicode::NonBMPMax) {
- ReportError(JSMSG_UNICODE_OVERFLOW);
+ ReportError(JSMSG_UNICODE_OVERFLOW, "regular expression");
return false;
}
Advance();
diff --git a/js/src/irregexp/RegExpParser.h b/js/src/irregexp/RegExpParser.h
index b5228a86f..0a7e61858 100644
--- a/js/src/irregexp/RegExpParser.h
+++ b/js/src/irregexp/RegExpParser.h
@@ -211,7 +211,7 @@ class RegExpParser
bool ParseBackReferenceIndex(int* index_out);
bool ParseClassAtom(char16_t* char_class, widechar *value);
- RegExpTree* ReportError(unsigned errorNumber);
+ RegExpTree* ReportError(unsigned errorNumber, const char* param = nullptr);
void Advance();
void Advance(int dist) {
next_pos_ += dist - 1;
diff --git a/js/src/jit-test/modules/export-default-async-asi.js b/js/src/jit-test/modules/export-default-async-asi.js
new file mode 100644
index 000000000..a69a7aa3d
--- /dev/null
+++ b/js/src/jit-test/modules/export-default-async-asi.js
@@ -0,0 +1,2 @@
+export default async // ASI occurs here due to the [no LineTerminator here] restriction on default-exporting an async function
+function async() { return 17; }
diff --git a/js/src/jit-test/tests/asm.js/import-function-toPrimitive.js b/js/src/jit-test/tests/asm.js/import-function-toPrimitive.js
new file mode 100644
index 000000000..aa529b465
--- /dev/null
+++ b/js/src/jit-test/tests/asm.js/import-function-toPrimitive.js
@@ -0,0 +1,26 @@
+var counter = 0;
+
+function f(stdlib, foreign)
+{
+ "use asm";
+ var a = +foreign.a;
+ var b = +foreign.b;
+ function g() {}
+ return g;
+}
+
+var foreign =
+ {
+ a: function() {},
+ b: /value that doesn't coerce purely/,
+ };
+
+foreign.a[Symbol.toPrimitive] =
+ function()
+ {
+ counter++;
+ return 0;
+ };
+
+f(null, foreign);
+assertEq(counter, 1);
diff --git a/js/src/jit-test/tests/baseline/bug1344334.js b/js/src/jit-test/tests/baseline/bug1344334.js
new file mode 100644
index 000000000..66994338a
--- /dev/null
+++ b/js/src/jit-test/tests/baseline/bug1344334.js
@@ -0,0 +1,14 @@
+if (!('oomTest' in this))
+ quit();
+
+function f(s) {
+ s + "x";
+ s.indexOf("y") === 0;
+ oomTest(new Function(s));
+}
+var s = `
+ class TestClass { constructor() {} }
+ for (var fun of hasPrototype) {}
+`;
+if (s.length)
+ f(s);
diff --git a/js/src/jit-test/tests/basic/bug713226.js b/js/src/jit-test/tests/basic/bug713226.js
index 3ae991f43..36858b86c 100644
--- a/js/src/jit-test/tests/basic/bug713226.js
+++ b/js/src/jit-test/tests/basic/bug713226.js
@@ -8,7 +8,7 @@ function addDebug(g, id) {\
var debuggerGlobal = newGlobal();\
debuggerGlobal.debuggee = g;\
debuggerGlobal.id = id;\
- debuggerGlobal.print = function (s) { (g) += s; };\
+ debuggerGlobal.print = function (s) { print(s); };\
debuggerGlobal.eval('var dbg = new Debugger(debuggee);dbg.onDebuggerStatement = function () { print(id); debugger; };');\
return debuggerGlobal;\
}\
diff --git a/js/src/jit-test/tests/basic/hasnativemethodpure-optimization.js b/js/src/jit-test/tests/basic/hasnativemethodpure-optimization.js
new file mode 100644
index 000000000..2f5e99186
--- /dev/null
+++ b/js/src/jit-test/tests/basic/hasnativemethodpure-optimization.js
@@ -0,0 +1,21 @@
+load(libdir + "asserts.js");
+
+let string = Object.defineProperty(new String("123"), "valueOf", {
+ get: function() { throw "get-valueOf"; }
+});
+assertThrowsValue(() => "" + string, "get-valueOf");
+
+string = Object.defineProperty(new String("123"), "toString", {
+ get: function() { throw "get-toString"; }
+});
+assertThrowsValue(() => string.toLowerCase(), "get-toString");
+
+string = Object.defineProperty(new String("123"), Symbol.toPrimitive, {
+ get: function() { throw "get-toPrimitive"; }
+});
+assertThrowsValue(() => string.toLowerCase(), "get-toPrimitive");
+
+let number = Object.defineProperty(new Number(123), "valueOf", {
+ get: function() { throw "get-valueOf"; }
+});
+assertThrowsValue(() => +number, "get-valueOf"); \ No newline at end of file
diff --git a/js/src/jit-test/tests/basic/testFunctionStatementAliasLocals.js b/js/src/jit-test/tests/basic/testFunctionStatementAliasLocals.js
index 7be49b7f3..be7f528b9 100644
--- a/js/src/jit-test/tests/basic/testFunctionStatementAliasLocals.js
+++ b/js/src/jit-test/tests/basic/testFunctionStatementAliasLocals.js
@@ -8,9 +8,11 @@ assertEq(typeof f1(true), "function");
assertEq(f1(false), 3);
function f2(b, w) {
+ // Annex B doesn't apply to functions in blocks with the same name as a
+ // parameter.
if (b)
function w() {}
return w;
}
-assertEq(typeof f2(true, 3), "function");
+assertEq(typeof f2(true, 3), "number");
assertEq(f2(false, 3), 3);
diff --git a/js/src/jit-test/tests/basic/unboxed-object-clear-new-script.js b/js/src/jit-test/tests/basic/unboxed-object-clear-new-script.js
deleted file mode 100644
index f55456222..000000000
--- a/js/src/jit-test/tests/basic/unboxed-object-clear-new-script.js
+++ /dev/null
@@ -1,49 +0,0 @@
-
-function Foo(a, b) {
- this.a = a;
- this.b = b;
-}
-
-function invalidate_foo() {
- var a = [];
- var counter = 0;
- for (var i = 0; i < 50; i++)
- a.push(new Foo(i, i + 1));
- Object.defineProperty(Foo.prototype, "a", {configurable: true, set: function() { counter++; }});
- for (var i = 0; i < 50; i++)
- a.push(new Foo(i, i + 1));
- delete Foo.prototype.a;
- var total = 0;
- for (var i = 0; i < a.length; i++) {
- assertEq('a' in a[i], i < 50);
- total += a[i].b;
- }
- assertEq(total, 2550);
- assertEq(counter, 50);
-}
-invalidate_foo();
-
-function Bar(a, b, fn) {
- this.a = a;
- if (b == 30)
- Object.defineProperty(Bar.prototype, "b", {configurable: true, set: fn});
- this.b = b;
-}
-
-function invalidate_bar() {
- var a = [];
- var counter = 0;
- function fn() { counter++; }
- for (var i = 0; i < 50; i++)
- a.push(new Bar(i, i + 1, fn));
- delete Bar.prototype.b;
- var total = 0;
- for (var i = 0; i < a.length; i++) {
- assertEq('a' in a[i], true);
- assertEq('b' in a[i], i < 29);
- total += a[i].a;
- }
- assertEq(total, 1225);
- assertEq(counter, 21);
-}
-invalidate_bar();
diff --git a/js/src/jit-test/tests/basic/unboxed-object-convert-to-native.js b/js/src/jit-test/tests/basic/unboxed-object-convert-to-native.js
deleted file mode 100644
index 691fe166c..000000000
--- a/js/src/jit-test/tests/basic/unboxed-object-convert-to-native.js
+++ /dev/null
@@ -1,47 +0,0 @@
-
-// Test various ways of converting an unboxed object to native.
-
-function Foo(a, b) {
- this.a = a;
- this.b = b;
-}
-
-var proxyObj = {
- get: function(recipient, name) {
- return recipient[name] + 2;
- }
-};
-
-function f() {
- var a = [];
- for (var i = 0; i < 50; i++)
- a.push(new Foo(i, i + 1));
-
- var prop = "a";
-
- i = 0;
- for (; i < 5; i++)
- a[i].c = i;
- for (; i < 10; i++)
- Object.defineProperty(a[i], 'c', {value: i});
- for (; i < 15; i++)
- a[i] = new Proxy(a[i], proxyObj);
- for (; i < 20; i++)
- a[i].a = 3.5;
- for (; i < 25; i++)
- delete a[i].b;
- for (; i < 30; i++)
- a[prop] = 4;
-
- var total = 0;
- for (i = 0; i < a.length; i++) {
- if ('a' in a[i])
- total += a[i].a;
- if ('b' in a[i])
- total += a[i].b;
- if ('c' in a[i])
- total += a[i].c;
- }
- assertEq(total, 2382.5);
-}
-f();
diff --git a/js/src/jit-test/tests/basic/unboxed-object-getelem.js b/js/src/jit-test/tests/basic/unboxed-object-getelem.js
deleted file mode 100644
index b30b8325a..000000000
--- a/js/src/jit-test/tests/basic/unboxed-object-getelem.js
+++ /dev/null
@@ -1,20 +0,0 @@
-
-function f() {
- var propNames = ["a","b","c","d","e","f","g","h","i","j","x","y"];
- var arr = [];
- for (var i=0; i<64; i++)
- arr.push({x:1, y:2});
- for (var i=0; i<64; i++) {
- // Make sure there are expandos with dynamic slots for each object.
- for (var j = 0; j < propNames.length; j++)
- arr[i][propNames[j]] = j;
- }
- var res = 0;
- for (var i=0; i<100000; i++) {
- var o = arr[i % 64];
- var p = propNames[i % propNames.length];
- res += o[p];
- }
- assertEq(res, 549984);
-}
-f();
diff --git a/js/src/jit-test/tests/basic/unboxed-object-set-property.js b/js/src/jit-test/tests/basic/unboxed-object-set-property.js
deleted file mode 100644
index fdcfcf6b2..000000000
--- a/js/src/jit-test/tests/basic/unboxed-object-set-property.js
+++ /dev/null
@@ -1,31 +0,0 @@
-
-// Use the correct receiver when non-native objects are prototypes of other objects.
-
-function Thing(a, b) {
- this.a = a;
- this.b = b;
-}
-
-function foo() {
- var array = [];
- for (var i = 0; i < 10000; i++)
- array.push(new Thing(i, i + 1));
-
- var proto = new Thing(1, 2);
- var obj = Object.create(proto);
-
- Object.defineProperty(Thing.prototype, "c", {set:function() { this.d = 0; }});
- obj.c = 3;
- assertEq(obj.c, undefined);
- assertEq(obj.d, 0);
- assertEq(obj.hasOwnProperty("d"), true);
- assertEq(proto.d, undefined);
- assertEq(proto.hasOwnProperty("d"), false);
-
- obj.a = 3;
- assertEq(obj.a, 3);
- assertEq(proto.a, 1);
- assertEq(obj.hasOwnProperty("a"), true);
-}
-
-foo();
diff --git a/js/src/jit-test/tests/basic/unboxed-property-enumeration.js b/js/src/jit-test/tests/basic/unboxed-property-enumeration.js
deleted file mode 100644
index 142d932dd..000000000
--- a/js/src/jit-test/tests/basic/unboxed-property-enumeration.js
+++ /dev/null
@@ -1,24 +0,0 @@
-function O() {
- this.x = 1;
- this.y = 2;
-}
-function testUnboxed() {
- var arr = [];
- for (var i=0; i<100; i++)
- arr.push(new O);
-
- var o = arr[arr.length-1];
- o[0] = 0;
- o[2] = 2;
- var sym = Symbol();
- o[sym] = 1;
- o.z = 3;
- Object.defineProperty(o, '3', {value:1,enumerable:false,configurable:false,writable:false});
- o[4] = 4;
-
- var props = Reflect.ownKeys(o);
- assertEq(props[props.length-1], sym);
-
- assertEq(Object.getOwnPropertyNames(o).join(""), "0234xyz");
-}
-testUnboxed();
diff --git a/js/src/jit-test/tests/class/bug1357506.js b/js/src/jit-test/tests/class/bug1357506.js
new file mode 100644
index 000000000..52a5643e6
--- /dev/null
+++ b/js/src/jit-test/tests/class/bug1357506.js
@@ -0,0 +1,8 @@
+// Test that constructors that abort due to asm.js do not assert due to the
+// parser keeping track of the FunctionBox corresponding to the constructor.
+
+class a {
+ constructor() {
+ "use asm";
+ }
+}
diff --git a/js/src/jit-test/tests/class/bug1359622.js b/js/src/jit-test/tests/class/bug1359622.js
new file mode 100644
index 000000000..b4a0df749
--- /dev/null
+++ b/js/src/jit-test/tests/class/bug1359622.js
@@ -0,0 +1,4 @@
+setDiscardSource(true)
+evaluate(`
+ unescape(class get { static staticMethod() {} });
+`);
diff --git a/js/src/jit-test/tests/debug/wasm-12.js b/js/src/jit-test/tests/debug/wasm-12.js
new file mode 100644
index 000000000..18d3b574d
--- /dev/null
+++ b/js/src/jit-test/tests/debug/wasm-12.js
@@ -0,0 +1,26 @@
+// Tests that wasm module scripts have special URLs.
+
+if (!wasmIsSupported())
+ quit();
+
+var g = newGlobal();
+g.eval(`
+function initWasm(s) { return new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(s))); }
+o = initWasm('(module (func) (export "" 0))');
+o2 = initWasm('(module (func) (func) (export "" 1))');
+`);
+
+function isWasm(script) { return script.format === "wasm"; }
+
+function isValidWasmURL(url) {
+ // The URLs will have the following format:
+ // wasm: [<uri-econded-filename-of-host> ":"] <64-bit-hash>
+ return /^wasm:(?:[^:]*:)*?[0-9a-f]{16}$/.test(url);
+}
+
+var dbg = new Debugger(g);
+var foundScripts = dbg.findScripts().filter(isWasm);
+assertEq(foundScripts.length, 2);
+assertEq(isValidWasmURL(foundScripts[0].source.url), true);
+assertEq(isValidWasmURL(foundScripts[1].source.url), true);
+assertEq(foundScripts[0].source.url != foundScripts[1].source.url, true);
diff --git a/js/src/jit-test/tests/ion/unboxed-objects-invalidate.js b/js/src/jit-test/tests/ion/unboxed-objects-invalidate.js
deleted file mode 100644
index 02e27614f..000000000
--- a/js/src/jit-test/tests/ion/unboxed-objects-invalidate.js
+++ /dev/null
@@ -1,16 +0,0 @@
-
-var a = [];
-for (var i = 0; i < 2000; i++)
- a.push({f:i});
-
-function f() {
- var total = 0;
- for (var i = 0; i < a.length; i++)
- total += a[i].f;
- return total;
-}
-assertEq(f(), 1999000);
-
-var sub = Object.create(a[0]);
-
-assertEq(f(), 1999000);
diff --git a/js/src/jit-test/tests/modules/export-declaration.js b/js/src/jit-test/tests/modules/export-declaration.js
index 3c4a9b735..9925f2c68 100644
--- a/js/src/jit-test/tests/modules/export-declaration.js
+++ b/js/src/jit-test/tests/modules/export-declaration.js
@@ -403,12 +403,52 @@ assertThrowsInstanceOf(function() {
parseAsModule("export {,} from 'a'");
}, SyntaxError);
+program([
+ exportDeclaration(
+ null,
+ [
+ exportSpecifier(
+ ident("true"),
+ ident("true")
+ ),
+ ],
+ lit("b"),
+ false
+ )
+]).assert(parseAsModule("export { true } from 'b'"));
+
+program([
+ exportDeclaration(
+ null,
+ [
+ exportSpecifier(
+ ident("true"),
+ ident("name")
+ ),
+ ],
+ lit("b"),
+ false
+ )
+]).assert(parseAsModule("export { true as name } from 'b'"));
+
+assertThrowsInstanceOf(function() {
+ parseAsModule("export { true }");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function() {
+ parseAsModule("export { true as name }");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function() {
+ parseAsModule("export { static }");
+}, SyntaxError);
+
assertThrowsInstanceOf(function() {
- parseAsModule("export { true as a } from 'b'");
+ parseAsModule("export { static as name }");
}, SyntaxError);
assertThrowsInstanceOf(function () {
- parseAsModule("export { a } from 'b' f();");
+ parseAsModule("export { name } from 'b' f();");
}, SyntaxError);
assertThrowsInstanceOf(function () {
diff --git a/js/src/jit-test/tests/modules/function-redeclaration.js b/js/src/jit-test/tests/modules/function-redeclaration.js
new file mode 100644
index 000000000..b84704641
--- /dev/null
+++ b/js/src/jit-test/tests/modules/function-redeclaration.js
@@ -0,0 +1,94 @@
+load(libdir + "asserts.js");
+
+var functionDeclarations = [
+ "function f(){}",
+ "function* f(){}",
+ "async function f(){}",
+];
+
+var varDeclarations = [
+ "var f",
+ "{ var f; }",
+ "for (var f in null);",
+ "for (var f of null);",
+ "for (var f; ;);",
+];
+
+var lexicalDeclarations = [
+ "let f;",
+ "const f = 0;",
+ "class f {};",
+];
+
+var imports = [
+ "import f from '';",
+ "import f, {} from '';",
+ "import d, {f} from '';",
+ "import d, {f as f} from '';",
+ "import d, {foo as f} from '';",
+ "import f, * as d from '';",
+ "import d, * as f from '';",
+ "import {f} from '';",
+ "import {f as f} from '';",
+ "import {foo as f} from '';",
+ "import* as f from '';",
+];
+
+var exports = [
+ "export var f;",
+ ...functionDeclarations.map(fn => `export ${fn};`),
+ ...lexicalDeclarations.map(ld => `export ${ld};`),
+ ...functionDeclarations.map(fn => `export default ${fn};`),
+ "export default class f {};",
+];
+
+var redeclarations = [
+ ...functionDeclarations,
+ ...varDeclarations,
+ ...lexicalDeclarations,
+ ...imports,
+ ...exports,
+];
+
+var noredeclarations = [
+ ...functionDeclarations.map(fn => `{ ${fn} }`),
+ ...lexicalDeclarations.map(ld => `{ ${ld} }`),
+ ...["let", "const"].map(ld => `for (${ld} f in null);`),
+ ...["let", "const"].map(ld => `for (${ld} f of null);`),
+ ...["let", "const"].map(ld => `for (${ld} f = 0; ;);`),
+ "export {f};",
+ "export {f as f};",
+ "export {foo as f}; var foo;",
+ "export {f} from '';",
+ "export {f as f} from '';",
+ "export {foo as f} from '';",
+];
+
+for (var decl of functionDeclarations) {
+ for (var redecl of redeclarations) {
+ assertThrowsInstanceOf(() => {
+ parseModule(`
+ ${decl}
+ ${redecl}
+ `);
+ }, SyntaxError);
+
+ assertThrowsInstanceOf(() => {
+ parseModule(`
+ ${redecl}
+ ${decl}
+ `);
+ }, SyntaxError);
+ }
+
+ for (var redecl of noredeclarations) {
+ parseModule(`
+ ${decl}
+ ${redecl}
+ `);
+ parseModule(`
+ ${redecl}
+ ${decl}
+ `);
+ }
+}
diff --git a/js/src/jit-test/tests/parser/arrow-rest.js b/js/src/jit-test/tests/parser/arrow-rest.js
index 53750f25b..b1429066e 100644
--- a/js/src/jit-test/tests/parser/arrow-rest.js
+++ b/js/src/jit-test/tests/parser/arrow-rest.js
@@ -39,7 +39,7 @@ testThrow(`
testThrow(`
({...a)=>
-`, 2);
+`, 6);
testThrow(`
function f([... ...a)=>
@@ -47,7 +47,7 @@ function f([... ...a)=>
testThrow(`
function f({...a)=>
-`, 12);
+`, 16);
// arrow
@@ -67,7 +67,7 @@ var [... ...a)=>
testThrow(`
var {...a)=>
-`, 5);
+`, 9);
// initializer
diff --git a/js/src/jit-test/tests/parser/missing-closing-brace.js b/js/src/jit-test/tests/parser/missing-closing-brace.js
new file mode 100644
index 000000000..6820954ae
--- /dev/null
+++ b/js/src/jit-test/tests/parser/missing-closing-brace.js
@@ -0,0 +1,90 @@
+function test(source, [lineNumber, columnNumber], openType = "{", closeType = "}") {
+ let caught = false;
+ try {
+ Reflect.parse(source, { source: "foo.js" });
+ } catch (e) {
+ assertEq(e.message.includes("missing " + closeType + " "), true);
+ let notes = getErrorNotes(e);
+ assertEq(notes.length, 1);
+ let note = notes[0];
+ assertEq(note.message, openType + " opened at line " + lineNumber + ", column " + columnNumber);
+ assertEq(note.fileName, "foo.js");
+ assertEq(note.lineNumber, lineNumber);
+ assertEq(note.columnNumber, columnNumber);
+ caught = true;
+ }
+ assertEq(caught, true);
+}
+
+// Function
+
+test(`
+function test1() {
+}
+function test2() {
+ if (true) {
+ //}
+}
+function test3() {
+}
+`, [4, 17]);
+
+// Block statement.
+test(`
+{
+ if (true) {
+}
+`, [2, 0]);
+test(`
+if (true) {
+ if (true) {
+}
+`, [2, 10]);
+test(`
+for (;;) {
+ if (true) {
+}
+`, [2, 9]);
+test(`
+while (true) {
+ if (true) {
+}
+`, [2, 13]);
+test(`
+do {
+ do {
+} while(true);
+`, [2, 3]);
+
+// try-catch-finally.
+test(`
+try {
+ if (true) {
+}
+`, [2, 4]);
+test(`
+try {
+} catch (e) {
+ if (true) {
+}
+`, [3, 12]);
+test(`
+try {
+} finally {
+ if (true) {
+}
+`, [3, 10]);
+
+// Object literal.
+test(`
+var x = {
+ foo: {
+};
+`, [2, 8]);
+
+// Array literal.
+test(`
+var x = [
+ [
+];
+`, [2, 8], "[", "]");
diff --git a/js/src/jit-test/tests/parser/redeclaration.js b/js/src/jit-test/tests/parser/redeclaration.js
new file mode 100644
index 000000000..f719021ac
--- /dev/null
+++ b/js/src/jit-test/tests/parser/redeclaration.js
@@ -0,0 +1,230 @@
+// Error message for redeclaration should show the position where the variable
+// was declared.
+
+const npos = -1;
+
+function test_one(fun, filename, name,
+ [prevLineNumber, prevColumnNumber],
+ [lineNumber, columnNumber]) {
+ let caught = false;
+ try {
+ fun();
+ } catch (e) {
+ assertEq(e.message.includes("redeclaration"), true);
+ assertEq(e.lineNumber, lineNumber);
+ assertEq(e.columnNumber, columnNumber);
+ let notes = getErrorNotes(e);
+ if (prevLineNumber == npos) {
+ assertEq(notes.length, 0);
+ } else {
+ assertEq(notes.length, 1);
+ let note = notes[0];
+ assertEq(note.message,
+ `Previously declared at line ${prevLineNumber}, column ${prevColumnNumber}`);
+ assertEq(note.lineNumber, prevLineNumber);
+ assertEq(note.columnNumber, prevColumnNumber);
+ if (filename)
+ assertEq(note.fileName, filename);
+ }
+ caught = true;
+ }
+ assertEq(caught, true);
+}
+
+function test_parse(source, ...args) {
+ test_one(() => {
+ Reflect.parse(source, { source: "foo.js" });
+ }, "foo.js", ...args);
+}
+
+function test_eval(source, ...args) {
+ test_one(() => {
+ eval(source);
+ }, undefined, ...args);
+}
+
+function test(...args) {
+ test_parse(...args);
+ test_eval(...args);
+}
+
+// let
+
+test(`
+let a, a;
+`, "a", [2, 4], [2, 7]);
+
+test(`
+let a;
+let a;
+`, "a", [2, 4], [3, 4]);
+
+test(`
+let a;
+const a = 1;
+`, "a", [2, 4], [3, 6]);
+
+test(`
+let a;
+var a;
+`, "a", [2, 4], [3, 4]);
+
+test(`
+let a;
+function a() {
+}
+`, "a", [2, 4], [3, 9]);
+
+test(`
+{
+ let a;
+ function a() {
+ }
+}
+`, "a", [3, 6], [4, 11]);
+
+// const
+
+test(`
+const a = 1, a = 2;
+`, "a", [2, 6], [2, 13]);
+
+test(`
+const a = 1;
+const a = 2;
+`, "a", [2, 6], [3, 6]);
+
+test(`
+const a = 1;
+let a;
+`, "a", [2, 6], [3, 4]);
+
+test(`
+const a = 1;
+var a;
+`, "a", [2, 6], [3, 4]);
+
+test(`
+const a = 1;
+function a() {
+}
+`, "a", [2, 6], [3, 9]);
+
+test(`
+{
+ const a = 1;
+ function a() {
+ }
+}
+`, "a", [3, 8], [4, 11]);
+
+// var
+
+test(`
+var a;
+let a;
+`, "a", [2, 4], [3, 4]);
+
+test(`
+var a;
+const a = 1;
+`, "a", [2, 4], [3, 6]);
+
+// function
+
+test(`
+function a() {};
+let a;
+`, "a", [2, 9], [3, 4]);
+
+test(`
+function a() {};
+const a = 1;
+`, "a", [2, 9], [3, 6]);
+
+// Annex B lexical function
+
+test(`
+{
+ function a() {};
+ let a;
+}
+`, "a", [3, 11], [4, 6]);
+
+test(`
+{
+ function a() {};
+ const a = 1;
+}
+`, "a", [3, 11], [4, 8]);
+
+// catch parameter
+
+test(`
+try {
+} catch (a) {
+ let a;
+}
+`, "a", [3, 9], [4, 6]);
+
+test(`
+try {
+} catch (a) {
+ const a = 1;
+}
+`, "a", [3, 9], [4, 8]);
+
+test(`
+try {
+} catch (a) {
+ function a() {
+ }
+}
+`, "a", [3, 9], [4, 11]);
+
+// parameter
+
+test(`
+function f(a) {
+ let a;
+}
+`, "a", [2, 11], [3, 6]);
+
+test(`
+function f(a) {
+ const a = 1;
+}
+`, "a", [2, 11], [3, 8]);
+
+test(`
+function f([a]) {
+ let a;
+}
+`, "a", [2, 12], [3, 6]);
+
+test(`
+function f({a}) {
+ let a;
+}
+`, "a", [2, 12], [3, 6]);
+
+test(`
+function f(...a) {
+ let a;
+}
+`, "a", [2, 14], [3, 6]);
+
+test(`
+function f(a=1) {
+ let a;
+}
+`, "a", [2, 11], [3, 6]);
+
+// eval
+// We don't have position information at runtime.
+// No note should be shown.
+
+test_eval(`
+let a;
+eval("var a");
+`, "a", [npos, npos], [1, 4]);
diff --git a/js/src/jit-test/tests/profiler/AutoEntryMonitor-01.js b/js/src/jit-test/tests/profiler/AutoEntryMonitor-01.js
index d66548680..e9dd5d526 100644
--- a/js/src/jit-test/tests/profiler/AutoEntryMonitor-01.js
+++ b/js/src/jit-test/tests/profiler/AutoEntryMonitor-01.js
@@ -31,7 +31,7 @@ cold_and_warm(Object.prototype.toString, { ToString: {} }, []);
var toS = { toString: function myToString() { return "string"; } };
cold_and_warm(toS.toString, { ToString: toS }, [ "myToString" ]);
-cold_and_warm(undefined, { ToNumber: {} }, []);
+cold_and_warm(undefined, { ToNumber: 5 }, []);
var vOf = { valueOf: function myValueOf() { return 42; } };
cold_and_warm(vOf.valueOf, { ToNumber: vOf }, [ "myValueOf" ]);
diff --git a/js/src/jit/AliasAnalysisShared.cpp b/js/src/jit/AliasAnalysisShared.cpp
index 3b83df74e..0f0d4a66a 100644
--- a/js/src/jit/AliasAnalysisShared.cpp
+++ b/js/src/jit/AliasAnalysisShared.cpp
@@ -93,10 +93,6 @@ GetObject(const MDefinition* ins)
case MDefinition::Op_Elements:
case MDefinition::Op_MaybeCopyElementsForWrite:
case MDefinition::Op_MaybeToDoubleElement:
- case MDefinition::Op_UnboxedArrayLength:
- case MDefinition::Op_UnboxedArrayInitializedLength:
- case MDefinition::Op_IncrementUnboxedArrayInitializedLength:
- case MDefinition::Op_SetUnboxedArrayInitializedLength:
case MDefinition::Op_TypedArrayLength:
case MDefinition::Op_SetTypedObjectOffset:
case MDefinition::Op_SetDisjointTypedElements:
diff --git a/js/src/jit/BaselineCacheIR.cpp b/js/src/jit/BaselineCacheIR.cpp
index bf96932d1..67c80473b 100644
--- a/js/src/jit/BaselineCacheIR.cpp
+++ b/js/src/jit/BaselineCacheIR.cpp
@@ -16,7 +16,7 @@ using namespace js;
using namespace js::jit;
// OperandLocation represents the location of an OperandId. The operand is
-// either in a register or on the stack, and is either boxed or unboxed.
+// either in a register or on the stack.
class OperandLocation
{
public:
@@ -787,9 +787,6 @@ BaselineCacheIRCompiler::emitGuardClass()
case GuardClassKind::Array:
clasp = &ArrayObject::class_;
break;
- case GuardClassKind::UnboxedArray:
- clasp = &UnboxedArrayObject::class_;
- break;
case GuardClassKind::MappedArguments:
clasp = &MappedArgumentsObject::class_;
break;
@@ -818,36 +815,6 @@ BaselineCacheIRCompiler::emitGuardSpecificObject()
}
bool
-BaselineCacheIRCompiler::emitGuardNoUnboxedExpando()
-{
- Register obj = allocator.useRegister(masm, reader.objOperandId());
-
- FailurePath* failure;
- if (!addFailurePath(&failure))
- return false;
-
- Address expandoAddr(obj, UnboxedPlainObject::offsetOfExpando());
- masm.branchPtr(Assembler::NotEqual, expandoAddr, ImmWord(0), failure->label());
- return true;
-}
-
-bool
-BaselineCacheIRCompiler::emitGuardAndLoadUnboxedExpando()
-{
- Register obj = allocator.useRegister(masm, reader.objOperandId());
- Register output = allocator.defineRegister(masm, reader.objOperandId());
-
- FailurePath* failure;
- if (!addFailurePath(&failure))
- return false;
-
- Address expandoAddr(obj, UnboxedPlainObject::offsetOfExpando());
- masm.loadPtr(expandoAddr, output);
- masm.branchTestPtr(Assembler::Zero, output, output, failure->label());
- return true;
-}
-
-bool
BaselineCacheIRCompiler::emitLoadFixedSlotResult()
{
Register obj = allocator.useRegister(masm, reader.objOperandId());
@@ -874,26 +841,6 @@ BaselineCacheIRCompiler::emitLoadDynamicSlotResult()
}
bool
-BaselineCacheIRCompiler::emitLoadUnboxedPropertyResult()
-{
- Register obj = allocator.useRegister(masm, reader.objOperandId());
- AutoScratchRegister scratch(allocator, masm);
-
- JSValueType fieldType = reader.valueType();
-
- Address fieldOffset(stubAddress(reader.stubOffset()));
- masm.load32(fieldOffset, scratch);
- masm.loadUnboxedProperty(BaseIndex(obj, scratch, TimesOne), fieldType, R0);
-
- if (fieldType == JSVAL_TYPE_OBJECT)
- emitEnterTypeMonitorIC();
- else
- emitReturnFromIC();
-
- return true;
-}
-
-bool
BaselineCacheIRCompiler::emitGuardNoDetachedTypedObjects()
{
FailurePath* failure;
@@ -1004,19 +951,6 @@ BaselineCacheIRCompiler::emitLoadInt32ArrayLengthResult()
}
bool
-BaselineCacheIRCompiler::emitLoadUnboxedArrayLengthResult()
-{
- Register obj = allocator.useRegister(masm, reader.objOperandId());
- masm.load32(Address(obj, UnboxedArrayObject::offsetOfLength()), R0.scratchReg());
- masm.tagValue(JSVAL_TYPE_INT32, R0.scratchReg(), R0);
-
- // The int32 type was monitored when attaching the stub, so we can
- // just return.
- emitReturnFromIC();
- return true;
-}
-
-bool
BaselineCacheIRCompiler::emitLoadArgumentsObjectLengthResult()
{
Register obj = allocator.useRegister(masm, reader.objOperandId());
diff --git a/js/src/jit/BaselineCompiler.cpp b/js/src/jit/BaselineCompiler.cpp
index 3fa5a80ed..b2f9d3b23 100644
--- a/js/src/jit/BaselineCompiler.cpp
+++ b/js/src/jit/BaselineCompiler.cpp
@@ -2049,13 +2049,7 @@ BaselineCompiler::emit_JSOP_NEWARRAY()
return true;
}
-bool
-BaselineCompiler::emit_JSOP_SPREADCALLARRAY()
-{
- return emit_JSOP_NEWARRAY();
-}
-
-typedef JSObject* (*NewArrayCopyOnWriteFn)(JSContext*, HandleArrayObject, gc::InitialHeap);
+typedef ArrayObject* (*NewArrayCopyOnWriteFn)(JSContext*, HandleArrayObject, gc::InitialHeap);
const VMFunction jit::NewArrayCopyOnWriteInfo =
FunctionInfo<NewArrayCopyOnWriteFn>(js::NewDenseCopyOnWriteArray, "NewDenseCopyOnWriteArray");
@@ -3298,6 +3292,12 @@ BaselineCompiler::emit_JSOP_CALL()
}
bool
+BaselineCompiler::emit_JSOP_CALL_IGNORES_RV()
+{
+ return emitCall();
+}
+
+bool
BaselineCompiler::emit_JSOP_CALLITER()
{
return emitCall();
@@ -4136,14 +4136,14 @@ BaselineCompiler::emit_JSOP_REST()
{
frame.syncStack(0);
- JSObject* templateObject =
+ ArrayObject* templateObject =
ObjectGroup::newArrayObject(cx, nullptr, 0, TenuredObject,
ObjectGroup::NewArrayKind::UnknownIndex);
if (!templateObject)
return false;
// Call IC.
- ICRest_Fallback::Compiler compiler(cx, &templateObject->as<ArrayObject>());
+ ICRest_Fallback::Compiler compiler(cx, templateObject);
if (!emitOpIC(compiler.getStub(&stubSpace_)))
return false;
diff --git a/js/src/jit/BaselineCompiler.h b/js/src/jit/BaselineCompiler.h
index 6b5bf009e..95e0c77ad 100644
--- a/js/src/jit/BaselineCompiler.h
+++ b/js/src/jit/BaselineCompiler.h
@@ -100,7 +100,6 @@ namespace jit {
_(JSOP_BITNOT) \
_(JSOP_NEG) \
_(JSOP_NEWARRAY) \
- _(JSOP_SPREADCALLARRAY) \
_(JSOP_NEWARRAY_COPYONWRITE) \
_(JSOP_INITELEM_ARRAY) \
_(JSOP_NEWOBJECT) \
@@ -160,6 +159,7 @@ namespace jit {
_(JSOP_INITALIASEDLEXICAL) \
_(JSOP_UNINITIALIZED) \
_(JSOP_CALL) \
+ _(JSOP_CALL_IGNORES_RV) \
_(JSOP_CALLITER) \
_(JSOP_FUNCALL) \
_(JSOP_FUNAPPLY) \
diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp
index 863c61161..a001357f8 100644
--- a/js/src/jit/BaselineIC.cpp
+++ b/js/src/jit/BaselineIC.cpp
@@ -10,6 +10,8 @@
#include "mozilla/SizePrintfMacros.h"
#include "mozilla/TemplateLib.h"
+#include "jsfriendapi.h"
+#include "jsfun.h"
#include "jslibmath.h"
#include "jstypes.h"
@@ -42,8 +44,8 @@
#include "jit/shared/Lowering-shared-inl.h"
#include "vm/EnvironmentObject-inl.h"
#include "vm/Interpreter-inl.h"
+#include "vm/NativeObject-inl.h"
#include "vm/StringObject-inl.h"
-#include "vm/UnboxedObject-inl.h"
using mozilla::DebugOnly;
@@ -289,7 +291,7 @@ DoTypeUpdateFallback(JSContext* cx, BaselineFrame* frame, ICUpdatedStub* stub, H
case ICStub::SetProp_Native:
case ICStub::SetProp_NativeAdd:
case ICStub::SetProp_Unboxed: {
- MOZ_ASSERT(obj->isNative() || obj->is<UnboxedPlainObject>());
+ MOZ_ASSERT(obj->isNative());
jsbytecode* pc = stub->getChainFallback()->icEntry()->pc(script);
if (*pc == JSOP_SETALIASEDVAR || *pc == JSOP_INITALIASEDLEXICAL)
id = NameToId(EnvironmentCoordinateName(cx->caches.envCoordinateNameCache, script, pc));
@@ -321,7 +323,14 @@ DoTypeUpdateFallback(JSContext* cx, BaselineFrame* frame, ICUpdatedStub* stub, H
MOZ_CRASH("Invalid stub");
}
- return stub->addUpdateStubForValue(cx, script /* = outerScript */, obj, id, value);
+ if (!stub->addUpdateStubForValue(cx, script /* = outerScript */, obj, id, value)) {
+ // The calling JIT code assumes this function is infallible (for
+ // instance we may reallocate dynamic slots before calling this),
+ // so ignore OOMs if we failed to attach a stub.
+ cx->recoverFromOutOfMemory();
+ }
+
+ return true;
}
typedef bool (*DoTypeUpdateFallbackFn)(JSContext*, BaselineFrame*, ICUpdatedStub*, HandleValue,
@@ -732,11 +741,6 @@ LastPropertyForSetProp(JSObject* obj)
if (obj->isNative())
return obj->as<NativeObject>().lastProperty();
- if (obj->is<UnboxedPlainObject>()) {
- UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando();
- return expando ? expando->lastProperty() : nullptr;
- }
-
return nullptr;
}
@@ -1153,56 +1157,6 @@ TryAttachNativeOrUnboxedGetValueElemStub(JSContext* cx, HandleScript script, jsb
ICStub* monitorStub = stub->fallbackMonitorStub()->firstMonitorStub();
- if (obj->is<UnboxedPlainObject>() && holder == obj) {
- const UnboxedLayout::Property* property = obj->as<UnboxedPlainObject>().layout().lookup(id);
-
- // Once unboxed objects support symbol-keys, we need to change the following accordingly
- MOZ_ASSERT_IF(!keyVal.isString(), !property);
-
- if (property) {
- if (!cx->runtime()->jitSupportsFloatingPoint)
- return true;
-
- RootedPropertyName name(cx, JSID_TO_ATOM(id)->asPropertyName());
- ICGetElemNativeCompiler<PropertyName*> compiler(cx, ICStub::GetElem_UnboxedPropertyName,
- monitorStub, obj, holder,
- name,
- ICGetElemNativeStub::UnboxedProperty,
- needsAtomize, property->offset +
- UnboxedPlainObject::offsetOfData(),
- property->type);
- ICStub* newStub = compiler.getStub(compiler.getStubSpace(script));
- if (!newStub)
- return false;
-
- stub->addNewStub(newStub);
- *attached = true;
- return true;
- }
-
- Shape* shape = obj->as<UnboxedPlainObject>().maybeExpando()->lookup(cx, id);
- if (!shape->hasDefaultGetter() || !shape->hasSlot())
- return true;
-
- bool isFixedSlot;
- uint32_t offset;
- GetFixedOrDynamicSlotOffset(shape, &isFixedSlot, &offset);
-
- ICGetElemNativeStub::AccessType acctype =
- isFixedSlot ? ICGetElemNativeStub::FixedSlot
- : ICGetElemNativeStub::DynamicSlot;
- ICGetElemNativeCompiler<T> compiler(cx, getGetElemStubKind<T>(ICStub::GetElem_NativeSlotName),
- monitorStub, obj, holder, key,
- acctype, needsAtomize, offset);
- ICStub* newStub = compiler.getStub(compiler.getStubSpace(script));
- if (!newStub)
- return false;
-
- stub->addNewStub(newStub);
- *attached = true;
- return true;
- }
-
if (!holder->isNative())
return true;
@@ -1366,7 +1320,7 @@ IsNativeDenseElementAccess(HandleObject obj, HandleValue key)
static bool
IsNativeOrUnboxedDenseElementAccess(HandleObject obj, HandleValue key)
{
- if (!obj->isNative() && !obj->is<UnboxedArrayObject>())
+ if (!obj->isNative())
return false;
if (key.isInt32() && key.toInt32() >= 0 && !obj->is<TypedArrayObject>())
return true;
@@ -1450,7 +1404,7 @@ TryAttachGetElemStub(JSContext* cx, JSScript* script, jsbytecode* pc, ICGetElem_
}
// Check for NativeObject[id] and UnboxedPlainObject[id] shape-optimizable accesses.
- if (obj->isNative() || obj->is<UnboxedPlainObject>()) {
+ if (obj->isNative()) {
RootedScript rootedScript(cx, script);
if (rhs.isString()) {
if (!TryAttachNativeOrUnboxedGetValueElemStub<PropertyName*>(cx, rootedScript, pc, stub,
@@ -1470,20 +1424,6 @@ TryAttachGetElemStub(JSContext* cx, JSScript* script, jsbytecode* pc, ICGetElem_
script = rootedScript;
}
- // Check for UnboxedArray[int] accesses.
- if (obj->is<UnboxedArrayObject>() && rhs.isInt32() && rhs.toInt32() >= 0) {
- JitSpew(JitSpew_BaselineIC, " Generating GetElem(UnboxedArray[Int32]) stub");
- ICGetElem_UnboxedArray::Compiler compiler(cx, stub->fallbackMonitorStub()->firstMonitorStub(),
- obj->group());
- ICStub* unboxedStub = compiler.getStub(compiler.getStubSpace(script));
- if (!unboxedStub)
- return false;
-
- stub->addNewStub(unboxedStub);
- *attached = true;
- return true;
- }
-
// Check for TypedArray[int] => Number and TypedObject[int] => Number accesses.
if ((obj->is<TypedArrayObject>() || IsPrimitiveArrayTypedObject(obj)) &&
rhs.isNumber() &&
@@ -1876,14 +1816,6 @@ ICGetElemNativeCompiler<T>::generateStubCode(MacroAssembler& masm)
Register holderReg;
if (obj_ == holder_) {
holderReg = objReg;
-
- if (obj_->is<UnboxedPlainObject>() && acctype_ != ICGetElemNativeStub::UnboxedProperty) {
- // The property will be loaded off the unboxed expando.
- masm.push(R1.scratchReg());
- popR1 = true;
- holderReg = R1.scratchReg();
- masm.loadPtr(Address(objReg, UnboxedPlainObject::offsetOfExpando()), holderReg);
- }
} else {
// Shape guard holder.
if (regs.empty()) {
@@ -1934,13 +1866,6 @@ ICGetElemNativeCompiler<T>::generateStubCode(MacroAssembler& masm)
if (popR1)
masm.addToStackPtr(ImmWord(sizeof(size_t)));
- } else if (acctype_ == ICGetElemNativeStub::UnboxedProperty) {
- masm.load32(Address(ICStubReg, ICGetElemNativeSlotStub<T>::offsetOfOffset()),
- scratchReg);
- masm.loadUnboxedProperty(BaseIndex(objReg, scratchReg, TimesOne), unboxedType_,
- TypedOrValueRegister(R0));
- if (popR1)
- masm.addToStackPtr(ImmWord(sizeof(size_t)));
} else {
MOZ_ASSERT(acctype_ == ICGetElemNativeStub::NativeGetter ||
acctype_ == ICGetElemNativeStub::ScriptedGetter);
@@ -2090,56 +2015,6 @@ ICGetElem_Dense::Compiler::generateStubCode(MacroAssembler& masm)
}
//
-// GetElem_UnboxedArray
-//
-
-bool
-ICGetElem_UnboxedArray::Compiler::generateStubCode(MacroAssembler& masm)
-{
- MOZ_ASSERT(engine_ == Engine::Baseline);
-
- Label failure;
- masm.branchTestObject(Assembler::NotEqual, R0, &failure);
- masm.branchTestInt32(Assembler::NotEqual, R1, &failure);
-
- AllocatableGeneralRegisterSet regs(availableGeneralRegs(2));
- Register scratchReg = regs.takeAny();
-
- // Unbox R0 and group guard.
- Register obj = masm.extractObject(R0, ExtractTemp0);
- masm.loadPtr(Address(ICStubReg, ICGetElem_UnboxedArray::offsetOfGroup()), scratchReg);
- masm.branchTestObjGroup(Assembler::NotEqual, obj, scratchReg, &failure);
-
- // Unbox key.
- Register key = masm.extractInt32(R1, ExtractTemp1);
-
- // Bounds check.
- masm.load32(Address(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()),
- scratchReg);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), scratchReg);
- masm.branch32(Assembler::BelowOrEqual, scratchReg, key, &failure);
-
- // Load obj->elements.
- masm.loadPtr(Address(obj, UnboxedArrayObject::offsetOfElements()), scratchReg);
-
- // Load value.
- size_t width = UnboxedTypeSize(elementType_);
- BaseIndex addr(scratchReg, key, ScaleFromElemWidth(width));
- masm.loadUnboxedProperty(addr, elementType_, R0);
-
- // Only monitor the result if its type might change.
- if (elementType_ == JSVAL_TYPE_OBJECT)
- EmitEnterTypeMonitorIC(masm);
- else
- EmitReturnFromIC(masm);
-
- // Failure case - jump to next stub
- masm.bind(&failure);
- EmitStubGuardFailure(masm);
- return true;
-}
-
-//
// GetElem_TypedArray
//
@@ -2387,14 +2262,20 @@ DenseOrUnboxedArraySetElemStubExists(JSContext* cx, ICStub::Kind kind,
for (ICStubConstIterator iter = stub->beginChainConst(); !iter.atEnd(); iter++) {
if (kind == ICStub::SetElem_DenseOrUnboxedArray && iter->isSetElem_DenseOrUnboxedArray()) {
ICSetElem_DenseOrUnboxedArray* nstub = iter->toSetElem_DenseOrUnboxedArray();
- if (obj->maybeShape() == nstub->shape() && obj->getGroup(cx) == nstub->group())
+ if (obj->maybeShape() == nstub->shape() &&
+ JSObject::getGroup(cx, obj) == nstub->group())
+ {
return true;
+ }
}
if (kind == ICStub::SetElem_DenseOrUnboxedArrayAdd && iter->isSetElem_DenseOrUnboxedArrayAdd()) {
ICSetElem_DenseOrUnboxedArrayAdd* nstub = iter->toSetElem_DenseOrUnboxedArrayAdd();
- if (obj->getGroup(cx) == nstub->group() && SetElemAddHasSameShapes(nstub, obj))
+ if (JSObject::getGroup(cx, obj) == nstub->group() &&
+ SetElemAddHasSameShapes(nstub, obj))
+ {
return true;
+ }
}
}
return false;
@@ -2437,8 +2318,8 @@ CanOptimizeDenseOrUnboxedArraySetElem(JSObject* obj, uint32_t index,
Shape* oldShape, uint32_t oldCapacity, uint32_t oldInitLength,
bool* isAddingCaseOut, size_t* protoDepthOut)
{
- uint32_t initLength = GetAnyBoxedOrUnboxedInitializedLength(obj);
- uint32_t capacity = GetAnyBoxedOrUnboxedCapacity(obj);
+ uint32_t initLength = obj->as<NativeObject>().getDenseInitializedLength();
+ uint32_t capacity = obj->as<NativeObject>().getDenseCapacity();
*isAddingCaseOut = false;
*protoDepthOut = 0;
@@ -2447,10 +2328,6 @@ CanOptimizeDenseOrUnboxedArraySetElem(JSObject* obj, uint32_t index,
if (initLength < oldInitLength || capacity < oldCapacity)
return false;
- // Unboxed arrays need to be able to emit floating point code.
- if (obj->is<UnboxedArrayObject>() && !obj->runtimeFromMainThread()->jitSupportsFloatingPoint)
- return false;
-
Shape* shape = obj->maybeShape();
// Cannot optimize if the shape changed.
@@ -2532,8 +2409,8 @@ DoSetElemFallback(JSContext* cx, BaselineFrame* frame, ICSetElem_Fallback* stub_
uint32_t oldCapacity = 0;
uint32_t oldInitLength = 0;
if (index.isInt32() && index.toInt32() >= 0) {
- oldCapacity = GetAnyBoxedOrUnboxedCapacity(obj);
- oldInitLength = GetAnyBoxedOrUnboxedInitializedLength(obj);
+ oldCapacity = obj->as<NativeObject>().getDenseCapacity();
+ oldInitLength = obj->as<NativeObject>().getDenseInitializedLength();
}
if (op == JSOP_INITELEM || op == JSOP_INITHIDDENELEM) {
@@ -2584,7 +2461,7 @@ DoSetElemFallback(JSContext* cx, BaselineFrame* frame, ICSetElem_Fallback* stub_
&addingCase, &protoDepth))
{
RootedShape shape(cx, obj->maybeShape());
- RootedObjectGroup group(cx, obj->getGroup(cx));
+ RootedObjectGroup group(cx, JSObject::getGroup(cx, obj));
if (!group)
return false;
@@ -2741,18 +2618,6 @@ BaselineScript::noteArrayWriteHole(uint32_t pcOffset)
// SetElem_DenseOrUnboxedArray
//
-template <typename T>
-void
-EmitUnboxedPreBarrierForBaseline(MacroAssembler &masm, T address, JSValueType type)
-{
- if (type == JSVAL_TYPE_OBJECT)
- EmitPreBarrier(masm, address, MIRType::Object);
- else if (type == JSVAL_TYPE_STRING)
- EmitPreBarrier(masm, address, MIRType::String);
- else
- MOZ_ASSERT(!UnboxedTypeNeedsPreBarrier(type));
-}
-
bool
ICSetElem_DenseOrUnboxedArray::Compiler::generateStubCode(MacroAssembler& masm)
{
@@ -2871,29 +2736,6 @@ ICSetElem_DenseOrUnboxedArray::Compiler::generateStubCode(MacroAssembler& masm)
masm.loadValue(valueAddr, tmpVal);
EmitPreBarrier(masm, element, MIRType::Value);
masm.storeValue(tmpVal, element);
- } else {
- // Set element on an unboxed array.
-
- // Bounds check.
- Address initLength(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength());
- masm.load32(initLength, scratchReg);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), scratchReg);
- masm.branch32(Assembler::BelowOrEqual, scratchReg, key, &failure);
-
- // Load obj->elements.
- masm.loadPtr(Address(obj, UnboxedArrayObject::offsetOfElements()), scratchReg);
-
- // Compute the address being written to.
- BaseIndex address(scratchReg, key, ScaleFromElemWidth(UnboxedTypeSize(unboxedType_)));
-
- EmitUnboxedPreBarrierForBaseline(masm, address, unboxedType_);
-
- Address valueAddr(masm.getStackPointer(), ICStackValueOffset + sizeof(Value));
- masm.Push(R0);
- masm.loadValue(valueAddr, R0);
- masm.storeUnboxedProperty(address, unboxedType_,
- ConstantOrRegister(TypedOrValueRegister(R0)), &failurePopR0);
- masm.Pop(R0);
}
EmitReturnFromIC(masm);
@@ -3087,40 +2929,6 @@ ICSetElemDenseOrUnboxedArrayAddCompiler::generateStubCode(MacroAssembler& masm)
BaseIndex element(scratchReg, key, TimesEight);
masm.loadValue(valueAddr, tmpVal);
masm.storeValue(tmpVal, element);
- } else {
- // Adding element to an unboxed array.
-
- // Bounds check (key == initLength)
- Address initLengthAddr(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength());
- masm.load32(initLengthAddr, scratchReg);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), scratchReg);
- masm.branch32(Assembler::NotEqual, scratchReg, key, &failure);
-
- // Capacity check.
- masm.checkUnboxedArrayCapacity(obj, RegisterOrInt32Constant(key), scratchReg, &failure);
-
- // Load obj->elements.
- masm.loadPtr(Address(obj, UnboxedArrayObject::offsetOfElements()), scratchReg);
-
- // Write the value first, since this can fail. No need for pre-barrier
- // since we're not overwriting an old value.
- masm.Push(R0);
- Address valueAddr(masm.getStackPointer(), ICStackValueOffset + sizeof(Value));
- masm.loadValue(valueAddr, R0);
- BaseIndex address(scratchReg, key, ScaleFromElemWidth(UnboxedTypeSize(unboxedType_)));
- masm.storeUnboxedProperty(address, unboxedType_,
- ConstantOrRegister(TypedOrValueRegister(R0)), &failurePopR0);
- masm.Pop(R0);
-
- // Increment initialized length.
- masm.add32(Imm32(1), initLengthAddr);
-
- // If length is now <= key, increment length.
- Address lengthAddr(obj, UnboxedArrayObject::offsetOfLength());
- Label skipIncrementLength;
- masm.branch32(Assembler::Above, lengthAddr, key, &skipIncrementLength);
- masm.add32(Imm32(1), lengthAddr);
- masm.bind(&skipIncrementLength);
}
EmitReturnFromIC(masm);
@@ -4256,18 +4064,7 @@ TryAttachSetValuePropStub(JSContext* cx, HandleScript script, jsbytecode* pc, IC
return true;
if (!obj->isNative()) {
- if (obj->is<UnboxedPlainObject>()) {
- UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando();
- if (expando) {
- shape = expando->lookup(cx, name);
- if (!shape)
- return true;
- } else {
- return true;
- }
- } else {
- return true;
- }
+ return true;
}
size_t chainDepth;
@@ -4418,40 +4215,6 @@ TryAttachSetAccessorPropStub(JSContext* cx, HandleScript script, jsbytecode* pc,
}
static bool
-TryAttachUnboxedSetPropStub(JSContext* cx, HandleScript script,
- ICSetProp_Fallback* stub, HandleId id,
- HandleObject obj, HandleValue rhs, bool* attached)
-{
- MOZ_ASSERT(!*attached);
-
- if (!cx->runtime()->jitSupportsFloatingPoint)
- return true;
-
- if (!obj->is<UnboxedPlainObject>())
- return true;
-
- const UnboxedLayout::Property* property = obj->as<UnboxedPlainObject>().layout().lookup(id);
- if (!property)
- return true;
-
- ICSetProp_Unboxed::Compiler compiler(cx, obj->group(),
- property->offset + UnboxedPlainObject::offsetOfData(),
- property->type);
- ICUpdatedStub* newStub = compiler.getStub(compiler.getStubSpace(script));
- if (!newStub)
- return false;
- if (compiler.needsUpdateStubs() && !newStub->addUpdateStubForValue(cx, script, obj, id, rhs))
- return false;
-
- stub->addNewStub(newStub);
-
- StripPreliminaryObjectStubs(cx, stub);
-
- *attached = true;
- return true;
-}
-
-static bool
TryAttachTypedObjectSetPropStub(JSContext* cx, HandleScript script,
ICSetProp_Fallback* stub, HandleId id,
HandleObject obj, HandleValue rhs, bool* attached)
@@ -4529,17 +4292,11 @@ DoSetPropFallback(JSContext* cx, BaselineFrame* frame, ICSetProp_Fallback* stub_
if (!obj)
return false;
RootedShape oldShape(cx, obj->maybeShape());
- RootedObjectGroup oldGroup(cx, obj->getGroup(cx));
+ RootedObjectGroup oldGroup(cx, JSObject::getGroup(cx, obj));
if (!oldGroup)
return false;
RootedReceiverGuard oldGuard(cx, ReceiverGuard(obj));
- if (obj->is<UnboxedPlainObject>()) {
- MOZ_ASSERT(!oldShape);
- if (UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando())
- oldShape = expando->lastProperty();
- }
-
bool attached = false;
// There are some reasons we can fail to attach a stub that are temporary.
// We want to avoid calling noteUnoptimizableAccess() if the reason we
@@ -4612,15 +4369,6 @@ DoSetPropFallback(JSContext* cx, BaselineFrame* frame, ICSetProp_Fallback* stub_
if (!attached &&
lhs.isObject() &&
- !TryAttachUnboxedSetPropStub(cx, script, stub, id, obj, rhs, &attached))
- {
- return false;
- }
- if (attached)
- return true;
-
- if (!attached &&
- lhs.isObject() &&
!TryAttachTypedObjectSetPropStub(cx, script, stub, id, obj, rhs, &attached))
{
return false;
@@ -4703,20 +4451,7 @@ GuardGroupAndShapeMaybeUnboxedExpando(MacroAssembler& masm, JSObject* obj,
// Guard against shape or expando shape.
masm.loadPtr(Address(ICStubReg, offsetOfShape), scratch);
- if (obj->is<UnboxedPlainObject>()) {
- Address expandoAddress(object, UnboxedPlainObject::offsetOfExpando());
- masm.branchPtr(Assembler::Equal, expandoAddress, ImmWord(0), failure);
- Label done;
- masm.push(object);
- masm.loadPtr(expandoAddress, object);
- masm.branchTestObjShape(Assembler::Equal, object, scratch, &done);
- masm.pop(object);
- masm.jump(failure);
- masm.bind(&done);
- masm.pop(object);
- } else {
- masm.branchTestObjShape(Assembler::NotEqual, object, scratch, failure);
- }
+ masm.branchTestObjShape(Assembler::NotEqual, object, scratch, failure);
}
bool
@@ -4755,13 +4490,7 @@ ICSetProp_Native::Compiler::generateStubCode(MacroAssembler& masm)
regs.takeUnchecked(objReg);
Register holderReg;
- if (obj_->is<UnboxedPlainObject>()) {
- // We are loading off the expando object, so use that for the holder.
- holderReg = regs.takeAny();
- masm.loadPtr(Address(objReg, UnboxedPlainObject::offsetOfExpando()), holderReg);
- if (!isFixedSlot_)
- masm.loadPtr(Address(holderReg, NativeObject::offsetOfSlots()), holderReg);
- } else if (isFixedSlot_) {
+ if (isFixedSlot_) {
holderReg = objReg;
} else {
holderReg = regs.takeAny();
@@ -4898,31 +4627,17 @@ ICSetPropNativeAddCompiler::generateStubCode(MacroAssembler& masm)
regs.add(R0);
regs.takeUnchecked(objReg);
- if (obj_->is<UnboxedPlainObject>()) {
- holderReg = regs.takeAny();
- masm.loadPtr(Address(objReg, UnboxedPlainObject::offsetOfExpando()), holderReg);
-
- // Write the expando object's new shape.
- Address shapeAddr(holderReg, ShapedObject::offsetOfShape());
- EmitPreBarrier(masm, shapeAddr, MIRType::Shape);
- masm.loadPtr(Address(ICStubReg, ICSetProp_NativeAdd::offsetOfNewShape()), scratch);
- masm.storePtr(scratch, shapeAddr);
+ // Write the object's new shape.
+ Address shapeAddr(objReg, ShapedObject::offsetOfShape());
+ EmitPreBarrier(masm, shapeAddr, MIRType::Shape);
+ masm.loadPtr(Address(ICStubReg, ICSetProp_NativeAdd::offsetOfNewShape()), scratch);
+ masm.storePtr(scratch, shapeAddr);
- if (!isFixedSlot_)
- masm.loadPtr(Address(holderReg, NativeObject::offsetOfSlots()), holderReg);
+ if (isFixedSlot_) {
+ holderReg = objReg;
} else {
- // Write the object's new shape.
- Address shapeAddr(objReg, ShapedObject::offsetOfShape());
- EmitPreBarrier(masm, shapeAddr, MIRType::Shape);
- masm.loadPtr(Address(ICStubReg, ICSetProp_NativeAdd::offsetOfNewShape()), scratch);
- masm.storePtr(scratch, shapeAddr);
-
- if (isFixedSlot_) {
- holderReg = objReg;
- } else {
- holderReg = regs.takeAny();
- masm.loadPtr(Address(objReg, NativeObject::offsetOfSlots()), holderReg);
- }
+ holderReg = regs.takeAny();
+ masm.loadPtr(Address(objReg, NativeObject::offsetOfSlots()), holderReg);
}
// Perform the store. No write barrier required since this is a new
@@ -4954,70 +4669,6 @@ ICSetPropNativeAddCompiler::generateStubCode(MacroAssembler& masm)
}
bool
-ICSetProp_Unboxed::Compiler::generateStubCode(MacroAssembler& masm)
-{
- MOZ_ASSERT(engine_ == Engine::Baseline);
-
- Label failure;
-
- // Guard input is an object.
- masm.branchTestObject(Assembler::NotEqual, R0, &failure);
-
- AllocatableGeneralRegisterSet regs(availableGeneralRegs(2));
- Register scratch = regs.takeAny();
-
- // Unbox and group guard.
- Register object = masm.extractObject(R0, ExtractTemp0);
- masm.loadPtr(Address(ICStubReg, ICSetProp_Unboxed::offsetOfGroup()), scratch);
- masm.branchPtr(Assembler::NotEqual, Address(object, JSObject::offsetOfGroup()), scratch,
- &failure);
-
- if (needsUpdateStubs()) {
- // Stow both R0 and R1 (object and value).
- EmitStowICValues(masm, 2);
-
- // Move RHS into R0 for TypeUpdate check.
- masm.moveValue(R1, R0);
-
- // Call the type update stub.
- if (!callTypeUpdateIC(masm, sizeof(Value)))
- return false;
-
- // Unstow R0 and R1 (object and key)
- EmitUnstowICValues(masm, 2);
-
- // The TypeUpdate IC may have smashed object. Rederive it.
- masm.unboxObject(R0, object);
-
- // Trigger post barriers here on the values being written. Fields which
- // objects can be written to also need update stubs.
- LiveGeneralRegisterSet saveRegs;
- saveRegs.add(R0);
- saveRegs.add(R1);
- saveRegs.addUnchecked(object);
- saveRegs.add(ICStubReg);
- emitPostWriteBarrierSlot(masm, object, R1, scratch, saveRegs);
- }
-
- // Compute the address being written to.
- masm.load32(Address(ICStubReg, ICSetProp_Unboxed::offsetOfFieldOffset()), scratch);
- BaseIndex address(object, scratch, TimesOne);
-
- EmitUnboxedPreBarrierForBaseline(masm, address, fieldType_);
- masm.storeUnboxedProperty(address, fieldType_,
- ConstantOrRegister(TypedOrValueRegister(R1)), &failure);
-
- // The RHS has to be in R0.
- masm.moveValue(R1, R0);
-
- EmitReturnFromIC(masm);
-
- masm.bind(&failure);
- EmitStubGuardFailure(masm);
- return true;
-}
-
-bool
ICSetProp_TypedObject::Compiler::generateStubCode(MacroAssembler& masm)
{
MOZ_ASSERT(engine_ == Engine::Baseline);
@@ -5490,13 +5141,6 @@ GetTemplateObjectForSimd(JSContext* cx, JSFunction* target, MutableHandleObject
return true;
}
-static void
-EnsureArrayGroupAnalyzed(JSContext* cx, JSObject* obj)
-{
- if (PreliminaryObjectArrayWithTemplate* objects = obj->group()->maybePreliminaryObjects())
- objects->maybeAnalyze(cx, obj->group(), /* forceAnalyze = */ true);
-}
-
static bool
GetTemplateObjectForNative(JSContext* cx, HandleFunction target, const CallArgs& args,
MutableHandleObject res, bool* skipAttach)
@@ -5528,10 +5172,7 @@ GetTemplateObjectForNative(JSContext* cx, HandleFunction target, const CallArgs&
// With this and other array templates, analyze the group so that
// we don't end up with a template whose structure might change later.
res.set(NewFullyAllocatedArrayForCallingAllocationSite(cx, count, TenuredObject));
- if (!res)
- return false;
- EnsureArrayGroupAnalyzed(cx, res);
- return true;
+ return !!res;
}
}
@@ -5549,18 +5190,14 @@ GetTemplateObjectForNative(JSContext* cx, HandleFunction target, const CallArgs&
if (native == js::array_slice) {
if (args.thisv().isObject()) {
- JSObject* obj = &args.thisv().toObject();
+ RootedObject obj(cx, &args.thisv().toObject());
if (!obj->isSingleton()) {
if (obj->group()->maybePreliminaryObjects()) {
*skipAttach = true;
return true;
}
- res.set(NewFullyAllocatedArrayTryReuseGroup(cx, &args.thisv().toObject(), 0,
- TenuredObject));
- if (!res)
- return false;
- EnsureArrayGroupAnalyzed(cx, res);
- return true;
+ res.set(NewFullyAllocatedArrayTryReuseGroup(cx, obj, 0, TenuredObject));
+ return !!res;
}
}
}
@@ -5577,10 +5214,7 @@ GetTemplateObjectForNative(JSContext* cx, HandleFunction target, const CallArgs&
}
res.set(NewFullyAllocatedArrayForCallingAllocationSite(cx, 0, TenuredObject));
- if (!res)
- return false;
- EnsureArrayGroupAnalyzed(cx, res);
- return true;
+ return !!res;
}
if (native == StringConstructor) {
@@ -5793,7 +5427,7 @@ TryAttachCallStub(JSContext* cx, ICCall_Fallback* stub, HandleScript script, jsb
if (!thisObject)
return false;
- if (thisObject->is<PlainObject>() || thisObject->is<UnboxedPlainObject>())
+ if (thisObject->is<PlainObject>())
templateObject = thisObject;
}
@@ -5869,11 +5503,17 @@ TryAttachCallStub(JSContext* cx, ICCall_Fallback* stub, HandleScript script, jsb
MOZ_ASSERT_IF(templateObject, !templateObject->group()->maybePreliminaryObjects());
}
+ bool ignoresReturnValue = false;
+ if (op == JSOP_CALL_IGNORES_RV && fun->isNative()) {
+ const JSJitInfo* jitInfo = fun->jitInfo();
+ ignoresReturnValue = jitInfo && jitInfo->type() == JSJitInfo::IgnoresReturnValueNative;
+ }
+
JitSpew(JitSpew_BaselineIC, " Generating Call_Native stub (fun=%p, cons=%s, spread=%s)",
fun.get(), constructing ? "yes" : "no", isSpread ? "yes" : "no");
ICCall_Native::Compiler compiler(cx, stub->fallbackMonitorStub()->firstMonitorStub(),
- fun, templateObject, constructing, isSpread,
- script->pcToOffset(pc));
+ fun, templateObject, constructing, ignoresReturnValue,
+ isSpread, script->pcToOffset(pc));
ICStub* newStub = compiler.getStub(compiler.getStubSpace(script));
if (!newStub)
return false;
@@ -5887,15 +5527,24 @@ TryAttachCallStub(JSContext* cx, ICCall_Fallback* stub, HandleScript script, jsb
}
static bool
-CopyArray(JSContext* cx, HandleObject obj, MutableHandleValue result)
+CopyArray(JSContext* cx, HandleArrayObject arr, MutableHandleValue result)
{
- uint32_t length = GetAnyBoxedOrUnboxedArrayLength(obj);
- JSObject* nobj = NewFullyAllocatedArrayTryReuseGroup(cx, obj, length, TenuredObject);
+ uint32_t length = arr->length();
+ ArrayObject* nobj = NewFullyAllocatedArrayTryReuseGroup(cx, arr, length, TenuredObject);
if (!nobj)
return false;
- EnsureArrayGroupAnalyzed(cx, nobj);
- CopyAnyBoxedOrUnboxedDenseElements(cx, nobj, obj, 0, 0, length);
-
+
+ MOZ_ASSERT(arr->isNative());
+ MOZ_ASSERT(nobj->isNative());
+ MOZ_ASSERT(nobj->as<NativeObject>().getDenseInitializedLength() == 0);
+ MOZ_ASSERT(arr->as<NativeObject>().getDenseInitializedLength() >= length);
+ MOZ_ASSERT(nobj->as<NativeObject>().getDenseCapacity() >= length);
+
+ nobj->as<NativeObject>().setDenseInitializedLength(length);
+
+ const Value* vp = arr->as<NativeObject>().getDenseElements();
+ nobj->as<NativeObject>().initDenseElements(0, vp, length);
+
result.setObject(*nobj);
return true;
}
@@ -5926,26 +5575,22 @@ TryAttachStringSplit(JSContext* cx, ICCall_Fallback* stub, HandleScript script,
RootedValue arr(cx);
// Copy the array before storing in stub.
- if (!CopyArray(cx, obj, &arr))
+ if (!CopyArray(cx, obj.as<ArrayObject>(), &arr))
return false;
// Atomize all elements of the array.
- RootedObject arrObj(cx, &arr.toObject());
- uint32_t initLength = GetAnyBoxedOrUnboxedArrayLength(arrObj);
+ RootedArrayObject arrObj(cx, &arr.toObject().as<ArrayObject>());
+ uint32_t initLength = arrObj->length();
for (uint32_t i = 0; i < initLength; i++) {
- JSAtom* str = js::AtomizeString(cx, GetAnyBoxedOrUnboxedDenseElement(arrObj, i).toString());
+ JSAtom* str = js::AtomizeString(cx, arrObj->getDenseElement(i).toString());
if (!str)
return false;
- if (!SetAnyBoxedOrUnboxedDenseElement(cx, arrObj, i, StringValue(str))) {
- // The value could not be stored to an unboxed dense element.
- return true;
- }
+ arrObj->setDenseElementWithType(cx, i, StringValue(str));
}
ICCall_StringSplit::Compiler compiler(cx, stub->fallbackMonitorStub()->firstMonitorStub(),
- script->pcToOffset(pc), str, sep,
- arr);
+ script->pcToOffset(pc), str, sep, arrObj);
ICStub* newStub = compiler.getStub(compiler.getStubSpace(script));
if (!newStub)
return false;
@@ -5971,12 +5616,14 @@ DoCallFallback(JSContext* cx, BaselineFrame* frame, ICCall_Fallback* stub_, uint
MOZ_ASSERT(argc == GET_ARGC(pc));
bool constructing = (op == JSOP_NEW);
+ bool ignoresReturnValue = (op == JSOP_CALL_IGNORES_RV);
// Ensure vp array is rooted - we may GC in here.
size_t numValues = argc + 2 + constructing;
AutoArrayRooter vpRoot(cx, numValues, vp);
- CallArgs callArgs = CallArgsFromSp(argc + constructing, vp + numValues, constructing);
+ CallArgs callArgs = CallArgsFromSp(argc + constructing, vp + numValues, constructing,
+ ignoresReturnValue);
RootedValue callee(cx, vp[0]);
// Handle funapply with JSOP_ARGUMENTS
@@ -6006,6 +5653,7 @@ DoCallFallback(JSContext* cx, BaselineFrame* frame, ICCall_Fallback* stub_, uint
return false;
} else {
MOZ_ASSERT(op == JSOP_CALL ||
+ op == JSOP_CALL_IGNORES_RV ||
op == JSOP_CALLITER ||
op == JSOP_FUNCALL ||
op == JSOP_FUNAPPLY ||
@@ -6830,7 +6478,7 @@ ICCallScriptedCompiler::generateStubCode(MacroAssembler& masm)
return true;
}
-typedef bool (*CopyArrayFn)(JSContext*, HandleObject, MutableHandleValue);
+typedef bool (*CopyArrayFn)(JSContext*, HandleArrayObject, MutableHandleValue);
static const VMFunction CopyArrayInfo = FunctionInfo<CopyArrayFn>(CopyArray, "CopyArray");
bool
@@ -7056,7 +6704,12 @@ ICCall_Native::Compiler::generateStubCode(MacroAssembler& masm)
// stub and use that instead of the original one.
masm.callWithABI(Address(ICStubReg, ICCall_Native::offsetOfNative()));
#else
- masm.callWithABI(Address(callee, JSFunction::offsetOfNativeOrScript()));
+ if (ignoresReturnValue_) {
+ masm.loadPtr(Address(callee, JSFunction::offsetOfJitInfo()), callee);
+ masm.callWithABI(Address(callee, JSJitInfo::offsetOfIgnoresReturnValueNative()));
+ } else {
+ masm.callWithABI(Address(callee, JSFunction::offsetOfNativeOrScript()));
+ }
#endif
// Test for failure.
@@ -8301,19 +7954,6 @@ ICGetElem_Dense::Clone(JSContext* cx, ICStubSpace* space, ICStub* firstMonitorSt
return New<ICGetElem_Dense>(cx, space, other.jitCode(), firstMonitorStub, other.shape_);
}
-ICGetElem_UnboxedArray::ICGetElem_UnboxedArray(JitCode* stubCode, ICStub* firstMonitorStub,
- ObjectGroup *group)
- : ICMonitoredStub(GetElem_UnboxedArray, stubCode, firstMonitorStub),
- group_(group)
-{ }
-
-/* static */ ICGetElem_UnboxedArray*
-ICGetElem_UnboxedArray::Clone(JSContext* cx, ICStubSpace* space, ICStub* firstMonitorStub,
- ICGetElem_UnboxedArray& other)
-{
- return New<ICGetElem_UnboxedArray>(cx, space, other.jitCode(), firstMonitorStub, other.group_);
-}
-
ICGetElem_TypedArray::ICGetElem_TypedArray(JitCode* stubCode, Shape* shape, Scalar::Type type)
: ICStub(GetElem_TypedArray, stubCode),
shape_(shape)
@@ -8349,7 +7989,7 @@ ICUpdatedStub*
ICSetElemDenseOrUnboxedArrayAddCompiler::getStubSpecific(ICStubSpace* space,
Handle<ShapeVector> shapes)
{
- RootedObjectGroup group(cx, obj_->getGroup(cx));
+ RootedObjectGroup group(cx, JSObject::getGroup(cx, obj_));
if (!group)
return nullptr;
Rooted<JitCode*> stubCode(cx, getStubCode());
@@ -8486,7 +8126,7 @@ ICSetProp_Native::ICSetProp_Native(JitCode* stubCode, ObjectGroup* group, Shape*
ICSetProp_Native*
ICSetProp_Native::Compiler::getStub(ICStubSpace* space)
{
- RootedObjectGroup group(cx, obj_->getGroup(cx));
+ RootedObjectGroup group(cx, JSObject::getGroup(cx, obj_));
if (!group)
return nullptr;
@@ -8689,8 +8329,8 @@ static bool DoRestFallback(JSContext* cx, BaselineFrame* frame, ICRest_Fallback*
unsigned numRest = numActuals > numFormals ? numActuals - numFormals : 0;
Value* rest = frame->argv() + numFormals;
- JSObject* obj = ObjectGroup::newArrayObject(cx, rest, numRest, GenericObject,
- ObjectGroup::NewArrayKind::UnknownIndex);
+ ArrayObject* obj = ObjectGroup::newArrayObject(cx, rest, numRest, GenericObject,
+ ObjectGroup::NewArrayKind::UnknownIndex);
if (!obj)
return false;
res.setObject(*obj);
diff --git a/js/src/jit/BaselineIC.h b/js/src/jit/BaselineIC.h
index a57556d99..e1ad12559 100644
--- a/js/src/jit/BaselineIC.h
+++ b/js/src/jit/BaselineIC.h
@@ -22,7 +22,6 @@
#include "jit/SharedICRegisters.h"
#include "js/GCVector.h"
#include "vm/ArrayObject.h"
-#include "vm/UnboxedObject.h"
namespace js {
namespace jit {
@@ -892,54 +891,6 @@ class ICGetElem_Dense : public ICMonitoredStub
};
};
-class ICGetElem_UnboxedArray : public ICMonitoredStub
-{
- friend class ICStubSpace;
-
- GCPtrObjectGroup group_;
-
- ICGetElem_UnboxedArray(JitCode* stubCode, ICStub* firstMonitorStub, ObjectGroup* group);
-
- public:
- static ICGetElem_UnboxedArray* Clone(JSContext* cx, ICStubSpace* space,
- ICStub* firstMonitorStub, ICGetElem_UnboxedArray& other);
-
- static size_t offsetOfGroup() {
- return offsetof(ICGetElem_UnboxedArray, group_);
- }
-
- GCPtrObjectGroup& group() {
- return group_;
- }
-
- class Compiler : public ICStubCompiler {
- ICStub* firstMonitorStub_;
- RootedObjectGroup group_;
- JSValueType elementType_;
-
- protected:
- MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm);
-
- virtual int32_t getKey() const {
- return static_cast<int32_t>(engine_) |
- (static_cast<int32_t>(kind) << 1) |
- (static_cast<int32_t>(elementType_) << 17);
- }
-
- public:
- Compiler(JSContext* cx, ICStub* firstMonitorStub, ObjectGroup* group)
- : ICStubCompiler(cx, ICStub::GetElem_UnboxedArray, Engine::Baseline),
- firstMonitorStub_(firstMonitorStub),
- group_(cx, group),
- elementType_(group->unboxedLayoutDontCheckGeneration().elementType())
- {}
-
- ICStub* getStub(ICStubSpace* space) {
- return newStub<ICGetElem_UnboxedArray>(space, getStubCode(), firstMonitorStub_, group_);
- }
- };
-};
-
// Accesses scalar elements of a typed array or typed object.
class ICGetElem_TypedArray : public ICStub
{
@@ -1115,9 +1066,7 @@ class ICSetElem_DenseOrUnboxedArray : public ICUpdatedStub
: ICStubCompiler(cx, ICStub::SetElem_DenseOrUnboxedArray, Engine::Baseline),
shape_(cx, shape),
group_(cx, group),
- unboxedType_(shape
- ? JSVAL_TYPE_MAGIC
- : group->unboxedLayoutDontCheckGeneration().elementType())
+ unboxedType_(JSVAL_TYPE_MAGIC)
{}
ICUpdatedStub* getStub(ICStubSpace* space) {
@@ -1225,9 +1174,7 @@ class ICSetElemDenseOrUnboxedArrayAddCompiler : public ICStubCompiler {
: ICStubCompiler(cx, ICStub::SetElem_DenseOrUnboxedArrayAdd, Engine::Baseline),
obj_(cx, obj),
protoChainDepth_(protoChainDepth),
- unboxedType_(obj->is<UnboxedArrayObject>()
- ? obj->as<UnboxedArrayObject>().elementType()
- : JSVAL_TYPE_MAGIC)
+ unboxedType_(JSVAL_TYPE_MAGIC)
{}
template <size_t ProtoChainDepth>
@@ -1875,8 +1822,7 @@ class ICSetProp_Native : public ICUpdatedStub
virtual int32_t getKey() const {
return static_cast<int32_t>(engine_) |
(static_cast<int32_t>(kind) << 1) |
- (static_cast<int32_t>(isFixedSlot_) << 17) |
- (static_cast<int32_t>(obj_->is<UnboxedPlainObject>()) << 18);
+ (static_cast<int32_t>(isFixedSlot_) << 17);
}
MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm);
@@ -1981,7 +1927,6 @@ class ICSetPropNativeAddCompiler : public ICStubCompiler
return static_cast<int32_t>(engine_) |
(static_cast<int32_t>(kind) << 1) |
(static_cast<int32_t>(isFixedSlot_) << 17) |
- (static_cast<int32_t>(obj_->is<UnboxedPlainObject>()) << 18) |
(static_cast<int32_t>(protoChainDepth_) << 19);
}
@@ -1995,7 +1940,7 @@ class ICSetPropNativeAddCompiler : public ICStubCompiler
template <size_t ProtoChainDepth>
ICUpdatedStub* getStubSpecific(ICStubSpace* space, Handle<ShapeVector> shapes)
{
- RootedObjectGroup newGroup(cx, obj_->getGroup(cx));
+ RootedObjectGroup newGroup(cx, JSObject::getGroup(cx, obj_));
if (!newGroup)
return nullptr;
@@ -2006,10 +1951,7 @@ class ICSetPropNativeAddCompiler : public ICStubCompiler
newGroup = nullptr;
RootedShape newShape(cx);
- if (obj_->isNative())
- newShape = obj_->as<NativeObject>().lastProperty();
- else
- newShape = obj_->as<UnboxedPlainObject>().maybeExpando()->lastProperty();
+ newShape = obj_->as<NativeObject>().lastProperty();
return newStub<ICSetProp_NativeAddImpl<ProtoChainDepth>>(
space, getStubCode(), oldGroup_, shapes, newShape, newGroup, offset_);
@@ -2335,6 +2277,7 @@ class ICSetProp_CallNative : public ICSetPropCallSetter
// Call
// JSOP_CALL
+// JSOP_CALL_IGNORES_RV
// JSOP_FUNAPPLY
// JSOP_FUNCALL
// JSOP_NEW
@@ -2605,6 +2548,7 @@ class ICCall_Native : public ICMonitoredStub
protected:
ICStub* firstMonitorStub_;
bool isConstructing_;
+ bool ignoresReturnValue_;
bool isSpread_;
RootedFunction callee_;
RootedObject templateObject_;
@@ -2614,17 +2558,19 @@ class ICCall_Native : public ICMonitoredStub
virtual int32_t getKey() const {
return static_cast<int32_t>(engine_) |
(static_cast<int32_t>(kind) << 1) |
- (static_cast<int32_t>(isConstructing_) << 17) |
- (static_cast<int32_t>(isSpread_) << 18);
+ (static_cast<int32_t>(isSpread_) << 17) |
+ (static_cast<int32_t>(isConstructing_) << 18) |
+ (static_cast<int32_t>(ignoresReturnValue_) << 19);
}
public:
Compiler(JSContext* cx, ICStub* firstMonitorStub,
HandleFunction callee, HandleObject templateObject,
- bool isConstructing, bool isSpread, uint32_t pcOffset)
+ bool isConstructing, bool ignoresReturnValue, bool isSpread, uint32_t pcOffset)
: ICCallStubCompiler(cx, ICStub::Call_Native),
firstMonitorStub_(firstMonitorStub),
isConstructing_(isConstructing),
+ ignoresReturnValue_(ignoresReturnValue),
isSpread_(isSpread),
callee_(cx, callee),
templateObject_(cx, templateObject),
@@ -2870,10 +2816,10 @@ class ICCall_StringSplit : public ICMonitoredStub
uint32_t pcOffset_;
GCPtrString expectedStr_;
GCPtrString expectedSep_;
- GCPtrObject templateObject_;
+ GCPtrArrayObject templateObject_;
ICCall_StringSplit(JitCode* stubCode, ICStub* firstMonitorStub, uint32_t pcOffset, JSString* str,
- JSString* sep, JSObject* templateObject)
+ JSString* sep, ArrayObject* templateObject)
: ICMonitoredStub(ICStub::Call_StringSplit, stubCode, firstMonitorStub),
pcOffset_(pcOffset), expectedStr_(str), expectedSep_(sep),
templateObject_(templateObject)
@@ -2900,7 +2846,7 @@ class ICCall_StringSplit : public ICMonitoredStub
return expectedSep_;
}
- GCPtrObject& templateObject() {
+ GCPtrArrayObject& templateObject() {
return templateObject_;
}
@@ -2910,7 +2856,7 @@ class ICCall_StringSplit : public ICMonitoredStub
uint32_t pcOffset_;
RootedString expectedStr_;
RootedString expectedSep_;
- RootedObject templateObject_;
+ RootedArrayObject templateObject_;
MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm);
@@ -2921,13 +2867,13 @@ class ICCall_StringSplit : public ICMonitoredStub
public:
Compiler(JSContext* cx, ICStub* firstMonitorStub, uint32_t pcOffset, HandleString str,
- HandleString sep, HandleValue templateObject)
+ HandleString sep, HandleArrayObject templateObject)
: ICCallStubCompiler(cx, ICStub::Call_StringSplit),
firstMonitorStub_(firstMonitorStub),
pcOffset_(pcOffset),
expectedStr_(cx, str),
expectedSep_(cx, sep),
- templateObject_(cx, &templateObject.toObject())
+ templateObject_(cx, templateObject)
{ }
ICStub* getStub(ICStubSpace* space) {
diff --git a/js/src/jit/BaselineInspector.cpp b/js/src/jit/BaselineInspector.cpp
index 9c7b88fb2..3b852debf 100644
--- a/js/src/jit/BaselineInspector.cpp
+++ b/js/src/jit/BaselineInspector.cpp
@@ -104,19 +104,11 @@ AddReceiver(const ReceiverGuard& receiver,
static bool
GetCacheIRReceiverForNativeReadSlot(ICCacheIR_Monitored* stub, ReceiverGuard* receiver)
{
- // We match either:
+ // We match:
//
// GuardIsObject 0
// GuardShape 0
// LoadFixedSlotResult 0 or LoadDynamicSlotResult 0
- //
- // or
- //
- // GuardIsObject 0
- // GuardGroup 0
- // 1: GuardAndLoadUnboxedExpando 0
- // GuardShape 1
- // LoadFixedSlotResult 1 or LoadDynamicSlotResult 1
*receiver = ReceiverGuard();
CacheIRReader reader(stub->stubInfo());
@@ -125,14 +117,6 @@ GetCacheIRReceiverForNativeReadSlot(ICCacheIR_Monitored* stub, ReceiverGuard* re
if (!reader.matchOp(CacheOp::GuardIsObject, objId))
return false;
- if (reader.matchOp(CacheOp::GuardGroup, objId)) {
- receiver->group = stub->stubInfo()->getStubField<ObjectGroup*>(stub, reader.stubOffset());
-
- if (!reader.matchOp(CacheOp::GuardAndLoadUnboxedExpando, objId))
- return false;
- objId = reader.objOperandId();
- }
-
if (reader.matchOp(CacheOp::GuardShape, objId)) {
receiver->shape = stub->stubInfo()->getStubField<Shape*>(stub, reader.stubOffset());
return reader.matchOpEither(CacheOp::LoadFixedSlotResult, CacheOp::LoadDynamicSlotResult);
@@ -141,29 +125,6 @@ GetCacheIRReceiverForNativeReadSlot(ICCacheIR_Monitored* stub, ReceiverGuard* re
return false;
}
-static bool
-GetCacheIRReceiverForUnboxedProperty(ICCacheIR_Monitored* stub, ReceiverGuard* receiver)
-{
- // We match:
- //
- // GuardIsObject 0
- // GuardGroup 0
- // LoadUnboxedPropertyResult 0 ..
-
- *receiver = ReceiverGuard();
- CacheIRReader reader(stub->stubInfo());
-
- ObjOperandId objId = ObjOperandId(0);
- if (!reader.matchOp(CacheOp::GuardIsObject, objId))
- return false;
-
- if (!reader.matchOp(CacheOp::GuardGroup, objId))
- return false;
- receiver->group = stub->stubInfo()->getStubField<ObjectGroup*>(stub, reader.stubOffset());
-
- return reader.matchOp(CacheOp::LoadUnboxedPropertyResult, objId);
-}
-
bool
BaselineInspector::maybeInfoForPropertyOp(jsbytecode* pc, ReceiverVector& receivers)
{
@@ -182,8 +143,7 @@ BaselineInspector::maybeInfoForPropertyOp(jsbytecode* pc, ReceiverVector& receiv
while (stub->next()) {
ReceiverGuard receiver;
if (stub->isCacheIR_Monitored()) {
- if (!GetCacheIRReceiverForNativeReadSlot(stub->toCacheIR_Monitored(), &receiver) &&
- !GetCacheIRReceiverForUnboxedProperty(stub->toCacheIR_Monitored(), &receiver))
+ if (!GetCacheIRReceiverForNativeReadSlot(stub->toCacheIR_Monitored(), &receiver))
{
receivers.clear();
return true;
@@ -191,8 +151,6 @@ BaselineInspector::maybeInfoForPropertyOp(jsbytecode* pc, ReceiverVector& receiv
} else if (stub->isSetProp_Native()) {
receiver = ReceiverGuard(stub->toSetProp_Native()->group(),
stub->toSetProp_Native()->shape());
- } else if (stub->isSetProp_Unboxed()) {
- receiver = ReceiverGuard(stub->toSetProp_Unboxed()->group(), nullptr);
} else {
receivers.clear();
return true;
@@ -580,7 +538,7 @@ BaselineInspector::getTemplateObjectForNative(jsbytecode* pc, Native native)
bool
BaselineInspector::isOptimizableCallStringSplit(jsbytecode* pc, JSString** strOut, JSString** sepOut,
- JSObject** objOut)
+ ArrayObject** objOut)
{
if (!hasBaselineScript())
return false;
diff --git a/js/src/jit/BaselineInspector.h b/js/src/jit/BaselineInspector.h
index 4a1791798..1ed4b5547 100644
--- a/js/src/jit/BaselineInspector.h
+++ b/js/src/jit/BaselineInspector.h
@@ -113,7 +113,7 @@ class BaselineInspector
bool hasSeenNonStringIterMore(jsbytecode* pc);
MOZ_MUST_USE bool isOptimizableCallStringSplit(jsbytecode* pc, JSString** strOut,
- JSString** sepOut, JSObject** objOut);
+ JSString** sepOut, ArrayObject** objOut);
JSObject* getTemplateObject(jsbytecode* pc);
JSObject* getTemplateObjectForNative(jsbytecode* pc, Native native);
JSObject* getTemplateObjectForClassHook(jsbytecode* pc, const Class* clasp);
diff --git a/js/src/jit/BaselineJIT.cpp b/js/src/jit/BaselineJIT.cpp
index d0e297c2d..5c21926b5 100644
--- a/js/src/jit/BaselineJIT.cpp
+++ b/js/src/jit/BaselineJIT.cpp
@@ -273,7 +273,7 @@ jit::BaselineCompile(JSContext* cx, JSScript* script, bool forceDebugInstrumenta
MOZ_ASSERT(script->canBaselineCompile());
MOZ_ASSERT(IsBaselineEnabled(cx));
- script->ensureNonLazyCanonicalFunction(cx);
+ script->ensureNonLazyCanonicalFunction();
LifoAlloc alloc(TempAllocator::PreferredLifoChunkSize);
TempAllocator* temp = alloc.new_<TempAllocator>(&alloc);
diff --git a/js/src/jit/CacheIR.cpp b/js/src/jit/CacheIR.cpp
index f1061af70..d184ea40c 100644
--- a/js/src/jit/CacheIR.cpp
+++ b/js/src/jit/CacheIR.cpp
@@ -10,8 +10,7 @@
#include "jit/IonCaches.h"
#include "jsobjinlines.h"
-
-#include "vm/UnboxedObject-inl.h"
+#include "vm/NativeObject-inl.h"
using namespace js;
using namespace js::jit;
@@ -60,10 +59,6 @@ GetPropIRGenerator::tryAttachStub(Maybe<CacheIRWriter>& writer)
return false;
if (!emitted_ && !tryAttachNative(*writer, obj, objId))
return false;
- if (!emitted_ && !tryAttachUnboxed(*writer, obj, objId))
- return false;
- if (!emitted_ && !tryAttachUnboxedExpando(*writer, obj, objId))
- return false;
if (!emitted_ && !tryAttachTypedObject(*writer, obj, objId))
return false;
if (!emitted_ && !tryAttachModuleNamespace(*writer, obj, objId))
@@ -163,19 +158,9 @@ GeneratePrototypeGuards(CacheIRWriter& writer, JSObject* obj, JSObject* holder,
}
static void
-TestMatchingReceiver(CacheIRWriter& writer, JSObject* obj, Shape* shape, ObjOperandId objId,
- Maybe<ObjOperandId>* expandoId)
+TestMatchingReceiver(CacheIRWriter& writer, JSObject* obj, Shape* shape, ObjOperandId objId)
{
- if (obj->is<UnboxedPlainObject>()) {
- writer.guardGroup(objId, obj->group());
-
- if (UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando()) {
- expandoId->emplace(writer.guardAndLoadUnboxedExpando(objId));
- writer.guardShape(expandoId->ref(), expando->lastProperty());
- } else {
- writer.guardNoUnboxedExpando(objId);
- }
- } else if (obj->is<UnboxedArrayObject>() || obj->is<TypedObject>()) {
+ if (obj->is<TypedObject>()) {
writer.guardGroup(objId, obj->group());
} else {
Shape* shape = obj->maybeShape();
@@ -188,8 +173,7 @@ static void
EmitReadSlotResult(CacheIRWriter& writer, JSObject* obj, JSObject* holder,
Shape* shape, ObjOperandId objId)
{
- Maybe<ObjOperandId> expandoId;
- TestMatchingReceiver(writer, obj, shape, objId, &expandoId);
+ TestMatchingReceiver(writer, obj, shape, objId);
ObjOperandId holderId;
if (obj != holder) {
@@ -212,9 +196,6 @@ EmitReadSlotResult(CacheIRWriter& writer, JSObject* obj, JSObject* holder,
lastObjId = protoId;
}
}
- } else if (obj->is<UnboxedPlainObject>()) {
- holder = obj->as<UnboxedPlainObject>().maybeExpando();
- holderId = *expandoId;
} else {
holderId = objId;
}
@@ -266,51 +247,6 @@ GetPropIRGenerator::tryAttachNative(CacheIRWriter& writer, HandleObject obj, Obj
}
bool
-GetPropIRGenerator::tryAttachUnboxed(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId)
-{
- MOZ_ASSERT(!emitted_);
-
- if (!obj->is<UnboxedPlainObject>())
- return true;
-
- const UnboxedLayout::Property* property = obj->as<UnboxedPlainObject>().layout().lookup(name_);
- if (!property)
- return true;
-
- if (!cx_->runtime()->jitSupportsFloatingPoint)
- return true;
-
- writer.guardGroup(objId, obj->group());
- writer.loadUnboxedPropertyResult(objId, property->type,
- UnboxedPlainObject::offsetOfData() + property->offset);
- emitted_ = true;
- preliminaryObjectAction_ = PreliminaryObjectAction::Unlink;
- return true;
-}
-
-bool
-GetPropIRGenerator::tryAttachUnboxedExpando(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId)
-{
- MOZ_ASSERT(!emitted_);
-
- if (!obj->is<UnboxedPlainObject>())
- return true;
-
- UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando();
- if (!expando)
- return true;
-
- Shape* shape = expando->lookup(cx_, NameToId(name_));
- if (!shape || !shape->hasDefaultGetter() || !shape->hasSlot())
- return true;
-
- emitted_ = true;
-
- EmitReadSlotResult(writer, obj, obj, shape, objId);
- return true;
-}
-
-bool
GetPropIRGenerator::tryAttachTypedObject(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId)
{
MOZ_ASSERT(!emitted_);
@@ -368,13 +304,6 @@ GetPropIRGenerator::tryAttachObjectLength(CacheIRWriter& writer, HandleObject ob
return true;
}
- if (obj->is<UnboxedArrayObject>()) {
- writer.guardClass(objId, GuardClassKind::UnboxedArray);
- writer.loadUnboxedArrayLengthResult(objId);
- emitted_ = true;
- return true;
- }
-
if (obj->is<ArgumentsObject>() && !obj->as<ArgumentsObject>().hasOverriddenLength()) {
if (obj->is<MappedArgumentsObject>()) {
writer.guardClass(objId, GuardClassKind::MappedArguments);
diff --git a/js/src/jit/CacheIR.h b/js/src/jit/CacheIR.h
index 51e55f48b..ae55cfebb 100644
--- a/js/src/jit/CacheIR.h
+++ b/js/src/jit/CacheIR.h
@@ -87,16 +87,12 @@ class ObjOperandId : public OperandId
_(GuardClass) \
_(GuardSpecificObject) \
_(GuardNoDetachedTypedObjects) \
- _(GuardNoUnboxedExpando) \
- _(GuardAndLoadUnboxedExpando) \
_(LoadObject) \
_(LoadProto) \
_(LoadFixedSlotResult) \
_(LoadDynamicSlotResult) \
- _(LoadUnboxedPropertyResult) \
_(LoadTypedObjectResult) \
_(LoadInt32ArrayLengthResult) \
- _(LoadUnboxedArrayLengthResult) \
_(LoadArgumentsObjectLengthResult) \
_(LoadUndefinedResult)
@@ -128,7 +124,6 @@ struct StubField {
enum class GuardClassKind
{
Array,
- UnboxedArray,
MappedArguments,
UnmappedArguments,
};
@@ -276,15 +271,6 @@ class MOZ_RAII CacheIRWriter
void guardNoDetachedTypedObjects() {
writeOp(CacheOp::GuardNoDetachedTypedObjects);
}
- void guardNoUnboxedExpando(ObjOperandId obj) {
- writeOpWithOperandId(CacheOp::GuardNoUnboxedExpando, obj);
- }
- ObjOperandId guardAndLoadUnboxedExpando(ObjOperandId obj) {
- ObjOperandId res(nextOperandId_++);
- writeOpWithOperandId(CacheOp::GuardAndLoadUnboxedExpando, obj);
- writeOperandId(res);
- return res;
- }
ObjOperandId loadObject(JSObject* obj) {
ObjOperandId res(nextOperandId_++);
@@ -310,11 +296,6 @@ class MOZ_RAII CacheIRWriter
writeOpWithOperandId(CacheOp::LoadDynamicSlotResult, obj);
addStubWord(offset, StubField::GCType::NoGCThing);
}
- void loadUnboxedPropertyResult(ObjOperandId obj, JSValueType type, size_t offset) {
- writeOpWithOperandId(CacheOp::LoadUnboxedPropertyResult, obj);
- buffer_.writeByte(uint32_t(type));
- addStubWord(offset, StubField::GCType::NoGCThing);
- }
void loadTypedObjectResult(ObjOperandId obj, uint32_t offset, TypedThingLayout layout,
uint32_t typeDescr) {
MOZ_ASSERT(uint32_t(layout) <= UINT8_MAX);
@@ -327,9 +308,6 @@ class MOZ_RAII CacheIRWriter
void loadInt32ArrayLengthResult(ObjOperandId obj) {
writeOpWithOperandId(CacheOp::LoadInt32ArrayLengthResult, obj);
}
- void loadUnboxedArrayLengthResult(ObjOperandId obj) {
- writeOpWithOperandId(CacheOp::LoadUnboxedArrayLengthResult, obj);
- }
void loadArgumentsObjectLengthResult(ObjOperandId obj) {
writeOpWithOperandId(CacheOp::LoadArgumentsObjectLengthResult, obj);
}
@@ -411,9 +389,6 @@ class MOZ_RAII GetPropIRGenerator
PreliminaryObjectAction preliminaryObjectAction_;
MOZ_MUST_USE bool tryAttachNative(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId);
- MOZ_MUST_USE bool tryAttachUnboxed(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId);
- MOZ_MUST_USE bool tryAttachUnboxedExpando(CacheIRWriter& writer, HandleObject obj,
- ObjOperandId objId);
MOZ_MUST_USE bool tryAttachTypedObject(CacheIRWriter& writer, HandleObject obj,
ObjOperandId objId);
MOZ_MUST_USE bool tryAttachObjectLength(CacheIRWriter& writer, HandleObject obj,
diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp
index 6d1fb6b9b..205812942 100644
--- a/js/src/jit/CodeGenerator.cpp
+++ b/js/src/jit/CodeGenerator.cpp
@@ -25,6 +25,7 @@
#include "builtin/Eval.h"
#include "builtin/TypedObject.h"
#include "gc/Nursery.h"
+#include "gc/StoreBuffer-inl.h"
#include "irregexp/NativeRegExpMacroAssembler.h"
#include "jit/AtomicOperations.h"
#include "jit/BaselineCompiler.h"
@@ -1052,7 +1053,7 @@ PrepareAndExecuteRegExp(JSContext* cx, MacroAssembler& masm, Register regexp, Re
Address pairsVectorAddress(masm.getStackPointer(), pairsVectorStartOffset);
- RegExpStatics* res = cx->global()->getRegExpStatics(cx);
+ RegExpStatics* res = GlobalObject::getRegExpStatics(cx, cx->global());
if (!res)
return false;
#ifdef JS_USE_LINK_REGISTER
@@ -3027,7 +3028,7 @@ CodeGenerator::visitStoreSlotV(LStoreSlotV* lir)
static void
GuardReceiver(MacroAssembler& masm, const ReceiverGuard& guard,
- Register obj, Register scratch, Label* miss, bool checkNullExpando)
+ Register obj, Register scratch, Label* miss)
{
if (guard.group) {
masm.branchTestObjGroup(Assembler::NotEqual, obj, guard.group, miss);
@@ -3049,13 +3050,11 @@ CodeGenerator::emitGetPropertyPolymorphic(LInstruction* ins, Register obj, Regis
Label next;
masm.comment("GuardReceiver");
- GuardReceiver(masm, receiver, obj, scratch, &next, /* checkNullExpando = */ false);
+ GuardReceiver(masm, receiver, obj, scratch, &next);
if (receiver.shape) {
masm.comment("loadTypedOrValue");
- // If this is an unboxed expando access, GuardReceiver loaded the
- // expando object into scratch.
- Register target = receiver.group ? scratch : obj;
+ Register target = obj;
Shape* shape = mir->shape(i);
if (shape->slot() < shape->numFixedSlots()) {
@@ -3121,12 +3120,10 @@ CodeGenerator::emitSetPropertyPolymorphic(LInstruction* ins, Register obj, Regis
ReceiverGuard receiver = mir->receiver(i);
Label next;
- GuardReceiver(masm, receiver, obj, scratch, &next, /* checkNullExpando = */ false);
+ GuardReceiver(masm, receiver, obj, scratch, &next);
if (receiver.shape) {
- // If this is an unboxed expando access, GuardReceiver loaded the
- // expando object into scratch.
- Register target = receiver.group ? scratch : obj;
+ Register target = obj;
Shape* shape = mir->shape(i);
if (shape->slot() < shape->numFixedSlots()) {
@@ -3183,9 +3180,7 @@ CodeGenerator::visitSetPropertyPolymorphicT(LSetPropertyPolymorphicT* ins)
void
CodeGenerator::visitElements(LElements* lir)
{
- Address elements(ToRegister(lir->object()),
- lir->mir()->unboxed() ? UnboxedArrayObject::offsetOfElements()
- : NativeObject::offsetOfElements());
+ Address elements(ToRegister(lir->object()), NativeObject::offsetOfElements());
masm.loadPtr(elements, ToRegister(lir->output()));
}
@@ -3294,7 +3289,7 @@ CodeGenerator::visitGuardReceiverPolymorphic(LGuardReceiverPolymorphic* lir)
const ReceiverGuard& receiver = mir->receiver(i);
Label next;
- GuardReceiver(masm, receiver, obj, temp, &next, /* checkNullExpando = */ true);
+ GuardReceiver(masm, receiver, obj, temp, &next);
if (i == mir->numReceivers() - 1) {
bailoutFrom(&next, lir->snapshot());
@@ -3693,7 +3688,13 @@ CodeGenerator::visitCallNative(LCallNative* call)
masm.passABIArg(argContextReg);
masm.passABIArg(argUintNReg);
masm.passABIArg(argVpReg);
- masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, target->native()));
+ JSNative native = target->native();
+ if (call->ignoresReturnValue()) {
+ const JSJitInfo* jitInfo = target->jitInfo();
+ if (jitInfo && jitInfo->type() == JSJitInfo::IgnoresReturnValueNative)
+ native = jitInfo->ignoresReturnValueMethod;
+ }
+ masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, native));
emitTracelogStopEvent(TraceLogger_Call);
@@ -3850,13 +3851,15 @@ CodeGenerator::visitCallGetIntrinsicValue(LCallGetIntrinsicValue* lir)
callVM(GetIntrinsicValueInfo, lir);
}
-typedef bool (*InvokeFunctionFn)(JSContext*, HandleObject, bool, uint32_t, Value*, MutableHandleValue);
+typedef bool (*InvokeFunctionFn)(JSContext*, HandleObject, bool, bool, uint32_t, Value*,
+ MutableHandleValue);
static const VMFunction InvokeFunctionInfo =
FunctionInfo<InvokeFunctionFn>(InvokeFunction, "InvokeFunction");
void
CodeGenerator::emitCallInvokeFunction(LInstruction* call, Register calleereg,
- bool constructing, uint32_t argc, uint32_t unusedStack)
+ bool constructing, bool ignoresReturnValue,
+ uint32_t argc, uint32_t unusedStack)
{
// Nestle %esp up to the argument vector.
// Each path must account for framePushed_ separately, for callVM to be valid.
@@ -3864,6 +3867,7 @@ CodeGenerator::emitCallInvokeFunction(LInstruction* call, Register calleereg,
pushArg(masm.getStackPointer()); // argv.
pushArg(Imm32(argc)); // argc.
+ pushArg(Imm32(ignoresReturnValue));
pushArg(Imm32(constructing)); // constructing.
pushArg(calleereg); // JSFunction*.
@@ -3950,8 +3954,8 @@ CodeGenerator::visitCallGeneric(LCallGeneric* call)
// Handle uncompiled or native functions.
masm.bind(&invoke);
- emitCallInvokeFunction(call, calleereg, call->isConstructing(), call->numActualArgs(),
- unusedStack);
+ emitCallInvokeFunction(call, calleereg, call->isConstructing(), call->ignoresReturnValue(),
+ call->numActualArgs(), unusedStack);
masm.bind(&end);
@@ -4006,7 +4010,8 @@ CodeGenerator::visitCallKnown(LCallKnown* call)
masm.checkStackAlignment();
if (target->isClassConstructor() && !call->isConstructing()) {
- emitCallInvokeFunction(call, calleereg, call->isConstructing(), call->numActualArgs(), unusedStack);
+ emitCallInvokeFunction(call, calleereg, call->isConstructing(), call->ignoresReturnValue(),
+ call->numActualArgs(), unusedStack);
return;
}
@@ -4050,7 +4055,8 @@ CodeGenerator::visitCallKnown(LCallKnown* call)
if (call->isConstructing() && target->nargs() > call->numActualArgs())
emitCallInvokeFunctionShuffleNewTarget(call, calleereg, target->nargs(), unusedStack);
else
- emitCallInvokeFunction(call, calleereg, call->isConstructing(), call->numActualArgs(), unusedStack);
+ emitCallInvokeFunction(call, calleereg, call->isConstructing(), call->ignoresReturnValue(),
+ call->numActualArgs(), unusedStack);
masm.bind(&end);
@@ -4077,6 +4083,7 @@ CodeGenerator::emitCallInvokeFunction(T* apply, Register extraStackSize)
pushArg(objreg); // argv.
pushArg(ToRegister(apply->getArgc())); // argc.
+ pushArg(Imm32(false)); // ignoresReturnValue.
pushArg(Imm32(false)); // isConstrucing.
pushArg(ToRegister(apply->getFunction())); // JSFunction*.
@@ -4433,19 +4440,6 @@ CodeGenerator::visitApplyArrayGeneric(LApplyArrayGeneric* apply)
emitApplyGeneric(apply);
}
-typedef bool (*ArraySpliceDenseFn)(JSContext*, HandleObject, uint32_t, uint32_t);
-static const VMFunction ArraySpliceDenseInfo =
- FunctionInfo<ArraySpliceDenseFn>(ArraySpliceDense, "ArraySpliceDense");
-
-void
-CodeGenerator::visitArraySplice(LArraySplice* lir)
-{
- pushArg(ToRegister(lir->getDeleteCount()));
- pushArg(ToRegister(lir->getStart()));
- pushArg(ToRegister(lir->getObject()));
- callVM(ArraySpliceDenseInfo, lir);
-}
-
void
CodeGenerator::visitBail(LBail* lir)
{
@@ -5171,11 +5165,11 @@ static JSObject*
NewArrayWithGroup(JSContext* cx, uint32_t length, HandleObjectGroup group,
bool convertDoubleElements)
{
- JSObject* res = NewFullyAllocatedArrayTryUseGroup(cx, group, length);
+ ArrayObject* res = NewFullyAllocatedArrayTryUseGroup(cx, group, length);
if (!res)
return nullptr;
if (convertDoubleElements)
- res->as<ArrayObject>().setShouldConvertDoubleElements();
+ res->setShouldConvertDoubleElements();
return res;
}
@@ -5321,7 +5315,7 @@ CodeGenerator::visitNewArrayCopyOnWrite(LNewArrayCopyOnWrite* lir)
masm.bind(ool->rejoin());
}
-typedef JSObject* (*ArrayConstructorOneArgFn)(JSContext*, HandleObjectGroup, int32_t length);
+typedef ArrayObject* (*ArrayConstructorOneArgFn)(JSContext*, HandleObjectGroup, int32_t length);
static const VMFunction ArrayConstructorOneArgInfo =
FunctionInfo<ArrayConstructorOneArgFn>(ArrayConstructorOneArg, "ArrayConstructorOneArg");
@@ -5341,21 +5335,11 @@ CodeGenerator::visitNewArrayDynamicLength(LNewArrayDynamicLength* lir)
bool canInline = true;
size_t inlineLength = 0;
- if (templateObject->is<ArrayObject>()) {
- if (templateObject->as<ArrayObject>().hasFixedElements()) {
- size_t numSlots = gc::GetGCKindSlots(templateObject->asTenured().getAllocKind());
- inlineLength = numSlots - ObjectElements::VALUES_PER_HEADER;
- } else {
- canInline = false;
- }
+ if (templateObject->as<ArrayObject>().hasFixedElements()) {
+ size_t numSlots = gc::GetGCKindSlots(templateObject->asTenured().getAllocKind());
+ inlineLength = numSlots - ObjectElements::VALUES_PER_HEADER;
} else {
- if (templateObject->as<UnboxedArrayObject>().hasInlineElements()) {
- size_t nbytes =
- templateObject->tenuredSizeOfThis() - UnboxedArrayObject::offsetOfInlineElements();
- inlineLength = nbytes / templateObject->as<UnboxedArrayObject>().elementSize();
- } else {
- canInline = false;
- }
+ canInline = false;
}
if (canInline) {
@@ -7777,7 +7761,7 @@ CodeGenerator::visitSinCos(LSinCos *lir)
masm.freeStack(sizeof(double) * 2);
}
-typedef JSObject* (*StringSplitFn)(JSContext*, HandleObjectGroup, HandleString, HandleString, uint32_t);
+typedef ArrayObject* (*StringSplitFn)(JSContext*, HandleObjectGroup, HandleString, HandleString, uint32_t);
static const VMFunction StringSplitInfo =
FunctionInfo<StringSplitFn>(js::str_split_string, "str_split_string");
@@ -7812,49 +7796,6 @@ CodeGenerator::visitSetInitializedLength(LSetInitializedLength* lir)
}
void
-CodeGenerator::visitUnboxedArrayLength(LUnboxedArrayLength* lir)
-{
- Register obj = ToRegister(lir->object());
- Register result = ToRegister(lir->output());
- masm.load32(Address(obj, UnboxedArrayObject::offsetOfLength()), result);
-}
-
-void
-CodeGenerator::visitUnboxedArrayInitializedLength(LUnboxedArrayInitializedLength* lir)
-{
- Register obj = ToRegister(lir->object());
- Register result = ToRegister(lir->output());
- masm.load32(Address(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()), result);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), result);
-}
-
-void
-CodeGenerator::visitIncrementUnboxedArrayInitializedLength(LIncrementUnboxedArrayInitializedLength* lir)
-{
- Register obj = ToRegister(lir->object());
- masm.add32(Imm32(1), Address(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()));
-}
-
-void
-CodeGenerator::visitSetUnboxedArrayInitializedLength(LSetUnboxedArrayInitializedLength* lir)
-{
- Register obj = ToRegister(lir->object());
- RegisterOrInt32Constant key = ToRegisterOrInt32Constant(lir->length());
- Register temp = ToRegister(lir->temp());
-
- Address initLengthAddr(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength());
- masm.load32(initLengthAddr, temp);
- masm.and32(Imm32(UnboxedArrayObject::CapacityMask), temp);
-
- if (key.isRegister())
- masm.or32(key.reg(), temp);
- else
- masm.or32(Imm32(key.constant()), temp);
-
- masm.store32(temp, initLengthAddr);
-}
-
-void
CodeGenerator::visitNotO(LNotO* lir)
{
MOZ_ASSERT(lir->mir()->operandMightEmulateUndefined(),
@@ -8150,46 +8091,19 @@ CodeGenerator::emitStoreElementHoleT(T* lir)
OutOfLineStoreElementHole* ool = new(alloc()) OutOfLineStoreElementHole(lir);
addOutOfLineCode(ool, lir->mir());
- Register obj = ToRegister(lir->object());
Register elements = ToRegister(lir->elements());
const LAllocation* index = lir->index();
RegisterOrInt32Constant key = ToRegisterOrInt32Constant(index);
- JSValueType unboxedType = lir->mir()->unboxedType();
- if (unboxedType == JSVAL_TYPE_MAGIC) {
- Address initLength(elements, ObjectElements::offsetOfInitializedLength());
- masm.branch32(Assembler::BelowOrEqual, initLength, key, ool->entry());
+ Address initLength(elements, ObjectElements::offsetOfInitializedLength());
+ masm.branch32(Assembler::BelowOrEqual, initLength, key, ool->entry());
- if (lir->mir()->needsBarrier())
- emitPreBarrier(elements, index, 0);
-
- masm.bind(ool->rejoinStore());
- emitStoreElementTyped(lir->value(), lir->mir()->value()->type(), lir->mir()->elementType(),
- elements, index, 0);
- } else {
- Register temp = ToRegister(lir->getTemp(0));
- Address initLength(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength());
- masm.load32(initLength, temp);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), temp);
- masm.branch32(Assembler::BelowOrEqual, temp, key, ool->entry());
-
- ConstantOrRegister v = ToConstantOrRegister(lir->value(), lir->mir()->value()->type());
-
- if (index->isConstant()) {
- Address address(elements, ToInt32(index) * UnboxedTypeSize(unboxedType));
- EmitUnboxedPreBarrier(masm, address, unboxedType);
-
- masm.bind(ool->rejoinStore());
- masm.storeUnboxedProperty(address, unboxedType, v, nullptr);
- } else {
- BaseIndex address(elements, ToRegister(index),
- ScaleFromElemWidth(UnboxedTypeSize(unboxedType)));
- EmitUnboxedPreBarrier(masm, address, unboxedType);
+ if (lir->mir()->needsBarrier())
+ emitPreBarrier(elements, index, 0);
- masm.bind(ool->rejoinStore());
- masm.storeUnboxedProperty(address, unboxedType, v, nullptr);
- }
- }
+ masm.bind(ool->rejoinStore());
+ emitStoreElementTyped(lir->value(), lir->mir()->value()->type(), lir->mir()->elementType(),
+ elements, index, 0);
masm.bind(ool->rejoin());
}
@@ -8209,47 +8123,22 @@ CodeGenerator::emitStoreElementHoleV(T* lir)
OutOfLineStoreElementHole* ool = new(alloc()) OutOfLineStoreElementHole(lir);
addOutOfLineCode(ool, lir->mir());
- Register obj = ToRegister(lir->object());
Register elements = ToRegister(lir->elements());
const LAllocation* index = lir->index();
const ValueOperand value = ToValue(lir, T::Value);
RegisterOrInt32Constant key = ToRegisterOrInt32Constant(index);
- JSValueType unboxedType = lir->mir()->unboxedType();
- if (unboxedType == JSVAL_TYPE_MAGIC) {
- Address initLength(elements, ObjectElements::offsetOfInitializedLength());
- masm.branch32(Assembler::BelowOrEqual, initLength, key, ool->entry());
-
- if (lir->mir()->needsBarrier())
- emitPreBarrier(elements, index, 0);
+ Address initLength(elements, ObjectElements::offsetOfInitializedLength());
+ masm.branch32(Assembler::BelowOrEqual, initLength, key, ool->entry());
- masm.bind(ool->rejoinStore());
- if (index->isConstant())
- masm.storeValue(value, Address(elements, ToInt32(index) * sizeof(js::Value)));
- else
- masm.storeValue(value, BaseIndex(elements, ToRegister(index), TimesEight));
- } else {
- Register temp = ToRegister(lir->getTemp(0));
- Address initLength(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength());
- masm.load32(initLength, temp);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), temp);
- masm.branch32(Assembler::BelowOrEqual, temp, key, ool->entry());
-
- if (index->isConstant()) {
- Address address(elements, ToInt32(index) * UnboxedTypeSize(unboxedType));
- EmitUnboxedPreBarrier(masm, address, unboxedType);
-
- masm.bind(ool->rejoinStore());
- masm.storeUnboxedProperty(address, unboxedType, ConstantOrRegister(value), nullptr);
- } else {
- BaseIndex address(elements, ToRegister(index),
- ScaleFromElemWidth(UnboxedTypeSize(unboxedType)));
- EmitUnboxedPreBarrier(masm, address, unboxedType);
+ if (lir->mir()->needsBarrier())
+ emitPreBarrier(elements, index, 0);
- masm.bind(ool->rejoinStore());
- masm.storeUnboxedProperty(address, unboxedType, ConstantOrRegister(value), nullptr);
- }
- }
+ masm.bind(ool->rejoinStore());
+ if (index->isConstant())
+ masm.storeValue(value, Address(elements, ToInt32(index) * sizeof(js::Value)));
+ else
+ masm.storeValue(value, BaseIndex(elements, ToRegister(index), TimesEight));
masm.bind(ool->rejoin());
}
@@ -8320,11 +8209,10 @@ CodeGenerator::visitFallibleStoreElementV(LFallibleStoreElementV* lir)
masm.bind(&isFrozen);
}
-typedef bool (*SetDenseOrUnboxedArrayElementFn)(JSContext*, HandleObject, int32_t,
- HandleValue, bool strict);
-static const VMFunction SetDenseOrUnboxedArrayElementInfo =
- FunctionInfo<SetDenseOrUnboxedArrayElementFn>(SetDenseOrUnboxedArrayElement,
- "SetDenseOrUnboxedArrayElement");
+typedef bool (*SetDenseElementFn)(JSContext*, HandleNativeObject, int32_t, HandleValue,
+ bool strict);
+static const VMFunction SetDenseElementInfo =
+ FunctionInfo<SetDenseElementFn>(jit::SetDenseElement, "SetDenseElement");
void
CodeGenerator::visitOutOfLineStoreElementHole(OutOfLineStoreElementHole* ool)
@@ -8334,8 +8222,6 @@ CodeGenerator::visitOutOfLineStoreElementHole(OutOfLineStoreElementHole* ool)
const LAllocation* index;
MIRType valueType;
ConstantOrRegister value;
- JSValueType unboxedType;
- LDefinition *temp = nullptr;
if (ins->isStoreElementHoleV()) {
LStoreElementHoleV* store = ins->toStoreElementHoleV();
@@ -8344,8 +8230,6 @@ CodeGenerator::visitOutOfLineStoreElementHole(OutOfLineStoreElementHole* ool)
index = store->index();
valueType = store->mir()->value()->type();
value = TypedOrValueRegister(ToValue(store, LStoreElementHoleV::Value));
- unboxedType = store->mir()->unboxedType();
- temp = store->getTemp(0);
} else if (ins->isFallibleStoreElementV()) {
LFallibleStoreElementV* store = ins->toFallibleStoreElementV();
object = ToRegister(store->object());
@@ -8353,8 +8237,6 @@ CodeGenerator::visitOutOfLineStoreElementHole(OutOfLineStoreElementHole* ool)
index = store->index();
valueType = store->mir()->value()->type();
value = TypedOrValueRegister(ToValue(store, LFallibleStoreElementV::Value));
- unboxedType = store->mir()->unboxedType();
- temp = store->getTemp(0);
} else if (ins->isStoreElementHoleT()) {
LStoreElementHoleT* store = ins->toStoreElementHoleT();
object = ToRegister(store->object());
@@ -8365,8 +8247,6 @@ CodeGenerator::visitOutOfLineStoreElementHole(OutOfLineStoreElementHole* ool)
value = ConstantOrRegister(store->value()->toConstant()->toJSValue());
else
value = TypedOrValueRegister(valueType, ToAnyRegister(store->value()));
- unboxedType = store->mir()->unboxedType();
- temp = store->getTemp(0);
} else { // ins->isFallibleStoreElementT()
LFallibleStoreElementT* store = ins->toFallibleStoreElementT();
object = ToRegister(store->object());
@@ -8377,8 +8257,6 @@ CodeGenerator::visitOutOfLineStoreElementHole(OutOfLineStoreElementHole* ool)
value = ConstantOrRegister(store->value()->toConstant()->toJSValue());
else
value = TypedOrValueRegister(valueType, ToAnyRegister(store->value()));
- unboxedType = store->mir()->unboxedType();
- temp = store->getTemp(0);
}
RegisterOrInt32Constant key = ToRegisterOrInt32Constant(index);
@@ -8389,54 +8267,32 @@ CodeGenerator::visitOutOfLineStoreElementHole(OutOfLineStoreElementHole* ool)
Label callStub;
#if defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)
// Had to reimplement for MIPS because there are no flags.
- if (unboxedType == JSVAL_TYPE_MAGIC) {
- Address initLength(elements, ObjectElements::offsetOfInitializedLength());
- masm.branch32(Assembler::NotEqual, initLength, key, &callStub);
- } else {
- Address initLength(object, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength());
- masm.load32(initLength, ToRegister(temp));
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), ToRegister(temp));
- masm.branch32(Assembler::NotEqual, ToRegister(temp), key, &callStub);
- }
+ Address initLength(elements, ObjectElements::offsetOfInitializedLength());
+ masm.branch32(Assembler::NotEqual, initLength, key, &callStub);
#else
masm.j(Assembler::NotEqual, &callStub);
#endif
- if (unboxedType == JSVAL_TYPE_MAGIC) {
- // Check array capacity.
- masm.branch32(Assembler::BelowOrEqual, Address(elements, ObjectElements::offsetOfCapacity()),
- key, &callStub);
-
- // Update initialized length. The capacity guard above ensures this won't overflow,
- // due to MAX_DENSE_ELEMENTS_COUNT.
- masm.inc32(&key);
- masm.store32(key, Address(elements, ObjectElements::offsetOfInitializedLength()));
-
- // Update length if length < initializedLength.
- Label dontUpdate;
- masm.branch32(Assembler::AboveOrEqual, Address(elements, ObjectElements::offsetOfLength()),
- key, &dontUpdate);
- masm.store32(key, Address(elements, ObjectElements::offsetOfLength()));
- masm.bind(&dontUpdate);
+ // Check array capacity.
+ masm.branch32(Assembler::BelowOrEqual, Address(elements, ObjectElements::offsetOfCapacity()),
+ key, &callStub);
- masm.dec32(&key);
- } else {
- // Check array capacity.
- masm.checkUnboxedArrayCapacity(object, key, ToRegister(temp), &callStub);
+ // Update initialized length. The capacity guard above ensures this won't overflow,
+ // due to MAX_DENSE_ELEMENTS_COUNT.
+ masm.inc32(&key);
+ masm.store32(key, Address(elements, ObjectElements::offsetOfInitializedLength()));
- // Update initialized length.
- masm.add32(Imm32(1), Address(object, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()));
+ // Update length if length < initializedLength.
+ Label dontUpdate;
+ masm.branch32(Assembler::AboveOrEqual, Address(elements, ObjectElements::offsetOfLength()),
+ key, &dontUpdate);
+ masm.store32(key, Address(elements, ObjectElements::offsetOfLength()));
+ masm.bind(&dontUpdate);
- // Update length if length < initializedLength.
- Address lengthAddr(object, UnboxedArrayObject::offsetOfLength());
- Label dontUpdate;
- masm.branch32(Assembler::Above, lengthAddr, key, &dontUpdate);
- masm.add32(Imm32(1), lengthAddr);
- masm.bind(&dontUpdate);
- }
+ masm.dec32(&key);
if ((ins->isStoreElementHoleT() || ins->isFallibleStoreElementT()) &&
- unboxedType == JSVAL_TYPE_MAGIC && valueType != MIRType::Double)
+ valueType != MIRType::Double)
{
// The inline path for StoreElementHoleT and FallibleStoreElementT does not always store
// the type tag, so we do the store on the OOL path. We use MIRType::None for the element
@@ -8465,7 +8321,7 @@ CodeGenerator::visitOutOfLineStoreElementHole(OutOfLineStoreElementHole* ool)
else
pushArg(ToRegister(index));
pushArg(object);
- callVM(SetDenseOrUnboxedArrayElementInfo, ins);
+ callVM(SetDenseElementInfo, ins);
restoreLive(ins);
masm.jump(ool->rejoin());
@@ -8522,14 +8378,6 @@ CodeGenerator::visitStoreUnboxedPointer(LStoreUnboxedPointer* lir)
}
}
-typedef bool (*ConvertUnboxedObjectToNativeFn)(JSContext*, JSObject*);
-static const VMFunction ConvertUnboxedPlainObjectToNativeInfo =
- FunctionInfo<ConvertUnboxedObjectToNativeFn>(UnboxedPlainObject::convertToNative,
- "UnboxedPlainObject::convertToNative");
-static const VMFunction ConvertUnboxedArrayObjectToNativeInfo =
- FunctionInfo<ConvertUnboxedObjectToNativeFn>(UnboxedArrayObject::convertToNative,
- "UnboxedArrayObject::convertToNative");
-
typedef bool (*ArrayPopShiftFn)(JSContext*, HandleObject, MutableHandleValue);
static const VMFunction ArrayPopDenseInfo =
FunctionInfo<ArrayPopShiftFn>(jit::ArrayPopDense, "ArrayPopDense");
@@ -8554,20 +8402,11 @@ CodeGenerator::emitArrayPopShift(LInstruction* lir, const MArrayPopShift* mir, R
// Load elements and length, and VM call if length != initializedLength.
RegisterOrInt32Constant key = RegisterOrInt32Constant(lengthTemp);
- if (mir->unboxedType() == JSVAL_TYPE_MAGIC) {
- masm.loadPtr(Address(obj, NativeObject::offsetOfElements()), elementsTemp);
- masm.load32(Address(elementsTemp, ObjectElements::offsetOfLength()), lengthTemp);
-
- Address initLength(elementsTemp, ObjectElements::offsetOfInitializedLength());
- masm.branch32(Assembler::NotEqual, initLength, key, ool->entry());
- } else {
- masm.loadPtr(Address(obj, UnboxedArrayObject::offsetOfElements()), elementsTemp);
- masm.load32(Address(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()), lengthTemp);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), lengthTemp);
+ masm.loadPtr(Address(obj, NativeObject::offsetOfElements()), elementsTemp);
+ masm.load32(Address(elementsTemp, ObjectElements::offsetOfLength()), lengthTemp);
- Address lengthAddr(obj, UnboxedArrayObject::offsetOfLength());
- masm.branch32(Assembler::NotEqual, lengthAddr, key, ool->entry());
- }
+ Address initLength(elementsTemp, ObjectElements::offsetOfInitializedLength());
+ masm.branch32(Assembler::NotEqual, initLength, key, ool->entry());
// Test for length != 0. On zero length either take a VM call or generate
// an undefined value, depending on whether the call is known to produce
@@ -8579,13 +8418,10 @@ CodeGenerator::emitArrayPopShift(LInstruction* lir, const MArrayPopShift* mir, R
// According to the spec we need to set the length 0 (which is already 0).
// This is observable when the array length is made non-writable.
- // Handle this case in the OOL. When freezing an unboxed array it is converted
- // to an normal array.
- if (mir->unboxedType() == JSVAL_TYPE_MAGIC) {
- Address elementFlags(elementsTemp, ObjectElements::offsetOfFlags());
- Imm32 bit(ObjectElements::NONWRITABLE_ARRAY_LENGTH);
- masm.branchTest32(Assembler::NonZero, elementFlags, bit, ool->entry());
- }
+ // Handle this case in the OOL.
+ Address elementFlags(elementsTemp, ObjectElements::offsetOfFlags());
+ Imm32 bit(ObjectElements::NONWRITABLE_ARRAY_LENGTH);
+ masm.branchTest32(Assembler::NonZero, elementFlags, bit, ool->entry());
masm.moveValue(UndefinedValue(), out.valueReg());
masm.jump(&done);
@@ -8597,41 +8433,25 @@ CodeGenerator::emitArrayPopShift(LInstruction* lir, const MArrayPopShift* mir, R
masm.dec32(&key);
if (mir->mode() == MArrayPopShift::Pop) {
- if (mir->unboxedType() == JSVAL_TYPE_MAGIC) {
- BaseIndex addr(elementsTemp, lengthTemp, TimesEight);
- masm.loadElementTypedOrValue(addr, out, mir->needsHoleCheck(), ool->entry());
- } else {
- size_t elemSize = UnboxedTypeSize(mir->unboxedType());
- BaseIndex addr(elementsTemp, lengthTemp, ScaleFromElemWidth(elemSize));
- masm.loadUnboxedProperty(addr, mir->unboxedType(), out);
- }
+ BaseIndex addr(elementsTemp, lengthTemp, TimesEight);
+ masm.loadElementTypedOrValue(addr, out, mir->needsHoleCheck(), ool->entry());
} else {
MOZ_ASSERT(mir->mode() == MArrayPopShift::Shift);
Address addr(elementsTemp, 0);
- if (mir->unboxedType() == JSVAL_TYPE_MAGIC)
- masm.loadElementTypedOrValue(addr, out, mir->needsHoleCheck(), ool->entry());
- else
- masm.loadUnboxedProperty(addr, mir->unboxedType(), out);
+ masm.loadElementTypedOrValue(addr, out, mir->needsHoleCheck(), ool->entry());
}
- if (mir->unboxedType() == JSVAL_TYPE_MAGIC) {
- // Handle the failure case when the array length is non-writable in the
- // OOL path. (Unlike in the adding-an-element cases, we can't rely on the
- // capacity <= length invariant for such arrays to avoid an explicit
- // check.)
- Address elementFlags(elementsTemp, ObjectElements::offsetOfFlags());
- Imm32 bit(ObjectElements::NONWRITABLE_ARRAY_LENGTH);
- masm.branchTest32(Assembler::NonZero, elementFlags, bit, ool->entry());
+ // Handle the failure case when the array length is non-writable in the
+ // OOL path. (Unlike in the adding-an-element cases, we can't rely on the
+ // capacity <= length invariant for such arrays to avoid an explicit
+ // check.)
+ Address elementFlags(elementsTemp, ObjectElements::offsetOfFlags());
+ Imm32 bit(ObjectElements::NONWRITABLE_ARRAY_LENGTH);
+ masm.branchTest32(Assembler::NonZero, elementFlags, bit, ool->entry());
- // Now adjust length and initializedLength.
- masm.store32(lengthTemp, Address(elementsTemp, ObjectElements::offsetOfLength()));
- masm.store32(lengthTemp, Address(elementsTemp, ObjectElements::offsetOfInitializedLength()));
- } else {
- // Unboxed arrays always have writable lengths. Adjust length and
- // initializedLength.
- masm.store32(lengthTemp, Address(obj, UnboxedArrayObject::offsetOfLength()));
- masm.add32(Imm32(-1), Address(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()));
- }
+ // Now adjust length and initializedLength.
+ masm.store32(lengthTemp, Address(elementsTemp, ObjectElements::offsetOfLength()));
+ masm.store32(lengthTemp, Address(elementsTemp, ObjectElements::offsetOfInitializedLength()));
if (mir->mode() == MArrayPopShift::Shift) {
// Don't save the temp registers.
@@ -8670,7 +8490,7 @@ CodeGenerator::visitArrayPopShiftT(LArrayPopShiftT* lir)
emitArrayPopShift(lir, lir->mir(), obj, elements, length, out);
}
-typedef bool (*ArrayPushDenseFn)(JSContext*, HandleObject, HandleValue, uint32_t*);
+typedef bool (*ArrayPushDenseFn)(JSContext*, HandleArrayObject, HandleValue, uint32_t*);
static const VMFunction ArrayPushDenseInfo =
FunctionInfo<ArrayPushDenseFn>(jit::ArrayPushDense, "ArrayPushDense");
@@ -8681,50 +8501,27 @@ CodeGenerator::emitArrayPush(LInstruction* lir, const MArrayPush* mir, Register
OutOfLineCode* ool = oolCallVM(ArrayPushDenseInfo, lir, ArgList(obj, value), StoreRegisterTo(length));
RegisterOrInt32Constant key = RegisterOrInt32Constant(length);
- if (mir->unboxedType() == JSVAL_TYPE_MAGIC) {
- // Load elements and length.
- masm.loadPtr(Address(obj, NativeObject::offsetOfElements()), elementsTemp);
- masm.load32(Address(elementsTemp, ObjectElements::offsetOfLength()), length);
-
- // Guard length == initializedLength.
- Address initLength(elementsTemp, ObjectElements::offsetOfInitializedLength());
- masm.branch32(Assembler::NotEqual, initLength, key, ool->entry());
- // Guard length < capacity.
- Address capacity(elementsTemp, ObjectElements::offsetOfCapacity());
- masm.branch32(Assembler::BelowOrEqual, capacity, key, ool->entry());
+ // Load elements and length.
+ masm.loadPtr(Address(obj, NativeObject::offsetOfElements()), elementsTemp);
+ masm.load32(Address(elementsTemp, ObjectElements::offsetOfLength()), length);
- // Do the store.
- masm.storeConstantOrRegister(value, BaseIndex(elementsTemp, length, TimesEight));
- } else {
- // Load initialized length.
- masm.load32(Address(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()), length);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), length);
-
- // Guard length == initializedLength.
- Address lengthAddr(obj, UnboxedArrayObject::offsetOfLength());
- masm.branch32(Assembler::NotEqual, lengthAddr, key, ool->entry());
+ // Guard length == initializedLength.
+ Address initLength(elementsTemp, ObjectElements::offsetOfInitializedLength());
+ masm.branch32(Assembler::NotEqual, initLength, key, ool->entry());
- // Guard length < capacity.
- masm.checkUnboxedArrayCapacity(obj, key, elementsTemp, ool->entry());
+ // Guard length < capacity.
+ Address capacity(elementsTemp, ObjectElements::offsetOfCapacity());
+ masm.branch32(Assembler::BelowOrEqual, capacity, key, ool->entry());
- // Load elements and do the store.
- masm.loadPtr(Address(obj, UnboxedArrayObject::offsetOfElements()), elementsTemp);
- size_t elemSize = UnboxedTypeSize(mir->unboxedType());
- BaseIndex addr(elementsTemp, length, ScaleFromElemWidth(elemSize));
- masm.storeUnboxedProperty(addr, mir->unboxedType(), value, nullptr);
- }
+ // Do the store.
+ masm.storeConstantOrRegister(value, BaseIndex(elementsTemp, length, TimesEight));
masm.inc32(&key);
// Update length and initialized length.
- if (mir->unboxedType() == JSVAL_TYPE_MAGIC) {
- masm.store32(length, Address(elementsTemp, ObjectElements::offsetOfLength()));
- masm.store32(length, Address(elementsTemp, ObjectElements::offsetOfInitializedLength()));
- } else {
- masm.store32(length, Address(obj, UnboxedArrayObject::offsetOfLength()));
- masm.add32(Imm32(1), Address(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()));
- }
+ masm.store32(length, Address(elementsTemp, ObjectElements::offsetOfLength()));
+ masm.store32(length, Address(elementsTemp, ObjectElements::offsetOfInitializedLength()));
masm.bind(ool->rejoin());
}
@@ -8873,11 +8670,11 @@ CodeGenerator::visitIteratorStartO(LIteratorStartO* lir)
masm.loadPtr(Address(niTemp, offsetof(NativeIterator, guard_array)), temp2);
// Compare object with the first receiver guard. The last iterator can only
- // match for native objects and unboxed objects.
+ // match for native objects.
{
Address groupAddr(temp2, offsetof(ReceiverGuard, group));
Address shapeAddr(temp2, offsetof(ReceiverGuard, shape));
- Label guardDone, shapeMismatch, noExpando;
+ Label guardDone, shapeMismatch;
masm.loadObjShape(obj, temp1);
masm.branchPtr(Assembler::NotEqual, shapeAddr, temp1, &shapeMismatch);
@@ -8889,12 +8686,6 @@ CodeGenerator::visitIteratorStartO(LIteratorStartO* lir)
masm.bind(&shapeMismatch);
masm.loadObjGroup(obj, temp1);
masm.branchPtr(Assembler::NotEqual, groupAddr, temp1, ool->entry());
- masm.loadPtr(Address(obj, UnboxedPlainObject::offsetOfExpando()), temp1);
- masm.branchTestPtr(Assembler::Zero, temp1, temp1, &noExpando);
- branchIfNotEmptyObjectElements(temp1, ool->entry());
- masm.loadObjShape(temp1, temp1);
- masm.bind(&noExpando);
- masm.branchPtr(Assembler::NotEqual, shapeAddr, temp1, ool->entry());
masm.bind(&guardDone);
}
@@ -10529,22 +10320,11 @@ CodeGenerator::visitLoadElementHole(LLoadElementHole* lir)
else
masm.branch32(Assembler::BelowOrEqual, initLength, ToRegister(lir->index()), &undefined);
- if (mir->unboxedType() != JSVAL_TYPE_MAGIC) {
- size_t width = UnboxedTypeSize(mir->unboxedType());
- if (lir->index()->isConstant()) {
- Address addr(elements, ToInt32(lir->index()) * width);
- masm.loadUnboxedProperty(addr, mir->unboxedType(), out);
- } else {
- BaseIndex addr(elements, ToRegister(lir->index()), ScaleFromElemWidth(width));
- masm.loadUnboxedProperty(addr, mir->unboxedType(), out);
- }
+ if (lir->index()->isConstant()) {
+ NativeObject::elementsSizeMustNotOverflow();
+ masm.loadValue(Address(elements, ToInt32(lir->index()) * sizeof(Value)), out);
} else {
- if (lir->index()->isConstant()) {
- NativeObject::elementsSizeMustNotOverflow();
- masm.loadValue(Address(elements, ToInt32(lir->index()) * sizeof(Value)), out);
- } else {
- masm.loadValue(BaseObjectElementIndex(elements, ToRegister(lir->index())), out);
- }
+ masm.loadValue(BaseObjectElementIndex(elements, ToRegister(lir->index())), out);
}
// If a hole check is needed, and the value wasn't a hole, we're done.
@@ -10922,7 +10702,7 @@ CodeGenerator::visitInArray(LInArray* lir)
}
masm.branch32(Assembler::BelowOrEqual, initLength, Imm32(index), failedInitLength);
- if (mir->needsHoleCheck() && mir->unboxedType() == JSVAL_TYPE_MAGIC) {
+ if (mir->needsHoleCheck()) {
NativeObject::elementsSizeMustNotOverflow();
Address address = Address(elements, index * sizeof(Value));
masm.branchTestMagic(Assembler::Equal, address, &falseBranch);
@@ -10935,7 +10715,7 @@ CodeGenerator::visitInArray(LInArray* lir)
failedInitLength = &negativeIntCheck;
masm.branch32(Assembler::BelowOrEqual, initLength, index, failedInitLength);
- if (mir->needsHoleCheck() && mir->unboxedType() == JSVAL_TYPE_MAGIC) {
+ if (mir->needsHoleCheck()) {
BaseIndex address = BaseIndex(elements, ToRegister(lir->index()), TimesEight);
masm.branchTestMagic(Assembler::Equal, address, &falseBranch);
}
diff --git a/js/src/jit/CodeGenerator.h b/js/src/jit/CodeGenerator.h
index 292f163b5..12f1238ef 100644
--- a/js/src/jit/CodeGenerator.h
+++ b/js/src/jit/CodeGenerator.h
@@ -165,8 +165,8 @@ class CodeGenerator final : public CodeGeneratorSpecific
void visitOutOfLineCallPostWriteElementBarrier(OutOfLineCallPostWriteElementBarrier* ool);
void visitCallNative(LCallNative* call);
void emitCallInvokeFunction(LInstruction* call, Register callereg,
- bool isConstructing, uint32_t argc,
- uint32_t unusedStack);
+ bool isConstructing, bool ignoresReturnValue,
+ uint32_t argc, uint32_t unusedStack);
void visitCallGeneric(LCallGeneric* call);
void emitCallInvokeFunctionShuffleNewTarget(LCallKnown *call,
Register calleeReg,
@@ -234,10 +234,6 @@ class CodeGenerator final : public CodeGeneratorSpecific
void visitSubstr(LSubstr* lir);
void visitInitializedLength(LInitializedLength* lir);
void visitSetInitializedLength(LSetInitializedLength* lir);
- void visitUnboxedArrayLength(LUnboxedArrayLength* lir);
- void visitUnboxedArrayInitializedLength(LUnboxedArrayInitializedLength* lir);
- void visitIncrementUnboxedArrayInitializedLength(LIncrementUnboxedArrayInitializedLength* lir);
- void visitSetUnboxedArrayInitializedLength(LSetUnboxedArrayInitializedLength* lir);
void visitNotO(LNotO* ins);
void visitNotV(LNotV* ins);
void visitBoundsCheck(LBoundsCheck* lir);
@@ -255,7 +251,6 @@ class CodeGenerator final : public CodeGeneratorSpecific
void emitSetPropertyPolymorphic(LInstruction* lir, Register obj,
Register scratch, const ConstantOrRegister& value);
void visitSetPropertyPolymorphicV(LSetPropertyPolymorphicV* ins);
- void visitArraySplice(LArraySplice* splice);
void visitSetPropertyPolymorphicT(LSetPropertyPolymorphicT* ins);
void visitAbsI(LAbsI* lir);
void visitAtan2D(LAtan2D* lir);
diff --git a/js/src/jit/InlinableNatives.h b/js/src/jit/InlinableNatives.h
index 18535389a..1d0506f74 100644
--- a/js/src/jit/InlinableNatives.h
+++ b/js/src/jit/InlinableNatives.h
@@ -15,7 +15,6 @@
_(ArrayShift) \
_(ArrayPush) \
_(ArraySlice) \
- _(ArraySplice) \
\
_(AtomicsCompareExchange) \
_(AtomicsExchange) \
diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp
index c61b414e0..b8a2d2fba 100644
--- a/js/src/jit/Ion.cpp
+++ b/js/src/jit/Ion.cpp
@@ -2153,7 +2153,7 @@ IonCompile(JSContext* cx, JSScript* script,
// Make sure the script's canonical function isn't lazy. We can't de-lazify
// it in a helper thread.
- script->ensureNonLazyCanonicalFunction(cx);
+ script->ensureNonLazyCanonicalFunction();
TrackPropertiesForSingletonScopes(cx, script, baselineFrame);
diff --git a/js/src/jit/IonAnalysis.cpp b/js/src/jit/IonAnalysis.cpp
index 41c71c9c3..5fc624fb1 100644
--- a/js/src/jit/IonAnalysis.cpp
+++ b/js/src/jit/IonAnalysis.cpp
@@ -4055,7 +4055,7 @@ AnalyzePoppedThis(JSContext* cx, ObjectGroup* group,
// Add the property to the object, being careful not to update type information.
DebugOnly<unsigned> slotSpan = baseobj->slotSpan();
MOZ_ASSERT(!baseobj->containsPure(id));
- if (!baseobj->addDataProperty(cx, id, baseobj->slotSpan(), JSPROP_ENUMERATE))
+ if (!NativeObject::addDataProperty(cx, baseobj, id, baseobj->slotSpan(), JSPROP_ENUMERATE))
return false;
MOZ_ASSERT(baseobj->slotSpan() != slotSpan);
MOZ_ASSERT(!baseobj->inDictionaryMode());
@@ -4132,7 +4132,7 @@ CmpInstructions(const void* a, const void* b)
}
bool
-jit::AnalyzeNewScriptDefiniteProperties(JSContext* cx, JSFunction* fun,
+jit::AnalyzeNewScriptDefiniteProperties(JSContext* cx, HandleFunction fun,
ObjectGroup* group, HandlePlainObject baseobj,
Vector<TypeNewScript::Initializer>* initializerList)
{
@@ -4142,7 +4142,7 @@ jit::AnalyzeNewScriptDefiniteProperties(JSContext* cx, JSFunction* fun,
// which will definitely be added to the created object before it has a
// chance to escape and be accessed elsewhere.
- RootedScript script(cx, fun->getOrCreateScript(cx));
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, fun));
if (!script)
return false;
diff --git a/js/src/jit/IonAnalysis.h b/js/src/jit/IonAnalysis.h
index 1ce8edc80..efd31415b 100644
--- a/js/src/jit/IonAnalysis.h
+++ b/js/src/jit/IonAnalysis.h
@@ -196,7 +196,7 @@ MCompare*
ConvertLinearInequality(TempAllocator& alloc, MBasicBlock* block, const LinearSum& sum);
MOZ_MUST_USE bool
-AnalyzeNewScriptDefiniteProperties(JSContext* cx, JSFunction* fun,
+AnalyzeNewScriptDefiniteProperties(JSContext* cx, HandleFunction fun,
ObjectGroup* group, HandlePlainObject baseobj,
Vector<TypeNewScript::Initializer>* initializerList);
diff --git a/js/src/jit/IonBuilder.cpp b/js/src/jit/IonBuilder.cpp
index af85011be..2d053de5a 100644
--- a/js/src/jit/IonBuilder.cpp
+++ b/js/src/jit/IonBuilder.cpp
@@ -466,7 +466,8 @@ IonBuilder::canInlineTarget(JSFunction* target, CallInfo& callInfo)
// Allow constructing lazy scripts when performing the definite properties
// analysis, as baseline has not been used to warm the caller up yet.
if (target->isInterpreted() && info().analysisMode() == Analysis_DefiniteProperties) {
- RootedScript script(analysisContext, target->getOrCreateScript(analysisContext));
+ RootedFunction fun(analysisContext, target);
+ RootedScript script(analysisContext, JSFunction::getOrCreateScript(analysisContext, fun));
if (!script)
return InliningDecision_Error;
@@ -1938,6 +1939,7 @@ IonBuilder::inspectOpcode(JSOp op)
return jsop_funapply(GET_ARGC(pc));
case JSOP_CALL:
+ case JSOP_CALL_IGNORES_RV:
case JSOP_CALLITER:
case JSOP_NEW:
case JSOP_SUPERCALL:
@@ -1945,7 +1947,8 @@ IonBuilder::inspectOpcode(JSOp op)
if (!outermostBuilder()->iterators_.append(current->peek(-1)))
return false;
}
- return jsop_call(GET_ARGC(pc), (JSOp)*pc == JSOP_NEW || (JSOp)*pc == JSOP_SUPERCALL);
+ return jsop_call(GET_ARGC(pc), (JSOp)*pc == JSOP_NEW || (JSOp)*pc == JSOP_SUPERCALL,
+ (JSOp)*pc == JSOP_CALL_IGNORES_RV);
case JSOP_EVAL:
case JSOP_STRICTEVAL:
@@ -2218,6 +2221,8 @@ IonBuilder::inspectOpcode(JSOp op)
// update that stale value.
#endif
default:
+ // Any unused opcodes and JSOP_LIMIT will end up here without having
+ // to explicitly specify
break;
}
@@ -5871,7 +5876,7 @@ IonBuilder::inlineGenericFallback(JSFunction* target, CallInfo& callInfo, MBasic
return false;
// Create a new CallInfo to track modified state within this block.
- CallInfo fallbackInfo(alloc(), callInfo.constructing());
+ CallInfo fallbackInfo(alloc(), callInfo.constructing(), callInfo.ignoresReturnValue());
if (!fallbackInfo.init(callInfo))
return false;
fallbackInfo.popFormals(fallbackBlock);
@@ -5910,7 +5915,7 @@ IonBuilder::inlineObjectGroupFallback(CallInfo& callInfo, MBasicBlock* dispatchB
MOZ_ASSERT(cache->idempotent());
// Create a new CallInfo to track modified state within the fallback path.
- CallInfo fallbackInfo(alloc(), callInfo.constructing());
+ CallInfo fallbackInfo(alloc(), callInfo.constructing(), callInfo.ignoresReturnValue());
if (!fallbackInfo.init(callInfo))
return false;
@@ -6086,7 +6091,7 @@ IonBuilder::inlineCalls(CallInfo& callInfo, const ObjectVector& targets, BoolVec
inlineBlock->rewriteSlot(funIndex, funcDef);
// Create a new CallInfo to track modified state within the inline block.
- CallInfo inlineInfo(alloc(), callInfo.constructing());
+ CallInfo inlineInfo(alloc(), callInfo.constructing(), callInfo.ignoresReturnValue());
if (!inlineInfo.init(callInfo))
return false;
inlineInfo.popFormals(inlineBlock);
@@ -6535,7 +6540,8 @@ IonBuilder::jsop_funcall(uint32_t argc)
TemporaryTypeSet* calleeTypes = current->peek(calleeDepth)->resultTypeSet();
JSFunction* native = getSingleCallTarget(calleeTypes);
if (!native || !native->isNative() || native->native() != &fun_call) {
- CallInfo callInfo(alloc(), false);
+ CallInfo callInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
if (!callInfo.init(current, argc))
return false;
return makeCall(native, callInfo);
@@ -6560,7 +6566,8 @@ IonBuilder::jsop_funcall(uint32_t argc)
argc -= 1;
}
- CallInfo callInfo(alloc(), false);
+ CallInfo callInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
if (!callInfo.init(current, argc))
return false;
@@ -6597,7 +6604,8 @@ IonBuilder::jsop_funapply(uint32_t argc)
TemporaryTypeSet* calleeTypes = current->peek(calleeDepth)->resultTypeSet();
JSFunction* native = getSingleCallTarget(calleeTypes);
if (argc != 2 || info().analysisMode() == Analysis_ArgumentsUsage) {
- CallInfo callInfo(alloc(), false);
+ CallInfo callInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
if (!callInfo.init(current, argc))
return false;
return makeCall(native, callInfo);
@@ -6626,7 +6634,8 @@ IonBuilder::jsop_funapply(uint32_t argc)
return jsop_funapplyarray(argc);
}
- CallInfo callInfo(alloc(), false);
+ CallInfo callInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
if (!callInfo.init(current, argc))
return false;
return makeCall(native, callInfo);
@@ -6735,7 +6744,8 @@ IonBuilder::jsop_funapplyarguments(uint32_t argc)
// can inline the apply() target and don't care about the actual arguments
// that were passed in.
- CallInfo callInfo(alloc(), false);
+ CallInfo callInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
// Vp
MDefinition* vp = current->pop();
@@ -6781,7 +6791,7 @@ IonBuilder::jsop_funapplyarguments(uint32_t argc)
}
bool
-IonBuilder::jsop_call(uint32_t argc, bool constructing)
+IonBuilder::jsop_call(uint32_t argc, bool constructing, bool ignoresReturnValue)
{
startTrackingOptimizations();
@@ -6807,7 +6817,7 @@ IonBuilder::jsop_call(uint32_t argc, bool constructing)
if (calleeTypes && !getPolyCallTargets(calleeTypes, constructing, targets, 4))
return false;
- CallInfo callInfo(alloc(), constructing);
+ CallInfo callInfo(alloc(), constructing, ignoresReturnValue);
if (!callInfo.init(current, argc))
return false;
@@ -6943,7 +6953,8 @@ IonBuilder::makeCallHelper(JSFunction* target, CallInfo& callInfo)
}
MCall* call = MCall::New(alloc(), target, targetArgs + 1 + callInfo.constructing(),
- callInfo.argc(), callInfo.constructing(), isDOMCall);
+ callInfo.argc(), callInfo.constructing(),
+ callInfo.ignoresReturnValue(), isDOMCall);
if (!call)
return nullptr;
@@ -7044,7 +7055,7 @@ IonBuilder::jsop_eval(uint32_t argc)
// Emit a normal call if the eval has never executed. This keeps us from
// disabling compilation for the script when testing with --ion-eager.
if (calleeTypes && calleeTypes->empty())
- return jsop_call(argc, /* constructing = */ false);
+ return jsop_call(argc, /* constructing = */ false, false);
JSFunction* singleton = getSingleCallTarget(calleeTypes);
if (!singleton)
@@ -7060,7 +7071,8 @@ IonBuilder::jsop_eval(uint32_t argc)
if (info().funMaybeLazy()->isArrow())
return abort("Direct eval from arrow function");
- CallInfo callInfo(alloc(), /* constructing = */ false);
+ CallInfo callInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
if (!callInfo.init(current, argc))
return false;
callInfo.setImplicitlyUsedUnchecked();
@@ -7099,7 +7111,8 @@ IonBuilder::jsop_eval(uint32_t argc)
current->push(dynamicName);
current->push(constant(UndefinedValue())); // thisv
- CallInfo evalCallInfo(alloc(), /* constructing = */ false);
+ CallInfo evalCallInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
if (!evalCallInfo.init(current, /* argc = */ 0))
return false;
@@ -7116,7 +7129,7 @@ IonBuilder::jsop_eval(uint32_t argc)
return resumeAfter(ins) && pushTypeBarrier(ins, types, BarrierKind::TypeSet);
}
- return jsop_call(argc, /* constructing = */ false);
+ return jsop_call(argc, /* constructing = */ false, false);
}
bool
@@ -7336,12 +7349,6 @@ IonBuilder::newArrayTryTemplateObject(bool* emitted, JSObject* templateObject, u
if (!templateObject)
return true;
- if (templateObject->is<UnboxedArrayObject>()) {
- MOZ_ASSERT(templateObject->as<UnboxedArrayObject>().capacity() >= length);
- if (!templateObject->as<UnboxedArrayObject>().hasInlineElements())
- return true;
- }
-
MOZ_ASSERT(length <= NativeObject::MAX_DENSE_ELEMENTS_COUNT);
size_t arraySlots =
@@ -7597,7 +7604,6 @@ IonBuilder::jsop_initelem_array()
// intializer, and that arrays are marked as non-packed when writing holes
// to them during initialization.
bool needStub = false;
- JSValueType unboxedType = JSVAL_TYPE_MAGIC;
if (shouldAbortOnPreliminaryGroups(obj)) {
needStub = true;
} else if (!obj->resultTypeSet() ||
@@ -7608,12 +7614,6 @@ IonBuilder::jsop_initelem_array()
} else {
MOZ_ASSERT(obj->resultTypeSet()->getObjectCount() == 1);
TypeSet::ObjectKey* initializer = obj->resultTypeSet()->getObject(0);
- if (initializer->clasp() == &UnboxedArrayObject::class_) {
- if (initializer->group()->unboxedLayout().nativeGroup())
- needStub = true;
- else
- unboxedType = initializer->group()->unboxedLayout().elementType();
- }
if (value->type() == MIRType::MagicHole) {
if (!initializer->hasFlags(constraints(), OBJECT_FLAG_NON_PACKED))
needStub = true;
@@ -7633,60 +7633,46 @@ IonBuilder::jsop_initelem_array()
return resumeAfter(store);
}
- return initializeArrayElement(obj, index, value, unboxedType, /* addResumePoint = */ true);
+ return initializeArrayElement(obj, index, value, /* addResumePoint = */ true);
}
bool
IonBuilder::initializeArrayElement(MDefinition* obj, size_t index, MDefinition* value,
- JSValueType unboxedType,
bool addResumePointAndIncrementInitializedLength)
{
MConstant* id = MConstant::New(alloc(), Int32Value(index));
current->add(id);
// Get the elements vector.
- MElements* elements = MElements::New(alloc(), obj, unboxedType != JSVAL_TYPE_MAGIC);
+ MElements* elements = MElements::New(alloc(), obj);
current->add(elements);
- if (unboxedType != JSVAL_TYPE_MAGIC) {
- // Note: storeUnboxedValue takes care of any post barriers on the value.
- storeUnboxedValue(obj, elements, 0, id, unboxedType, value, /* preBarrier = */ false);
-
- if (addResumePointAndIncrementInitializedLength) {
- MInstruction* increment = MIncrementUnboxedArrayInitializedLength::New(alloc(), obj);
- current->add(increment);
-
- if (!resumeAfter(increment))
- return false;
- }
- } else {
- if (NeedsPostBarrier(value))
- current->add(MPostWriteBarrier::New(alloc(), obj, value));
+ if (NeedsPostBarrier(value))
+ current->add(MPostWriteBarrier::New(alloc(), obj, value));
- if ((obj->isNewArray() && obj->toNewArray()->convertDoubleElements()) ||
- (obj->isNullarySharedStub() &&
- obj->resultTypeSet()->convertDoubleElements(constraints()) == TemporaryTypeSet::AlwaysConvertToDoubles))
- {
- MInstruction* valueDouble = MToDouble::New(alloc(), value);
- current->add(valueDouble);
- value = valueDouble;
- }
+ if ((obj->isNewArray() && obj->toNewArray()->convertDoubleElements()) ||
+ (obj->isNullarySharedStub() &&
+ obj->resultTypeSet()->convertDoubleElements(constraints()) == TemporaryTypeSet::AlwaysConvertToDoubles))
+ {
+ MInstruction* valueDouble = MToDouble::New(alloc(), value);
+ current->add(valueDouble);
+ value = valueDouble;
+ }
- // Store the value.
- MStoreElement* store = MStoreElement::New(alloc(), elements, id, value,
+ // Store the value.
+ MStoreElement* store = MStoreElement::New(alloc(), elements, id, value,
/* needsHoleCheck = */ false);
- current->add(store);
+ current->add(store);
- if (addResumePointAndIncrementInitializedLength) {
- // Update the initialized length. (The template object for this
- // array has the array's ultimate length, so the length field is
- // already correct: no updating needed.)
- MSetInitializedLength* initLength = MSetInitializedLength::New(alloc(), elements, id);
- current->add(initLength);
+ if (addResumePointAndIncrementInitializedLength) {
+ // Update the initialized length. (The template object for this
+ // array has the array's ultimate length, so the length field is
+ // already correct: no updating needed.)
+ MSetInitializedLength* initLength = MSetInitializedLength::New(alloc(), elements, id);
+ current->add(initLength);
- if (!resumeAfter(initLength))
- return false;
- }
+ if (!resumeAfter(initLength))
+ return false;
}
return true;
@@ -8175,8 +8161,7 @@ IonBuilder::maybeMarkEmpty(MDefinition* ins)
static bool
ClassHasEffectlessLookup(const Class* clasp)
{
- return (clasp == &UnboxedArrayObject::class_) ||
- IsTypedObjectClass(clasp) ||
+ return IsTypedObjectClass(clasp) ||
(clasp->isNative() && !clasp->getOpsLookupProperty());
}
@@ -9452,12 +9437,9 @@ IonBuilder::getElemTryDense(bool* emitted, MDefinition* obj, MDefinition* index)
{
MOZ_ASSERT(*emitted == false);
- JSValueType unboxedType = UnboxedArrayElementType(constraints(), obj, index);
- if (unboxedType == JSVAL_TYPE_MAGIC) {
- if (!ElementAccessIsDenseNative(constraints(), obj, index)) {
- trackOptimizationOutcome(TrackedOutcome::AccessNotDense);
- return true;
- }
+ if (!ElementAccessIsDenseNative(constraints(), obj, index)) {
+ trackOptimizationOutcome(TrackedOutcome::AccessNotDense);
+ return true;
}
// Don't generate a fast path if there have been bounds check failures
@@ -9474,7 +9456,7 @@ IonBuilder::getElemTryDense(bool* emitted, MDefinition* obj, MDefinition* index)
return true;
}
- if (!jsop_getelem_dense(obj, index, unboxedType))
+ if (!jsop_getelem_dense(obj, index))
return false;
trackOptimizationSuccess();
@@ -9826,7 +9808,7 @@ IonBuilder::computeHeapType(const TemporaryTypeSet* objTypes, const jsid id)
}
bool
-IonBuilder::jsop_getelem_dense(MDefinition* obj, MDefinition* index, JSValueType unboxedType)
+IonBuilder::jsop_getelem_dense(MDefinition* obj, MDefinition* index)
{
TemporaryTypeSet* types = bytecodeTypes(pc);
@@ -9850,7 +9832,7 @@ IonBuilder::jsop_getelem_dense(MDefinition* obj, MDefinition* index, JSValueType
!ElementAccessHasExtraIndexedProperty(this, obj);
MIRType knownType = MIRType::Value;
- if (unboxedType == JSVAL_TYPE_MAGIC && barrier == BarrierKind::NoBarrier)
+ if (barrier == BarrierKind::NoBarrier)
knownType = GetElemKnownType(needsHoleCheck, types);
// Ensure index is an integer.
@@ -9859,13 +9841,13 @@ IonBuilder::jsop_getelem_dense(MDefinition* obj, MDefinition* index, JSValueType
index = idInt32;
// Get the elements vector.
- MInstruction* elements = MElements::New(alloc(), obj, unboxedType != JSVAL_TYPE_MAGIC);
+ MInstruction* elements = MElements::New(alloc(), obj);
current->add(elements);
// Note: to help GVN, use the original MElements instruction and not
// MConvertElementsToDoubles as operand. This is fine because converting
// elements to double does not change the initialized length.
- MInstruction* initLength = initializedLength(obj, elements, unboxedType);
+ MInstruction* initLength = initializedLength(obj, elements);
// If we can load the element as a definite double, make sure to check that
// the array has been converted to homogenous doubles first.
@@ -9881,7 +9863,6 @@ IonBuilder::jsop_getelem_dense(MDefinition* obj, MDefinition* index, JSValueType
}
bool loadDouble =
- unboxedType == JSVAL_TYPE_MAGIC &&
barrier == BarrierKind::NoBarrier &&
loopDepth_ &&
inBounds &&
@@ -9900,18 +9881,13 @@ IonBuilder::jsop_getelem_dense(MDefinition* obj, MDefinition* index, JSValueType
// hoisting.
index = addBoundsCheck(index, initLength);
- if (unboxedType != JSVAL_TYPE_MAGIC) {
- load = loadUnboxedValue(elements, 0, index, unboxedType, barrier, types);
- } else {
- load = MLoadElement::New(alloc(), elements, index, needsHoleCheck, loadDouble);
- current->add(load);
- }
+ load = MLoadElement::New(alloc(), elements, index, needsHoleCheck, loadDouble);
+ current->add(load);
} else {
// This load may return undefined, so assume that we *can* read holes,
// or that we can read out-of-bounds accesses. In this case, the bounds
// check is part of the opcode.
- load = MLoadElementHole::New(alloc(), elements, index, initLength,
- unboxedType, needsHoleCheck);
+ load = MLoadElementHole::New(alloc(), elements, index, initLength, needsHoleCheck);
current->add(load);
// If maybeUndefined was true, the typeset must have undefined, and
@@ -9921,8 +9897,7 @@ IonBuilder::jsop_getelem_dense(MDefinition* obj, MDefinition* index, JSValueType
}
if (knownType != MIRType::Value) {
- if (unboxedType == JSVAL_TYPE_MAGIC)
- load->setResultType(knownType);
+ load->setResultType(knownType);
load->setResultTypeSet(types);
}
@@ -10369,12 +10344,9 @@ IonBuilder::setElemTryDense(bool* emitted, MDefinition* object,
{
MOZ_ASSERT(*emitted == false);
- JSValueType unboxedType = UnboxedArrayElementType(constraints(), object, index);
- if (unboxedType == JSVAL_TYPE_MAGIC) {
- if (!ElementAccessIsDenseNative(constraints(), object, index)) {
- trackOptimizationOutcome(TrackedOutcome::AccessNotDense);
- return true;
- }
+ if (!ElementAccessIsDenseNative(constraints(), object, index)) {
+ trackOptimizationOutcome(TrackedOutcome::AccessNotDense);
+ return true;
}
if (PropertyWriteNeedsTypeBarrier(alloc(), constraints(), current,
@@ -10408,7 +10380,7 @@ IonBuilder::setElemTryDense(bool* emitted, MDefinition* object,
}
// Emit dense setelem variant.
- if (!jsop_setelem_dense(conversion, object, index, value, unboxedType, writeHole, emitted))
+ if (!jsop_setelem_dense(conversion, object, index, value, writeHole, emitted))
return false;
if (!*emitted) {
@@ -10498,13 +10470,11 @@ IonBuilder::setElemTryCache(bool* emitted, MDefinition* object,
bool
IonBuilder::jsop_setelem_dense(TemporaryTypeSet::DoubleConversion conversion,
MDefinition* obj, MDefinition* id, MDefinition* value,
- JSValueType unboxedType, bool writeHole, bool* emitted)
+ bool writeHole, bool* emitted)
{
MOZ_ASSERT(*emitted == false);
- MIRType elementType = MIRType::None;
- if (unboxedType == JSVAL_TYPE_MAGIC)
- elementType = DenseNativeElementType(constraints(), obj);
+ MIRType elementType = DenseNativeElementType(constraints(), obj);
bool packed = ElementAccessIsPacked(constraints(), obj);
// Writes which are on holes in the object do not have to bail out if they
@@ -10534,7 +10504,7 @@ IonBuilder::jsop_setelem_dense(TemporaryTypeSet::DoubleConversion conversion,
obj = addMaybeCopyElementsForWrite(obj, /* checkNative = */ false);
// Get the elements vector.
- MElements* elements = MElements::New(alloc(), obj, unboxedType != JSVAL_TYPE_MAGIC);
+ MElements* elements = MElements::New(alloc(), obj);
current->add(elements);
// Ensure the value is a double, if double conversion might be needed.
@@ -10571,7 +10541,7 @@ IonBuilder::jsop_setelem_dense(TemporaryTypeSet::DoubleConversion conversion,
MInstruction* store;
MStoreElementCommon* common = nullptr;
if (writeHole && hasNoExtraIndexedProperty && !mayBeFrozen) {
- MStoreElementHole* ins = MStoreElementHole::New(alloc(), obj, elements, id, newValue, unboxedType);
+ MStoreElementHole* ins = MStoreElementHole::New(alloc(), obj, elements, id, newValue);
store = ins;
common = ins;
@@ -10583,27 +10553,23 @@ IonBuilder::jsop_setelem_dense(TemporaryTypeSet::DoubleConversion conversion,
bool strict = IsStrictSetPC(pc);
MFallibleStoreElement* ins = MFallibleStoreElement::New(alloc(), obj, elements, id,
- newValue, unboxedType, strict);
+ newValue, strict);
store = ins;
common = ins;
current->add(ins);
current->push(value);
} else {
- MInstruction* initLength = initializedLength(obj, elements, unboxedType);
+ MInstruction* initLength = initializedLength(obj, elements);
id = addBoundsCheck(id, initLength);
bool needsHoleCheck = !packed && !hasNoExtraIndexedProperty;
- if (unboxedType != JSVAL_TYPE_MAGIC) {
- store = storeUnboxedValue(obj, elements, 0, id, unboxedType, newValue);
- } else {
- MStoreElement* ins = MStoreElement::New(alloc(), elements, id, newValue, needsHoleCheck);
- store = ins;
- common = ins;
+ MStoreElement* ins = MStoreElement::New(alloc(), elements, id, newValue, needsHoleCheck);
+ store = ins;
+ common = ins;
- current->add(store);
- }
+ current->add(store);
current->push(value);
}
@@ -10721,18 +10687,6 @@ IonBuilder::jsop_length_fastPath()
return true;
}
- // Compute the length for unboxed array objects.
- if (UnboxedArrayElementType(constraints(), obj, nullptr) != JSVAL_TYPE_MAGIC &&
- !objTypes->hasObjectFlags(constraints(), OBJECT_FLAG_LENGTH_OVERFLOW))
- {
- current->pop();
-
- MUnboxedArrayLength* length = MUnboxedArrayLength::New(alloc(), obj);
- current->add(length);
- current->push(length);
- return true;
- }
-
// Compute the length for array typed objects.
TypedObjectPrediction prediction = typedObjectPrediction(obj);
if (!prediction.isUseless()) {
@@ -10982,63 +10936,6 @@ IonBuilder::getDefiniteSlot(TemporaryTypeSet* types, PropertyName* name, uint32_
return slot;
}
-uint32_t
-IonBuilder::getUnboxedOffset(TemporaryTypeSet* types, PropertyName* name, JSValueType* punboxedType)
-{
- if (!types || types->unknownObject() || !types->objectOrSentinel()) {
- trackOptimizationOutcome(TrackedOutcome::NoTypeInfo);
- return UINT32_MAX;
- }
-
- uint32_t offset = UINT32_MAX;
-
- for (size_t i = 0; i < types->getObjectCount(); i++) {
- TypeSet::ObjectKey* key = types->getObject(i);
- if (!key)
- continue;
-
- if (key->unknownProperties()) {
- trackOptimizationOutcome(TrackedOutcome::UnknownProperties);
- return UINT32_MAX;
- }
-
- if (key->isSingleton()) {
- trackOptimizationOutcome(TrackedOutcome::Singleton);
- return UINT32_MAX;
- }
-
- UnboxedLayout* layout = key->group()->maybeUnboxedLayout();
- if (!layout) {
- trackOptimizationOutcome(TrackedOutcome::NotUnboxed);
- return UINT32_MAX;
- }
-
- const UnboxedLayout::Property* property = layout->lookup(name);
- if (!property) {
- trackOptimizationOutcome(TrackedOutcome::StructNoField);
- return UINT32_MAX;
- }
-
- if (layout->nativeGroup()) {
- trackOptimizationOutcome(TrackedOutcome::UnboxedConvertedToNative);
- return UINT32_MAX;
- }
-
- if (offset == UINT32_MAX) {
- offset = property->offset;
- *punboxedType = property->type;
- } else if (offset != property->offset) {
- trackOptimizationOutcome(TrackedOutcome::InconsistentFieldOffset);
- return UINT32_MAX;
- } else if (*punboxedType != property->type) {
- trackOptimizationOutcome(TrackedOutcome::InconsistentFieldType);
- return UINT32_MAX;
- }
- }
-
- return offset;
-}
-
bool
IonBuilder::jsop_runonce()
{
@@ -12005,72 +11902,6 @@ IonBuilder::getPropTryModuleNamespace(bool* emitted, MDefinition* obj, PropertyN
return true;
}
-MInstruction*
-IonBuilder::loadUnboxedProperty(MDefinition* obj, size_t offset, JSValueType unboxedType,
- BarrierKind barrier, TemporaryTypeSet* types)
-{
- // loadUnboxedValue is designed to load any value as if it were contained in
- // an array. Thus a property offset is converted to an index, when the
- // object is reinterpreted as an array of properties of the same size.
- size_t index = offset / UnboxedTypeSize(unboxedType);
- MInstruction* indexConstant = MConstant::New(alloc(), Int32Value(index));
- current->add(indexConstant);
-
- return loadUnboxedValue(obj, UnboxedPlainObject::offsetOfData(),
- indexConstant, unboxedType, barrier, types);
-}
-
-MInstruction*
-IonBuilder::loadUnboxedValue(MDefinition* elements, size_t elementsOffset,
- MDefinition* index, JSValueType unboxedType,
- BarrierKind barrier, TemporaryTypeSet* types)
-{
- MInstruction* load;
- switch (unboxedType) {
- case JSVAL_TYPE_BOOLEAN:
- load = MLoadUnboxedScalar::New(alloc(), elements, index, Scalar::Uint8,
- DoesNotRequireMemoryBarrier, elementsOffset);
- load->setResultType(MIRType::Boolean);
- break;
-
- case JSVAL_TYPE_INT32:
- load = MLoadUnboxedScalar::New(alloc(), elements, index, Scalar::Int32,
- DoesNotRequireMemoryBarrier, elementsOffset);
- load->setResultType(MIRType::Int32);
- break;
-
- case JSVAL_TYPE_DOUBLE:
- load = MLoadUnboxedScalar::New(alloc(), elements, index, Scalar::Float64,
- DoesNotRequireMemoryBarrier, elementsOffset,
- /* canonicalizeDoubles = */ false);
- load->setResultType(MIRType::Double);
- break;
-
- case JSVAL_TYPE_STRING:
- load = MLoadUnboxedString::New(alloc(), elements, index, elementsOffset);
- break;
-
- case JSVAL_TYPE_OBJECT: {
- MLoadUnboxedObjectOrNull::NullBehavior nullBehavior;
- if (types->hasType(TypeSet::NullType()))
- nullBehavior = MLoadUnboxedObjectOrNull::HandleNull;
- else if (barrier != BarrierKind::NoBarrier)
- nullBehavior = MLoadUnboxedObjectOrNull::BailOnNull;
- else
- nullBehavior = MLoadUnboxedObjectOrNull::NullNotPossible;
- load = MLoadUnboxedObjectOrNull::New(alloc(), elements, index, nullBehavior,
- elementsOffset);
- break;
- }
-
- default:
- MOZ_CRASH();
- }
-
- current->add(load);
- return load;
-}
-
MDefinition*
IonBuilder::addShapeGuardsForGetterSetter(MDefinition* obj, JSObject* holder, Shape* holderShape,
const BaselineInspector::ReceiverVector& receivers,
@@ -12180,7 +12011,8 @@ IonBuilder::getPropTryCommonGetter(bool* emitted, MDefinition* obj, PropertyName
current->push(obj);
- CallInfo callInfo(alloc(), false);
+ CallInfo callInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
if (!callInfo.init(current, 0))
return false;
@@ -12675,7 +12507,8 @@ IonBuilder::setPropTryCommonSetter(bool* emitted, MDefinition* obj,
// Call the setter. Note that we have to push the original value, not
// the setter's return value.
- CallInfo callInfo(alloc(), false);
+ CallInfo callInfo(alloc(), /* constructing = */ false,
+ /* ignoresReturnValue = */ BytecodeIsPopped(pc));
if (!callInfo.init(current, 1))
return false;
@@ -12892,66 +12725,6 @@ IonBuilder::setPropTryDefiniteSlot(bool* emitted, MDefinition* obj,
return true;
}
-MInstruction*
-IonBuilder::storeUnboxedProperty(MDefinition* obj, size_t offset, JSValueType unboxedType,
- MDefinition* value)
-{
- size_t scaledOffsetConstant = offset / UnboxedTypeSize(unboxedType);
- MInstruction* scaledOffset = MConstant::New(alloc(), Int32Value(scaledOffsetConstant));
- current->add(scaledOffset);
-
- return storeUnboxedValue(obj, obj, UnboxedPlainObject::offsetOfData(),
- scaledOffset, unboxedType, value);
-}
-
-MInstruction*
-IonBuilder::storeUnboxedValue(MDefinition* obj, MDefinition* elements, int32_t elementsOffset,
- MDefinition* scaledOffset, JSValueType unboxedType,
- MDefinition* value, bool preBarrier /* = true */)
-{
- MInstruction* store;
- switch (unboxedType) {
- case JSVAL_TYPE_BOOLEAN:
- store = MStoreUnboxedScalar::New(alloc(), elements, scaledOffset, value, Scalar::Uint8,
- MStoreUnboxedScalar::DontTruncateInput,
- DoesNotRequireMemoryBarrier, elementsOffset);
- break;
-
- case JSVAL_TYPE_INT32:
- store = MStoreUnboxedScalar::New(alloc(), elements, scaledOffset, value, Scalar::Int32,
- MStoreUnboxedScalar::DontTruncateInput,
- DoesNotRequireMemoryBarrier, elementsOffset);
- break;
-
- case JSVAL_TYPE_DOUBLE:
- store = MStoreUnboxedScalar::New(alloc(), elements, scaledOffset, value, Scalar::Float64,
- MStoreUnboxedScalar::DontTruncateInput,
- DoesNotRequireMemoryBarrier, elementsOffset);
- break;
-
- case JSVAL_TYPE_STRING:
- store = MStoreUnboxedString::New(alloc(), elements, scaledOffset, value,
- elementsOffset, preBarrier);
- break;
-
- case JSVAL_TYPE_OBJECT:
- MOZ_ASSERT(value->type() == MIRType::Object ||
- value->type() == MIRType::Null ||
- value->type() == MIRType::Value);
- MOZ_ASSERT(!value->mightBeType(MIRType::Undefined),
- "MToObjectOrNull slow path is invalid for unboxed objects");
- store = MStoreUnboxedObjectOrNull::New(alloc(), elements, scaledOffset, value, obj,
- elementsOffset, preBarrier);
- break;
-
- default:
- MOZ_CRASH();
- }
-
- current->add(store);
- return store;
-}
-
bool
IonBuilder::setPropTryInlineAccess(bool* emitted, MDefinition* obj,
PropertyName* name, MDefinition* value,
@@ -13687,11 +13460,8 @@ IonBuilder::inTryDense(bool* emitted, MDefinition* obj, MDefinition* id)
if (shouldAbortOnPreliminaryGroups(obj))
return true;
- JSValueType unboxedType = UnboxedArrayElementType(constraints(), obj, id);
- if (unboxedType == JSVAL_TYPE_MAGIC) {
- if (!ElementAccessIsDenseNative(constraints(), obj, id))
- return true;
- }
+ if (!ElementAccessIsDenseNative(constraints(), obj, id))
+ return true;
if (ElementAccessHasExtraIndexedProperty(this, obj))
return true;
@@ -13706,10 +13476,10 @@ IonBuilder::inTryDense(bool* emitted, MDefinition* obj, MDefinition* id)
id = idInt32;
// Get the elements vector.
- MElements* elements = MElements::New(alloc(), obj, unboxedType != JSVAL_TYPE_MAGIC);
+ MElements* elements = MElements::New(alloc(), obj);
current->add(elements);
- MInstruction* initLength = initializedLength(obj, elements, unboxedType);
+ MInstruction* initLength = initializedLength(obj, elements);
// If there are no holes, speculate the InArray check will not fail.
if (!needsHoleCheck && !failedBoundsCheck_) {
@@ -13719,8 +13489,7 @@ IonBuilder::inTryDense(bool* emitted, MDefinition* obj, MDefinition* id)
}
// Check if id < initLength and elem[id] not a hole.
- MInArray* ins = MInArray::New(alloc(), elements, id, initLength, obj, needsHoleCheck,
- unboxedType);
+ MInArray* ins = MInArray::New(alloc(), elements, id, initLength, obj, needsHoleCheck);
current->add(ins);
current->push(ins);
@@ -14398,32 +14167,24 @@ IonBuilder::constantInt(int32_t i)
}
MInstruction*
-IonBuilder::initializedLength(MDefinition* obj, MDefinition* elements, JSValueType unboxedType)
+IonBuilder::initializedLength(MDefinition* obj, MDefinition* elements)
{
- MInstruction* res;
- if (unboxedType != JSVAL_TYPE_MAGIC)
- res = MUnboxedArrayInitializedLength::New(alloc(), obj);
- else
- res = MInitializedLength::New(alloc(), elements);
+ MInstruction* res = MInitializedLength::New(alloc(), elements);
current->add(res);
return res;
}
MInstruction*
-IonBuilder::setInitializedLength(MDefinition* obj, JSValueType unboxedType, size_t count)
+IonBuilder::setInitializedLength(MDefinition* obj, size_t count)
{
MOZ_ASSERT(count);
- MInstruction* res;
- if (unboxedType != JSVAL_TYPE_MAGIC) {
- res = MSetUnboxedArrayInitializedLength::New(alloc(), obj, constant(Int32Value(count)));
- } else {
- // MSetInitializedLength takes the index of the last element, rather
- // than the count itself.
- MInstruction* elements = MElements::New(alloc(), obj, /* unboxed = */ false);
- current->add(elements);
- res = MSetInitializedLength::New(alloc(), elements, constant(Int32Value(count - 1)));
- }
+ // MSetInitializedLength takes the index of the last element, rather
+ // than the count itself.
+ MInstruction* elements = MElements::New(alloc(), obj, /* unboxed = */ false);
+ current->add(elements);
+ MInstruction* res =
+ MSetInitializedLength::New(alloc(), elements, constant(Int32Value(count - 1)));
current->add(res);
return res;
}
diff --git a/js/src/jit/IonBuilder.h b/js/src/jit/IonBuilder.h
index 77528ad37..1f763a4f2 100644
--- a/js/src/jit/IonBuilder.h
+++ b/js/src/jit/IonBuilder.h
@@ -346,9 +346,8 @@ class IonBuilder
MConstant* constant(const Value& v);
MConstant* constantInt(int32_t i);
- MInstruction* initializedLength(MDefinition* obj, MDefinition* elements,
- JSValueType unboxedType);
- MInstruction* setInitializedLength(MDefinition* obj, JSValueType unboxedType, size_t count);
+ MInstruction* initializedLength(MDefinition* obj, MDefinition* elements);
+ MInstruction* setInitializedLength(MDefinition* obj, size_t count);
// Improve the type information at tests
MOZ_MUST_USE bool improveTypesAtTest(MDefinition* ins, bool trueBranch, MTest* test);
@@ -611,7 +610,6 @@ class IonBuilder
TypedObjectPrediction elemTypeReprs,
uint32_t elemSize);
MOZ_MUST_USE bool initializeArrayElement(MDefinition* obj, size_t index, MDefinition* value,
- JSValueType unboxedType,
bool addResumePointAndIncrementInitializedLength);
// jsop_getelem() helpers.
@@ -701,6 +699,7 @@ class IonBuilder
MOZ_MUST_USE bool jsop_funapplyarguments(uint32_t argc);
MOZ_MUST_USE bool jsop_funapplyarray(uint32_t argc);
MOZ_MUST_USE bool jsop_call(uint32_t argc, bool constructing);
+ MOZ_MUST_USE bool jsop_call(uint32_t argc, bool constructing, bool ignoresReturnValue);
MOZ_MUST_USE bool jsop_eval(uint32_t argc);
MOZ_MUST_USE bool jsop_ifeq(JSOp op);
MOZ_MUST_USE bool jsop_try();
@@ -723,15 +722,13 @@ class IonBuilder
MOZ_MUST_USE bool jsop_bindname(PropertyName* name);
MOZ_MUST_USE bool jsop_bindvar();
MOZ_MUST_USE bool jsop_getelem();
- MOZ_MUST_USE bool jsop_getelem_dense(MDefinition* obj, MDefinition* index,
- JSValueType unboxedType);
+ MOZ_MUST_USE bool jsop_getelem_dense(MDefinition* obj, MDefinition* index);
MOZ_MUST_USE bool jsop_getelem_typed(MDefinition* obj, MDefinition* index,
ScalarTypeDescr::Type arrayType);
MOZ_MUST_USE bool jsop_setelem();
MOZ_MUST_USE bool jsop_setelem_dense(TemporaryTypeSet::DoubleConversion conversion,
MDefinition* object, MDefinition* index,
- MDefinition* value, JSValueType unboxedType,
- bool writeHole, bool* emitted);
+ MDefinition* value, bool writeHole, bool* emitted);
MOZ_MUST_USE bool jsop_setelem_typed(ScalarTypeDescr::Type arrayType,
MDefinition* object, MDefinition* index,
MDefinition* value);
@@ -824,7 +821,6 @@ class IonBuilder
InliningStatus inlineArrayPush(CallInfo& callInfo);
InliningStatus inlineArraySlice(CallInfo& callInfo);
InliningStatus inlineArrayJoin(CallInfo& callInfo);
- InliningStatus inlineArraySplice(CallInfo& callInfo);
// Math natives.
InliningStatus inlineMathAbs(CallInfo& callInfo);
@@ -1052,19 +1048,6 @@ class IonBuilder
ResultWithOOM<bool> testNotDefinedProperty(MDefinition* obj, jsid id);
uint32_t getDefiniteSlot(TemporaryTypeSet* types, PropertyName* name, uint32_t* pnfixed);
- uint32_t getUnboxedOffset(TemporaryTypeSet* types, PropertyName* name,
- JSValueType* punboxedType);
- MInstruction* loadUnboxedProperty(MDefinition* obj, size_t offset, JSValueType unboxedType,
- BarrierKind barrier, TemporaryTypeSet* types);
- MInstruction* loadUnboxedValue(MDefinition* elements, size_t elementsOffset,
- MDefinition* scaledOffset, JSValueType unboxedType,
- BarrierKind barrier, TemporaryTypeSet* types);
- MInstruction* storeUnboxedProperty(MDefinition* obj, size_t offset, JSValueType unboxedType,
- MDefinition* value);
- MInstruction* storeUnboxedValue(MDefinition* obj,
- MDefinition* elements, int32_t elementsOffset,
- MDefinition* scaledOffset, JSValueType unboxedType,
- MDefinition* value, bool preBarrier = true);
MOZ_MUST_USE bool checkPreliminaryGroups(MDefinition *obj);
MOZ_MUST_USE bool freezePropTypeSets(TemporaryTypeSet* types,
JSObject* foundProto, PropertyName* name);
@@ -1369,16 +1352,21 @@ class CallInfo
MDefinition* newTargetArg_;
MDefinitionVector args_;
- bool constructing_;
- bool setter_;
+ bool constructing_:1;
+
+ // True if the caller does not use the return value.
+ bool ignoresReturnValue_:1;
+
+ bool setter_:1;
public:
- CallInfo(TempAllocator& alloc, bool constructing)
+ CallInfo(TempAllocator& alloc, bool constructing, bool ignoresReturnValue)
: fun_(nullptr),
thisArg_(nullptr),
newTargetArg_(nullptr),
args_(alloc),
constructing_(constructing),
+ ignoresReturnValue_(ignoresReturnValue),
setter_(false)
{ }
@@ -1387,6 +1375,7 @@ class CallInfo
fun_ = callInfo.fun();
thisArg_ = callInfo.thisArg();
+ ignoresReturnValue_ = callInfo.ignoresReturnValue();
if (constructing())
newTargetArg_ = callInfo.getNewTarget();
@@ -1483,6 +1472,10 @@ class CallInfo
return constructing_;
}
+ bool ignoresReturnValue() const {
+ return ignoresReturnValue_;
+ }
+
void setNewTarget(MDefinition* newTarget) {
MOZ_ASSERT(constructing());
newTargetArg_ = newTarget;
diff --git a/js/src/jit/IonCaches.cpp b/js/src/jit/IonCaches.cpp
index 0208db6ae..48e0792bb 100644
--- a/js/src/jit/IonCaches.cpp
+++ b/js/src/jit/IonCaches.cpp
@@ -31,7 +31,6 @@
#include "jit/shared/Lowering-shared-inl.h"
#include "vm/Interpreter-inl.h"
#include "vm/Shape-inl.h"
-#include "vm/UnboxedObject-inl.h"
using namespace js;
using namespace js::jit;
@@ -620,29 +619,7 @@ TestMatchingReceiver(MacroAssembler& masm, IonCache::StubAttacher& attacher,
Register object, JSObject* obj, Label* failure,
bool alwaysCheckGroup = false)
{
- if (obj->is<UnboxedPlainObject>()) {
- MOZ_ASSERT(failure);
-
- masm.branchTestObjGroup(Assembler::NotEqual, object, obj->group(), failure);
- Address expandoAddress(object, UnboxedPlainObject::offsetOfExpando());
- if (UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando()) {
- masm.branchPtr(Assembler::Equal, expandoAddress, ImmWord(0), failure);
- Label success;
- masm.push(object);
- masm.loadPtr(expandoAddress, object);
- masm.branchTestObjShape(Assembler::Equal, object, expando->lastProperty(),
- &success);
- masm.pop(object);
- masm.jump(failure);
- masm.bind(&success);
- masm.pop(object);
- } else {
- masm.branchPtr(Assembler::NotEqual, expandoAddress, ImmWord(0), failure);
- }
- } else if (obj->is<UnboxedArrayObject>()) {
- MOZ_ASSERT(failure);
- masm.branchTestObjGroup(Assembler::NotEqual, object, obj->group(), failure);
- } else if (obj->is<TypedObject>()) {
+ if (obj->is<TypedObject>()) {
attacher.branchNextStubOrLabel(masm, Assembler::NotEqual,
Address(object, JSObject::offsetOfGroup()),
ImmGCPtr(obj->group()), failure);
@@ -759,7 +736,6 @@ GenerateReadSlot(JSContext* cx, IonScript* ion, MacroAssembler& masm,
// jump directly. Otherwise, jump to the end of the stub, so there's a
// common point to patch.
bool multipleFailureJumps = (obj != holder)
- || obj->is<UnboxedPlainObject>()
|| (checkTDZ && output.hasValue())
|| (failures != nullptr && failures->used());
@@ -778,7 +754,6 @@ GenerateReadSlot(JSContext* cx, IonScript* ion, MacroAssembler& masm,
Register scratchReg = Register::FromCode(0); // Quell compiler warning.
if (obj != holder ||
- obj->is<UnboxedPlainObject>() ||
!holder->as<NativeObject>().isFixedSlot(shape->slot()))
{
if (output.hasValue()) {
@@ -839,10 +814,6 @@ GenerateReadSlot(JSContext* cx, IonScript* ion, MacroAssembler& masm,
holderReg = InvalidReg;
}
- } else if (obj->is<UnboxedPlainObject>()) {
- holder = obj->as<UnboxedPlainObject>().maybeExpando();
- holderReg = scratchReg;
- masm.loadPtr(Address(object, UnboxedPlainObject::offsetOfExpando()), holderReg);
} else {
holderReg = object;
}
@@ -870,30 +841,6 @@ GenerateReadSlot(JSContext* cx, IonScript* ion, MacroAssembler& masm,
attacher.jumpNextStub(masm);
}
-static void
-GenerateReadUnboxed(JSContext* cx, IonScript* ion, MacroAssembler& masm,
- IonCache::StubAttacher& attacher, JSObject* obj,
- const UnboxedLayout::Property* property,
- Register object, TypedOrValueRegister output,
- Label* failures = nullptr)
-{
- // Guard on the group of the object.
- attacher.branchNextStubOrLabel(masm, Assembler::NotEqual,
- Address(object, JSObject::offsetOfGroup()),
- ImmGCPtr(obj->group()), failures);
-
- Address address(object, UnboxedPlainObject::offsetOfData() + property->offset);
-
- masm.loadUnboxedProperty(address, property->type, output);
-
- attacher.jumpRejoin(masm);
-
- if (failures) {
- masm.bind(failures);
- attacher.jumpNextStub(masm);
- }
-}
-
static bool
EmitGetterCall(JSContext* cx, MacroAssembler& masm,
IonCache::StubAttacher& attacher, JSObject* obj,
@@ -1188,39 +1135,6 @@ GenerateArrayLength(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher&
return true;
}
-static void
-GenerateUnboxedArrayLength(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher& attacher,
- JSObject* array, Register object, TypedOrValueRegister output,
- Label* failures)
-{
- Register outReg;
- if (output.hasValue()) {
- outReg = output.valueReg().scratchReg();
- } else {
- MOZ_ASSERT(output.type() == MIRType::Int32);
- outReg = output.typedReg().gpr();
- }
- MOZ_ASSERT(object != outReg);
-
- TestMatchingReceiver(masm, attacher, object, array, failures);
-
- // Load length.
- masm.load32(Address(object, UnboxedArrayObject::offsetOfLength()), outReg);
-
- // Check for a length that fits in an int32.
- masm.branchTest32(Assembler::Signed, outReg, outReg, failures);
-
- if (output.hasValue())
- masm.tagValue(JSVAL_TYPE_INT32, outReg, output.valueReg());
-
- // Success.
- attacher.jumpRejoin(masm);
-
- // Failure.
- masm.bind(failures);
- attacher.jumpNextStub(masm);
-}
-
// In this case, the code for TypedArray and SharedTypedArray is not the same,
// because the code embeds pointers to the respective class arrays. Code that
// caches the stub code must distinguish between the two cases.
@@ -1534,101 +1448,6 @@ GetPropertyIC::tryAttachNative(JSContext* cx, HandleScript outerScript, IonScrip
}
bool
-GetPropertyIC::tryAttachUnboxed(JSContext* cx, HandleScript outerScript, IonScript* ion,
- HandleObject obj, HandleId id, void* returnAddr, bool* emitted)
-{
- MOZ_ASSERT(canAttachStub());
- MOZ_ASSERT(!*emitted);
- MOZ_ASSERT(outerScript->ionScript() == ion);
-
- if (!obj->is<UnboxedPlainObject>())
- return true;
- const UnboxedLayout::Property* property = obj->as<UnboxedPlainObject>().layout().lookup(id);
- if (!property)
- return true;
-
- *emitted = true;
-
- MacroAssembler masm(cx, ion, outerScript, profilerLeavePc_);
-
- Label failures;
- emitIdGuard(masm, id, &failures);
- Label* maybeFailures = failures.used() ? &failures : nullptr;
-
- StubAttacher attacher(*this);
- GenerateReadUnboxed(cx, ion, masm, attacher, obj, property, object(), output(), maybeFailures);
- return linkAndAttachStub(cx, masm, attacher, ion, "read unboxed",
- JS::TrackedOutcome::ICGetPropStub_UnboxedRead);
-}
-
-bool
-GetPropertyIC::tryAttachUnboxedExpando(JSContext* cx, HandleScript outerScript, IonScript* ion,
- HandleObject obj, HandleId id, void* returnAddr, bool* emitted)
-{
- MOZ_ASSERT(canAttachStub());
- MOZ_ASSERT(!*emitted);
- MOZ_ASSERT(outerScript->ionScript() == ion);
-
- if (!obj->is<UnboxedPlainObject>())
- return true;
- Rooted<UnboxedExpandoObject*> expando(cx, obj->as<UnboxedPlainObject>().maybeExpando());
- if (!expando)
- return true;
-
- Shape* shape = expando->lookup(cx, id);
- if (!shape || !shape->hasDefaultGetter() || !shape->hasSlot())
- return true;
-
- *emitted = true;
-
- MacroAssembler masm(cx, ion, outerScript, profilerLeavePc_);
-
- Label failures;
- emitIdGuard(masm, id, &failures);
- Label* maybeFailures = failures.used() ? &failures : nullptr;
-
- StubAttacher attacher(*this);
- GenerateReadSlot(cx, ion, masm, attacher, DontCheckTDZ, obj, obj,
- shape, object(), output(), maybeFailures);
- return linkAndAttachStub(cx, masm, attacher, ion, "read unboxed expando",
- JS::TrackedOutcome::ICGetPropStub_UnboxedReadExpando);
-}
-
-bool
-GetPropertyIC::tryAttachUnboxedArrayLength(JSContext* cx, HandleScript outerScript, IonScript* ion,
- HandleObject obj, HandleId id, void* returnAddr,
- bool* emitted)
-{
- MOZ_ASSERT(canAttachStub());
- MOZ_ASSERT(!*emitted);
- MOZ_ASSERT(outerScript->ionScript() == ion);
-
- if (!obj->is<UnboxedArrayObject>())
- return true;
-
- if (!JSID_IS_ATOM(id, cx->names().length))
- return true;
-
- if (obj->as<UnboxedArrayObject>().length() > INT32_MAX)
- return true;
-
- if (!allowArrayLength(cx))
- return true;
-
- *emitted = true;
-
- MacroAssembler masm(cx, ion, outerScript, profilerLeavePc_);
-
- Label failures;
- emitIdGuard(masm, id, &failures);
-
- StubAttacher attacher(*this);
- GenerateUnboxedArrayLength(cx, masm, attacher, obj, object(), output(), &failures);
- return linkAndAttachStub(cx, masm, attacher, ion, "unboxed array length",
- JS::TrackedOutcome::ICGetPropStub_UnboxedArrayLength);
-}
-
-bool
GetPropertyIC::tryAttachTypedArrayLength(JSContext* cx, HandleScript outerScript, IonScript* ion,
HandleObject obj, HandleId id, bool* emitted)
{
@@ -2197,15 +2016,6 @@ GetPropertyIC::tryAttachStub(JSContext* cx, HandleScript outerScript, IonScript*
if (!*emitted && !tryAttachNative(cx, outerScript, ion, obj, id, returnAddr, emitted))
return false;
- if (!*emitted && !tryAttachUnboxed(cx, outerScript, ion, obj, id, returnAddr, emitted))
- return false;
-
- if (!*emitted && !tryAttachUnboxedExpando(cx, outerScript, ion, obj, id, returnAddr, emitted))
- return false;
-
- if (!*emitted && !tryAttachUnboxedArrayLength(cx, outerScript, ion, obj, id, returnAddr, emitted))
- return false;
-
if (!*emitted && !tryAttachTypedArrayLength(cx, outerScript, ion, obj, id, emitted))
return false;
}
@@ -2384,12 +2194,6 @@ GenerateSetSlot(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher& att
NativeObject::slotsSizeMustNotOverflow();
- if (obj->is<UnboxedPlainObject>()) {
- obj = obj->as<UnboxedPlainObject>().maybeExpando();
- masm.loadPtr(Address(object, UnboxedPlainObject::offsetOfExpando()), tempReg);
- object = tempReg;
- }
-
if (obj->as<NativeObject>().isFixedSlot(shape->slot())) {
Address addr(object, NativeObject::getFixedSlotOffset(shape->slot()));
@@ -3027,23 +2831,13 @@ GenerateAddSlot(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher& att
masm.branchTestObjGroup(Assembler::NotEqual, object, oldGroup, failures);
if (obj->maybeShape()) {
masm.branchTestObjShape(Assembler::NotEqual, object, oldShape, failures);
- } else {
- MOZ_ASSERT(obj->is<UnboxedPlainObject>());
-
- Address expandoAddress(object, UnboxedPlainObject::offsetOfExpando());
- masm.branchPtr(Assembler::Equal, expandoAddress, ImmWord(0), failures);
-
- masm.loadPtr(expandoAddress, tempReg);
- masm.branchTestObjShape(Assembler::NotEqual, tempReg, oldShape, failures);
}
Shape* newShape = obj->maybeShape();
- if (!newShape)
- newShape = obj->as<UnboxedPlainObject>().maybeExpando()->lastProperty();
// Guard that the incoming value is in the type set for the property
// if a type barrier is required.
- if (checkTypeset)
+ if (newShape && checkTypeset)
CheckTypeSetForWrite(masm, obj, newShape->propid(), tempReg, value, failures);
// Guard shapes along prototype chain.
@@ -3064,9 +2858,7 @@ GenerateAddSlot(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher& att
}
// Call a stub to (re)allocate dynamic slots, if necessary.
- uint32_t newNumDynamicSlots = obj->is<UnboxedPlainObject>()
- ? obj->as<UnboxedPlainObject>().maybeExpando()->numDynamicSlots()
- : obj->as<NativeObject>().numDynamicSlots();
+ uint32_t newNumDynamicSlots = obj->as<NativeObject>().numDynamicSlots();
if (NativeObject::dynamicSlotsCount(oldShape) != newNumDynamicSlots) {
AllocatableRegisterSet regs(RegisterSet::Volatile());
LiveRegisterSet save(regs.asLiveSet());
@@ -3077,12 +2869,6 @@ GenerateAddSlot(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher& att
Register temp1 = regs.takeAnyGeneral();
Register temp2 = regs.takeAnyGeneral();
- if (obj->is<UnboxedPlainObject>()) {
- // Pass the expando object to the stub.
- masm.Push(object);
- masm.loadPtr(Address(object, UnboxedPlainObject::offsetOfExpando()), object);
- }
-
masm.setupUnalignedABICall(temp1);
masm.loadJSContext(temp1);
masm.passABIArg(temp1);
@@ -3099,27 +2885,16 @@ GenerateAddSlot(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher& att
masm.jump(&allocDone);
masm.bind(&allocFailed);
- if (obj->is<UnboxedPlainObject>())
- masm.Pop(object);
masm.PopRegsInMask(save);
masm.jump(failures);
masm.bind(&allocDone);
masm.setFramePushed(framePushedAfterCall);
- if (obj->is<UnboxedPlainObject>())
- masm.Pop(object);
masm.PopRegsInMask(save);
}
bool popObject = false;
- if (obj->is<UnboxedPlainObject>()) {
- masm.push(object);
- popObject = true;
- obj = obj->as<UnboxedPlainObject>().maybeExpando();
- masm.loadPtr(Address(object, UnboxedPlainObject::offsetOfExpando()), object);
- }
-
// Write the object or expando object's new shape.
Address shapeAddr(object, ShapedObject::offsetOfShape());
if (cx->zone()->needsIncrementalBarrier())
@@ -3127,8 +2902,6 @@ GenerateAddSlot(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher& att
masm.storePtr(ImmGCPtr(newShape), shapeAddr);
if (oldGroup != obj->group()) {
- MOZ_ASSERT(!obj->is<UnboxedPlainObject>());
-
// Changing object's group from a partially to fully initialized group,
// per the acquired properties analysis. Only change the group if the
// old group still has a newScript.
@@ -3371,141 +3144,6 @@ CanAttachNativeSetProp(JSContext* cx, HandleObject obj, HandleId id, const Const
return SetPropertyIC::CanAttachNone;
}
-static void
-GenerateSetUnboxed(JSContext* cx, MacroAssembler& masm, IonCache::StubAttacher& attacher,
- JSObject* obj, jsid id, uint32_t unboxedOffset, JSValueType unboxedType,
- Register object, Register tempReg, const ConstantOrRegister& value,
- bool checkTypeset, Label* failures)
-{
- // Guard on the type of the object.
- masm.branchPtr(Assembler::NotEqual,
- Address(object, JSObject::offsetOfGroup()),
- ImmGCPtr(obj->group()), failures);
-
- if (checkTypeset)
- CheckTypeSetForWrite(masm, obj, id, tempReg, value, failures);
-
- Address address(object, UnboxedPlainObject::offsetOfData() + unboxedOffset);
-
- if (cx->zone()->needsIncrementalBarrier()) {
- if (unboxedType == JSVAL_TYPE_OBJECT)
- masm.callPreBarrier(address, MIRType::Object);
- else if (unboxedType == JSVAL_TYPE_STRING)
- masm.callPreBarrier(address, MIRType::String);
- else
- MOZ_ASSERT(!UnboxedTypeNeedsPreBarrier(unboxedType));
- }
-
- masm.storeUnboxedProperty(address, unboxedType, value, failures);
-
- attacher.jumpRejoin(masm);
-
- masm.bind(failures);
- attacher.jumpNextStub(masm);
-}
-
-static bool
-CanAttachSetUnboxed(JSContext* cx, HandleObject obj, HandleId id, const ConstantOrRegister& val,
- bool needsTypeBarrier, bool* checkTypeset,
- uint32_t* unboxedOffset, JSValueType* unboxedType)
-{
- if (!obj->is<UnboxedPlainObject>())
- return false;
-
- const UnboxedLayout::Property* property = obj->as<UnboxedPlainObject>().layout().lookup(id);
- if (property) {
- *checkTypeset = false;
- if (needsTypeBarrier && !CanInlineSetPropTypeCheck(obj, id, val, checkTypeset))
- return false;
- *unboxedOffset = property->offset;
- *unboxedType = property->type;
- return true;
- }
-
- return false;
-}
-
-static bool
-CanAttachSetUnboxedExpando(JSContext* cx, HandleObject obj, HandleId id,
- const ConstantOrRegister& val,
- bool needsTypeBarrier, bool* checkTypeset, Shape** pshape)
-{
- if (!obj->is<UnboxedPlainObject>())
- return false;
-
- Rooted<UnboxedExpandoObject*> expando(cx, obj->as<UnboxedPlainObject>().maybeExpando());
- if (!expando)
- return false;
-
- Shape* shape = expando->lookupPure(id);
- if (!shape || !shape->hasDefaultSetter() || !shape->hasSlot() || !shape->writable())
- return false;
-
- *checkTypeset = false;
- if (needsTypeBarrier && !CanInlineSetPropTypeCheck(obj, id, val, checkTypeset))
- return false;
-
- *pshape = shape;
- return true;
-}
-
-static bool
-CanAttachAddUnboxedExpando(JSContext* cx, HandleObject obj, HandleShape oldShape,
- HandleId id, const ConstantOrRegister& val,
- bool needsTypeBarrier, bool* checkTypeset)
-{
- if (!obj->is<UnboxedPlainObject>())
- return false;
-
- Rooted<UnboxedExpandoObject*> expando(cx, obj->as<UnboxedPlainObject>().maybeExpando());
- if (!expando || expando->inDictionaryMode())
- return false;
-
- Shape* newShape = expando->lastProperty();
- if (newShape->isEmptyShape() || newShape->propid() != id || newShape->previous() != oldShape)
- return false;
-
- MOZ_ASSERT(newShape->hasDefaultSetter() && newShape->hasSlot() && newShape->writable());
-
- if (PrototypeChainShadowsPropertyAdd(cx, obj, id))
- return false;
-
- *checkTypeset = false;
- if (needsTypeBarrier && !CanInlineSetPropTypeCheck(obj, id, val, checkTypeset))
- return false;
-
- return true;
-}
-
-bool
-SetPropertyIC::tryAttachUnboxed(JSContext* cx, HandleScript outerScript, IonScript* ion,
- HandleObject obj, HandleId id, bool* emitted)
-{
- MOZ_ASSERT(!*emitted);
-
- bool checkTypeset = false;
- uint32_t unboxedOffset;
- JSValueType unboxedType;
- if (!CanAttachSetUnboxed(cx, obj, id, value(), needsTypeBarrier(), &checkTypeset,
- &unboxedOffset, &unboxedType))
- {
- return true;
- }
-
- *emitted = true;
-
- MacroAssembler masm(cx, ion, outerScript, profilerLeavePc_);
- StubAttacher attacher(*this);
-
- Label failures;
- emitIdGuard(masm, id, &failures);
-
- GenerateSetUnboxed(cx, masm, attacher, obj, id, unboxedOffset, unboxedType,
- object(), temp(), value(), checkTypeset, &failures);
- return linkAndAttachStub(cx, masm, attacher, ion, "set_unboxed",
- JS::TrackedOutcome::ICSetPropStub_SetUnboxed);
-}
-
bool
SetPropertyIC::tryAttachProxy(JSContext* cx, HandleScript outerScript, IonScript* ion,
HandleObject obj, HandleId id, bool* emitted)
@@ -3587,26 +3225,6 @@ SetPropertyIC::tryAttachNative(JSContext* cx, HandleScript outerScript, IonScrip
}
bool
-SetPropertyIC::tryAttachUnboxedExpando(JSContext* cx, HandleScript outerScript, IonScript* ion,
- HandleObject obj, HandleId id, bool* emitted)
-{
- MOZ_ASSERT(!*emitted);
-
- RootedShape shape(cx);
- bool checkTypeset = false;
- if (!CanAttachSetUnboxedExpando(cx, obj, id, value(), needsTypeBarrier(),
- &checkTypeset, shape.address()))
- {
- return true;
- }
-
- if (!attachSetSlot(cx, outerScript, ion, obj, shape, checkTypeset))
- return false;
- *emitted = true;
- return true;
-}
-
-bool
SetPropertyIC::tryAttachStub(JSContext* cx, HandleScript outerScript, IonScript* ion,
HandleObject obj, HandleValue idval, HandleValue value,
MutableHandleId id, bool* emitted, bool* tryNativeAddSlot)
@@ -3631,12 +3249,6 @@ SetPropertyIC::tryAttachStub(JSContext* cx, HandleScript outerScript, IonScript*
if (!*emitted && !tryAttachNative(cx, outerScript, ion, obj, id, emitted, tryNativeAddSlot))
return false;
-
- if (!*emitted && !tryAttachUnboxed(cx, outerScript, ion, obj, id, emitted))
- return false;
-
- if (!*emitted && !tryAttachUnboxedExpando(cx, outerScript, ion, obj, id, emitted))
- return false;
}
if (idval.isInt32()) {
@@ -3688,16 +3300,6 @@ SetPropertyIC::tryAttachAddSlot(JSContext* cx, HandleScript outerScript, IonScri
return true;
}
- checkTypeset = false;
- if (CanAttachAddUnboxedExpando(cx, obj, oldShape, id, value(), needsTypeBarrier(),
- &checkTypeset))
- {
- if (!attachAddSlot(cx, outerScript, ion, obj, id, oldShape, oldGroup, checkTypeset))
- return false;
- *emitted = true;
- return true;
- }
-
return true;
}
@@ -3714,16 +3316,11 @@ SetPropertyIC::update(JSContext* cx, HandleScript outerScript, size_t cacheIndex
RootedObjectGroup oldGroup(cx);
RootedShape oldShape(cx);
if (cache.canAttachStub()) {
- oldGroup = obj->getGroup(cx);
+ oldGroup = JSObject::getGroup(cx, obj);
if (!oldGroup)
return false;
oldShape = obj->maybeShape();
- if (obj->is<UnboxedPlainObject>()) {
- MOZ_ASSERT(!oldShape);
- if (UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando())
- oldShape = expando->lastProperty();
- }
}
RootedId id(cx);
@@ -4026,7 +3623,7 @@ GetPropertyIC::tryAttachDenseElementHole(JSContext* cx, HandleScript outerScript
GetPropertyIC::canAttachTypedOrUnboxedArrayElement(JSObject* obj, const Value& idval,
TypedOrValueRegister output)
{
- if (!obj->is<TypedArrayObject>() && !obj->is<UnboxedArrayObject>())
+ if (!obj->is<TypedArrayObject>())
return false;
MOZ_ASSERT(idval.isInt32() || idval.isString());
@@ -4057,13 +3654,6 @@ GetPropertyIC::canAttachTypedOrUnboxedArrayElement(JSObject* obj, const Value& i
return output.hasValue() || !output.typedReg().isFloat();
}
- if (index >= obj->as<UnboxedArrayObject>().initializedLength())
- return false;
-
- JSValueType elementType = obj->as<UnboxedArrayObject>().elementType();
- if (elementType == JSVAL_TYPE_DOUBLE)
- return output.hasValue();
-
return output.hasValue() || !output.typedReg().isFloat();
}
@@ -4140,46 +3730,27 @@ GenerateGetTypedOrUnboxedArrayElement(JSContext* cx, MacroAssembler& masm,
Label popObjectAndFail;
- if (array->is<TypedArrayObject>()) {
- // Guard on the initialized length.
- Address length(object, TypedArrayObject::lengthOffset());
- masm.branch32(Assembler::BelowOrEqual, length, indexReg, &failures);
+ // Guard on the initialized length.
+ Address length(object, TypedArrayObject::lengthOffset());
+ masm.branch32(Assembler::BelowOrEqual, length, indexReg, &failures);
- // Save the object register on the stack in case of failure.
- Register elementReg = object;
- masm.push(object);
+ // Save the object register on the stack in case of failure.
+ Register elementReg = object;
+ masm.push(object);
- // Load elements vector.
- masm.loadPtr(Address(object, TypedArrayObject::dataOffset()), elementReg);
+ // Load elements vector.
+ masm.loadPtr(Address(object, TypedArrayObject::dataOffset()), elementReg);
- // Load the value. We use an invalid register because the destination
- // register is necessary a non double register.
- Scalar::Type arrayType = array->as<TypedArrayObject>().type();
- int width = Scalar::byteSize(arrayType);
- BaseIndex source(elementReg, indexReg, ScaleFromElemWidth(width));
- if (output.hasValue()) {
- masm.loadFromTypedArray(arrayType, source, output.valueReg(), allowDoubleResult,
- elementReg, &popObjectAndFail);
- } else {
- masm.loadFromTypedArray(arrayType, source, output.typedReg(), elementReg, &popObjectAndFail);
- }
+ // Load the value. We use an invalid register because the destination
+ // register is necessary a non double register.
+ Scalar::Type arrayType = array->as<TypedArrayObject>().type();
+ int width = Scalar::byteSize(arrayType);
+ BaseIndex source(elementReg, indexReg, ScaleFromElemWidth(width));
+ if (output.hasValue()) {
+ masm.loadFromTypedArray(arrayType, source, output.valueReg(), allowDoubleResult,
+ elementReg, &popObjectAndFail);
} else {
- // Save the object register on the stack in case of failure.
- masm.push(object);
-
- // Guard on the initialized length.
- masm.load32(Address(object, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()), object);
- masm.and32(Imm32(UnboxedArrayObject::InitializedLengthMask), object);
- masm.branch32(Assembler::BelowOrEqual, object, indexReg, &popObjectAndFail);
-
- // Load elements vector.
- Register elementReg = object;
- masm.loadPtr(Address(masm.getStackPointer(), 0), object);
- masm.loadPtr(Address(object, UnboxedArrayObject::offsetOfElements()), elementReg);
-
- JSValueType elementType = array->as<UnboxedArrayObject>().elementType();
- BaseIndex source(elementReg, indexReg, ScaleFromElemWidth(UnboxedTypeSize(elementType)));
- masm.loadUnboxedProperty(source, elementType, output);
+ masm.loadFromTypedArray(arrayType, source, output.typedReg(), elementReg, &popObjectAndFail);
}
masm.pop(object);
diff --git a/js/src/jit/IonCaches.h b/js/src/jit/IonCaches.h
index 173e06c6b..b00646538 100644
--- a/js/src/jit/IonCaches.h
+++ b/js/src/jit/IonCaches.h
@@ -529,18 +529,6 @@ class GetPropertyIC : public IonCache
HandleObject obj, HandleId id, void* returnAddr,
bool* emitted);
- MOZ_MUST_USE bool tryAttachUnboxed(JSContext* cx, HandleScript outerScript, IonScript* ion,
- HandleObject obj, HandleId id, void* returnAddr,
- bool* emitted);
-
- MOZ_MUST_USE bool tryAttachUnboxedExpando(JSContext* cx, HandleScript outerScript,
- IonScript* ion, HandleObject obj, HandleId id,
- void* returnAddr, bool* emitted);
-
- MOZ_MUST_USE bool tryAttachUnboxedArrayLength(JSContext* cx, HandleScript outerScript,
- IonScript* ion, HandleObject obj, HandleId id,
- void* returnAddr, bool* emitted);
-
MOZ_MUST_USE bool tryAttachTypedArrayLength(JSContext* cx, HandleScript outerScript,
IonScript* ion, HandleObject obj, HandleId id,
bool* emitted);
diff --git a/js/src/jit/JitOptions.cpp b/js/src/jit/JitOptions.cpp
index b9a7c7b27..3f9d9db88 100644
--- a/js/src/jit/JitOptions.cpp
+++ b/js/src/jit/JitOptions.cpp
@@ -221,9 +221,6 @@ DefaultJitOptions::DefaultJitOptions()
Warn(forcedRegisterAllocatorEnv, env);
}
- // Toggles whether unboxed plain objects can be created by the VM.
- SET_DEFAULT(disableUnboxedObjects, true);
-
// Test whether Atomics are allowed in asm.js code.
SET_DEFAULT(asmJSAtomicsEnable, false);
diff --git a/js/src/jit/JitOptions.h b/js/src/jit/JitOptions.h
index 076980b4e..719ee14d9 100644
--- a/js/src/jit/JitOptions.h
+++ b/js/src/jit/JitOptions.h
@@ -91,9 +91,6 @@ struct DefaultJitOptions
mozilla::Maybe<uint32_t> forcedDefaultIonSmallFunctionWarmUpThreshold;
mozilla::Maybe<IonRegisterAllocator> forcedRegisterAllocator;
- // The options below affect the rest of the VM, and not just the JIT.
- bool disableUnboxedObjects;
-
DefaultJitOptions();
bool isSmallFunction(JSScript* script) const;
void setEagerCompilation();
diff --git a/js/src/jit/Lowering.cpp b/js/src/jit/Lowering.cpp
index aafa57c09..22f1d5f70 100644
--- a/js/src/jit/Lowering.cpp
+++ b/js/src/jit/Lowering.cpp
@@ -657,16 +657,6 @@ LIRGenerator::visitAssertRecoveredOnBailout(MAssertRecoveredOnBailout* assertion
}
void
-LIRGenerator::visitArraySplice(MArraySplice* ins)
-{
- LArraySplice* lir = new(alloc()) LArraySplice(useRegisterAtStart(ins->object()),
- useRegisterAtStart(ins->start()),
- useRegisterAtStart(ins->deleteCount()));
- add(lir, ins);
- assignSafepoint(lir, ins);
-}
-
-void
LIRGenerator::visitGetDynamicName(MGetDynamicName* ins)
{
MDefinition* envChain = ins->getEnvironmentChain();
@@ -2889,32 +2879,6 @@ LIRGenerator::visitSetInitializedLength(MSetInitializedLength* ins)
}
void
-LIRGenerator::visitUnboxedArrayLength(MUnboxedArrayLength* ins)
-{
- define(new(alloc()) LUnboxedArrayLength(useRegisterAtStart(ins->object())), ins);
-}
-
-void
-LIRGenerator::visitUnboxedArrayInitializedLength(MUnboxedArrayInitializedLength* ins)
-{
- define(new(alloc()) LUnboxedArrayInitializedLength(useRegisterAtStart(ins->object())), ins);
-}
-
-void
-LIRGenerator::visitIncrementUnboxedArrayInitializedLength(MIncrementUnboxedArrayInitializedLength* ins)
-{
- add(new(alloc()) LIncrementUnboxedArrayInitializedLength(useRegister(ins->object())), ins);
-}
-
-void
-LIRGenerator::visitSetUnboxedArrayInitializedLength(MSetUnboxedArrayInitializedLength* ins)
-{
- add(new(alloc()) LSetUnboxedArrayInitializedLength(useRegister(ins->object()),
- useRegisterOrConstant(ins->length()),
- temp()), ins);
-}
-
-void
LIRGenerator::visitNot(MNot* ins)
{
MDefinition* op = ins->input();
@@ -3163,22 +3127,16 @@ LIRGenerator::visitStoreElementHole(MStoreElementHole* ins)
const LUse elements = useRegister(ins->elements());
const LAllocation index = useRegisterOrConstant(ins->index());
- // Use a temp register when adding new elements to unboxed arrays.
- LDefinition tempDef = LDefinition::BogusTemp();
- if (ins->unboxedType() != JSVAL_TYPE_MAGIC)
- tempDef = temp();
-
LInstruction* lir;
switch (ins->value()->type()) {
case MIRType::Value:
- lir = new(alloc()) LStoreElementHoleV(object, elements, index, useBox(ins->value()),
- tempDef);
+ lir = new(alloc()) LStoreElementHoleV(object, elements, index, useBox(ins->value()));
break;
default:
{
const LAllocation value = useRegisterOrNonDoubleConstant(ins->value());
- lir = new(alloc()) LStoreElementHoleT(object, elements, index, value, tempDef);
+ lir = new(alloc()) LStoreElementHoleT(object, elements, index, value);
break;
}
}
@@ -3197,20 +3155,14 @@ LIRGenerator::visitFallibleStoreElement(MFallibleStoreElement* ins)
const LUse elements = useRegister(ins->elements());
const LAllocation index = useRegisterOrConstant(ins->index());
- // Use a temp register when adding new elements to unboxed arrays.
- LDefinition tempDef = LDefinition::BogusTemp();
- if (ins->unboxedType() != JSVAL_TYPE_MAGIC)
- tempDef = temp();
-
LInstruction* lir;
switch (ins->value()->type()) {
case MIRType::Value:
- lir = new(alloc()) LFallibleStoreElementV(object, elements, index, useBox(ins->value()),
- tempDef);
+ lir = new(alloc()) LFallibleStoreElementV(object, elements, index, useBox(ins->value()));
break;
default:
const LAllocation value = useRegisterOrNonDoubleConstant(ins->value());
- lir = new(alloc()) LFallibleStoreElementT(object, elements, index, value, tempDef);
+ lir = new(alloc()) LFallibleStoreElementT(object, elements, index, value);
break;
}
diff --git a/js/src/jit/Lowering.h b/js/src/jit/Lowering.h
index e36620bce..9342ef471 100644
--- a/js/src/jit/Lowering.h
+++ b/js/src/jit/Lowering.h
@@ -107,7 +107,6 @@ class LIRGenerator : public LIRGeneratorSpecific
void visitCall(MCall* call);
void visitApplyArgs(MApplyArgs* apply);
void visitApplyArray(MApplyArray* apply);
- void visitArraySplice(MArraySplice* splice);
void visitBail(MBail* bail);
void visitUnreachable(MUnreachable* unreachable);
void visitEncodeSnapshot(MEncodeSnapshot* ins);
@@ -216,10 +215,6 @@ class LIRGenerator : public LIRGeneratorSpecific
void visitTypedObjectDescr(MTypedObjectDescr* ins);
void visitInitializedLength(MInitializedLength* ins);
void visitSetInitializedLength(MSetInitializedLength* ins);
- void visitUnboxedArrayLength(MUnboxedArrayLength* ins);
- void visitUnboxedArrayInitializedLength(MUnboxedArrayInitializedLength* ins);
- void visitIncrementUnboxedArrayInitializedLength(MIncrementUnboxedArrayInitializedLength* ins);
- void visitSetUnboxedArrayInitializedLength(MSetUnboxedArrayInitializedLength* ins);
void visitNot(MNot* ins);
void visitBoundsCheck(MBoundsCheck* ins);
void visitBoundsCheckLower(MBoundsCheckLower* ins);
diff --git a/js/src/jit/MCallOptimize.cpp b/js/src/jit/MCallOptimize.cpp
index 41ccd0ca7..5eee30e49 100644
--- a/js/src/jit/MCallOptimize.cpp
+++ b/js/src/jit/MCallOptimize.cpp
@@ -30,7 +30,6 @@
#include "jit/shared/Lowering-shared-inl.h"
#include "vm/NativeObject-inl.h"
#include "vm/StringObject-inl.h"
-#include "vm/UnboxedObject-inl.h"
using mozilla::ArrayLength;
using mozilla::AssertedCast;
@@ -86,8 +85,6 @@ IonBuilder::inlineNativeCall(CallInfo& callInfo, JSFunction* target)
return inlineArrayPush(callInfo);
case InlinableNative::ArraySlice:
return inlineArraySlice(callInfo);
- case InlinableNative::ArraySplice:
- return inlineArraySplice(callInfo);
// Atomic natives.
case InlinableNative::AtomicsCompareExchange:
@@ -475,11 +472,6 @@ IonBuilder::inlineArray(CallInfo& callInfo)
return InliningStatus_NotInlined;
}
- if (templateObject->is<UnboxedArrayObject>()) {
- if (templateObject->group()->unboxedLayout().nativeGroup())
- return InliningStatus_NotInlined;
- }
-
// Multiple arguments imply array initialization, not just construction.
if (callInfo.argc() >= 2) {
initLength = callInfo.argc();
@@ -527,7 +519,7 @@ IonBuilder::inlineArray(CallInfo& callInfo)
// Make sure initLength matches the template object's length. This is
// not guaranteed to be the case, for instance if we're inlining the
// MConstant may come from an outer script.
- if (initLength != GetAnyBoxedOrUnboxedArrayLength(templateObject))
+ if (initLength != templateObject->as<ArrayObject>().length())
return InliningStatus_NotInlined;
// Don't inline large allocations.
@@ -542,16 +534,15 @@ IonBuilder::inlineArray(CallInfo& callInfo)
MDefinition* array = current->peek(-1);
if (callInfo.argc() >= 2) {
- JSValueType unboxedType = GetBoxedOrUnboxedType(templateObject);
for (uint32_t i = 0; i < initLength; i++) {
if (!alloc().ensureBallast())
return InliningStatus_Error;
MDefinition* value = callInfo.getArg(i);
- if (!initializeArrayElement(array, i, value, unboxedType, /* addResumePoint = */ false))
+ if (!initializeArrayElement(array, i, value, /* addResumePoint = */ false))
return InliningStatus_Error;
}
- MInstruction* setLength = setInitializedLength(array, unboxedType, initLength);
+ MInstruction* setLength = setInitializedLength(array, initLength);
if (!resumeAfter(setLength))
return InliningStatus_Error;
}
@@ -584,7 +575,7 @@ IonBuilder::inlineArrayIsArray(CallInfo& callInfo)
if (!clasp || clasp->isProxy())
return InliningStatus_NotInlined;
- isArray = (clasp == &ArrayObject::class_ || clasp == &UnboxedArrayObject::class_);
+ isArray = (clasp == &ArrayObject::class_);
}
pushConstant(BooleanValue(isArray));
@@ -620,29 +611,22 @@ IonBuilder::inlineArrayPopShift(CallInfo& callInfo, MArrayPopShift::Mode mode)
if (!thisTypes)
return InliningStatus_NotInlined;
const Class* clasp = thisTypes->getKnownClass(constraints());
- if (clasp != &ArrayObject::class_ && clasp != &UnboxedArrayObject::class_)
+ if (clasp != &ArrayObject::class_)
return InliningStatus_NotInlined;
if (thisTypes->hasObjectFlags(constraints(), unhandledFlags)) {
trackOptimizationOutcome(TrackedOutcome::ArrayBadFlags);
return InliningStatus_NotInlined;
}
- if (ArrayPrototypeHasIndexedProperty(this, script())) {
+ // Watch out for extra indexed properties on the object or its prototype.
+ if (ElementAccessHasExtraIndexedProperty(this, obj)) {
trackOptimizationOutcome(TrackedOutcome::ProtoIndexedProps);
return InliningStatus_NotInlined;
}
- JSValueType unboxedType = JSVAL_TYPE_MAGIC;
- if (clasp == &UnboxedArrayObject::class_) {
- unboxedType = UnboxedArrayElementType(constraints(), obj, nullptr);
- if (unboxedType == JSVAL_TYPE_MAGIC)
- return InliningStatus_NotInlined;
- }
-
callInfo.setImplicitlyUsedUnchecked();
- if (clasp == &ArrayObject::class_)
- obj = addMaybeCopyElementsForWrite(obj, /* checkNative = */ false);
+ obj = addMaybeCopyElementsForWrite(obj, /* checkNative = */ false);
TemporaryTypeSet* returnTypes = getInlineReturnTypeSet();
bool needsHoleCheck = thisTypes->hasObjectFlags(constraints(), OBJECT_FLAG_NON_PACKED);
@@ -653,8 +637,7 @@ IonBuilder::inlineArrayPopShift(CallInfo& callInfo, MArrayPopShift::Mode mode)
if (barrier != BarrierKind::NoBarrier)
returnType = MIRType::Value;
- MArrayPopShift* ins = MArrayPopShift::New(alloc(), obj, mode,
- unboxedType, needsHoleCheck, maybeUndefined);
+ MArrayPopShift* ins = MArrayPopShift::New(alloc(), obj, mode, needsHoleCheck, maybeUndefined);
current->add(ins);
current->push(ins);
ins->setResultType(returnType);
@@ -669,46 +652,6 @@ IonBuilder::inlineArrayPopShift(CallInfo& callInfo, MArrayPopShift::Mode mode)
}
IonBuilder::InliningStatus
-IonBuilder::inlineArraySplice(CallInfo& callInfo)
-{
- if (callInfo.argc() != 2 || callInfo.constructing()) {
- trackOptimizationOutcome(TrackedOutcome::CantInlineNativeBadForm);
- return InliningStatus_NotInlined;
- }
-
- // Ensure |this|, argument and result are objects.
- if (getInlineReturnType() != MIRType::Object)
- return InliningStatus_NotInlined;
- if (callInfo.thisArg()->type() != MIRType::Object)
- return InliningStatus_NotInlined;
- if (callInfo.getArg(0)->type() != MIRType::Int32)
- return InliningStatus_NotInlined;
- if (callInfo.getArg(1)->type() != MIRType::Int32)
- return InliningStatus_NotInlined;
-
- callInfo.setImplicitlyUsedUnchecked();
-
- // Specialize arr.splice(start, deleteCount) with unused return value and
- // avoid creating the result array in this case.
- if (!BytecodeIsPopped(pc)) {
- trackOptimizationOutcome(TrackedOutcome::CantInlineGeneric);
- return InliningStatus_NotInlined;
- }
-
- MArraySplice* ins = MArraySplice::New(alloc(),
- callInfo.thisArg(),
- callInfo.getArg(0),
- callInfo.getArg(1));
-
- current->add(ins);
- pushConstant(UndefinedValue());
-
- if (!resumeAfter(ins))
- return InliningStatus_Error;
- return InliningStatus_Inlined;
-}
-
-IonBuilder::InliningStatus
IonBuilder::inlineArrayJoin(CallInfo& callInfo)
{
if (callInfo.argc() != 1 || callInfo.constructing()) {
@@ -761,16 +704,10 @@ IonBuilder::inlineArrayPush(CallInfo& callInfo)
if (!thisTypes)
return InliningStatus_NotInlined;
const Class* clasp = thisTypes->getKnownClass(constraints());
- if (clasp != &ArrayObject::class_ && clasp != &UnboxedArrayObject::class_)
+ if (clasp != &ArrayObject::class_)
return InliningStatus_NotInlined;
- if (thisTypes->hasObjectFlags(constraints(), OBJECT_FLAG_SPARSE_INDEXES |
- OBJECT_FLAG_LENGTH_OVERFLOW))
- {
- trackOptimizationOutcome(TrackedOutcome::ArrayBadFlags);
- return InliningStatus_NotInlined;
- }
- if (ArrayPrototypeHasIndexedProperty(this, script())) {
+ if (ElementAccessHasExtraIndexedProperty(this, obj)) {
trackOptimizationOutcome(TrackedOutcome::ProtoIndexedProps);
return InliningStatus_NotInlined;
}
@@ -782,13 +719,6 @@ IonBuilder::inlineArrayPush(CallInfo& callInfo)
return InliningStatus_NotInlined;
}
- JSValueType unboxedType = JSVAL_TYPE_MAGIC;
- if (clasp == &UnboxedArrayObject::class_) {
- unboxedType = UnboxedArrayElementType(constraints(), obj, nullptr);
- if (unboxedType == JSVAL_TYPE_MAGIC)
- return InliningStatus_NotInlined;
- }
-
callInfo.setImplicitlyUsedUnchecked();
if (conversion == TemporaryTypeSet::AlwaysConvertToDoubles ||
@@ -799,13 +729,12 @@ IonBuilder::inlineArrayPush(CallInfo& callInfo)
value = valueDouble;
}
- if (unboxedType == JSVAL_TYPE_MAGIC)
- obj = addMaybeCopyElementsForWrite(obj, /* checkNative = */ false);
+ obj = addMaybeCopyElementsForWrite(obj, /* checkNative = */ false);
if (NeedsPostBarrier(value))
current->add(MPostWriteBarrier::New(alloc(), obj, value));
- MArrayPush* ins = MArrayPush::New(alloc(), obj, value, unboxedType);
+ MArrayPush* ins = MArrayPush::New(alloc(), obj, value);
current->add(ins);
current->push(ins);
@@ -846,24 +775,11 @@ IonBuilder::inlineArraySlice(CallInfo& callInfo)
return InliningStatus_NotInlined;
const Class* clasp = thisTypes->getKnownClass(constraints());
- if (clasp != &ArrayObject::class_ && clasp != &UnboxedArrayObject::class_)
- return InliningStatus_NotInlined;
- if (thisTypes->hasObjectFlags(constraints(), OBJECT_FLAG_SPARSE_INDEXES |
- OBJECT_FLAG_LENGTH_OVERFLOW))
- {
- trackOptimizationOutcome(TrackedOutcome::ArrayBadFlags);
+ if (clasp != &ArrayObject::class_)
return InliningStatus_NotInlined;
- }
-
- JSValueType unboxedType = JSVAL_TYPE_MAGIC;
- if (clasp == &UnboxedArrayObject::class_) {
- unboxedType = UnboxedArrayElementType(constraints(), obj, nullptr);
- if (unboxedType == JSVAL_TYPE_MAGIC)
- return InliningStatus_NotInlined;
- }
- // Watch out for indexed properties on the prototype.
- if (ArrayPrototypeHasIndexedProperty(this, script())) {
+ // Watch out for indexed properties on the object or its prototype.
+ if (ElementAccessHasExtraIndexedProperty(this, obj)) {
trackOptimizationOutcome(TrackedOutcome::ProtoIndexedProps);
return InliningStatus_NotInlined;
}
@@ -882,15 +798,8 @@ IonBuilder::inlineArraySlice(CallInfo& callInfo)
if (!templateObj)
return InliningStatus_NotInlined;
- if (unboxedType == JSVAL_TYPE_MAGIC) {
- if (!templateObj->is<ArrayObject>())
- return InliningStatus_NotInlined;
- } else {
- if (!templateObj->is<UnboxedArrayObject>())
- return InliningStatus_NotInlined;
- if (templateObj->as<UnboxedArrayObject>().elementType() != unboxedType)
- return InliningStatus_NotInlined;
- }
+ if (!templateObj->is<ArrayObject>())
+ return InliningStatus_NotInlined;
callInfo.setImplicitlyUsedUnchecked();
@@ -909,16 +818,12 @@ IonBuilder::inlineArraySlice(CallInfo& callInfo)
end = MArrayLength::New(alloc(), elements);
current->add(end->toInstruction());
- } else {
- end = MUnboxedArrayLength::New(alloc(), obj);
- current->add(end->toInstruction());
}
MArraySlice* ins = MArraySlice::New(alloc(), constraints(),
obj, begin, end,
templateObj,
- templateObj->group()->initialHeap(constraints()),
- unboxedType);
+ templateObj->group()->initialHeap(constraints()));
current->add(ins);
current->push(ins);
@@ -1437,7 +1342,7 @@ IonBuilder::inlineConstantStringSplitString(CallInfo& callInfo)
// Check if exist a template object in stub.
JSString* stringStr = nullptr;
JSString* stringSep = nullptr;
- JSObject* templateObject = nullptr;
+ ArrayObject* templateObject = nullptr;
if (!inspector->isOptimizableCallStringSplit(pc, &stringStr, &stringSep, &templateObject))
return InliningStatus_NotInlined;
@@ -1463,13 +1368,13 @@ IonBuilder::inlineConstantStringSplitString(CallInfo& callInfo)
if (!key.maybeTypes()->hasType(TypeSet::StringType()))
return InliningStatus_NotInlined;
- uint32_t initLength = GetAnyBoxedOrUnboxedArrayLength(templateObject);
- if (GetAnyBoxedOrUnboxedInitializedLength(templateObject) != initLength)
+ uint32_t initLength = templateObject->length();
+ if (templateObject->getDenseInitializedLength() != initLength)
return InliningStatus_NotInlined;
Vector<MConstant*, 0, SystemAllocPolicy> arrayValues;
for (uint32_t i = 0; i < initLength; i++) {
- Value str = GetAnyBoxedOrUnboxedDenseElement(templateObject, i);
+ Value str = templateObject->getDenseElement(i);
MOZ_ASSERT(str.toString()->isAtom());
MConstant* value = MConstant::New(alloc().fallible(), str, constraints());
if (!value)
@@ -1500,8 +1405,6 @@ IonBuilder::inlineConstantStringSplitString(CallInfo& callInfo)
return InliningStatus_Inlined;
}
- JSValueType unboxedType = GetBoxedOrUnboxedType(templateObject);
-
// Store all values, no need to initialize the length after each as
// jsop_initelem_array is doing because we do not expect to bailout
// because the memory is supposed to be allocated by now.
@@ -1512,11 +1415,11 @@ IonBuilder::inlineConstantStringSplitString(CallInfo& callInfo)
MConstant* value = arrayValues[i];
current->add(value);
- if (!initializeArrayElement(array, i, value, unboxedType, /* addResumePoint = */ false))
+ if (!initializeArrayElement(array, i, value, /* addResumePoint = */ false))
return InliningStatus_Error;
}
- MInstruction* setLength = setInitializedLength(array, unboxedType, initLength);
+ MInstruction* setLength = setInitializedLength(array, initLength);
if (!resumeAfter(setLength))
return InliningStatus_Error;
diff --git a/js/src/jit/MIR.cpp b/js/src/jit/MIR.cpp
index 1f33b2174..0cf31adb3 100644
--- a/js/src/jit/MIR.cpp
+++ b/js/src/jit/MIR.cpp
@@ -1970,7 +1970,7 @@ WrappedFunction::WrappedFunction(JSFunction* fun)
MCall*
MCall::New(TempAllocator& alloc, JSFunction* target, size_t maxArgc, size_t numActualArgs,
- bool construct, bool isDOMCall)
+ bool construct, bool ignoresReturnValue, bool isDOMCall)
{
WrappedFunction* wrappedTarget = target ? new(alloc) WrappedFunction(target) : nullptr;
MOZ_ASSERT(maxArgc >= numActualArgs);
@@ -1979,7 +1979,7 @@ MCall::New(TempAllocator& alloc, JSFunction* target, size_t maxArgc, size_t numA
MOZ_ASSERT(!construct);
ins = new(alloc) MCallDOMNative(wrappedTarget, numActualArgs);
} else {
- ins = new(alloc) MCall(wrappedTarget, numActualArgs, construct);
+ ins = new(alloc) MCall(wrappedTarget, numActualArgs, construct, ignoresReturnValue);
}
if (!ins->init(alloc, maxArgc + NumNonArgumentOperands))
return nullptr;
@@ -2630,40 +2630,6 @@ jit::EqualTypes(MIRType type1, TemporaryTypeSet* typeset1,
return typeset1->equals(typeset2);
}
-// Tests whether input/inputTypes can always be stored to an unboxed
-// object/array property with the given unboxed type.
-bool
-jit::CanStoreUnboxedType(TempAllocator& alloc,
- JSValueType unboxedType, MIRType input, TypeSet* inputTypes)
-{
- TemporaryTypeSet types;
-
- switch (unboxedType) {
- case JSVAL_TYPE_BOOLEAN:
- case JSVAL_TYPE_INT32:
- case JSVAL_TYPE_DOUBLE:
- case JSVAL_TYPE_STRING:
- types.addType(TypeSet::PrimitiveType(unboxedType), alloc.lifoAlloc());
- break;
-
- case JSVAL_TYPE_OBJECT:
- types.addType(TypeSet::AnyObjectType(), alloc.lifoAlloc());
- types.addType(TypeSet::NullType(), alloc.lifoAlloc());
- break;
-
- default:
- MOZ_CRASH("Bad unboxed type");
- }
-
- return TypeSetIncludes(&types, input, inputTypes);
-}
-
-static bool
-CanStoreUnboxedType(TempAllocator& alloc, JSValueType unboxedType, MDefinition* value)
-{
- return CanStoreUnboxedType(alloc, unboxedType, value->type(), value->resultTypeSet());
-}
-
bool
MPhi::specializeType(TempAllocator& alloc)
{
@@ -4817,15 +4783,14 @@ MCreateThisWithTemplate::canRecoverOnBailout() const
MObjectState::MObjectState(MObjectState* state)
: numSlots_(state->numSlots_),
- numFixedSlots_(state->numFixedSlots_),
- operandIndex_(state->operandIndex_)
+ numFixedSlots_(state->numFixedSlots_)
{
// This instruction is only used as a summary for bailout paths.
setResultType(MIRType::Object);
setRecoveredOnBailout();
}
-MObjectState::MObjectState(JSObject *templateObject, OperandIndexMap* operandIndex)
+MObjectState::MObjectState(JSObject* templateObject)
{
// This instruction is only used as a summary for bailout paths.
setResultType(MIRType::Object);
@@ -4836,8 +4801,6 @@ MObjectState::MObjectState(JSObject *templateObject, OperandIndexMap* operandInd
NativeObject* nativeObject = &templateObject->as<NativeObject>();
numSlots_ = nativeObject->slotSpan();
numFixedSlots_ = nativeObject->numFixedSlots();
-
- operandIndex_ = operandIndex;
}
JSObject*
@@ -4897,7 +4860,7 @@ MObjectState::New(TempAllocator& alloc, MDefinition* obj)
JSObject* templateObject = templateObjectOf(obj);
MOZ_ASSERT(templateObject, "Unexpected object creation.");
- MObjectState* res = new(alloc) MObjectState(templateObject, nullptr);
+ MObjectState* res = new(alloc) MObjectState(templateObject);
if (!res || !res->init(alloc, obj))
return nullptr;
return res;
@@ -5823,46 +5786,6 @@ jit::ElementAccessIsDenseNative(CompilerConstraintList* constraints,
return clasp && clasp->isNative() && !IsTypedArrayClass(clasp);
}
-JSValueType
-jit::UnboxedArrayElementType(CompilerConstraintList* constraints, MDefinition* obj,
- MDefinition* id)
-{
- if (obj->mightBeType(MIRType::String))
- return JSVAL_TYPE_MAGIC;
-
- if (id && id->type() != MIRType::Int32 && id->type() != MIRType::Double)
- return JSVAL_TYPE_MAGIC;
-
- TemporaryTypeSet* types = obj->resultTypeSet();
- if (!types || types->unknownObject())
- return JSVAL_TYPE_MAGIC;
-
- JSValueType elementType = JSVAL_TYPE_MAGIC;
- for (unsigned i = 0; i < types->getObjectCount(); i++) {
- TypeSet::ObjectKey* key = types->getObject(i);
- if (!key)
- continue;
-
- if (key->unknownProperties() || !key->isGroup())
- return JSVAL_TYPE_MAGIC;
-
- if (key->clasp() != &UnboxedArrayObject::class_)
- return JSVAL_TYPE_MAGIC;
-
- const UnboxedLayout &layout = key->group()->unboxedLayout();
-
- if (layout.nativeGroup())
- return JSVAL_TYPE_MAGIC;
-
- if (elementType == layout.elementType() || elementType == JSVAL_TYPE_MAGIC)
- elementType = layout.elementType();
- else
- return JSVAL_TYPE_MAGIC;
- }
-
- return elementType;
-}
-
bool
jit::ElementAccessIsTypedArray(CompilerConstraintList* constraints,
MDefinition* obj, MDefinition* id,
@@ -6022,11 +5945,6 @@ ObjectSubsumes(TypeSet::ObjectKey* first, TypeSet::ObjectKey* second)
firstElements.maybeTypes()->equals(secondElements.maybeTypes());
}
- if (first->clasp() == &UnboxedArrayObject::class_) {
- return first->group()->unboxedLayout().elementType() ==
- second->group()->unboxedLayout().elementType();
- }
-
return false;
}
@@ -6266,15 +6184,6 @@ PrototypeHasIndexedProperty(IonBuilder* builder, JSObject* obj)
return false;
}
-// Whether Array.prototype, or an object on its proto chain, has an indexed property.
-bool
-jit::ArrayPrototypeHasIndexedProperty(IonBuilder* builder, JSScript* script)
-{
- if (JSObject* proto = script->global().maybeGetArrayPrototype())
- return PrototypeHasIndexedProperty(builder, proto);
- return true;
-}
-
// Whether obj or any of its prototypes have an indexed property.
bool
jit::TypeCanHaveExtraIndexedProperties(IonBuilder* builder, TemporaryTypeSet* types)
diff --git a/js/src/jit/MIR.h b/js/src/jit/MIR.h
index 3e0421789..6c376d528 100644
--- a/js/src/jit/MIR.h
+++ b/js/src/jit/MIR.h
@@ -375,8 +375,7 @@ class AliasSet {
Element = 1 << 1, // A Value member of obj->elements or
// a typed object.
UnboxedElement = 1 << 2, // An unboxed scalar or reference member of
- // a typed array, typed object, or unboxed
- // object.
+ // typed object.
DynamicSlot = 1 << 3, // A Value member of obj->slots.
FixedSlot = 1 << 4, // A Value member of obj->fixedSlots().
DOMProperty = 1 << 5, // A DOM property
@@ -433,9 +432,6 @@ class AliasSet {
MOZ_ASSERT(flags && !(flags & Store_));
return AliasSet(flags | Store_);
}
- static uint32_t BoxedOrUnboxedElements(JSValueType type) {
- return (type == JSVAL_TYPE_MAGIC) ? Element : UnboxedElement;
- }
};
typedef Vector<MDefinition*, 6, JitAllocPolicy> MDefinitionVector;
@@ -3762,14 +3758,9 @@ class MObjectState
{
private:
uint32_t numSlots_;
- uint32_t numFixedSlots_; // valid if isUnboxed() == false.
- OperandIndexMap* operandIndex_; // valid if isUnboxed() == true.
-
- bool isUnboxed() const {
- return operandIndex_ != nullptr;
- }
+ uint32_t numFixedSlots_;
- MObjectState(JSObject *templateObject, OperandIndexMap* operandIndex);
+ MObjectState(JSObject *templateObject);
explicit MObjectState(MObjectState* state);
MOZ_MUST_USE bool init(TempAllocator& alloc, MDefinition* obj);
@@ -3794,7 +3785,6 @@ class MObjectState
MOZ_MUST_USE bool initFromTemplateObject(TempAllocator& alloc, MDefinition* undefinedVal);
size_t numFixedSlots() const {
- MOZ_ASSERT(!isUnboxed());
return numFixedSlots_;
}
size_t numSlots() const {
@@ -3830,18 +3820,6 @@ class MObjectState
setSlot(slot + numFixedSlots(), def);
}
- // Interface reserved for unboxed objects.
- bool hasOffset(uint32_t offset) const {
- MOZ_ASSERT(isUnboxed());
- return offset < operandIndex_->map.length() && operandIndex_->map[offset] != 0;
- }
- MDefinition* getOffset(uint32_t offset) const {
- return getOperand(operandIndex_->map[offset]);
- }
- void setOffset(uint32_t offset, MDefinition* def) {
- replaceOperand(operandIndex_->map[offset], def);
- }
-
MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override;
bool canRecoverOnBailout() const override {
return true;
@@ -4065,14 +4043,18 @@ class MCall
uint32_t numActualArgs_;
// True if the call is for JSOP_NEW.
- bool construct_;
+ bool construct_:1;
+
+ // True if the caller does not use the return value.
+ bool ignoresReturnValue_:1;
- bool needsArgCheck_;
+ bool needsArgCheck_:1;
- MCall(WrappedFunction* target, uint32_t numActualArgs, bool construct)
+ MCall(WrappedFunction* target, uint32_t numActualArgs, bool construct, bool ignoresReturnValue)
: target_(target),
numActualArgs_(numActualArgs),
construct_(construct),
+ ignoresReturnValue_(ignoresReturnValue),
needsArgCheck_(true)
{
setResultType(MIRType::Value);
@@ -4081,7 +4063,7 @@ class MCall
public:
INSTRUCTION_HEADER(Call)
static MCall* New(TempAllocator& alloc, JSFunction* target, size_t maxArgc, size_t numActualArgs,
- bool construct, bool isDOMCall);
+ bool construct, bool ignoresReturnValue, bool isDOMCall);
void initFunction(MDefinition* func) {
initOperand(FunctionOperandIndex, func);
@@ -4126,6 +4108,10 @@ class MCall
return construct_;
}
+ bool ignoresReturnValue() const {
+ return ignoresReturnValue_;
+ }
+
// The number of stack arguments is the max between the number of formal
// arguments and the number of actual arguments. The number of stack
// argument includes the |undefined| padding added in case of underflow.
@@ -4169,7 +4155,7 @@ class MCallDOMNative : public MCall
// virtual things from MCall.
protected:
MCallDOMNative(WrappedFunction* target, uint32_t numActualArgs)
- : MCall(target, numActualArgs, false)
+ : MCall(target, numActualArgs, false, false)
{
MOZ_ASSERT(getJitInfo()->type() != JSJitInfo::InlinableNative);
@@ -4184,7 +4170,8 @@ class MCallDOMNative : public MCall
}
friend MCall* MCall::New(TempAllocator& alloc, JSFunction* target, size_t maxArgc,
- size_t numActualArgs, bool construct, bool isDOMCall);
+ size_t numActualArgs, bool construct, bool ignoresReturnValue,
+ bool isDOMCall);
const JSJitInfo* getJitInfo() const;
public:
@@ -4199,27 +4186,6 @@ class MCallDOMNative : public MCall
virtual void computeMovable() override;
};
-// arr.splice(start, deleteCount) with unused return value.
-class MArraySplice
- : public MTernaryInstruction,
- public Mix3Policy<ObjectPolicy<0>, IntPolicy<1>, IntPolicy<2> >::Data
-{
- private:
-
- MArraySplice(MDefinition* object, MDefinition* start, MDefinition* deleteCount)
- : MTernaryInstruction(object, start, deleteCount)
- { }
-
- public:
- INSTRUCTION_HEADER(ArraySplice)
- TRIVIAL_NEW_WRAPPERS
- NAMED_OPERANDS((0, object), (1, start), (2, deleteCount))
-
- bool possiblyCalls() const override {
- return true;
- }
-};
-
// fun.apply(self, arguments)
class MApplyArgs
: public MAryInstruction<3>,
@@ -8745,102 +8711,6 @@ class MSetInitializedLength
ALLOW_CLONE(MSetInitializedLength)
};
-// Load the length from an unboxed array.
-class MUnboxedArrayLength
- : public MUnaryInstruction,
- public SingleObjectPolicy::Data
-{
- explicit MUnboxedArrayLength(MDefinition* object)
- : MUnaryInstruction(object)
- {
- setResultType(MIRType::Int32);
- setMovable();
- }
-
- public:
- INSTRUCTION_HEADER(UnboxedArrayLength)
- TRIVIAL_NEW_WRAPPERS
- NAMED_OPERANDS((0, object))
-
- bool congruentTo(const MDefinition* ins) const override {
- return congruentIfOperandsEqual(ins);
- }
- AliasSet getAliasSet() const override {
- return AliasSet::Load(AliasSet::ObjectFields);
- }
-
- ALLOW_CLONE(MUnboxedArrayLength)
-};
-
-// Load the initialized length from an unboxed array.
-class MUnboxedArrayInitializedLength
- : public MUnaryInstruction,
- public SingleObjectPolicy::Data
-{
- explicit MUnboxedArrayInitializedLength(MDefinition* object)
- : MUnaryInstruction(object)
- {
- setResultType(MIRType::Int32);
- setMovable();
- }
-
- public:
- INSTRUCTION_HEADER(UnboxedArrayInitializedLength)
- TRIVIAL_NEW_WRAPPERS
- NAMED_OPERANDS((0, object))
-
- bool congruentTo(const MDefinition* ins) const override {
- return congruentIfOperandsEqual(ins);
- }
- AliasSet getAliasSet() const override {
- return AliasSet::Load(AliasSet::ObjectFields);
- }
-
- ALLOW_CLONE(MUnboxedArrayInitializedLength)
-};
-
-// Increment the initialized length of an unboxed array object.
-class MIncrementUnboxedArrayInitializedLength
- : public MUnaryInstruction,
- public SingleObjectPolicy::Data
-{
- explicit MIncrementUnboxedArrayInitializedLength(MDefinition* obj)
- : MUnaryInstruction(obj)
- {}
-
- public:
- INSTRUCTION_HEADER(IncrementUnboxedArrayInitializedLength)
- TRIVIAL_NEW_WRAPPERS
- NAMED_OPERANDS((0, object))
-
- AliasSet getAliasSet() const override {
- return AliasSet::Store(AliasSet::ObjectFields);
- }
-
- ALLOW_CLONE(MIncrementUnboxedArrayInitializedLength)
-};
-
-// Set the initialized length of an unboxed array object.
-class MSetUnboxedArrayInitializedLength
- : public MBinaryInstruction,
- public SingleObjectPolicy::Data
-{
- explicit MSetUnboxedArrayInitializedLength(MDefinition* obj, MDefinition* length)
- : MBinaryInstruction(obj, length)
- {}
-
- public:
- INSTRUCTION_HEADER(SetUnboxedArrayInitializedLength)
- TRIVIAL_NEW_WRAPPERS
- NAMED_OPERANDS((0, object), (1, length))
-
- AliasSet getAliasSet() const override {
- return AliasSet::Store(AliasSet::ObjectFields);
- }
-
- ALLOW_CLONE(MSetUnboxedArrayInitializedLength)
-};
-
// Load the array length from an elements header.
class MArrayLength
: public MUnaryInstruction,
@@ -9334,23 +9204,19 @@ class MLoadElement
ALLOW_CLONE(MLoadElement)
};
-// Load a value from the elements vector for a dense native or unboxed array.
+// Load a value from the elements vector of a native object.
// If the index is out-of-bounds, or the indexed slot has a hole, undefined is
// returned instead.
class MLoadElementHole
: public MTernaryInstruction,
public SingleObjectPolicy::Data
{
- // Unboxed element type, JSVAL_TYPE_MAGIC for dense native elements.
- JSValueType unboxedType_;
-
bool needsNegativeIntCheck_;
bool needsHoleCheck_;
MLoadElementHole(MDefinition* elements, MDefinition* index, MDefinition* initLength,
- JSValueType unboxedType, bool needsHoleCheck)
+ bool needsHoleCheck)
: MTernaryInstruction(elements, index, initLength),
- unboxedType_(unboxedType),
needsNegativeIntCheck_(true),
needsHoleCheck_(needsHoleCheck)
{
@@ -9372,9 +9238,6 @@ class MLoadElementHole
TRIVIAL_NEW_WRAPPERS
NAMED_OPERANDS((0, elements), (1, index), (2, initLength))
- JSValueType unboxedType() const {
- return unboxedType_;
- }
bool needsNegativeIntCheck() const {
return needsNegativeIntCheck_;
}
@@ -9385,8 +9248,6 @@ class MLoadElementHole
if (!ins->isLoadElementHole())
return false;
const MLoadElementHole* other = ins->toLoadElementHole();
- if (unboxedType() != other->unboxedType())
- return false;
if (needsHoleCheck() != other->needsHoleCheck())
return false;
if (needsNegativeIntCheck() != other->needsNegativeIntCheck())
@@ -9394,7 +9255,7 @@ class MLoadElementHole
return congruentIfOperandsEqual(other);
}
AliasSet getAliasSet() const override {
- return AliasSet::Load(AliasSet::BoxedOrUnboxedElements(unboxedType()));
+ return AliasSet::Load(AliasSet::Element);
}
void collectRangeInfoPreTrunc() override;
@@ -9574,20 +9435,17 @@ class MStoreElement
ALLOW_CLONE(MStoreElement)
};
-// Like MStoreElement, but supports indexes >= initialized length, and can
-// handle unboxed arrays. The downside is that we cannot hoist the elements
-// vector and bounds check, since this instruction may update the (initialized)
-// length and reallocate the elements vector.
+// Like MStoreElement, but supports indexes >= initialized length. The downside
+// is that we cannot hoist the elements vector and bounds check, since this
+// instruction may update the (initialized) length and reallocate the elements
+// vector.
class MStoreElementHole
: public MAryInstruction<4>,
public MStoreElementCommon,
public MixPolicy<SingleObjectPolicy, NoFloatPolicy<3> >::Data
{
- JSValueType unboxedType_;
-
MStoreElementHole(MDefinition* object, MDefinition* elements,
- MDefinition* index, MDefinition* value, JSValueType unboxedType)
- : unboxedType_(unboxedType)
+ MDefinition* index, MDefinition* value)
{
initOperand(0, object);
initOperand(1, elements);
@@ -9602,14 +9460,10 @@ class MStoreElementHole
TRIVIAL_NEW_WRAPPERS
NAMED_OPERANDS((0, object), (1, elements), (2, index), (3, value))
- JSValueType unboxedType() const {
- return unboxedType_;
- }
AliasSet getAliasSet() const override {
// StoreElementHole can update the initialized length, the array length
// or reallocate obj->elements.
- return AliasSet::Store(AliasSet::ObjectFields |
- AliasSet::BoxedOrUnboxedElements(unboxedType()));
+ return AliasSet::Store(AliasSet::ObjectFields | AliasSet::Element);
}
ALLOW_CLONE(MStoreElementHole)
@@ -9622,13 +9476,11 @@ class MFallibleStoreElement
public MStoreElementCommon,
public MixPolicy<SingleObjectPolicy, NoFloatPolicy<3> >::Data
{
- JSValueType unboxedType_;
bool strict_;
MFallibleStoreElement(MDefinition* object, MDefinition* elements,
MDefinition* index, MDefinition* value,
- JSValueType unboxedType, bool strict)
- : unboxedType_(unboxedType)
+ bool strict)
{
initOperand(0, object);
initOperand(1, elements);
@@ -9644,12 +9496,8 @@ class MFallibleStoreElement
TRIVIAL_NEW_WRAPPERS
NAMED_OPERANDS((0, object), (1, elements), (2, index), (3, value))
- JSValueType unboxedType() const {
- return unboxedType_;
- }
AliasSet getAliasSet() const override {
- return AliasSet::Store(AliasSet::ObjectFields |
- AliasSet::BoxedOrUnboxedElements(unboxedType()));
+ return AliasSet::Store(AliasSet::ObjectFields | AliasSet::Element);
}
bool strict() const {
return strict_;
@@ -9754,13 +9602,12 @@ class MArrayPopShift
private:
Mode mode_;
- JSValueType unboxedType_;
bool needsHoleCheck_;
bool maybeUndefined_;
- MArrayPopShift(MDefinition* object, Mode mode, JSValueType unboxedType,
+ MArrayPopShift(MDefinition* object, Mode mode,
bool needsHoleCheck, bool maybeUndefined)
- : MUnaryInstruction(object), mode_(mode), unboxedType_(unboxedType),
+ : MUnaryInstruction(object), mode_(mode),
needsHoleCheck_(needsHoleCheck), maybeUndefined_(maybeUndefined)
{ }
@@ -9778,12 +9625,8 @@ class MArrayPopShift
bool mode() const {
return mode_;
}
- JSValueType unboxedType() const {
- return unboxedType_;
- }
AliasSet getAliasSet() const override {
- return AliasSet::Store(AliasSet::ObjectFields |
- AliasSet::BoxedOrUnboxedElements(unboxedType()));
+ return AliasSet::Store(AliasSet::ObjectFields | AliasSet::Element);
}
ALLOW_CLONE(MArrayPopShift)
@@ -9794,10 +9637,8 @@ class MArrayPush
: public MBinaryInstruction,
public MixPolicy<SingleObjectPolicy, NoFloatPolicy<1> >::Data
{
- JSValueType unboxedType_;
-
- MArrayPush(MDefinition* object, MDefinition* value, JSValueType unboxedType)
- : MBinaryInstruction(object, value), unboxedType_(unboxedType)
+ MArrayPush(MDefinition* object, MDefinition* value)
+ : MBinaryInstruction(object, value)
{
setResultType(MIRType::Int32);
}
@@ -9807,12 +9648,8 @@ class MArrayPush
TRIVIAL_NEW_WRAPPERS
NAMED_OPERANDS((0, object), (1, value))
- JSValueType unboxedType() const {
- return unboxedType_;
- }
AliasSet getAliasSet() const override {
- return AliasSet::Store(AliasSet::ObjectFields |
- AliasSet::BoxedOrUnboxedElements(unboxedType()));
+ return AliasSet::Store(AliasSet::ObjectFields | AliasSet::Element);
}
void computeRange(TempAllocator& alloc) override;
@@ -9826,15 +9663,13 @@ class MArraySlice
{
CompilerObject templateObj_;
gc::InitialHeap initialHeap_;
- JSValueType unboxedType_;
MArraySlice(CompilerConstraintList* constraints, MDefinition* obj,
MDefinition* begin, MDefinition* end,
- JSObject* templateObj, gc::InitialHeap initialHeap, JSValueType unboxedType)
+ JSObject* templateObj, gc::InitialHeap initialHeap)
: MTernaryInstruction(obj, begin, end),
templateObj_(templateObj),
- initialHeap_(initialHeap),
- unboxedType_(unboxedType)
+ initialHeap_(initialHeap)
{
setResultType(MIRType::Object);
}
@@ -9852,10 +9687,6 @@ class MArraySlice
return initialHeap_;
}
- JSValueType unboxedType() const {
- return unboxedType_;
- }
-
bool possiblyCalls() const override {
return true;
}
@@ -12224,15 +12055,13 @@ class MInArray
{
bool needsHoleCheck_;
bool needsNegativeIntCheck_;
- JSValueType unboxedType_;
MInArray(MDefinition* elements, MDefinition* index,
MDefinition* initLength, MDefinition* object,
- bool needsHoleCheck, JSValueType unboxedType)
+ bool needsHoleCheck)
: MQuaternaryInstruction(elements, index, initLength, object),
needsHoleCheck_(needsHoleCheck),
- needsNegativeIntCheck_(true),
- unboxedType_(unboxedType)
+ needsNegativeIntCheck_(true)
{
setResultType(MIRType::Boolean);
setMovable();
@@ -12252,9 +12081,6 @@ class MInArray
bool needsNegativeIntCheck() const {
return needsNegativeIntCheck_;
}
- JSValueType unboxedType() const {
- return unboxedType_;
- }
void collectRangeInfoPreTrunc() override;
AliasSet getAliasSet() const override {
return AliasSet::Load(AliasSet::Element);
@@ -12267,8 +12093,6 @@ class MInArray
return false;
if (needsNegativeIntCheck() != other->needsNegativeIntCheck())
return false;
- if (unboxedType() != other->unboxedType())
- return false;
return congruentIfOperandsEqual(other);
}
};
@@ -14169,8 +13993,6 @@ MDefinition::maybeConstantValue()
bool ElementAccessIsDenseNative(CompilerConstraintList* constraints,
MDefinition* obj, MDefinition* id);
-JSValueType UnboxedArrayElementType(CompilerConstraintList* constraints, MDefinition* obj,
- MDefinition* id);
bool ElementAccessIsTypedArray(CompilerConstraintList* constraints,
MDefinition* obj, MDefinition* id,
Scalar::Type* arrayType);
@@ -14202,7 +14024,6 @@ bool PropertyWriteNeedsTypeBarrier(TempAllocator& alloc, CompilerConstraintList*
MBasicBlock* current, MDefinition** pobj,
PropertyName* name, MDefinition** pvalue,
bool canModify, MIRType implicitType = MIRType::None);
-bool ArrayPrototypeHasIndexedProperty(IonBuilder* builder, JSScript* script);
bool TypeCanHaveExtraIndexedProperties(IonBuilder* builder, TemporaryTypeSet* types);
inline MIRType
diff --git a/js/src/jit/MOpcodes.h b/js/src/jit/MOpcodes.h
index b80d1baf9..9e460a2ba 100644
--- a/js/src/jit/MOpcodes.h
+++ b/js/src/jit/MOpcodes.h
@@ -69,7 +69,6 @@ namespace jit {
_(Call) \
_(ApplyArgs) \
_(ApplyArray) \
- _(ArraySplice) \
_(Bail) \
_(Unreachable) \
_(EncodeSnapshot) \
@@ -198,10 +197,6 @@ namespace jit {
_(SetTypedObjectOffset) \
_(InitializedLength) \
_(SetInitializedLength) \
- _(UnboxedArrayLength) \
- _(UnboxedArrayInitializedLength) \
- _(IncrementUnboxedArrayInitializedLength) \
- _(SetUnboxedArrayInitializedLength) \
_(Not) \
_(BoundsCheck) \
_(BoundsCheckLower) \
diff --git a/js/src/jit/MacroAssembler.cpp b/js/src/jit/MacroAssembler.cpp
index f633b9b7b..a739b9325 100644
--- a/js/src/jit/MacroAssembler.cpp
+++ b/js/src/jit/MacroAssembler.cpp
@@ -126,20 +126,14 @@ MacroAssembler::guardTypeSetMightBeIncomplete(TypeSet* types, Register obj, Regi
{
// Type set guards might miss when an object's group changes. In this case
// either its old group's properties will become unknown, or it will change
- // to a native object with an original unboxed group. Jump to label if this
- // might have happened for the input object.
+ // to a native object. Jump to label if this might have happened for the
+ // input object.
if (types->unknownObject()) {
jump(label);
return;
}
- loadPtr(Address(obj, JSObject::offsetOfGroup()), scratch);
- load32(Address(scratch, ObjectGroup::offsetOfFlags()), scratch);
- and32(Imm32(OBJECT_FLAG_ADDENDUM_MASK), scratch);
- branch32(Assembler::Equal,
- scratch, Imm32(ObjectGroup::addendumOriginalUnboxedGroupValue()), label);
-
for (size_t i = 0; i < types->getObjectCount(); i++) {
if (JSObject* singleton = types->getSingletonNoBarrier(i)) {
movePtr(ImmGCPtr(singleton), scratch);
@@ -468,268 +462,6 @@ template void MacroAssembler::loadFromTypedArray(Scalar::Type arrayType, const A
template void MacroAssembler::loadFromTypedArray(Scalar::Type arrayType, const BaseIndex& src, const ValueOperand& dest,
bool allowDouble, Register temp, Label* fail);
-template <typename T>
-void
-MacroAssembler::loadUnboxedProperty(T address, JSValueType type, TypedOrValueRegister output)
-{
- switch (type) {
- case JSVAL_TYPE_INT32: {
- // Handle loading an int32 into a double reg.
- if (output.type() == MIRType::Double) {
- convertInt32ToDouble(address, output.typedReg().fpu());
- break;
- }
- MOZ_FALLTHROUGH;
- }
-
- case JSVAL_TYPE_BOOLEAN:
- case JSVAL_TYPE_STRING: {
- Register outReg;
- if (output.hasValue()) {
- outReg = output.valueReg().scratchReg();
- } else {
- MOZ_ASSERT(output.type() == MIRTypeFromValueType(type));
- outReg = output.typedReg().gpr();
- }
-
- switch (type) {
- case JSVAL_TYPE_BOOLEAN:
- load8ZeroExtend(address, outReg);
- break;
- case JSVAL_TYPE_INT32:
- load32(address, outReg);
- break;
- case JSVAL_TYPE_STRING:
- loadPtr(address, outReg);
- break;
- default:
- MOZ_CRASH();
- }
-
- if (output.hasValue())
- tagValue(type, outReg, output.valueReg());
- break;
- }
-
- case JSVAL_TYPE_OBJECT:
- if (output.hasValue()) {
- Register scratch = output.valueReg().scratchReg();
- loadPtr(address, scratch);
-
- Label notNull, done;
- branchPtr(Assembler::NotEqual, scratch, ImmWord(0), &notNull);
-
- moveValue(NullValue(), output.valueReg());
- jump(&done);
-
- bind(&notNull);
- tagValue(JSVAL_TYPE_OBJECT, scratch, output.valueReg());
-
- bind(&done);
- } else {
- // Reading null can't be possible here, as otherwise the result
- // would be a value (either because null has been read before or
- // because there is a barrier).
- Register reg = output.typedReg().gpr();
- loadPtr(address, reg);
-#ifdef DEBUG
- Label ok;
- branchTestPtr(Assembler::NonZero, reg, reg, &ok);
- assumeUnreachable("Null not possible");
- bind(&ok);
-#endif
- }
- break;
-
- case JSVAL_TYPE_DOUBLE:
- // Note: doubles in unboxed objects are not accessed through other
- // views and do not need canonicalization.
- if (output.hasValue())
- loadValue(address, output.valueReg());
- else
- loadDouble(address, output.typedReg().fpu());
- break;
-
- default:
- MOZ_CRASH();
- }
-}
-
-template void
-MacroAssembler::loadUnboxedProperty(Address address, JSValueType type,
- TypedOrValueRegister output);
-
-template void
-MacroAssembler::loadUnboxedProperty(BaseIndex address, JSValueType type,
- TypedOrValueRegister output);
-
-static void
-StoreUnboxedFailure(MacroAssembler& masm, Label* failure)
-{
- // Storing a value to an unboxed property is a fallible operation and
- // the caller must provide a failure label if a particular unboxed store
- // might fail. Sometimes, however, a store that cannot succeed (such as
- // storing a string to an int32 property) will be marked as infallible.
- // This can only happen if the code involved is unreachable.
- if (failure)
- masm.jump(failure);
- else
- masm.assumeUnreachable("Incompatible write to unboxed property");
-}
-
-template <typename T>
-void
-MacroAssembler::storeUnboxedProperty(T address, JSValueType type,
- const ConstantOrRegister& value, Label* failure)
-{
- switch (type) {
- case JSVAL_TYPE_BOOLEAN:
- if (value.constant()) {
- if (value.value().isBoolean())
- store8(Imm32(value.value().toBoolean()), address);
- else
- StoreUnboxedFailure(*this, failure);
- } else if (value.reg().hasTyped()) {
- if (value.reg().type() == MIRType::Boolean)
- store8(value.reg().typedReg().gpr(), address);
- else
- StoreUnboxedFailure(*this, failure);
- } else {
- if (failure)
- branchTestBoolean(Assembler::NotEqual, value.reg().valueReg(), failure);
- storeUnboxedPayload(value.reg().valueReg(), address, /* width = */ 1);
- }
- break;
-
- case JSVAL_TYPE_INT32:
- if (value.constant()) {
- if (value.value().isInt32())
- store32(Imm32(value.value().toInt32()), address);
- else
- StoreUnboxedFailure(*this, failure);
- } else if (value.reg().hasTyped()) {
- if (value.reg().type() == MIRType::Int32)
- store32(value.reg().typedReg().gpr(), address);
- else
- StoreUnboxedFailure(*this, failure);
- } else {
- if (failure)
- branchTestInt32(Assembler::NotEqual, value.reg().valueReg(), failure);
- storeUnboxedPayload(value.reg().valueReg(), address, /* width = */ 4);
- }
- break;
-
- case JSVAL_TYPE_DOUBLE:
- if (value.constant()) {
- if (value.value().isNumber()) {
- loadConstantDouble(value.value().toNumber(), ScratchDoubleReg);
- storeDouble(ScratchDoubleReg, address);
- } else {
- StoreUnboxedFailure(*this, failure);
- }
- } else if (value.reg().hasTyped()) {
- if (value.reg().type() == MIRType::Int32) {
- convertInt32ToDouble(value.reg().typedReg().gpr(), ScratchDoubleReg);
- storeDouble(ScratchDoubleReg, address);
- } else if (value.reg().type() == MIRType::Double) {
- storeDouble(value.reg().typedReg().fpu(), address);
- } else {
- StoreUnboxedFailure(*this, failure);
- }
- } else {
- ValueOperand reg = value.reg().valueReg();
- Label notInt32, end;
- branchTestInt32(Assembler::NotEqual, reg, &notInt32);
- int32ValueToDouble(reg, ScratchDoubleReg);
- storeDouble(ScratchDoubleReg, address);
- jump(&end);
- bind(&notInt32);
- if (failure)
- branchTestDouble(Assembler::NotEqual, reg, failure);
- storeValue(reg, address);
- bind(&end);
- }
- break;
-
- case JSVAL_TYPE_OBJECT:
- if (value.constant()) {
- if (value.value().isObjectOrNull())
- storePtr(ImmGCPtr(value.value().toObjectOrNull()), address);
- else
- StoreUnboxedFailure(*this, failure);
- } else if (value.reg().hasTyped()) {
- MOZ_ASSERT(value.reg().type() != MIRType::Null);
- if (value.reg().type() == MIRType::Object)
- storePtr(value.reg().typedReg().gpr(), address);
- else
- StoreUnboxedFailure(*this, failure);
- } else {
- if (failure) {
- Label ok;
- branchTestNull(Assembler::Equal, value.reg().valueReg(), &ok);
- branchTestObject(Assembler::NotEqual, value.reg().valueReg(), failure);
- bind(&ok);
- }
- storeUnboxedPayload(value.reg().valueReg(), address, /* width = */ sizeof(uintptr_t));
- }
- break;
-
- case JSVAL_TYPE_STRING:
- if (value.constant()) {
- if (value.value().isString())
- storePtr(ImmGCPtr(value.value().toString()), address);
- else
- StoreUnboxedFailure(*this, failure);
- } else if (value.reg().hasTyped()) {
- if (value.reg().type() == MIRType::String)
- storePtr(value.reg().typedReg().gpr(), address);
- else
- StoreUnboxedFailure(*this, failure);
- } else {
- if (failure)
- branchTestString(Assembler::NotEqual, value.reg().valueReg(), failure);
- storeUnboxedPayload(value.reg().valueReg(), address, /* width = */ sizeof(uintptr_t));
- }
- break;
-
- default:
- MOZ_CRASH();
- }
-}
-
-template void
-MacroAssembler::storeUnboxedProperty(Address address, JSValueType type,
- const ConstantOrRegister& value, Label* failure);
-
-template void
-MacroAssembler::storeUnboxedProperty(BaseIndex address, JSValueType type,
- const ConstantOrRegister& value, Label* failure);
-
-void
-MacroAssembler::checkUnboxedArrayCapacity(Register obj, const RegisterOrInt32Constant& index,
- Register temp, Label* failure)
-{
- Address initLengthAddr(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength());
- Address lengthAddr(obj, UnboxedArrayObject::offsetOfLength());
-
- Label capacityIsIndex, done;
- load32(initLengthAddr, temp);
- branchTest32(Assembler::NonZero, temp, Imm32(UnboxedArrayObject::CapacityMask), &capacityIsIndex);
- branch32(Assembler::BelowOrEqual, lengthAddr, index, failure);
- jump(&done);
- bind(&capacityIsIndex);
-
- // Do a partial shift so that we can get an absolute offset from the base
- // of CapacityArray to use.
- JS_STATIC_ASSERT(sizeof(UnboxedArrayObject::CapacityArray[0]) == 4);
- rshiftPtr(Imm32(UnboxedArrayObject::CapacityShift - 2), temp);
- and32(Imm32(~0x3), temp);
-
- addPtr(ImmPtr(&UnboxedArrayObject::CapacityArray), temp);
- branch32(Assembler::BelowOrEqual, Address(temp, 0), index, failure);
- bind(&done);
-}
-
// Inlined version of gc::CheckAllocatorState that checks the bare essentials
// and bails for anything that cannot be handled with our jit allocators.
void
@@ -1277,20 +1009,6 @@ MacroAssembler::initGCThing(Register obj, Register temp, JSObject* templateObj,
nbytes = (nbytes < sizeof(uintptr_t)) ? 0 : nbytes - sizeof(uintptr_t);
offset += sizeof(uintptr_t);
}
- } else if (templateObj->is<UnboxedPlainObject>()) {
- storePtr(ImmWord(0), Address(obj, UnboxedPlainObject::offsetOfExpando()));
- if (initContents)
- initUnboxedObjectContents(obj, &templateObj->as<UnboxedPlainObject>());
- } else if (templateObj->is<UnboxedArrayObject>()) {
- MOZ_ASSERT(templateObj->as<UnboxedArrayObject>().hasInlineElements());
- int elementsOffset = UnboxedArrayObject::offsetOfInlineElements();
- computeEffectiveAddress(Address(obj, elementsOffset), temp);
- storePtr(temp, Address(obj, UnboxedArrayObject::offsetOfElements()));
- store32(Imm32(templateObj->as<UnboxedArrayObject>().length()),
- Address(obj, UnboxedArrayObject::offsetOfLength()));
- uint32_t capacityIndex = templateObj->as<UnboxedArrayObject>().capacityIndex();
- store32(Imm32(capacityIndex << UnboxedArrayObject::CapacityShift),
- Address(obj, UnboxedArrayObject::offsetOfCapacityIndexAndInitializedLength()));
} else {
MOZ_CRASH("Unknown object");
}
@@ -1312,29 +1030,6 @@ MacroAssembler::initGCThing(Register obj, Register temp, JSObject* templateObj,
}
void
-MacroAssembler::initUnboxedObjectContents(Register object, UnboxedPlainObject* templateObject)
-{
- const UnboxedLayout& layout = templateObject->layoutDontCheckGeneration();
-
- // Initialize reference fields of the object, per UnboxedPlainObject::create.
- if (const int32_t* list = layout.traceList()) {
- while (*list != -1) {
- storePtr(ImmGCPtr(GetJitContext()->runtime->names().empty),
- Address(object, UnboxedPlainObject::offsetOfData() + *list));
- list++;
- }
- list++;
- while (*list != -1) {
- storePtr(ImmWord(0),
- Address(object, UnboxedPlainObject::offsetOfData() + *list));
- list++;
- }
- // Unboxed objects don't have Values to initialize.
- MOZ_ASSERT(*(list + 1) == -1);
- }
-}
-
-void
MacroAssembler::compareStrings(JSOp op, Register left, Register right, Register result,
Label* fail)
{
diff --git a/js/src/jit/MacroAssembler.h b/js/src/jit/MacroAssembler.h
index b6616321c..d5cc95839 100644
--- a/js/src/jit/MacroAssembler.h
+++ b/js/src/jit/MacroAssembler.h
@@ -36,7 +36,6 @@
#include "vm/ProxyObject.h"
#include "vm/Shape.h"
#include "vm/TypedArrayObject.h"
-#include "vm/UnboxedObject.h"
using mozilla::FloatingPoint;
@@ -1626,20 +1625,6 @@ class MacroAssembler : public MacroAssemblerSpecific
void storeToTypedFloatArray(Scalar::Type arrayType, FloatRegister value, const Address& dest,
unsigned numElems = 0);
- // Load a property from an UnboxedPlainObject or UnboxedArrayObject.
- template <typename T>
- void loadUnboxedProperty(T address, JSValueType type, TypedOrValueRegister output);
-
- // Store a property to an UnboxedPlainObject, without triggering barriers.
- // If failure is null, the value definitely has a type suitable for storing
- // in the property.
- template <typename T>
- void storeUnboxedProperty(T address, JSValueType type,
- const ConstantOrRegister& value, Label* failure);
-
- void checkUnboxedArrayCapacity(Register obj, const RegisterOrInt32Constant& index,
- Register temp, Label* failure);
-
Register extractString(const Address& address, Register scratch) {
return extractObject(address, scratch);
}
@@ -1716,8 +1701,6 @@ class MacroAssembler : public MacroAssemblerSpecific
LiveRegisterSet liveRegs, Label* fail,
TypedArrayObject* templateObj, TypedArrayLength lengthKind);
- void initUnboxedObjectContents(Register object, UnboxedPlainObject* templateObject);
-
void newGCString(Register result, Register temp, Label* fail);
void newGCFatInlineString(Register result, Register temp, Label* fail);
diff --git a/js/src/jit/OptimizationTracking.cpp b/js/src/jit/OptimizationTracking.cpp
index b42634d43..7d72795a0 100644
--- a/js/src/jit/OptimizationTracking.cpp
+++ b/js/src/jit/OptimizationTracking.cpp
@@ -15,11 +15,9 @@
#include "jit/JitcodeMap.h"
#include "jit/JitSpewer.h"
#include "js/TrackedOptimizationInfo.h"
-#include "vm/UnboxedObject.h"
#include "vm/ObjectGroup-inl.h"
#include "vm/TypeInference-inl.h"
-#include "vm/UnboxedObject-inl.h"
using namespace js;
using namespace js::jit;
@@ -846,8 +844,6 @@ MaybeConstructorFromType(TypeSet::Type ty)
return nullptr;
ObjectGroup* obj = ty.group();
TypeNewScript* newScript = obj->newScript();
- if (!newScript && obj->maybeUnboxedLayout())
- newScript = obj->unboxedLayout().newScript();
return newScript ? newScript->function() : nullptr;
}
diff --git a/js/src/jit/Recover.cpp b/js/src/jit/Recover.cpp
index 6fd71f377..793b631df 100644
--- a/js/src/jit/Recover.cpp
+++ b/js/src/jit/Recover.cpp
@@ -30,7 +30,6 @@
#include "vm/Interpreter-inl.h"
#include "vm/NativeObject-inl.h"
-#include "vm/UnboxedObject-inl.h"
using namespace js;
using namespace js::jit;
@@ -1355,7 +1354,7 @@ RNewArray::recover(JSContext* cx, SnapshotIterator& iter) const
RootedValue result(cx);
RootedObjectGroup group(cx, templateObject->group());
- JSObject* resultObject = NewFullyAllocatedArrayTryUseGroup(cx, group, count_);
+ ArrayObject* resultObject = NewFullyAllocatedArrayTryUseGroup(cx, group, count_);
if (!resultObject)
return false;
@@ -1540,37 +1539,12 @@ RObjectState::recover(JSContext* cx, SnapshotIterator& iter) const
RootedObject object(cx, &iter.read().toObject());
RootedValue val(cx);
- if (object->is<UnboxedPlainObject>()) {
- const UnboxedLayout& layout = object->as<UnboxedPlainObject>().layout();
+ RootedNativeObject nativeObject(cx, &object->as<NativeObject>());
+ MOZ_ASSERT(nativeObject->slotSpan() == numSlots());
- RootedId id(cx);
- RootedValue receiver(cx, ObjectValue(*object));
- const UnboxedLayout::PropertyVector& properties = layout.properties();
- for (size_t i = 0; i < properties.length(); i++) {
- val = iter.read();
-
- // This is the default placeholder value of MObjectState, when no
- // properties are defined yet.
- if (val.isUndefined())
- continue;
-
- id = NameToId(properties[i].name);
- ObjectOpResult result;
-
- // SetProperty can only fail due to OOM.
- if (!SetProperty(cx, object, id, val, receiver, result))
- return false;
- if (!result)
- return result.reportError(cx, object, id);
- }
- } else {
- RootedNativeObject nativeObject(cx, &object->as<NativeObject>());
- MOZ_ASSERT(nativeObject->slotSpan() == numSlots());
-
- for (size_t i = 0; i < numSlots(); i++) {
- val = iter.read();
- nativeObject->setSlot(i, val);
- }
+ for (size_t i = 0; i < numSlots(); i++) {
+ val = iter.read();
+ nativeObject->setSlot(i, val);
}
val.setObject(*object);
diff --git a/js/src/jit/ScalarReplacement.cpp b/js/src/jit/ScalarReplacement.cpp
index 2065c0371..97ba52349 100644
--- a/js/src/jit/ScalarReplacement.cpp
+++ b/js/src/jit/ScalarReplacement.cpp
@@ -285,10 +285,6 @@ class ObjectMemoryView : public MDefinitionVisitorDefaultNoop
void visitGuardShape(MGuardShape* ins);
void visitFunctionEnvironment(MFunctionEnvironment* ins);
void visitLambda(MLambda* ins);
-
- private:
- void storeOffset(MInstruction* ins, size_t offset, MDefinition* value);
- void loadOffset(MInstruction* ins, size_t offset);
};
const char* ObjectMemoryView::phaseName = "Scalar Replacement of Object";
@@ -630,35 +626,6 @@ ObjectMemoryView::visitLambda(MLambda* ins)
ins->setIncompleteObject();
}
-void
-ObjectMemoryView::storeOffset(MInstruction* ins, size_t offset, MDefinition* value)
-{
- // Clone the state and update the slot value.
- MOZ_ASSERT(state_->hasOffset(offset));
- state_ = BlockState::Copy(alloc_, state_);
- if (!state_) {
- oom_ = true;
- return;
- }
-
- state_->setOffset(offset, value);
- ins->block()->insertBefore(ins, state_);
-
- // Remove original instruction.
- ins->block()->discard(ins);
-}
-
-void
-ObjectMemoryView::loadOffset(MInstruction* ins, size_t offset)
-{
- // Replace load by the slot value.
- MOZ_ASSERT(state_->hasOffset(offset));
- ins->replaceAllUsesWith(state_->getOffset(offset));
-
- // Remove original instruction.
- ins->block()->discard(ins);
-}
-
static bool
IndexOf(MDefinition* ins, int32_t* res)
{
@@ -795,11 +762,6 @@ IsArrayEscaped(MInstruction* ins)
return true;
}
- if (obj->is<UnboxedArrayObject>()) {
- JitSpew(JitSpew_Escape, "Template object is an unboxed plain object.");
- return true;
- }
-
if (length >= 16) {
JitSpew(JitSpew_Escape, "Array has too many elements");
return true;
diff --git a/js/src/jit/SharedIC.cpp b/js/src/jit/SharedIC.cpp
index 2475dfb22..05a95824f 100644
--- a/js/src/jit/SharedIC.cpp
+++ b/js/src/jit/SharedIC.cpp
@@ -286,11 +286,6 @@ ICStub::trace(JSTracer* trc)
TraceEdge(trc, &getElemStub->shape(), "baseline-getelem-dense-shape");
break;
}
- case ICStub::GetElem_UnboxedArray: {
- ICGetElem_UnboxedArray* getElemStub = toGetElem_UnboxedArray();
- TraceEdge(trc, &getElemStub->group(), "baseline-getelem-unboxed-array-group");
- break;
- }
case ICStub::GetElem_TypedArray: {
ICGetElem_TypedArray* getElemStub = toGetElem_TypedArray();
TraceEdge(trc, &getElemStub->shape(), "baseline-getelem-typedarray-shape");
@@ -2249,9 +2244,7 @@ IsCacheableProtoChain(JSObject* obj, JSObject* holder, bool isDOMProxy)
if (!isDOMProxy && !obj->isNative()) {
if (obj == holder)
return false;
- if (!obj->is<UnboxedPlainObject>() &&
- !obj->is<UnboxedArrayObject>() &&
- !obj->is<TypedObject>())
+ if (!obj->is<TypedObject>())
{
return false;
}
@@ -2579,12 +2572,6 @@ CheckHasNoSuchProperty(JSContext* cx, JSObject* obj, PropertyName* name,
} else if (curObj != obj) {
// Non-native objects are only handled as the original receiver.
return false;
- } else if (curObj->is<UnboxedPlainObject>()) {
- if (curObj->as<UnboxedPlainObject>().containsUnboxedOrExpandoProperty(cx, NameToId(name)))
- return false;
- } else if (curObj->is<UnboxedArrayObject>()) {
- if (name == cx->names().length)
- return false;
} else if (curObj->is<TypedObject>()) {
if (curObj->as<TypedObject>().typeDescr().hasProperty(cx->names(), NameToId(name)))
return false;
@@ -2849,34 +2836,15 @@ GuardReceiverObject(MacroAssembler& masm, ReceiverGuard guard,
{
Address groupAddress(ICStubReg, receiverGuardOffset + HeapReceiverGuard::offsetOfGroup());
Address shapeAddress(ICStubReg, receiverGuardOffset + HeapReceiverGuard::offsetOfShape());
- Address expandoAddress(object, UnboxedPlainObject::offsetOfExpando());
if (guard.group) {
masm.loadPtr(groupAddress, scratch);
masm.branchTestObjGroup(Assembler::NotEqual, object, scratch, failure);
-
- if (guard.group->clasp() == &UnboxedPlainObject::class_ && !guard.shape) {
- // Guard the unboxed object has no expando object.
- masm.branchPtr(Assembler::NotEqual, expandoAddress, ImmWord(0), failure);
- }
}
if (guard.shape) {
masm.loadPtr(shapeAddress, scratch);
- if (guard.group && guard.group->clasp() == &UnboxedPlainObject::class_) {
- // Guard the unboxed object has a matching expando object.
- masm.branchPtr(Assembler::Equal, expandoAddress, ImmWord(0), failure);
- Label done;
- masm.push(object);
- masm.loadPtr(expandoAddress, object);
- masm.branchTestObjShape(Assembler::Equal, object, scratch, &done);
- masm.pop(object);
- masm.jump(failure);
- masm.bind(&done);
- masm.pop(object);
- } else {
- masm.branchTestObjShape(Assembler::NotEqual, object, scratch, failure);
- }
+ masm.branchTestObjShape(Assembler::NotEqual, object, scratch, failure);
}
}
@@ -4260,8 +4228,7 @@ DoNewObject(JSContext* cx, void* payload, ICNewObject_Fallback* stub, MutableHan
return false;
if (!stub->invalid() &&
- (templateObject->is<UnboxedPlainObject>() ||
- !templateObject->as<PlainObject>().hasDynamicSlots()))
+ !templateObject->as<PlainObject>().hasDynamicSlots())
{
JitCode* code = GenerateNewObjectWithTemplateCode(cx, templateObject);
if (!code)
diff --git a/js/src/jit/VMFunctions.cpp b/js/src/jit/VMFunctions.cpp
index 77b9e3647..1ff7adfd1 100644
--- a/js/src/jit/VMFunctions.cpp
+++ b/js/src/jit/VMFunctions.cpp
@@ -28,7 +28,7 @@
#include "vm/NativeObject-inl.h"
#include "vm/StringObject-inl.h"
#include "vm/TypeInference-inl.h"
-#include "vm/UnboxedObject-inl.h"
+#include "gc/StoreBuffer-inl.h"
using namespace js;
using namespace js::jit;
@@ -54,8 +54,8 @@ VMFunction::addToFunctions()
}
bool
-InvokeFunction(JSContext* cx, HandleObject obj, bool constructing, uint32_t argc, Value* argv,
- MutableHandleValue rval)
+InvokeFunction(JSContext* cx, HandleObject obj, bool constructing, bool ignoresReturnValue,
+ uint32_t argc, Value* argv, MutableHandleValue rval)
{
TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime());
TraceLogStartEvent(logger, TraceLogger_Call);
@@ -104,7 +104,7 @@ InvokeFunction(JSContext* cx, HandleObject obj, bool constructing, uint32_t argc
return InternalConstructWithProvidedThis(cx, fval, thisv, cargs, newTarget, rval);
}
- InvokeArgs args(cx);
+ InvokeArgsMaybeIgnoresReturnValue args(cx, ignoresReturnValue);
if (!args.init(cx, argc))
return false;
@@ -120,7 +120,7 @@ InvokeFunctionShuffleNewTarget(JSContext* cx, HandleObject obj, uint32_t numActu
{
MOZ_ASSERT(numFormalArgs > numActualArgs);
argv[1 + numActualArgs] = argv[1 + numFormalArgs];
- return InvokeFunction(cx, obj, true, numActualArgs, argv, rval);
+ return InvokeFunction(cx, obj, true, false, numActualArgs, argv, rval);
}
bool
@@ -304,21 +304,9 @@ template bool StringsEqual<true>(JSContext* cx, HandleString lhs, HandleString r
template bool StringsEqual<false>(JSContext* cx, HandleString lhs, HandleString rhs, bool* res);
bool
-ArraySpliceDense(JSContext* cx, HandleObject obj, uint32_t start, uint32_t deleteCount)
-{
- JS::AutoValueArray<4> argv(cx);
- argv[0].setUndefined();
- argv[1].setObject(*obj);
- argv[2].set(Int32Value(start));
- argv[3].set(Int32Value(deleteCount));
-
- return js::array_splice_impl(cx, 2, argv.begin(), false);
-}
-
-bool
ArrayPopDense(JSContext* cx, HandleObject obj, MutableHandleValue rval)
{
- MOZ_ASSERT(obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>());
+ MOZ_ASSERT(obj->is<ArrayObject>());
AutoDetectInvalidation adi(cx, rval);
@@ -337,12 +325,11 @@ ArrayPopDense(JSContext* cx, HandleObject obj, MutableHandleValue rval)
}
bool
-ArrayPushDense(JSContext* cx, HandleObject obj, HandleValue v, uint32_t* length)
+ArrayPushDense(JSContext* cx, HandleArrayObject arr, HandleValue v, uint32_t* length)
{
- *length = GetAnyBoxedOrUnboxedArrayLength(obj);
- DenseElementResult result =
- SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, obj, *length, v.address(), 1,
- ShouldUpdateTypes::DontUpdate);
+ *length = arr->length();
+ DenseElementResult result = arr->setOrExtendDenseElements(cx, *length, v.address(), 1,
+ ShouldUpdateTypes::DontUpdate);
if (result != DenseElementResult::Incomplete) {
(*length)++;
return result == DenseElementResult::Success;
@@ -350,7 +337,7 @@ ArrayPushDense(JSContext* cx, HandleObject obj, HandleValue v, uint32_t* length)
JS::AutoValueArray<3> argv(cx);
argv[0].setUndefined();
- argv[1].setObject(*obj);
+ argv[1].setObject(*arr);
argv[2].set(v);
if (!js::array_push(cx, 1, argv.begin()))
return false;
@@ -362,7 +349,7 @@ ArrayPushDense(JSContext* cx, HandleObject obj, HandleValue v, uint32_t* length)
bool
ArrayShiftDense(JSContext* cx, HandleObject obj, MutableHandleValue rval)
{
- MOZ_ASSERT(obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>());
+ MOZ_ASSERT(obj->is<ArrayObject>());
AutoDetectInvalidation adi(cx, rval);
@@ -556,7 +543,7 @@ CreateThis(JSContext* cx, HandleObject callee, HandleObject newTarget, MutableHa
if (callee->is<JSFunction>()) {
RootedFunction fun(cx, &callee->as<JSFunction>());
if (fun->isInterpreted() && fun->isConstructor()) {
- JSScript* script = fun->getOrCreateScript(cx);
+ JSScript* script = JSFunction::getOrCreateScript(cx, fun);
if (!script || !script->ensureHasTypes(cx))
return false;
if (fun->isBoundFunction() || script->isDerivedClassConstructor()) {
@@ -1143,16 +1130,14 @@ Recompile(JSContext* cx)
}
bool
-SetDenseOrUnboxedArrayElement(JSContext* cx, HandleObject obj, int32_t index,
- HandleValue value, bool strict)
+SetDenseElement(JSContext* cx, HandleNativeObject obj, int32_t index, HandleValue value, bool strict)
{
// This function is called from Ion code for StoreElementHole's OOL path.
- // In this case we know the object is native or an unboxed array and that
- // no type changes are needed.
+ // In this case we know the object is native and that no type changes are
+ // needed.
- DenseElementResult result =
- SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, obj, index, value.address(), 1,
- ShouldUpdateTypes::DontUpdate);
+ DenseElementResult result = obj->setOrExtendDenseElements(cx, index, value.address(), 1,
+ ShouldUpdateTypes::DontUpdate);
if (result != DenseElementResult::Incomplete)
return result == DenseElementResult::Success;
diff --git a/js/src/jit/VMFunctions.h b/js/src/jit/VMFunctions.h
index 572f05373..94f741397 100644
--- a/js/src/jit/VMFunctions.h
+++ b/js/src/jit/VMFunctions.h
@@ -584,8 +584,8 @@ class AutoDetectInvalidation
};
MOZ_MUST_USE bool
-InvokeFunction(JSContext* cx, HandleObject obj0, bool constructing, uint32_t argc, Value* argv,
- MutableHandleValue rval);
+InvokeFunction(JSContext* cx, HandleObject obj0, bool constructing, bool ignoresReturnValue,
+ uint32_t argc, Value* argv, MutableHandleValue rval);
MOZ_MUST_USE bool
InvokeFunctionShuffleNewTarget(JSContext* cx, HandleObject obj, uint32_t numActualArgs,
uint32_t numFormalArgs, Value* argv, MutableHandleValue rval);
@@ -622,7 +622,7 @@ template<bool Equal>
bool StringsEqual(JSContext* cx, HandleString left, HandleString right, bool* res);
MOZ_MUST_USE bool ArrayPopDense(JSContext* cx, HandleObject obj, MutableHandleValue rval);
-MOZ_MUST_USE bool ArrayPushDense(JSContext* cx, HandleObject obj, HandleValue v, uint32_t* length);
+MOZ_MUST_USE bool ArrayPushDense(JSContext* cx, HandleArrayObject obj, HandleValue v, uint32_t* length);
MOZ_MUST_USE bool ArrayShiftDense(JSContext* cx, HandleObject obj, MutableHandleValue rval);
JSString* ArrayJoin(JSContext* cx, HandleObject array, HandleString sep);
@@ -739,17 +739,14 @@ JSObject* CreateDerivedTypedObj(JSContext* cx, HandleObject descr,
HandleObject owner, int32_t offset);
MOZ_MUST_USE bool
-ArraySpliceDense(JSContext* cx, HandleObject obj, uint32_t start, uint32_t deleteCount);
-
-MOZ_MUST_USE bool
Recompile(JSContext* cx);
MOZ_MUST_USE bool
ForcedRecompile(JSContext* cx);
JSString* StringReplace(JSContext* cx, HandleString string, HandleString pattern,
HandleString repl);
-MOZ_MUST_USE bool SetDenseOrUnboxedArrayElement(JSContext* cx, HandleObject obj, int32_t index,
- HandleValue value, bool strict);
+MOZ_MUST_USE bool SetDenseElement(JSContext* cx, HandleNativeObject obj, int32_t index,
+ HandleValue value, bool strict);
void AssertValidObjectPtr(JSContext* cx, JSObject* obj);
void AssertValidObjectOrNullPtr(JSContext* cx, JSObject* obj);
diff --git a/js/src/jit/arm64/Architecture-arm64.h b/js/src/jit/arm64/Architecture-arm64.h
index e74340f13..bee212db7 100644
--- a/js/src/jit/arm64/Architecture-arm64.h
+++ b/js/src/jit/arm64/Architecture-arm64.h
@@ -299,10 +299,12 @@ static const uint32_t ION_FRAME_SLACK_SIZE = 24;
static const uint32_t ShadowStackSpace = 0;
-// TODO:
-// This constant needs to be updated to account for whatever near/far branching
-// strategy is used by ARM64.
-static const uint32_t JumpImmediateRange = UINT32_MAX;
+// When our only strategy for far jumps is to encode the offset directly, and
+// not insert any jump islands during assembly for even further jumps, then the
+// architecture restricts us to -2^27 .. 2^27-4, to fit into a signed 28-bit
+// value. We further reduce this range to allow the far-jump inserting code to
+// have some breathing room.
+static const uint32_t JumpImmediateRange = ((1 << 27) - (20 * 1024 * 1024));
static const uint32_t ABIStackAlignment = 16;
static const uint32_t CodeAlignment = 16;
diff --git a/js/src/jit/shared/LIR-shared.h b/js/src/jit/shared/LIR-shared.h
index f386d5256..ecf02816e 100644
--- a/js/src/jit/shared/LIR-shared.h
+++ b/js/src/jit/shared/LIR-shared.h
@@ -1898,6 +1898,9 @@ class LJSCallInstructionHelper : public LCallInstructionHelper<Defs, Operands, T
bool isConstructing() const {
return mir()->isConstructing();
}
+ bool ignoresReturnValue() const {
+ return mir()->ignoresReturnValue();
+ }
};
// Generates a polymorphic callsite, wherein the function being called is
@@ -2218,34 +2221,6 @@ class LApplyArrayGeneric : public LCallInstructionHelper<BOX_PIECES, BOX_PIECES
}
};
-class LArraySplice : public LCallInstructionHelper<0, 3, 0>
-{
- public:
- LIR_HEADER(ArraySplice)
-
- LArraySplice(const LAllocation& object, const LAllocation& start,
- const LAllocation& deleteCount)
- {
- setOperand(0, object);
- setOperand(1, start);
- setOperand(2, deleteCount);
- }
-
- MArraySplice* mir() const {
- return mir_->toArraySplice();
- }
-
- const LAllocation* getObject() {
- return getOperand(0);
- }
- const LAllocation* getStart() {
- return getOperand(1);
- }
- const LAllocation* getDeleteCount() {
- return getOperand(2);
- }
-};
-
class LGetDynamicName : public LCallInstructionHelper<BOX_PIECES, 2, 3>
{
public:
@@ -5165,72 +5140,6 @@ class LSetInitializedLength : public LInstructionHelper<0, 2, 0>
}
};
-class LUnboxedArrayLength : public LInstructionHelper<1, 1, 0>
-{
- public:
- LIR_HEADER(UnboxedArrayLength)
-
- explicit LUnboxedArrayLength(const LAllocation& object) {
- setOperand(0, object);
- }
-
- const LAllocation* object() {
- return getOperand(0);
- }
-};
-
-class LUnboxedArrayInitializedLength : public LInstructionHelper<1, 1, 0>
-{
- public:
- LIR_HEADER(UnboxedArrayInitializedLength)
-
- explicit LUnboxedArrayInitializedLength(const LAllocation& object) {
- setOperand(0, object);
- }
-
- const LAllocation* object() {
- return getOperand(0);
- }
-};
-
-class LIncrementUnboxedArrayInitializedLength : public LInstructionHelper<0, 1, 0>
-{
- public:
- LIR_HEADER(IncrementUnboxedArrayInitializedLength)
-
- explicit LIncrementUnboxedArrayInitializedLength(const LAllocation& object) {
- setOperand(0, object);
- }
-
- const LAllocation* object() {
- return getOperand(0);
- }
-};
-
-class LSetUnboxedArrayInitializedLength : public LInstructionHelper<0, 2, 1>
-{
- public:
- LIR_HEADER(SetUnboxedArrayInitializedLength)
-
- explicit LSetUnboxedArrayInitializedLength(const LAllocation& object,
- const LAllocation& length,
- const LDefinition& temp) {
- setOperand(0, object);
- setOperand(1, length);
- setTemp(0, temp);
- }
-
- const LAllocation* object() {
- return getOperand(0);
- }
- const LAllocation* length() {
- return getOperand(1);
- }
- const LDefinition* temp() {
- return getTemp(0);
- }
-};
-
// Load the length from an elements header.
class LArrayLength : public LInstructionHelper<1, 1, 0>
{
@@ -5735,19 +5644,17 @@ class LStoreElementT : public LInstructionHelper<0, 3, 0>
};
// Like LStoreElementV, but supports indexes >= initialized length.
-class LStoreElementHoleV : public LInstructionHelper<0, 3 + BOX_PIECES, 1>
+class LStoreElementHoleV : public LInstructionHelper<0, 3 + BOX_PIECES, 0>
{
public:
LIR_HEADER(StoreElementHoleV)
LStoreElementHoleV(const LAllocation& object, const LAllocation& elements,
- const LAllocation& index, const LBoxAllocation& value,
- const LDefinition& temp) {
+ const LAllocation& index, const LBoxAllocation& value) {
setOperand(0, object);
setOperand(1, elements);
setOperand(2, index);
setBoxOperand(Value, value);
- setTemp(0, temp);
}
static const size_t Value = 3;
@@ -5767,19 +5674,17 @@ class LStoreElementHoleV : public LInstructionHelper<0, 3 + BOX_PIECES, 1>
};
// Like LStoreElementT, but supports indexes >= initialized length.
-class LStoreElementHoleT : public LInstructionHelper<0, 4, 1>
+class LStoreElementHoleT : public LInstructionHelper<0, 4, 0>
{
public:
LIR_HEADER(StoreElementHoleT)
LStoreElementHoleT(const LAllocation& object, const LAllocation& elements,
- const LAllocation& index, const LAllocation& value,
- const LDefinition& temp) {
+ const LAllocation& index, const LAllocation& value) {
setOperand(0, object);
setOperand(1, elements);
setOperand(2, index);
setOperand(3, value);
- setTemp(0, temp);
}
const MStoreElementHole* mir() const {
@@ -5800,19 +5705,17 @@ class LStoreElementHoleT : public LInstructionHelper<0, 4, 1>
};
// Like LStoreElementV, but can just ignore assignment (for eg. frozen objects)
-class LFallibleStoreElementV : public LInstructionHelper<0, 3 + BOX_PIECES, 1>
+class LFallibleStoreElementV : public LInstructionHelper<0, 3 + BOX_PIECES, 0>
{
public:
LIR_HEADER(FallibleStoreElementV)
LFallibleStoreElementV(const LAllocation& object, const LAllocation& elements,
- const LAllocation& index, const LBoxAllocation& value,
- const LDefinition& temp) {
+ const LAllocation& index, const LBoxAllocation& value) {
setOperand(0, object);
setOperand(1, elements);
setOperand(2, index);
setBoxOperand(Value, value);
- setTemp(0, temp);
}
static const size_t Value = 3;
@@ -5832,19 +5735,17 @@ class LFallibleStoreElementV : public LInstructionHelper<0, 3 + BOX_PIECES, 1>
};
// Like LStoreElementT, but can just ignore assignment (for eg. frozen objects)
-class LFallibleStoreElementT : public LInstructionHelper<0, 4, 1>
+class LFallibleStoreElementT : public LInstructionHelper<0, 4, 0>
{
public:
LIR_HEADER(FallibleStoreElementT)
LFallibleStoreElementT(const LAllocation& object, const LAllocation& elements,
- const LAllocation& index, const LAllocation& value,
- const LDefinition& temp) {
+ const LAllocation& index, const LAllocation& value) {
setOperand(0, object);
setOperand(1, elements);
setOperand(2, index);
setOperand(3, value);
- setTemp(0, temp);
}
const MFallibleStoreElement* mir() const {
diff --git a/js/src/jit/shared/LOpcodes-shared.h b/js/src/jit/shared/LOpcodes-shared.h
index 6912e8904..e260d7e94 100644
--- a/js/src/jit/shared/LOpcodes-shared.h
+++ b/js/src/jit/shared/LOpcodes-shared.h
@@ -69,7 +69,6 @@
_(NewArrayDynamicLength) \
_(NewTypedArray) \
_(NewTypedArrayDynamicLength) \
- _(ArraySplice) \
_(NewObject) \
_(NewTypedObject) \
_(NewNamedLambdaObject) \
@@ -267,10 +266,6 @@
_(PostWriteElementBarrierV) \
_(InitializedLength) \
_(SetInitializedLength) \
- _(UnboxedArrayLength) \
- _(UnboxedArrayInitializedLength) \
- _(IncrementUnboxedArrayInitializedLength) \
- _(SetUnboxedArrayInitializedLength) \
_(BoundsCheck) \
_(BoundsCheckRange) \
_(BoundsCheckLower) \
diff --git a/js/src/js.msg b/js/src/js.msg
index 4ded69a25..f57b36a90 100644
--- a/js/src/js.msg
+++ b/js/src/js.msg
@@ -63,6 +63,7 @@ MSG_DEF(JSMSG_SPREAD_TOO_LARGE, 0, JSEXN_RANGEERR, "array too large due t
MSG_DEF(JSMSG_BAD_WEAKMAP_KEY, 0, JSEXN_TYPEERR, "cannot use the given object as a weak map key")
MSG_DEF(JSMSG_BAD_GETTER_OR_SETTER, 1, JSEXN_TYPEERR, "invalid {0} usage")
MSG_DEF(JSMSG_BAD_ARRAY_LENGTH, 0, JSEXN_RANGEERR, "invalid array length")
+MSG_DEF(JSMSG_REDECLARED_PREV, 2, JSEXN_NOTE, "Previously declared at line {0}, column {1}")
MSG_DEF(JSMSG_REDECLARED_VAR, 2, JSEXN_SYNTAXERR, "redeclaration of {0} {1}")
MSG_DEF(JSMSG_UNDECLARED_VAR, 1, JSEXN_REFERENCEERR, "assignment to undeclared variable {0}")
MSG_DEF(JSMSG_GETTER_ONLY, 1, JSEXN_TYPEERR, "setting getter-only property {0}")
@@ -186,6 +187,7 @@ MSG_DEF(JSMSG_AS_AFTER_IMPORT_STAR, 0, JSEXN_SYNTAXERR, "missing keyword 'as'
MSG_DEF(JSMSG_AS_AFTER_RESERVED_WORD, 1, JSEXN_SYNTAXERR, "missing keyword 'as' after reserved word '{0}'")
MSG_DEF(JSMSG_ASYNC_GENERATOR, 0, JSEXN_SYNTAXERR, "generator function or method can't be async")
MSG_DEF(JSMSG_AWAIT_IN_DEFAULT, 0, JSEXN_SYNTAXERR, "await can't be used in default expression")
+MSG_DEF(JSMSG_AWAIT_OUTSIDE_ASYNC, 0, JSEXN_SYNTAXERR, "await is only valid in async functions")
MSG_DEF(JSMSG_BAD_ARROW_ARGS, 0, JSEXN_SYNTAXERR, "invalid arrow-function arguments (parentheses around the arrow-function may help)")
MSG_DEF(JSMSG_BAD_BINDING, 1, JSEXN_SYNTAXERR, "redefining {0} is deprecated")
MSG_DEF(JSMSG_BAD_CONST_DECL, 0, JSEXN_SYNTAXERR, "missing = in const declaration")
@@ -209,6 +211,8 @@ MSG_DEF(JSMSG_BAD_POW_LEFTSIDE, 0, JSEXN_SYNTAXERR, "unparenthesized unar
MSG_DEF(JSMSG_BAD_PROP_ID, 0, JSEXN_SYNTAXERR, "invalid property id")
MSG_DEF(JSMSG_BAD_RETURN_OR_YIELD, 1, JSEXN_SYNTAXERR, "{0} not in function")
MSG_DEF(JSMSG_BAD_STRICT_ASSIGN, 1, JSEXN_SYNTAXERR, "'{0}' can't be defined or assigned to in strict mode code")
+MSG_DEF(JSMSG_BAD_STRICT_ASSIGN_ARGUMENTS, 0, JSEXN_SYNTAXERR, "'arguments' can't be defined or assigned to in strict mode code")
+MSG_DEF(JSMSG_BAD_STRICT_ASSIGN_EVAL, 0, JSEXN_SYNTAXERR, "'eval' can't be defined or assigned to in strict mode code")
MSG_DEF(JSMSG_BAD_SWITCH, 0, JSEXN_SYNTAXERR, "invalid switch statement")
MSG_DEF(JSMSG_BAD_SUPER, 0, JSEXN_SYNTAXERR, "invalid use of keyword 'super'")
MSG_DEF(JSMSG_BAD_SUPERPROP, 1, JSEXN_SYNTAXERR, "use of super {0} accesses only valid within methods or eval code within methods")
@@ -216,6 +220,7 @@ MSG_DEF(JSMSG_BAD_SUPERCALL, 0, JSEXN_SYNTAXERR, "super() is only vali
MSG_DEF(JSMSG_BRACKET_AFTER_ARRAY_COMPREHENSION, 0, JSEXN_SYNTAXERR, "missing ] after array comprehension")
MSG_DEF(JSMSG_BRACKET_AFTER_LIST, 0, JSEXN_SYNTAXERR, "missing ] after element list")
MSG_DEF(JSMSG_BRACKET_IN_INDEX, 0, JSEXN_SYNTAXERR, "missing ] in index expression")
+MSG_DEF(JSMSG_BRACKET_OPENED, 2, JSEXN_NOTE, "[ opened at line {0}, column {1}")
MSG_DEF(JSMSG_CATCH_AFTER_GENERAL, 0, JSEXN_SYNTAXERR, "catch after unconditional catch")
MSG_DEF(JSMSG_CATCH_IDENTIFIER, 0, JSEXN_SYNTAXERR, "missing identifier in catch")
MSG_DEF(JSMSG_CATCH_OR_FINALLY, 0, JSEXN_SYNTAXERR, "missing catch or finally after try")
@@ -226,6 +231,7 @@ MSG_DEF(JSMSG_COLON_IN_COND, 0, JSEXN_SYNTAXERR, "missing : in conditi
MSG_DEF(JSMSG_COMP_PROP_UNTERM_EXPR, 0, JSEXN_SYNTAXERR, "missing ] in computed property name")
MSG_DEF(JSMSG_CONTRARY_NONDIRECTIVE, 1, JSEXN_SYNTAXERR, "'{0}' statement won't be enforced as a directive because it isn't in directive prologue position")
MSG_DEF(JSMSG_CURLY_AFTER_BODY, 0, JSEXN_SYNTAXERR, "missing } after function body")
+MSG_DEF(JSMSG_CURLY_OPENED, 2, JSEXN_NOTE, "{ opened at line {0}, column {1}")
MSG_DEF(JSMSG_CURLY_AFTER_CATCH, 0, JSEXN_SYNTAXERR, "missing } after catch block")
MSG_DEF(JSMSG_CURLY_AFTER_FINALLY, 0, JSEXN_SYNTAXERR, "missing } after finally block")
MSG_DEF(JSMSG_CURLY_AFTER_LIST, 0, JSEXN_SYNTAXERR, "missing } after property list")
@@ -264,6 +270,7 @@ MSG_DEF(JSMSG_IMPORT_DECL_AT_TOP_LEVEL, 0, JSEXN_SYNTAXERR, "import declarations
MSG_DEF(JSMSG_OF_AFTER_FOR_LOOP_DECL, 0, JSEXN_SYNTAXERR, "a declaration in the head of a for-of loop can't have an initializer")
MSG_DEF(JSMSG_IN_AFTER_LEXICAL_FOR_DECL,0,JSEXN_SYNTAXERR, "a lexical declaration in the head of a for-in loop can't have an initializer")
MSG_DEF(JSMSG_INVALID_FOR_IN_DECL_WITH_INIT,0,JSEXN_SYNTAXERR,"for-in loop head declarations may not have initializers")
+MSG_DEF(JSMSG_INVALID_ID, 1, JSEXN_SYNTAXERR, "{0} is an invalid identifier")
MSG_DEF(JSMSG_LABEL_NOT_FOUND, 0, JSEXN_SYNTAXERR, "label not found")
MSG_DEF(JSMSG_LET_COMP_BINDING, 0, JSEXN_SYNTAXERR, "'let' is not a valid name for a comprehension variable")
MSG_DEF(JSMSG_LEXICAL_DECL_NOT_IN_BLOCK, 1, JSEXN_SYNTAXERR, "{0} declaration not directly within block")
@@ -501,7 +508,7 @@ MSG_DEF(JSMSG_RANGE_WITH_CLASS_ESCAPE, 0, JSEXN_SYNTAXERR, "character class esca
MSG_DEF(JSMSG_RAW_BRACE_IN_REGEP, 0, JSEXN_SYNTAXERR, "raw brace is not allowed in regular expression with unicode flag")
MSG_DEF(JSMSG_RAW_BRACKET_IN_REGEP, 0, JSEXN_SYNTAXERR, "raw bracket is not allowed in regular expression with unicode flag")
MSG_DEF(JSMSG_TOO_MANY_PARENS, 0, JSEXN_INTERNALERR, "too many parentheses in regular expression")
-MSG_DEF(JSMSG_UNICODE_OVERFLOW, 0, JSEXN_SYNTAXERR, "unicode codepoint should not be greater than 0x10FFFF in regular expression")
+MSG_DEF(JSMSG_UNICODE_OVERFLOW, 1, JSEXN_SYNTAXERR, "Unicode codepoint must not be greater than 0x10FFFF in {0}")
MSG_DEF(JSMSG_UNMATCHED_RIGHT_PAREN, 0, JSEXN_SYNTAXERR, "unmatched ) in regular expression")
MSG_DEF(JSMSG_UNTERM_CLASS, 0, JSEXN_SYNTAXERR, "unterminated character class")
diff --git a/js/src/jsapi-tests/moz.build b/js/src/jsapi-tests/moz.build
index 277a145b0..c176fbf0a 100644
--- a/js/src/jsapi-tests/moz.build
+++ b/js/src/jsapi-tests/moz.build
@@ -37,6 +37,7 @@ UNIFIED_SOURCES += [
'testForOfIterator.cpp',
'testForwardSetProperty.cpp',
'testFreshGlobalEvalRedefinition.cpp',
+ 'testFunctionBinding.cpp',
'testFunctionProperties.cpp',
'testGCAllocator.cpp',
'testGCCellPtr.cpp',
diff --git a/js/src/jsapi-tests/testFunctionBinding.cpp b/js/src/jsapi-tests/testFunctionBinding.cpp
new file mode 100644
index 000000000..33632db14
--- /dev/null
+++ b/js/src/jsapi-tests/testFunctionBinding.cpp
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sts=4 et sw=4 tw=99:
+ *
+ * Test function name binding.
+ */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "jsfriendapi.h"
+
+#include "jsapi-tests/tests.h"
+
+using namespace js;
+
+BEGIN_TEST(test_functionBinding)
+{
+ RootedFunction fun(cx);
+
+ JS::CompileOptions options(cx);
+ options.setFileAndLine(__FILE__, __LINE__);
+
+ // Named function shouldn't have it's binding.
+ const char s1chars[] = "return (typeof s1) == 'undefined';";
+ JS::AutoObjectVector emptyScopeChain(cx);
+ CHECK(JS::CompileFunction(cx, emptyScopeChain, options, "s1", 0, nullptr, s1chars,
+ strlen(s1chars), &fun));
+ CHECK(fun);
+
+ JS::AutoValueVector args(cx);
+ RootedValue rval(cx);
+ CHECK(JS::Call(cx, UndefinedHandleValue, fun, args, &rval));
+ CHECK(rval.isBoolean());
+ CHECK(rval.toBoolean());
+
+ // Named function shouldn't have `anonymous` binding.
+ const char s2chars[] = "return (typeof anonymous) == 'undefined';";
+ CHECK(JS::CompileFunction(cx, emptyScopeChain, options, "s2", 0, nullptr, s2chars,
+ strlen(s2chars), &fun));
+ CHECK(fun);
+
+ CHECK(JS::Call(cx, UndefinedHandleValue, fun, args, &rval));
+ CHECK(rval.isBoolean());
+ CHECK(rval.toBoolean());
+
+ // Anonymous function shouldn't have `anonymous` binding.
+ const char s3chars[] = "return (typeof anonymous) == 'undefined';";
+ CHECK(JS::CompileFunction(cx, emptyScopeChain, options, nullptr, 0, nullptr, s3chars,
+ strlen(s3chars), &fun));
+ CHECK(fun);
+
+ CHECK(JS::Call(cx, UndefinedHandleValue, fun, args, &rval));
+ CHECK(rval.isBoolean());
+ CHECK(rval.toBoolean());
+
+ return true;
+}
+END_TEST(test_functionBinding)
diff --git a/js/src/jsapi-tests/testUbiNode.cpp b/js/src/jsapi-tests/testUbiNode.cpp
index 075e777d6..00b1253e7 100644
--- a/js/src/jsapi-tests/testUbiNode.cpp
+++ b/js/src/jsapi-tests/testUbiNode.cpp
@@ -646,7 +646,7 @@ BEGIN_TEST(test_JS_ubi_Node_scriptFilename)
CHECK(obj->is<JSFunction>());
JS::RootedFunction func(cx, &obj->as<JSFunction>());
- JS::RootedScript script(cx, func->getOrCreateScript(cx));
+ JS::RootedScript script(cx, JSFunction::getOrCreateScript(cx, func));
CHECK(script);
CHECK(script->filename());
diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp
index 9ee29ffe4..84a315587 100644
--- a/js/src/jsapi.cpp
+++ b/js/src/jsapi.cpp
@@ -69,7 +69,6 @@
#include "js/Proxy.h"
#include "js/SliceBudget.h"
#include "js/StructuredClone.h"
-#include "js/UniquePtr.h"
#include "js/Utility.h"
#include "vm/AsyncFunction.h"
#include "vm/DateObject.h"
@@ -1022,7 +1021,7 @@ JS_ResolveStandardClass(JSContext* cx, HandleObject obj, HandleId id, bool* reso
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
*resolved = false;
if (!JSID_IS_ATOM(id))
@@ -1066,10 +1065,7 @@ JS_ResolveStandardClass(JSContext* cx, HandleObject obj, HandleId id, bool* reso
// more way: its prototype chain is lazily initialized. That is,
// global->getProto() might be null right now because we haven't created
// Object.prototype yet. Force it now.
- if (!global->getOrCreateObjectPrototype(cx))
- return false;
-
- return true;
+ return GlobalObject::getOrCreateObjectPrototype(cx, global);
}
JS_PUBLIC_API(bool)
@@ -1102,8 +1098,7 @@ JS_EnumerateStandardClasses(JSContext* cx, HandleObject obj)
AssertHeapIsIdle(cx);
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
- MOZ_ASSERT(obj->is<GlobalObject>());
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
return GlobalObject::initStandardClasses(cx, global);
}
@@ -1159,7 +1154,8 @@ JS_GetObjectPrototype(JSContext* cx, HandleObject forObj)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, forObj);
- return forObj->global().getOrCreateObjectPrototype(cx);
+ Rooted<GlobalObject*> global(cx, &forObj->global());
+ return GlobalObject::getOrCreateObjectPrototype(cx, global);
}
JS_PUBLIC_API(JSObject*)
@@ -1167,7 +1163,8 @@ JS_GetFunctionPrototype(JSContext* cx, HandleObject forObj)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, forObj);
- return forObj->global().getOrCreateFunctionPrototype(cx);
+ Rooted<GlobalObject*> global(cx, &forObj->global());
+ return GlobalObject::getOrCreateFunctionPrototype(cx, global);
}
JS_PUBLIC_API(JSObject*)
@@ -3489,7 +3486,7 @@ CreateNonSyntacticEnvironmentChain(JSContext* cx, AutoObjectVector& envChain,
// declaration was qualified by "var". There is only sadness.
//
// See JSObject::isQualifiedVarObj.
- if (!env->setQualifiedVarObj(cx))
+ if (!JSObject::setQualifiedVarObj(cx, env))
return false;
// Also get a non-syntactic lexical environment to capture 'let' and
@@ -3549,7 +3546,7 @@ CloneFunctionObject(JSContext* cx, HandleObject funobj, HandleObject env, Handle
RootedFunction fun(cx, &funobj->as<JSFunction>());
if (fun->isInterpretedLazy()) {
AutoCompartment ac(cx, funobj);
- if (!fun->getOrCreateScript(cx))
+ if (!JSFunction::getOrCreateScript(cx, fun))
return nullptr;
}
@@ -3581,7 +3578,7 @@ CloneFunctionObject(JSContext* cx, HandleObject funobj, HandleObject env, Handle
// Fail here if we OOM during debug asserting.
// CloneFunctionReuseScript will delazify the script anyways, so we
// are not creating an extra failure condition for DEBUG builds.
- if (!fun->getOrCreateScript(cx))
+ if (!JSFunction::getOrCreateScript(cx, fun))
return nullptr;
MOZ_ASSERT(scope->as<GlobalScope>().isSyntactic() ||
fun->nonLazyScript()->hasNonSyntacticScope());
@@ -4234,7 +4231,7 @@ JS_GetFunctionScript(JSContext* cx, HandleFunction fun)
return nullptr;
if (fun->isInterpretedLazy()) {
AutoCompartment funCompartment(cx, fun);
- JSScript* script = fun->getOrCreateScript(cx);
+ JSScript* script = JSFunction::getOrCreateScript(cx, fun);
if (!script)
MOZ_CRASH();
return script;
@@ -4405,14 +4402,15 @@ JS_DecompileScript(JSContext* cx, HandleScript script, const char* name, unsigne
AssertHeapIsIdle(cx);
CHECK_REQUEST(cx);
- script->ensureNonLazyCanonicalFunction(cx);
+ script->ensureNonLazyCanonicalFunction();
RootedFunction fun(cx, script->functionNonDelazifying());
if (fun)
return JS_DecompileFunction(cx, fun, indent);
bool haveSource = script->scriptSource()->hasSourceData();
if (!haveSource && !JSScript::loadSource(cx, script->scriptSource(), &haveSource))
return nullptr;
- return haveSource ? script->sourceData(cx) : NewStringCopyZ<CanGC>(cx, "[no source]");
+ return haveSource ? JSScript::sourceData(cx, script)
+ : NewStringCopyZ<CanGC>(cx, "[no source]");
}
JS_PUBLIC_API(JSString*)
@@ -4884,7 +4882,7 @@ JS::CallOriginalPromiseResolve(JSContext* cx, JS::HandleValue resolutionValue)
assertSameCompartment(cx, resolutionValue);
RootedObject promise(cx, PromiseObject::unforgeableResolve(cx, resolutionValue));
- MOZ_ASSERT_IF(promise, promise->is<PromiseObject>());
+ MOZ_ASSERT_IF(promise, CheckedUnwrap(promise)->is<PromiseObject>());
return promise;
}
@@ -4896,7 +4894,7 @@ JS::CallOriginalPromiseReject(JSContext* cx, JS::HandleValue rejectionValue)
assertSameCompartment(cx, rejectionValue);
RootedObject promise(cx, PromiseObject::unforgeableReject(cx, rejectionValue));
- MOZ_ASSERT_IF(promise, promise->is<PromiseObject>());
+ MOZ_ASSERT_IF(promise, CheckedUnwrap(promise)->is<PromiseObject>());
return promise;
}
@@ -4926,8 +4924,8 @@ ResolveOrRejectPromise(JSContext* cx, JS::HandleObject promiseObj, JS::HandleVal
}
return reject
- ? promise->reject(cx, resultOrReason)
- : promise->resolve(cx, resultOrReason);
+ ? PromiseObject::reject(cx, promise, resultOrReason)
+ : PromiseObject::resolve(cx, promise, resultOrReason);
}
JS_PUBLIC_API(bool)
@@ -6014,7 +6012,8 @@ JS_SetRegExpInput(JSContext* cx, HandleObject obj, HandleString input)
CHECK_REQUEST(cx);
assertSameCompartment(cx, input);
- RegExpStatics* res = obj->as<GlobalObject>().getRegExpStatics(cx);
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ RegExpStatics* res = GlobalObject::getRegExpStatics(cx, global);
if (!res)
return false;
@@ -6029,7 +6028,8 @@ JS_ClearRegExpStatics(JSContext* cx, HandleObject obj)
CHECK_REQUEST(cx);
MOZ_ASSERT(obj);
- RegExpStatics* res = obj->as<GlobalObject>().getRegExpStatics(cx);
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ RegExpStatics* res = GlobalObject::getRegExpStatics(cx, global);
if (!res)
return false;
@@ -6044,7 +6044,8 @@ JS_ExecuteRegExp(JSContext* cx, HandleObject obj, HandleObject reobj, char16_t*
AssertHeapIsIdle(cx);
CHECK_REQUEST(cx);
- RegExpStatics* res = obj->as<GlobalObject>().getRegExpStatics(cx);
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ RegExpStatics* res = GlobalObject::getRegExpStatics(cx, global);
if (!res)
return false;
@@ -6052,7 +6053,7 @@ JS_ExecuteRegExp(JSContext* cx, HandleObject obj, HandleObject reobj, char16_t*
if (!input)
return false;
- return ExecuteRegExpLegacy(cx, res, reobj->as<RegExpObject>(), input, indexp, test, rval);
+ return ExecuteRegExpLegacy(cx, res, reobj.as<RegExpObject>(), input, indexp, test, rval);
}
JS_PUBLIC_API(bool)
@@ -6066,7 +6067,7 @@ JS_ExecuteRegExpNoStatics(JSContext* cx, HandleObject obj, char16_t* chars, size
if (!input)
return false;
- return ExecuteRegExpLegacy(cx, nullptr, obj->as<RegExpObject>(), input, indexp, test,
+ return ExecuteRegExpLegacy(cx, nullptr, obj.as<RegExpObject>(), input, indexp, test,
rval);
}
@@ -6298,7 +6299,7 @@ JSErrorReport::freeLinebuf()
}
JSString*
-JSErrorReport::newMessageString(JSContext* cx)
+JSErrorBase::newMessageString(JSContext* cx)
{
if (!message_)
return cx->runtime()->emptyString;
@@ -6307,7 +6308,7 @@ JSErrorReport::newMessageString(JSContext* cx)
}
void
-JSErrorReport::freeMessage()
+JSErrorBase::freeMessage()
{
if (ownsMessage_) {
js_free((void*)message_.get());
@@ -6316,6 +6317,132 @@ JSErrorReport::freeMessage()
message_ = JS::ConstUTF8CharsZ();
}
+JSErrorNotes::JSErrorNotes()
+ : notes_()
+{}
+
+JSErrorNotes::~JSErrorNotes()
+{
+}
+
+static UniquePtr<JSErrorNotes::Note>
+CreateErrorNoteVA(ExclusiveContext* cx,
+ const char* filename, unsigned lineno, unsigned column,
+ JSErrorCallback errorCallback, void* userRef,
+ const unsigned errorNumber,
+ ErrorArgumentsType argumentsType, va_list ap)
+{
+ auto note = MakeUnique<JSErrorNotes::Note>();
+ if (!note)
+ return nullptr;
+
+ note->errorNumber = errorNumber;
+ note->filename = filename;
+ note->lineno = lineno;
+ note->column = column;
+
+ if (!ExpandErrorArgumentsVA(cx, errorCallback, userRef, errorNumber,
+ nullptr, argumentsType, note.get(), ap)) {
+ return nullptr;
+ }
+
+ return note;
+}
+
+bool
+JSErrorNotes::addNoteASCII(ExclusiveContext* cx,
+ const char* filename, unsigned lineno, unsigned column,
+ JSErrorCallback errorCallback, void* userRef,
+ const unsigned errorNumber, ...)
+{
+ va_list ap;
+ va_start(ap, errorNumber);
+ auto note = CreateErrorNoteVA(cx, filename, lineno, column, errorCallback, userRef,
+ errorNumber, ArgumentsAreASCII, ap);
+ va_end(ap);
+
+ if (!note)
+ return false;
+ if (!notes_.append(Move(note)))
+ return false;
+ return true;
+}
+
+bool
+JSErrorNotes::addNoteLatin1(ExclusiveContext* cx,
+ const char* filename, unsigned lineno, unsigned column,
+ JSErrorCallback errorCallback, void* userRef,
+ const unsigned errorNumber, ...)
+{
+ va_list ap;
+ va_start(ap, errorNumber);
+ auto note = CreateErrorNoteVA(cx, filename, lineno, column, errorCallback, userRef,
+ errorNumber, ArgumentsAreLatin1, ap);
+ va_end(ap);
+
+ if (!note)
+ return false;
+ if (!notes_.append(Move(note)))
+ return false;
+ return true;
+}
+
+bool
+JSErrorNotes::addNoteUTF8(ExclusiveContext* cx,
+ const char* filename, unsigned lineno, unsigned column,
+ JSErrorCallback errorCallback, void* userRef,
+ const unsigned errorNumber, ...)
+{
+ va_list ap;
+ va_start(ap, errorNumber);
+ auto note = CreateErrorNoteVA(cx, filename, lineno, column, errorCallback, userRef,
+ errorNumber, ArgumentsAreUTF8, ap);
+ va_end(ap);
+
+ if (!note)
+ return false;
+ if (!notes_.append(Move(note)))
+ return false;
+ return true;
+}
+
+size_t
+JSErrorNotes::length()
+{
+ return notes_.length();
+}
+
+UniquePtr<JSErrorNotes>
+JSErrorNotes::copy(JSContext* cx)
+{
+ auto copiedNotes = MakeUnique<JSErrorNotes>();
+ if (!copiedNotes)
+ return nullptr;
+
+ for (auto&& note : *this) {
+ js::UniquePtr<JSErrorNotes::Note> copied(CopyErrorNote(cx, note.get()));
+ if (!copied)
+ return nullptr;
+
+ if (!copiedNotes->notes_.append(Move(copied)))
+ return nullptr;
+ }
+
+ return copiedNotes;
+}
+
+JSErrorNotes::iterator
+JSErrorNotes::begin()
+{
+ return iterator(notes_.begin());
+}
+
+JSErrorNotes::iterator
+JSErrorNotes::end()
+{
+ return iterator(notes_.end());
+}
+
JS_PUBLIC_API(bool)
JS_ThrowStopIteration(JSContext* cx)
{
diff --git a/js/src/jsapi.h b/js/src/jsapi.h
index 005d2278e..67b3d4267 100644
--- a/js/src/jsapi.h
+++ b/js/src/jsapi.h
@@ -18,6 +18,7 @@
#include "mozilla/RefPtr.h"
#include "mozilla/Variant.h"
+#include <iterator>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
@@ -36,6 +37,7 @@
#include "js/Realm.h"
#include "js/RootingAPI.h"
#include "js/TracingAPI.h"
+#include "js/UniquePtr.h"
#include "js/Utility.h"
#include "js/Value.h"
#include "js/Vector.h"
@@ -652,6 +654,7 @@ typedef enum JSExnType {
JSEXN_WASMRUNTIMEERROR,
JSEXN_ERROR_LIMIT,
JSEXN_WARN = JSEXN_ERROR_LIMIT,
+ JSEXN_NOTE,
JSEXN_LIMIT
} JSExnType;
@@ -1093,7 +1096,6 @@ class JS_PUBLIC_API(ContextOptions) {
wasmAlwaysBaseline_(false),
throwOnAsmJSValidationFailure_(false),
nativeRegExp_(true),
- unboxedArrays_(false),
asyncStack_(true),
throwOnDebuggeeWouldRun_(true),
dumpStackOnDebuggeeWouldRun_(false),
@@ -1170,12 +1172,6 @@ class JS_PUBLIC_API(ContextOptions) {
return *this;
}
- bool unboxedArrays() const { return unboxedArrays_; }
- ContextOptions& setUnboxedArrays(bool flag) {
- unboxedArrays_ = flag;
- return *this;
- }
-
bool asyncStack() const { return asyncStack_; }
ContextOptions& setAsyncStack(bool flag) {
asyncStack_ = flag;
@@ -1238,7 +1234,6 @@ class JS_PUBLIC_API(ContextOptions) {
bool wasmAlwaysBaseline_ : 1;
bool throwOnAsmJSValidationFailure_ : 1;
bool nativeRegExp_ : 1;
- bool unboxedArrays_ : 1;
bool asyncStack_ : 1;
bool throwOnDebuggeeWouldRun_ : 1;
bool dumpStackOnDebuggeeWouldRun_ : 1;
@@ -5370,14 +5365,130 @@ JS_ReportOutOfMemory(JSContext* cx);
extern JS_PUBLIC_API(void)
JS_ReportAllocationOverflow(JSContext* cx);
-class JSErrorReport
+/**
+ * Base class that implements parts shared by JSErrorReport and
+ * JSErrorNotes::Note.
+ */
+class JSErrorBase
{
// The (default) error message.
// If ownsMessage_ is true, the it is freed in destructor.
JS::ConstUTF8CharsZ message_;
+ public:
+ JSErrorBase()
+ : filename(nullptr), lineno(0), column(0),
+ errorNumber(0),
+ ownsMessage_(false)
+ {}
+
+ ~JSErrorBase() {
+ freeMessage();
+ }
+
+ // Source file name, URL, etc., or null.
+ const char* filename;
+
+ // Source line number.
+ unsigned lineno;
+
+ // Zero-based column index in line.
+ unsigned column;
+
+ // the error number, e.g. see js.msg.
+ unsigned errorNumber;
+
+ private:
+ bool ownsMessage_ : 1;
+
+ public:
+ const JS::ConstUTF8CharsZ message() const {
+ return message_;
+ }
+
+ void initOwnedMessage(const char* messageArg) {
+ initBorrowedMessage(messageArg);
+ ownsMessage_ = true;
+ }
+ void initBorrowedMessage(const char* messageArg) {
+ MOZ_ASSERT(!message_);
+ message_ = JS::ConstUTF8CharsZ(messageArg, strlen(messageArg));
+ }
+
+ JSString* newMessageString(JSContext* cx);
+
+ private:
+ void freeMessage();
+};
+
+/**
+ * Notes associated with JSErrorReport.
+ */
+class JSErrorNotes
+{
+ public:
+ class Note : public JSErrorBase
+ {};
+
+ private:
+ // Stores pointers to each note.
+ js::Vector<js::UniquePtr<Note>, 1, js::SystemAllocPolicy> notes_;
+
+ public:
+ JSErrorNotes();
+ ~JSErrorNotes();
+
+ // Add an note to the given position.
+ bool addNoteASCII(js::ExclusiveContext* cx,
+ const char* filename, unsigned lineno, unsigned column,
+ JSErrorCallback errorCallback, void* userRef,
+ const unsigned errorNumber, ...);
+ bool addNoteLatin1(js::ExclusiveContext* cx,
+ const char* filename, unsigned lineno, unsigned column,
+ JSErrorCallback errorCallback, void* userRef,
+ const unsigned errorNumber, ...);
+ bool addNoteUTF8(js::ExclusiveContext* cx,
+ const char* filename, unsigned lineno, unsigned column,
+ JSErrorCallback errorCallback, void* userRef,
+ const unsigned errorNumber, ...);
+
+ size_t length();
+
+ // Create a deep copy of notes.
+ js::UniquePtr<JSErrorNotes> copy(JSContext* cx);
+
+ class iterator : public std::iterator<std::input_iterator_tag, js::UniquePtr<Note>>
+ {
+ js::UniquePtr<Note>* note_;
+ public:
+ explicit iterator(js::UniquePtr<Note>* note = nullptr) : note_(note)
+ {}
+
+ bool operator==(iterator other) const {
+ return note_ == other.note_;
+ }
+ bool operator!=(iterator other) const {
+ return !(*this == other);
+ }
+ iterator& operator++() {
+ note_++;
+ return *this;
+ }
+ reference operator*() {
+ return *note_;
+ }
+ };
+ iterator begin();
+ iterator end();
+};
+
+/**
+ * Describes a single error or warning that occurs in the execution of script.
+ */
+class JSErrorReport : public JSErrorBase
+{
// Offending source line without final '\n'.
- // If ownsLinebuf__ is true, the buffer is freed in destructor.
+ // If ownsLinebuf_ is true, the buffer is freed in destructor.
const char16_t* linebuf_;
// Number of chars in linebuf_. Does not include trailing '\0'.
@@ -5389,28 +5500,29 @@ class JSErrorReport
public:
JSErrorReport()
: linebuf_(nullptr), linebufLength_(0), tokenOffset_(0),
- filename(nullptr), lineno(0), column(0),
- flags(0), errorNumber(0),
- exnType(0), isMuted(false),
- ownsLinebuf_(false), ownsMessage_(false)
+ notes(nullptr),
+ flags(0), exnType(0), isMuted(false),
+ ownsLinebuf_(false)
{}
~JSErrorReport() {
freeLinebuf();
- freeMessage();
}
- const char* filename; /* source file name, URL, etc., or null */
- unsigned lineno; /* source line number */
- unsigned column; /* zero-based column index in line */
- unsigned flags; /* error/warning, etc. */
- unsigned errorNumber; /* the error number, e.g. see js.msg */
- int16_t exnType; /* One of the JSExnType constants */
- bool isMuted : 1; /* See the comment in ReadOnlyCompileOptions. */
+ // Associated notes, or nullptr if there's no note.
+ js::UniquePtr<JSErrorNotes> notes;
+
+ // error/warning, etc.
+ unsigned flags;
+
+ // One of the JSExnType constants.
+ int16_t exnType;
+
+ // See the comment in ReadOnlyCompileOptions.
+ bool isMuted : 1;
private:
bool ownsLinebuf_ : 1;
- bool ownsMessage_ : 1;
public:
const char16_t* linebuf() const {
@@ -5422,29 +5534,16 @@ class JSErrorReport
size_t tokenOffset() const {
return tokenOffset_;
}
- void initOwnedLinebuf(const char16_t* linebufArg, size_t linebufLengthArg, size_t tokenOffsetArg) {
+ void initOwnedLinebuf(const char16_t* linebufArg, size_t linebufLengthArg,
+ size_t tokenOffsetArg) {
initBorrowedLinebuf(linebufArg, linebufLengthArg, tokenOffsetArg);
ownsLinebuf_ = true;
}
- void initBorrowedLinebuf(const char16_t* linebufArg, size_t linebufLengthArg, size_t tokenOffsetArg);
- void freeLinebuf();
+ void initBorrowedLinebuf(const char16_t* linebufArg, size_t linebufLengthArg,
+ size_t tokenOffsetArg);
- const JS::ConstUTF8CharsZ message() const {
- return message_;
- }
-
- void initOwnedMessage(const char* messageArg) {
- initBorrowedMessage(messageArg);
- ownsMessage_ = true;
- }
- void initBorrowedMessage(const char* messageArg) {
- MOZ_ASSERT(!message_);
- message_ = JS::ConstUTF8CharsZ(messageArg, strlen(messageArg));
- }
-
- JSString* newMessageString(JSContext* cx);
-
- void freeMessage();
+ private:
+ void freeLinebuf();
};
/*
diff --git a/js/src/jsarray.cpp b/js/src/jsarray.cpp
index 3b4c957dc..e618c319f 100644
--- a/js/src/jsarray.cpp
+++ b/js/src/jsarray.cpp
@@ -45,7 +45,6 @@
#include "vm/Caches-inl.h"
#include "vm/Interpreter-inl.h"
#include "vm/NativeObject-inl.h"
-#include "vm/UnboxedObject-inl.h"
using namespace js;
using namespace js::gc;
@@ -64,7 +63,7 @@ using JS::ToUint32;
bool
JS::IsArray(JSContext* cx, HandleObject obj, IsArrayAnswer* answer)
{
- if (obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>()) {
+ if (obj->is<ArrayObject>()) {
*answer = IsArrayAnswer::Array;
return true;
}
@@ -100,11 +99,6 @@ js::GetLengthProperty(JSContext* cx, HandleObject obj, uint32_t* lengthp)
return true;
}
- if (obj->is<UnboxedArrayObject>()) {
- *lengthp = obj->as<UnboxedArrayObject>().length();
- return true;
- }
-
if (obj->is<ArgumentsObject>()) {
ArgumentsObject& argsobj = obj->as<ArgumentsObject>();
if (!argsobj.hasOverriddenLength()) {
@@ -253,18 +247,20 @@ static bool
GetElement(JSContext* cx, HandleObject obj, HandleObject receiver,
uint32_t index, bool* hole, MutableHandleValue vp)
{
- AssertGreaterThanZero(index);
- if (index < GetAnyBoxedOrUnboxedInitializedLength(obj)) {
- vp.set(GetAnyBoxedOrUnboxedDenseElement(obj, uint32_t(index)));
- if (!vp.isMagic(JS_ELEMENTS_HOLE)) {
- *hole = false;
- return true;
+ if (obj->isNative()) {
+ NativeObject* nobj = &obj->as<NativeObject>();
+ if (index < nobj->getDenseInitializedLength()) {
+ vp.set(nobj->getDenseElement(size_t(index)));
+ if (!vp.isMagic(JS_ELEMENTS_HOLE)) {
+ *hole = false;
+ return true;
+ }
}
- }
- if (obj->is<ArgumentsObject>()) {
- if (obj->as<ArgumentsObject>().maybeGetElement(uint32_t(index), vp)) {
- *hole = false;
- return true;
+ if (nobj->is<ArgumentsObject>() && index <= UINT32_MAX) {
+ if (nobj->as<ArgumentsObject>().maybeGetElement(uint32_t(index), vp)) {
+ *hole = false;
+ return true;
+ }
}
}
@@ -283,8 +279,8 @@ ElementAdder::append(JSContext* cx, HandleValue v)
{
MOZ_ASSERT(index_ < length_);
if (resObj_) {
- DenseElementResult result =
- SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, resObj_, index_, v.address(), 1);
+ NativeObject* resObj = &resObj_->as<NativeObject>();
+ DenseElementResult result = resObj->setOrExtendDenseElements(cx, index_, v.address(), 1);
if (result == DenseElementResult::Failure)
return false;
if (result == DenseElementResult::Incomplete) {
@@ -336,37 +332,31 @@ js::GetElementsWithAdder(JSContext* cx, HandleObject obj, HandleObject receiver,
return true;
}
-template <JSValueType Type>
-DenseElementResult
-GetBoxedOrUnboxedDenseElements(JSObject* aobj, uint32_t length, Value* vp)
+static bool
+GetDenseElements(NativeObject* aobj, uint32_t length, Value* vp)
{
MOZ_ASSERT(!ObjectMayHaveExtraIndexedProperties(aobj));
- if (length > GetBoxedOrUnboxedInitializedLength<Type>(aobj))
- return DenseElementResult::Incomplete;
+ if (length > aobj->getDenseInitializedLength())
+ return false;
for (size_t i = 0; i < length; i++) {
- vp[i] = GetBoxedOrUnboxedDenseElement<Type>(aobj, i);
+ vp[i] = aobj->getDenseElement(i);
// No other indexed properties so hole => undefined.
if (vp[i].isMagic(JS_ELEMENTS_HOLE))
vp[i] = UndefinedValue();
}
- return DenseElementResult::Success;
+ return true;
}
-DefineBoxedOrUnboxedFunctor3(GetBoxedOrUnboxedDenseElements,
- JSObject*, uint32_t, Value*);
-
bool
js::GetElements(JSContext* cx, HandleObject aobj, uint32_t length, Value* vp)
{
if (!ObjectMayHaveExtraIndexedProperties(aobj)) {
- GetBoxedOrUnboxedDenseElementsFunctor functor(aobj, length, vp);
- DenseElementResult result = CallBoxedOrUnboxedSpecialization(functor, aobj);
- if (result != DenseElementResult::Incomplete)
- return result == DenseElementResult::Success;
+ if (GetDenseElements(&aobj->as<NativeObject>(), length, vp))
+ return true;
}
if (aobj->is<ArgumentsObject>()) {
@@ -398,9 +388,9 @@ SetArrayElement(JSContext* cx, HandleObject obj, double index, HandleValue v)
{
MOZ_ASSERT(index >= 0);
- if ((obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>()) && !obj->isIndexed() && index <= UINT32_MAX) {
- DenseElementResult result =
- SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, obj, uint32_t(index), v.address(), 1);
+ if (obj->is<ArrayObject>() && !obj->isIndexed() && index <= UINT32_MAX) {
+ NativeObject* nobj = &obj->as<NativeObject>();
+ DenseElementResult result = nobj->setOrExtendDenseElements(cx, uint32_t(index), v.address(), 1);
if (result != DenseElementResult::Incomplete)
return result == DenseElementResult::Success;
}
@@ -520,24 +510,6 @@ struct ReverseIndexComparator
}
};
-bool
-js::CanonicalizeArrayLengthValue(JSContext* cx, HandleValue v, uint32_t* newLen)
-{
- double d;
-
- if (!ToUint32(cx, v, newLen))
- return false;
-
- if (!ToNumber(cx, v, &d))
- return false;
-
- if (d == *newLen)
- return true;
-
- JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_BAD_ARRAY_LENGTH);
- return false;
-}
-
/* ES6 draft rev 34 (2015 Feb 20) 9.4.2.4 ArraySetLength */
bool
js::ArraySetLength(JSContext* cx, Handle<ArrayObject*> arr, HandleId id,
@@ -559,12 +531,22 @@ js::ArraySetLength(JSContext* cx, Handle<ArrayObject*> arr, HandleId id,
} else {
// Step 2 is irrelevant in our implementation.
- // Steps 3-7.
- MOZ_ASSERT_IF(attrs & JSPROP_IGNORE_VALUE, value.isUndefined());
- if (!CanonicalizeArrayLengthValue(cx, value, &newLen))
+ // Step 3.
+ if (!ToUint32(cx, value, &newLen))
return false;
- // Step 8 is irrelevant in our implementation.
+ // Step 4.
+ double d;
+ if (!ToNumber(cx, value, &d))
+ return false;
+
+ // Step 5.
+ if (d != newLen) {
+ JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_BAD_ARRAY_LENGTH);
+ return false;
+ }
+
+ // Steps 6-8 are irrelevant in our implementation.
}
// Steps 9-11.
@@ -620,7 +602,7 @@ js::ArraySetLength(JSContext* cx, Handle<ArrayObject*> arr, HandleId id,
// for..in iteration over the array. Keys deleted before being reached
// during the iteration must not be visited, and suppressing them here
// would be too costly.
- ObjectGroup* arrGroup = arr->getGroup(cx);
+ ObjectGroup* arrGroup = JSObject::getGroup(cx, arr);
if (MOZ_UNLIKELY(!arrGroup))
return false;
if (!arr->isIndexed() && !MOZ_UNLIKELY(arrGroup->hasAllFlags(OBJECT_FLAG_ITERATED))) {
@@ -823,7 +805,7 @@ array_addProperty(JSContext* cx, HandleObject obj, HandleId id, HandleValue v)
static inline bool
ObjectMayHaveExtraIndexedOwnProperties(JSObject* obj)
{
- return (!obj->isNative() && !obj->is<UnboxedArrayObject>()) ||
+ return !obj->isNative() ||
obj->isIndexed() ||
obj->is<TypedArrayObject>() ||
ClassMayResolveId(*obj->runtimeFromAnyThread()->commonNames,
@@ -854,7 +836,7 @@ js::ObjectMayHaveExtraIndexedProperties(JSObject* obj)
if (ObjectMayHaveExtraIndexedOwnProperties(obj))
return true;
- if (GetAnyBoxedOrUnboxedInitializedLength(obj) != 0)
+ if (obj->as<NativeObject>().getDenseInitializedLength() != 0)
return true;
} while (true);
}
@@ -1064,31 +1046,32 @@ struct StringSeparatorOp
}
};
-template <typename SeparatorOp, JSValueType Type>
-static DenseElementResult
-ArrayJoinDenseKernel(JSContext* cx, SeparatorOp sepOp, HandleObject obj, uint32_t length,
+template <typename SeparatorOp>
+static bool
+ArrayJoinDenseKernel(JSContext* cx, SeparatorOp sepOp, HandleNativeObject obj, uint32_t length,
StringBuffer& sb, uint32_t* numProcessed)
{
// This loop handles all elements up to initializedLength. If
// length > initLength we rely on the second loop to add the
// other elements.
MOZ_ASSERT(*numProcessed == 0);
- uint32_t initLength = Min<uint32_t>(GetBoxedOrUnboxedInitializedLength<Type>(obj), length);
+ uint32_t initLength = Min<uint32_t>(obj->getDenseInitializedLength(),
+ length);
while (*numProcessed < initLength) {
if (!CheckForInterrupt(cx))
- return DenseElementResult::Failure;
+ return false;
- Value elem = GetBoxedOrUnboxedDenseElement<Type>(obj, *numProcessed);
+ Value elem = obj->as<NativeObject>().getDenseElement(*numProcessed);
if (elem.isString()) {
if (!sb.append(elem.toString()))
- return DenseElementResult::Failure;
+ return false;
} else if (elem.isNumber()) {
if (!NumberValueToStringBuffer(cx, elem, sb))
- return DenseElementResult::Failure;
+ return false;
} else if (elem.isBoolean()) {
if (!BooleanToStringBuffer(elem.toBoolean(), sb))
- return DenseElementResult::Failure;
+ return false;
} else if (elem.isObject() || elem.isSymbol()) {
/*
* Object stringifying could modify the initialized length or make
@@ -1104,33 +1087,13 @@ ArrayJoinDenseKernel(JSContext* cx, SeparatorOp sepOp, HandleObject obj, uint32_
}
if (++(*numProcessed) != length && !sepOp(cx, sb))
- return DenseElementResult::Failure;
+ return false;
}
- return DenseElementResult::Incomplete;
+ return true;
}
template <typename SeparatorOp>
-struct ArrayJoinDenseKernelFunctor {
- JSContext* cx;
- SeparatorOp sepOp;
- HandleObject obj;
- uint32_t length;
- StringBuffer& sb;
- uint32_t* numProcessed;
-
- ArrayJoinDenseKernelFunctor(JSContext* cx, SeparatorOp sepOp, HandleObject obj,
- uint32_t length, StringBuffer& sb, uint32_t* numProcessed)
- : cx(cx), sepOp(sepOp), obj(obj), length(length), sb(sb), numProcessed(numProcessed)
- {}
-
- template <JSValueType Type>
- DenseElementResult operator()() {
- return ArrayJoinDenseKernel<SeparatorOp, Type>(cx, sepOp, obj, length, sb, numProcessed);
- }
-};
-
-template <typename SeparatorOp>
static bool
ArrayJoinKernel(JSContext* cx, SeparatorOp sepOp, HandleObject obj, uint32_t length,
StringBuffer& sb)
@@ -1138,10 +1101,10 @@ ArrayJoinKernel(JSContext* cx, SeparatorOp sepOp, HandleObject obj, uint32_t len
uint32_t i = 0;
if (!ObjectMayHaveExtraIndexedProperties(obj)) {
- ArrayJoinDenseKernelFunctor<SeparatorOp> functor(cx, sepOp, obj, length, sb, &i);
- DenseElementResult result = CallBoxedOrUnboxedSpecialization(functor, obj);
- if (result == DenseElementResult::Failure)
+ if (!ArrayJoinDenseKernel<SeparatorOp>(cx, sepOp, obj.as<NativeObject>(), length, sb, &i))
+ {
return false;
+ }
}
if (i != length) {
@@ -1212,11 +1175,14 @@ js::array_join(JSContext* cx, unsigned argc, Value* vp)
// An optimized version of a special case of steps 7-11: when length==1 and
// the 0th element is a string, ToString() of that element is a no-op and
// so it can be immediately returned as the result.
- if (length == 1 && GetAnyBoxedOrUnboxedInitializedLength(obj) == 1) {
- Value elem0 = GetAnyBoxedOrUnboxedDenseElement(obj, 0);
- if (elem0.isString()) {
- args.rval().set(elem0);
- return true;
+ if (length == 1 && obj->isNative()) {
+ NativeObject* nobj = &obj->as<NativeObject>();
+ if (nobj->getDenseInitializedLength() == 1) {
+ Value elem0 = nobj->getDenseElement(0);
+ if (elem0.isString()) {
+ args.rval().set(elem0);
+ return true;
+ }
}
}
@@ -1259,7 +1225,7 @@ js::array_join(JSContext* cx, unsigned argc, Value* vp)
}
// Step 11
- JSString *str = sb.finishString();
+ JSString* str = sb.finishString();
if (!str)
return false;
@@ -1288,10 +1254,6 @@ array_toLocaleString(JSContext* cx, unsigned argc, Value* vp)
args.rval().setString(cx->names().empty);
return true;
}
- if (obj->is<UnboxedArrayObject>() && obj->as<UnboxedArrayObject>().length() == 0) {
- args.rval().setString(cx->names().empty);
- return true;
- }
AutoCycleDetector detector(cx, obj);
if (!detector.init())
@@ -1323,13 +1285,14 @@ InitArrayElements(JSContext* cx, HandleObject obj, uint32_t start,
if (count == 0)
return true;
- ObjectGroup* group = obj->getGroup(cx);
+ ObjectGroup* group = JSObject::getGroup(cx, obj);
if (!group)
return false;
if (!ObjectMayHaveExtraIndexedProperties(obj)) {
- DenseElementResult result =
- SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, obj, start, vector, count, updateTypes);
+ NativeObject* nobj = &obj->as<NativeObject>();
+ DenseElementResult result = nobj->setOrExtendDenseElements(cx, uint32_t(start), vector,
+ count, updateTypes);
if (result != DenseElementResult::Incomplete)
return result == DenseElementResult::Success;
}
@@ -1363,54 +1326,45 @@ InitArrayElements(JSContext* cx, HandleObject obj, uint32_t start,
return true;
}
-template <JSValueType Type>
-DenseElementResult
-ArrayReverseDenseKernel(JSContext* cx, HandleObject obj, uint32_t length)
+static DenseElementResult
+ArrayReverseDenseKernel(JSContext* cx, HandleNativeObject obj, uint32_t length)
{
/* An empty array or an array with no elements is already reversed. */
- if (length == 0 || GetBoxedOrUnboxedInitializedLength<Type>(obj) == 0)
+ if (length == 0 || obj->getDenseInitializedLength() == 0)
return DenseElementResult::Success;
- if (Type == JSVAL_TYPE_MAGIC) {
- if (obj->as<NativeObject>().denseElementsAreFrozen())
- return DenseElementResult::Incomplete;
+ if (obj->denseElementsAreFrozen())
+ return DenseElementResult::Incomplete;
- /*
- * It's actually surprisingly complicated to reverse an array due to the
- * orthogonality of array length and array capacity while handling
- * leading and trailing holes correctly. Reversing seems less likely to
- * be a common operation than other array mass-mutation methods, so for
- * now just take a probably-small memory hit (in the absence of too many
- * holes in the array at its start) and ensure that the capacity is
- * sufficient to hold all the elements in the array if it were full.
- */
- DenseElementResult result = obj->as<NativeObject>().ensureDenseElements(cx, length, 0);
- if (result != DenseElementResult::Success)
- return result;
+ /*
+ * It's actually surprisingly complicated to reverse an array due to the
+ * orthogonality of array length and array capacity while handling
+ * leading and trailing holes correctly. Reversing seems less likely to
+ * be a common operation than other array mass-mutation methods, so for
+ * now just take a probably-small memory hit (in the absence of too many
+ * holes in the array at its start) and ensure that the capacity is
+ * sufficient to hold all the elements in the array if it were full.
+ */
+ DenseElementResult result = obj->ensureDenseElements(cx, length, 0);
+ if (result != DenseElementResult::Success)
+ return result;
- /* Fill out the array's initialized length to its proper length. */
- obj->as<NativeObject>().ensureDenseInitializedLength(cx, length, 0);
- } else {
- // Unboxed arrays can only be reversed here if their initialized length
- // matches their actual length. Otherwise the reversal will place holes
- // at the beginning of the array, which we don't support.
- if (length != obj->as<UnboxedArrayObject>().initializedLength())
- return DenseElementResult::Incomplete;
- }
+ /* Fill out the array's initialized length to its proper length. */
+ obj->ensureDenseInitializedLength(cx, length, 0);
RootedValue origlo(cx), orighi(cx);
uint32_t lo = 0, hi = length - 1;
for (; lo < hi; lo++, hi--) {
- origlo = GetBoxedOrUnboxedDenseElement<Type>(obj, lo);
- orighi = GetBoxedOrUnboxedDenseElement<Type>(obj, hi);
- SetBoxedOrUnboxedDenseElementNoTypeChange<Type>(obj, lo, orighi);
+ origlo = obj->getDenseElement(lo);
+ orighi = obj->getDenseElement(hi);
+ obj->setDenseElement(lo, orighi);
if (orighi.isMagic(JS_ELEMENTS_HOLE) &&
!SuppressDeletedProperty(cx, obj, INT_TO_JSID(lo)))
{
return DenseElementResult::Failure;
}
- SetBoxedOrUnboxedDenseElementNoTypeChange<Type>(obj, hi, origlo);
+ obj->setDenseElement(hi, origlo);
if (origlo.isMagic(JS_ELEMENTS_HOLE) &&
!SuppressDeletedProperty(cx, obj, INT_TO_JSID(hi)))
{
@@ -1421,9 +1375,6 @@ ArrayReverseDenseKernel(JSContext* cx, HandleObject obj, uint32_t length)
return DenseElementResult::Success;
}
-DefineBoxedOrUnboxedFunctor3(ArrayReverseDenseKernel,
- JSContext*, HandleObject, uint32_t);
-
bool
js::array_reverse(JSContext* cx, unsigned argc, Value* vp)
{
@@ -1438,8 +1389,8 @@ js::array_reverse(JSContext* cx, unsigned argc, Value* vp)
return false;
if (!ObjectMayHaveExtraIndexedProperties(obj)) {
- ArrayReverseDenseKernelFunctor functor(cx, obj, len);
- DenseElementResult result = CallBoxedOrUnboxedSpecialization(functor, obj);
+ DenseElementResult result =
+ ArrayReverseDenseKernel(cx, obj.as<NativeObject>(), uint32_t(len));
if (result != DenseElementResult::Incomplete) {
/*
* Per ECMA-262, don't update the length of the array, even if the new
@@ -1711,11 +1662,11 @@ MatchNumericComparator(JSContext* cx, const Value& v)
if (!obj.is<JSFunction>())
return Match_None;
- JSFunction* fun = &obj.as<JSFunction>();
+ RootedFunction fun(cx, &obj.as<JSFunction>());
if (!fun->isInterpreted() || fun->isClassConstructor())
return Match_None;
- JSScript* script = fun->getOrCreateScript(cx);
+ JSScript* script = JSFunction::getOrCreateScript(cx, fun);
if (!script)
return Match_Failure;
@@ -2082,8 +2033,8 @@ js::array_push(JSContext* cx, unsigned argc, Value* vp)
if (!ObjectMayHaveExtraIndexedProperties(obj)) {
DenseElementResult result =
- SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, obj, length,
- args.array(), args.length());
+ obj->as<NativeObject>().setOrExtendDenseElements(cx, uint32_t(length),
+ args.array(), args.length());
if (result != DenseElementResult::Incomplete) {
if (result == DenseElementResult::Failure)
return false;
@@ -2091,14 +2042,8 @@ js::array_push(JSContext* cx, unsigned argc, Value* vp)
uint32_t newlength = length + args.length();
args.rval().setNumber(newlength);
- // SetOrExtendAnyBoxedOrUnboxedDenseElements takes care of updating the
- // length for boxed and unboxed arrays. Handle updates to the length of
- // non-arrays here.
- bool isArray;
- if (!IsArray(cx, obj, &isArray))
- return false;
-
- if (!isArray)
+ // Handle updates to the length of non-arrays here.
+ if (!obj->is<ArrayObject>())
return SetLengthProperty(cx, obj, newlength);
return true;
@@ -2154,73 +2099,74 @@ js::array_pop(JSContext* cx, unsigned argc, Value* vp)
return SetLengthProperty(cx, obj, index);
}
-template <JSValueType Type>
-static inline DenseElementResult
-ShiftMoveBoxedOrUnboxedDenseElements(JSObject* obj)
+void
+js::ArrayShiftMoveElements(NativeObject* obj)
{
- MOZ_ASSERT(HasBoxedOrUnboxedDenseElements<Type>(obj));
+ MOZ_ASSERT_IF(obj->is<ArrayObject>(), obj->as<ArrayObject>().lengthIsWritable());
+
+ size_t initlen = obj->getDenseInitializedLength();
+ MOZ_ASSERT(initlen > 0);
/*
* At this point the length and initialized length have already been
* decremented and the result fetched, so just shift the array elements
* themselves.
*/
- size_t initlen = GetBoxedOrUnboxedInitializedLength<Type>(obj);
- if (Type == JSVAL_TYPE_MAGIC) {
- obj->as<NativeObject>().moveDenseElementsNoPreBarrier(0, 1, initlen);
- } else {
- uint8_t* data = obj->as<UnboxedArrayObject>().elements();
- size_t elementSize = UnboxedTypeSize(Type);
- memmove(data, data + elementSize, initlen * elementSize);
- }
-
- return DenseElementResult::Success;
+ obj->moveDenseElementsNoPreBarrier(0, 1, initlen);
}
-DefineBoxedOrUnboxedFunctor1(ShiftMoveBoxedOrUnboxedDenseElements, JSObject*);
+static inline void
+SetInitializedLength(JSContext* cx, NativeObject* obj, size_t initlen)
+{
+ size_t oldInitlen = obj->getDenseInitializedLength();
+ obj->setDenseInitializedLength(initlen);
+ if (initlen < oldInitlen)
+ obj->shrinkElements(cx, initlen);
+}
-void
-js::ArrayShiftMoveElements(JSObject* obj)
+static DenseElementResult
+MoveDenseElements(JSContext* cx, NativeObject* obj, uint32_t dstStart, uint32_t srcStart,
+ uint32_t length)
{
- MOZ_ASSERT_IF(obj->is<ArrayObject>(), obj->as<ArrayObject>().lengthIsWritable());
+ if (obj->denseElementsAreFrozen())
+ return DenseElementResult::Incomplete;
+
+ if (!obj->maybeCopyElementsForWrite(cx))
+ return DenseElementResult::Failure;
+ obj->moveDenseElements(dstStart, srcStart, length);
- ShiftMoveBoxedOrUnboxedDenseElementsFunctor functor(obj);
- JS_ALWAYS_TRUE(CallBoxedOrUnboxedSpecialization(functor, obj) == DenseElementResult::Success);
+ return DenseElementResult::Success;
}
-template <JSValueType Type>
-DenseElementResult
+static DenseElementResult
ArrayShiftDenseKernel(JSContext* cx, HandleObject obj, MutableHandleValue rval)
{
if (ObjectMayHaveExtraIndexedProperties(obj))
return DenseElementResult::Incomplete;
- RootedObjectGroup group(cx, obj->getGroup(cx));
+ RootedObjectGroup group(cx, JSObject::getGroup(cx, obj));
if (MOZ_UNLIKELY(!group))
return DenseElementResult::Failure;
if (MOZ_UNLIKELY(group->hasAllFlags(OBJECT_FLAG_ITERATED)))
return DenseElementResult::Incomplete;
- size_t initlen = GetBoxedOrUnboxedInitializedLength<Type>(obj);
+ size_t initlen = obj->as<NativeObject>().getDenseInitializedLength();
if (initlen == 0)
return DenseElementResult::Incomplete;
- rval.set(GetBoxedOrUnboxedDenseElement<Type>(obj, 0));
+ rval.set(obj->as<NativeObject>().getDenseElement(0));
if (rval.isMagic(JS_ELEMENTS_HOLE))
rval.setUndefined();
- DenseElementResult result = MoveBoxedOrUnboxedDenseElements<Type>(cx, obj, 0, 1, initlen - 1);
+ DenseElementResult result = MoveDenseElements(cx, &obj->as<NativeObject>(), 0, 1, initlen - 1);
if (result != DenseElementResult::Success)
return result;
- SetBoxedOrUnboxedInitializedLength<Type>(cx, obj, initlen - 1);
+ SetInitializedLength(cx, obj.as<NativeObject>(), initlen - 1);
return DenseElementResult::Success;
}
-DefineBoxedOrUnboxedFunctor3(ArrayShiftDenseKernel,
- JSContext*, HandleObject, MutableHandleValue);
-
/* ES5 15.4.4.9 */
bool
js::array_shift(JSContext* cx, unsigned argc, Value* vp)
@@ -2252,8 +2198,7 @@ js::array_shift(JSContext* cx, unsigned argc, Value* vp)
uint32_t newlen = len - 1;
/* Fast paths. */
- ArrayShiftDenseKernelFunctor functor(cx, obj, args.rval());
- DenseElementResult result = CallBoxedOrUnboxedSpecialization(functor, obj);
+ DenseElementResult result = ArrayShiftDenseKernel(cx, obj, args.rval());
if (result != DenseElementResult::Incomplete) {
if (result == DenseElementResult::Failure)
return false;
@@ -2307,9 +2252,6 @@ js::array_unshift(JSContext* cx, unsigned argc, Value* vp)
if (args.length() > 0) {
/* Slide up the array to make room for all args at the bottom. */
if (length > 0) {
- // Only include a fast path for boxed arrays. Unboxed arrays can'nt
- // be optimized here because unshifting temporarily places holes at
- // the start of the array.
bool optimized = false;
do {
if (!obj->is<ArrayObject>())
@@ -2369,10 +2311,10 @@ js::array_unshift(JSContext* cx, unsigned argc, Value* vp)
}
/*
- * Returns true if this is a dense or unboxed array whose |count| properties
- * starting from |startingIndex| may be accessed (get, set, delete) directly
- * through its contiguous vector of elements without fear of getters, setters,
- * etc. along the prototype chain, or of enumerators requiring notification of
+ * Returns true if this is a dense array whose properties ending at |endIndex|
+ * (exclusive) may be accessed (get, set, delete) directly through its
+ * contiguous vector of elements without fear of getters, setters, etc. along
+ * the prototype chain, or of enumerators requiring notification of
* modifications.
*/
static inline bool
@@ -2383,11 +2325,11 @@ CanOptimizeForDenseStorage(HandleObject arr, uint32_t startingIndex, uint32_t co
return false;
/* There's no optimizing possible if it's not an array. */
- if (!arr->is<ArrayObject>() && !arr->is<UnboxedArrayObject>())
+ if (!arr->is<ArrayObject>())
return false;
/* If it's a frozen array, always pick the slow path */
- if (arr->is<ArrayObject>() && arr->as<ArrayObject>().denseElementsAreFrozen())
+ if (arr->as<ArrayObject>().denseElementsAreFrozen())
return false;
/*
@@ -2398,7 +2340,7 @@ CanOptimizeForDenseStorage(HandleObject arr, uint32_t startingIndex, uint32_t co
* deleted if a hole is moved from one location to another location not yet
* visited. See bug 690622.
*/
- ObjectGroup* arrGroup = arr->getGroup(cx);
+ ObjectGroup* arrGroup = JSObject::getGroup(cx, arr);
if (!arrGroup) {
cx->recoverFromOutOfMemory();
return false;
@@ -2419,14 +2361,23 @@ CanOptimizeForDenseStorage(HandleObject arr, uint32_t startingIndex, uint32_t co
* is subsumed by the initializedLength comparison.)
*/
return !ObjectMayHaveExtraIndexedProperties(arr) &&
- startingIndex + count <= GetAnyBoxedOrUnboxedInitializedLength(arr);
+ startingIndex + count <= arr->as<NativeObject>().getDenseInitializedLength();
}
-/* ES 2016 draft Mar 25, 2016 22.1.3.26. */
-bool
-js::array_splice(JSContext* cx, unsigned argc, Value* vp)
+static inline DenseElementResult
+CopyDenseElements(JSContext* cx, NativeObject* dst, NativeObject* src,
+ uint32_t dstStart, uint32_t srcStart, uint32_t length)
{
- return array_splice_impl(cx, argc, vp, true);
+ MOZ_ASSERT(dst->getDenseInitializedLength() == dstStart);
+ MOZ_ASSERT(src->getDenseInitializedLength() >= srcStart + length);
+ MOZ_ASSERT(dst->getDenseCapacity() >= dstStart + length);
+
+ dst->setDenseInitializedLength(dstStart + length);
+
+ const Value* vp = src->getDenseElements() + srcStart;
+ dst->initDenseElements(dstStart, vp, length);
+
+ return DenseElementResult::Success;
}
static inline bool
@@ -2458,8 +2409,8 @@ ArraySpliceCopy(JSContext* cx, HandleObject arr, HandleObject obj,
return SetLengthProperty(cx, arr, actualDeleteCount);
}
-bool
-js::array_splice_impl(JSContext* cx, unsigned argc, Value* vp, bool returnValueIsUsed)
+static bool
+array_splice_impl(JSContext* cx, unsigned argc, Value* vp, bool returnValueIsUsed)
{
AutoSPSEntry pseudoFrame(cx->runtime(), "Array.prototype.splice");
CallArgs args = CallArgsFromVp(argc, vp);
@@ -2520,7 +2471,9 @@ js::array_splice_impl(JSContext* cx, unsigned argc, Value* vp, bool returnValueI
/* Steps 10-11. */
DebugOnly<DenseElementResult> result =
- CopyAnyBoxedOrUnboxedDenseElements(cx, arr, obj, 0, actualStart, actualDeleteCount);
+ CopyDenseElements(cx, &arr->as<NativeObject>(),
+ &obj->as<NativeObject>(), 0,
+ actualStart, actualDeleteCount);
MOZ_ASSERT(result.value == DenseElementResult::Success);
/* Step 12 (implicit). */
@@ -2557,14 +2510,13 @@ js::array_splice_impl(JSContext* cx, unsigned argc, Value* vp, bool returnValueI
if (CanOptimizeForDenseStorage(obj, 0, len, cx)) {
/* Steps 15.a-b. */
DenseElementResult result =
- MoveAnyBoxedOrUnboxedDenseElements(cx, obj, targetIndex, sourceIndex,
- len - sourceIndex);
+ MoveDenseElements(cx, &obj->as<NativeObject>(), targetIndex, sourceIndex, len - sourceIndex);
MOZ_ASSERT(result != DenseElementResult::Incomplete);
if (result == DenseElementResult::Failure)
return false;
/* Steps 15.c-d. */
- SetAnyBoxedOrUnboxedInitializedLength(cx, obj, finalLength);
+ SetInitializedLength(cx, obj.as<NativeObject>(), finalLength);
} else {
/*
* This is all very slow if the length is very large. We don't yet
@@ -2644,15 +2596,15 @@ js::array_splice_impl(JSContext* cx, unsigned argc, Value* vp, bool returnValueI
if (CanOptimizeForDenseStorage(obj, len, itemCount - actualDeleteCount, cx)) {
DenseElementResult result =
- MoveAnyBoxedOrUnboxedDenseElements(cx, obj, actualStart + itemCount,
- actualStart + actualDeleteCount,
- len - (actualStart + actualDeleteCount));
+ MoveDenseElements(cx, &obj->as<NativeObject>(), actualStart + itemCount,
+ actualStart + actualDeleteCount,
+ len - (actualStart + actualDeleteCount));
MOZ_ASSERT(result != DenseElementResult::Incomplete);
if (result == DenseElementResult::Failure)
return false;
/* Steps 16.a-b. */
- SetAnyBoxedOrUnboxedInitializedLength(cx, obj, len + itemCount - actualDeleteCount);
+ SetInitializedLength(cx, obj.as<NativeObject>(), len + itemCount - actualDeleteCount);
} else {
RootedValue fromValue(cx);
for (double k = len - actualDeleteCount; k > actualStart; k--) {
@@ -2708,6 +2660,19 @@ js::array_splice_impl(JSContext* cx, unsigned argc, Value* vp, bool returnValueI
return true;
}
+/* ES 2016 draft Mar 25, 2016 22.1.3.26. */
+bool
+js::array_splice(JSContext* cx, unsigned argc, Value* vp)
+{
+ return array_splice_impl(cx, argc, vp, true);
+}
+
+static bool
+array_splice_noRetVal(JSContext* cx, unsigned argc, Value* vp)
+{
+ return array_splice_impl(cx, argc, vp, false);
+}
+
struct SortComparatorIndexes
{
bool operator()(uint32_t a, uint32_t b, bool* lessOrEqualp) {
@@ -2824,7 +2789,7 @@ SliceSlowly(JSContext* cx, HandleObject obj, HandleObject receiver,
}
static bool
-SliceSparse(JSContext* cx, HandleObject obj, uint32_t begin, uint32_t end, HandleObject result)
+SliceSparse(JSContext* cx, HandleObject obj, uint32_t begin, uint32_t end, HandleArrayObject result)
{
MOZ_ASSERT(begin <= end);
@@ -2874,26 +2839,28 @@ ArraySliceOrdinary(JSContext* cx, HandleObject obj, uint32_t length, uint32_t be
begin = end;
if (!ObjectMayHaveExtraIndexedProperties(obj)) {
- size_t initlen = GetAnyBoxedOrUnboxedInitializedLength(obj);
+ size_t initlen = obj->as<NativeObject>().getDenseInitializedLength();
size_t count = 0;
if (initlen > begin)
count = Min<size_t>(initlen - begin, end - begin);
- RootedObject narr(cx, NewFullyAllocatedArrayTryReuseGroup(cx, obj, count));
+ RootedArrayObject narr(cx, NewFullyAllocatedArrayTryReuseGroup(cx, obj, count));
if (!narr)
return false;
- SetAnyBoxedOrUnboxedArrayLength(cx, narr, end - begin);
+
+ MOZ_ASSERT(count >= narr->as<ArrayObject>().length());
+ narr->as<ArrayObject>().setLength(cx, count);
if (count) {
DebugOnly<DenseElementResult> result =
- CopyAnyBoxedOrUnboxedDenseElements(cx, narr, obj, 0, begin, count);
+ CopyDenseElements(cx, &narr->as<NativeObject>(), &obj->as<NativeObject>(), 0, begin, count);
MOZ_ASSERT(result.value == DenseElementResult::Success);
}
arr.set(narr);
return true;
}
- RootedObject narr(cx, NewPartlyAllocatedArrayTryReuseGroup(cx, obj, end - begin));
+ RootedArrayObject narr(cx, NewPartlyAllocatedArrayTryReuseGroup(cx, obj, end - begin));
if (!narr)
return false;
@@ -3010,11 +2977,10 @@ js::array_slice(JSContext* cx, unsigned argc, Value* vp)
return true;
}
-template <JSValueType Type>
-DenseElementResult
-ArraySliceDenseKernel(JSContext* cx, JSObject* obj, int32_t beginArg, int32_t endArg, JSObject* result)
+static bool
+ArraySliceDenseKernel(JSContext* cx, ArrayObject* arr, int32_t beginArg, int32_t endArg, ArrayObject* result)
{
- int32_t length = GetAnyBoxedOrUnboxedArrayLength(obj);
+ int32_t length = arr->length();
uint32_t begin = NormalizeSliceTerm(beginArg, length);
uint32_t end = NormalizeSliceTerm(endArg, length);
@@ -3022,33 +2988,33 @@ ArraySliceDenseKernel(JSContext* cx, JSObject* obj, int32_t beginArg, int32_t en
if (begin > end)
begin = end;
- size_t initlen = GetBoxedOrUnboxedInitializedLength<Type>(obj);
+ size_t initlen = arr->getDenseInitializedLength();
+ size_t count = Min<size_t>(initlen - begin, end - begin);
if (initlen > begin) {
- size_t count = Min<size_t>(initlen - begin, end - begin);
if (count) {
- DenseElementResult rv = EnsureBoxedOrUnboxedDenseElements<Type>(cx, result, count);
- if (rv != DenseElementResult::Success)
- return rv;
- CopyBoxedOrUnboxedDenseElements<Type, Type>(cx, result, obj, 0, begin, count);
+ if (!result->ensureElements(cx, count))
+ return false;
+ CopyDenseElements(cx, &result->as<NativeObject>(), &arr->as<NativeObject>(), 0, begin, count);
}
}
- SetAnyBoxedOrUnboxedArrayLength(cx, result, end - begin);
- return DenseElementResult::Success;
-}
+ MOZ_ASSERT(count >= result->length());
+ result->setLength(cx, count);
-DefineBoxedOrUnboxedFunctor5(ArraySliceDenseKernel,
- JSContext*, JSObject*, int32_t, int32_t, JSObject*);
+ return true;
+}
JSObject*
js::array_slice_dense(JSContext* cx, HandleObject obj, int32_t begin, int32_t end,
HandleObject result)
{
if (result && IsArraySpecies(cx, obj)) {
- ArraySliceDenseKernelFunctor functor(cx, obj, begin, end, result);
- DenseElementResult rv = CallBoxedOrUnboxedSpecialization(functor, result);
- MOZ_ASSERT(rv != DenseElementResult::Incomplete);
- return rv == DenseElementResult::Success ? result : nullptr;
+ if (!ArraySliceDenseKernel(cx, &obj->as<ArrayObject>(), begin, end,
+ &result->as<ArrayObject>()))
+ {
+ return nullptr;
+ }
+ return result;
}
// Slower path if the JIT wasn't able to allocate an object inline.
@@ -3079,7 +3045,7 @@ array_isArray(JSContext* cx, unsigned argc, Value* vp)
static bool
ArrayFromCallArgs(JSContext* cx, CallArgs& args, HandleObject proto = nullptr)
{
- JSObject* obj = NewCopiedArrayForCallingAllocationSite(cx, args.array(), args.length(), proto);
+ ArrayObject* obj = NewCopiedArrayForCallingAllocationSite(cx, args.array(), args.length(), proto);
if (!obj)
return false;
@@ -3124,6 +3090,15 @@ array_of(JSContext* cx, unsigned argc, Value* vp)
return true;
}
+const JSJitInfo js::array_splice_info = {
+ { (JSJitGetterOp)array_splice_noRetVal },
+ { 0 }, /* unused */
+ { 0 }, /* unused */
+ JSJitInfo::IgnoresReturnValueNative,
+ JSJitInfo::AliasEverything,
+ JSVAL_TYPE_UNDEFINED,
+};
+
static const JSFunctionSpec array_methods[] = {
#if JS_HAS_TOSOURCE
JS_FN(js_toSource_str, array_toSource, 0,0),
@@ -3139,7 +3114,7 @@ static const JSFunctionSpec array_methods[] = {
JS_INLINABLE_FN("pop", array_pop, 0,0, ArrayPop),
JS_INLINABLE_FN("shift", array_shift, 0,0, ArrayShift),
JS_FN("unshift", array_unshift, 1,0),
- JS_INLINABLE_FN("splice", array_splice, 2,0, ArraySplice),
+ JS_FNINFO("splice", array_splice, &array_splice_info, 2,0),
/* Pythonic sequence methods. */
JS_SELF_HOSTED_FN("concat", "ArrayConcat", 1,0),
@@ -3244,7 +3219,7 @@ ArrayConstructorImpl(JSContext* cx, CallArgs& args, bool isConstructor)
}
}
- JSObject* obj = NewPartlyAllocatedArrayForCallingAllocationSite(cx, length, proto);
+ ArrayObject* obj = NewPartlyAllocatedArrayForCallingAllocationSite(cx, length, proto);
if (!obj)
return false;
@@ -3270,7 +3245,7 @@ js::array_construct(JSContext* cx, unsigned argc, Value* vp)
return ArrayConstructorImpl(cx, args, /* isConstructor = */ false);
}
-JSObject*
+ArrayObject*
js::ArrayConstructorOneArg(JSContext* cx, HandleObjectGroup group, int32_t lengthInt)
{
if (lengthInt < 0) {
@@ -3286,7 +3261,7 @@ static JSObject*
CreateArrayPrototype(JSContext* cx, JSProtoKey key)
{
MOZ_ASSERT(key == JSProto_Array);
- RootedObject proto(cx, cx->global()->getOrCreateObjectPrototype(cx));
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, cx->global()));
if (!proto)
return nullptr;
@@ -3306,7 +3281,7 @@ CreateArrayPrototype(JSContext* cx, JSProtoKey key)
metadata));
if (!arrayProto ||
!JSObject::setSingleton(cx, arrayProto) ||
- !arrayProto->setDelegate(cx) ||
+ !JSObject::setDelegate(cx, arrayProto) ||
!AddLengthProperty(cx, arrayProto))
{
return nullptr;
@@ -3565,7 +3540,7 @@ js::NewDenseFullyAllocatedArrayWithTemplate(JSContext* cx, uint32_t length, JSOb
return arr;
}
-JSObject*
+ArrayObject*
js::NewDenseCopyOnWriteArray(JSContext* cx, HandleArrayObject templateObject, gc::InitialHeap heap)
{
MOZ_ASSERT(!gc::IsInsideNursery(templateObject));
@@ -3578,30 +3553,21 @@ js::NewDenseCopyOnWriteArray(JSContext* cx, HandleArrayObject templateObject, gc
return arr;
}
-// Return a new boxed or unboxed array with the specified length and allocated
-// capacity (up to maxLength), using the specified group if possible. If the
-// specified group cannot be used, ensure that the created array at least has
-// the given [[Prototype]].
+// Return a new array with the specified length and allocated capacity (up to
+// maxLength), using the specified group if possible. If the specified group
+// cannot be used, ensure that the created array at least has the given
+// [[Prototype]].
template <uint32_t maxLength>
-static inline JSObject*
+static inline ArrayObject*
NewArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup group, size_t length,
NewObjectKind newKind = GenericObject)
{
MOZ_ASSERT(newKind != SingletonObject);
- if (group->maybePreliminaryObjects())
- group->maybePreliminaryObjects()->maybeAnalyze(cx, group);
-
- if (group->shouldPreTenure() || group->maybePreliminaryObjects())
+ if (group->shouldPreTenure())
newKind = TenuredObject;
RootedObject proto(cx, group->proto().toObject());
- if (group->maybeUnboxedLayout()) {
- if (length > UnboxedArrayObject::MaximumCapacity)
- return NewArray<maxLength>(cx, length, proto, newKind);
- return UnboxedArrayObject::create(cx, group, length, newKind, maxLength);
- }
-
ArrayObject* res = NewArray<maxLength>(cx, length, proto, newKind);
if (!res)
return nullptr;
@@ -3613,20 +3579,17 @@ NewArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup group, size_t length
if (res->length() > INT32_MAX)
res->setLength(cx, res->length());
- if (PreliminaryObjectArray* preliminaryObjects = group->maybePreliminaryObjects())
- preliminaryObjects->registerNewObject(res);
-
return res;
}
-JSObject*
+ArrayObject*
js::NewFullyAllocatedArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup group, size_t length,
NewObjectKind newKind)
{
return NewArrayTryUseGroup<UINT32_MAX>(cx, group, length, newKind);
}
-JSObject*
+ArrayObject*
js::NewPartlyAllocatedArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup group, size_t length)
{
return NewArrayTryUseGroup<ArrayObject::EagerAllocationMaxLength>(cx, group, length);
@@ -3635,42 +3598,39 @@ js::NewPartlyAllocatedArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup g
// Return a new array with the default prototype and specified allocated
// capacity and length. If possible, try to reuse the group of the input
// object. The resulting array will either reuse the input object's group or
-// will have unknown property types. Additionally, the result will have the
-// same boxed/unboxed elements representation as the input object, unless
-// |length| is larger than the input object's initialized length (in which case
-// UnboxedArrayObject::MaximumCapacity might be exceeded).
+// will have unknown property types.
template <uint32_t maxLength>
-static inline JSObject*
-NewArrayTryReuseGroup(JSContext* cx, JSObject* obj, size_t length,
+static inline ArrayObject*
+NewArrayTryReuseGroup(JSContext* cx, HandleObject obj, size_t length,
NewObjectKind newKind = GenericObject)
{
- if (!obj->is<ArrayObject>() && !obj->is<UnboxedArrayObject>())
+ if (!obj->is<ArrayObject>())
return NewArray<maxLength>(cx, length, nullptr, newKind);
if (obj->staticPrototype() != cx->global()->maybeGetArrayPrototype())
return NewArray<maxLength>(cx, length, nullptr, newKind);
- RootedObjectGroup group(cx, obj->getGroup(cx));
+ RootedObjectGroup group(cx, JSObject::getGroup(cx, obj));
if (!group)
return nullptr;
return NewArrayTryUseGroup<maxLength>(cx, group, length, newKind);
}
-JSObject*
-js::NewFullyAllocatedArrayTryReuseGroup(JSContext* cx, JSObject* obj, size_t length,
+ArrayObject*
+js::NewFullyAllocatedArrayTryReuseGroup(JSContext* cx, HandleObject obj, size_t length,
NewObjectKind newKind)
{
return NewArrayTryReuseGroup<UINT32_MAX>(cx, obj, length, newKind);
}
-JSObject*
-js::NewPartlyAllocatedArrayTryReuseGroup(JSContext* cx, JSObject* obj, size_t length)
+ArrayObject*
+js::NewPartlyAllocatedArrayTryReuseGroup(JSContext* cx, HandleObject obj, size_t length)
{
return NewArrayTryReuseGroup<ArrayObject::EagerAllocationMaxLength>(cx, obj, length);
}
-JSObject*
+ArrayObject*
js::NewFullyAllocatedArrayForCallingAllocationSite(JSContext* cx, size_t length,
NewObjectKind newKind)
{
@@ -3680,7 +3640,7 @@ js::NewFullyAllocatedArrayForCallingAllocationSite(JSContext* cx, size_t length,
return NewArrayTryUseGroup<UINT32_MAX>(cx, group, length, newKind);
}
-JSObject*
+ArrayObject*
js::NewPartlyAllocatedArrayForCallingAllocationSite(JSContext* cx, size_t length, HandleObject proto)
{
RootedObjectGroup group(cx, ObjectGroup::callingAllocationSiteGroup(cx, JSProto_Array, proto));
@@ -3689,68 +3649,23 @@ js::NewPartlyAllocatedArrayForCallingAllocationSite(JSContext* cx, size_t length
return NewArrayTryUseGroup<ArrayObject::EagerAllocationMaxLength>(cx, group, length);
}
-bool
-js::MaybeAnalyzeBeforeCreatingLargeArray(ExclusiveContext* cx, HandleObjectGroup group,
- const Value* vp, size_t length)
-{
- static const size_t EagerPreliminaryObjectAnalysisThreshold = 800;
-
- // Force analysis to see if an unboxed array can be used when making a
- // sufficiently large array, to avoid excessive analysis and copying later
- // on. If this is the first array of its group that is being created, first
- // make a dummy array with the initial elements of the array we are about
- // to make, so there is some basis for the unboxed array analysis.
- if (length > EagerPreliminaryObjectAnalysisThreshold) {
- if (PreliminaryObjectArrayWithTemplate* objects = group->maybePreliminaryObjects()) {
- if (objects->empty()) {
- size_t nlength = Min<size_t>(length, 100);
- JSObject* obj = NewFullyAllocatedArrayTryUseGroup(cx, group, nlength);
- if (!obj)
- return false;
- DebugOnly<DenseElementResult> result =
- SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, obj, 0, vp, nlength,
- ShouldUpdateTypes::Update);
- MOZ_ASSERT(result.value == DenseElementResult::Success);
- }
- objects->maybeAnalyze(cx, group, /* forceAnalyze = */ true);
- }
- }
- return true;
-}
-
-JSObject*
+ArrayObject*
js::NewCopiedArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup group,
const Value* vp, size_t length, NewObjectKind newKind,
ShouldUpdateTypes updateTypes)
{
- if (!MaybeAnalyzeBeforeCreatingLargeArray(cx, group, vp, length))
- return nullptr;
-
- JSObject* obj = NewFullyAllocatedArrayTryUseGroup(cx, group, length, newKind);
+ ArrayObject* obj = NewFullyAllocatedArrayTryUseGroup(cx, group, length, newKind);
if (!obj)
return nullptr;
- DenseElementResult result =
- SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, obj, 0, vp, length, updateTypes);
+ DenseElementResult result = obj->setOrExtendDenseElements(cx, 0, vp, length, updateTypes);
if (result == DenseElementResult::Failure)
return nullptr;
- if (result == DenseElementResult::Success)
- return obj;
-
- MOZ_ASSERT(obj->is<UnboxedArrayObject>());
- if (!UnboxedArrayObject::convertToNative(cx->asJSContext(), obj))
- return nullptr;
-
- result = SetOrExtendBoxedOrUnboxedDenseElements<JSVAL_TYPE_MAGIC>(cx, obj, 0, vp, length,
- updateTypes);
- MOZ_ASSERT(result != DenseElementResult::Incomplete);
- if (result == DenseElementResult::Failure)
- return nullptr;
-
+ MOZ_ASSERT(result == DenseElementResult::Success);
return obj;
}
-JSObject*
+ArrayObject*
js::NewCopiedArrayForCallingAllocationSite(JSContext* cx, const Value* vp, size_t length,
HandleObject proto /* = nullptr */)
{
diff --git a/js/src/jsarray.h b/js/src/jsarray.h
index e22cde881..d0084731f 100644
--- a/js/src/jsarray.h
+++ b/js/src/jsarray.h
@@ -72,49 +72,37 @@ extern ArrayObject*
NewDenseFullyAllocatedArrayWithTemplate(JSContext* cx, uint32_t length, JSObject* templateObject);
/* Create a dense array with the same copy-on-write elements as another object. */
-extern JSObject*
+extern ArrayObject*
NewDenseCopyOnWriteArray(JSContext* cx, HandleArrayObject templateObject, gc::InitialHeap heap);
-// The methods below can create either boxed or unboxed arrays.
-
-extern JSObject*
+extern ArrayObject*
NewFullyAllocatedArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup group, size_t length,
NewObjectKind newKind = GenericObject);
-extern JSObject*
+extern ArrayObject*
NewPartlyAllocatedArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup group, size_t length);
-extern JSObject*
-NewFullyAllocatedArrayTryReuseGroup(JSContext* cx, JSObject* obj, size_t length,
+extern ArrayObject*
+NewFullyAllocatedArrayTryReuseGroup(JSContext* cx, HandleObject obj, size_t length,
NewObjectKind newKind = GenericObject);
-extern JSObject*
-NewPartlyAllocatedArrayTryReuseGroup(JSContext* cx, JSObject* obj, size_t length);
+extern ArrayObject*
+NewPartlyAllocatedArrayTryReuseGroup(JSContext* cx, HandleObject obj, size_t length);
-extern JSObject*
+extern ArrayObject*
NewFullyAllocatedArrayForCallingAllocationSite(JSContext* cx, size_t length,
NewObjectKind newKind = GenericObject);
-extern JSObject*
+extern ArrayObject*
NewPartlyAllocatedArrayForCallingAllocationSite(JSContext* cx, size_t length, HandleObject proto);
-enum class ShouldUpdateTypes
-{
- Update,
- DontUpdate
-};
-
-extern bool
-MaybeAnalyzeBeforeCreatingLargeArray(ExclusiveContext* cx, HandleObjectGroup group,
- const Value* vp, size_t length);
-
-extern JSObject*
+extern ArrayObject*
NewCopiedArrayTryUseGroup(ExclusiveContext* cx, HandleObjectGroup group,
const Value* vp, size_t length,
NewObjectKind newKind = GenericObject,
ShouldUpdateTypes updateTypes = ShouldUpdateTypes::Update);
-extern JSObject*
+extern ArrayObject*
NewCopiedArrayForCallingAllocationSite(JSContext* cx, const Value* vp, size_t length,
HandleObject proto = nullptr);
@@ -129,13 +117,6 @@ NewValuePair(JSContext* cx, const Value& val1, const Value& val2, MutableHandleV
extern bool
WouldDefinePastNonwritableLength(HandleNativeObject obj, uint32_t index);
-/*
- * Canonicalize |vp| to a uint32_t value potentially suitable for use as an
- * array length.
- */
-extern bool
-CanonicalizeArrayLengthValue(JSContext* cx, HandleValue v, uint32_t* canonicalized);
-
extern bool
GetLengthProperty(JSContext* cx, HandleObject obj, uint32_t* lengthp);
@@ -166,13 +147,10 @@ extern bool
array_pop(JSContext* cx, unsigned argc, js::Value* vp);
extern bool
-array_splice_impl(JSContext* cx, unsigned argc, js::Value* vp, bool pop);
-
-extern bool
array_join(JSContext* cx, unsigned argc, js::Value* vp);
extern void
-ArrayShiftMoveElements(JSObject* obj);
+ArrayShiftMoveElements(NativeObject* obj);
extern bool
array_shift(JSContext* cx, unsigned argc, js::Value* vp);
@@ -192,6 +170,8 @@ array_reverse(JSContext* cx, unsigned argc, js::Value* vp);
extern bool
array_splice(JSContext* cx, unsigned argc, js::Value* vp);
+extern const JSJitInfo array_splice_info;
+
/*
* Append the given (non-hole) value to the end of an array. The array must be
* a newborn array -- that is, one which has not been exposed to script for
@@ -202,7 +182,7 @@ array_splice(JSContext* cx, unsigned argc, js::Value* vp);
extern bool
NewbornArrayPush(JSContext* cx, HandleObject obj, const Value& v);
-extern JSObject*
+extern ArrayObject*
ArrayConstructorOneArg(JSContext* cx, HandleObjectGroup group, int32_t lengthInt);
#ifdef DEBUG
diff --git a/js/src/jsatom.cpp b/js/src/jsatom.cpp
index 2a3c58638..280ec3e9c 100644
--- a/js/src/jsatom.cpp
+++ b/js/src/jsatom.cpp
@@ -54,41 +54,9 @@ FOR_EACH_COMMON_PROPERTYNAME(CONST_CHAR_STR)
#undef CONST_CHAR_STR
/* Constant strings that are not atomized. */
-const char js_break_str[] = "break";
-const char js_case_str[] = "case";
-const char js_catch_str[] = "catch";
-const char js_class_str[] = "class";
-const char js_const_str[] = "const";
-const char js_continue_str[] = "continue";
-const char js_debugger_str[] = "debugger";
-const char js_default_str[] = "default";
-const char js_do_str[] = "do";
-const char js_else_str[] = "else";
-const char js_enum_str[] = "enum";
-const char js_export_str[] = "export";
-const char js_extends_str[] = "extends";
-const char js_finally_str[] = "finally";
-const char js_for_str[] = "for";
const char js_getter_str[] = "getter";
-const char js_if_str[] = "if";
-const char js_implements_str[] = "implements";
-const char js_import_str[] = "import";
-const char js_in_str[] = "in";
-const char js_instanceof_str[] = "instanceof";
-const char js_interface_str[] = "interface";
-const char js_package_str[] = "package";
-const char js_private_str[] = "private";
-const char js_protected_str[] = "protected";
-const char js_public_str[] = "public";
const char js_send_str[] = "send";
const char js_setter_str[] = "setter";
-const char js_switch_str[] = "switch";
-const char js_this_str[] = "this";
-const char js_try_str[] = "try";
-const char js_typeof_str[] = "typeof";
-const char js_void_str[] = "void";
-const char js_while_str[] = "while";
-const char js_with_str[] = "with";
// Use a low initial capacity for atom hash tables to avoid penalizing runtimes
// which create a small number of atoms.
diff --git a/js/src/jsatom.h b/js/src/jsatom.h
index 496dcbb4c..0a5fd3c14 100644
--- a/js/src/jsatom.h
+++ b/js/src/jsatom.h
@@ -142,44 +142,9 @@ FOR_EACH_COMMON_PROPERTYNAME(DECLARE_CONST_CHAR_STR)
#undef DECLARE_CONST_CHAR_STR
/* Constant strings that are not atomized. */
-extern const char js_break_str[];
-extern const char js_case_str[];
-extern const char js_catch_str[];
-extern const char js_class_str[];
-extern const char js_close_str[];
-extern const char js_const_str[];
-extern const char js_continue_str[];
-extern const char js_debugger_str[];
-extern const char js_default_str[];
-extern const char js_do_str[];
-extern const char js_else_str[];
-extern const char js_enum_str[];
-extern const char js_export_str[];
-extern const char js_extends_str[];
-extern const char js_finally_str[];
-extern const char js_for_str[];
extern const char js_getter_str[];
-extern const char js_if_str[];
-extern const char js_implements_str[];
-extern const char js_import_str[];
-extern const char js_in_str[];
-extern const char js_instanceof_str[];
-extern const char js_interface_str[];
-extern const char js_package_str[];
-extern const char js_private_str[];
-extern const char js_protected_str[];
-extern const char js_public_str[];
extern const char js_send_str[];
extern const char js_setter_str[];
-extern const char js_static_str[];
-extern const char js_super_str[];
-extern const char js_switch_str[];
-extern const char js_this_str[];
-extern const char js_try_str[];
-extern const char js_typeof_str[];
-extern const char js_void_str[];
-extern const char js_while_str[];
-extern const char js_with_str[];
namespace js {
diff --git a/js/src/jsbool.cpp b/js/src/jsbool.cpp
index c8109b02c..b2d07c628 100644
--- a/js/src/jsbool.cpp
+++ b/js/src/jsbool.cpp
@@ -137,14 +137,14 @@ js::InitBooleanClass(JSContext* cx, HandleObject obj)
{
MOZ_ASSERT(obj->isNative());
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
- Rooted<BooleanObject*> booleanProto(cx, global->createBlankPrototype<BooleanObject>(cx));
+ Rooted<BooleanObject*> booleanProto(cx, GlobalObject::createBlankPrototype<BooleanObject>(cx, global));
if (!booleanProto)
return nullptr;
booleanProto->setFixedSlot(BooleanObject::PRIMITIVE_VALUE_SLOT, BooleanValue(false));
- RootedFunction ctor(cx, global->createConstructor(cx, Boolean, cx->names().Boolean, 1));
+ RootedFunction ctor(cx, GlobalObject::createConstructor(cx, Boolean, cx->names().Boolean, 1));
if (!ctor)
return nullptr;
diff --git a/js/src/jscntxt.cpp b/js/src/jscntxt.cpp
index 31d62332d..e505a4b34 100644
--- a/js/src/jscntxt.cpp
+++ b/js/src/jscntxt.cpp
@@ -381,49 +381,16 @@ js::ReportUsageErrorASCII(JSContext* cx, HandleObject callee, const char* msg)
}
}
-bool
-js::PrintError(JSContext* cx, FILE* file, JS::ConstUTF8CharsZ toStringResult,
- JSErrorReport* report, bool reportWarnings)
-{
- MOZ_ASSERT(report);
-
- /* Conditionally ignore reported warnings. */
- if (JSREPORT_IS_WARNING(report->flags) && !reportWarnings)
- return false;
-
- char* prefix = nullptr;
- if (report->filename)
- prefix = JS_smprintf("%s:", report->filename);
- if (report->lineno) {
- char* tmp = prefix;
- prefix = JS_smprintf("%s%u:%u ", tmp ? tmp : "", report->lineno, report->column);
- JS_free(cx, tmp);
- }
- if (JSREPORT_IS_WARNING(report->flags)) {
- char* tmp = prefix;
- prefix = JS_smprintf("%s%swarning: ",
- tmp ? tmp : "",
- JSREPORT_IS_STRICT(report->flags) ? "strict " : "");
- JS_free(cx, tmp);
- }
-
- const char* message = toStringResult ? toStringResult.c_str() : report->message().c_str();
-
- /* embedded newlines -- argh! */
- const char* ctmp;
- while ((ctmp = strchr(message, '\n')) != 0) {
- ctmp++;
- if (prefix)
- fputs(prefix, file);
- fwrite(message, 1, ctmp - message, file);
- message = ctmp;
- }
-
- /* If there were no filename or lineno, the prefix might be empty */
- if (prefix)
- fputs(prefix, file);
- fputs(message, file);
+enum class PrintErrorKind {
+ Error,
+ Warning,
+ StrictWarning,
+ Note
+};
+static void
+PrintErrorLine(JSContext* cx, FILE* file, const char* prefix, JSErrorReport* report)
+{
if (const char16_t* linebuf = report->linebuf()) {
size_t n = report->linebufLength();
@@ -453,9 +420,96 @@ js::PrintError(JSContext* cx, FILE* file, JS::ConstUTF8CharsZ toStringResult,
}
fputc('^', file);
}
+}
+
+static void
+PrintErrorLine(JSContext* cx, FILE* file, const char* prefix, JSErrorNotes::Note* note)
+{
+}
+
+template <typename T>
+static bool
+PrintSingleError(JSContext* cx, FILE* file, JS::ConstUTF8CharsZ toStringResult,
+ T* report, PrintErrorKind kind)
+{
+ UniquePtr<char> prefix;
+ if (report->filename)
+ prefix.reset(JS_smprintf("%s:", report->filename));
+
+ if (report->lineno) {
+ UniquePtr<char> tmp(JS_smprintf("%s%u:%u ", prefix ? prefix.get() : "", report->lineno,
+ report->column));
+ prefix = Move(tmp);
+ }
+
+ if (kind != PrintErrorKind::Error) {
+ const char* kindPrefix = nullptr;
+ switch (kind) {
+ case PrintErrorKind::Error:
+ break;
+ case PrintErrorKind::Warning:
+ kindPrefix = "warning";
+ break;
+ case PrintErrorKind::StrictWarning:
+ kindPrefix = "strict warning";
+ break;
+ case PrintErrorKind::Note:
+ kindPrefix = "note";
+ break;
+ }
+
+ UniquePtr<char> tmp(JS_smprintf("%s%s: ", prefix ? prefix.get() : "", kindPrefix));
+ prefix = Move(tmp);
+ }
+
+ const char* message = toStringResult ? toStringResult.c_str() : report->message().c_str();
+
+ /* embedded newlines -- argh! */
+ const char* ctmp;
+ while ((ctmp = strchr(message, '\n')) != 0) {
+ ctmp++;
+ if (prefix)
+ fputs(prefix.get(), file);
+ fwrite(message, 1, ctmp - message, file);
+ message = ctmp;
+ }
+
+ /* If there were no filename or lineno, the prefix might be empty */
+ if (prefix)
+ fputs(prefix.get(), file);
+ fputs(message, file);
+
+ PrintErrorLine(cx, file, prefix.get(), report);
fputc('\n', file);
+
fflush(file);
- JS_free(cx, prefix);
+ return true;
+}
+
+bool
+js::PrintError(JSContext* cx, FILE* file, JS::ConstUTF8CharsZ toStringResult,
+ JSErrorReport* report, bool reportWarnings)
+{
+ MOZ_ASSERT(report);
+
+ /* Conditionally ignore reported warnings. */
+ if (JSREPORT_IS_WARNING(report->flags) && !reportWarnings)
+ return false;
+
+ PrintErrorKind kind = PrintErrorKind::Error;
+ if (JSREPORT_IS_WARNING(report->flags)) {
+ if (JSREPORT_IS_STRICT(report->flags))
+ kind = PrintErrorKind::StrictWarning;
+ else
+ kind = PrintErrorKind::Warning;
+ }
+ PrintSingleError(cx, file, toStringResult, report, kind);
+
+ if (report->notes) {
+ for (auto&& note : *report->notes)
+ PrintSingleError(cx, file, JS::ConstUTF8CharsZ(), note.get(), PrintErrorKind::Note);
+ }
+
return true;
}
@@ -557,6 +611,18 @@ class MOZ_RAII AutoMessageArgs
}
};
+static void
+SetExnType(JSErrorReport* reportp, int16_t exnType)
+{
+ reportp->exnType = exnType;
+}
+
+static void
+SetExnType(JSErrorNotes::Note* notep, int16_t exnType)
+{
+ // Do nothing for JSErrorNotes::Note.
+}
+
/*
* The arguments from ap need to be packaged up into an array and stored
* into the report struct.
@@ -568,12 +634,13 @@ class MOZ_RAII AutoMessageArgs
*
* Returns true if the expansion succeeds (can fail if out of memory).
*/
+template <typename T>
bool
-js::ExpandErrorArgumentsVA(ExclusiveContext* cx, JSErrorCallback callback,
+ExpandErrorArgumentsHelper(ExclusiveContext* cx, JSErrorCallback callback,
void* userRef, const unsigned errorNumber,
const char16_t** messageArgs,
ErrorArgumentsType argumentsType,
- JSErrorReport* reportp, va_list ap)
+ T* reportp, va_list ap)
{
const JSErrorFormatString* efs;
@@ -586,7 +653,7 @@ js::ExpandErrorArgumentsVA(ExclusiveContext* cx, JSErrorCallback callback,
}
if (efs) {
- reportp->exnType = efs->exnType;
+ SetExnType(reportp, efs->exnType);
MOZ_ASSERT_IF(argumentsType == ArgumentsAreASCII, JS::StringIsASCII(efs->format));
@@ -670,6 +737,28 @@ js::ExpandErrorArgumentsVA(ExclusiveContext* cx, JSErrorCallback callback,
}
bool
+js::ExpandErrorArgumentsVA(ExclusiveContext* cx, JSErrorCallback callback,
+ void* userRef, const unsigned errorNumber,
+ const char16_t** messageArgs,
+ ErrorArgumentsType argumentsType,
+ JSErrorReport* reportp, va_list ap)
+{
+ return ExpandErrorArgumentsHelper(cx, callback, userRef, errorNumber,
+ messageArgs, argumentsType, reportp, ap);
+}
+
+bool
+js::ExpandErrorArgumentsVA(ExclusiveContext* cx, JSErrorCallback callback,
+ void* userRef, const unsigned errorNumber,
+ const char16_t** messageArgs,
+ ErrorArgumentsType argumentsType,
+ JSErrorNotes::Note* notep, va_list ap)
+{
+ return ExpandErrorArgumentsHelper(cx, callback, userRef, errorNumber,
+ messageArgs, argumentsType, notep, ap);
+}
+
+bool
js::ReportErrorNumberVA(JSContext* cx, unsigned flags, JSErrorCallback callback,
void* userRef, const unsigned errorNumber,
ErrorArgumentsType argumentsType, va_list ap)
@@ -832,6 +921,52 @@ js::ReportValueErrorFlags(JSContext* cx, unsigned flags, const unsigned errorNum
return ok;
}
+JSObject*
+js::CreateErrorNotesArray(JSContext* cx, JSErrorReport* report)
+{
+ RootedArrayObject notesArray(cx, NewDenseEmptyArray(cx));
+ if (!notesArray)
+ return nullptr;
+
+ if (!report->notes)
+ return notesArray;
+
+ for (auto&& note : *report->notes) {
+ RootedPlainObject noteObj(cx, NewBuiltinClassInstance<PlainObject>(cx));
+ if (!noteObj)
+ return nullptr;
+
+ RootedString messageStr(cx, note->newMessageString(cx));
+ if (!messageStr)
+ return nullptr;
+ RootedValue messageVal(cx, StringValue(messageStr));
+ if (!DefineProperty(cx, noteObj, cx->names().message, messageVal))
+ return nullptr;
+
+ RootedValue filenameVal(cx);
+ if (note->filename) {
+ RootedString filenameStr(cx, NewStringCopyZ<CanGC>(cx, note->filename));
+ if (!filenameStr)
+ return nullptr;
+ filenameVal = StringValue(filenameStr);
+ }
+ if (!DefineProperty(cx, noteObj, cx->names().fileName, filenameVal))
+ return nullptr;
+
+ RootedValue linenoVal(cx, Int32Value(note->lineno));
+ if (!DefineProperty(cx, noteObj, cx->names().lineNumber, linenoVal))
+ return nullptr;
+ RootedValue columnVal(cx, Int32Value(note->column));
+ if (!DefineProperty(cx, noteObj, cx->names().columnNumber, columnVal))
+ return nullptr;
+
+ if (!NewbornArrayPush(cx, notesArray, ObjectValue(*noteObj)))
+ return nullptr;
+ }
+
+ return notesArray;
+}
+
const JSErrorFormatString js_ErrorFormatString[JSErr_Limit] = {
#define MSG_DEF(name, count, exception, format) \
{ #name, format, count, exception } ,
diff --git a/js/src/jscntxt.h b/js/src/jscntxt.h
index 0a2841242..8be3376cf 100644
--- a/js/src/jscntxt.h
+++ b/js/src/jscntxt.h
@@ -621,6 +621,13 @@ ExpandErrorArgumentsVA(ExclusiveContext* cx, JSErrorCallback callback,
ErrorArgumentsType argumentsType,
JSErrorReport* reportp, va_list ap);
+extern bool
+ExpandErrorArgumentsVA(ExclusiveContext* cx, JSErrorCallback callback,
+ void* userRef, const unsigned errorNumber,
+ const char16_t** messageArgs,
+ ErrorArgumentsType argumentsType,
+ JSErrorNotes::Note* notep, va_list ap);
+
/* |callee| requires a usage string provided by JS_DefineFunctionsWithHelp. */
extern void
ReportUsageErrorASCII(JSContext* cx, HandleObject callee, const char* msg);
@@ -678,6 +685,9 @@ ReportValueErrorFlags(JSContext* cx, unsigned flags, const unsigned errorNumber,
((void)ReportValueErrorFlags(cx, JSREPORT_ERROR, errorNumber, \
spindex, v, fallback, arg1, arg2))
+JSObject*
+CreateErrorNotesArray(JSContext* cx, JSErrorReport* report);
+
} /* namespace js */
extern const JSErrorFormatString js_ErrorFormatString[JSErr_Limit];
diff --git a/js/src/jscompartment.cpp b/js/src/jscompartment.cpp
index a48bb0ffe..d0caeb558 100644
--- a/js/src/jscompartment.cpp
+++ b/js/src/jscompartment.cpp
@@ -112,13 +112,6 @@ JSCompartment::~JSCompartment()
js_delete(nonSyntacticLexicalEnvironments_),
js_free(enumerators);
-#ifdef DEBUG
- // Avoid assertion destroying the unboxed layouts list if the embedding
- // leaked GC things.
- if (!rt->gc.shutdownCollectedEverything())
- unboxedLayouts.clear();
-#endif
-
runtime_->numCompartments--;
}
@@ -1082,18 +1075,18 @@ CreateLazyScriptsForCompartment(JSContext* cx)
// Create scripts for each lazy function, updating the list of functions to
// process with any newly exposed inner functions in created scripts.
// A function cannot be delazified until its outer script exists.
+ RootedFunction fun(cx);
for (size_t i = 0; i < lazyFunctions.length(); i++) {
- JSFunction* fun = &lazyFunctions[i]->as<JSFunction>();
+ fun = &lazyFunctions[i]->as<JSFunction>();
// lazyFunctions may have been populated with multiple functions for
// a lazy script.
if (!fun->isInterpretedLazy())
continue;
- LazyScript* lazy = fun->lazyScript();
- bool lazyScriptHadNoScript = !lazy->maybeScript();
+ bool lazyScriptHadNoScript = !fun->lazyScript()->maybeScript();
- JSScript* script = fun->getOrCreateScript(cx);
+ JSScript* script = JSFunction::getOrCreateScript(cx, fun);
if (!script)
return false;
if (lazyScriptHadNoScript && !AddInnerLazyFunctionsFromScript(script, lazyFunctions))
diff --git a/js/src/jscompartment.h b/js/src/jscompartment.h
index 98c8fe200..83c15da3b 100644
--- a/js/src/jscompartment.h
+++ b/js/src/jscompartment.h
@@ -529,9 +529,6 @@ struct JSCompartment
// table manages references from such typed objects to their buffers.
js::ObjectWeakMap* lazyArrayBuffers;
- // All unboxed layouts in the compartment.
- mozilla::LinkedList<js::UnboxedLayout> unboxedLayouts;
-
// WebAssembly state for the compartment.
js::wasm::Compartment wasm;
diff --git a/js/src/jsdate.cpp b/js/src/jsdate.cpp
index 52294a5df..c6a369e2d 100755
--- a/js/src/jsdate.cpp
+++ b/js/src/jsdate.cpp
@@ -3163,7 +3163,7 @@ js::DateConstructor(JSContext* cx, unsigned argc, Value* vp)
static JSObject*
CreateDatePrototype(JSContext* cx, JSProtoKey key)
{
- return cx->global()->createBlankPrototype(cx, &DateObject::protoClass_);
+ return GlobalObject::createBlankPrototype(cx, cx->global(), &DateObject::protoClass_);
}
static bool
diff --git a/js/src/jsexn.cpp b/js/src/jsexn.cpp
index 1e70a3890..65cc81a1a 100644
--- a/js/src/jsexn.cpp
+++ b/js/src/jsexn.cpp
@@ -201,28 +201,77 @@ ErrorObject::classes[JSEXN_ERROR_LIMIT] = {
IMPLEMENT_ERROR_CLASS(RuntimeError)
};
-JSErrorReport*
-js::CopyErrorReport(JSContext* cx, JSErrorReport* report)
+size_t
+ExtraMallocSize(JSErrorReport* report)
+{
+ if (report->linebuf())
+ return (report->linebufLength() + 1) * sizeof(char16_t);
+
+ return 0;
+}
+
+size_t
+ExtraMallocSize(JSErrorNotes::Note* note)
+{
+ return 0;
+}
+
+bool
+CopyExtraData(JSContext* cx, uint8_t** cursor, JSErrorReport* copy, JSErrorReport* report)
+{
+ if (report->linebuf()) {
+ size_t linebufSize = (report->linebufLength() + 1) * sizeof(char16_t);
+ const char16_t* linebufCopy = (const char16_t*)(*cursor);
+ js_memcpy(*cursor, report->linebuf(), linebufSize);
+ *cursor += linebufSize;
+ copy->initBorrowedLinebuf(linebufCopy, report->linebufLength(), report->tokenOffset());
+ }
+
+ /* Copy non-pointer members. */
+ copy->isMuted = report->isMuted;
+ copy->exnType = report->exnType;
+
+ /* Note that this is before it gets flagged with JSREPORT_EXCEPTION */
+ copy->flags = report->flags;
+
+ /* Deep copy notes. */
+ if (report->notes) {
+ auto copiedNotes = report->notes->copy(cx);
+ if (!copiedNotes)
+ return false;
+ copy->notes = Move(copiedNotes);
+ } else {
+ copy->notes.reset(nullptr);
+ }
+
+ return true;
+}
+
+bool
+CopyExtraData(JSContext* cx, uint8_t** cursor, JSErrorNotes::Note* copy, JSErrorNotes::Note* report)
+{
+ return true;
+}
+
+template <typename T>
+static T*
+CopyErrorHelper(JSContext* cx, T* report)
{
/*
- * We use a single malloc block to make a deep copy of JSErrorReport with
+ * We use a single malloc block to make a deep copy of JSErrorReport or
+ * JSErrorNotes::Note, except JSErrorNotes linked from JSErrorReport with
* the following layout:
- * JSErrorReport
+ * JSErrorReport or JSErrorNotes::Note
* char array with characters for message_
- * char16_t array with characters for linebuf
* char array with characters for filename
+ * char16_t array with characters for linebuf (only for JSErrorReport)
* Such layout together with the properties enforced by the following
* asserts does not need any extra alignment padding.
*/
- JS_STATIC_ASSERT(sizeof(JSErrorReport) % sizeof(const char*) == 0);
+ JS_STATIC_ASSERT(sizeof(T) % sizeof(const char*) == 0);
JS_STATIC_ASSERT(sizeof(const char*) % sizeof(char16_t) == 0);
-#define JS_CHARS_SIZE(chars) ((js_strlen(chars) + 1) * sizeof(char16_t))
-
size_t filenameSize = report->filename ? strlen(report->filename) + 1 : 0;
- size_t linebufSize = 0;
- if (report->linebuf())
- linebufSize = (report->linebufLength() + 1) * sizeof(char16_t);
size_t messageSize = 0;
if (report->message())
messageSize = strlen(report->message().c_str()) + 1;
@@ -231,13 +280,13 @@ js::CopyErrorReport(JSContext* cx, JSErrorReport* report)
* The mallocSize can not overflow since it represents the sum of the
* sizes of already allocated objects.
*/
- size_t mallocSize = sizeof(JSErrorReport) + messageSize + linebufSize + filenameSize;
+ size_t mallocSize = sizeof(T) + messageSize + filenameSize + ExtraMallocSize(report);
uint8_t* cursor = cx->pod_calloc<uint8_t>(mallocSize);
if (!cursor)
return nullptr;
- JSErrorReport* copy = (JSErrorReport*)cursor;
- cursor += sizeof(JSErrorReport);
+ T* copy = new (cursor) T();
+ cursor += sizeof(T);
if (report->message()) {
copy->initBorrowedMessage((const char*)cursor);
@@ -245,33 +294,40 @@ js::CopyErrorReport(JSContext* cx, JSErrorReport* report)
cursor += messageSize;
}
- if (report->linebuf()) {
- const char16_t* linebufCopy = (const char16_t*)cursor;
- js_memcpy(cursor, report->linebuf(), linebufSize);
- cursor += linebufSize;
- copy->initBorrowedLinebuf(linebufCopy, report->linebufLength(), report->tokenOffset());
- }
-
if (report->filename) {
copy->filename = (const char*)cursor;
js_memcpy(cursor, report->filename, filenameSize);
+ cursor += filenameSize;
}
- MOZ_ASSERT(cursor + filenameSize == (uint8_t*)copy + mallocSize);
+
+ if (!CopyExtraData(cx, &cursor, copy, report)) {
+ /* js_delete calls destructor for T and js_free for pod_calloc. */
+ js_delete(copy);
+ return nullptr;
+ }
+
+ MOZ_ASSERT(cursor == (uint8_t*)copy + mallocSize);
/* Copy non-pointer members. */
- copy->isMuted = report->isMuted;
copy->lineno = report->lineno;
copy->column = report->column;
copy->errorNumber = report->errorNumber;
- copy->exnType = report->exnType;
-
- /* Note that this is before it gets flagged with JSREPORT_EXCEPTION */
- copy->flags = report->flags;
-#undef JS_CHARS_SIZE
return copy;
}
+JSErrorNotes::Note*
+js::CopyErrorNote(JSContext* cx, JSErrorNotes::Note* note)
+{
+ return CopyErrorHelper(cx, note);
+}
+
+JSErrorReport*
+js::CopyErrorReport(JSContext* cx, JSErrorReport* report)
+{
+ return CopyErrorHelper(cx, report);
+}
+
struct SuppressErrorsGuard
{
JSContext* cx;
@@ -322,7 +378,7 @@ exn_finalize(FreeOp* fop, JSObject* obj)
{
MOZ_ASSERT(fop->maybeOffMainThread());
if (JSErrorReport* report = obj->as<ErrorObject>().getErrorReport())
- fop->free_(report);
+ fop->delete_(report);
}
JSErrorReport*
@@ -512,14 +568,17 @@ ErrorObject::createProto(JSContext* cx, JSProtoKey key)
{
JSExnType type = ExnTypeFromProtoKey(key);
- if (type == JSEXN_ERR)
- return cx->global()->createBlankPrototype(cx, &ErrorObject::protoClasses[JSEXN_ERR]);
+ if (type == JSEXN_ERR) {
+ return GlobalObject::createBlankPrototype(cx, cx->global(),
+ &ErrorObject::protoClasses[JSEXN_ERR]);
+ }
RootedObject protoProto(cx, GlobalObject::getOrCreateErrorPrototype(cx, cx->global()));
if (!protoProto)
return nullptr;
- return cx->global()->createBlankPrototypeInheriting(cx, &ErrorObject::protoClasses[type],
+ return GlobalObject::createBlankPrototypeInheriting(cx, cx->global(),
+ &ErrorObject::protoClasses[type],
protoProto);
}
@@ -586,6 +645,7 @@ js::ErrorToException(JSContext* cx, JSErrorReport* reportp,
const JSErrorFormatString* errorString = callback(userRef, errorNumber);
JSExnType exnType = errorString ? static_cast<JSExnType>(errorString->exnType) : JSEXN_ERR;
MOZ_ASSERT(exnType < JSEXN_LIMIT);
+ MOZ_ASSERT(exnType != JSEXN_NOTE);
if (exnType == JSEXN_WARN) {
// werror must be enabled, so we use JSEXN_ERR.
@@ -669,7 +729,7 @@ ErrorReportToString(JSContext* cx, JSErrorReport* reportp)
*/
JSExnType type = static_cast<JSExnType>(reportp->exnType);
RootedString str(cx);
- if (type != JSEXN_WARN)
+ if (type != JSEXN_WARN && type != JSEXN_NOTE)
str = ClassName(GetExceptionProtoKey(type), cx);
/*
diff --git a/js/src/jsexn.h b/js/src/jsexn.h
index ae6335209..00120d89c 100644
--- a/js/src/jsexn.h
+++ b/js/src/jsexn.h
@@ -18,6 +18,9 @@
namespace js {
class ErrorObject;
+JSErrorNotes::Note*
+CopyErrorNote(JSContext* cx, JSErrorNotes::Note* note);
+
JSErrorReport*
CopyErrorReport(JSContext* cx, JSErrorReport* report);
@@ -67,7 +70,8 @@ static_assert(JSEXN_ERR == 0 &&
JSProto_Error + JSEXN_WASMCOMPILEERROR == JSProto_CompileError &&
JSProto_Error + JSEXN_WASMRUNTIMEERROR == JSProto_RuntimeError &&
JSEXN_WASMRUNTIMEERROR + 1 == JSEXN_WARN &&
- JSEXN_WARN + 1 == JSEXN_LIMIT,
+ JSEXN_WARN + 1 == JSEXN_NOTE &&
+ JSEXN_NOTE + 1 == JSEXN_LIMIT,
"GetExceptionProtoKey and ExnTypeFromProtoKey require that "
"each corresponding JSExnType and JSProtoKey value be separated "
"by the same constant value");
diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp
index f5cd56a9b..f7622cb44 100644
--- a/js/src/jsfriendapi.cpp
+++ b/js/src/jsfriendapi.cpp
@@ -113,7 +113,7 @@ JS_SplicePrototype(JSContext* cx, HandleObject obj, HandleObject proto)
}
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
- return obj->splicePrototype(cx, obj->getClass(), tagged);
+ return JSObject::splicePrototype(cx, obj, obj->getClass(), tagged);
}
JS_FRIEND_API(JSObject*)
@@ -269,9 +269,9 @@ js::GetBuiltinClass(JSContext* cx, HandleObject obj, ESClass* cls)
if (MOZ_UNLIKELY(obj->is<ProxyObject>()))
return Proxy::getBuiltinClass(cx, obj, cls);
- if (obj->is<PlainObject>() || obj->is<UnboxedPlainObject>())
+ if (obj->is<PlainObject>())
*cls = ESClass::Object;
- else if (obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>())
+ else if (obj->is<ArrayObject>())
*cls = ESClass::Array;
else if (obj->is<NumberObject>())
*cls = ESClass::Number;
diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h
index d29285483..351667fb3 100644
--- a/js/src/jsfriendapi.h
+++ b/js/src/jsfriendapi.h
@@ -2254,6 +2254,7 @@ struct JSJitInfo {
Method,
StaticMethod,
InlinableNative,
+ IgnoresReturnValueNative,
// Must be last
OpTypeCount
};
@@ -2345,8 +2346,13 @@ struct JSJitInfo {
JSJitMethodOp method;
/** A DOM static method, used for Promise wrappers */
JSNative staticMethod;
+ JSNative ignoresReturnValueMethod;
};
+ static unsigned offsetOfIgnoresReturnValueNative() {
+ return offsetof(JSJitInfo, ignoresReturnValueMethod);
+ }
+
union {
uint16_t protoID;
js::jit::InlinableNative inlinableNative;
diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp
index e624aa415..9edf238ef 100644
--- a/js/src/jsfun.cpp
+++ b/js/src/jsfun.cpp
@@ -129,6 +129,11 @@ IsFunctionInStrictMode(JSFunction* fun)
return IsAsmJSStrictModeModuleOrFunction(fun);
}
+static bool
+IsNewerTypeFunction(JSFunction* fun) {
+ return fun->isArrow() || fun->isGenerator() || fun->isAsync() || fun->isMethod();
+}
+
// Beware: this function can be invoked on *any* function! That includes
// natives, strict mode functions, bound functions, arrow functions,
// self-hosted functions and constructors, asm.js functions, functions with
@@ -142,7 +147,9 @@ ArgumentsRestrictions(JSContext* cx, HandleFunction fun)
// a strict mode function, or a bound function.
// TODO (bug 1057208): ensure semantics are correct for all possible
// pairings of callee/caller.
- if (fun->isBuiltin() || IsFunctionInStrictMode(fun) || fun->isBoundFunction()) {
+ if (fun->isBuiltin() || IsFunctionInStrictMode(fun) ||
+ fun->isBoundFunction() || IsNewerTypeFunction(fun))
+ {
ThrowTypeErrorBehavior(cx);
return false;
}
@@ -229,7 +236,9 @@ CallerRestrictions(JSContext* cx, HandleFunction fun)
// a strict mode function, or a bound function.
// TODO (bug 1057208): ensure semantics are correct for all possible
// pairings of callee/caller.
- if (fun->isBuiltin() || IsFunctionInStrictMode(fun) || fun->isBoundFunction()) {
+ if (fun->isBuiltin() || IsFunctionInStrictMode(fun) ||
+ fun->isBoundFunction() || IsNewerTypeFunction(fun))
+ {
ThrowTypeErrorBehavior(cx);
return false;
}
@@ -275,6 +284,8 @@ CallerGetterImpl(JSContext* cx, const CallArgs& args)
}
RootedObject caller(cx, iter.callee(cx));
+ if (caller->is<JSFunction>() && caller->as<JSFunction>().isAsync())
+ caller = GetWrappedAsyncFunction(&caller->as<JSFunction>());
if (!cx->compartment()->wrap(cx, &caller))
return false;
@@ -295,6 +306,8 @@ CallerGetterImpl(JSContext* cx, const CallArgs& args)
}
JSFunction* callerFun = &callerObj->as<JSFunction>();
+ if (IsWrappedAsyncFunction(callerFun))
+ callerFun = GetUnwrappedAsyncFunction(callerFun);
MOZ_ASSERT(!callerFun->isBuiltin(), "non-builtin iterator returned a builtin?");
if (callerFun->strict()) {
@@ -366,7 +379,7 @@ ResolveInterpretedFunctionPrototype(JSContext* cx, HandleFunction fun, HandleId
if (isStarGenerator)
objProto = GlobalObject::getOrCreateStarGeneratorObjectPrototype(cx, global);
else
- objProto = fun->global().getOrCreateObjectPrototype(cx);
+ objProto = GlobalObject::getOrCreateObjectPrototype(cx, global);
if (!objProto)
return false;
@@ -463,7 +476,7 @@ fun_resolve(JSContext* cx, HandleObject obj, HandleId id, bool* resolvedp)
if (fun->hasResolvedLength())
return true;
- if (!fun->getUnresolvedLength(cx, &v))
+ if (!JSFunction::getUnresolvedLength(cx, fun, &v))
return false;
} else {
if (fun->hasResolvedName())
@@ -808,12 +821,13 @@ CreateFunctionPrototype(JSContext* cx, JSProtoKey key)
sourceObject,
begin,
ss->length(),
- 0));
+ 0,
+ ss->length()));
if (!script || !JSScript::initFunctionPrototype(cx, script, functionProto))
return nullptr;
functionProto->initScript(script);
- ObjectGroup* protoGroup = functionProto->getGroup(cx);
+ ObjectGroup* protoGroup = JSObject::getGroup(cx, functionProto);
if (!protoGroup)
return nullptr;
@@ -848,6 +862,28 @@ CreateFunctionPrototype(JSContext* cx, JSProtoKey key)
if (!throwTypeError || !PreventExtensions(cx, throwTypeError))
return nullptr;
+ // The "length" property of %ThrowTypeError% is non-configurable, adjust
+ // the default property attributes accordingly.
+ Rooted<PropertyDescriptor> nonConfigurableDesc(cx);
+ nonConfigurableDesc.setAttributes(JSPROP_PERMANENT | JSPROP_IGNORE_READONLY |
+ JSPROP_IGNORE_ENUMERATE | JSPROP_IGNORE_VALUE);
+
+ RootedId lengthId(cx, NameToId(cx->names().length));
+ ObjectOpResult lengthResult;
+ if (!NativeDefineProperty(cx, throwTypeError, lengthId, nonConfigurableDesc, lengthResult))
+ return nullptr;
+ MOZ_ASSERT(lengthResult);
+
+ // Non-standard: Also change "name" to non-configurable. ECMAScript defines
+ // %ThrowTypeError% as an anonymous function, i.e. it shouldn't actually
+ // get an own "name" property. To be consistent with other built-in,
+ // anonymous functions, we don't delete %ThrowTypeError%'s "name" property.
+ RootedId nameId(cx, NameToId(cx->names().name));
+ ObjectOpResult nameResult;
+ if (!NativeDefineProperty(cx, throwTypeError, nameId, nonConfigurableDesc, nameResult))
+ return nullptr;
+ MOZ_ASSERT(nameResult);
+
self->setThrowTypeError(throwTypeError);
return functionProto;
@@ -886,80 +922,10 @@ const Class JSFunction::class_ = {
const Class* const js::FunctionClassPtr = &JSFunction::class_;
-/* Find the body of a function (not including braces). */
-bool
-js::FindBody(JSContext* cx, HandleFunction fun, HandleLinearString src, size_t* bodyStart,
- size_t* bodyEnd)
-{
- // We don't need principals, since those are only used for error reporting.
- CompileOptions options(cx);
- options.setFileAndLine("internal-findBody", 0);
-
- // For asm.js/wasm modules, there's no script.
- if (fun->hasScript())
- options.setVersion(fun->nonLazyScript()->getVersion());
-
- AutoKeepAtoms keepAtoms(cx->perThreadData);
-
- AutoStableStringChars stableChars(cx);
- if (!stableChars.initTwoByte(cx, src))
- return false;
-
- const mozilla::Range<const char16_t> srcChars = stableChars.twoByteRange();
- TokenStream ts(cx, options, srcChars.begin().get(), srcChars.length(), nullptr);
- int nest = 0;
- bool onward = true;
- // Skip arguments list.
- do {
- TokenKind tt;
- if (!ts.getToken(&tt))
- return false;
- switch (tt) {
- case TOK_NAME:
- case TOK_YIELD:
- if (nest == 0)
- onward = false;
- break;
- case TOK_LP:
- nest++;
- break;
- case TOK_RP:
- if (--nest == 0)
- onward = false;
- break;
- default:
- break;
- }
- } while (onward);
- TokenKind tt;
- if (!ts.getToken(&tt))
- return false;
- if (tt == TOK_ARROW) {
- if (!ts.getToken(&tt))
- return false;
- }
- bool braced = tt == TOK_LC;
- MOZ_ASSERT_IF(fun->isExprBody(), !braced);
- *bodyStart = ts.currentToken().pos.begin;
- if (braced)
- *bodyStart += 1;
- mozilla::RangedPtr<const char16_t> end = srcChars.end();
- if (end[-1] == '}') {
- end--;
- } else {
- MOZ_ASSERT(!braced);
- for (; unicode::IsSpaceOrBOM2(end[-1]); end--)
- ;
- }
- *bodyEnd = end - srcChars.begin();
- MOZ_ASSERT(*bodyStart <= *bodyEnd);
- return true;
-}
-
JSString*
js::FunctionToString(JSContext* cx, HandleFunction fun, bool prettyPrint)
{
- if (fun->isInterpretedLazy() && !fun->getOrCreateScript(cx))
+ if (fun->isInterpretedLazy() && !JSFunction::getOrCreateScript(cx, fun))
return nullptr;
if (IsAsmJSModule(fun))
@@ -989,7 +955,13 @@ js::FunctionToString(JSContext* cx, HandleFunction fun, bool prettyPrint)
}
bool funIsNonArrowLambda = fun->isLambda() && !fun->isArrow();
- bool haveSource = fun->isInterpreted() && !fun->isSelfHostedBuiltin();
+
+ // Default class constructors are self-hosted, but have their source
+ // objects overridden to refer to the span of the class statement or
+ // expression. Non-default class constructors are never self-hosted. So,
+ // all class constructors always have source.
+ bool haveSource = fun->isInterpreted() && (fun->isClassConstructor() ||
+ !fun->isSelfHostedBuiltin());
// If we're not in pretty mode, put parentheses around lambda functions
// so that eval returns lambda, not function statement.
@@ -1030,7 +1002,7 @@ js::FunctionToString(JSContext* cx, HandleFunction fun, bool prettyPrint)
};
if (haveSource) {
- Rooted<JSFlatString*> src(cx, script->sourceDataWithPrelude(cx));
+ Rooted<JSFlatString*> src(cx, JSScript::sourceDataForToString(cx, script));
if (!src)
return nullptr;
@@ -1041,7 +1013,20 @@ js::FunctionToString(JSContext* cx, HandleFunction fun, bool prettyPrint)
if (!out.append(")"))
return nullptr;
}
- } else if (fun->isInterpreted() && !fun->isSelfHostedBuiltin()) {
+ } else if (fun->isInterpreted() &&
+ (!fun->isSelfHostedBuiltin() ||
+ fun->infallibleIsDefaultClassConstructor(cx)))
+ {
+ // Default class constructors should always haveSource except;
+ //
+ // 1. Source has been discarded for the whole compartment.
+ //
+ // 2. The source is marked as "lazy", i.e., retrieved on demand, and
+ // the embedding has not provided a hook to retrieve sources.
+ MOZ_ASSERT_IF(fun->infallibleIsDefaultClassConstructor(cx),
+ !cx->runtime()->sourceHook ||
+ !script->scriptSource()->sourceRetrievable() ||
+ fun->compartment()->behaviors().discardSource());
if (!AppendPrelude() ||
!out.append("() {\n ") ||
!out.append("[sourceless code]") ||
@@ -1050,29 +1035,16 @@ js::FunctionToString(JSContext* cx, HandleFunction fun, bool prettyPrint)
return nullptr;
}
} else {
- MOZ_ASSERT(!fun->isExprBody());
- bool derived = fun->infallibleIsDefaultClassConstructor(cx);
- if (derived && fun->isDerivedClassConstructor()) {
- if (!AppendPrelude() ||
- !out.append("(...args) {\n ") ||
- !out.append("super(...args);\n}"))
- {
- return nullptr;
- }
- } else {
- if (!AppendPrelude() ||
- !out.append("() {\n "))
- return nullptr;
+ if (!AppendPrelude() ||
+ !out.append("() {\n "))
+ return nullptr;
- if (!derived) {
- if (!out.append("[native code]"))
- return nullptr;
- }
+ if (!out.append("[native code]"))
+ return nullptr;
- if (!out.append("\n}"))
- return nullptr;
- }
+ if (!out.append("\n}"))
+ return nullptr;
}
return out.finishString();
}
@@ -1301,34 +1273,33 @@ JSFunction::isDerivedClassConstructor()
return derived;
}
-bool
-JSFunction::getLength(JSContext* cx, uint16_t* length)
+/* static */ bool
+JSFunction::getLength(JSContext* cx, HandleFunction fun, uint16_t* length)
{
- JS::RootedFunction self(cx, this);
- MOZ_ASSERT(!self->isBoundFunction());
- if (self->isInterpretedLazy() && !self->getOrCreateScript(cx))
+ MOZ_ASSERT(!fun->isBoundFunction());
+ if (fun->isInterpretedLazy() && !getOrCreateScript(cx, fun))
return false;
- *length = self->isNative() ? self->nargs() : self->nonLazyScript()->funLength();
+ *length = fun->isNative() ? fun->nargs() : fun->nonLazyScript()->funLength();
return true;
}
-bool
-JSFunction::getUnresolvedLength(JSContext* cx, MutableHandleValue v)
+/* static */ bool
+JSFunction::getUnresolvedLength(JSContext* cx, HandleFunction fun, MutableHandleValue v)
{
- MOZ_ASSERT(!IsInternalFunctionObject(*this));
- MOZ_ASSERT(!hasResolvedLength());
+ MOZ_ASSERT(!IsInternalFunctionObject(*fun));
+ MOZ_ASSERT(!fun->hasResolvedLength());
// Bound functions' length can have values up to MAX_SAFE_INTEGER, so
// they're handled differently from other functions.
- if (isBoundFunction()) {
- MOZ_ASSERT(getExtendedSlot(BOUND_FUN_LENGTH_SLOT).isNumber());
- v.set(getExtendedSlot(BOUND_FUN_LENGTH_SLOT));
+ if (fun->isBoundFunction()) {
+ MOZ_ASSERT(fun->getExtendedSlot(BOUND_FUN_LENGTH_SLOT).isNumber());
+ v.set(fun->getExtendedSlot(BOUND_FUN_LENGTH_SLOT));
return true;
}
uint16_t length;
- if (!getLength(cx, &length))
+ if (!JSFunction::getLength(cx, fun, &length))
return false;
v.setInt32(length);
@@ -1385,13 +1356,11 @@ GetBoundFunctionArguments(const JSFunction* boundFun)
}
const js::Value&
-JSFunction::getBoundFunctionArgument(JSContext* cx, unsigned which) const
+JSFunction::getBoundFunctionArgument(unsigned which) const
{
MOZ_ASSERT(which < getBoundFunctionArgumentCount());
- RootedArrayObject boundArgs(cx, GetBoundFunctionArguments(this));
- RootedValue res(cx);
- return boundArgs->getDenseElement(which);
+ return GetBoundFunctionArguments(this)->getDenseElement(which);
}
size_t
@@ -1428,7 +1397,7 @@ JSFunction::createScriptForLazilyInterpretedFunction(JSContext* cx, HandleFuncti
}
if (fun != lazy->functionNonDelazifying()) {
- if (!lazy->functionDelazifying(cx))
+ if (!LazyScript::functionDelazifying(cx, lazy))
return false;
script = lazy->functionNonDelazifying()->nonLazyScript();
if (!script)
diff --git a/js/src/jsfun.h b/js/src/jsfun.h
index 1c7da57ec..234169507 100644
--- a/js/src/jsfun.h
+++ b/js/src/jsfun.h
@@ -58,8 +58,6 @@ class JSFunction : public js::NativeObject
CONSTRUCTOR = 0x0002, /* function that can be called as a constructor */
EXTENDED = 0x0004, /* structure is FunctionExtended */
BOUND_FUN = 0x0008, /* function was created with Function.prototype.bind. */
- EXPR_BODY = 0x0010, /* arrow function with expression body or
- * expression closure: function(x) x*x */
HAS_GUESSED_ATOM = 0x0020, /* function had no explicit name, but a
name was guessed for it anyway */
LAMBDA = 0x0040, /* function comes from a FunctionExpression, ArrowFunction, or
@@ -102,7 +100,7 @@ class JSFunction : public js::NativeObject
INTERPRETED_GENERATOR = INTERPRETED,
NO_XDR_FLAGS = RESOLVED_LENGTH | RESOLVED_NAME,
- STABLE_ACROSS_CLONES = CONSTRUCTOR | EXPR_BODY | HAS_GUESSED_ATOM | LAMBDA |
+ STABLE_ACROSS_CLONES = CONSTRUCTOR | HAS_GUESSED_ATOM | LAMBDA |
SELF_HOSTED | HAS_COMPILE_TIME_NAME | FUNCTION_KIND_MASK
};
@@ -187,7 +185,6 @@ class JSFunction : public js::NativeObject
bool isAsmJSNative() const { return kind() == AsmJS; }
/* Possible attributes of an interpreted function: */
- bool isExprBody() const { return flags() & EXPR_BODY; }
bool hasCompileTimeName() const { return flags() & HAS_COMPILE_TIME_NAME; }
bool hasGuessedAtom() const { return flags() & HAS_GUESSED_ATOM; }
bool isLambda() const { return flags() & LAMBDA; }
@@ -290,11 +287,6 @@ class JSFunction : public js::NativeObject
flags_ |= SELF_HOSTED;
}
- // Can be called multiple times by the parser.
- void setIsExprBody() {
- flags_ |= EXPR_BODY;
- }
-
void setArrow() {
setKind(Arrow);
}
@@ -314,7 +306,8 @@ class JSFunction : public js::NativeObject
nonLazyScript()->setAsyncKind(asyncKind);
}
- bool getUnresolvedLength(JSContext* cx, js::MutableHandleValue v);
+ static bool getUnresolvedLength(JSContext* cx, js::HandleFunction fun,
+ js::MutableHandleValue v);
JSAtom* getUnresolvedName(JSContext* cx);
@@ -419,16 +412,15 @@ class JSFunction : public js::NativeObject
//
// - For functions known to have a JSScript, nonLazyScript() will get it.
- JSScript* getOrCreateScript(JSContext* cx) {
- MOZ_ASSERT(isInterpreted());
+ static JSScript* getOrCreateScript(JSContext* cx, js::HandleFunction fun) {
+ MOZ_ASSERT(fun->isInterpreted());
MOZ_ASSERT(cx);
- if (isInterpretedLazy()) {
- JS::RootedFunction self(cx, this);
- if (!createScriptForLazilyInterpretedFunction(cx, self))
+ if (fun->isInterpretedLazy()) {
+ if (!createScriptForLazilyInterpretedFunction(cx, fun))
return nullptr;
- return self->nonLazyScript();
+ return fun->nonLazyScript();
}
- return nonLazyScript();
+ return fun->nonLazyScript();
}
JSScript* existingScriptNonDelazifying() const {
@@ -486,7 +478,7 @@ class JSFunction : public js::NativeObject
return u.i.s.script_;
}
- bool getLength(JSContext* cx, uint16_t* length);
+ static bool getLength(JSContext* cx, js::HandleFunction fun, uint16_t* length);
js::LazyScript* lazyScript() const {
MOZ_ASSERT(isInterpretedLazy() && u.i.s.lazy_);
@@ -593,13 +585,17 @@ class JSFunction : public js::NativeObject
return offsetof(JSFunction, u.nativeOrScript);
}
+ static unsigned offsetOfJitInfo() {
+ return offsetof(JSFunction, u.n.jitinfo);
+ }
+
inline void trace(JSTracer* trc);
/* Bound function accessors. */
JSObject* getBoundFunctionTarget() const;
const js::Value& getBoundFunctionThis() const;
- const js::Value& getBoundFunctionArgument(JSContext* cx, unsigned which) const;
+ const js::Value& getBoundFunctionArgument(unsigned which) const;
size_t getBoundFunctionArgumentCount() const;
private:
@@ -802,10 +798,6 @@ CloneFunctionAndScript(JSContext* cx, HandleFunction fun, HandleObject parent,
gc::AllocKind kind = gc::AllocKind::FUNCTION,
HandleObject proto = nullptr);
-extern bool
-FindBody(JSContext* cx, HandleFunction fun, HandleLinearString src, size_t* bodyStart,
- size_t* bodyEnd);
-
} // namespace js
inline js::FunctionExtended*
diff --git a/js/src/jsfuninlines.h b/js/src/jsfuninlines.h
index e134def61..13fe51e26 100644
--- a/js/src/jsfuninlines.h
+++ b/js/src/jsfuninlines.h
@@ -88,7 +88,7 @@ CloneFunctionObjectIfNotSingleton(JSContext* cx, HandleFunction fun, HandleObjec
if (CanReuseScriptForClone(cx->compartment(), fun, parent))
return CloneFunctionReuseScript(cx, fun, parent, kind, newKind, proto);
- RootedScript script(cx, fun->getOrCreateScript(cx));
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, fun));
if (!script)
return nullptr;
RootedScope enclosingScope(cx, script->enclosingScope());
diff --git a/js/src/jsiter.cpp b/js/src/jsiter.cpp
index 004c7fc0d..749e15d27 100644
--- a/js/src/jsiter.cpp
+++ b/js/src/jsiter.cpp
@@ -654,7 +654,7 @@ VectorToKeyIterator(JSContext* cx, HandleObject obj, unsigned flags, AutoIdVecto
{
MOZ_ASSERT(!(flags & JSITER_FOREACH));
- if (obj->isSingleton() && !obj->setIteratedSingleton(cx))
+ if (obj->isSingleton() && !JSObject::setIteratedSingleton(cx, obj))
return false;
MarkObjectGroupFlags(cx, obj, OBJECT_FLAG_ITERATED);
@@ -698,7 +698,7 @@ VectorToValueIterator(JSContext* cx, HandleObject obj, unsigned flags, AutoIdVec
{
MOZ_ASSERT(flags & JSITER_FOREACH);
- if (obj->isSingleton() && !obj->setIteratedSingleton(cx))
+ if (obj->isSingleton() && !JSObject::setIteratedSingleton(cx, obj))
return false;
MarkObjectGroupFlags(cx, obj, OBJECT_FLAG_ITERATED);
@@ -921,7 +921,7 @@ js::CreateItrResultObject(JSContext* cx, HandleValue value, bool done)
// FIXME: We can cache the iterator result object shape somewhere.
AssertHeapIsIdle(cx);
- RootedObject proto(cx, cx->global()->getOrCreateObjectPrototype(cx));
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, cx->global()));
if (!proto)
return nullptr;
@@ -1497,7 +1497,7 @@ GlobalObject::initIteratorProto(JSContext* cx, Handle<GlobalObject*> global)
if (global->getReservedSlot(ITERATOR_PROTO).isObject())
return true;
- RootedObject proto(cx, global->createBlankPrototype<PlainObject>(cx));
+ RootedObject proto(cx, GlobalObject::createBlankPrototype<PlainObject>(cx, global));
if (!proto || !DefinePropertiesAndFunctions(cx, proto, nullptr, iterator_proto_methods))
return false;
@@ -1516,7 +1516,8 @@ GlobalObject::initArrayIteratorProto(JSContext* cx, Handle<GlobalObject*> global
return false;
const Class* cls = &ArrayIteratorPrototypeClass;
- RootedObject proto(cx, global->createBlankPrototypeInheriting(cx, cls, iteratorProto));
+ RootedObject proto(cx, GlobalObject::createBlankPrototypeInheriting(cx, global, cls,
+ iteratorProto));
if (!proto ||
!DefinePropertiesAndFunctions(cx, proto, nullptr, array_iterator_methods) ||
!DefineToStringTag(cx, proto, cx->names().ArrayIterator))
@@ -1539,7 +1540,8 @@ GlobalObject::initStringIteratorProto(JSContext* cx, Handle<GlobalObject*> globa
return false;
const Class* cls = &StringIteratorPrototypeClass;
- RootedObject proto(cx, global->createBlankPrototypeInheriting(cx, cls, iteratorProto));
+ RootedObject proto(cx, GlobalObject::createBlankPrototypeInheriting(cx, global, cls,
+ iteratorProto));
if (!proto ||
!DefinePropertiesAndFunctions(cx, proto, nullptr, string_iterator_methods) ||
!DefineToStringTag(cx, proto, cx->names().StringIterator))
@@ -1560,7 +1562,8 @@ js::InitLegacyIteratorClass(JSContext* cx, HandleObject obj)
return &global->getPrototype(JSProto_Iterator).toObject();
RootedObject iteratorProto(cx);
- iteratorProto = global->createBlankPrototype(cx, &PropertyIteratorObject::class_);
+ iteratorProto = GlobalObject::createBlankPrototype(cx, global,
+ &PropertyIteratorObject::class_);
if (!iteratorProto)
return nullptr;
@@ -1572,7 +1575,7 @@ js::InitLegacyIteratorClass(JSContext* cx, HandleObject obj)
ni->init(nullptr, nullptr, 0 /* flags */, 0, 0);
Rooted<JSFunction*> ctor(cx);
- ctor = global->createConstructor(cx, IteratorConstructor, cx->names().Iterator, 2);
+ ctor = GlobalObject::createConstructor(cx, IteratorConstructor, cx->names().Iterator, 2);
if (!ctor)
return nullptr;
if (!LinkConstructorAndPrototype(cx, ctor, iteratorProto))
@@ -1593,7 +1596,8 @@ js::InitStopIterationClass(JSContext* cx, HandleObject obj)
{
Handle<GlobalObject*> global = obj.as<GlobalObject>();
if (!global->getPrototype(JSProto_StopIteration).isObject()) {
- RootedObject proto(cx, global->createBlankPrototype(cx, &StopIterationObject::class_));
+ RootedObject proto(cx, GlobalObject::createBlankPrototype(cx, global,
+ &StopIterationObject::class_));
if (!proto || !FreezeObject(cx, proto))
return nullptr;
diff --git a/js/src/jsmath.cpp b/js/src/jsmath.cpp
index 08fbe048c..78a231003 100644
--- a/js/src/jsmath.cpp
+++ b/js/src/jsmath.cpp
@@ -1417,7 +1417,8 @@ static const JSFunctionSpec math_static_methods[] = {
JSObject*
js::InitMathClass(JSContext* cx, HandleObject obj)
{
- RootedObject proto(cx, obj->as<GlobalObject>().getOrCreateObjectPrototype(cx));
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!proto)
return nullptr;
RootedObject Math(cx, NewObjectWithGivenProto(cx, &MathClass, proto, SingletonObject));
diff --git a/js/src/jsnum.cpp b/js/src/jsnum.cpp
index 28ed15159..bde1f918e 100644
--- a/js/src/jsnum.cpp
+++ b/js/src/jsnum.cpp
@@ -1005,15 +1005,16 @@ js::InitNumberClass(JSContext* cx, HandleObject obj)
/* XXX must do at least once per new thread, so do it per JSContext... */
FIX_FPU();
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
- RootedObject numberProto(cx, global->createBlankPrototype(cx, &NumberObject::class_));
+ RootedObject numberProto(cx, GlobalObject::createBlankPrototype(cx, global,
+ &NumberObject::class_));
if (!numberProto)
return nullptr;
numberProto->as<NumberObject>().setPrimitiveValue(0);
RootedFunction ctor(cx);
- ctor = global->createConstructor(cx, Number, cx->names().Number, 1);
+ ctor = GlobalObject::createConstructor(cx, Number, cx->names().Number, 1);
if (!ctor)
return nullptr;
diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp
index f22ecb445..6f9596924 100644
--- a/js/src/jsobj.cpp
+++ b/js/src/jsobj.cpp
@@ -43,6 +43,7 @@
#include "frontend/BytecodeCompiler.h"
#include "gc/Marking.h"
#include "gc/Policy.h"
+#include "gc/StoreBuffer-inl.h"
#include "jit/BaselineJIT.h"
#include "js/MemoryMetrics.h"
#include "js/Proxy.h"
@@ -54,7 +55,6 @@
#include "vm/RegExpStaticsObject.h"
#include "vm/Shape.h"
#include "vm/TypedArrayCommon.h"
-#include "vm/UnboxedObject-inl.h"
#include "jsatominlines.h"
#include "jsboolinlines.h"
@@ -471,7 +471,7 @@ js::SetIntegrityLevel(JSContext* cx, HandleObject obj, IntegrityLevel level)
// Steps 8-9, loosely interpreted.
if (obj->isNative() && !obj->as<NativeObject>().inDictionaryMode() &&
- !obj->is<TypedArrayObject>())
+ !obj->is<TypedArrayObject>() && !obj->is<MappedArgumentsObject>())
{
HandleNativeObject nobj = obj.as<NativeObject>();
@@ -884,7 +884,7 @@ CreateThisForFunctionWithGroup(JSContext* cx, HandleObjectGroup group,
if (newKind == SingletonObject) {
Rooted<TaggedProto> proto(cx, TaggedProto(templateObject->staticPrototype()));
- if (!res->splicePrototype(cx, &PlainObject::class_, proto))
+ if (!JSObject::splicePrototype(cx, res, &PlainObject::class_, proto))
return nullptr;
} else {
res->setGroup(group);
@@ -952,7 +952,7 @@ js::CreateThisForFunctionWithProto(JSContext* cx, HandleObject callee, HandleObj
}
if (res) {
- JSScript* script = callee->as<JSFunction>().getOrCreateScript(cx);
+ JSScript* script = JSFunction::getOrCreateScript(cx, callee.as<JSFunction>());
if (!script)
return nullptr;
TypeScript::SetThis(cx, script, TypeSet::ObjectType(res));
@@ -1143,19 +1143,18 @@ js::CloneObject(JSContext* cx, HandleObject obj, Handle<js::TaggedProto> proto)
}
static bool
-GetScriptArrayObjectElements(JSContext* cx, HandleObject obj, MutableHandle<GCVector<Value>> values)
+GetScriptArrayObjectElements(JSContext* cx, HandleArrayObject arr, MutableHandle<GCVector<Value>> values)
{
- MOZ_ASSERT(!obj->isSingleton());
- MOZ_ASSERT(obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>());
- MOZ_ASSERT(!obj->isIndexed());
+ MOZ_ASSERT(!arr->isSingleton());
+ MOZ_ASSERT(!arr->isIndexed());
- size_t length = GetAnyBoxedOrUnboxedArrayLength(obj);
+ size_t length = arr->length();
if (!values.appendN(MagicValue(JS_ELEMENTS_HOLE), length))
return false;
- size_t initlen = GetAnyBoxedOrUnboxedInitializedLength(obj);
+ size_t initlen = arr->getDenseInitializedLength();
for (size_t i = 0; i < initlen; i++)
- values[i].set(GetAnyBoxedOrUnboxedDenseElement(obj, i));
+ values[i].set(arr->getDenseElement(i));
return true;
}
@@ -1207,13 +1206,12 @@ js::DeepCloneObjectLiteral(JSContext* cx, HandleObject obj, NewObjectKind newKin
MOZ_ASSERT_IF(obj->isSingleton(),
cx->compartment()->behaviors().getSingletonsAsTemplates());
MOZ_ASSERT(obj->is<PlainObject>() ||
- obj->is<ArrayObject>() ||
- obj->is<UnboxedArrayObject>());
+ obj->is<ArrayObject>());
MOZ_ASSERT(newKind != SingletonObject);
- if (obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>()) {
+ if (obj->is<ArrayObject>()) {
Rooted<GCVector<Value>> values(cx, GCVector<Value>(cx));
- if (!GetScriptArrayObjectElements(cx, obj, &values))
+ if (!GetScriptArrayObjectElements(cx, obj.as<ArrayObject>(), &values))
return nullptr;
// Deep clone any elements.
@@ -1327,9 +1325,8 @@ js::XDRObjectLiteral(XDRState<mode>* xdr, MutableHandleObject obj)
{
if (mode == XDR_ENCODE) {
MOZ_ASSERT(obj->is<PlainObject>() ||
- obj->is<ArrayObject>() ||
- obj->is<UnboxedArrayObject>());
- isArray = (obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>()) ? 1 : 0;
+ obj->is<ArrayObject>());
+ isArray = obj->is<ArrayObject>() ? 1 : 0;
}
if (!xdr->codeUint32(&isArray))
@@ -1341,8 +1338,11 @@ js::XDRObjectLiteral(XDRState<mode>* xdr, MutableHandleObject obj)
if (isArray) {
Rooted<GCVector<Value>> values(cx, GCVector<Value>(cx));
- if (mode == XDR_ENCODE && !GetScriptArrayObjectElements(cx, obj, &values))
- return false;
+ if (mode == XDR_ENCODE) {
+ RootedArrayObject arr(cx, &obj->as<ArrayObject>());
+ if (!GetScriptArrayObjectElements(cx, arr, &values))
+ return false;
+ }
uint32_t initialized;
if (mode == XDR_ENCODE)
@@ -1430,40 +1430,41 @@ js::XDRObjectLiteral(XDRState<XDR_ENCODE>* xdr, MutableHandleObject obj);
template bool
js::XDRObjectLiteral(XDRState<XDR_DECODE>* xdr, MutableHandleObject obj);
-bool
-NativeObject::fillInAfterSwap(JSContext* cx, const Vector<Value>& values, void* priv)
+/* static */ bool
+NativeObject::fillInAfterSwap(JSContext* cx, HandleNativeObject obj,
+ const Vector<Value>& values, void* priv)
{
// This object has just been swapped with some other object, and its shape
// no longer reflects its allocated size. Correct this information and
// fill the slots in with the specified values.
- MOZ_ASSERT(slotSpan() == values.length());
+ MOZ_ASSERT(obj->slotSpan() == values.length());
// Make sure the shape's numFixedSlots() is correct.
- size_t nfixed = gc::GetGCKindSlots(asTenured().getAllocKind(), getClass());
- if (nfixed != shape_->numFixedSlots()) {
- if (!generateOwnShape(cx))
+ size_t nfixed = gc::GetGCKindSlots(obj->asTenured().getAllocKind(), obj->getClass());
+ if (nfixed != obj->shape_->numFixedSlots()) {
+ if (!NativeObject::generateOwnShape(cx, obj))
return false;
- shape_->setNumFixedSlots(nfixed);
+ obj->shape_->setNumFixedSlots(nfixed);
}
- if (hasPrivate())
- setPrivate(priv);
+ if (obj->hasPrivate())
+ obj->setPrivate(priv);
else
MOZ_ASSERT(!priv);
- if (slots_) {
- js_free(slots_);
- slots_ = nullptr;
+ if (obj->slots_) {
+ js_free(obj->slots_);
+ obj->slots_ = nullptr;
}
- if (size_t ndynamic = dynamicSlotsCount(nfixed, values.length(), getClass())) {
- slots_ = cx->zone()->pod_malloc<HeapSlot>(ndynamic);
- if (!slots_)
+ if (size_t ndynamic = dynamicSlotsCount(nfixed, values.length(), obj->getClass())) {
+ obj->slots_ = cx->zone()->pod_malloc<HeapSlot>(ndynamic);
+ if (!obj->slots_)
return false;
- Debug_SetSlotRangeToCrashOnTouch(slots_, ndynamic);
+ Debug_SetSlotRangeToCrashOnTouch(obj->slots_, ndynamic);
}
- initSlotRange(0, values.begin(), values.length());
+ obj->initSlotRange(0, values.begin(), values.length());
return true;
}
@@ -1489,9 +1490,9 @@ JSObject::swap(JSContext* cx, HandleObject a, HandleObject b)
AutoCompartment ac(cx, a);
- if (!a->getGroup(cx))
+ if (!JSObject::getGroup(cx, a))
oomUnsafe.crash("JSObject::swap");
- if (!b->getGroup(cx))
+ if (!JSObject::getGroup(cx, b))
oomUnsafe.crash("JSObject::swap");
/*
@@ -1573,10 +1574,14 @@ JSObject::swap(JSContext* cx, HandleObject a, HandleObject b)
a->fixDictionaryShapeAfterSwap();
b->fixDictionaryShapeAfterSwap();
- if (na && !b->as<NativeObject>().fillInAfterSwap(cx, avals, apriv))
- oomUnsafe.crash("fillInAfterSwap");
- if (nb && !a->as<NativeObject>().fillInAfterSwap(cx, bvals, bpriv))
- oomUnsafe.crash("fillInAfterSwap");
+ if (na) {
+ if (!NativeObject::fillInAfterSwap(cx, b.as<NativeObject>(), avals, apriv))
+ oomUnsafe.crash("fillInAfterSwap");
+ }
+ if (nb) {
+ if (!NativeObject::fillInAfterSwap(cx, a.as<NativeObject>(), bvals, bpriv))
+ oomUnsafe.crash("fillInAfterSwap");
+ }
}
// Swapping the contents of two objects invalidates type sets which contain
@@ -1722,7 +1727,7 @@ DefineConstructorAndPrototype(JSContext* cx, HandleObject obj, JSProtoKey key, H
/* Bootstrap Function.prototype (see also JS_InitStandardClasses). */
Rooted<TaggedProto> tagged(cx, TaggedProto(proto));
- if (ctor->getClass() == clasp && !ctor->splicePrototype(cx, clasp, tagged))
+ if (ctor->getClass() == clasp && !JSObject::splicePrototype(cx, ctor, clasp, tagged))
goto bad;
}
@@ -1839,10 +1844,10 @@ js::SetClassAndProto(JSContext* cx, HandleObject obj,
// We always generate a new shape if the object is a singleton,
// regardless of the uncacheable-proto flag. ICs may rely on
// this.
- if (!oldproto->as<NativeObject>().generateOwnShape(cx))
+ if (!NativeObject::generateOwnShape(cx, oldproto.as<NativeObject>()))
return false;
} else {
- if (!oldproto->setUncacheableProto(cx))
+ if (!JSObject::setUncacheableProto(cx, oldproto))
return false;
}
if (!obj->isDelegate()) {
@@ -1854,15 +1859,18 @@ js::SetClassAndProto(JSContext* cx, HandleObject obj,
oldproto = oldproto->staticPrototype();
}
- if (proto.isObject() && !proto.toObject()->setDelegate(cx))
- return false;
+ if (proto.isObject()) {
+ RootedObject protoObj(cx, proto.toObject());
+ if (!JSObject::setDelegate(cx, protoObj))
+ return false;
+ }
if (obj->isSingleton()) {
/*
* Just splice the prototype, but mark the properties as unknown for
* consistent behavior.
*/
- if (!obj->splicePrototype(cx, clasp, proto))
+ if (!JSObject::splicePrototype(cx, obj, clasp, proto))
return false;
MarkObjectGroupUnknownProperties(cx, obj->group());
return true;
@@ -1982,7 +1990,8 @@ js::GetObjectFromIncumbentGlobal(JSContext* cx, MutableHandleObject obj)
{
AutoCompartment ac(cx, globalObj);
- obj.set(globalObj->as<GlobalObject>().getOrCreateObjectPrototype(cx));
+ Handle<GlobalObject*> global = globalObj.as<GlobalObject>();
+ obj.set(GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!obj)
return false;
}
@@ -2195,7 +2204,8 @@ js::LookupNameUnqualified(JSContext* cx, HandlePropertyName name, HandleObject e
// environments.
if (env->is<DebugEnvironmentProxy>()) {
RootedValue v(cx);
- if (!env->as<DebugEnvironmentProxy>().getMaybeSentinelValue(cx, id, &v))
+ Rooted<DebugEnvironmentProxy*> envProxy(cx, &env->as<DebugEnvironmentProxy>());
+ if (!DebugEnvironmentProxy::getMaybeSentinelValue(cx, envProxy, id, &v))
return false;
isTDZ = IsUninitializedLexical(v);
} else {
@@ -2312,11 +2322,6 @@ js::LookupOwnPropertyPure(ExclusiveContext* cx, JSObject* obj, jsid id, Shape**
// us the resolve hook won't define a property with this id.
if (ClassMayResolveId(cx->names(), obj->getClass(), id, obj))
return false;
- } else if (obj->is<UnboxedArrayObject>()) {
- if (obj->as<UnboxedArrayObject>().containsProperty(cx, id)) {
- MarkNonNativePropertyFound<NoGC>(propp);
- return true;
- }
} else if (obj->is<TypedObject>()) {
if (obj->as<TypedObject>().typeDescr().hasProperty(cx->names(), id)) {
MarkNonNativePropertyFound<NoGC>(propp);
@@ -2331,9 +2336,18 @@ js::LookupOwnPropertyPure(ExclusiveContext* cx, JSObject* obj, jsid id, Shape**
}
static inline bool
-NativeGetPureInline(NativeObject* pobj, Shape* shape, Value* vp)
+NativeGetPureInline(NativeObject* pobj, jsid id, Shape* shape, Value* vp)
{
- /* Fail if we have a custom getter. */
+ if (IsImplicitDenseOrTypedArrayElement(shape)) {
+ // For simplicity we ignore the TypedArray with string index case.
+ if (!JSID_IS_INT(id))
+ return false;
+
+ *vp = pobj->getDenseOrTypedArrayElement(JSID_TO_INT(id));
+ return true;
+ }
+
+ // Fail if we have a custom getter.
if (!shape->hasDefaultGetter())
return false;
@@ -2360,13 +2374,13 @@ js::GetPropertyPure(ExclusiveContext* cx, JSObject* obj, jsid id, Value* vp)
return true;
}
- return pobj->isNative() && NativeGetPureInline(&pobj->as<NativeObject>(), shape, vp);
+ return pobj->isNative() && NativeGetPureInline(&pobj->as<NativeObject>(), id, shape, vp);
}
static inline bool
NativeGetGetterPureInline(Shape* shape, JSFunction** fp)
{
- if (shape->hasGetterObject()) {
+ if (!IsImplicitDenseOrTypedArrayElement(shape) && shape->hasGetterObject()) {
if (shape->getterObject()->is<JSFunction>()) {
*fp = &shape->getterObject()->as<JSFunction>();
return true;
@@ -2447,7 +2461,7 @@ js::HasOwnDataPropertyPure(JSContext* cx, JSObject* obj, jsid id, bool* result)
return true;
}
-bool
+/* static */ bool
JSObject::reportReadOnly(JSContext* cx, jsid id, unsigned report)
{
RootedValue val(cx, IdToValue(id));
@@ -2456,7 +2470,7 @@ JSObject::reportReadOnly(JSContext* cx, jsid id, unsigned report)
nullptr, nullptr);
}
-bool
+/* static */ bool
JSObject::reportNotConfigurable(JSContext* cx, jsid id, unsigned report)
{
RootedValue val(cx, IdToValue(id));
@@ -2465,10 +2479,10 @@ JSObject::reportNotConfigurable(JSContext* cx, jsid id, unsigned report)
nullptr, nullptr);
}
-bool
-JSObject::reportNotExtensible(JSContext* cx, unsigned report)
+/* static */ bool
+JSObject::reportNotExtensible(JSContext* cx, HandleObject obj, unsigned report)
{
- RootedValue val(cx, ObjectValue(*this));
+ RootedValue val(cx, ObjectValue(*obj));
return ReportValueErrorFlags(cx, report, JSMSG_OBJECT_NOT_EXTENSIBLE,
JSDVG_IGNORE_STACK, val, nullptr,
nullptr, nullptr);
@@ -2540,7 +2554,7 @@ js::SetPrototype(JSContext* cx, HandleObject obj, HandleObject proto, JS::Object
// [[Prototype]] chain is always properly immutable, even in the presence
// of lazy standard classes.
if (obj->is<GlobalObject>()) {
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
if (!GlobalObject::ensureConstructor(cx, global, JSProto_Object))
return false;
}
@@ -2607,7 +2621,7 @@ js::PreventExtensions(JSContext* cx, HandleObject obj, ObjectOpResult& result, I
}
}
- if (!obj->setFlags(cx, BaseShape::NOT_EXTENSIBLE, JSObject::GENERATE_SHAPE)) {
+ if (!JSObject::setFlags(cx, obj, BaseShape::NOT_EXTENSIBLE, JSObject::GENERATE_SHAPE)) {
// We failed to mark the object non-extensible, so reset the frozen
// flag on the elements.
MOZ_ASSERT(obj->nonProxyIsExtensible());
@@ -2747,7 +2761,7 @@ js::SetImmutablePrototype(ExclusiveContext* cx, HandleObject obj, bool* succeede
return Proxy::setImmutablePrototype(cx->asJSContext(), obj, succeeded);
}
- if (!obj->setFlags(cx, BaseShape::IMMUTABLE_PROTOTYPE))
+ if (!JSObject::setFlags(cx, obj, BaseShape::IMMUTABLE_PROTOTYPE))
return false;
*succeeded = true;
return true;
@@ -2857,24 +2871,6 @@ js::GetObjectClassName(JSContext* cx, HandleObject obj)
/* * */
-bool
-js::HasDataProperty(JSContext* cx, NativeObject* obj, jsid id, Value* vp)
-{
- if (JSID_IS_INT(id) && obj->containsDenseElement(JSID_TO_INT(id))) {
- *vp = obj->getDenseElement(JSID_TO_INT(id));
- return true;
- }
-
- if (Shape* shape = obj->lookup(cx, id)) {
- if (shape->hasDefaultGetter() && shape->hasSlot()) {
- *vp = obj->getSlot(shape->slot());
- return true;
- }
- }
-
- return false;
-}
-
extern bool
PropertySpecNameToId(JSContext* cx, const char* name, MutableHandleId id,
js::PinningBehavior pin = js::DoNotPinAtom);
@@ -2990,7 +2986,7 @@ JS::OrdinaryToPrimitive(JSContext* cx, HandleObject obj, JSType hint, MutableHan
/* Optimize (new String(...)).toString(). */
if (clasp == &StringObject::class_) {
StringObject* nobj = &obj->as<StringObject>();
- if (ClassMethodIsNative(cx, nobj, &StringObject::class_, id, str_toString)) {
+ if (HasNativeMethodPure(nobj, cx->names().toString, str_toString, cx)) {
vp.setString(nobj->unbox());
return true;
}
@@ -3012,7 +3008,7 @@ JS::OrdinaryToPrimitive(JSContext* cx, HandleObject obj, JSType hint, MutableHan
/* Optimize new String(...).valueOf(). */
if (clasp == &StringObject::class_) {
StringObject* nobj = &obj->as<StringObject>();
- if (ClassMethodIsNative(cx, nobj, &StringObject::class_, id, str_toString)) {
+ if (HasNativeMethodPure(nobj, cx->names().valueOf, str_toString, cx)) {
vp.setString(nobj->unbox());
return true;
}
@@ -3021,7 +3017,7 @@ JS::OrdinaryToPrimitive(JSContext* cx, HandleObject obj, JSType hint, MutableHan
/* Optimize new Number(...).valueOf(). */
if (clasp == &NumberObject::class_) {
NumberObject* nobj = &obj->as<NumberObject>();
- if (ClassMethodIsNative(cx, nobj, &NumberObject::class_, id, num_valueOf)) {
+ if (HasNativeMethodPure(nobj, cx->names().valueOf, num_valueOf, cx)) {
vp.setNumber(nobj->unbox());
return true;
}
@@ -3680,16 +3676,6 @@ JSObject::allocKindForTenure(const js::Nursery& nursery) const
if (IsProxy(this))
return as<ProxyObject>().allocKindForTenure();
- // Unboxed arrays use inline data if their size is small enough.
- if (is<UnboxedArrayObject>()) {
- const UnboxedArrayObject* nobj = &as<UnboxedArrayObject>();
- size_t nbytes = UnboxedArrayObject::offsetOfInlineElements() +
- nobj->capacity() * nobj->elementSize();
- if (nbytes <= JSObject::MAX_BYTE_SIZE)
- return GetGCObjectKindForBytes(nbytes);
- return AllocKind::OBJECT0;
- }
-
// Inlined typed objects are followed by their data, so make sure we copy
// it all over to the new object.
if (is<InlineTypedObject>()) {
@@ -3873,10 +3859,10 @@ displayAtomFromObjectGroup(ObjectGroup& group)
return script->function()->displayAtom();
}
-bool
-JSObject::constructorDisplayAtom(JSContext* cx, js::MutableHandleAtom name)
+/* static */ bool
+JSObject::constructorDisplayAtom(JSContext* cx, js::HandleObject obj, js::MutableHandleAtom name)
{
- ObjectGroup *g = getGroup(cx);
+ ObjectGroup *g = JSObject::getGroup(cx, obj);
if (!g)
return false;
diff --git a/js/src/jsobj.h b/js/src/jsobj.h
index af79131af..db2c22b76 100644
--- a/js/src/jsobj.h
+++ b/js/src/jsobj.h
@@ -200,8 +200,8 @@ class JSObject : public js::gc::Cell
GENERATE_SHAPE
};
- bool setFlags(js::ExclusiveContext* cx, js::BaseShape::Flag flags,
- GenerateShape generateShape = GENERATE_NONE);
+ static bool setFlags(js::ExclusiveContext* cx, JS::HandleObject obj, js::BaseShape::Flag flags,
+ GenerateShape generateShape = GENERATE_NONE);
inline bool hasAllFlags(js::BaseShape::Flag flags) const;
/*
@@ -214,16 +214,16 @@ class JSObject : public js::gc::Cell
* (see Purge{Scope,Proto}Chain in jsobj.cpp).
*/
inline bool isDelegate() const;
- bool setDelegate(js::ExclusiveContext* cx) {
- return setFlags(cx, js::BaseShape::DELEGATE, GENERATE_SHAPE);
+ static bool setDelegate(js::ExclusiveContext* cx, JS::HandleObject obj) {
+ return setFlags(cx, obj, js::BaseShape::DELEGATE, GENERATE_SHAPE);
}
inline bool isBoundFunction() const;
inline bool hasSpecialEquality() const;
inline bool watched() const;
- bool setWatched(js::ExclusiveContext* cx) {
- return setFlags(cx, js::BaseShape::WATCHED, GENERATE_SHAPE);
+ static bool setWatched(js::ExclusiveContext* cx, JS::HandleObject obj) {
+ return setFlags(cx, obj, js::BaseShape::WATCHED, GENERATE_SHAPE);
}
// A "qualified" varobj is the object on which "qualified" variable
@@ -247,8 +247,8 @@ class JSObject : public js::gc::Cell
// (e.g., Gecko and XPConnect), as they often wish to run scripts under a
// scope that captures var bindings.
inline bool isQualifiedVarObj() const;
- bool setQualifiedVarObj(js::ExclusiveContext* cx) {
- return setFlags(cx, js::BaseShape::QUALIFIED_VAROBJ);
+ static bool setQualifiedVarObj(js::ExclusiveContext* cx, JS::HandleObject obj) {
+ return setFlags(cx, obj, js::BaseShape::QUALIFIED_VAROBJ);
}
// An "unqualified" varobj is the object on which "unqualified"
@@ -262,11 +262,11 @@ class JSObject : public js::gc::Cell
// generate a new shape when their prototype changes, regardless of this
// hasUncacheableProto flag.
inline bool hasUncacheableProto() const;
- bool setUncacheableProto(js::ExclusiveContext* cx) {
- MOZ_ASSERT(hasStaticPrototype(),
+ static bool setUncacheableProto(js::ExclusiveContext* cx, JS::HandleObject obj) {
+ MOZ_ASSERT(obj->hasStaticPrototype(),
"uncacheability as a concept is only applicable to static "
"(not dynamically-computed) prototypes");
- return setFlags(cx, js::BaseShape::UNCACHEABLE_PROTO, GENERATE_SHAPE);
+ return setFlags(cx, obj, js::BaseShape::UNCACHEABLE_PROTO, GENERATE_SHAPE);
}
/*
@@ -274,8 +274,8 @@ class JSObject : public js::gc::Cell
* PropertyTree::MAX_HEIGHT.
*/
inline bool hadElementsAccess() const;
- bool setHadElementsAccess(js::ExclusiveContext* cx) {
- return setFlags(cx, js::BaseShape::HAD_ELEMENTS_ACCESS);
+ static bool setHadElementsAccess(js::ExclusiveContext* cx, JS::HandleObject obj) {
+ return setFlags(cx, obj, js::BaseShape::HAD_ELEMENTS_ACCESS);
}
/*
@@ -288,7 +288,8 @@ class JSObject : public js::gc::Cell
* If this object was instantiated with `new Ctor`, return the constructor's
* display atom. Otherwise, return nullptr.
*/
- bool constructorDisplayAtom(JSContext* cx, js::MutableHandleAtom name);
+ static bool constructorDisplayAtom(JSContext* cx, js::HandleObject obj,
+ js::MutableHandleAtom name);
/*
* The same as constructorDisplayAtom above, however if this object has a
@@ -348,7 +349,7 @@ class JSObject : public js::gc::Cell
// Change an existing object to have a singleton group.
static bool changeToSingleton(JSContext* cx, js::HandleObject obj);
- inline js::ObjectGroup* getGroup(JSContext* cx);
+ static inline js::ObjectGroup* getGroup(JSContext* cx, js::HandleObject obj);
const js::GCPtrObjectGroup& groupFromGC() const {
/* Direct field access for use by GC. */
@@ -420,8 +421,8 @@ class JSObject : public js::gc::Cell
* is purged on GC.
*/
inline bool isIteratedSingleton() const;
- bool setIteratedSingleton(js::ExclusiveContext* cx) {
- return setFlags(cx, js::BaseShape::ITERATED_SINGLETON);
+ static bool setIteratedSingleton(js::ExclusiveContext* cx, JS::HandleObject obj) {
+ return setFlags(cx, obj, js::BaseShape::ITERATED_SINGLETON);
}
/*
@@ -433,18 +434,19 @@ class JSObject : public js::gc::Cell
// Mark an object as having its 'new' script information cleared.
inline bool wasNewScriptCleared() const;
- bool setNewScriptCleared(js::ExclusiveContext* cx) {
- return setFlags(cx, js::BaseShape::NEW_SCRIPT_CLEARED);
+ static bool setNewScriptCleared(js::ExclusiveContext* cx, JS::HandleObject obj) {
+ return setFlags(cx, obj, js::BaseShape::NEW_SCRIPT_CLEARED);
}
/* Set a new prototype for an object with a singleton type. */
- bool splicePrototype(JSContext* cx, const js::Class* clasp, js::Handle<js::TaggedProto> proto);
+ static bool splicePrototype(JSContext* cx, js::HandleObject obj, const js::Class* clasp,
+ js::Handle<js::TaggedProto> proto);
/*
* For bootstrapping, whether to splice a prototype for Function.prototype
* or the global object.
*/
- bool shouldSplicePrototype(JSContext* cx);
+ bool shouldSplicePrototype();
/*
* Environment chains.
@@ -518,8 +520,9 @@ class JSObject : public js::gc::Cell
public:
static bool reportReadOnly(JSContext* cx, jsid id, unsigned report = JSREPORT_ERROR);
- bool reportNotConfigurable(JSContext* cx, jsid id, unsigned report = JSREPORT_ERROR);
- bool reportNotExtensible(JSContext* cx, unsigned report = JSREPORT_ERROR);
+ static bool reportNotConfigurable(JSContext* cx, jsid id, unsigned report = JSREPORT_ERROR);
+ static bool reportNotExtensible(JSContext* cx, js::HandleObject obj,
+ unsigned report = JSREPORT_ERROR);
static bool nonNativeSetProperty(JSContext* cx, js::HandleObject obj, js::HandleId id,
js::HandleValue v, js::HandleValue receiver,
diff --git a/js/src/jsobjinlines.h b/js/src/jsobjinlines.h
index 6be4d0d28..c132ee6b2 100644
--- a/js/src/jsobjinlines.h
+++ b/js/src/jsobjinlines.h
@@ -32,21 +32,6 @@
#include "vm/ShapedObject-inl.h"
#include "vm/TypeInference-inl.h"
-namespace js {
-
-// This is needed here for ensureShape() below.
-inline bool
-MaybeConvertUnboxedObjectToNative(ExclusiveContext* cx, JSObject* obj)
-{
- if (obj->is<UnboxedPlainObject>())
- return UnboxedPlainObject::convertToNative(cx->asJSContext(), obj);
- if (obj->is<UnboxedArrayObject>())
- return UnboxedArrayObject::convertToNative(cx->asJSContext(), obj);
- return true;
-}
-
-} // namespace js
-
inline js::Shape*
JSObject::maybeShape() const
{
@@ -59,8 +44,6 @@ JSObject::maybeShape() const
inline js::Shape*
JSObject::ensureShape(js::ExclusiveContext* cx)
{
- if (!js::MaybeConvertUnboxedObjectToNative(cx, this))
- return nullptr;
js::Shape* shape = maybeShape();
MOZ_ASSERT(shape);
return shape;
@@ -134,17 +117,16 @@ JSObject::setSingleton(js::ExclusiveContext* cx, js::HandleObject obj)
return true;
}
-inline js::ObjectGroup*
-JSObject::getGroup(JSContext* cx)
+/* static */ inline js::ObjectGroup*
+JSObject::getGroup(JSContext* cx, js::HandleObject obj)
{
- MOZ_ASSERT(cx->compartment() == compartment());
- if (hasLazyGroup()) {
- JS::RootedObject self(cx, this);
- if (cx->compartment() != compartment())
+ MOZ_ASSERT(cx->compartment() == obj->compartment());
+ if (obj->hasLazyGroup()) {
+ if (cx->compartment() != obj->compartment())
MOZ_CRASH();
- return makeLazyGroup(cx, self);
+ return makeLazyGroup(cx, obj);
}
- return group_;
+ return obj->group_;
}
inline void
@@ -574,48 +556,30 @@ IsNativeFunction(const js::Value& v, JSNative native)
return IsFunctionObject(v, &fun) && fun->maybeNative() == native;
}
-/*
- * When we have an object of a builtin class, we don't quite know what its
- * valueOf/toString methods are, since these methods may have been overwritten
- * or shadowed. However, we can still do better than the general case by
- * hard-coding the necessary properties for us to find the native we expect.
- *
- * TODO: a per-thread shape-based cache would be faster and simpler.
- */
+// Return whether looking up a method on 'obj' definitely resolves to the
+// original specified native function. The method may conservatively return
+// 'false' in the case of proxies or other non-native objects.
static MOZ_ALWAYS_INLINE bool
-ClassMethodIsNative(JSContext* cx, NativeObject* obj, const Class* clasp, jsid methodid, JSNative native)
+HasNativeMethodPure(JSObject* obj, PropertyName* name, JSNative native, JSContext* cx)
{
- MOZ_ASSERT(obj->getClass() == clasp);
-
Value v;
- if (!HasDataProperty(cx, obj, methodid, &v)) {
- JSObject* proto = obj->staticPrototype();
- if (!proto || proto->getClass() != clasp || !HasDataProperty(cx, &proto->as<NativeObject>(), methodid, &v))
- return false;
- }
+ if (!GetPropertyPure(cx, obj, NameToId(name), &v))
+ return false;
return IsNativeFunction(v, native);
}
-// Return whether looking up 'valueOf' on 'obj' definitely resolves to the
-// original Object.prototype.valueOf. The method may conservatively return
-// 'false' in the case of proxies or other non-native objects.
+// Return whether 'obj' definitely has no @@toPrimitive method.
static MOZ_ALWAYS_INLINE bool
-HasObjectValueOf(JSObject* obj, JSContext* cx)
+HasNoToPrimitiveMethodPure(JSObject* obj, JSContext* cx)
{
- if (obj->is<ProxyObject>() || !obj->isNative())
+ jsid id = SYMBOL_TO_JSID(cx->wellKnownSymbols().toPrimitive);
+ JSObject* pobj;
+ Shape* shape;
+ if (!LookupPropertyPure(cx, obj, id, &pobj, &shape))
return false;
- jsid valueOf = NameToId(cx->names().valueOf);
-
- Value v;
- while (!HasDataProperty(cx, &obj->as<NativeObject>(), valueOf, &v)) {
- obj = obj->staticPrototype();
- if (!obj || obj->is<ProxyObject>() || !obj->isNative())
- return false;
- }
-
- return IsNativeFunction(v, obj_valueOf);
+ return !shape;
}
/* ES6 draft rev 28 (2014 Oct 14) 7.1.14 */
diff --git a/js/src/json.cpp b/js/src/json.cpp
index 425a2f117..08382b97b 100644
--- a/js/src/json.cpp
+++ b/js/src/json.cpp
@@ -971,9 +971,9 @@ static const JSFunctionSpec json_static_methods[] = {
JSObject*
js::InitJSONClass(JSContext* cx, HandleObject obj)
{
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
- RootedObject proto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!proto)
return nullptr;
RootedObject JSON(cx, NewObjectWithGivenProto(cx, &JSONClass, proto, SingletonObject));
diff --git a/js/src/jsopcode.cpp b/js/src/jsopcode.cpp
index 6adb5401e..d1ae3cd5e 100644
--- a/js/src/jsopcode.cpp
+++ b/js/src/jsopcode.cpp
@@ -132,7 +132,8 @@ js::StackUses(JSScript* script, jsbytecode* pc)
return 2 + GET_ARGC(pc) + 1;
default:
/* stack: fun, this, [argc arguments] */
- MOZ_ASSERT(op == JSOP_CALL || op == JSOP_EVAL || op == JSOP_CALLITER ||
+ MOZ_ASSERT(op == JSOP_CALL || op == JSOP_CALL_IGNORES_RV || op == JSOP_EVAL ||
+ op == JSOP_CALLITER ||
op == JSOP_STRICTEVAL || op == JSOP_FUNCALL || op == JSOP_FUNAPPLY);
return 2 + GET_ARGC(pc);
}
@@ -1363,6 +1364,7 @@ ExpressionDecompiler::decompilePC(jsbytecode* pc)
case JSOP_NEWTARGET:
return write("new.target");
case JSOP_CALL:
+ case JSOP_CALL_IGNORES_RV:
case JSOP_CALLITER:
case JSOP_FUNCALL:
return decompilePCForStackOperand(pc, -int32_t(GET_ARGC(pc) + 2)) &&
@@ -1662,7 +1664,7 @@ DecompileArgumentFromStack(JSContext* cx, int formalIndex, char** res)
/* Don't handle getters, setters or calls from fun.call/fun.apply. */
JSOp op = JSOp(*current);
- if (op != JSOP_CALL && op != JSOP_NEW)
+ if (op != JSOP_CALL && op != JSOP_CALL_IGNORES_RV && op != JSOP_NEW)
return true;
if (static_cast<unsigned>(formalIndex) >= GET_ARGC(current))
@@ -1725,6 +1727,8 @@ js::CallResultEscapes(jsbytecode* pc)
if (*pc == JSOP_CALL)
pc += JSOP_CALL_LENGTH;
+ else if (*pc == JSOP_CALL_IGNORES_RV)
+ pc += JSOP_CALL_IGNORES_RV_LENGTH;
else if (*pc == JSOP_SPREADCALL)
pc += JSOP_SPREADCALL_LENGTH;
else
@@ -2214,6 +2218,7 @@ GenerateLcovInfo(JSContext* cx, JSCompartment* comp, GenericPrinter& out)
return false;
RootedScript script(cx);
+ RootedFunction fun(cx);
do {
script = queue.popCopy();
compCover.collectCodeCoverageInfo(comp, script->sourceObject(), script);
@@ -2231,15 +2236,15 @@ GenerateLcovInfo(JSContext* cx, JSCompartment* comp, GenericPrinter& out)
// Only continue on JSFunction objects.
if (!obj->is<JSFunction>())
continue;
- JSFunction& fun = obj->as<JSFunction>();
+ fun = &obj->as<JSFunction>();
// Let's skip wasm for now.
- if (!fun.isInterpreted())
+ if (!fun->isInterpreted())
continue;
// Queue the script in the list of script associated to the
// current source.
- JSScript* childScript = fun.getOrCreateScript(cx);
+ JSScript* childScript = JSFunction::getOrCreateScript(cx, fun);
if (!childScript || !queue.append(childScript))
return false;
}
diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp
index 33ae56d6f..fc7438e3b 100644
--- a/js/src/jsscript.cpp
+++ b/js/src/jsscript.cpp
@@ -235,7 +235,8 @@ XDRRelazificationInfo(XDRState<mode>* xdr, HandleFunction fun, HandleScript scri
{
uint32_t begin = script->sourceStart();
uint32_t end = script->sourceEnd();
- uint32_t preludeStart = script->preludeStart();
+ uint32_t toStringStart = script->toStringStart();
+ uint32_t toStringEnd = script->toStringEnd();
uint32_t lineno = script->lineno();
uint32_t column = script->column();
@@ -243,7 +244,8 @@ XDRRelazificationInfo(XDRState<mode>* xdr, HandleFunction fun, HandleScript scri
packedFields = lazy->packedFields();
MOZ_ASSERT(begin == lazy->begin());
MOZ_ASSERT(end == lazy->end());
- MOZ_ASSERT(preludeStart == lazy->preludeStart());
+ MOZ_ASSERT(toStringStart == lazy->toStringStart());
+ MOZ_ASSERT(toStringEnd == lazy->toStringEnd());
MOZ_ASSERT(lineno == lazy->lineno());
MOZ_ASSERT(column == lazy->column());
// We can assert we have no inner functions because we don't
@@ -257,7 +259,12 @@ XDRRelazificationInfo(XDRState<mode>* xdr, HandleFunction fun, HandleScript scri
if (mode == XDR_DECODE) {
lazy.set(LazyScript::Create(cx, fun, script, enclosingScope, script,
- packedFields, begin, end, preludeStart, lineno, column));
+ packedFields, begin, end, toStringStart, lineno, column));
+
+ if (!lazy)
+ return false;
+
+ lazy->setToStringEnd(toStringEnd);
// As opposed to XDRLazyScript, we need to restore the runtime bits
// of the script, as we are trying to match the fact this function
@@ -319,6 +326,7 @@ js::XDRScript(XDRState<mode>* xdr, HandleScope scriptEnclosingScope, HandleScrip
IsStarGenerator,
IsAsync,
HasRest,
+ IsExprBody,
OwnSource,
ExplicitUseStrict,
SelfHosted,
@@ -436,6 +444,8 @@ js::XDRScript(XDRState<mode>* xdr, HandleScope scriptEnclosingScope, HandleScrip
scriptBits |= (1 << IsAsync);
if (script->hasRest())
scriptBits |= (1 << HasRest);
+ if (script->isExprBody())
+ scriptBits |= (1 << IsExprBody);
if (script->hasSingletons())
scriptBits |= (1 << HasSingleton);
if (script->treatAsRunOnce())
@@ -519,7 +529,7 @@ js::XDRScript(XDRState<mode>* xdr, HandleScope scriptEnclosingScope, HandleScrip
sourceObject = &enclosingScript->sourceObject()->as<ScriptSourceObject>();
}
- script = JSScript::Create(cx, options, sourceObject, 0, 0, 0);
+ script = JSScript::Create(cx, options, sourceObject, 0, 0, 0, 0);
if (!script)
return false;
@@ -589,6 +599,8 @@ js::XDRScript(XDRState<mode>* xdr, HandleScope scriptEnclosingScope, HandleScrip
script->setAsyncKind(AsyncFunction);
if (scriptBits & (1 << HasRest))
script->setHasRest();
+ if (scriptBits & (1 << IsExprBody))
+ script->setIsExprBody();
}
JS_STATIC_ASSERT(sizeof(jsbytecode) == 1);
@@ -602,7 +614,9 @@ js::XDRScript(XDRState<mode>* xdr, HandleScope scriptEnclosingScope, HandleScrip
return false;
if (!xdr->codeUint32(&script->sourceEnd_))
return false;
- if (!xdr->codeUint32(&script->preludeStart_))
+ if (!xdr->codeUint32(&script->toStringStart_))
+ return false;
+ if (!xdr->codeUint32(&script->toStringEnd_))
return false;
if (!xdr->codeUint32(&lineno) ||
@@ -934,7 +948,8 @@ js::XDRLazyScript(XDRState<mode>* xdr, HandleScope enclosingScope, HandleScript
{
uint32_t begin;
uint32_t end;
- uint32_t preludeStart;
+ uint32_t toStringStart;
+ uint32_t toStringEnd;
uint32_t lineno;
uint32_t column;
uint64_t packedFields;
@@ -948,14 +963,16 @@ js::XDRLazyScript(XDRState<mode>* xdr, HandleScope enclosingScope, HandleScript
begin = lazy->begin();
end = lazy->end();
- preludeStart = lazy->preludeStart();
+ toStringStart = lazy->toStringStart();
+ toStringEnd = lazy->toStringEnd();
lineno = lazy->lineno();
column = lazy->column();
packedFields = lazy->packedFields();
}
if (!xdr->codeUint32(&begin) || !xdr->codeUint32(&end) ||
- !xdr->codeUint32(&preludeStart) ||
+ !xdr->codeUint32(&toStringStart) ||
+ !xdr->codeUint32(&toStringEnd) ||
!xdr->codeUint32(&lineno) || !xdr->codeUint32(&column) ||
!xdr->codeUint64(&packedFields))
{
@@ -964,9 +981,10 @@ js::XDRLazyScript(XDRState<mode>* xdr, HandleScope enclosingScope, HandleScript
if (mode == XDR_DECODE) {
lazy.set(LazyScript::Create(cx, fun, nullptr, enclosingScope, enclosingScript,
- packedFields, begin, end, preludeStart, lineno, column));
+ packedFields, begin, end, toStringStart, lineno, column));
if (!lazy)
return false;
+ lazy->setToStringEnd(toStringEnd);
fun->initLazyScript(lazy);
}
}
@@ -1010,6 +1028,15 @@ JSScript::setSourceObject(JSObject* object)
sourceObject_ = object;
}
+void
+JSScript::setDefaultClassConstructorSpan(JSObject* sourceObject, uint32_t start, uint32_t end)
+{
+ MOZ_ASSERT(isDefaultClassConstructor());
+ setSourceObject(sourceObject);
+ toStringStart_ = start;
+ toStringEnd_ = end;
+}
+
js::ScriptSourceObject&
JSScript::scriptSourceUnwrap() const {
return UncheckedUnwrap(sourceObject())->as<ScriptSourceObject>();
@@ -1430,18 +1457,18 @@ JSScript::loadSource(JSContext* cx, ScriptSource* ss, bool* worked)
return true;
}
-JSFlatString*
-JSScript::sourceData(JSContext* cx)
+/* static */ JSFlatString*
+JSScript::sourceData(JSContext* cx, HandleScript script)
{
- MOZ_ASSERT(scriptSource()->hasSourceData());
- return scriptSource()->substring(cx, sourceStart(), sourceEnd());
+ MOZ_ASSERT(script->scriptSource()->hasSourceData());
+ return script->scriptSource()->substring(cx, script->sourceStart(), script->sourceEnd());
}
-JSFlatString*
-JSScript::sourceDataWithPrelude(JSContext* cx)
+/* static */ JSFlatString*
+JSScript::sourceDataForToString(JSContext* cx, HandleScript script)
{
- MOZ_ASSERT(scriptSource()->hasSourceData());
- return scriptSource()->substring(cx, preludeStart(), sourceEnd());
+ MOZ_ASSERT(script->scriptSource()->hasSourceData());
+ return script->scriptSource()->substring(cx, script->toStringStart(), script->toStringEnd());
}
UncompressedSourceCache::AutoHoldEntry::AutoHoldEntry()
@@ -2443,9 +2470,15 @@ JSScript::initCompartment(ExclusiveContext* cx)
/* static */ JSScript*
JSScript::Create(ExclusiveContext* cx, const ReadOnlyCompileOptions& options,
HandleObject sourceObject, uint32_t bufStart, uint32_t bufEnd,
- uint32_t preludeStart)
+ uint32_t toStringStart, uint32_t toStringEnd)
{
+ // bufStart and bufEnd specify the range of characters parsed by the
+ // Parser to produce this script. toStringStart and toStringEnd specify
+ // the range of characters to be returned for Function.prototype.toString.
MOZ_ASSERT(bufStart <= bufEnd);
+ MOZ_ASSERT(toStringStart <= toStringEnd);
+ MOZ_ASSERT(toStringStart <= bufStart);
+ MOZ_ASSERT(toStringEnd >= bufEnd);
RootedScript script(cx, Allocate<JSScript>(cx));
if (!script)
@@ -2465,7 +2498,8 @@ JSScript::Create(ExclusiveContext* cx, const ReadOnlyCompileOptions& options,
script->setSourceObject(sourceObject);
script->sourceStart_ = bufStart;
script->sourceEnd_ = bufEnd;
- script->preludeStart_ = preludeStart;
+ script->toStringStart_ = toStringStart;
+ script->toStringEnd_ = toStringEnd;
return script;
}
@@ -2660,6 +2694,8 @@ JSScript::initFromFunctionBox(ExclusiveContext* cx, HandleScript script,
script->setAsyncKind(funbox->asyncKind());
if (funbox->hasRest())
script->setHasRest();
+ if (funbox->isExprBody())
+ script->setIsExprBody();
PositionalFormalParameterIter fi(script);
while (fi && !fi.closedOver())
@@ -3261,7 +3297,7 @@ js::detail::CopyScript(JSContext* cx, HandleScript src, HandleScript dst,
} else {
if (innerFun->isInterpretedLazy()) {
AutoCompartment ac(cx, innerFun);
- if (!innerFun->getOrCreateScript(cx))
+ if (!JSFunction::getOrCreateScript(cx, innerFun))
return false;
}
@@ -3320,6 +3356,7 @@ js::detail::CopyScript(JSContext* cx, HandleScript src, HandleScript dst,
dst->isDefaultClassConstructor_ = src->isDefaultClassConstructor();
dst->isAsync_ = src->asyncKind() == AsyncFunction;
dst->hasRest_ = src->hasRest_;
+ dst->isExprBody_ = src->isExprBody_;
if (nconsts != 0) {
GCPtrValue* vector = Rebase<GCPtrValue>(dst, src, src->consts()->vector);
@@ -3399,7 +3436,7 @@ CreateEmptyScriptForClone(JSContext* cx, HandleScript src)
.setVersion(src->getVersion());
return JSScript::Create(cx, options, sourceObject, src->sourceStart(), src->sourceEnd(),
- src->preludeStart());
+ src->toStringStart(), src->toStringEnd());
}
JSScript*
@@ -3950,7 +3987,7 @@ JSScript::formalLivesInArgumentsObject(unsigned argSlot)
LazyScript::LazyScript(JSFunction* fun, void* table, uint64_t packedFields,
uint32_t begin, uint32_t end,
- uint32_t preludeStart, uint32_t lineno, uint32_t column)
+ uint32_t toStringStart, uint32_t lineno, uint32_t column)
: script_(nullptr),
function_(fun),
enclosingScope_(nullptr),
@@ -3959,11 +3996,13 @@ LazyScript::LazyScript(JSFunction* fun, void* table, uint64_t packedFields,
packedFields_(packedFields),
begin_(begin),
end_(end),
- preludeStart_(preludeStart),
+ toStringStart_(toStringStart),
+ toStringEnd_(end),
lineno_(lineno),
column_(column)
{
MOZ_ASSERT(begin <= end);
+ MOZ_ASSERT(toStringStart <= begin);
}
void
@@ -4009,7 +4048,7 @@ LazyScript::maybeForwardedScriptSource() const
/* static */ LazyScript*
LazyScript::CreateRaw(ExclusiveContext* cx, HandleFunction fun,
uint64_t packedFields, uint32_t begin, uint32_t end,
- uint32_t preludeStart, uint32_t lineno, uint32_t column)
+ uint32_t toStringStart, uint32_t lineno, uint32_t column)
{
union {
PackedView p;
@@ -4038,7 +4077,7 @@ LazyScript::CreateRaw(ExclusiveContext* cx, HandleFunction fun,
cx->compartment()->scheduleDelazificationForDebugger();
return new (res) LazyScript(fun, table.forget(), packed, begin, end,
- preludeStart, lineno, column);
+ toStringStart, lineno, column);
}
/* static */ LazyScript*
@@ -4047,7 +4086,7 @@ LazyScript::Create(ExclusiveContext* cx, HandleFunction fun,
Handle<GCVector<JSFunction*, 8>> innerFunctions,
JSVersion version,
uint32_t begin, uint32_t end,
- uint32_t preludeStart, uint32_t lineno, uint32_t column)
+ uint32_t toStringStart, uint32_t lineno, uint32_t column)
{
union {
PackedView p;
@@ -4059,6 +4098,7 @@ LazyScript::Create(ExclusiveContext* cx, HandleFunction fun,
p.hasThisBinding = false;
p.isAsync = false;
p.hasRest = false;
+ p.isExprBody = false;
p.numClosedOverBindings = closedOverBindings.length();
p.numInnerFunctions = innerFunctions.length();
p.generatorKindBits = GeneratorKindAsBits(NotGenerator);
@@ -4070,7 +4110,7 @@ LazyScript::Create(ExclusiveContext* cx, HandleFunction fun,
p.isDerivedClassConstructor = false;
p.needsHomeObject = false;
- LazyScript* res = LazyScript::CreateRaw(cx, fun, packedFields, begin, end, preludeStart,
+ LazyScript* res = LazyScript::CreateRaw(cx, fun, packedFields, begin, end, toStringStart,
lineno, column);
if (!res)
return nullptr;
@@ -4092,7 +4132,7 @@ LazyScript::Create(ExclusiveContext* cx, HandleFunction fun,
HandleScript script, HandleScope enclosingScope,
HandleScript enclosingScript,
uint64_t packedFields, uint32_t begin, uint32_t end,
- uint32_t preludeStart, uint32_t lineno, uint32_t column)
+ uint32_t toStringStart, uint32_t lineno, uint32_t column)
{
// Dummy atom which is not a valid property name.
RootedAtom dummyAtom(cx, cx->names().comma);
@@ -4101,7 +4141,7 @@ LazyScript::Create(ExclusiveContext* cx, HandleFunction fun,
// holding this lazy script.
HandleFunction dummyFun = fun;
- LazyScript* res = LazyScript::CreateRaw(cx, fun, packedFields, begin, end, preludeStart,
+ LazyScript* res = LazyScript::CreateRaw(cx, fun, packedFields, begin, end, toStringStart,
lineno, column);
if (!res)
return nullptr;
@@ -4287,7 +4327,7 @@ JSScript::AutoDelazify::holdScript(JS::HandleFunction fun)
script_ = fun->nonLazyScript();
} else {
JSAutoCompartment ac(cx_, fun);
- script_ = fun->getOrCreateScript(cx_);
+ script_ = JSFunction::getOrCreateScript(cx_, fun);
if (script_) {
oldDoNotRelazify_ = script_->doNotRelazify_;
script_->setDoNotRelazify(true);
diff --git a/js/src/jsscript.h b/js/src/jsscript.h
index bb8635581..85eb2938d 100644
--- a/js/src/jsscript.h
+++ b/js/src/jsscript.h
@@ -853,19 +853,36 @@ class JSScript : public js::gc::TenuredCell
uint32_t bodyScopeIndex_; /* index into the scopes array of the body scope */
- // Range of characters in scriptSource which contains this script's source.
- // each field points the following location.
+ // Range of characters in scriptSource which contains this script's
+ // source, that is, the range used by the Parser to produce this script.
+ //
+ // Most scripted functions have sourceStart_ == toStringStart_ and
+ // sourceEnd_ == toStringEnd_. However, for functions with extra
+ // qualifiers (e.g. generators, async) and for class constructors (which
+ // need to return the entire class source), their values differ.
+ //
+ // Each field points the following locations.
//
// function * f(a, b) { return a + b; }
// ^ ^ ^
// | | |
// | sourceStart_ sourceEnd_
- // |
- // preludeStart_
+ // | |
+ // toStringStart_ toStringEnd_
+ //
+ // And, in the case of class constructors, an additional toStringEnd
+ // offset is used.
//
+ // class C { constructor() { this.field = 42; } }
+ // ^ ^ ^ ^
+ // | | | `---------`
+ // | sourceStart_ sourceEnd_ |
+ // | |
+ // toStringStart_ toStringEnd_
uint32_t sourceStart_;
uint32_t sourceEnd_;
- uint32_t preludeStart_;
+ uint32_t toStringStart_;
+ uint32_t toStringEnd_;
// Number of times the script has been called or has had backedges taken.
// When running in ion, also increased for any inlined scripts. Reset if
@@ -1021,12 +1038,13 @@ class JSScript : public js::gc::TenuredCell
bool isAsync_:1;
bool hasRest_:1;
+ bool isExprBody_:1;
// Add padding so JSScript is gc::Cell aligned. Make padding protected
// instead of private to suppress -Wunused-private-field compiler warnings.
protected:
#if JS_BITS_PER_WORD == 32
- uint32_t padding;
+ // Currently no padding is needed.
#endif
//
@@ -1036,8 +1054,9 @@ class JSScript : public js::gc::TenuredCell
public:
static JSScript* Create(js::ExclusiveContext* cx,
const JS::ReadOnlyCompileOptions& options,
- js::HandleObject sourceObject, uint32_t sourceStart,
- uint32_t sourceEnd, uint32_t preludeStart);
+ js::HandleObject sourceObject,
+ uint32_t sourceStart, uint32_t sourceEnd,
+ uint32_t toStringStart, uint32_t toStringEnd);
void initCompartment(js::ExclusiveContext* cx);
@@ -1184,8 +1203,12 @@ class JSScript : public js::gc::TenuredCell
return sourceEnd_;
}
- size_t preludeStart() const {
- return preludeStart_;
+ uint32_t toStringStart() const {
+ return toStringStart_;
+ }
+
+ uint32_t toStringEnd() const {
+ return toStringEnd_;
}
bool noScriptRval() const {
@@ -1329,6 +1352,13 @@ class JSScript : public js::gc::TenuredCell
hasRest_ = true;
}
+ bool isExprBody() const {
+ return isExprBody_;
+ }
+ void setIsExprBody() {
+ isExprBody_ = true;
+ }
+
void setNeedsHomeObject() {
needsHomeObject_ = true;
}
@@ -1464,6 +1494,7 @@ class JSScript : public js::gc::TenuredCell
bool isRelazifiable() const {
return (selfHosted() || lazyScript) && !hasInnerFunctions_ && !types_ &&
!isGenerator() && !hasBaselineScript() && !hasAnyIonScript() &&
+ !isDefaultClassConstructor() &&
!doNotRelazify_;
}
void setLazyScript(js::LazyScript* lazy) {
@@ -1491,7 +1522,7 @@ class JSScript : public js::gc::TenuredCell
* De-lazifies the canonical function. Must be called before entering code
* that expects the function to be non-lazy.
*/
- inline void ensureNonLazyCanonicalFunction(JSContext* cx);
+ inline void ensureNonLazyCanonicalFunction();
js::ModuleObject* module() const {
if (bodyScope()->is<js::ModuleScope>())
@@ -1510,8 +1541,8 @@ class JSScript : public js::gc::TenuredCell
// directly, via lazy arguments or a rest parameter.
bool mayReadFrameArgsDirectly();
- JSFlatString* sourceData(JSContext* cx);
- JSFlatString* sourceDataWithPrelude(JSContext* cx);
+ static JSFlatString* sourceData(JSContext* cx, JS::HandleScript script);
+ static JSFlatString* sourceDataForToString(JSContext* cx, JS::HandleScript script);
static bool loadSource(JSContext* cx, js::ScriptSource* ss, bool* worked);
@@ -1526,6 +1557,8 @@ class JSScript : public js::gc::TenuredCell
const char* filename() const { return scriptSource()->filename(); }
const char* maybeForwardedFilename() const { return maybeForwardedScriptSource()->filename(); }
+ void setDefaultClassConstructorSpan(JSObject* sourceObject, uint32_t start, uint32_t end);
+
public:
/* Return whether this script was compiled for 'eval' */
@@ -1931,12 +1964,11 @@ class LazyScript : public gc::TenuredCell
// instead of private to suppress -Wunused-private-field compiler warnings.
protected:
#if JS_BITS_PER_WORD == 32
- // uint32_t padding;
- // Currently no padding is needed.
+ uint32_t padding;
#endif
private:
- static const uint32_t NumClosedOverBindingsBits = 21;
+ static const uint32_t NumClosedOverBindingsBits = 20;
static const uint32_t NumInnerFunctionsBits = 20;
struct PackedView {
@@ -1946,7 +1978,12 @@ class LazyScript : public gc::TenuredCell
uint32_t shouldDeclareArguments : 1;
uint32_t hasThisBinding : 1;
uint32_t isAsync : 1;
+ uint32_t isExprBody : 1;
+
uint32_t numClosedOverBindings : NumClosedOverBindingsBits;
+
+ // -- 32bit boundary --
+
uint32_t numInnerFunctions : NumInnerFunctionsBits;
uint32_t generatorKindBits : 2;
@@ -1975,14 +2012,15 @@ class LazyScript : public gc::TenuredCell
// See the comment in JSScript for the details.
uint32_t begin_;
uint32_t end_;
- uint32_t preludeStart_;
+ uint32_t toStringStart_;
+ uint32_t toStringEnd_;
// Line and column of |begin_| position, that is the position where we
// start parsing.
uint32_t lineno_;
uint32_t column_;
LazyScript(JSFunction* fun, void* table, uint64_t packedFields,
- uint32_t begin, uint32_t end, uint32_t preludeStart,
+ uint32_t begin, uint32_t end, uint32_t toStringStart,
uint32_t lineno, uint32_t column);
// Create a LazyScript without initializing the closedOverBindings and the
@@ -1990,7 +2028,7 @@ class LazyScript : public gc::TenuredCell
// with valid atoms and functions.
static LazyScript* CreateRaw(ExclusiveContext* cx, HandleFunction fun,
uint64_t packedData, uint32_t begin, uint32_t end,
- uint32_t preludeStart, uint32_t lineno, uint32_t column);
+ uint32_t toStringStart, uint32_t lineno, uint32_t column);
public:
static const uint32_t NumClosedOverBindingsLimit = 1 << NumClosedOverBindingsBits;
@@ -2002,7 +2040,7 @@ class LazyScript : public gc::TenuredCell
const frontend::AtomVector& closedOverBindings,
Handle<GCVector<JSFunction*, 8>> innerFunctions,
JSVersion version, uint32_t begin, uint32_t end,
- uint32_t preludeStart, uint32_t lineno, uint32_t column);
+ uint32_t toStringStart, uint32_t lineno, uint32_t column);
// Create a LazyScript and initialize the closedOverBindings and the
// innerFunctions with dummy values to be replaced in a later initialization
@@ -2017,11 +2055,11 @@ class LazyScript : public gc::TenuredCell
HandleScript script, HandleScope enclosingScope,
HandleScript enclosingScript,
uint64_t packedData, uint32_t begin, uint32_t end,
- uint32_t preludeStart, uint32_t lineno, uint32_t column);
+ uint32_t toStringStart, uint32_t lineno, uint32_t column);
void initRuntimeFields(uint64_t packedFields);
- inline JSFunction* functionDelazifying(JSContext* cx) const;
+ static inline JSFunction* functionDelazifying(JSContext* cx, Handle<LazyScript*>);
JSFunction* functionNonDelazifying() const {
return function_;
}
@@ -2104,6 +2142,13 @@ class LazyScript : public gc::TenuredCell
p_.hasRest = true;
}
+ bool isExprBody() const {
+ return p_.isExprBody;
+ }
+ void setIsExprBody() {
+ p_.isExprBody = true;
+ }
+
bool strict() const {
return p_.strict;
}
@@ -2190,8 +2235,11 @@ class LazyScript : public gc::TenuredCell
uint32_t end() const {
return end_;
}
- uint32_t preludeStart() const {
- return preludeStart_;
+ uint32_t toStringStart() const {
+ return toStringStart_;
+ }
+ uint32_t toStringEnd() const {
+ return toStringEnd_;
}
uint32_t lineno() const {
return lineno_;
@@ -2200,6 +2248,12 @@ class LazyScript : public gc::TenuredCell
return column_;
}
+ void setToStringEnd(uint32_t toStringEnd) {
+ MOZ_ASSERT(toStringStart_ <= toStringEnd);
+ MOZ_ASSERT(toStringEnd_ >= end_);
+ toStringEnd_ = toStringEnd;
+ }
+
bool hasUncompiledEnclosingScript() const;
friend class GCMarker;
diff --git a/js/src/jsscriptinlines.h b/js/src/jsscriptinlines.h
index da23804ac..e1052111b 100644
--- a/js/src/jsscriptinlines.h
+++ b/js/src/jsscriptinlines.h
@@ -74,13 +74,13 @@ void
SetFrameArgumentsObject(JSContext* cx, AbstractFramePtr frame,
HandleScript script, JSObject* argsobj);
-inline JSFunction*
-LazyScript::functionDelazifying(JSContext* cx) const
+/* static */ inline JSFunction*
+LazyScript::functionDelazifying(JSContext* cx, Handle<LazyScript*> script)
{
- Rooted<const LazyScript*> self(cx, this);
- if (self->function_ && !self->function_->getOrCreateScript(cx))
+ RootedFunction fun(cx, script->function_);
+ if (script->function_ && !JSFunction::getOrCreateScript(cx, fun))
return nullptr;
- return self->function_;
+ return script->function_;
}
} // namespace js
@@ -100,7 +100,7 @@ JSScript::functionDelazifying() const
}
inline void
-JSScript::ensureNonLazyCanonicalFunction(JSContext* cx)
+JSScript::ensureNonLazyCanonicalFunction()
{
// Infallibly delazify the canonical script.
JSFunction* fun = function();
diff --git a/js/src/jsstr.cpp b/js/src/jsstr.cpp
index 7765b1197..74f61b87d 100644
--- a/js/src/jsstr.cpp
+++ b/js/src/jsstr.cpp
@@ -461,9 +461,13 @@ ToStringForStringFunction(JSContext* cx, HandleValue thisv)
RootedObject obj(cx, &thisv.toObject());
if (obj->is<StringObject>()) {
StringObject* nobj = &obj->as<StringObject>();
- Rooted<jsid> id(cx, NameToId(cx->names().toString));
- if (ClassMethodIsNative(cx, nobj, &StringObject::class_, id, str_toString))
+ // We have to make sure that the ToPrimitive call from ToString
+ // would be unobservable.
+ if (HasNoToPrimitiveMethodPure(nobj, cx) &&
+ HasNativeMethodPure(nobj, cx->names().toString, str_toString, cx))
+ {
return nobj->unbox();
+ }
}
} else if (thisv.isNullOrUndefined()) {
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_CANT_CONVERT_TO,
@@ -2369,7 +2373,7 @@ js::str_replace_string_raw(JSContext* cx, HandleString string, HandleString patt
}
// ES 2016 draft Mar 25, 2016 21.1.3.17 steps 4, 8, 12-18.
-static JSObject*
+static ArrayObject*
SplitHelper(JSContext* cx, HandleLinearString str, uint32_t limit, HandleLinearString sep,
HandleObjectGroup group)
{
@@ -2466,7 +2470,7 @@ SplitHelper(JSContext* cx, HandleLinearString str, uint32_t limit, HandleLinearS
}
// Fast-path for splitting a string into a character array via split("").
-static JSObject*
+static ArrayObject*
CharSplitHelper(JSContext* cx, HandleLinearString str, uint32_t limit, HandleObjectGroup group)
{
size_t strLength = str->length();
@@ -2491,7 +2495,7 @@ CharSplitHelper(JSContext* cx, HandleLinearString str, uint32_t limit, HandleObj
}
// ES 2016 draft Mar 25, 2016 21.1.3.17 steps 4, 8, 12-18.
-JSObject*
+ArrayObject*
js::str_split_string(JSContext* cx, HandleObjectGroup group, HandleString str, HandleString sep, uint32_t limit)
{
@@ -2901,8 +2905,8 @@ StringObject::assignInitialShape(ExclusiveContext* cx, Handle<StringObject*> obj
{
MOZ_ASSERT(obj->empty());
- return obj->addDataProperty(cx, cx->names().length, LENGTH_SLOT,
- JSPROP_PERMANENT | JSPROP_READONLY);
+ return NativeObject::addDataProperty(cx, obj, cx->names().length, LENGTH_SLOT,
+ JSPROP_PERMANENT | JSPROP_READONLY);
}
JSObject*
@@ -2910,17 +2914,20 @@ js::InitStringClass(JSContext* cx, HandleObject obj)
{
MOZ_ASSERT(obj->isNative());
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
Rooted<JSString*> empty(cx, cx->runtime()->emptyString);
- RootedObject proto(cx, global->createBlankPrototype(cx, &StringObject::class_));
- if (!proto || !proto->as<StringObject>().init(cx, empty))
+ RootedObject proto(cx, GlobalObject::createBlankPrototype(cx, global, &StringObject::class_));
+ if (!proto)
+ return nullptr;
+ Handle<StringObject*> protoObj = proto.as<StringObject>();
+ if (!StringObject::init(cx, protoObj, empty))
return nullptr;
/* Now create the String function. */
RootedFunction ctor(cx);
- ctor = global->createConstructor(cx, StringConstructor, cx->names().String, 1,
- AllocKind::FUNCTION, &jit::JitInfo_String);
+ ctor = GlobalObject::createConstructor(cx, StringConstructor, cx->names().String, 1,
+ AllocKind::FUNCTION, &jit::JitInfo_String);
if (!ctor)
return nullptr;
diff --git a/js/src/jsstr.h b/js/src/jsstr.h
index 38fbfa85e..68175c826 100644
--- a/js/src/jsstr.h
+++ b/js/src/jsstr.h
@@ -465,7 +465,7 @@ FileEscapedString(FILE* fp, const char* chars, size_t length, uint32_t quote)
return res;
}
-JSObject*
+ArrayObject*
str_split_string(JSContext* cx, HandleObjectGroup group, HandleString str, HandleString sep,
uint32_t limit);
diff --git a/js/src/jswatchpoint.cpp b/js/src/jswatchpoint.cpp
index e37323555..34479a990 100644
--- a/js/src/jswatchpoint.cpp
+++ b/js/src/jswatchpoint.cpp
@@ -64,7 +64,7 @@ WatchpointMap::watch(JSContext* cx, HandleObject obj, HandleId id,
{
MOZ_ASSERT(JSID_IS_STRING(id) || JSID_IS_INT(id) || JSID_IS_SYMBOL(id));
- if (!obj->setWatched(cx))
+ if (!JSObject::setWatched(cx, obj))
return false;
Watchpoint w(handler, closure, false);
diff --git a/js/src/jswrapper.h b/js/src/jswrapper.h
index 84ebe2732..5f3704e32 100644
--- a/js/src/jswrapper.h
+++ b/js/src/jswrapper.h
@@ -136,7 +136,7 @@ class JS_FRIEND_API(Wrapper) : public BaseProxyHandler
static JSObject* New(JSContext* cx, JSObject* obj, const Wrapper* handler,
const WrapperOptions& options = WrapperOptions());
- static JSObject* Renew(JSContext* cx, JSObject* existing, JSObject* obj, const Wrapper* handler);
+ static JSObject* Renew(JSObject* existing, JSObject* obj, const Wrapper* handler);
static const Wrapper* wrapperHandler(JSObject* wrapper);
diff --git a/js/src/moz.build b/js/src/moz.build
index 888741138..a0f074d1c 100644
--- a/js/src/moz.build
+++ b/js/src/moz.build
@@ -355,7 +355,6 @@ UNIFIED_SOURCES += [
'vm/UbiNode.cpp',
'vm/UbiNodeCensus.cpp',
'vm/UbiNodeShortestPaths.cpp',
- 'vm/UnboxedObject.cpp',
'vm/Unicode.cpp',
'vm/Value.cpp',
'vm/WeakMapPtr.cpp',
@@ -620,11 +619,11 @@ else:
'perf/pm_stub.cpp'
]
-GENERATED_FILES += ['jsautokw.h']
-jsautokw = GENERATED_FILES['jsautokw.h']
-jsautokw.script = 'jsautokw.py'
-jsautokw.inputs += [
- 'vm/Keywords.h'
+GENERATED_FILES += ['frontend/ReservedWordsGenerated.h']
+ReservedWordsGenerated = GENERATED_FILES['frontend/ReservedWordsGenerated.h']
+ReservedWordsGenerated.script = 'frontend/GenerateReservedWords.py'
+ReservedWordsGenerated.inputs += [
+ 'frontend/ReservedWords.h'
]
# JavaScript must be built shared, even for static builds, as it is used by
diff --git a/js/src/proxy/CrossCompartmentWrapper.cpp b/js/src/proxy/CrossCompartmentWrapper.cpp
index 2a6cb5400..246639956 100644
--- a/js/src/proxy/CrossCompartmentWrapper.cpp
+++ b/js/src/proxy/CrossCompartmentWrapper.cpp
@@ -89,7 +89,7 @@ CrossCompartmentWrapper::getPrototype(JSContext* cx, HandleObject wrapper,
if (!GetPrototype(cx, wrapped, protop))
return false;
if (protop) {
- if (!protop->setDelegate(cx))
+ if (!JSObject::setDelegate(cx, protop))
return false;
}
}
@@ -122,7 +122,7 @@ CrossCompartmentWrapper::getPrototypeIfOrdinary(JSContext* cx, HandleObject wrap
return true;
if (protop) {
- if (!protop->setDelegate(cx))
+ if (!JSObject::setDelegate(cx, protop))
return false;
}
}
diff --git a/js/src/proxy/Proxy.cpp b/js/src/proxy/Proxy.cpp
index b43fd02d2..2c1cffb77 100644
--- a/js/src/proxy/Proxy.cpp
+++ b/js/src/proxy/Proxy.cpp
@@ -774,7 +774,7 @@ js::NewProxyObject(JSContext* cx, const BaseProxyHandler* handler, HandleValue p
}
void
-ProxyObject::renew(JSContext* cx, const BaseProxyHandler* handler, const Value& priv)
+ProxyObject::renew(const BaseProxyHandler* handler, const Value& priv)
{
MOZ_ASSERT(!IsInsideNursery(this));
MOZ_ASSERT_IF(IsCrossCompartmentWrapper(this), IsDeadProxyObject(this));
@@ -796,9 +796,9 @@ js::InitProxyClass(JSContext* cx, HandleObject obj)
JS_FS_END
};
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
RootedFunction ctor(cx);
- ctor = global->createConstructor(cx, proxy, cx->names().Proxy, 2);
+ ctor = GlobalObject::createConstructor(cx, proxy, cx->names().Proxy, 2);
if (!ctor)
return nullptr;
diff --git a/js/src/proxy/Wrapper.cpp b/js/src/proxy/Wrapper.cpp
index 43d559ff3..67f437262 100644
--- a/js/src/proxy/Wrapper.cpp
+++ b/js/src/proxy/Wrapper.cpp
@@ -312,9 +312,9 @@ Wrapper::New(JSContext* cx, JSObject* obj, const Wrapper* handler,
}
JSObject*
-Wrapper::Renew(JSContext* cx, JSObject* existing, JSObject* obj, const Wrapper* handler)
+Wrapper::Renew(JSObject* existing, JSObject* obj, const Wrapper* handler)
{
- existing->as<ProxyObject>().renew(cx, handler, ObjectValue(*obj));
+ existing->as<ProxyObject>().renew(handler, ObjectValue(*obj));
return existing;
}
diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
index 193d8d22b..51cd11fe8 100644
--- a/js/src/shell/js.cpp
+++ b/js/src/shell/js.cpp
@@ -320,7 +320,6 @@ static bool enableIon = false;
static bool enableAsmJS = false;
static bool enableWasm = false;
static bool enableNativeRegExp = false;
-static bool enableUnboxedArrays = false;
static bool enableSharedMemory = SHARED_MEMORY_DEFAULT;
static bool enableWasmAlwaysBaseline = false;
static bool enableArrayProtoValues = true;
@@ -2311,7 +2310,7 @@ ValueToScript(JSContext* cx, HandleValue v, JSFunction** funp = nullptr)
return nullptr;
}
- JSScript* script = fun->getOrCreateScript(cx);
+ JSScript* script = JSFunction::getOrCreateScript(cx, fun);
if (!script)
return nullptr;
@@ -2551,6 +2550,14 @@ SrcNotes(JSContext* cx, HandleScript script, Sprinter* sp)
return false;
break;
+ case SRC_CLASS_SPAN: {
+ unsigned startOffset = GetSrcNoteOffset(sn, 0);
+ unsigned endOffset = GetSrcNoteOffset(sn, 1);
+ if (!sp->jsprintf(" %u %u", startOffset, endOffset))
+ return false;
+ break;
+ }
+
default:
MOZ_ASSERT_UNREACHABLE("unrecognized srcnote");
}
@@ -2690,7 +2697,7 @@ DisassembleScript(JSContext* cx, HandleScript script, HandleFunction fun,
if (sp->put(" CONSTRUCTOR") < 0)
return false;
}
- if (fun->isExprBody()) {
+ if (script->isExprBody()) {
if (sp->put(" EXPRESSION_CLOSURE") < 0)
return false;
}
@@ -2727,7 +2734,7 @@ DisassembleScript(JSContext* cx, HandleScript script, HandleFunction fun,
RootedFunction fun(cx, &obj->as<JSFunction>());
if (fun->isInterpreted()) {
- RootedScript script(cx, fun->getOrCreateScript(cx));
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, fun));
if (script) {
if (!DisassembleScript(cx, script, fun, lines, recursive, sourceNotes, sp))
return false;
@@ -3489,8 +3496,8 @@ GroupOf(JSContext* cx, unsigned argc, JS::Value* vp)
JS_ReportErrorASCII(cx, "groupOf: object expected");
return false;
}
- JSObject* obj = &args[0].toObject();
- ObjectGroup* group = obj->getGroup(cx);
+ RootedObject obj(cx, &args[0].toObject());
+ ObjectGroup* group = JSObject::getGroup(cx, obj);
if (!group)
return false;
args.rval().set(JS_NumberValue(double(uintptr_t(group) >> 3)));
@@ -5404,7 +5411,7 @@ DumpScopeChain(JSContext* cx, unsigned argc, Value* vp)
ReportUsageErrorASCII(cx, callee, "Argument must be an interpreted function");
return false;
}
- script = fun->getOrCreateScript(cx);
+ script = JSFunction::getOrCreateScript(cx, fun);
} else {
script = obj->as<ModuleObject>().script();
}
@@ -6420,6 +6427,14 @@ CreateLastWarningObject(JSContext* cx, JSErrorReport* report)
if (!DefineProperty(cx, warningObj, cx->names().columnNumber, columnVal))
return false;
+ RootedObject notesArray(cx, CreateErrorNotesArray(cx, report));
+ if (!notesArray)
+ return false;
+
+ RootedValue notesArrayVal(cx, ObjectValue(*notesArray));
+ if (!DefineProperty(cx, warningObj, cx->names().notes, notesArrayVal))
+ return false;
+
GetShellContext(cx)->lastWarning.setObject(*warningObj);
return true;
}
@@ -7260,7 +7275,6 @@ SetContextOptions(JSContext* cx, const OptionParser& op)
enableAsmJS = !op.getBoolOption("no-asmjs");
enableWasm = !op.getBoolOption("no-wasm");
enableNativeRegExp = !op.getBoolOption("no-native-regexp");
- enableUnboxedArrays = op.getBoolOption("unboxed-arrays");
enableWasmAlwaysBaseline = op.getBoolOption("wasm-always-baseline");
enableArrayProtoValues = !op.getBoolOption("no-array-proto-values");
@@ -7270,7 +7284,6 @@ SetContextOptions(JSContext* cx, const OptionParser& op)
.setWasm(enableWasm)
.setWasmAlwaysBaseline(enableWasmAlwaysBaseline)
.setNativeRegExp(enableNativeRegExp)
- .setUnboxedArrays(enableUnboxedArrays)
.setArrayProtoValues(enableArrayProtoValues);
if (op.getBoolOption("wasm-check-bce"))
@@ -7539,7 +7552,6 @@ SetWorkerContextOptions(JSContext* cx)
.setWasm(enableWasm)
.setWasmAlwaysBaseline(enableWasmAlwaysBaseline)
.setNativeRegExp(enableNativeRegExp)
- .setUnboxedArrays(enableUnboxedArrays)
.setArrayProtoValues(enableArrayProtoValues);
cx->setOffthreadIonCompilationEnabled(offthreadCompilation);
cx->profilingScripts = enableCodeCoverage || enableDisassemblyDumps;
@@ -7709,8 +7721,6 @@ main(int argc, char** argv, char** envp)
|| !op.addBoolOption('\0', "no-asmjs", "Disable asm.js compilation")
|| !op.addBoolOption('\0', "no-wasm", "Disable WebAssembly compilation")
|| !op.addBoolOption('\0', "no-native-regexp", "Disable native regexp compilation")
- || !op.addBoolOption('\0', "no-unboxed-objects", "Disable creating unboxed plain objects")
- || !op.addBoolOption('\0', "unboxed-arrays", "Allow creating unboxed arrays")
|| !op.addBoolOption('\0', "wasm-always-baseline", "Enable wasm baseline compiler when possible")
|| !op.addBoolOption('\0', "wasm-check-bce", "Always generate wasm bounds check, even redundant ones.")
|| !op.addBoolOption('\0', "no-array-proto-values", "Remove Array.prototype.values")
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js b/js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js
index d87abd7be..8cda44d87 100644
--- a/js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone_backward_links.js
@@ -1,7 +1,7 @@
// |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT.
-// tzdata version = 2018e
+// tzdata version = 2019a
const tzMapper = [
x => x,
@@ -67,6 +67,7 @@ const links = {
"Cuba": "America/Havana",
"Egypt": "Africa/Cairo",
"Eire": "Europe/Dublin",
+ "Etc/UCT": "Etc/UTC",
"GB": "Europe/London",
"GB-Eire": "Europe/London",
"GMT+0": "Etc/GMT",
@@ -98,7 +99,7 @@ const links = {
"ROK": "Asia/Seoul",
"Singapore": "Asia/Singapore",
"Turkey": "Europe/Istanbul",
- "UCT": "Etc/UCT",
+ "UCT": "Etc/UTC",
"US/Alaska": "America/Anchorage",
"US/Aleutian": "America/Adak",
"US/Arizona": "America/Phoenix",
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js b/js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js
index b96dac96f..a3efe0310 100644
--- a/js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone_backzone.js
@@ -1,7 +1,7 @@
// |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT.
-// tzdata version = 2018e
+// tzdata version = 2019a
const tzMapper = [
x => x,
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js b/js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js
index 66ef3075d..b61593f78 100644
--- a/js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone_backzone_links.js
@@ -1,7 +1,7 @@
// |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT.
-// tzdata version = 2018e
+// tzdata version = 2019a
const tzMapper = [
x => x,
diff --git a/js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js b/js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js
index 8d44204bc..12b55c214 100644
--- a/js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js
+++ b/js/src/tests/Intl/DateTimeFormat/timeZone_notbackward_links.js
@@ -1,7 +1,7 @@
// |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT.
-// tzdata version = 2018e
+// tzdata version = 2019a
const tzMapper = [
x => x,
diff --git a/js/src/tests/ecma_2017/AsyncFunctions/await-error.js b/js/src/tests/ecma_2017/AsyncFunctions/await-error.js
new file mode 100644
index 000000000..1f40ea8a0
--- /dev/null
+++ b/js/src/tests/ecma_2017/AsyncFunctions/await-error.js
@@ -0,0 +1,16 @@
+var BUGNUMBER = 1317153;
+var summary = "await outside of async function should provide better error";
+
+print(BUGNUMBER + ": " + summary);
+
+let caught = false;
+try {
+ eval("await 10");
+} catch(e) {
+ assertEq(e.message, "await is only valid in async functions");
+ caught = true;
+}
+assertEq(caught, true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_2017/AsyncFunctions/await-in-arrow-parameters.js b/js/src/tests/ecma_2017/AsyncFunctions/await-in-arrow-parameters.js
new file mode 100644
index 000000000..ebb4ea9da
--- /dev/null
+++ b/js/src/tests/ecma_2017/AsyncFunctions/await-in-arrow-parameters.js
@@ -0,0 +1,94 @@
+var ieval = eval;
+var AsyncFunction = async function(){}.constructor;
+
+var functionContext = {
+ Function: {
+ constructor: Function,
+ toSourceBody: code => `function f() { ${code} }`,
+ toSourceParameter: code => `function f(x = ${code}) { }`,
+ },
+ AsyncFunction: {
+ constructor: AsyncFunction,
+ toSourceBody: code => `async function f() { ${code} }`,
+ toSourceParameter: code => `async function f(x = ${code}) { }`,
+ },
+};
+
+function assertSyntaxError(kind, code) {
+ var {constructor, toSourceBody, toSourceParameter} = functionContext[kind];
+ var body = toSourceBody(code);
+ var parameter = toSourceParameter(code);
+
+ assertThrowsInstanceOf(() => { constructor(code); }, SyntaxError, constructor.name + ":" + code);
+ assertThrowsInstanceOf(() => { constructor(`x = ${code}`, ""); }, SyntaxError, constructor.name + ":" + code);
+
+ assertThrowsInstanceOf(() => { eval(body); }, SyntaxError, "eval:" + body);
+ assertThrowsInstanceOf(() => { ieval(body); }, SyntaxError, "indirect eval:" + body);
+
+ assertThrowsInstanceOf(() => { eval(parameter); }, SyntaxError, "eval:" + parameter);
+ assertThrowsInstanceOf(() => { ieval(parameter); }, SyntaxError, "indirect eval:" + parameter);
+}
+
+function assertNoSyntaxError(kind, code) {
+ var {constructor, toSourceBody, toSourceParameter} = functionContext[kind];
+ var body = toSourceBody(code);
+ var parameter = toSourceParameter(code);
+
+ constructor(code);
+ constructor(`x = ${code}`, "");
+
+ eval(body);
+ ieval(body);
+
+ eval(parameter);
+ ieval(parameter);
+}
+
+function assertSyntaxErrorAsync(code) {
+ assertNoSyntaxError("Function", code);
+ assertSyntaxError("AsyncFunction", code);
+}
+
+function assertSyntaxErrorBoth(code) {
+ assertSyntaxError("Function", code);
+ assertSyntaxError("AsyncFunction", code);
+}
+
+
+// Bug 1353691
+// |await| expression is invalid in arrow functions in async-context.
+// |await/r/g| first parses as |AwaitExpression RegularExpressionLiteral|, when reparsing the
+// arrow function, it is parsed as |IdentRef DIV IdentRef DIV IdentRef|. We need to ensure in this
+// case, that we still treat |await| as a keyword and hence throw a SyntaxError.
+assertSyntaxErrorAsync("(a = await/r/g) => {}");
+assertSyntaxErrorBoth("async(a = await/r/g) => {}");
+
+// Also applies when nesting arrow functions.
+assertSyntaxErrorAsync("(a = (b = await/r/g) => {}) => {}");
+assertSyntaxErrorBoth("async(a = (b = await/r/g) => {}) => {}");
+assertSyntaxErrorBoth("(a = async(b = await/r/g) => {}) => {}");
+assertSyntaxErrorBoth("async(a = async(b = await/r/g) => {}) => {}");
+
+
+// Bug 1355860
+// |await| cannot be used as rest-binding parameter in arrow functions in async-context.
+assertSyntaxErrorAsync("(...await) => {}");
+assertSyntaxErrorBoth("async(...await) => {}");
+
+assertSyntaxErrorAsync("(a, ...await) => {}");
+assertSyntaxErrorBoth("async(a, ...await) => {}");
+
+// Also test nested arrow functions.
+assertSyntaxErrorAsync("(a = (...await) => {}) => {}");
+assertSyntaxErrorBoth("(a = async(...await) => {}) => {}");
+assertSyntaxErrorBoth("async(a = (...await) => {}) => {}");
+assertSyntaxErrorBoth("async(a = async(...await) => {}) => {}");
+
+assertSyntaxErrorAsync("(a = (b, ...await) => {}) => {}");
+assertSyntaxErrorBoth("(a = async(b, ...await) => {}) => {}");
+assertSyntaxErrorBoth("async(a = (b, ...await) => {}) => {}");
+assertSyntaxErrorBoth("async(a = async(b, ...await) => {}) => {}");
+
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_2017/AsyncFunctions/forbidden-as-consequent.js b/js/src/tests/ecma_2017/AsyncFunctions/forbidden-as-consequent.js
new file mode 100644
index 000000000..656ed46de
--- /dev/null
+++ b/js/src/tests/ecma_2017/AsyncFunctions/forbidden-as-consequent.js
@@ -0,0 +1,14 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+assertThrowsInstanceOf(() => eval("if (1) async function foo() {}"),
+ SyntaxError);
+assertThrowsInstanceOf(() => eval("'use strict'; if (1) async function foo() {}"),
+ SyntaxError);
+
+var async = 42;
+assertEq(eval("if (1) async \n function foo() {}"), 42);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_2017/AsyncFunctions/inner-caller.js b/js/src/tests/ecma_2017/AsyncFunctions/inner-caller.js
new file mode 100644
index 000000000..523eb79ea
--- /dev/null
+++ b/js/src/tests/ecma_2017/AsyncFunctions/inner-caller.js
@@ -0,0 +1,26 @@
+var BUGNUMBER = 1185106;
+var summary = "caller property of function inside async function should return wrapped async function";
+
+print(BUGNUMBER + ": " + summary);
+
+(async function f() {
+ var inner = (function g() {
+ return g.caller;
+ })();
+ assertEq(inner, f);
+})();
+
+(async function f() {
+ "use strict";
+ try {
+ (function g() {
+ return g.caller;
+ })();
+ assertEq(true, false);
+ } catch (e) {
+ assertEq(e instanceof TypeError, true);
+ }
+})();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Class/parenExprToString.js b/js/src/tests/ecma_6/Class/parenExprToString.js
new file mode 100644
index 000000000..a93972ce9
--- /dev/null
+++ b/js/src/tests/ecma_6/Class/parenExprToString.js
@@ -0,0 +1,8 @@
+// Test that parenthesized class expressions don't get their toString offsets
+// messed up.
+
+assertEq((class {}).toString(), "class {}");
+assertEq(((class {})).toString(), "class {}");
+
+if (typeof reportCompare === "function")
+ reportCompare(0, 0, "OK");
diff --git a/js/src/tests/ecma_6/Comprehensions/for-reserved-word.js b/js/src/tests/ecma_6/Comprehensions/for-reserved-word.js
new file mode 100644
index 000000000..9b320fc91
--- /dev/null
+++ b/js/src/tests/ecma_6/Comprehensions/for-reserved-word.js
@@ -0,0 +1,107 @@
+var BUGNUMBER = 1340089;
+var summary = "Comprehension should check the binding names";
+
+print(BUGNUMBER + ": " + summary);
+
+// Non strict mode.
+// Keywords, literals, 'let', and 'yield' are not allowed.
+
+assertThrowsInstanceOf(function () {
+ eval("[for (true of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ eval("(for (true of [1]) 2)");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ eval("[for (throw of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ eval("(for (throw of [1]) 2)");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ eval("[for (let of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ eval("(for (let of [1]) 2)");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ eval("[for (yield of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ eval("(for (yield of [1]) 2)");
+}, SyntaxError);
+
+eval("[for (public of [1]) 2]");
+eval("(for (public of [1]) 2)");
+
+eval("[for (static of [1]) 2]");
+eval("(for (static of [1]) 2)");
+
+// Strict mode.
+// All reserved words are not allowed.
+
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("[for (true of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("(for (true of [1]) 2)");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("[for (throw of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("(for (throw of [1]) 2)");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("[for (let of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("(for (let of [1]) 2)");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("[for (yield of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("(for (yield of [1]) 2)");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("[for (public of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("(for (public of [1]) 2)");
+}, SyntaxError);
+
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("[for (static of [1]) 2]");
+}, SyntaxError);
+assertThrowsInstanceOf(function () {
+ "use strict";
+ eval("(for (static of [1]) 2)");
+}, SyntaxError);
+
+(function () {
+ "use strict";
+ eval("[for (await of [1]) 2]");
+ eval("(for (await of [1]) 2)");
+})();
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/constructor-binding.js b/js/src/tests/ecma_6/Function/constructor-binding.js
new file mode 100644
index 000000000..e82274d27
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/constructor-binding.js
@@ -0,0 +1,11 @@
+var BUGNUMBER = 636635;
+var summary = "A function created by Function constructor shouldn't have anonymous binding";
+
+print(BUGNUMBER + ": " + summary);
+
+assertEq(new Function("return typeof anonymous")(), "undefined");
+assertEq(new Function("return function() { return typeof anonymous; }")()(), "undefined");
+assertEq(new Function("return function() { eval(''); return typeof anonymous; }")()(), "undefined");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Function/throw-type-error.js b/js/src/tests/ecma_6/Function/throw-type-error.js
new file mode 100644
index 000000000..68dd6e1d0
--- /dev/null
+++ b/js/src/tests/ecma_6/Function/throw-type-error.js
@@ -0,0 +1,16 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/publicdomain/zero/1.0/
+
+const ThrowTypeError = function(){
+ "use strict";
+ return Object.getOwnPropertyDescriptor(arguments, "callee").get;
+}();
+
+assertDeepEq(Object.getOwnPropertyDescriptor(ThrowTypeError, "length"), {
+ value: 0, writable: false, enumerable: false, configurable: false
+});
+
+assertEq(Object.isFrozen(ThrowTypeError), true);
+
+if (typeof reportCompare == "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/Generators/forbidden-as-consequent.js b/js/src/tests/ecma_6/Generators/forbidden-as-consequent.js
new file mode 100644
index 000000000..13647e154
--- /dev/null
+++ b/js/src/tests/ecma_6/Generators/forbidden-as-consequent.js
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+assertThrowsInstanceOf(() => eval("if (1) function* foo() {}"),
+ SyntaxError);
+assertThrowsInstanceOf(() => eval("'use strict'; if (1) function* foo() {}"),
+ SyntaxError);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-parameter.js b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-parameter.js
new file mode 100644
index 000000000..ae7fbe879
--- /dev/null
+++ b/js/src/tests/ecma_6/LexicalEnvironment/block-scoped-functions-annex-b-parameter.js
@@ -0,0 +1,21 @@
+// Annex B.3.3.1 disallows Annex B lexical function behavior when redeclaring a
+// parameter.
+
+(function(f) {
+ if (true) function f() { }
+ assertEq(f, 123);
+}(123));
+
+(function(f) {
+ { function f() { } }
+ assertEq(f, 123);
+}(123));
+
+(function(f = 123) {
+ assertEq(f, 123);
+ { function f() { } }
+ assertEq(f, 123);
+}());
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/ecma_6/TemplateStrings/tagTempl.js b/js/src/tests/ecma_6/TemplateStrings/tagTempl.js
index 1e3f52bfb..99c2098dc 100644
--- a/js/src/tests/ecma_6/TemplateStrings/tagTempl.js
+++ b/js/src/tests/ecma_6/TemplateStrings/tagTempl.js
@@ -287,5 +287,176 @@ assertEq(String.raw`h\r\ney${4}there\n`, "h\\r\\ney4there\\n");
assertEq(String.raw`hey`, "hey");
assertEq(String.raw``, "");
+// Invalid escape sequences
+check(raw`\01`, ["\\01"]);
+check(raw`\01${0}right`, ["\\01","right"]);
+check(raw`left${0}\01`, ["left","\\01"]);
+check(raw`left${0}\01${1}right`, ["left","\\01","right"]);
+check(raw`\1`, ["\\1"]);
+check(raw`\1${0}right`, ["\\1","right"]);
+check(raw`left${0}\1`, ["left","\\1"]);
+check(raw`left${0}\1${1}right`, ["left","\\1","right"]);
+check(raw`\xg`, ["\\xg"]);
+check(raw`\xg${0}right`, ["\\xg","right"]);
+check(raw`left${0}\xg`, ["left","\\xg"]);
+check(raw`left${0}\xg${1}right`, ["left","\\xg","right"]);
+check(raw`\xAg`, ["\\xAg"]);
+check(raw`\xAg${0}right`, ["\\xAg","right"]);
+check(raw`left${0}\xAg`, ["left","\\xAg"]);
+check(raw`left${0}\xAg${1}right`, ["left","\\xAg","right"]);
+check(raw`\u0`, ["\\u0"]);
+check(raw`\u0${0}right`, ["\\u0","right"]);
+check(raw`left${0}\u0`, ["left","\\u0"]);
+check(raw`left${0}\u0${1}right`, ["left","\\u0","right"]);
+check(raw`\u0g`, ["\\u0g"]);
+check(raw`\u0g${0}right`, ["\\u0g","right"]);
+check(raw`left${0}\u0g`, ["left","\\u0g"]);
+check(raw`left${0}\u0g${1}right`, ["left","\\u0g","right"]);
+check(raw`\u00g`, ["\\u00g"]);
+check(raw`\u00g${0}right`, ["\\u00g","right"]);
+check(raw`left${0}\u00g`, ["left","\\u00g"]);
+check(raw`left${0}\u00g${1}right`, ["left","\\u00g","right"]);
+check(raw`\u000g`, ["\\u000g"]);
+check(raw`\u000g${0}right`, ["\\u000g","right"]);
+check(raw`left${0}\u000g`, ["left","\\u000g"]);
+check(raw`left${0}\u000g${1}right`, ["left","\\u000g","right"]);
+check(raw`\u{}`, ["\\u{}"]);
+check(raw`\u{}${0}right`, ["\\u{}","right"]);
+check(raw`left${0}\u{}`, ["left","\\u{}"]);
+check(raw`left${0}\u{}${1}right`, ["left","\\u{}","right"]);
+check(raw`\u{-0}`, ["\\u{-0}"]);
+check(raw`\u{-0}${0}right`, ["\\u{-0}","right"]);
+check(raw`left${0}\u{-0}`, ["left","\\u{-0}"]);
+check(raw`left${0}\u{-0}${1}right`, ["left","\\u{-0}","right"]);
+check(raw`\u{g}`, ["\\u{g}"]);
+check(raw`\u{g}${0}right`, ["\\u{g}","right"]);
+check(raw`left${0}\u{g}`, ["left","\\u{g}"]);
+check(raw`left${0}\u{g}${1}right`, ["left","\\u{g}","right"]);
+check(raw`\u{0`, ["\\u{0"]);
+check(raw`\u{0${0}right`, ["\\u{0","right"]);
+check(raw`left${0}\u{0`, ["left","\\u{0"]);
+check(raw`left${0}\u{0${1}right`, ["left","\\u{0","right"]);
+check(raw`\u{\u{0}`, ["\\u{\\u{0}"]);
+check(raw`\u{\u{0}${0}right`, ["\\u{\\u{0}","right"]);
+check(raw`left${0}\u{\u{0}`, ["left","\\u{\\u{0}"]);
+check(raw`left${0}\u{\u{0}${1}right`, ["left","\\u{\\u{0}","right"]);
+check(raw`\u{110000}`, ["\\u{110000}"]);
+check(raw`\u{110000}${0}right`, ["\\u{110000}","right"]);
+check(raw`left${0}\u{110000}`, ["left","\\u{110000}"]);
+check(raw`left${0}\u{110000}${1}right`, ["left","\\u{110000}","right"]);
+
+check(cooked`\01`, [void 0]);
+check(cooked`\01${0}right`, [void 0,"right"]);
+check(cooked`left${0}\01`, ["left",void 0]);
+check(cooked`left${0}\01${1}right`, ["left",void 0,"right"]);
+check(cooked`\1`, [void 0]);
+check(cooked`\1${0}right`, [void 0,"right"]);
+check(cooked`left${0}\1`, ["left",void 0]);
+check(cooked`left${0}\1${1}right`, ["left",void 0,"right"]);
+check(cooked`\xg`, [void 0]);
+check(cooked`\xg${0}right`, [void 0,"right"]);
+check(cooked`left${0}\xg`, ["left",void 0]);
+check(cooked`left${0}\xg${1}right`, ["left",void 0,"right"]);
+check(cooked`\xAg`, [void 0]);
+check(cooked`\xAg${0}right`, [void 0,"right"]);
+check(cooked`left${0}\xAg`, ["left",void 0]);
+check(cooked`left${0}\xAg${1}right`, ["left",void 0,"right"]);
+check(cooked`\u0`, [void 0]);
+check(cooked`\u0${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u0`, ["left",void 0]);
+check(cooked`left${0}\u0${1}right`, ["left",void 0,"right"]);
+check(cooked`\u0g`, [void 0]);
+check(cooked`\u0g${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u0g`, ["left",void 0]);
+check(cooked`left${0}\u0g${1}right`, ["left",void 0,"right"]);
+check(cooked`\u00g`, [void 0]);
+check(cooked`\u00g${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u00g`, ["left",void 0]);
+check(cooked`left${0}\u00g${1}right`, ["left",void 0,"right"]);
+check(cooked`\u000g`, [void 0]);
+check(cooked`\u000g${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u000g`, ["left",void 0]);
+check(cooked`left${0}\u000g${1}right`, ["left",void 0,"right"]);
+check(cooked`\u{}`, [void 0]);
+check(cooked`\u{}${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u{}`, ["left",void 0]);
+check(cooked`left${0}\u{}${1}right`, ["left",void 0,"right"]);
+check(cooked`\u{-0}`, [void 0]);
+check(cooked`\u{-0}${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u{-0}`, ["left",void 0]);
+check(cooked`left${0}\u{-0}${1}right`, ["left",void 0,"right"]);
+check(cooked`\u{g}`, [void 0]);
+check(cooked`\u{g}${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u{g}`, ["left",void 0]);
+check(cooked`left${0}\u{g}${1}right`, ["left",void 0,"right"]);
+check(cooked`\u{0`, [void 0]);
+check(cooked`\u{0${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u{0`, ["left",void 0]);
+check(cooked`left${0}\u{0${1}right`, ["left",void 0,"right"]);
+check(cooked`\u{\u{0}`, [void 0]);
+check(cooked`\u{\u{0}${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u{\u{0}`, ["left",void 0]);
+check(cooked`left${0}\u{\u{0}${1}right`, ["left",void 0,"right"]);
+check(cooked`\u{110000}`, [void 0]);
+check(cooked`\u{110000}${0}right`, [void 0,"right"]);
+check(cooked`left${0}\u{110000}`, ["left",void 0]);
+check(cooked`left${0}\u{110000}${1}right`, ["left",void 0,"right"]);
+
+syntaxError("`\\01`");
+syntaxError("`\\01${0}right`");
+syntaxError("`left${0}\\01`");
+syntaxError("`left${0}\\01${1}right`");
+syntaxError("`\\1`");
+syntaxError("`\\1${0}right`");
+syntaxError("`left${0}\\1`");
+syntaxError("`left${0}\\1${1}right`");
+syntaxError("`\\xg`");
+syntaxError("`\\xg${0}right`");
+syntaxError("`left${0}\\xg`");
+syntaxError("`left${0}\\xg${1}right`");
+syntaxError("`\\xAg`");
+syntaxError("`\\xAg${0}right`");
+syntaxError("`left${0}\\xAg`");
+syntaxError("`left${0}\\xAg${1}right`");
+syntaxError("`\\u0`");
+syntaxError("`\\u0${0}right`");
+syntaxError("`left${0}\\u0`");
+syntaxError("`left${0}\\u0${1}right`");
+syntaxError("`\\u0g`");
+syntaxError("`\\u0g${0}right`");
+syntaxError("`left${0}\\u0g`");
+syntaxError("`left${0}\\u0g${1}right`");
+syntaxError("`\\u00g`");
+syntaxError("`\\u00g${0}right`");
+syntaxError("`left${0}\\u00g`");
+syntaxError("`left${0}\\u00g${1}right`");
+syntaxError("`\\u000g`");
+syntaxError("`\\u000g${0}right`");
+syntaxError("`left${0}\\u000g`");
+syntaxError("`left${0}\\u000g${1}right`");
+syntaxError("`\\u{}`");
+syntaxError("`\\u{}${0}right`");
+syntaxError("`left${0}\\u{}`");
+syntaxError("`left${0}\\u{}${1}right`");
+syntaxError("`\\u{-0}`");
+syntaxError("`\\u{-0}${0}right`");
+syntaxError("`left${0}\\u{-0}`");
+syntaxError("`left${0}\\u{-0}${1}right`");
+syntaxError("`\\u{g}`");
+syntaxError("`\\u{g}${0}right`");
+syntaxError("`left${0}\\u{g}`");
+syntaxError("`left${0}\\u{g}${1}right`");
+syntaxError("`\\u{0`");
+syntaxError("`\\u{0${0}right`");
+syntaxError("`left${0}\\u{0`");
+syntaxError("`left${0}\\u{0${1}right`");
+syntaxError("`\\u{\\u{0}`");
+syntaxError("`\\u{\\u{0}${0}right`");
+syntaxError("`left${0}\\u{\\u{0}`");
+syntaxError("`left${0}\\u{\\u{0}${1}right`");
+syntaxError("`\\u{110000}`");
+syntaxError("`\\u{110000}${0}right`");
+syntaxError("`left${0}\\u{110000}`");
+syntaxError("`left${0}\\u{110000}${1}right`");
reportCompare(0, 0, "ok");
diff --git a/js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js b/js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js
new file mode 100644
index 000000000..7fed18037
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/newer-type-functions-caller-arguments.js
@@ -0,0 +1,43 @@
+// Tests that newer-type functions (i.e. anything not defined by regular function declarations and
+// expressions) throw when accessing their 'arguments' and 'caller' properties.
+
+// 9.2.7 (AddRestrictedFunctionProperties) defines accessors on Function.prototype which throw on
+// every 'get' and 'set' of 'caller' and 'arguments'.
+// Additionally, 16.2 (Forbidden Extensions) forbids adding properties to all non-"legacy" function
+// declarations and expressions. This creates the effect that all newer-style functions act like
+// strict-mode functions when accessing their 'caller' and 'arguments' properties.
+
+const container = {
+ async asyncMethod() {},
+ *genMethod() {},
+ method() {}
+};
+
+[
+ async function(){},
+ function*(){},
+ () => {},
+ async () => {},
+
+ container.asyncMethod,
+ container.genMethod,
+ container.method
+].forEach(f => {
+ checkArgumentsAccess(f);
+ checkCallerAccess(f);
+});
+
+function checkArgumentsAccess(f) {
+ assertThrowsInstanceOf(() => f.arguments, TypeError,
+ `Expected 'arguments' property access to throw on ${f}`);
+}
+
+function checkCallerAccess(f) {
+ assertThrowsInstanceOf(() => f.caller, TypeError,
+ `Expected 'caller' property access to throw on ${f}`);
+}
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
+
+print("Tests complete");
diff --git a/js/src/tests/ecma_7/AsyncFunctions/async-contains-unicode-escape.js b/js/src/tests/ecma_7/AsyncFunctions/async-contains-unicode-escape.js
new file mode 100644
index 000000000..d53dff696
--- /dev/null
+++ b/js/src/tests/ecma_7/AsyncFunctions/async-contains-unicode-escape.js
@@ -0,0 +1,54 @@
+var BUGNUMBER = 1315815;
+var summary = "async/await containing escapes";
+
+print(BUGNUMBER + ": " + summary);
+
+// Using "eval" as the argument name is fugly, but it means evals below are
+// *direct* evals, and so their effects in the unescaped case won't extend
+// past each separate |test| call (as would happen if we used a different name
+// that made each eval into an indirect eval, affecting code in the global
+// scope).
+function test(code, eval)
+{
+ var unescaped = code.replace("###", "async");
+ var escaped = code.replace("###", "\\u0061");
+
+ assertThrowsInstanceOf(() => eval(escaped), SyntaxError);
+ eval(unescaped);
+}
+
+test("### function f() {}", eval);
+test("var x = ### function f() {}", eval);
+test("### x => {};", eval);
+test("var x = ### x => {}", eval);
+test("### () => {};", eval);
+test("var x = ### () => {}", eval);
+test("### (y) => {};", eval);
+test("var x = ### (y) => {}", eval);
+test("({ ### x() {} })", eval);
+test("var x = ### function f() {}", eval);
+
+if (typeof parseModule === "function")
+ test("export default ### function f() {}", parseModule);
+
+assertThrowsInstanceOf(() => eval("async await => 1;"),
+ SyntaxError);
+assertThrowsInstanceOf(() => eval("async aw\\u0061it => 1;"),
+ SyntaxError);
+
+var async = 0;
+assertEq(\u0061sync, 0);
+
+var obj = { \u0061sync() { return 1; } };
+assertEq(obj.async(), 1);
+
+async = function() { return 42; };
+
+var z = async(obj);
+assertEq(z, 42);
+
+var w = async(obj)=>{};
+assertEq(typeof w, "function");
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);
diff --git a/js/src/tests/js1_8/regress/regress-467495-05.js b/js/src/tests/js1_8/regress/regress-467495-05.js
index 505fb6bd6..ecf47b8fe 100644
--- a/js/src/tests/js1_8/regress/regress-467495-05.js
+++ b/js/src/tests/js1_8/regress/regress-467495-05.js
@@ -20,7 +20,7 @@ function test()
printBugNumber(BUGNUMBER);
printStatus (summary);
- expect = 'function x() {}';
+ expect = '1';
function g(x) { if (1) function x() {} return x; }
print(actual = g(1) + '');
diff --git a/js/src/tests/js1_8/regress/regress-467495-06.js b/js/src/tests/js1_8/regress/regress-467495-06.js
index d8bc81c83..72adeee9e 100644
--- a/js/src/tests/js1_8/regress/regress-467495-06.js
+++ b/js/src/tests/js1_8/regress/regress-467495-06.js
@@ -32,7 +32,7 @@ function test()
var r = f(0);
- if (typeof(r[0]) != "function")
+ if (typeof(r[0]) != "number")
actual += "Bad r[0]";
if (typeof(r[1]) != "function")
diff --git a/js/src/tests/js1_8_5/reflect-parse/object-rest.js b/js/src/tests/js1_8_5/reflect-parse/object-rest.js
new file mode 100644
index 000000000..5af06909b
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/object-rest.js
@@ -0,0 +1,45 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+function property(key, value = key, shorthand = key === value) {
+ return { key, value, shorthand };
+}
+
+function assertDestrAssign(src, pattern) {
+ assertExpr(`(${src} = 0)`, aExpr("=", pattern, lit(0)));
+}
+
+function assertDestrBinding(src, pattern) {
+ assertDecl(`var ${src} = 0`, varDecl([{id: pattern, init: lit(0)}]));
+}
+
+function test() {
+ // Target expression must be a simple assignment target or a nested pattern
+ // in object assignment patterns.
+ assertDestrAssign("{...x}", objPatt([spread(ident("x"))]));
+ assertDestrAssign("{...(x)}", objPatt([spread(ident("x"))]));
+ assertDestrAssign("{...obj.p}", objPatt([spread(dotExpr(ident("obj"), ident("p")))]));
+ assertDestrAssign("{...{}}", objPatt([spread(objPatt([]))]));
+ assertDestrAssign("{...[]}", objPatt([spread(arrPatt([]))]));
+
+ // Object binding patterns only allow binding identifiers or nested patterns.
+ assertDestrBinding("{...x}", objPatt([spread(ident("x"))]));
+ assertDestrBinding("{...{}}", objPatt([spread(objPatt([]))]));
+ assertDestrBinding("{...[]}", objPatt([spread(arrPatt([]))]));
+
+ // The rest-property can be preceded by other properties.
+ for (var assertDestr of [assertDestrAssign, assertDestrBinding]) {
+ assertDestr("{a, ...x}", objPatt([property(ident("a")), spread(ident("x"))]));
+ assertDestr("{a: b, ...x}", objPatt([property(ident("a"), ident("b")), spread(ident("x"))]));
+ assertDestr("{[a]: b, ...x}", objPatt([property(comp(ident("a")), ident("b")), spread(ident("x"))]));
+ }
+
+ // Tests when __proto__ is used in the object pattern.
+ for (var assertDestr of [assertDestrAssign, assertDestrBinding]) {
+ assertDestr("{...__proto__}", objPatt([spread(ident("__proto__"))]));
+ assertDestr("{__proto__, ...x}", objPatt([property(ident("__proto__")), spread(ident("x"))]));
+ }
+ assertDestrAssign("{__proto__: a, ...x}", objPatt([property(lit("__proto__"), ident("a")), spread(ident("x"))]));
+ assertDestrBinding("{__proto__: a, ...x}", objPatt([property(ident("__proto__"), ident("a")), spread(ident("x"))]));
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/object-spread.js b/js/src/tests/js1_8_5/reflect-parse/object-spread.js
new file mode 100644
index 000000000..a4b269c40
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/object-spread.js
@@ -0,0 +1,29 @@
+// |reftest| skip-if(!xulRuntime.shell)
+
+function property(key, value = key, shorthand = key === value) {
+ return { key, value, shorthand };
+}
+
+function test() {
+ // Any expression can be spreaded.
+ assertExpr("({...x})", objExpr([spread(ident("x"))]));
+ assertExpr("({...f()})", objExpr([spread(callExpr(ident("f"), []))]));
+ assertExpr("({...123})", objExpr([spread(lit(123))]));
+
+ // Multiple spread expression are allowed.
+ assertExpr("({...x, ...obj.p})", objExpr([spread(ident("x")), spread(dotExpr(ident("obj"), ident("p")))]));
+
+ // Spread expression can appear anywhere in an object literal.
+ assertExpr("({p, ...x})", objExpr([property(ident("p")), spread(ident("x"))]));
+ assertExpr("({p: a, ...x})", objExpr([property(ident("p"), ident("a")), spread(ident("x"))]));
+ assertExpr("({...x, p: a})", objExpr([spread(ident("x")), property(ident("p"), ident("a"))]));
+
+ // Trailing comma after spread expression is allowed.
+ assertExpr("({...x,})", objExpr([spread(ident("x"))]));
+
+ // __proto__ is not special in spread expressions.
+ assertExpr("({...__proto__})", objExpr([spread(ident("__proto__"))]));
+ assertExpr("({...__proto__, ...__proto__})", objExpr([spread(ident("__proto__")), spread(ident("__proto__"))]));
+}
+
+runtest(test);
diff --git a/js/src/tests/js1_8_5/reflect-parse/templateStrings.js b/js/src/tests/js1_8_5/reflect-parse/templateStrings.js
index c87ba96b8..fb12afd00 100644
--- a/js/src/tests/js1_8_5/reflect-parse/templateStrings.js
+++ b/js/src/tests/js1_8_5/reflect-parse/templateStrings.js
@@ -7,6 +7,8 @@ assertStringExpr("`hey\nthere`", literal("hey\nthere"));
assertExpr("`hey${\"there\"}`", templateLit([lit("hey"), lit("there"), lit("")]));
assertExpr("`hey${\"there\"}mine`", templateLit([lit("hey"), lit("there"), lit("mine")]));
assertExpr("`hey${a == 5}mine`", templateLit([lit("hey"), binExpr("==", ident("a"), lit(5)), lit("mine")]));
+assertExpr("func`hey\\x`", taggedTemplate(ident("func"), template(["hey\\x"], [void 0])));
+assertExpr("func`hey${4}\\x`", taggedTemplate(ident("func"), template(["hey","\\x"], ["hey",void 0], lit(4))));
assertExpr("`hey${`there${\"how\"}`}mine`", templateLit([lit("hey"),
templateLit([lit("there"), lit("how"), lit("")]), lit("mine")]));
assertExpr("func`hey`", taggedTemplate(ident("func"), template(["hey"], ["hey"])));
diff --git a/js/src/tests/shell/futex.js b/js/src/tests/shell/futex.js
index b0951f12e..8ba61d71c 100644
--- a/js/src/tests/shell/futex.js
+++ b/js/src/tests/shell/futex.js
@@ -67,6 +67,8 @@ if (helperThreadCount() === 0) {
quit();
}
+var mem = new Int32Array(new SharedArrayBuffer(1024));
+
////////////////////////////////////////////////////////////
// wait() returns "not-equal" if the value is not the expected one.
@@ -102,7 +104,7 @@ dprint("Sleeping for 2 seconds");
sleep(2);
dprint("Waking the main thread now");
setSharedArrayBuffer(null);
-assertEq(Atomics.wake(mem, 0, 1), 1); // Can fail spuriously but very unlikely
+assertEq(Atomics.notify(mem, 0, 1), 1); // Can fail spuriously but very unlikely
`);
var then = Date.now();
@@ -113,14 +115,14 @@ assertEq(getSharedArrayBuffer(), null); // The worker's clearing of the mbx is v
////////////////////////////////////////////////////////////
-// Test the default argument to atomics.wake()
+// Test the default argument to atomics.notify()
setSharedArrayBuffer(mem.buffer);
evalInWorker(`
var mem = new Int32Array(getSharedArrayBuffer());
sleep(2); // Probably long enough to avoid a spurious error next
-assertEq(Atomics.wake(mem, 0), 1); // Last argument to wake should default to +Infinity
+assertEq(Atomics.notify(mem, 0), 1); // Last argument to wake should default to +Infinity
`);
var then = Date.now();
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js
index 6ed766e94..e69de29bb 100644
--- a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js
@@ -1,27 +0,0 @@
-var assert = {
- sameValue: assertEq,
- notSameValue(a, b, msg) {
- try {
- assertEq(a, b);
- throw "equal"
- } catch (e) {
- if (e === "equal")
- throw new Error("Assertion failed: expected different values, got " + a);
- }
- },
- throws(ctor, f) {
- var fullmsg;
- try {
- f();
- } catch (exc) {
- if (exc instanceof ctor)
- return;
- fullmsg = "Assertion failed: expected exception " + ctor.name + ", got " + exc;
- }
- if (fullmsg === undefined)
- fullmsg = "Assertion failed: expected exception " + ctor.name + ", no exception thrown";
- if (msg !== undefined)
- fullmsg += " - " + msg;
- throw new Error(fullmsg);
- }
-}
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-1.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-1.js
new file mode 100755
index 000000000..08925e079
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-1.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped value is not changed when property was made non-configurable.
+flags: [noStrict]
+---*/
+
+function argumentsNonConfigurable(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+}
+argumentsNonConfigurable(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-2.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-2.js
new file mode 100755
index 000000000..265481e01
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-2.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, variable is
+ changed with SetMutableBinding.
+flags: [noStrict]
+---*/
+
+function argumentsAndSetMutableBinding(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ a = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndSetMutableBinding(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-3.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-3.js
new file mode 100755
index 000000000..6877a0c9d
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-3.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ is changed with [[DefineOwnProperty]].
+flags: [noStrict]
+---*/
+
+function argumentsAndDefineOwnProperty(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ Object.defineProperty(arguments, "0", {value: 2});
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndDefineOwnProperty(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-4.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-4.js
new file mode 100755
index 000000000..d2ac4d376
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-4.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ is changed with [[Set]].
+flags: [noStrict]
+---*/
+
+function argumentsAndSet(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ arguments[0] = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndSet(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-1.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-1.js
new file mode 100755
index 000000000..67f971369
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-1.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ was not deleted. [[Delete]] operation returns false.
+flags: [noStrict]
+---*/
+
+function argumentsAndDelete(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ assert.sameValue(delete arguments[0], false);
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+}
+argumentsAndDelete(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-2.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-2.js
new file mode 100755
index 000000000..9a089eaac
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-2.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ was not deleted. Variable is changed with SetMutableBinding.
+flags: [noStrict]
+---*/
+
+function argumentsAndDeleteSetMutableBinding(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ // Precondition: Delete is unsuccessful and doesn't affect mapping.
+ assert.sameValue(delete arguments[0], false);
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ a = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndDeleteSetMutableBinding(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-3.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-3.js
new file mode 100755
index 000000000..26676a4ee
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-3.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ was not deleted. Arguments property is changed with
+ [[DefineOwnProperty]].
+flags: [noStrict]
+---*/
+
+function argumentsAndDeleteDefineOwnProperty(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ // Precondition: Delete is unsuccessful and doesn't affect mapping.
+ assert.sameValue(delete arguments[0], false);
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ Object.defineProperty(arguments, "0", {value: 2});
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndDeleteDefineOwnProperty(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-4.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-4.js
new file mode 100755
index 000000000..ed96a0e67
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-4.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ was not deleted. Arguments property is changed with
+ [[Set]].
+flags: [noStrict]
+---*/
+
+function argumentsAndDeleteSet(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ // Precondition: Delete is unsuccessful and doesn't affect mapping.
+ assert.sameValue(delete arguments[0], false);
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ arguments[0] = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndDeleteSet(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-1.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-1.js
new file mode 100755
index 000000000..cfeba05c4
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-1.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-configurable and
+ non-writable. Perform property attribute changes with a single
+ [[DefineOwnProperty]] call. Mapped values are unchanged, mapping
+ itself is removed.
+flags: [noStrict]
+---*/
+
+function argumentsNonConfigurableAndNonWritable(a) {
+ Object.defineProperty(arguments, "0", {configurable: false, writable: false});
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 1);
+}
+argumentsNonConfigurableAndNonWritable(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-2.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-2.js
new file mode 100755
index 000000000..69c0e125b
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-2.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-configurable and
+ non-writable. Perform property attribute changes with two
+ consecutive [[DefineOwnProperty]] calls. Mapped values are
+ unchanged, mapping itself is removed.
+flags: [noStrict]
+---*/
+
+function argumentsNonConfigurableThenNonWritable(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+ Object.defineProperty(arguments, "0", {writable: false});
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 1);
+}
+argumentsNonConfigurableThenNonWritable(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-3.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-3.js
new file mode 100755
index 000000000..dca0adcd2
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-3.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-configurable and
+ non-writable. Perform property attribute changes with two
+ [[DefineOwnProperty]] calls. Add intervening call to
+ SetMutableBinding.
+flags: [noStrict]
+---*/
+
+function argumentsNonConfigurableThenNonWritableWithInterveningSetMutableBinding(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+ a = 2;
+ Object.defineProperty(arguments, "0", {writable: false});
+ assert.sameValue(a, 2);
+ // `arguments[0] === 1` per ES2015, Rev 38, April 14, 2015 Final Draft.
+ // Specification bug: https://bugs.ecmascript.org/show_bug.cgi?id=4371
+ assert.sameValue(arguments[0], 2);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 3;
+ assert.sameValue(a, 3);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsNonConfigurableThenNonWritableWithInterveningSetMutableBinding(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-4.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-4.js
new file mode 100755
index 000000000..80d56fe1c
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-4.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-configurable and
+ non-writable. Perform property attribute changes with two
+ [[DefineOwnProperty]] calls. Add intervening call to [[Set]].
+flags: [noStrict]
+---*/
+
+function argumentsNonConfigurableThenNonWritableWithInterveningSet(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+ arguments[0] = 2;
+ Object.defineProperty(arguments, "0", {writable: false});
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 3;
+ assert.sameValue(a, 3);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsNonConfigurableThenNonWritableWithInterveningSet(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-5.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-5.js
new file mode 100755
index 000000000..bbb951502
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-5.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-configurable and
+ non-writable. Perform property attribute changes with two
+ [[DefineOwnProperty]] calls. Add intervening call to
+ [[DefineOwnProperty]].
+flags: [noStrict]
+---*/
+
+function argumentsNonConfigurableThenNonWritableWithDefineOwnProperty(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+ Object.defineProperty(arguments, "0", {value: 2});
+ Object.defineProperty(arguments, "0", {writable: false});
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 3;
+ assert.sameValue(a, 3);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsNonConfigurableThenNonWritableWithDefineOwnProperty(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-1.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-1.js
new file mode 100755
index 000000000..b918f75a1
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-1.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ was not deleted. [[Delete]] operations throws TypeError if called
+ from strict-mode code.
+flags: [noStrict]
+---*/
+
+function argumentsAndStrictDelete(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ var args = arguments;
+ assert.throws(TypeError, function() { "use strict"; delete args[0]; });
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+}
+argumentsAndStrictDelete(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-2.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-2.js
new file mode 100755
index 000000000..01afbe4de
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-2.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ was not deleted. [[Delete]] operations throws TypeError if called
+ from strict-mode code. Variable is changed with SetMutableBinding.
+flags: [noStrict]
+---*/
+
+function argumentsAndStrictDeleteSetMutableBinding(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ // Precondition: Delete is unsuccessful and doesn't affect mapping.
+ var args = arguments;
+ assert.throws(TypeError, function() { "use strict"; delete args[0]; });
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ a = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndStrictDeleteSetMutableBinding(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-3.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-3.js
new file mode 100755
index 000000000..9aa2a2ed2
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-3.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ was not deleted. [[Delete]] operations throws TypeError if called
+ from strict-mode code. Arguments property is changed with
+ [[DefineOwnProperty]].
+flags: [noStrict]
+---*/
+
+function argumentsAndStrictDeleteDefineOwnProperty(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ // Precondition: Delete is unsuccessful and doesn't affect mapping.
+ var args = arguments;
+ assert.throws(TypeError, function() { "use strict"; delete args[0]; });
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ Object.defineProperty(arguments, "0", {value: 2});
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndStrictDeleteDefineOwnProperty(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-4.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-4.js
new file mode 100755
index 000000000..b48018843
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-4.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapping works when property is non-configurable, arguments property
+ was not deleted. [[Delete]] operations throws TypeError if called
+ from strict-mode code. Arguments property is changed with [[Set]].
+flags: [noStrict]
+---*/
+
+function argumentsAndStrictDeleteSet(a) {
+ Object.defineProperty(arguments, "0", {configurable: false});
+
+ // Precondition: Delete is unsuccessful and doesn't affect mapping.
+ var args = arguments;
+ assert.throws(TypeError, function() { "use strict"; delete args[0]; });
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ arguments[0] = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsAndStrictDeleteSet(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-1.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-1.js
new file mode 100755
index 000000000..2dae07678
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-1.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-writable and
+ non-configurable. Perform property attribute changes with two
+ consecutive [[DefineOwnProperty]] calls. Mapped values are
+ unchanged, mapping itself is removed.
+flags: [noStrict]
+---*/
+
+function argumentsNonWritableThenNonConfigurable(a) {
+ Object.defineProperty(arguments, "0", {writable: false});
+ Object.defineProperty(arguments, "0", {configurable: false});
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 2;
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 1);
+}
+argumentsNonWritableThenNonConfigurable(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-2.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-2.js
new file mode 100755
index 000000000..63585b437
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-2.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-writable and
+ non-configurable. Perform property attribute changes with two
+ [[DefineOwnProperty]] calls. Add intervening call to
+ SetMutableBinding.
+flags: [noStrict]
+---*/
+
+function argumentsNonWritableThenNonConfigurableWithInterveningSetMutableBinding(a) {
+ Object.defineProperty(arguments, "0", {writable: false});
+ a = 2;
+ Object.defineProperty(arguments, "0", {configurable: false});
+ assert.sameValue(a, 2);
+ assert.sameValue(arguments[0], 1);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 3;
+ assert.sameValue(a, 3);
+ assert.sameValue(arguments[0], 1);
+}
+argumentsNonWritableThenNonConfigurableWithInterveningSetMutableBinding(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-3.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-3.js
new file mode 100755
index 000000000..2bd1bc9c1
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-3.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-writable and
+ non-configurable. Perform property attribute changes with two
+ [[DefineOwnProperty]] calls. Add intervening call to [[Set]].
+flags: [noStrict]
+---*/
+
+function argumentsNonWritableThenNonConfigurableWithInterveningSet(a) {
+ Object.defineProperty(arguments, "0", {writable: false});
+ arguments[0] = 2;
+ Object.defineProperty(arguments, "0", {configurable: false});
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 1);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 3;
+ assert.sameValue(a, 3);
+ assert.sameValue(arguments[0], 1);
+}
+argumentsNonWritableThenNonConfigurableWithInterveningSet(1);
diff --git a/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-4.js b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-4.js
new file mode 100755
index 000000000..ea40a49a8
--- /dev/null
+++ b/js/src/tests/test262/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-4.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Mapped arguments object with non-configurable property
+description: >
+ Mapped arguments property is changed to non-writable and
+ non-configurable. Perform property attribute changes with two
+ [[DefineOwnProperty]] calls. Add intervening call to
+ [[DefineOwnProperty]].
+flags: [noStrict]
+---*/
+
+function argumentsNonWritableThenNonConfigurableWithInterveningDefineOwnProperty(a) {
+ Object.defineProperty(arguments, "0", {writable: false});
+ Object.defineProperty(arguments, "0", {value: 2});
+ Object.defineProperty(arguments, "0", {configurable: false});
+ assert.sameValue(a, 1);
+ assert.sameValue(arguments[0], 2);
+
+ // Postcondition: Arguments mapping is removed.
+ a = 3;
+ assert.sameValue(a, 3);
+ assert.sameValue(arguments[0], 2);
+}
+argumentsNonWritableThenNonConfigurableWithInterveningDefineOwnProperty(1);
diff --git a/devtools/client/webide/test/build_app2/stage/empty-directory b/js/src/tests/test262/language/arguments-object/mapped/shell.js
index e69de29bb..e69de29bb 100644
--- a/devtools/client/webide/test/build_app2/stage/empty-directory
+++ b/js/src/tests/test262/language/arguments-object/mapped/shell.js
diff --git a/devtools/client/webide/test/build_app_windows2/stage/empty-directory b/js/src/tests/test262/language/arguments-object/shell.js
index e69de29bb..e69de29bb 100644
--- a/devtools/client/webide/test/build_app_windows2/stage/empty-directory
+++ b/js/src/tests/test262/language/arguments-object/shell.js
diff --git a/devtools/client/webide/test/validator/no-name-or-icon/home.html b/js/src/tests/test262/language/shell.js
index e69de29bb..e69de29bb 100644
--- a/devtools/client/webide/test/validator/no-name-or-icon/home.html
+++ b/js/src/tests/test262/language/shell.js
diff --git a/js/src/tests/test262/shell.js b/js/src/tests/test262/shell.js
index b70bb5dbb..462ec9cf8 100644
--- a/js/src/tests/test262/shell.js
+++ b/js/src/tests/test262/shell.js
@@ -938,3 +938,31 @@ var fnGlobalObject = (function()
var global = Function("return this")();
return function fnGlobalObject() { return global; };
})();
+
+var assert = {
+ sameValue: assertEq,
+ notSameValue(a, b, msg) {
+ try {
+ assertEq(a, b);
+ throw "equal"
+ } catch (e) {
+ if (e === "equal")
+ throw new Error("Assertion failed: expected different values, got " + a);
+ }
+ },
+ throws(ctor, f) {
+ var fullmsg;
+ try {
+ f();
+ } catch (exc) {
+ if (exc instanceof ctor)
+ return;
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", got " + exc;
+ }
+ if (fullmsg === undefined)
+ fullmsg = "Assertion failed: expected exception " + ctor.name + ", no exception thrown";
+ if (msg !== undefined)
+ fullmsg += " - " + msg;
+ throw new Error(fullmsg);
+ }
+}
diff --git a/js/src/vm/ArgumentsObject.cpp b/js/src/vm/ArgumentsObject.cpp
index 717aa1050..66e0f40a2 100644
--- a/js/src/vm/ArgumentsObject.cpp
+++ b/js/src/vm/ArgumentsObject.cpp
@@ -214,7 +214,7 @@ ArgumentsObject::createTemplateObject(JSContext* cx, bool mapped)
? &MappedArgumentsObject::class_
: &UnmappedArgumentsObject::class_;
- RootedObject proto(cx, cx->global()->getOrCreateObjectPrototype(cx));
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, cx->global()));
if (!proto)
return nullptr;
@@ -475,7 +475,7 @@ MappedArgSetter(JSContext* cx, HandleObject obj, HandleId id, MutableHandleValue
attrs &= (JSPROP_ENUMERATE | JSPROP_PERMANENT); /* only valid attributes */
RootedFunction callee(cx, &argsobj->callee());
- RootedScript script(cx, callee->getOrCreateScript(cx));
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, callee));
if (!script)
return false;
@@ -590,6 +590,64 @@ MappedArgumentsObject::obj_enumerate(JSContext* cx, HandleObject obj)
return true;
}
+// ES 2017 draft 9.4.4.2
+/* static */ bool
+MappedArgumentsObject::obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id,
+ Handle<PropertyDescriptor> desc, ObjectOpResult& result)
+{
+ // Step 1.
+ Rooted<MappedArgumentsObject*> argsobj(cx, &obj->as<MappedArgumentsObject>());
+
+ // Steps 2-3.
+ bool isMapped = false;
+ if (JSID_IS_INT(id)) {
+ unsigned arg = unsigned(JSID_TO_INT(id));
+ isMapped = arg < argsobj->initialLength() && !argsobj->isElementDeleted(arg);
+ }
+
+ // Step 4.
+ Rooted<PropertyDescriptor> newArgDesc(cx, desc);
+ if (!desc.isAccessorDescriptor() && isMapped) {
+ // In this case the live mapping is supposed to keep working,
+ // we have to pass along the Getter/Setter otherwise they are overwritten.
+ newArgDesc.setGetter(MappedArgGetter);
+ newArgDesc.setSetter(MappedArgSetter);
+ }
+
+ // Steps 5-6. NativeDefineProperty will lookup [[Value]] for us.
+ if (!NativeDefineProperty(cx, obj.as<NativeObject>(), id, newArgDesc, result))
+ return false;
+ // Step 7.
+ if (!result.ok())
+ return true;
+
+ // Step 8.
+ if (isMapped) {
+ unsigned arg = unsigned(JSID_TO_INT(id));
+ if (desc.isAccessorDescriptor()) {
+ if (!argsobj->markElementDeleted(cx, arg))
+ return false;
+ } else {
+ if (desc.hasValue()) {
+ RootedFunction callee(cx, &argsobj->callee());
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, callee));
+ if (!script)
+ return false;
+ argsobj->setElement(cx, arg, desc.value());
+ if (arg < script->functionNonDelazifying()->nargs())
+ TypeScript::SetArgument(cx, script, arg, desc.value());
+ }
+ if (desc.hasWritable() && !desc.writable()) {
+ if (!argsobj->markElementDeleted(cx, arg))
+ return false;
+ }
+ }
+ }
+
+ // Step 9.
+ return result.succeed();
+}
+
static bool
UnmappedArgGetter(JSContext* cx, HandleObject obj, HandleId id, MutableHandleValue vp)
{
@@ -804,6 +862,11 @@ const ClassOps MappedArgumentsObject::classOps_ = {
ArgumentsObject::trace
};
+const ObjectOps MappedArgumentsObject::objectOps_ = {
+ nullptr, /* lookupProperty */
+ MappedArgumentsObject::obj_defineProperty
+};
+
const Class MappedArgumentsObject::class_ = {
"Arguments",
JSCLASS_DELAY_METADATA_BUILDER |
@@ -811,7 +874,10 @@ const Class MappedArgumentsObject::class_ = {
JSCLASS_HAS_CACHED_PROTO(JSProto_Object) |
JSCLASS_SKIP_NURSERY_FINALIZE |
JSCLASS_BACKGROUND_FINALIZE,
- &MappedArgumentsObject::classOps_
+ &MappedArgumentsObject::classOps_,
+ nullptr,
+ nullptr,
+ &MappedArgumentsObject::objectOps_
};
/*
diff --git a/js/src/vm/ArgumentsObject.h b/js/src/vm/ArgumentsObject.h
index 247c7cd94..988e41951 100644
--- a/js/src/vm/ArgumentsObject.h
+++ b/js/src/vm/ArgumentsObject.h
@@ -389,6 +389,7 @@ class ArgumentsObject : public NativeObject
class MappedArgumentsObject : public ArgumentsObject
{
static const ClassOps classOps_;
+ static const ObjectOps objectOps_;
public:
static const Class class_;
@@ -410,6 +411,8 @@ class MappedArgumentsObject : public ArgumentsObject
private:
static bool obj_enumerate(JSContext* cx, HandleObject obj);
static bool obj_resolve(JSContext* cx, HandleObject obj, HandleId id, bool* resolvedp);
+ static bool obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id,
+ Handle<JS::PropertyDescriptor> desc, ObjectOpResult& result);
};
class UnmappedArgumentsObject : public ArgumentsObject
diff --git a/js/src/vm/ArrayBufferObject.cpp b/js/src/vm/ArrayBufferObject.cpp
index 1053fa99d..392724b21 100644
--- a/js/src/vm/ArrayBufferObject.cpp
+++ b/js/src/vm/ArrayBufferObject.cpp
@@ -140,7 +140,7 @@ static const Class ArrayBufferObjectProtoClass = {
static JSObject*
CreateArrayBufferPrototype(JSContext* cx, JSProtoKey key)
{
- return cx->global()->createBlankPrototype(cx, &ArrayBufferObjectProtoClass);
+ return GlobalObject::createBlankPrototype(cx, cx->global(), &ArrayBufferObjectProtoClass);
}
static const ClassOps ArrayBufferObjectClassOps = {
@@ -344,7 +344,7 @@ ArrayBufferObject::detach(JSContext* cx, Handle<ArrayBufferObject*> buffer,
// Make sure the global object's group has been instantiated, so the
// flag change will be observed.
AutoEnterOOMUnsafeRegion oomUnsafe;
- if (!cx->global()->getGroup(cx))
+ if (!JSObject::getGroup(cx, cx->global()))
oomUnsafe.crash("ArrayBufferObject::detach");
MarkObjectGroupFlags(cx, cx->global(), OBJECT_FLAG_TYPED_OBJECT_HAS_DETACHED_BUFFER);
cx->compartment()->detachedTypedObjects = 1;
diff --git a/js/src/vm/AsyncFunction.cpp b/js/src/vm/AsyncFunction.cpp
index f50c87114..e14b77424 100644
--- a/js/src/vm/AsyncFunction.cpp
+++ b/js/src/vm/AsyncFunction.cpp
@@ -118,7 +118,7 @@ js::WrapAsyncFunctionWithProto(JSContext* cx, HandleFunction unwrapped, HandleOb
RootedAtom funName(cx, unwrapped->explicitName());
uint16_t length;
- if (!unwrapped->getLength(cx, &length))
+ if (!JSFunction::getLength(cx, unwrapped, &length))
return nullptr;
// Steps 3 (partially).
diff --git a/js/src/vm/CommonPropertyNames.h b/js/src/vm/CommonPropertyNames.h
index 8a36df083..fd1c9f5e6 100644
--- a/js/src/vm/CommonPropertyNames.h
+++ b/js/src/vm/CommonPropertyNames.h
@@ -38,6 +38,7 @@
macro(Bool32x4, Bool32x4, "Bool32x4") \
macro(Bool64x2, Bool64x2, "Bool64x2") \
macro(boundWithSpace, boundWithSpace, "bound ") \
+ macro(break, break_, "break") \
macro(breakdown, breakdown, "breakdown") \
macro(buffer, buffer, "buffer") \
macro(builder, builder, "builder") \
@@ -52,8 +53,10 @@
macro(callee, callee, "callee") \
macro(caller, caller, "caller") \
macro(callFunction, callFunction, "callFunction") \
+ macro(case, case_, "case") \
macro(caseFirst, caseFirst, "caseFirst") \
- macro(class_, class_, "class") \
+ macro(catch, catch_, "catch") \
+ macro(class, class_, "class") \
macro(close, close, "close") \
macro(Collator, Collator, "Collator") \
macro(CollatorCompareGet, CollatorCompareGet, "Intl_Collator_compare_get") \
@@ -62,10 +65,14 @@
macro(comma, comma, ",") \
macro(compare, compare, "compare") \
macro(configurable, configurable, "configurable") \
+ macro(const, const_, "const") \
macro(construct, construct, "construct") \
macro(constructContentFunction, constructContentFunction, "constructContentFunction") \
macro(constructor, constructor, "constructor") \
+ macro(continue, continue_, "continue") \
macro(ConvertAndCopyTo, ConvertAndCopyTo, "ConvertAndCopyTo") \
+ macro(CopyDataProperties, CopyDataProperties, "CopyDataProperties") \
+ macro(CopyDataPropertiesUnfiltered, CopyDataPropertiesUnfiltered, "CopyDataPropertiesUnfiltered") \
macro(copyWithin, copyWithin, "copyWithin") \
macro(count, count, "count") \
macro(CreateResolvingFunctions, CreateResolvingFunctions, "CreateResolvingFunctions") \
@@ -76,28 +83,32 @@
macro(DateTimeFormatFormatToParts, DateTimeFormatFormatToParts, "Intl_DateTimeFormat_formatToParts") \
macro(day, day, "day") \
macro(dayPeriod, dayPeriod, "dayPeriod") \
+ macro(debugger, debugger, "debugger") \
macro(decodeURI, decodeURI, "decodeURI") \
macro(decodeURIComponent, decodeURIComponent, "decodeURIComponent") \
macro(DefaultBaseClassConstructor, DefaultBaseClassConstructor, "DefaultBaseClassConstructor") \
macro(DefaultDerivedClassConstructor, DefaultDerivedClassConstructor, "DefaultDerivedClassConstructor") \
- macro(default_, default_, "default") \
+ macro(default, default_, "default") \
macro(defineGetter, defineGetter, "__defineGetter__") \
macro(defineProperty, defineProperty, "defineProperty") \
macro(defineSetter, defineSetter, "__defineSetter__") \
macro(delete, delete_, "delete") \
macro(deleteProperty, deleteProperty, "deleteProperty") \
macro(displayURL, displayURL, "displayURL") \
+ macro(do, do_, "do") \
macro(done, done, "done") \
macro(dotGenerator, dotGenerator, ".generator") \
macro(dotThis, dotThis, ".this") \
macro(each, each, "each") \
macro(elementType, elementType, "elementType") \
+ macro(else, else_, "else") \
macro(empty, empty, "") \
macro(emptyRegExp, emptyRegExp, "(?:)") \
macro(encodeURI, encodeURI, "encodeURI") \
macro(encodeURIComponent, encodeURIComponent, "encodeURIComponent") \
macro(endTimestamp, endTimestamp, "endTimestamp") \
macro(entries, entries, "entries") \
+ macro(enum, enum_, "enum") \
macro(enumerable, enumerable, "enumerable") \
macro(enumerate, enumerate, "enumerate") \
macro(era, era, "era") \
@@ -105,11 +116,14 @@
macro(escape, escape, "escape") \
macro(eval, eval, "eval") \
macro(exec, exec, "exec") \
+ macro(export, export_, "export") \
+ macro(extends, extends, "extends") \
macro(false, false_, "false") \
macro(fieldOffsets, fieldOffsets, "fieldOffsets") \
macro(fieldTypes, fieldTypes, "fieldTypes") \
macro(fileName, fileName, "fileName") \
macro(fill, fill, "fill") \
+ macro(finally, finally_, "finally") \
macro(find, find, "find") \
macro(findIndex, findIndex, "findIndex") \
macro(firstDayOfWeek, firstDayOfWeek, "firstDayOfWeek") \
@@ -121,6 +135,7 @@
macro(Float32x4, Float32x4, "Float32x4") \
macro(float64, float64, "float64") \
macro(Float64x2, Float64x2, "Float64x2") \
+ macro(for, for_, "for") \
macro(forceInterpreter, forceInterpreter, "forceInterpreter") \
macro(forEach, forEach, "forEach") \
macro(format, format, "format") \
@@ -146,8 +161,12 @@
macro(hasOwn, hasOwn, "hasOwn") \
macro(hasOwnProperty, hasOwnProperty, "hasOwnProperty") \
macro(hour, hour, "hour") \
+ macro(if, if_, "if") \
macro(ignoreCase, ignoreCase, "ignoreCase") \
macro(ignorePunctuation, ignorePunctuation, "ignorePunctuation") \
+ macro(implements, implements, "implements") \
+ macro(import, import, "import") \
+ macro(in, in, "in") \
macro(includes, includes, "includes") \
macro(incumbentGlobal, incumbentGlobal, "incumbentGlobal") \
macro(index, index, "index") \
@@ -158,12 +177,14 @@
macro(innermost, innermost, "innermost") \
macro(inNursery, inNursery, "inNursery") \
macro(input, input, "input") \
+ macro(instanceof, instanceof, "instanceof") \
macro(int8, int8, "int8") \
macro(int16, int16, "int16") \
macro(int32, int32, "int32") \
macro(Int8x16, Int8x16, "Int8x16") \
macro(Int16x8, Int16x8, "Int16x8") \
macro(Int32x4, Int32x4, "Int32x4") \
+ macro(interface, interface, "interface") \
macro(InterpretGeneratorResume, InterpretGeneratorResume, "InterpretGeneratorResume") \
macro(isEntryPoint, isEntryPoint, "isEntryPoint") \
macro(isExtensible, isExtensible, "isExtensible") \
@@ -217,6 +238,7 @@
macro(noFilename, noFilename, "noFilename") \
macro(nonincrementalReason, nonincrementalReason, "nonincrementalReason") \
macro(noStack, noStack, "noStack") \
+ macro(notes, notes, "notes") \
macro(NumberFormat, NumberFormat, "NumberFormat") \
macro(NumberFormatFormatGet, NumberFormatFormatGet, "Intl_NumberFormat_format_get") \
macro(numeric, numeric, "numeric") \
@@ -238,13 +260,18 @@
macro(other, other, "other") \
macro(outOfMemory, outOfMemory, "out of memory") \
macro(ownKeys, ownKeys, "ownKeys") \
+ macro(Object_valueOf, Object_valueOf, "Object_valueOf") \
+ macro(package, package, "package") \
macro(parseFloat, parseFloat, "parseFloat") \
macro(parseInt, parseInt, "parseInt") \
macro(pattern, pattern, "pattern") \
macro(pending, pending, "pending") \
+ macro(public, public_, "public") \
macro(preventExtensions, preventExtensions, "preventExtensions") \
+ macro(private, private_, "private") \
macro(promise, promise, "promise") \
macro(propertyIsEnumerable, propertyIsEnumerable, "propertyIsEnumerable") \
+ macro(protected, protected_, "protected") \
macro(proto, proto, "__proto__") \
macro(prototype, prototype, "prototype") \
macro(proxy, proxy, "proxy") \
@@ -293,10 +320,12 @@
macro(StructType, StructType, "StructType") \
macro(style, style, "style") \
macro(super, super, "super") \
+ macro(switch, switch_, "switch") \
macro(Symbol_iterator_fun, Symbol_iterator_fun, "[Symbol.iterator]") \
macro(target, target, "target") \
macro(test, test, "test") \
macro(then, then, "then") \
+ macro(this, this_, "this") \
macro(throw, throw_, "throw") \
macro(timestamp, timestamp, "timestamp") \
macro(timeZone, timeZone, "timeZone") \
@@ -309,7 +338,9 @@
macro(toString, toString, "toString") \
macro(toUTCString, toUTCString, "toUTCString") \
macro(true, true_, "true") \
+ macro(try, try_, "try") \
macro(type, type, "type") \
+ macro(typeof, typeof_, "typeof") \
macro(uint8, uint8, "uint8") \
macro(uint8Clamped, uint8Clamped, "uint8Clamped") \
macro(uint16, uint16, "uint16") \
@@ -329,6 +360,7 @@
macro(useAsm, useAsm, "use asm") \
macro(useGrouping, useGrouping, "useGrouping") \
macro(useStrict, useStrict, "use strict") \
+ macro(void, void_, "void") \
macro(value, value, "value") \
macro(valueOf, valueOf, "valueOf") \
macro(values, values, "values") \
@@ -343,6 +375,8 @@
macro(weekday, weekday, "weekday") \
macro(weekendEnd, weekendEnd, "weekendEnd") \
macro(weekendStart, weekendStart, "weekendStart") \
+ macro(while, while_, "while") \
+ macro(with, with, "with") \
macro(writable, writable, "writable") \
macro(year, year, "year") \
macro(yield, yield, "yield") \
diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
index d16781326..d68d1b75e 100644
--- a/js/src/vm/Debugger.cpp
+++ b/js/src/vm/Debugger.cpp
@@ -224,7 +224,7 @@ EnsureFunctionHasScript(JSContext* cx, HandleFunction fun)
{
if (fun->isInterpretedLazy()) {
AutoCompartment ac(cx, fun);
- return !!fun->getOrCreateScript(cx);
+ return !!JSFunction::getOrCreateScript(cx, fun);
}
return true;
}
@@ -2234,7 +2234,7 @@ Debugger::appendAllocationSite(JSContext* cx, HandleObject obj, HandleSavedFrame
RootedAtom ctorName(cx);
{
AutoCompartment ac(cx, obj);
- if (!obj->constructorDisplayAtom(cx, &ctorName))
+ if (!JSObject::constructorDisplayAtom(cx, obj, &ctorName))
return false;
}
@@ -7227,8 +7227,8 @@ static const JSFunctionSpec DebuggerSource_methods[] = {
/* static */ NativeObject*
DebuggerFrame::initClass(JSContext* cx, HandleObject dbgCtor, HandleObject obj)
{
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
return InitClass(cx, dbgCtor, objProto, &class_, construct, 0, properties_,
methods_, nullptr, nullptr);
@@ -8666,6 +8666,14 @@ DebuggerObject::errorMessageNameGetter(JSContext *cx, unsigned argc, Value* vp)
}
/* static */ bool
+DebuggerObject::errorNotesGetter(JSContext *cx, unsigned argc, Value* vp)
+{
+ THIS_DEBUGOBJECT(cx, argc, vp, "get errorNotes", args, object)
+
+ return DebuggerObject::getErrorNotes(cx, object, args.rval());
+}
+
+/* static */ bool
DebuggerObject::errorLineNumberGetter(JSContext *cx, unsigned argc, Value* vp)
{
THIS_DEBUGOBJECT(cx, argc, vp, "get errorLineNumber", args, object)
@@ -9324,6 +9332,7 @@ const JSPropertySpec DebuggerObject::properties_[] = {
JS_PSG("global", DebuggerObject::globalGetter, 0),
JS_PSG("allocationSite", DebuggerObject::allocationSiteGetter, 0),
JS_PSG("errorMessageName", DebuggerObject::errorMessageNameGetter, 0),
+ JS_PSG("errorNotes", DebuggerObject::errorNotesGetter, 0),
JS_PSG("errorLineNumber", DebuggerObject::errorLineNumberGetter, 0),
JS_PSG("errorColumnNumber", DebuggerObject::errorColumnNumberGetter, 0),
JS_PSG("isProxy", DebuggerObject::isProxyGetter, 0),
@@ -9376,8 +9385,8 @@ const JSFunctionSpec DebuggerObject::methods_[] = {
/* static */ NativeObject*
DebuggerObject::initClass(JSContext* cx, HandleObject obj, HandleObject debugCtor)
{
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
RootedNativeObject objectProto(cx, InitClass(cx, debugCtor, objProto, &class_,
construct, 0, properties_,
@@ -9611,7 +9620,7 @@ DebuggerObject::getBoundArguments(JSContext* cx, HandleDebuggerObject object,
if (!result.resize(length))
return false;
for (size_t i = 0; i < length; i++) {
- result[i].set(referent->getBoundFunctionArgument(cx, i));
+ result[i].set(referent->getBoundFunctionArgument(i));
if (!dbg->wrapDebuggeeValue(cx, result[i]))
return false;
}
@@ -9695,6 +9704,30 @@ DebuggerObject::getErrorMessageName(JSContext* cx, HandleDebuggerObject object,
}
/* static */ bool
+DebuggerObject::getErrorNotes(JSContext* cx, HandleDebuggerObject object,
+ MutableHandleValue result)
+{
+ RootedObject referent(cx, object->referent());
+ JSErrorReport* report;
+ if (!getErrorReport(cx, referent, report))
+ return false;
+
+ if (!report) {
+ result.setUndefined();
+ return true;
+ }
+
+ RootedObject errorNotesArray(cx, CreateErrorNotesArray(cx, report));
+ if (!errorNotesArray)
+ return false;
+
+ if (!cx->compartment()->wrap(cx, &errorNotesArray))
+ return false;
+ result.setObject(*errorNotesArray);
+ return true;
+}
+
+/* static */ bool
DebuggerObject::getErrorLineNumber(JSContext* cx, HandleDebuggerObject object,
MutableHandleValue result)
{
@@ -10577,8 +10610,8 @@ const JSFunctionSpec DebuggerEnvironment::methods_[] = {
/* static */ NativeObject*
DebuggerEnvironment::initClass(JSContext* cx, HandleObject dbgCtor, HandleObject obj)
{
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
- RootedObject objProto(cx, global->getOrCreateObjectPrototype(cx));
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
+ RootedObject objProto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
return InitClass(cx, dbgCtor, objProto, &DebuggerEnvironment::class_, construct, 0,
properties_, methods_, nullptr, nullptr);
@@ -10774,7 +10807,8 @@ DebuggerEnvironment::getVariable(JSContext* cx, HandleDebuggerEnvironment enviro
//
// See wrapDebuggeeValue for how the sentinel values are wrapped.
if (referent->is<DebugEnvironmentProxy>()) {
- if (!referent->as<DebugEnvironmentProxy>().getMaybeSentinelValue(cx, id, result))
+ Rooted<DebugEnvironmentProxy*> env(cx, &referent->as<DebugEnvironmentProxy>());
+ if (!DebugEnvironmentProxy::getMaybeSentinelValue(cx, env, id, result))
return false;
} else {
if (!GetProperty(cx, referent, referent, id, result))
@@ -10942,9 +10976,9 @@ JS_DefineDebuggerObject(JSContext* cx, HandleObject obj)
memoryProto(cx);
RootedObject debuggeeWouldRunProto(cx);
RootedValue debuggeeWouldRunCtor(cx);
- Rooted<GlobalObject*> global(cx, &obj->as<GlobalObject>());
+ Handle<GlobalObject*> global = obj.as<GlobalObject>();
- objProto = global->getOrCreateObjectPrototype(cx);
+ objProto = GlobalObject::getOrCreateObjectPrototype(cx, global);
if (!objProto)
return false;
debugProto = InitClass(cx, obj,
diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h
index 3239ade6d..cdcf2d67f 100644
--- a/js/src/vm/Debugger.h
+++ b/js/src/vm/Debugger.h
@@ -1246,6 +1246,8 @@ class DebuggerObject : public NativeObject
MutableHandleObject result);
static MOZ_MUST_USE bool getErrorMessageName(JSContext* cx, HandleDebuggerObject object,
MutableHandleString result);
+ static MOZ_MUST_USE bool getErrorNotes(JSContext* cx, HandleDebuggerObject object,
+ MutableHandleValue result);
static MOZ_MUST_USE bool getErrorLineNumber(JSContext* cx, HandleDebuggerObject object,
MutableHandleValue result);
static MOZ_MUST_USE bool getErrorColumnNumber(JSContext* cx, HandleDebuggerObject object,
@@ -1371,6 +1373,7 @@ class DebuggerObject : public NativeObject
static MOZ_MUST_USE bool globalGetter(JSContext* cx, unsigned argc, Value* vp);
static MOZ_MUST_USE bool allocationSiteGetter(JSContext* cx, unsigned argc, Value* vp);
static MOZ_MUST_USE bool errorMessageNameGetter(JSContext* cx, unsigned argc, Value* vp);
+ static MOZ_MUST_USE bool errorNotesGetter(JSContext* cx, unsigned argc, Value* vp);
static MOZ_MUST_USE bool errorLineNumberGetter(JSContext* cx, unsigned argc, Value* vp);
static MOZ_MUST_USE bool errorColumnNumberGetter(JSContext* cx, unsigned argc, Value* vp);
static MOZ_MUST_USE bool isProxyGetter(JSContext* cx, unsigned argc, Value* vp);
diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp
index 34c39eabf..a5aac2ab4 100644
--- a/js/src/vm/EnvironmentObject.cpp
+++ b/js/src/vm/EnvironmentObject.cpp
@@ -816,7 +816,7 @@ NonSyntacticVariablesObject::create(JSContext* cx)
return nullptr;
MOZ_ASSERT(obj->isUnqualifiedVarObj());
- if (!obj->setQualifiedVarObj(cx))
+ if (!JSObject::setQualifiedVarObj(cx, obj))
return nullptr;
obj->initEnclosingEnvironment(&cx->global()->lexicalEnvironment());
@@ -957,7 +957,7 @@ LexicalEnvironmentObject::createHollowForDebug(JSContext* cx, Handle<LexicalScop
return nullptr;
}
- if (!env->setFlags(cx, BaseShape::NOT_EXTENSIBLE, JSObject::GENERATE_SHAPE))
+ if (!JSObject::setFlags(cx, env, BaseShape::NOT_EXTENSIBLE, JSObject::GENERATE_SHAPE))
return nullptr;
env->initScopeUnchecked(scope);
@@ -1425,7 +1425,8 @@ class DebugEnvironmentProxyHandler : public BaseProxyHandler
/* Handle unaliased formals, vars, lets, and consts at function scope. */
if (env->is<CallObject>()) {
CallObject& callobj = env->as<CallObject>();
- RootedScript script(cx, callobj.callee().getOrCreateScript(cx));
+ RootedFunction fun(cx, &callobj.callee());
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, fun));
if (!script->ensureHasTypes(cx) || !script->ensureHasAnalyzedArgsUsage(cx))
return false;
@@ -2233,11 +2234,11 @@ DebugEnvironmentProxy::isForDeclarative() const
e.is<LexicalEnvironmentObject>();
}
-bool
-DebugEnvironmentProxy::getMaybeSentinelValue(JSContext* cx, HandleId id, MutableHandleValue vp)
+/* static */ bool
+DebugEnvironmentProxy::getMaybeSentinelValue(JSContext* cx, Handle<DebugEnvironmentProxy*> env,
+ HandleId id, MutableHandleValue vp)
{
- Rooted<DebugEnvironmentProxy*> self(cx, this);
- return DebugEnvironmentProxyHandler::singleton.getMaybeSentinelValue(cx, self, id, vp);
+ return DebugEnvironmentProxyHandler::singleton.getMaybeSentinelValue(cx, env, id, vp);
}
bool
@@ -2960,7 +2961,7 @@ js::GetDebugEnvironmentForFunction(JSContext* cx, HandleFunction fun)
MOZ_ASSERT(CanUseDebugEnvironmentMaps(cx));
if (!DebugEnvironments::updateLiveEnvironments(cx))
return nullptr;
- JSScript* script = fun->getOrCreateScript(cx);
+ JSScript* script = JSFunction::getOrCreateScript(cx, fun);
if (!script)
return nullptr;
EnvironmentIter ei(cx, fun->environment(), script->enclosingScope());
@@ -3468,11 +3469,13 @@ RemoveReferencedNames(JSContext* cx, HandleScript script, PropertyNameSet& remai
if (script->hasObjects()) {
ObjectArray* objects = script->objects();
+ RootedFunction fun(cx);
+ RootedScript innerScript(cx);
for (size_t i = 0; i < objects->length; i++) {
JSObject* obj = objects->vector[i];
if (obj->is<JSFunction>() && obj->as<JSFunction>().isInterpreted()) {
- JSFunction* fun = &obj->as<JSFunction>();
- RootedScript innerScript(cx, fun->getOrCreateScript(cx));
+ fun = &obj->as<JSFunction>();
+ innerScript = JSFunction::getOrCreateScript(cx, fun);
if (!innerScript)
return false;
@@ -3535,11 +3538,13 @@ AnalyzeEntrainedVariablesInScript(JSContext* cx, HandleScript script, HandleScri
if (innerScript->hasObjects()) {
ObjectArray* objects = innerScript->objects();
+ RootedFunction fun(cx);
+ RootedScript innerInnerScript(cx);
for (size_t i = 0; i < objects->length; i++) {
JSObject* obj = objects->vector[i];
if (obj->is<JSFunction>() && obj->as<JSFunction>().isInterpreted()) {
- JSFunction* fun = &obj->as<JSFunction>();
- RootedScript innerInnerScript(cx, fun->getOrCreateScript(cx));
+ fun = &obj->as<JSFunction>();
+ innerInnerScript = JSFunction::getOrCreateScript(cx, fun);
if (!innerInnerScript ||
!AnalyzeEntrainedVariablesInScript(cx, script, innerInnerScript))
{
@@ -3570,11 +3575,13 @@ js::AnalyzeEntrainedVariables(JSContext* cx, HandleScript script)
return true;
ObjectArray* objects = script->objects();
+ RootedFunction fun(cx);
+ RootedScript innerScript(cx);
for (size_t i = 0; i < objects->length; i++) {
JSObject* obj = objects->vector[i];
if (obj->is<JSFunction>() && obj->as<JSFunction>().isInterpreted()) {
- JSFunction* fun = &obj->as<JSFunction>();
- RootedScript innerScript(cx, fun->getOrCreateScript(cx));
+ fun = &obj->as<JSFunction>();
+ innerScript = JSFunction::getOrCreateScript(cx, fun);
if (!innerScript)
return false;
diff --git a/js/src/vm/EnvironmentObject.h b/js/src/vm/EnvironmentObject.h
index 032286116..c527cd1b0 100644
--- a/js/src/vm/EnvironmentObject.h
+++ b/js/src/vm/EnvironmentObject.h
@@ -872,7 +872,8 @@ class DebugEnvironmentProxy : public ProxyObject
// Get a property by 'id', but returns sentinel values instead of throwing
// on exceptional cases.
- bool getMaybeSentinelValue(JSContext* cx, HandleId id, MutableHandleValue vp);
+ static bool getMaybeSentinelValue(JSContext* cx, Handle<DebugEnvironmentProxy*> env,
+ HandleId id, MutableHandleValue vp);
// Returns true iff this is a function environment with its own this-binding
// (all functions except arrow functions and generator expression lambdas).
diff --git a/js/src/vm/ErrorObject.cpp b/js/src/vm/ErrorObject.cpp
index d8d29830b..271132801 100644
--- a/js/src/vm/ErrorObject.cpp
+++ b/js/src/vm/ErrorObject.cpp
@@ -29,11 +29,11 @@ js::ErrorObject::assignInitialShape(ExclusiveContext* cx, Handle<ErrorObject*> o
{
MOZ_ASSERT(obj->empty());
- if (!obj->addDataProperty(cx, cx->names().fileName, FILENAME_SLOT, 0))
+ if (!NativeObject::addDataProperty(cx, obj, cx->names().fileName, FILENAME_SLOT, 0))
return nullptr;
- if (!obj->addDataProperty(cx, cx->names().lineNumber, LINENUMBER_SLOT, 0))
+ if (!NativeObject::addDataProperty(cx, obj, cx->names().lineNumber, LINENUMBER_SLOT, 0))
return nullptr;
- return obj->addDataProperty(cx, cx->names().columnNumber, COLUMNNUMBER_SLOT, 0);
+ return NativeObject::addDataProperty(cx, obj, cx->names().columnNumber, COLUMNNUMBER_SLOT, 0);
}
/* static */ bool
@@ -57,7 +57,7 @@ js::ErrorObject::init(JSContext* cx, Handle<ErrorObject*> obj, JSExnType type,
// |new Error()|.
RootedShape messageShape(cx);
if (message) {
- messageShape = obj->addDataProperty(cx, cx->names().message, MESSAGE_SLOT, 0);
+ messageShape = NativeObject::addDataProperty(cx, obj, cx->names().message, MESSAGE_SLOT, 0);
if (!messageShape)
return false;
MOZ_ASSERT(messageShape->slot() == MESSAGE_SLOT);
diff --git a/js/src/vm/ErrorReporting.cpp b/js/src/vm/ErrorReporting.cpp
new file mode 100644
index 000000000..5877f3a4b
--- /dev/null
+++ b/js/src/vm/ErrorReporting.cpp
@@ -0,0 +1,124 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sts=4 et sw=4 tw=99:
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "vm/ErrorReporting.h"
+
+#include "mozilla/Move.h"
+
+#include <stdarg.h>
+
+#include "jscntxt.h"
+#include "jsexn.h"
+
+using mozilla::Move;
+
+using JS::UniqueTwoByteChars;
+
+void
+CallWarningReporter(JSContext* cx, JSErrorReport* reportp)
+{
+ MOZ_ASSERT(reportp);
+ MOZ_ASSERT(JSREPORT_IS_WARNING(reportp->flags));
+
+ if (JS::WarningReporter warningReporter = cx->runtime()->warningReporter)
+ warningReporter(cx, reportp);
+}
+
+void
+CompileError::throwError(JSContext* cx)
+{
+ if (JSREPORT_IS_WARNING(flags)) {
+ CallWarningReporter(cx, this);
+ return;
+ }
+
+ // If there's a runtime exception type associated with this error
+ // number, set that as the pending exception. For errors occuring at
+ // compile time, this is very likely to be a JSEXN_SYNTAXERR.
+ //
+ // If an exception is thrown but not caught, the JSREPORT_EXCEPTION
+ // flag will be set in report.flags. Proper behavior for an error
+ // reporter is to ignore a report with this flag for all but top-level
+ // compilation errors. The exception will remain pending, and so long
+ // as the non-top-level "load", "eval", or "compile" native function
+ // returns false, the top-level reporter will eventually receive the
+ // uncaught exception report.
+ ErrorToException(cx, this, nullptr, nullptr);
+}
+
+bool
+ReportCompileWarning(JSContext* cx, ErrorMetadata&& metadata, UniquePtr<JSErrorNotes> notes,
+ unsigned flags, unsigned errorNumber, va_list args)
+{
+ // On the main thread, report the error immediately. When compiling off
+ // thread, save the error so that the thread finishing the parse can report
+ // it later.
+ CompileError tempErr;
+ CompileError* err = &tempErr;
+ if (!cx->isJSContext() && !cx->addPendingCompileError(&err)) {
+ return false;
+ }
+
+ err->notes = Move(notes);
+ err->flags = flags;
+ err->errorNumber = errorNumber;
+
+ err->filename = metadata.filename;
+ err->lineno = metadata.lineNumber;
+ err->column = metadata.columnNumber;
+ err->isMuted = metadata.isMuted;
+
+ if (UniqueTwoByteChars lineOfContext = Move(metadata.lineOfContext))
+ err->initOwnedLinebuf(lineOfContext.release(), metadata.lineLength, metadata.tokenOffset);
+
+ if (!ExpandErrorArgumentsVA(cx, GetErrorMessage, nullptr, errorNumber,
+ nullptr, ArgumentsAreLatin1, err, args))
+ {
+ return false;
+ }
+
+ if (cx->isJSContext()) {
+ err->throwError(cx->asJSContext());
+ }
+
+ return true;
+}
+
+void
+ReportCompileError(JSContext* cx, ErrorMetadata&& metadata, UniquePtr<JSErrorNotes> notes,
+ unsigned flags, unsigned errorNumber, va_list args)
+{
+ // On the main thread, report the error immediately. When compiling off
+ // thread, save the error so that the thread finishing the parse can report
+ // it later.
+ CompileError tempErr;
+ CompileError* err = &tempErr;
+ if (!cx->isJSContext() && !cx->addPendingCompileError(&err)) {
+ return;
+ }
+
+ err->notes = Move(notes);
+ err->flags = flags;
+ err->errorNumber = errorNumber;
+
+ err->filename = metadata.filename;
+ err->lineno = metadata.lineNumber;
+ err->column = metadata.columnNumber;
+ err->isMuted = metadata.isMuted;
+
+ if (UniqueTwoByteChars lineOfContext = Move(metadata.lineOfContext))
+ err->initOwnedLinebuf(lineOfContext.release(), metadata.lineLength, metadata.tokenOffset);
+
+ if (!ExpandErrorArgumentsVA(cx, GetErrorMessage, nullptr, errorNumber,
+ nullptr, ArgumentsAreLatin1, err, args))
+ {
+ return;
+ }
+
+ if (cx->isJSContext()) {
+ err->throwError(cx->asJSContext());
+ }
+}
diff --git a/js/src/vm/ErrorReporting.h b/js/src/vm/ErrorReporting.h
new file mode 100644
index 000000000..02bbe2c63
--- /dev/null
+++ b/js/src/vm/ErrorReporting.h
@@ -0,0 +1,91 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sts=4 et sw=4 tw=99:
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef vm_ErrorReporting_h
+#define vm_ErrorReporting_h
+
+#include "mozilla/Move.h"
+
+#include <stdarg.h>
+
+#include "jsapi.h" // for JSErrorNotes, JSErrorReport
+
+#include "js/UniquePtr.h" // for UniquePtr
+#include "js/Utility.h" // for UniqueTwoByteChars
+
+struct JSContext;
+
+namespace js {
+
+/**
+ * Metadata for a compilation error (or warning) at a particular offset, or at
+ * no offset (i.e. with respect to a script overall).
+ */
+struct ErrorMetadata
+{
+ // The file/URL where the error occurred.
+ const char* filename;
+
+ // The line and column numbers where the error occurred. If the error
+ // is with respect to the entire script and not with respect to a
+ // particular location, these will both be zero.
+ uint32_t lineNumber;
+ uint32_t columnNumber;
+
+ // If the error occurs at a particular location, context surrounding the
+ // location of the error: the line that contained the error, or a small
+ // portion of it if the line is long.
+ //
+ // This information is provided on a best-effort basis: code populating
+ // ErrorMetadata instances isn't obligated to supply this.
+ JS::UniqueTwoByteChars lineOfContext;
+
+ // If |lineOfContext| is non-null, its length.
+ size_t lineLength;
+
+ // If |lineOfContext| is non-null, the offset within it of the token that
+ // triggered the error.
+ size_t tokenOffset;
+
+ // Whether the error is "muted" because it derives from a cross-origin
+ // load. See the comment in TransitiveCompileOptions in jsapi.h for
+ // details.
+ bool isMuted;
+};
+
+class CompileError : public JSErrorReport
+{
+ public:
+ void throwError(JSContext* cx);
+};
+
+/** Send a JSErrorReport to the warningReporter callback. */
+extern void
+CallWarningReporter(JSContext* cx, JSErrorReport* report);
+
+/**
+ * Report a compile error during script processing prior to execution of the
+ * script.
+ */
+extern void
+ReportCompileError(ErrorMetadata&& metadata, UniquePtr<JSErrorNotes> notes,
+ unsigned flags, unsigned errorNumber, va_list args);
+
+/**
+ * Report a compile warning during script processing prior to execution of the
+ * script. Returns true if the warning was successfully reported, false if an
+ * error occurred.
+ *
+ * This function DOES NOT respect an existing werror option. If the caller
+ * wishes such option to be respected, it must do so itself.
+ */
+extern MOZ_MUST_USE bool
+ReportCompileWarning(JSContext* cx, ErrorMetadata&& metadata, UniquePtr<JSErrorNotes> notes,
+ unsigned flags, unsigned errorNumber, va_list args);
+
+} // namespace js
+
+#endif /* vm_ErrorReporting_h */
diff --git a/js/src/vm/GeneratorObject.cpp b/js/src/vm/GeneratorObject.cpp
index 690c0bf48..ba28501e6 100644
--- a/js/src/vm/GeneratorObject.cpp
+++ b/js/src/vm/GeneratorObject.cpp
@@ -256,7 +256,7 @@ static const JSFunctionSpec legacy_generator_methods[] = {
static JSObject*
NewSingletonObjectWithObjectPrototype(JSContext* cx, Handle<GlobalObject*> global)
{
- RootedObject proto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!proto)
return nullptr;
return NewObjectWithGivenProto<PlainObject>(cx, proto, SingletonObject);
@@ -265,7 +265,7 @@ NewSingletonObjectWithObjectPrototype(JSContext* cx, Handle<GlobalObject*> globa
JSObject*
js::NewSingletonObjectWithFunctionPrototype(JSContext* cx, Handle<GlobalObject*> global)
{
- RootedObject proto(cx, global->getOrCreateFunctionPrototype(cx));
+ RootedObject proto(cx, GlobalObject::getOrCreateFunctionPrototype(cx, global));
if (!proto)
return nullptr;
return NewObjectWithGivenProto<PlainObject>(cx, proto, SingletonObject);
@@ -278,7 +278,7 @@ GlobalObject::initLegacyGeneratorProto(JSContext* cx, Handle<GlobalObject*> glob
return true;
RootedObject proto(cx, NewSingletonObjectWithObjectPrototype(cx, global));
- if (!proto || !proto->setDelegate(cx))
+ if (!proto || !JSObject::setDelegate(cx, proto))
return false;
if (!DefinePropertiesAndFunctions(cx, proto, nullptr, legacy_generator_methods))
return false;
@@ -297,9 +297,9 @@ GlobalObject::initStarGenerators(JSContext* cx, Handle<GlobalObject*> global)
if (!iteratorProto)
return false;
- RootedObject genObjectProto(cx, global->createBlankPrototypeInheriting(cx,
- &PlainObject::class_,
- iteratorProto));
+ RootedObject genObjectProto(cx, GlobalObject::createBlankPrototypeInheriting(cx, global,
+ &PlainObject::class_,
+ iteratorProto));
if (!genObjectProto)
return false;
if (!DefinePropertiesAndFunctions(cx, genObjectProto, nullptr, star_generator_methods) ||
@@ -309,7 +309,7 @@ GlobalObject::initStarGenerators(JSContext* cx, Handle<GlobalObject*> global)
}
RootedObject genFunctionProto(cx, NewSingletonObjectWithFunctionPrototype(cx, global));
- if (!genFunctionProto || !genFunctionProto->setDelegate(cx))
+ if (!genFunctionProto || !JSObject::setDelegate(cx, genFunctionProto))
return false;
if (!LinkConstructorAndPrototype(cx, genFunctionProto, genObjectProto) ||
!DefineToStringTag(cx, genFunctionProto, cx->names().GeneratorFunction))
diff --git a/js/src/vm/GlobalObject.cpp b/js/src/vm/GlobalObject.cpp
index c90b6b85f..85707e1c6 100644
--- a/js/src/vm/GlobalObject.cpp
+++ b/js/src/vm/GlobalObject.cpp
@@ -329,15 +329,15 @@ GlobalObject::createInternal(JSContext* cx, const Class* clasp)
cx->compartment()->initGlobal(*global);
- if (!global->setQualifiedVarObj(cx))
+ if (!JSObject::setQualifiedVarObj(cx, global))
return nullptr;
- if (!global->setDelegate(cx))
+ if (!JSObject::setDelegate(cx, global))
return nullptr;
return global;
}
-GlobalObject*
+/* static */ GlobalObject*
GlobalObject::new_(JSContext* cx, const Class* clasp, JSPrincipals* principals,
JS::OnNewGlobalHookOption hookOption,
const JS::CompartmentOptions& options)
@@ -398,7 +398,7 @@ GlobalObject::emptyGlobalScope() const
GlobalObject::getOrCreateEval(JSContext* cx, Handle<GlobalObject*> global,
MutableHandleObject eval)
{
- if (!global->getOrCreateObjectPrototype(cx))
+ if (!getOrCreateObjectPrototype(cx, global))
return false;
eval.set(&global->getSlot(EVAL).toObject());
return true;
@@ -573,7 +573,7 @@ GlobalObject::warnOnceAbout(JSContext* cx, HandleObject obj, WarnOnceFlag flag,
return true;
}
-JSFunction*
+/* static */ JSFunction*
GlobalObject::createConstructor(JSContext* cx, Native ctor, JSAtom* nameArg, unsigned length,
gc::AllocKind kind, const JSJitInfo* jitInfo)
{
@@ -595,28 +595,27 @@ CreateBlankProto(JSContext* cx, const Class* clasp, HandleObject proto, HandleOb
RootedNativeObject blankProto(cx, NewNativeObjectWithGivenProto(cx, clasp, proto,
SingletonObject));
- if (!blankProto || !blankProto->setDelegate(cx))
+ if (!blankProto || !JSObject::setDelegate(cx, blankProto))
return nullptr;
return blankProto;
}
-NativeObject*
-GlobalObject::createBlankPrototype(JSContext* cx, const Class* clasp)
+/* static */ NativeObject*
+GlobalObject::createBlankPrototype(JSContext* cx, Handle<GlobalObject*> global, const Class* clasp)
{
- Rooted<GlobalObject*> self(cx, this);
- RootedObject objectProto(cx, getOrCreateObjectPrototype(cx));
+ RootedObject objectProto(cx, getOrCreateObjectPrototype(cx, global));
if (!objectProto)
return nullptr;
- return CreateBlankProto(cx, clasp, objectProto, self);
+ return CreateBlankProto(cx, clasp, objectProto, global);
}
-NativeObject*
-GlobalObject::createBlankPrototypeInheriting(JSContext* cx, const Class* clasp, HandleObject proto)
+/* static */ NativeObject*
+GlobalObject::createBlankPrototypeInheriting(JSContext* cx, Handle<GlobalObject*> global,
+ const Class* clasp, HandleObject proto)
{
- Rooted<GlobalObject*> self(cx, this);
- return CreateBlankProto(cx, clasp, proto, self);
+ return CreateBlankProto(cx, clasp, proto, global);
}
bool
@@ -729,21 +728,20 @@ GlobalObject::hasRegExpStatics() const
return !getSlot(REGEXP_STATICS).isUndefined();
}
-RegExpStatics*
-GlobalObject::getRegExpStatics(ExclusiveContext* cx) const
+/* static */ RegExpStatics*
+GlobalObject::getRegExpStatics(ExclusiveContext* cx, Handle<GlobalObject*> global)
{
MOZ_ASSERT(cx);
- Rooted<GlobalObject*> self(cx, const_cast<GlobalObject*>(this));
RegExpStaticsObject* resObj = nullptr;
- const Value& val = this->getSlot(REGEXP_STATICS);
+ const Value& val = global->getSlot(REGEXP_STATICS);
if (!val.isObject()) {
MOZ_ASSERT(val.isUndefined());
- resObj = RegExpStatics::create(cx, self);
+ resObj = RegExpStatics::create(cx, global);
if (!resObj)
return nullptr;
- self->initSlot(REGEXP_STATICS, ObjectValue(*resObj));
+ global->initSlot(REGEXP_STATICS, ObjectValue(*resObj));
} else {
resObj = &val.toObject().as<RegExpStaticsObject>();
}
@@ -866,7 +864,7 @@ GlobalObject::addIntrinsicValue(JSContext* cx, Handle<GlobalObject*> global,
/* static */ bool
GlobalObject::ensureModulePrototypesCreated(JSContext *cx, Handle<GlobalObject*> global)
{
- return global->getOrCreateObject(cx, MODULE_PROTO, initModuleProto) &&
- global->getOrCreateObject(cx, IMPORT_ENTRY_PROTO, initImportEntryProto) &&
- global->getOrCreateObject(cx, EXPORT_ENTRY_PROTO, initExportEntryProto);
+ return getOrCreateObject(cx, global, MODULE_PROTO, initModuleProto) &&
+ getOrCreateObject(cx, global, IMPORT_ENTRY_PROTO, initImportEntryProto) &&
+ getOrCreateObject(cx, global, EXPORT_ENTRY_PROTO, initExportEntryProto);
}
diff --git a/js/src/vm/GlobalObject.h b/js/src/vm/GlobalObject.h
index 3534ef2f6..5aacfc5dc 100644
--- a/js/src/vm/GlobalObject.h
+++ b/js/src/vm/GlobalObject.h
@@ -290,8 +290,8 @@ class GlobalObject : public NativeObject
* Create a constructor function with the specified name and length using
* ctor, a method which creates objects with the given class.
*/
- JSFunction*
- createConstructor(JSContext* cx, JSNative ctor, JSAtom* name, unsigned length,
+ static JSFunction*
+ createConstructor(JSContext* cx, JSNative ctor, JSAtom* name, unsigned length,
gc::AllocKind kind = gc::AllocKind::FUNCTION,
const JSJitInfo* jitInfo = nullptr);
@@ -303,48 +303,44 @@ class GlobalObject : public NativeObject
* complete the minimal initialization to make the returned object safe to
* touch.
*/
- NativeObject* createBlankPrototype(JSContext* cx, const js::Class* clasp);
+ static NativeObject*
+ createBlankPrototype(JSContext* cx, Handle<GlobalObject*> global, const js::Class* clasp);
/*
* Identical to createBlankPrototype, but uses proto as the [[Prototype]]
* of the returned blank prototype.
*/
- NativeObject* createBlankPrototypeInheriting(JSContext* cx, const js::Class* clasp,
- HandleObject proto);
+ static NativeObject*
+ createBlankPrototypeInheriting(JSContext* cx, Handle<GlobalObject*> global,
+ const js::Class* clasp, HandleObject proto);
template <typename T>
- T* createBlankPrototype(JSContext* cx) {
- NativeObject* res = createBlankPrototype(cx, &T::class_);
+ static T*
+ createBlankPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ NativeObject* res = createBlankPrototype(cx, global, &T::class_);
return res ? &res->template as<T>() : nullptr;
}
- NativeObject* getOrCreateObjectPrototype(JSContext* cx) {
- if (functionObjectClassesInitialized())
- return &getPrototype(JSProto_Object).toObject().as<NativeObject>();
- RootedGlobalObject self(cx, this);
- if (!ensureConstructor(cx, self, JSProto_Object))
+ static NativeObject*
+ getOrCreateObjectPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ if (global->functionObjectClassesInitialized())
+ return &global->getPrototype(JSProto_Object).toObject().as<NativeObject>();
+ if (!ensureConstructor(cx, global, JSProto_Object))
return nullptr;
- return &self->getPrototype(JSProto_Object).toObject().as<NativeObject>();
- }
-
- static NativeObject* getOrCreateObjectPrototype(JSContext* cx, Handle<GlobalObject*> global) {
- return global->getOrCreateObjectPrototype(cx);
+ return &global->getPrototype(JSProto_Object).toObject().as<NativeObject>();
}
- NativeObject* getOrCreateFunctionPrototype(JSContext* cx) {
- if (functionObjectClassesInitialized())
- return &getPrototype(JSProto_Function).toObject().as<NativeObject>();
- RootedGlobalObject self(cx, this);
- if (!ensureConstructor(cx, self, JSProto_Object))
+ static NativeObject*
+ getOrCreateFunctionPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ if (global->functionObjectClassesInitialized())
+ return &global->getPrototype(JSProto_Function).toObject().as<NativeObject>();
+ if (!ensureConstructor(cx, global, JSProto_Object))
return nullptr;
- return &self->getPrototype(JSProto_Function).toObject().as<NativeObject>();
- }
-
- static NativeObject* getOrCreateFunctionPrototype(JSContext* cx, Handle<GlobalObject*> global) {
- return global->getOrCreateFunctionPrototype(cx);
+ return &global->getPrototype(JSProto_Function).toObject().as<NativeObject>();
}
- static NativeObject* getOrCreateArrayPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateArrayPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_Array))
return nullptr;
return &global->getPrototype(JSProto_Array).toObject().as<NativeObject>();
@@ -356,37 +352,43 @@ class GlobalObject : public NativeObject
return nullptr;
}
- static NativeObject* getOrCreateBooleanPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateBooleanPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_Boolean))
return nullptr;
return &global->getPrototype(JSProto_Boolean).toObject().as<NativeObject>();
}
- static NativeObject* getOrCreateNumberPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateNumberPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_Number))
return nullptr;
return &global->getPrototype(JSProto_Number).toObject().as<NativeObject>();
}
- static NativeObject* getOrCreateStringPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateStringPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_String))
return nullptr;
return &global->getPrototype(JSProto_String).toObject().as<NativeObject>();
}
- static NativeObject* getOrCreateSymbolPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateSymbolPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_Symbol))
return nullptr;
return &global->getPrototype(JSProto_Symbol).toObject().as<NativeObject>();
}
- static NativeObject* getOrCreatePromisePrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreatePromisePrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_Promise))
return nullptr;
return &global->getPrototype(JSProto_Promise).toObject().as<NativeObject>();
}
- static NativeObject* getOrCreateRegExpPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateRegExpPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_RegExp))
return nullptr;
return &global->getPrototype(JSProto_RegExp).toObject().as<NativeObject>();
@@ -398,28 +400,30 @@ class GlobalObject : public NativeObject
return nullptr;
}
- static NativeObject* getOrCreateSavedFramePrototype(JSContext* cx,
- Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateSavedFramePrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_SavedFrame))
return nullptr;
return &global->getPrototype(JSProto_SavedFrame).toObject().as<NativeObject>();
}
- static JSObject* getOrCreateArrayBufferPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static JSObject*
+ getOrCreateArrayBufferPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_ArrayBuffer))
return nullptr;
return &global->getPrototype(JSProto_ArrayBuffer).toObject();
}
- JSObject* getOrCreateSharedArrayBufferPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static JSObject*
+ getOrCreateSharedArrayBufferPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_SharedArrayBuffer))
return nullptr;
return &global->getPrototype(JSProto_SharedArrayBuffer).toObject();
}
- static JSObject* getOrCreateCustomErrorPrototype(JSContext* cx,
- Handle<GlobalObject*> global,
- JSExnType exnType)
+ static JSObject*
+ getOrCreateCustomErrorPrototype(JSContext* cx, Handle<GlobalObject*> global,
+ JSExnType exnType)
{
JSProtoKey key = GetExceptionProtoKey(exnType);
if (!ensureConstructor(cx, global, key))
@@ -439,35 +443,41 @@ class GlobalObject : public NativeObject
return getOrCreateCustomErrorPrototype(cx, global, JSEXN_ERR);
}
- static NativeObject* getOrCreateSetPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateSetPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_Set))
return nullptr;
return &global->getPrototype(JSProto_Set).toObject().as<NativeObject>();
}
- static NativeObject* getOrCreateWeakSetPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ static NativeObject*
+ getOrCreateWeakSetPrototype(JSContext* cx, Handle<GlobalObject*> global) {
if (!ensureConstructor(cx, global, JSProto_WeakSet))
return nullptr;
return &global->getPrototype(JSProto_WeakSet).toObject().as<NativeObject>();
}
- JSObject* getOrCreateIntlObject(JSContext* cx) {
- return getOrCreateObject(cx, APPLICATION_SLOTS + JSProto_Intl, initIntlObject);
+ static JSObject*
+ getOrCreateIntlObject(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, APPLICATION_SLOTS + JSProto_Intl, initIntlObject);
}
- JSObject* getOrCreateTypedObjectModule(JSContext* cx) {
- return getOrCreateObject(cx, APPLICATION_SLOTS + JSProto_TypedObject, initTypedObjectModule);
+ static JSObject*
+ getOrCreateTypedObjectModule(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, APPLICATION_SLOTS + JSProto_TypedObject,
+ initTypedObjectModule);
}
- JSObject* getOrCreateSimdGlobalObject(JSContext* cx) {
- return getOrCreateObject(cx, APPLICATION_SLOTS + JSProto_SIMD, initSimdObject);
+ static JSObject*
+ getOrCreateSimdGlobalObject(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, APPLICATION_SLOTS + JSProto_SIMD, initSimdObject);
}
// Get the type descriptor for one of the SIMD types.
// simdType is one of the JS_SIMDTYPEREPR_* constants.
// Implemented in builtin/SIMD.cpp.
- static SimdTypeDescr* getOrCreateSimdTypeDescr(JSContext* cx, Handle<GlobalObject*> global,
- SimdType simdType);
+ static SimdTypeDescr*
+ getOrCreateSimdTypeDescr(JSContext* cx, Handle<GlobalObject*> global, SimdType simdType);
TypedObjectModuleObject& getTypedObjectModule() const;
@@ -475,16 +485,19 @@ class GlobalObject : public NativeObject
return &getPrototype(JSProto_Iterator).toObject();
}
- JSObject* getOrCreateCollatorPrototype(JSContext* cx) {
- return getOrCreateObject(cx, COLLATOR_PROTO, initIntlObject);
+ static JSObject*
+ getOrCreateCollatorPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, COLLATOR_PROTO, initIntlObject);
}
- JSObject* getOrCreateNumberFormatPrototype(JSContext* cx) {
- return getOrCreateObject(cx, NUMBER_FORMAT_PROTO, initIntlObject);
+ static JSObject*
+ getOrCreateNumberFormatPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, NUMBER_FORMAT_PROTO, initIntlObject);
}
- JSObject* getOrCreateDateTimeFormatPrototype(JSContext* cx) {
- return getOrCreateObject(cx, DATE_TIME_FORMAT_PROTO, initIntlObject);
+ static JSObject*
+ getOrCreateDateTimeFormatPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, DATE_TIME_FORMAT_PROTO, initIntlObject);
}
static bool ensureModulePrototypesCreated(JSContext *cx, Handle<GlobalObject*> global);
@@ -539,88 +552,86 @@ class GlobalObject : public NativeObject
private:
typedef bool (*ObjectInitOp)(JSContext* cx, Handle<GlobalObject*> global);
- JSObject* getOrCreateObject(JSContext* cx, unsigned slot, ObjectInitOp init) {
- Value v = getSlotRef(slot);
+ static JSObject*
+ getOrCreateObject(JSContext* cx, Handle<GlobalObject*> global, unsigned slot,
+ ObjectInitOp init)
+ {
+ Value v = global->getSlotRef(slot);
if (v.isObject())
return &v.toObject();
- RootedGlobalObject self(cx, this);
- if (!init(cx, self))
+ if (!init(cx, global))
return nullptr;
- return &self->getSlot(slot).toObject();
+ return &global->getSlot(slot).toObject();
}
public:
- static NativeObject* getOrCreateIteratorPrototype(JSContext* cx, Handle<GlobalObject*> global)
- {
- return MaybeNativeObject(global->getOrCreateObject(cx, ITERATOR_PROTO, initIteratorProto));
+ static NativeObject*
+ getOrCreateIteratorPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return MaybeNativeObject(getOrCreateObject(cx, global, ITERATOR_PROTO, initIteratorProto));
}
- static NativeObject* getOrCreateArrayIteratorPrototype(JSContext* cx, Handle<GlobalObject*> global)
- {
- return MaybeNativeObject(global->getOrCreateObject(cx, ARRAY_ITERATOR_PROTO, initArrayIteratorProto));
+ static NativeObject*
+ getOrCreateArrayIteratorPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return MaybeNativeObject(getOrCreateObject(cx, global, ARRAY_ITERATOR_PROTO,
+ initArrayIteratorProto));
}
- static NativeObject* getOrCreateStringIteratorPrototype(JSContext* cx,
- Handle<GlobalObject*> global)
- {
- return MaybeNativeObject(global->getOrCreateObject(cx, STRING_ITERATOR_PROTO, initStringIteratorProto));
+ static NativeObject*
+ getOrCreateStringIteratorPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return MaybeNativeObject(getOrCreateObject(cx, global, STRING_ITERATOR_PROTO,
+ initStringIteratorProto));
}
- static NativeObject* getOrCreateLegacyGeneratorObjectPrototype(JSContext* cx,
- Handle<GlobalObject*> global)
- {
- return MaybeNativeObject(global->getOrCreateObject(cx, LEGACY_GENERATOR_OBJECT_PROTO,
- initLegacyGeneratorProto));
+ static NativeObject*
+ getOrCreateLegacyGeneratorObjectPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return MaybeNativeObject(getOrCreateObject(cx, global, LEGACY_GENERATOR_OBJECT_PROTO,
+ initLegacyGeneratorProto));
}
- static NativeObject* getOrCreateStarGeneratorObjectPrototype(JSContext* cx,
- Handle<GlobalObject*> global)
+ static NativeObject*
+ getOrCreateStarGeneratorObjectPrototype(JSContext* cx, Handle<GlobalObject*> global)
{
- return MaybeNativeObject(global->getOrCreateObject(cx, STAR_GENERATOR_OBJECT_PROTO, initStarGenerators));
+ return MaybeNativeObject(getOrCreateObject(cx, global, STAR_GENERATOR_OBJECT_PROTO,
+ initStarGenerators));
}
- static NativeObject* getOrCreateStarGeneratorFunctionPrototype(JSContext* cx,
- Handle<GlobalObject*> global)
- {
- return MaybeNativeObject(global->getOrCreateObject(cx, STAR_GENERATOR_FUNCTION_PROTO, initStarGenerators));
+ static NativeObject*
+ getOrCreateStarGeneratorFunctionPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return MaybeNativeObject(getOrCreateObject(cx, global, STAR_GENERATOR_FUNCTION_PROTO,
+ initStarGenerators));
}
- static JSObject* getOrCreateStarGeneratorFunction(JSContext* cx,
- Handle<GlobalObject*> global)
- {
- return global->getOrCreateObject(cx, STAR_GENERATOR_FUNCTION, initStarGenerators);
+ static JSObject*
+ getOrCreateStarGeneratorFunction(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, STAR_GENERATOR_FUNCTION, initStarGenerators);
}
- static NativeObject* getOrCreateAsyncFunctionPrototype(JSContext* cx,
- Handle<GlobalObject*> global)
- {
- return MaybeNativeObject(global->getOrCreateObject(cx, ASYNC_FUNCTION_PROTO,
- initAsyncFunction));
+ static NativeObject*
+ getOrCreateAsyncFunctionPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return MaybeNativeObject(getOrCreateObject(cx, global, ASYNC_FUNCTION_PROTO,
+ initAsyncFunction));
}
- static JSObject* getOrCreateAsyncFunction(JSContext* cx,
- Handle<GlobalObject*> global)
- {
- return global->getOrCreateObject(cx, ASYNC_FUNCTION, initAsyncFunction);
+ static JSObject*
+ getOrCreateAsyncFunction(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, ASYNC_FUNCTION, initAsyncFunction);
}
- static JSObject* getOrCreateMapIteratorPrototype(JSContext* cx,
- Handle<GlobalObject*> global)
- {
- return global->getOrCreateObject(cx, MAP_ITERATOR_PROTO, initMapIteratorProto);
+ static JSObject*
+ getOrCreateMapIteratorPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, MAP_ITERATOR_PROTO, initMapIteratorProto);
}
- static JSObject* getOrCreateSetIteratorPrototype(JSContext* cx,
- Handle<GlobalObject*> global)
- {
- return global->getOrCreateObject(cx, SET_ITERATOR_PROTO, initSetIteratorProto);
+ static JSObject*
+ getOrCreateSetIteratorPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ return getOrCreateObject(cx, global, SET_ITERATOR_PROTO, initSetIteratorProto);
}
- JSObject* getOrCreateDataViewPrototype(JSContext* cx) {
- RootedGlobalObject self(cx, this);
- if (!ensureConstructor(cx, self, JSProto_DataView))
+ static JSObject*
+ getOrCreateDataViewPrototype(JSContext* cx, Handle<GlobalObject*> global) {
+ if (!ensureConstructor(cx, global, JSProto_DataView))
return nullptr;
- return &self->getPrototype(JSProto_DataView).toObject();
+ return &global->getPrototype(JSProto_DataView).toObject();
}
static JSFunction*
@@ -678,8 +689,9 @@ class GlobalObject : public NativeObject
return true;
}
- static bool getIntrinsicValue(JSContext* cx, Handle<GlobalObject*> global,
- HandlePropertyName name, MutableHandleValue value)
+ static bool
+ getIntrinsicValue(JSContext* cx, Handle<GlobalObject*> global,
+ HandlePropertyName name, MutableHandleValue value)
{
bool exists = false;
if (!GlobalObject::maybeGetIntrinsicValue(cx, global, name, value, &exists))
@@ -709,7 +721,8 @@ class GlobalObject : public NativeObject
unsigned nargs, MutableHandleValue funVal);
bool hasRegExpStatics() const;
- RegExpStatics* getRegExpStatics(ExclusiveContext* cx) const;
+ static RegExpStatics* getRegExpStatics(ExclusiveContext* cx,
+ Handle<GlobalObject*> global);
RegExpStatics* getAlreadyCreatedRegExpStatics() const;
JSObject* getThrowTypeError() const {
@@ -996,7 +1009,7 @@ GenericCreateConstructor(JSContext* cx, JSProtoKey key)
// Note - We duplicate the trick from ClassName() so that we don't need to
// include jsatominlines.h here.
PropertyName* name = (&cx->names().Null)[key];
- return cx->global()->createConstructor(cx, ctor, name, length, kind, jitInfo);
+ return GlobalObject::createConstructor(cx, ctor, name, length, kind, jitInfo);
}
inline JSObject*
@@ -1009,7 +1022,7 @@ GenericCreatePrototype(JSContext* cx, JSProtoKey key)
if (!GlobalObject::ensureConstructor(cx, cx->global(), protoKey))
return nullptr;
RootedObject parentProto(cx, &cx->global()->getPrototype(protoKey).toObject());
- return cx->global()->createBlankPrototypeInheriting(cx, clasp, parentProto);
+ return GlobalObject::createBlankPrototypeInheriting(cx, cx->global(), clasp, parentProto);
}
inline JSProtoKey
diff --git a/js/src/vm/HelperThreads.cpp b/js/src/vm/HelperThreads.cpp
index bd29d0c79..44915521f 100644
--- a/js/src/vm/HelperThreads.cpp
+++ b/js/src/vm/HelperThreads.cpp
@@ -1291,7 +1291,7 @@ GlobalHelperThreadState::finishModuleParseTask(JSContext* cx, void* token)
MOZ_ASSERT(script->module());
RootedModuleObject module(cx, script->module());
- module->fixEnvironmentsAfterCompartmentMerge(cx);
+ module->fixEnvironmentsAfterCompartmentMerge();
if (!ModuleObject::Freeze(cx, module))
return nullptr;
diff --git a/js/src/vm/Interpreter-inl.h b/js/src/vm/Interpreter-inl.h
index 710f1d89b..acfa8f74b 100644
--- a/js/src/vm/Interpreter-inl.h
+++ b/js/src/vm/Interpreter-inl.h
@@ -593,7 +593,7 @@ InitArrayElemOperation(JSContext* cx, jsbytecode* pc, HandleObject obj, uint32_t
JSOp op = JSOp(*pc);
MOZ_ASSERT(op == JSOP_INITELEM_ARRAY || op == JSOP_INITELEM_INC);
- MOZ_ASSERT(obj->is<ArrayObject>() || obj->is<UnboxedArrayObject>());
+ MOZ_ASSERT(obj->is<ArrayObject>());
if (op == JSOP_INITELEM_INC && index == INT32_MAX) {
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_SPREAD_TOO_LARGE);
@@ -830,7 +830,7 @@ class FastCallGuard
if (useIon_ && fun_) {
if (!script_) {
- script_ = fun_->getOrCreateScript(cx);
+ script_ = JSFunction::getOrCreateScript(cx, fun_);
if (!script_)
return false;
}
diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
index 3cf2deb83..030f0f3b6 100644
--- a/js/src/vm/Interpreter.cpp
+++ b/js/src/vm/Interpreter.cpp
@@ -261,11 +261,16 @@ SetPropertyOperation(JSContext* cx, JSOp op, HandleValue lval, HandleId id, Hand
}
static JSFunction*
-MakeDefaultConstructor(JSContext* cx, JSOp op, JSAtom* atom, HandleObject proto)
+MakeDefaultConstructor(JSContext* cx, HandleScript script, jsbytecode* pc, HandleObject proto)
{
+ JSOp op = JSOp(*pc);
+ JSAtom* atom = script->getAtom(pc);
bool derived = op == JSOP_DERIVEDCONSTRUCTOR;
MOZ_ASSERT(derived == !!proto);
+ jssrcnote* classNote = GetSrcNote(cx, script, pc);
+ MOZ_ASSERT(classNote && SN_TYPE(classNote) == SRC_CLASS_SPAN);
+
PropertyName* lookup = derived ? cx->names().DefaultDerivedClassConstructor
: cx->names().DefaultBaseClassConstructor;
@@ -285,6 +290,17 @@ MakeDefaultConstructor(JSContext* cx, JSOp op, JSAtom* atom, HandleObject proto)
MOZ_ASSERT(ctor->infallibleIsDefaultClassConstructor(cx));
+ // Create the script now, as the source span needs to be overridden for
+ // toString. Calling toString on a class constructor must not return the
+ // source for just the constructor function.
+ JSScript *ctorScript = JSFunction::getOrCreateScript(cx, ctor);
+ if (!ctorScript)
+ return nullptr;
+ uint32_t classStartOffset = GetSrcNoteOffset(classNote, 0);
+ uint32_t classEndOffset = GetSrcNoteOffset(classNote, 1);
+ ctorScript->setDefaultClassConstructorSpan(script->sourceObject(), classStartOffset,
+ classEndOffset);
+
return ctor;
}
@@ -373,7 +389,7 @@ js::RunScript(JSContext* cx, RunState& state)
SPSEntryMarker marker(cx->runtime(), state.script());
- state.script()->ensureNonLazyCanonicalFunction(cx);
+ state.script()->ensureNonLazyCanonicalFunction();
if (jit::IsIonEnabled(cx)) {
jit::MethodStatus status = jit::CanEnter(cx, state);
@@ -446,7 +462,7 @@ js::InternalCallOrConstruct(JSContext* cx, const CallArgs& args, MaybeConstruct
}
/* Invoke native functions. */
- JSFunction* fun = &args.callee().as<JSFunction>();
+ RootedFunction fun(cx, &args.callee().as<JSFunction>());
if (construct != CONSTRUCT && fun->isClassConstructor()) {
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_CANT_CALL_CLASS_CONSTRUCTOR);
return false;
@@ -454,10 +470,16 @@ js::InternalCallOrConstruct(JSContext* cx, const CallArgs& args, MaybeConstruct
if (fun->isNative()) {
MOZ_ASSERT_IF(construct, !fun->isConstructor());
- return CallJSNative(cx, fun->native(), args);
+ JSNative native = fun->native();
+ if (!construct && args.ignoresReturnValue()) {
+ const JSJitInfo* jitInfo = fun->jitInfo();
+ if (jitInfo && jitInfo->type() == JSJitInfo::IgnoresReturnValueNative)
+ native = jitInfo->ignoresReturnValueMethod;
+ }
+ return CallJSNative(cx, native, args);
}
- if (!fun->getOrCreateScript(cx))
+ if (!JSFunction::getOrCreateScript(cx, fun))
return false;
/* Run function until JSOP_RETRVAL, JSOP_RETURN or error. */
@@ -1543,7 +1565,7 @@ SetObjectElementOperation(JSContext* cx, HandleObject obj, HandleId id, HandleVa
}
}
- if (obj->isNative() && !JSID_IS_INT(id) && !obj->setHadElementsAccess(cx))
+ if (obj->isNative() && !JSID_IS_INT(id) && !JSObject::setHadElementsAccess(cx, obj))
return false;
ObjectOpResult result;
@@ -1916,6 +1938,7 @@ CASE(EnableInterruptsPseudoOpcode)
/* Various 1-byte no-ops. */
CASE(JSOP_NOP)
CASE(JSOP_NOP_DESTRUCTURING)
+CASE(JSOP_UNUSED126)
CASE(JSOP_UNUSED192)
CASE(JSOP_UNUSED209)
CASE(JSOP_UNUSED210)
@@ -2958,6 +2981,7 @@ CASE(JSOP_FUNAPPLY)
CASE(JSOP_NEW)
CASE(JSOP_CALL)
+CASE(JSOP_CALL_IGNORES_RV)
CASE(JSOP_CALLITER)
CASE(JSOP_SUPERCALL)
CASE(JSOP_FUNCALL)
@@ -2966,10 +2990,11 @@ CASE(JSOP_FUNCALL)
cx->runtime()->spsProfiler.updatePC(script, REGS.pc);
MaybeConstruct construct = MaybeConstruct(*REGS.pc == JSOP_NEW || *REGS.pc == JSOP_SUPERCALL);
+ bool ignoresReturnValue = *REGS.pc == JSOP_CALL_IGNORES_RV;
unsigned argStackSlots = GET_ARGC(REGS.pc) + construct;
MOZ_ASSERT(REGS.stackDepth() >= 2u + GET_ARGC(REGS.pc));
- CallArgs args = CallArgsFromSp(argStackSlots, REGS.sp, construct);
+ CallArgs args = CallArgsFromSp(argStackSlots, REGS.sp, construct, ignoresReturnValue);
JSFunction* maybeFun;
bool isFunction = IsFunctionObject(args.calleev(), &maybeFun);
@@ -2999,7 +3024,7 @@ CASE(JSOP_FUNCALL)
{
MOZ_ASSERT(maybeFun);
ReservedRooted<JSFunction*> fun(&rootFunction0, maybeFun);
- ReservedRooted<JSScript*> funScript(&rootScript0, fun->getOrCreateScript(cx));
+ ReservedRooted<JSScript*> funScript(&rootScript0, JSFunction::getOrCreateScript(cx, fun));
if (!funScript)
goto error;
@@ -3636,7 +3661,6 @@ CASE(JSOP_NEWINIT)
END_CASE(JSOP_NEWINIT)
CASE(JSOP_NEWARRAY)
-CASE(JSOP_SPREADCALLARRAY)
{
uint32_t length = GET_UINT32(REGS.pc);
JSObject* obj = NewArrayOperation(cx, script, REGS.pc, length);
@@ -4174,8 +4198,8 @@ CASE(JSOP_DERIVEDCONSTRUCTOR)
MOZ_ASSERT(REGS.sp[-1].isObject());
ReservedRooted<JSObject*> proto(&rootObject0, &REGS.sp[-1].toObject());
- JSFunction* constructor = MakeDefaultConstructor(cx, JSOp(*REGS.pc), script->getAtom(REGS.pc),
- proto);
+ JSFunction* constructor = MakeDefaultConstructor(cx, script, REGS.pc, proto);
+
if (!constructor)
goto error;
@@ -4185,8 +4209,7 @@ END_CASE(JSOP_DERIVEDCONSTRUCTOR)
CASE(JSOP_CLASSCONSTRUCTOR)
{
- JSFunction* constructor = MakeDefaultConstructor(cx, JSOp(*REGS.pc), script->getAtom(REGS.pc),
- nullptr);
+ JSFunction* constructor = MakeDefaultConstructor(cx, script, REGS.pc, nullptr);
if (!constructor)
goto error;
PUSH_OBJECT(*constructor);
@@ -4725,7 +4748,8 @@ js::RunOnceScriptPrologue(JSContext* cx, HandleScript script)
// Force instantiation of the script's function's group to ensure the flag
// is preserved in type information.
- if (!script->functionNonDelazifying()->getGroup(cx))
+ RootedFunction fun(cx, script->functionNonDelazifying());
+ if (!JSObject::getGroup(cx, fun))
return false;
MarkObjectGroupFlags(cx, script->functionNonDelazifying(), OBJECT_FLAG_RUNONCE_INVALIDATED);
@@ -4933,7 +4957,7 @@ js::NewObjectOperation(JSContext* cx, HandleScript script, jsbytecode* pc,
newKind = TenuredObject;
}
- RootedObject obj(cx);
+ RootedPlainObject obj(cx);
if (*pc == JSOP_NEWOBJECT) {
RootedPlainObject baseObject(cx, &script->getObject(pc)->as<PlainObject>());
@@ -4970,11 +4994,6 @@ js::NewObjectOperationWithTemplate(JSContext* cx, HandleObject templateObject)
NewObjectKind newKind = templateObject->group()->shouldPreTenure() ? TenuredObject : GenericObject;
- if (templateObject->group()->maybeUnboxedLayout()) {
- RootedObjectGroup group(cx, templateObject->group());
- return UnboxedPlainObject::create(cx, group, newKind);
- }
-
JSObject* obj = CopyInitializerObject(cx, templateObject.as<PlainObject>(), newKind);
if (!obj)
return nullptr;
@@ -5001,9 +5020,6 @@ js::NewArrayOperation(JSContext* cx, HandleScript script, jsbytecode* pc, uint32
if (group->shouldPreTenure() || group->maybePreliminaryObjects())
newKind = TenuredObject;
-
- if (group->maybeUnboxedLayout())
- return UnboxedArrayObject::create(cx, group, length, newKind);
}
ArrayObject* obj = NewDenseFullyAllocatedArray(cx, length, nullptr, newKind);
@@ -5014,9 +5030,6 @@ js::NewArrayOperation(JSContext* cx, HandleScript script, jsbytecode* pc, uint32
MOZ_ASSERT(obj->isSingleton());
} else {
obj->setGroup(group);
-
- if (PreliminaryObjectArray* preliminaryObjects = group->maybePreliminaryObjects())
- preliminaryObjects->registerNewObject(obj);
}
return obj;
@@ -5029,12 +5042,6 @@ js::NewArrayOperationWithTemplate(JSContext* cx, HandleObject templateObject)
NewObjectKind newKind = templateObject->group()->shouldPreTenure() ? TenuredObject : GenericObject;
- if (templateObject->is<UnboxedArrayObject>()) {
- uint32_t length = templateObject->as<UnboxedArrayObject>().length();
- RootedObjectGroup group(cx, templateObject->group());
- return UnboxedArrayObject::create(cx, group, length, newKind);
- }
-
ArrayObject* obj = NewDenseFullyAllocatedArray(cx, templateObject->as<ArrayObject>().length(),
nullptr, newKind);
if (!obj)
diff --git a/js/src/vm/JSONParser.cpp b/js/src/vm/JSONParser.cpp
index 01883bb15..e50da3bc4 100644
--- a/js/src/vm/JSONParser.cpp
+++ b/js/src/vm/JSONParser.cpp
@@ -606,8 +606,8 @@ JSONParserBase::finishArray(MutableHandleValue vp, ElementVector& elements)
{
MOZ_ASSERT(&elements == &stack.back().elements());
- JSObject* obj = ObjectGroup::newArrayObject(cx, elements.begin(), elements.length(),
- GenericObject);
+ ArrayObject* obj = ObjectGroup::newArrayObject(cx, elements.begin(), elements.length(),
+ GenericObject);
if (!obj)
return false;
diff --git a/js/src/vm/NativeObject-inl.h b/js/src/vm/NativeObject-inl.h
index 48a42a8db..e55e3db04 100644
--- a/js/src/vm/NativeObject-inl.h
+++ b/js/src/vm/NativeObject-inl.h
@@ -235,6 +235,38 @@ NativeObject::ensureDenseElements(ExclusiveContext* cx, uint32_t index, uint32_t
return DenseElementResult::Success;
}
+inline DenseElementResult
+NativeObject::setOrExtendDenseElements(ExclusiveContext* cx, uint32_t start, const Value* vp,
+ uint32_t count,
+ ShouldUpdateTypes updateTypes)
+{
+ if (denseElementsAreFrozen())
+ return DenseElementResult::Incomplete;
+
+ if (is<ArrayObject>() &&
+ !as<ArrayObject>().lengthIsWritable() &&
+ start + count >= as<ArrayObject>().length())
+ {
+ return DenseElementResult::Incomplete;
+ }
+
+ DenseElementResult result = ensureDenseElements(cx, start, count);
+ if (result != DenseElementResult::Success)
+ return result;
+
+ if (is<ArrayObject>() && start + count >= as<ArrayObject>().length())
+ as<ArrayObject>().setLengthInt32(start + count);
+
+ if (updateTypes == ShouldUpdateTypes::DontUpdate && !shouldConvertDoubleElements()) {
+ copyDenseElements(start, vp, count);
+ } else {
+ for (size_t i = 0; i < count; i++)
+ setDenseElementWithType(cx, start + i, vp[i]);
+ }
+
+ return DenseElementResult::Success;
+}
+
inline Value
NativeObject::getDenseOrTypedArrayElement(uint32_t idx)
{
diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp
index 21f73f4a9..da0f59fe2 100644
--- a/js/src/vm/NativeObject.cpp
+++ b/js/src/vm/NativeObject.cpp
@@ -390,33 +390,6 @@ NativeObject::setLastPropertyMakeNonNative(Shape* shape)
shape_ = shape;
}
-void
-NativeObject::setLastPropertyMakeNative(ExclusiveContext* cx, Shape* shape)
-{
- MOZ_ASSERT(getClass()->isNative());
- MOZ_ASSERT(shape->getObjectClass()->isNative());
- MOZ_ASSERT(!shape->inDictionary());
-
- // This method is used to convert unboxed objects into native objects. In
- // this case, the shape_ field was previously used to store other data and
- // this should be treated as an initialization.
- shape_.init(shape);
-
- slots_ = nullptr;
- elements_ = emptyObjectElements;
-
- size_t oldSpan = shape->numFixedSlots();
- size_t newSpan = shape->slotSpan();
-
- initializeSlotRange(0, oldSpan);
-
- // A failure at this point will leave the object as a mutant, and we
- // can't recover.
- AutoEnterOOMUnsafeRegion oomUnsafe;
- if (oldSpan != newSpan && !updateSlotsForSpan(cx, oldSpan, newSpan))
- oomUnsafe.crash("NativeObject::setLastPropertyMakeNative");
-}
-
bool
NativeObject::setSlotSpan(ExclusiveContext* cx, uint32_t span)
{
@@ -699,10 +672,10 @@ NativeObject::maybeDensifySparseElements(js::ExclusiveContext* cx, HandleNativeO
*/
if (shape != obj->lastProperty()) {
shape = shape->previous();
- if (!obj->removeProperty(cx, id))
+ if (!NativeObject::removeProperty(cx, obj, id))
return DenseElementResult::Failure;
} else {
- if (!obj->removeProperty(cx, id))
+ if (!NativeObject::removeProperty(cx, obj, id))
return DenseElementResult::Failure;
shape = obj->lastProperty();
}
@@ -718,7 +691,7 @@ NativeObject::maybeDensifySparseElements(js::ExclusiveContext* cx, HandleNativeO
* flag so that we will not start using sparse indexes again if we need
* to grow the object.
*/
- if (!obj->clearFlag(cx, BaseShape::INDEXED))
+ if (!NativeObject::clearFlag(cx, obj, BaseShape::INDEXED))
return DenseElementResult::Failure;
return DenseElementResult::Success;
@@ -1023,23 +996,22 @@ NativeObject::freeSlot(ExclusiveContext* cx, uint32_t slot)
setSlot(slot, UndefinedValue());
}
-Shape*
-NativeObject::addDataProperty(ExclusiveContext* cx, jsid idArg, uint32_t slot, unsigned attrs)
+/* static */ Shape*
+NativeObject::addDataProperty(ExclusiveContext* cx, HandleNativeObject obj,
+ jsid idArg, uint32_t slot, unsigned attrs)
{
MOZ_ASSERT(!(attrs & (JSPROP_GETTER | JSPROP_SETTER)));
- RootedNativeObject self(cx, this);
RootedId id(cx, idArg);
- return addProperty(cx, self, id, nullptr, nullptr, slot, attrs, 0);
+ return addProperty(cx, obj, id, nullptr, nullptr, slot, attrs, 0);
}
-Shape*
-NativeObject::addDataProperty(ExclusiveContext* cx, HandlePropertyName name,
- uint32_t slot, unsigned attrs)
+/* static */ Shape*
+NativeObject::addDataProperty(ExclusiveContext* cx, HandleNativeObject obj,
+ HandlePropertyName name, uint32_t slot, unsigned attrs)
{
MOZ_ASSERT(!(attrs & (JSPROP_GETTER | JSPROP_SETTER)));
- RootedNativeObject self(cx, this);
RootedId id(cx, NameToId(name));
- return addProperty(cx, self, id, nullptr, nullptr, slot, attrs, 0);
+ return addProperty(cx, obj, id, nullptr, nullptr, slot, attrs, 0);
}
template <AllowGC allowGC>
@@ -1073,7 +1045,7 @@ CallAddPropertyHook(ExclusiveContext* cx, HandleNativeObject obj, HandleShape sh
RootedId id(cx, shape->propid());
if (!CallJSAddPropertyOp(cx->asJSContext(), addProperty, obj, id, value)) {
- obj->removeProperty(cx, shape->propid());
+ NativeObject::removeProperty(cx, obj, shape->propid());
return false;
}
}
@@ -1145,7 +1117,7 @@ PurgeProtoChain(ExclusiveContext* cx, JSObject* objArg, HandleId id)
shape = obj->as<NativeObject>().lookup(cx, id);
if (shape)
- return obj->as<NativeObject>().shadowingShapeChange(cx, *shape);
+ return NativeObject::shadowingShapeChange(cx, obj.as<NativeObject>(), *shape);
obj = obj->staticPrototype();
}
@@ -2556,7 +2528,7 @@ js::NativeDeleteProperty(JSContext* cx, HandleNativeObject obj, HandleId id,
obj->setDenseElementHole(cx, JSID_TO_INT(id));
} else {
- if (!obj->removeProperty(cx, id))
+ if (!NativeObject::removeProperty(cx, obj, id))
return false;
}
diff --git a/js/src/vm/NativeObject.h b/js/src/vm/NativeObject.h
index 4dbc167ab..9cc6d5436 100644
--- a/js/src/vm/NativeObject.h
+++ b/js/src/vm/NativeObject.h
@@ -339,16 +339,19 @@ IsObjectValueInCompartment(const Value& v, JSCompartment* comp);
#endif
// Operations which change an object's dense elements can either succeed, fail,
-// or be unable to complete. For native objects, the latter is used when the
-// object's elements must become sparse instead. The enum below is used for
-// such operations, and for similar operations on unboxed arrays and methods
-// that work on both kinds of objects.
+// or be unable to complete. The latter is used when the object's elements must
+// become sparse instead. The enum below is used for such operations.
enum class DenseElementResult {
Failure,
Success,
Incomplete
};
+enum class ShouldUpdateTypes {
+ Update,
+ DontUpdate
+};
+
/*
* NativeObject specifies the internal implementation of a native object.
*
@@ -467,11 +470,6 @@ class NativeObject : public ShapedObject
// that are (temporarily) inconsistent.
void setLastPropertyMakeNonNative(Shape* shape);
- // As for setLastProperty(), but changes the class associated with the
- // object to a native one. The object's type has already been changed, and
- // this brings the shape into sync with it.
- void setLastPropertyMakeNative(ExclusiveContext* cx, Shape* shape);
-
// Newly-created TypedArrays that map a SharedArrayBuffer are
// marked as shared by giving them an ObjectElements that has the
// ObjectElements::SHARED_MEMORY flag set.
@@ -493,8 +491,8 @@ class NativeObject : public ShapedObject
void checkShapeConsistency() { }
#endif
- Shape*
- replaceWithNewEquivalentShape(ExclusiveContext* cx,
+ static Shape*
+ replaceWithNewEquivalentShape(ExclusiveContext* cx, HandleNativeObject obj,
Shape* existingShape, Shape* newShape = nullptr,
bool accessorShape = false);
@@ -512,7 +510,7 @@ class NativeObject : public ShapedObject
*/
bool setSlotSpan(ExclusiveContext* cx, uint32_t span);
- bool toDictionaryMode(ExclusiveContext* cx);
+ static MOZ_MUST_USE bool toDictionaryMode(ExclusiveContext* cx, HandleNativeObject obj);
private:
friend class TenuringTracer;
@@ -611,12 +609,15 @@ class NativeObject : public ShapedObject
}
public:
- bool generateOwnShape(ExclusiveContext* cx, Shape* newShape = nullptr) {
- return replaceWithNewEquivalentShape(cx, lastProperty(), newShape);
+ static MOZ_MUST_USE bool generateOwnShape(ExclusiveContext* cx, HandleNativeObject obj,
+ Shape* newShape = nullptr)
+ {
+ return replaceWithNewEquivalentShape(cx, obj, obj->lastProperty(), newShape);
}
- bool shadowingShapeChange(ExclusiveContext* cx, const Shape& shape);
- bool clearFlag(ExclusiveContext* cx, BaseShape::Flag flag);
+ static MOZ_MUST_USE bool shadowingShapeChange(ExclusiveContext* cx, HandleNativeObject obj,
+ const Shape& shape);
+ static bool clearFlag(ExclusiveContext* cx, HandleNativeObject obj, BaseShape::Flag flag);
// The maximum number of slots in an object.
// |MAX_SLOTS_COUNT * sizeof(JS::Value)| shouldn't overflow
@@ -743,10 +744,10 @@ class NativeObject : public ShapedObject
bool allowDictionary = true);
/* Add a data property whose id is not yet in this scope. */
- Shape* addDataProperty(ExclusiveContext* cx,
- jsid id_, uint32_t slot, unsigned attrs);
- Shape* addDataProperty(ExclusiveContext* cx, HandlePropertyName name,
- uint32_t slot, unsigned attrs);
+ static Shape* addDataProperty(ExclusiveContext* cx, HandleNativeObject obj,
+ jsid id_, uint32_t slot, unsigned attrs);
+ static Shape* addDataProperty(ExclusiveContext* cx, HandleNativeObject obj,
+ HandlePropertyName name, uint32_t slot, unsigned attrs);
/* Add or overwrite a property for id in this scope. */
static Shape*
@@ -766,7 +767,7 @@ class NativeObject : public ShapedObject
unsigned attrs, JSGetterOp getter, JSSetterOp setter);
/* Remove the property named by id from this object. */
- bool removeProperty(ExclusiveContext* cx, jsid id);
+ static bool removeProperty(ExclusiveContext* cx, HandleNativeObject obj, jsid id);
/* Clear the scope, making it empty. */
static void clear(ExclusiveContext* cx, HandleNativeObject obj);
@@ -785,7 +786,8 @@ class NativeObject : public ShapedObject
unsigned flags, ShapeTable::Entry* entry, bool allowDictionary,
const AutoKeepShapeTables& keep);
- bool fillInAfterSwap(JSContext* cx, const Vector<Value>& values, void* priv);
+ static MOZ_MUST_USE bool fillInAfterSwap(JSContext* cx, HandleNativeObject obj,
+ const Vector<Value>& values, void* priv);
public:
// Return true if this object has been converted from shared-immutable
@@ -1147,6 +1149,10 @@ class NativeObject : public ShapedObject
elementsRangeWriteBarrierPost(dstStart, count);
}
+ inline DenseElementResult
+ setOrExtendDenseElements(ExclusiveContext* cx, uint32_t start, const Value* vp, uint32_t count,
+ ShouldUpdateTypes updateTypes = ShouldUpdateTypes::Update);
+
bool shouldConvertDoubleElements() {
return getElementsHeader()->shouldConvertDoubleElements();
}
@@ -1468,19 +1474,6 @@ NativeGetExistingProperty(JSContext* cx, HandleObject receiver, HandleNativeObje
/* * */
-/*
- * If obj has an already-resolved data property for id, return true and
- * store the property value in *vp.
- */
-extern bool
-HasDataProperty(JSContext* cx, NativeObject* obj, jsid id, Value* vp);
-
-inline bool
-HasDataProperty(JSContext* cx, NativeObject* obj, PropertyName* name, Value* vp)
-{
- return HasDataProperty(cx, obj, NameToId(name), vp);
-}
-
extern bool
GetPropertyForNameLookup(JSContext* cx, HandleObject obj, HandleId id, MutableHandleValue vp);
diff --git a/js/src/vm/ObjectGroup-inl.h b/js/src/vm/ObjectGroup-inl.h
index 9074f4d97..d41343be6 100644
--- a/js/src/vm/ObjectGroup-inl.h
+++ b/js/src/vm/ObjectGroup-inl.h
@@ -108,20 +108,6 @@ ObjectGroup::maybePreliminaryObjects()
return maybePreliminaryObjectsDontCheckGeneration();
}
-inline UnboxedLayout*
-ObjectGroup::maybeUnboxedLayout()
-{
- maybeSweep(nullptr);
- return maybeUnboxedLayoutDontCheckGeneration();
-}
-
-inline UnboxedLayout&
-ObjectGroup::unboxedLayout()
-{
- maybeSweep(nullptr);
- return unboxedLayoutDontCheckGeneration();
-}
-
} // namespace js
#endif /* vm_ObjectGroup_inl_h */
diff --git a/js/src/vm/ObjectGroup.cpp b/js/src/vm/ObjectGroup.cpp
index 46159a972..ec0a7aec1 100644
--- a/js/src/vm/ObjectGroup.cpp
+++ b/js/src/vm/ObjectGroup.cpp
@@ -18,11 +18,10 @@
#include "vm/ArrayObject.h"
#include "vm/Shape.h"
#include "vm/TaggedProto.h"
-#include "vm/UnboxedObject.h"
#include "jsobjinlines.h"
-#include "vm/UnboxedObject-inl.h"
+#include "vm/NativeObject-inl.h"
using namespace js;
@@ -56,7 +55,6 @@ ObjectGroup::finalize(FreeOp* fop)
if (newScriptDontCheckGeneration())
newScriptDontCheckGeneration()->clear();
fop->delete_(newScriptDontCheckGeneration());
- fop->delete_(maybeUnboxedLayoutDontCheckGeneration());
if (maybePreliminaryObjectsDontCheckGeneration())
maybePreliminaryObjectsDontCheckGeneration()->clear();
fop->delete_(maybePreliminaryObjectsDontCheckGeneration());
@@ -83,8 +81,6 @@ ObjectGroup::sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const
size_t n = 0;
if (TypeNewScript* newScript = newScriptDontCheckGeneration())
n += newScript->sizeOfIncludingThis(mallocSizeOf);
- if (UnboxedLayout* layout = maybeUnboxedLayoutDontCheckGeneration())
- n += layout->sizeOfIncludingThis(mallocSizeOf);
return n;
}
@@ -253,7 +249,7 @@ ObjectGroup::useSingletonForAllocationSite(JSScript* script, jsbytecode* pc, con
/////////////////////////////////////////////////////////////////////
bool
-JSObject::shouldSplicePrototype(JSContext* cx)
+JSObject::shouldSplicePrototype()
{
/*
* During bootstrapping, if inference is enabled we need to make sure not
@@ -266,33 +262,36 @@ JSObject::shouldSplicePrototype(JSContext* cx)
return isSingleton();
}
-bool
-JSObject::splicePrototype(JSContext* cx, const Class* clasp, Handle<TaggedProto> proto)
+/* static */ bool
+JSObject::splicePrototype(JSContext* cx, HandleObject obj, const Class* clasp,
+ Handle<TaggedProto> proto)
{
- MOZ_ASSERT(cx->compartment() == compartment());
-
- RootedObject self(cx, this);
+ MOZ_ASSERT(cx->compartment() == obj->compartment());
/*
* For singleton groups representing only a single JSObject, the proto
* can be rearranged as needed without destroying type information for
* the old or new types.
*/
- MOZ_ASSERT(self->isSingleton());
+ MOZ_ASSERT(obj->isSingleton());
// Windows may not appear on prototype chains.
MOZ_ASSERT_IF(proto.isObject(), !IsWindow(proto.toObject()));
- if (proto.isObject() && !proto.toObject()->setDelegate(cx))
- return false;
+ if (proto.isObject()) {
+ RootedObject protoObj(cx, proto.toObject());
+ if (!JSObject::setDelegate(cx, protoObj))
+ return false;
+ }
// Force type instantiation when splicing lazy group.
- RootedObjectGroup group(cx, self->getGroup(cx));
+ RootedObjectGroup group(cx, JSObject::getGroup(cx, obj));
if (!group)
return false;
RootedObjectGroup protoGroup(cx, nullptr);
if (proto.isObject()) {
- protoGroup = proto.toObject()->getGroup(cx);
+ RootedObject protoObj(cx, proto.toObject());
+ protoGroup = JSObject::getGroup(cx, protoObj);
if (!protoGroup)
return false;
}
@@ -311,7 +310,7 @@ JSObject::makeLazyGroup(JSContext* cx, HandleObject obj)
/* De-lazification of functions can GC, so we need to do it up here. */
if (obj->is<JSFunction>() && obj->as<JSFunction>().isInterpretedLazy()) {
RootedFunction fun(cx, &obj->as<JSFunction>());
- if (!fun->getOrCreateScript(cx))
+ if (!JSFunction::getOrCreateScript(cx, fun))
return nullptr;
}
@@ -350,7 +349,7 @@ JSObject::makeLazyGroup(JSContext* cx, HandleObject obj)
JSObject::setNewGroupUnknown(JSContext* cx, const js::Class* clasp, JS::HandleObject obj)
{
ObjectGroup::setDefaultNewGroupUnknown(cx, clasp, obj);
- return obj->setFlags(cx, BaseShape::NEW_GROUP_UNKNOWN);
+ return JSObject::setFlags(cx, obj, BaseShape::NEW_GROUP_UNKNOWN);
}
/////////////////////////////////////////////////////////////////////
@@ -512,7 +511,7 @@ ObjectGroup::defaultNewGroup(ExclusiveContext* cx, const Class* clasp,
if (proto.isObject() && !proto.toObject()->isDelegate()) {
RootedObject protoObj(cx, proto.toObject());
- if (!protoObj->setDelegate(cx))
+ if (!JSObject::setDelegate(cx, protoObj))
return nullptr;
// Objects which are prototypes of one another should be singletons, so
@@ -530,8 +529,7 @@ ObjectGroup::defaultNewGroup(ExclusiveContext* cx, const Class* clasp,
if (p) {
ObjectGroup* group = p->group;
MOZ_ASSERT_IF(clasp, group->clasp() == clasp);
- MOZ_ASSERT_IF(!clasp, group->clasp() == &PlainObject::class_ ||
- group->clasp() == &UnboxedPlainObject::class_);
+ MOZ_ASSERT_IF(!clasp, group->clasp() == &PlainObject::class_);
MOZ_ASSERT(group->proto() == proto);
return group;
}
@@ -774,7 +772,7 @@ GetValueTypeForTable(const Value& v)
return type;
}
-/* static */ JSObject*
+/* static */ ArrayObject*
ObjectGroup::newArrayObject(ExclusiveContext* cx,
const Value* vp, size_t length,
NewObjectKind newKind, NewArrayKind arrayKind)
@@ -838,56 +836,13 @@ ObjectGroup::newArrayObject(ExclusiveContext* cx,
AddTypePropertyId(cx, group, nullptr, JSID_VOID, elementType);
- if (elementType != TypeSet::UnknownType()) {
- // Keep track of the initial objects we create with this type.
- // If the initial ones have a consistent shape and property types, we
- // will try to use an unboxed layout for the group.
- PreliminaryObjectArrayWithTemplate* preliminaryObjects =
- cx->new_<PreliminaryObjectArrayWithTemplate>(nullptr);
- if (!preliminaryObjects)
- return nullptr;
- group->setPreliminaryObjects(preliminaryObjects);
- }
-
if (!p.add(cx, *table, ObjectGroupCompartment::ArrayObjectKey(elementType), group))
return nullptr;
}
// The type of the elements being added will already be reflected in type
- // information, but make sure when creating an unboxed array that the
- // common element type is suitable for the unboxed representation.
+ // information.
ShouldUpdateTypes updateTypes = ShouldUpdateTypes::DontUpdate;
- if (!MaybeAnalyzeBeforeCreatingLargeArray(cx, group, vp, length))
- return nullptr;
- if (group->maybePreliminaryObjects())
- group->maybePreliminaryObjects()->maybeAnalyze(cx, group);
- if (group->maybeUnboxedLayout()) {
- switch (group->unboxedLayout().elementType()) {
- case JSVAL_TYPE_BOOLEAN:
- if (elementType != TypeSet::BooleanType())
- updateTypes = ShouldUpdateTypes::Update;
- break;
- case JSVAL_TYPE_INT32:
- if (elementType != TypeSet::Int32Type())
- updateTypes = ShouldUpdateTypes::Update;
- break;
- case JSVAL_TYPE_DOUBLE:
- if (elementType != TypeSet::Int32Type() && elementType != TypeSet::DoubleType())
- updateTypes = ShouldUpdateTypes::Update;
- break;
- case JSVAL_TYPE_STRING:
- if (elementType != TypeSet::StringType())
- updateTypes = ShouldUpdateTypes::Update;
- break;
- case JSVAL_TYPE_OBJECT:
- if (elementType != TypeSet::NullType() && !elementType.get().isObjectUnchecked())
- updateTypes = ShouldUpdateTypes::Update;
- break;
- default:
- MOZ_CRASH();
- }
- }
-
return NewCopiedArrayTryUseGroup(cx, group, vp, length, newKind, updateTypes);
}
@@ -897,49 +852,15 @@ GiveObjectGroup(ExclusiveContext* cx, JSObject* source, JSObject* target)
{
MOZ_ASSERT(source->group() != target->group());
- if (!target->is<ArrayObject>() && !target->is<UnboxedArrayObject>())
- return true;
-
- if (target->group()->maybePreliminaryObjects()) {
- bool force = IsInsideNursery(source);
- target->group()->maybePreliminaryObjects()->maybeAnalyze(cx, target->group(), force);
- }
-
- if (target->is<ArrayObject>()) {
- ObjectGroup* sourceGroup = source->group();
-
- if (source->is<UnboxedArrayObject>()) {
- Shape* shape = target->as<ArrayObject>().lastProperty();
- if (!UnboxedArrayObject::convertToNativeWithGroup(cx, source, target->group(), shape))
- return false;
- } else if (source->is<ArrayObject>()) {
- source->setGroup(target->group());
- } else {
- return true;
- }
-
- if (sourceGroup->maybePreliminaryObjects())
- sourceGroup->maybePreliminaryObjects()->unregisterObject(source);
- if (target->group()->maybePreliminaryObjects())
- target->group()->maybePreliminaryObjects()->registerNewObject(source);
-
- for (size_t i = 0; i < source->as<ArrayObject>().getDenseInitializedLength(); i++) {
- Value v = source->as<ArrayObject>().getDenseElement(i);
- AddTypePropertyId(cx, source->group(), source, JSID_VOID, v);
- }
-
+ if (!target->is<ArrayObject>() || !source->is<ArrayObject>()) {
return true;
}
- if (target->is<UnboxedArrayObject>()) {
- if (!source->is<UnboxedArrayObject>())
- return true;
- if (source->as<UnboxedArrayObject>().elementType() != JSVAL_TYPE_INT32)
- return true;
- if (target->as<UnboxedArrayObject>().elementType() != JSVAL_TYPE_DOUBLE)
- return true;
+ source->setGroup(target->group());
- return source->as<UnboxedArrayObject>().convertInt32ToDouble(cx, target->group());
+ for (size_t i = 0; i < source->as<ArrayObject>().getDenseInitializedLength(); i++) {
+ Value v = source->as<ArrayObject>().getDenseElement(i);
+ AddTypePropertyId(cx, source->group(), source, JSID_VOID, v);
}
return true;
@@ -1048,46 +969,6 @@ js::CombinePlainObjectPropertyTypes(ExclusiveContext* cx, JSObject* newObj,
}
}
}
- } else if (newObj->is<UnboxedPlainObject>()) {
- const UnboxedLayout& layout = newObj->as<UnboxedPlainObject>().layout();
- const int32_t* traceList = layout.traceList();
- if (!traceList)
- return true;
-
- uint8_t* newData = newObj->as<UnboxedPlainObject>().data();
- uint8_t* oldData = oldObj->as<UnboxedPlainObject>().data();
-
- for (; *traceList != -1; traceList++) {}
- traceList++;
- for (; *traceList != -1; traceList++) {
- JSObject* newInnerObj = *reinterpret_cast<JSObject**>(newData + *traceList);
- JSObject* oldInnerObj = *reinterpret_cast<JSObject**>(oldData + *traceList);
-
- if (!newInnerObj || !oldInnerObj || SameGroup(oldInnerObj, newInnerObj))
- continue;
-
- if (!GiveObjectGroup(cx, newInnerObj, oldInnerObj))
- return false;
-
- if (SameGroup(oldInnerObj, newInnerObj))
- continue;
-
- if (!GiveObjectGroup(cx, oldInnerObj, newInnerObj))
- return false;
-
- if (SameGroup(oldInnerObj, newInnerObj)) {
- for (size_t i = 1; i < ncompare; i++) {
- if (compare[i].isObject() && SameGroup(&compare[i].toObject(), newObj)) {
- uint8_t* otherData = compare[i].toObject().as<UnboxedPlainObject>().data();
- JSObject* otherInnerObj = *reinterpret_cast<JSObject**>(otherData + *traceList);
- if (otherInnerObj && !SameGroup(otherInnerObj, newInnerObj)) {
- if (!GiveObjectGroup(cx, otherInnerObj, newInnerObj))
- return false;
- }
- }
- }
- }
- }
}
return true;
@@ -1311,12 +1192,6 @@ ObjectGroup::newPlainObject(ExclusiveContext* cx, IdValuePair* properties, size_
RootedObjectGroup group(cx, p->value().group);
- // Watch for existing groups which now use an unboxed layout.
- if (group->maybeUnboxedLayout()) {
- MOZ_ASSERT(group->unboxedLayout().properties().length() == nproperties);
- return UnboxedPlainObject::createWithProperties(cx, group, newKind, properties);
- }
-
// Update property types according to the properties we are about to add.
// Do this before we do anything which can GC, which might move or remove
// this table entry.
@@ -1503,18 +1378,6 @@ ObjectGroup::allocationSiteGroup(JSContext* cx, JSScript* scriptArg, jsbytecode*
}
}
- if (kind == JSProto_Array &&
- (JSOp(*pc) == JSOP_NEWARRAY || IsCallPC(pc)) &&
- cx->options().unboxedArrays())
- {
- PreliminaryObjectArrayWithTemplate* preliminaryObjects =
- cx->new_<PreliminaryObjectArrayWithTemplate>(nullptr);
- if (preliminaryObjects)
- res->setPreliminaryObjects(preliminaryObjects);
- else
- cx->recoverFromOutOfMemory();
- }
-
if (!table->add(p, key, res)) {
ReportOutOfMemory(cx);
return nullptr;
diff --git a/js/src/vm/ObjectGroup.h b/js/src/vm/ObjectGroup.h
index 4e24de9f1..0b6eaee51 100644
--- a/js/src/vm/ObjectGroup.h
+++ b/js/src/vm/ObjectGroup.h
@@ -20,7 +20,6 @@
namespace js {
class TypeDescr;
-class UnboxedLayout;
class PreliminaryObjectArrayWithTemplate;
class TypeNewScript;
@@ -154,16 +153,6 @@ class ObjectGroup : public gc::TenuredCell
// For some plain objects, the addendum stores a PreliminaryObjectArrayWithTemplate.
Addendum_PreliminaryObjects,
- // When objects in this group have an unboxed representation, the
- // addendum stores an UnboxedLayout (which might have a TypeNewScript
- // as well, if the group is also constructed using 'new').
- Addendum_UnboxedLayout,
-
- // If this group is used by objects that have been converted from an
- // unboxed representation and/or have the same allocation kind as such
- // objects, the addendum points to that unboxed group.
- Addendum_OriginalUnboxedGroup,
-
// When used by typed objects, the addendum stores a TypeDescr.
Addendum_TypeDescr
};
@@ -185,7 +174,6 @@ class ObjectGroup : public gc::TenuredCell
return nullptr;
}
- TypeNewScript* anyNewScript();
void detachNewScript(bool writeBarrier, ObjectGroup* replacement);
ObjectGroupFlags flagsDontCheckGeneration() const {
@@ -225,34 +213,6 @@ class ObjectGroup : public gc::TenuredCell
maybePreliminaryObjectsDontCheckGeneration();
}
- inline UnboxedLayout* maybeUnboxedLayout();
- inline UnboxedLayout& unboxedLayout();
-
- UnboxedLayout* maybeUnboxedLayoutDontCheckGeneration() const {
- if (addendumKind() == Addendum_UnboxedLayout)
- return reinterpret_cast<UnboxedLayout*>(addendum_);
- return nullptr;
- }
-
- UnboxedLayout& unboxedLayoutDontCheckGeneration() const {
- MOZ_ASSERT(addendumKind() == Addendum_UnboxedLayout);
- return *maybeUnboxedLayoutDontCheckGeneration();
- }
-
- void setUnboxedLayout(UnboxedLayout* layout) {
- setAddendum(Addendum_UnboxedLayout, layout);
- }
-
- ObjectGroup* maybeOriginalUnboxedGroup() const {
- if (addendumKind() == Addendum_OriginalUnboxedGroup)
- return reinterpret_cast<ObjectGroup*>(addendum_);
- return nullptr;
- }
-
- void setOriginalUnboxedGroup(ObjectGroup* group) {
- setAddendum(Addendum_OriginalUnboxedGroup, group);
- }
-
TypeDescr* maybeTypeDescr() {
// Note: there is no need to sweep when accessing the type descriptor
// of an object, as it is strongly held and immutable.
@@ -313,9 +273,8 @@ class ObjectGroup : public gc::TenuredCell
* that can be read out of that property in actual JS objects. In native
* objects, property types account for plain data properties (those with a
* slot and no getter or setter hook) and dense elements. In typed objects
- * and unboxed objects, property types account for object and value
- * properties and elements in the object, and expando properties in unboxed
- * objects.
+ * property types account for object and value properties and elements in
+ * the object.
*
* For accesses on these properties, the correspondence is as follows:
*
@@ -338,10 +297,9 @@ class ObjectGroup : public gc::TenuredCell
* 2. Array lengths are special cased by the compiler and VM and are not
* reflected in property types.
*
- * 3. In typed objects (but not unboxed objects), the initial values of
- * properties (null pointers and undefined values) are not reflected in
- * the property types. These values are always possible when reading the
- * property.
+ * 3. In typed objects, the initial values of properties (null pointers and
+ * undefined values) are not reflected in the property types. These
+ * values are always possible when reading the property.
*
* We establish these by using write barriers on calls to setProperty and
* defineProperty which are on native properties, and on any jitcode which
@@ -455,12 +413,6 @@ class ObjectGroup : public gc::TenuredCell
return &flags_;
}
- // Get the bit pattern stored in an object's addendum when it has an
- // original unboxed group.
- static inline int32_t addendumOriginalUnboxedGroupValue() {
- return Addendum_OriginalUnboxedGroup << OBJECT_FLAG_ADDENDUM_SHIFT;
- }
-
inline uint32_t basePropertyCount();
private:
@@ -505,14 +457,14 @@ class ObjectGroup : public gc::TenuredCell
UnknownIndex // Make an array with an unknown element type.
};
- // Create an ArrayObject or UnboxedArrayObject with the specified elements
- // and a group specialized for the elements.
- static JSObject* newArrayObject(ExclusiveContext* cx, const Value* vp, size_t length,
- NewObjectKind newKind,
- NewArrayKind arrayKind = NewArrayKind::Normal);
+ // Create an ArrayObject with the specified elements and a group specialized
+ // for the elements.
+ static ArrayObject* newArrayObject(ExclusiveContext* cx, const Value* vp, size_t length,
+ NewObjectKind newKind,
+ NewArrayKind arrayKind = NewArrayKind::Normal);
- // Create a PlainObject or UnboxedPlainObject with the specified properties
- // and a group specialized for those properties.
+ // Create a PlainObject with the specified properties and a group specialized
+ // for those properties.
static JSObject* newPlainObject(ExclusiveContext* cx,
IdValuePair* properties, size_t nproperties,
NewObjectKind newKind);
diff --git a/js/src/vm/Opcodes.h b/js/src/vm/Opcodes.h
index 4b044c8d8..3c4d61a67 100644
--- a/js/src/vm/Opcodes.h
+++ b/js/src/vm/Opcodes.h
@@ -1281,17 +1281,7 @@
* Stack: receiver, obj, propval => obj[propval]
*/ \
macro(JSOP_GETELEM_SUPER, 125, "getelem-super", NULL, 1, 3, 1, JOF_BYTE |JOF_ELEM|JOF_LEFTASSOC) \
- /*
- * Pushes newly created array for a spread call onto the stack. This has
- * the same semantics as JSOP_NEWARRAY, but is distinguished to avoid
- * using unboxed arrays in spread calls, which would make compiling spread
- * calls in baseline more complex.
- * Category: Literals
- * Type: Array
- * Operands: uint32_t length
- * Stack: => obj
- */ \
- macro(JSOP_SPREADCALLARRAY, 126, "spreadcallarray", NULL, 5, 0, 1, JOF_UINT32) \
+ macro(JSOP_UNUSED126, 126, "unused126", NULL, 5, 0, 1, JOF_UINT32) \
\
/*
* Defines the given function on the current scope.
@@ -2292,14 +2282,23 @@
* Operands:
* Stack: =>
*/ \
- macro(JSOP_JUMPTARGET, 230, "jumptarget", NULL, 1, 0, 0, JOF_BYTE)
+ macro(JSOP_JUMPTARGET, 230, "jumptarget", NULL, 1, 0, 0, JOF_BYTE)\
+ /*
+ * Like JSOP_CALL, but tells the function that the return value is ignored.
+ * stack.
+ * Category: Statements
+ * Type: Function
+ * Operands: uint16_t argc
+ * Stack: callee, this, args[0], ..., args[argc-1] => rval
+ * nuses: (argc+2)
+ */ \
+ macro(JSOP_CALL_IGNORES_RV, 231, "call-ignores-rv", NULL, 3, -1, 1, JOF_UINT16|JOF_INVOKE|JOF_TYPESET)
/*
* In certain circumstances it may be useful to "pad out" the opcode space to
* a power of two. Use this macro to do so.
*/
#define FOR_EACH_TRAILING_UNUSED_OPCODE(macro) \
- macro(231) \
macro(232) \
macro(233) \
macro(234) \
diff --git a/js/src/vm/ProxyObject.h b/js/src/vm/ProxyObject.h
index a0a929b20..d86d72cc9 100644
--- a/js/src/vm/ProxyObject.h
+++ b/js/src/vm/ProxyObject.h
@@ -104,7 +104,7 @@ class ProxyObject : public ShapedObject
public:
static unsigned grayLinkExtraSlot(JSObject* obj);
- void renew(JSContext* cx, const BaseProxyHandler* handler, const Value& priv);
+ void renew(const BaseProxyHandler* handler, const Value& priv);
static void trace(JSTracer* trc, JSObject* obj);
diff --git a/js/src/vm/ReceiverGuard.cpp b/js/src/vm/ReceiverGuard.cpp
index 11c2d0727..e95e8a208 100644
--- a/js/src/vm/ReceiverGuard.cpp
+++ b/js/src/vm/ReceiverGuard.cpp
@@ -15,11 +15,7 @@ ReceiverGuard::ReceiverGuard(JSObject* obj)
: group(nullptr), shape(nullptr)
{
if (obj) {
- if (obj->is<UnboxedPlainObject>()) {
- group = obj->group();
- if (UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando())
- shape = expando->lastProperty();
- } else if (obj->is<UnboxedArrayObject>() || obj->is<TypedObject>()) {
+ if (obj->is<TypedObject>()) {
group = obj->group();
} else {
shape = obj->maybeShape();
@@ -32,9 +28,7 @@ ReceiverGuard::ReceiverGuard(ObjectGroup* group, Shape* shape)
{
if (group) {
const Class* clasp = group->clasp();
- if (clasp == &UnboxedPlainObject::class_) {
- // Keep both group and shape.
- } else if (clasp == &UnboxedArrayObject::class_ || IsTypedObjectClass(clasp)) {
+ if (IsTypedObjectClass(clasp)) {
this->shape = nullptr;
} else {
this->group = nullptr;
@@ -45,12 +39,8 @@ ReceiverGuard::ReceiverGuard(ObjectGroup* group, Shape* shape)
/* static */ int32_t
HeapReceiverGuard::keyBits(JSObject* obj)
{
- if (obj->is<UnboxedPlainObject>()) {
- // Both the group and shape need to be guarded for unboxed plain objects.
- return obj->as<UnboxedPlainObject>().maybeExpando() ? 0 : 1;
- }
- if (obj->is<UnboxedArrayObject>() || obj->is<TypedObject>()) {
- // Only the group needs to be guarded for unboxed arrays and typed objects.
+ if (obj->is<TypedObject>()) {
+ // Only the group needs to be guarded for typed objects.
return 2;
}
// Other objects only need the shape to be guarded.
diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp
index e0b44e1eb..ef97ed816 100644
--- a/js/src/vm/RegExpObject.cpp
+++ b/js/src/vm/RegExpObject.cpp
@@ -129,10 +129,10 @@ RegExpSharedReadBarrier(JSContext* cx, RegExpShared* shared)
shared->unmarkGray();
}
-bool
-RegExpObject::getShared(JSContext* cx, RegExpGuard* g)
+/* static */ bool
+RegExpObject::getShared(JSContext* cx, Handle<RegExpObject*> regexp, RegExpGuard* g)
{
- if (RegExpShared* shared = maybeShared()) {
+ if (RegExpShared* shared = regexp->maybeShared()) {
// Fetching a RegExpShared from an object requires a read
// barrier, as the shared pointer might be weak.
RegExpSharedReadBarrier(cx, shared);
@@ -141,7 +141,7 @@ RegExpObject::getShared(JSContext* cx, RegExpGuard* g)
return true;
}
- return createShared(cx, g);
+ return createShared(cx, regexp, g);
}
/* static */ bool
@@ -199,7 +199,7 @@ RegExpObject::trace(JSTracer* trc, JSObject* obj)
static JSObject*
CreateRegExpPrototype(JSContext* cx, JSProtoKey key)
{
- return cx->global()->createBlankPrototype(cx, &RegExpObject::protoClass_);
+ return GlobalObject::createBlankPrototype(cx, cx->global(), &RegExpObject::protoClass_);
}
static const ClassOps RegExpObjectClassOps = {
@@ -279,16 +279,14 @@ RegExpObject::create(ExclusiveContext* cx, HandleAtom source, RegExpFlag flags,
return regexp;
}
-bool
-RegExpObject::createShared(JSContext* cx, RegExpGuard* g)
+/* static */ bool
+RegExpObject::createShared(JSContext* cx, Handle<RegExpObject*> regexp, RegExpGuard* g)
{
- Rooted<RegExpObject*> self(cx, this);
-
- MOZ_ASSERT(!maybeShared());
- if (!cx->compartment()->regExps.get(cx, getSource(), getFlags(), g))
+ MOZ_ASSERT(!regexp->maybeShared());
+ if (!cx->compartment()->regExps.get(cx, regexp->getSource(), regexp->getFlags(), g))
return false;
- self->setShared(**g);
+ regexp->setShared(**g);
return true;
}
@@ -300,7 +298,8 @@ RegExpObject::assignInitialShape(ExclusiveContext* cx, Handle<RegExpObject*> sel
JS_STATIC_ASSERT(LAST_INDEX_SLOT == 0);
/* The lastIndex property alone is writable but non-configurable. */
- return self->addDataProperty(cx, cx->names().lastIndex, LAST_INDEX_SLOT, JSPROP_PERMANENT);
+ return NativeObject::addDataProperty(cx, self, cx->names().lastIndex, LAST_INDEX_SLOT,
+ JSPROP_PERMANENT);
}
void
@@ -891,11 +890,12 @@ RegExpShared::dumpBytecode(JSContext* cx, bool match_only, HandleLinearString in
return true;
}
-bool
-RegExpObject::dumpBytecode(JSContext* cx, bool match_only, HandleLinearString input)
+/* static */ bool
+RegExpObject::dumpBytecode(JSContext* cx, Handle<RegExpObject*> regexp,
+ bool match_only, HandleLinearString input)
{
RegExpGuard g(cx);
- if (!getShared(cx, &g))
+ if (!getShared(cx, regexp, &g))
return false;
return g.re()->dumpBytecode(cx, match_only, input);
@@ -1430,7 +1430,7 @@ js::CloneRegExpObject(JSContext* cx, JSObject* obj_)
Rooted<JSAtom*> source(cx, regex->getSource());
RegExpGuard g(cx);
- if (!regex->getShared(cx, &g))
+ if (!RegExpObject::getShared(cx, regex, &g))
return nullptr;
clone->initAndZeroLastIndex(source, g->getFlags(), cx);
diff --git a/js/src/vm/RegExpObject.h b/js/src/vm/RegExpObject.h
index dc428a973..f1ea101ed 100644
--- a/js/src/vm/RegExpObject.h
+++ b/js/src/vm/RegExpObject.h
@@ -483,7 +483,8 @@ class RegExpObject : public NativeObject
static bool isOriginalFlagGetter(JSNative native, RegExpFlag* mask);
- bool getShared(JSContext* cx, RegExpGuard* g);
+ static MOZ_MUST_USE bool getShared(JSContext* cx, Handle<RegExpObject*> regexp,
+ RegExpGuard* g);
void setShared(RegExpShared& shared) {
MOZ_ASSERT(!maybeShared());
@@ -500,7 +501,8 @@ class RegExpObject : public NativeObject
void initAndZeroLastIndex(HandleAtom source, RegExpFlag flags, ExclusiveContext* cx);
#ifdef DEBUG
- bool dumpBytecode(JSContext* cx, bool match_only, HandleLinearString input);
+ static MOZ_MUST_USE bool dumpBytecode(JSContext* cx, Handle<RegExpObject*> regexp,
+ bool match_only, HandleLinearString input);
#endif
private:
@@ -508,7 +510,8 @@ class RegExpObject : public NativeObject
* Precondition: the syntax for |source| has already been validated.
* Side effect: sets the private field.
*/
- bool createShared(JSContext* cx, RegExpGuard* g);
+ static MOZ_MUST_USE bool createShared(JSContext* cx, Handle<RegExpObject*> regexp,
+ RegExpGuard* g);
RegExpShared* maybeShared() const {
return static_cast<RegExpShared*>(NativeObject::getPrivate(PRIVATE_SLOT));
}
@@ -531,7 +534,7 @@ inline bool
RegExpToShared(JSContext* cx, HandleObject obj, RegExpGuard* g)
{
if (obj->is<RegExpObject>())
- return obj->as<RegExpObject>().getShared(cx, g);
+ return RegExpObject::getShared(cx, obj.as<RegExpObject>(), g);
return Proxy::regexp_toShared(cx, obj, g);
}
diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp
index 8eb997c71..5fc8e0e17 100644
--- a/js/src/vm/Runtime.cpp
+++ b/js/src/vm/Runtime.cpp
@@ -589,7 +589,7 @@ JSRuntime::requestInterrupt(InterruptMode mode)
// Atomics.wait().
fx.lock();
if (fx.isWaiting())
- fx.wake(FutexRuntime::WakeForJSInterrupt);
+ fx.notify(FutexRuntime::NotifyForJSInterrupt);
fx.unlock();
InterruptRunningJitCode(this);
}
diff --git a/js/src/vm/Scope.cpp b/js/src/vm/Scope.cpp
index a71c03695..0f80d7b69 100644
--- a/js/src/vm/Scope.cpp
+++ b/js/src/vm/Scope.cpp
@@ -669,6 +669,14 @@ FunctionScope::script() const
return canonicalFunction()->nonLazyScript();
}
+/* static */ bool
+FunctionScope::isSpecialName(ExclusiveContext* cx, JSAtom* name)
+{
+ return name == cx->names().arguments ||
+ name == cx->names().dotThis ||
+ name == cx->names().dotGenerator;
+}
+
/* static */ Shape*
FunctionScope::getEmptyEnvironmentShape(ExclusiveContext* cx, bool hasParameterExprs)
{
diff --git a/js/src/vm/Scope.h b/js/src/vm/Scope.h
index 1d04fd9f6..4a4ae8090 100644
--- a/js/src/vm/Scope.h
+++ b/js/src/vm/Scope.h
@@ -446,10 +446,11 @@ Scope::is<LexicalScope>() const
}
//
-// Scope corresponding to a function. Holds formal parameter names and, if the
-// function parameters contain no expressions that might possibly be
-// evaluated, the function's var bindings. For example, in these functions,
-// the FunctionScope will store a/b/c bindings but not d/e/f bindings:
+// Scope corresponding to a function. Holds formal parameter names, special
+// internal names (see FunctionScope::isSpecialName), and, if the function
+// parameters contain no expressions that might possibly be evaluated, the
+// function's var bindings. For example, in these functions, the FunctionScope
+// will store a/b/c bindings but not d/e/f bindings:
//
// function f1(a, b) {
// var c;
@@ -562,6 +563,8 @@ class FunctionScope : public Scope
return data().nonPositionalFormalStart;
}
+ static bool isSpecialName(ExclusiveContext* cx, JSAtom* name);
+
static Shape* getEmptyEnvironmentShape(ExclusiveContext* cx, bool hasParameterExprs);
};
diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp
index ccd4cc8d7..792a00490 100644
--- a/js/src/vm/SelfHosting.cpp
+++ b/js/src/vm/SelfHosting.cpp
@@ -477,7 +477,7 @@ intrinsic_FinishBoundFunctionInit(JSContext* cx, unsigned argc, Value* vp)
// Try to avoid invoking the resolve hook.
if (targetObj->is<JSFunction>() && !targetObj->as<JSFunction>().hasResolvedLength()) {
RootedValue targetLength(cx);
- if (!targetObj->as<JSFunction>().getUnresolvedLength(cx, &targetLength))
+ if (!JSFunction::getUnresolvedLength(cx, targetObj.as<JSFunction>(), &targetLength))
return false;
length = Max(0.0, targetLength.toNumber() - argCount);
@@ -2154,7 +2154,7 @@ static const JSFunctionSpec intrinsic_functions[] = {
JS_INLINABLE_FN("std_Array_slice", array_slice, 2,0, ArraySlice),
JS_FN("std_Array_sort", array_sort, 1,0),
JS_FN("std_Array_reverse", array_reverse, 0,0),
- JS_INLINABLE_FN("std_Array_splice", array_splice, 2,0, ArraySplice),
+ JS_FNINFO("std_Array_splice", array_splice, &array_splice_info, 2,0),
JS_FN("std_Date_now", date_now, 0,0),
JS_FN("std_Date_valueOf", date_valueOf, 0,0),
@@ -3008,7 +3008,7 @@ JSRuntime::cloneSelfHostedFunctionScript(JSContext* cx, HandlePropertyName name,
MOZ_ASSERT(targetFun->isInterpretedLazy());
MOZ_ASSERT(targetFun->isSelfHostedBuiltin());
- RootedScript sourceScript(cx, sourceFun->getOrCreateScript(cx));
+ RootedScript sourceScript(cx, JSFunction::getOrCreateScript(cx, sourceFun));
if (!sourceScript)
return false;
diff --git a/js/src/vm/Shape.cpp b/js/src/vm/Shape.cpp
index 306a2c540..8fe2145e5 100644
--- a/js/src/vm/Shape.cpp
+++ b/js/src/vm/Shape.cpp
@@ -460,15 +460,13 @@ NativeObject::getChildProperty(ExclusiveContext* cx,
return shape;
}
-bool
-js::NativeObject::toDictionaryMode(ExclusiveContext* cx)
+/* static */ bool
+js::NativeObject::toDictionaryMode(ExclusiveContext* cx, HandleNativeObject obj)
{
- MOZ_ASSERT(!inDictionaryMode());
- MOZ_ASSERT(cx->isInsideCurrentCompartment(this));
-
- uint32_t span = slotSpan();
+ MOZ_ASSERT(!obj->inDictionaryMode());
+ MOZ_ASSERT(cx->isInsideCurrentCompartment(obj));
- Rooted<NativeObject*> self(cx, this);
+ uint32_t span = obj->slotSpan();
// Clone the shapes into a new dictionary list. Don't update the last
// property of this object until done, otherwise a GC triggered while
@@ -476,7 +474,7 @@ js::NativeObject::toDictionaryMode(ExclusiveContext* cx)
RootedShape root(cx);
RootedShape dictionaryShape(cx);
- RootedShape shape(cx, lastProperty());
+ RootedShape shape(cx, obj->lastProperty());
while (shape) {
MOZ_ASSERT(!shape->inDictionary());
@@ -488,7 +486,7 @@ js::NativeObject::toDictionaryMode(ExclusiveContext* cx)
GCPtrShape* listp = dictionaryShape ? &dictionaryShape->parent : nullptr;
StackShape child(shape);
- dprop->initDictionaryShape(child, self->numFixedSlots(), listp);
+ dprop->initDictionaryShape(child, obj->numFixedSlots(), listp);
if (!dictionaryShape)
root = dprop;
@@ -503,18 +501,18 @@ js::NativeObject::toDictionaryMode(ExclusiveContext* cx)
return false;
}
- if (IsInsideNursery(self) &&
- !cx->asJSContext()->gc.nursery.queueDictionaryModeObjectToSweep(self))
+ if (IsInsideNursery(obj) &&
+ !cx->asJSContext()->gc.nursery.queueDictionaryModeObjectToSweep(obj))
{
ReportOutOfMemory(cx);
return false;
}
MOZ_ASSERT(root->listp == nullptr);
- root->listp = &self->shape_;
- self->shape_ = root;
+ root->listp = &obj->shape_;
+ obj->shape_ = root;
- MOZ_ASSERT(self->inDictionaryMode());
+ MOZ_ASSERT(obj->inDictionaryMode());
root->base()->setSlotSpan(span);
return true;
@@ -534,7 +532,7 @@ NativeObject::addProperty(ExclusiveContext* cx, HandleNativeObject obj, HandleId
return nullptr;
if (!extensible) {
if (cx->isJSContext())
- obj->reportNotExtensible(cx->asJSContext());
+ JSObject::reportNotExtensible(cx->asJSContext(), obj);
return nullptr;
}
@@ -592,7 +590,7 @@ NativeObject::addPropertyInternal(ExclusiveContext* cx,
if (allowDictionary &&
(!stableSlot || ShouldConvertToDictionary(obj)))
{
- if (!obj->toDictionaryMode(cx))
+ if (!toDictionaryMode(cx, obj))
return nullptr;
table = obj->lastProperty()->maybeTable(keep);
entry = &table->search<MaybeAdding::Adding>(id, keep);
@@ -727,7 +725,7 @@ CheckCanChangeAttrs(ExclusiveContext* cx, JSObject* obj, Shape* shape, unsigned*
(*attrsp & (JSPROP_GETTER | JSPROP_SETTER | JSPROP_SHARED)))
{
if (cx->isJSContext())
- obj->reportNotConfigurable(cx->asJSContext(), shape->propid());
+ JSObject::reportNotConfigurable(cx->asJSContext(), shape->propid());
return false;
}
@@ -785,7 +783,7 @@ NativeObject::putProperty(ExclusiveContext* cx, HandleNativeObject obj, HandleId
if (!extensible) {
if (cx->isJSContext())
- obj->reportNotExtensible(cx->asJSContext());
+ JSObject::reportNotExtensible(cx->asJSContext(), obj);
return nullptr;
}
@@ -834,7 +832,7 @@ NativeObject::putProperty(ExclusiveContext* cx, HandleNativeObject obj, HandleId
* addPropertyInternal because a failure under add would lose data.
*/
if (shape != obj->lastProperty() && !obj->inDictionaryMode()) {
- if (!obj->toDictionaryMode(cx))
+ if (!toDictionaryMode(cx, obj))
return nullptr;
ShapeTable* table = obj->lastProperty()->maybeTable(keep);
MOZ_ASSERT(table);
@@ -853,10 +851,11 @@ NativeObject::putProperty(ExclusiveContext* cx, HandleNativeObject obj, HandleId
*/
bool updateLast = (shape == obj->lastProperty());
bool accessorShape = getter || setter || (attrs & (JSPROP_GETTER | JSPROP_SETTER));
- shape = obj->replaceWithNewEquivalentShape(cx, shape, nullptr, accessorShape);
+ shape = NativeObject::replaceWithNewEquivalentShape(cx, obj, shape, nullptr,
+ accessorShape);
if (!shape)
return nullptr;
- if (!updateLast && !obj->generateOwnShape(cx))
+ if (!updateLast && !NativeObject::generateOwnShape(cx, obj))
return nullptr;
/*
@@ -968,16 +967,15 @@ NativeObject::changeProperty(ExclusiveContext* cx, HandleNativeObject obj, Handl
return newShape;
}
-bool
-NativeObject::removeProperty(ExclusiveContext* cx, jsid id_)
+/* static */ bool
+NativeObject::removeProperty(ExclusiveContext* cx, HandleNativeObject obj, jsid id_)
{
RootedId id(cx, id_);
- RootedNativeObject self(cx, this);
AutoKeepShapeTables keep(cx);
ShapeTable::Entry* entry;
RootedShape shape(cx);
- if (!Shape::search(cx, lastProperty(), id, keep, shape.address(), &entry))
+ if (!Shape::search(cx, obj->lastProperty(), id, keep, shape.address(), &entry))
return false;
if (!shape)
@@ -987,10 +985,10 @@ NativeObject::removeProperty(ExclusiveContext* cx, jsid id_)
* If shape is not the last property added, or the last property cannot
* be removed, switch to dictionary mode.
*/
- if (!self->inDictionaryMode() && (shape != self->lastProperty() || !self->canRemoveLastProperty())) {
- if (!self->toDictionaryMode(cx))
+ if (!obj->inDictionaryMode() && (shape != obj->lastProperty() || !obj->canRemoveLastProperty())) {
+ if (!toDictionaryMode(cx, obj))
return false;
- ShapeTable* table = self->lastProperty()->maybeTable(keep);
+ ShapeTable* table = obj->lastProperty()->maybeTable(keep);
MOZ_ASSERT(table);
entry = &table->search<MaybeAdding::NotAdding>(shape->propid(), keep);
shape = entry->shape();
@@ -1004,21 +1002,21 @@ NativeObject::removeProperty(ExclusiveContext* cx, jsid id_)
* the object or table, so the remaining removal is infallible.
*/
RootedShape spare(cx);
- if (self->inDictionaryMode()) {
+ if (obj->inDictionaryMode()) {
/* For simplicity, always allocate an accessor shape for now. */
spare = Allocate<AccessorShape>(cx);
if (!spare)
return false;
new (spare) Shape(shape->base()->unowned(), 0);
- if (shape == self->lastProperty()) {
+ if (shape == obj->lastProperty()) {
/*
* Get an up to date unowned base shape for the new last property
* when removing the dictionary's last property. Information in
* base shapes for non-last properties may be out of sync with the
* object's state.
*/
- RootedShape previous(cx, self->lastProperty()->parent);
- StackBaseShape base(self->lastProperty()->base());
+ RootedShape previous(cx, obj->lastProperty()->parent);
+ StackBaseShape base(obj->lastProperty()->base());
BaseShape* nbase = BaseShape::getUnowned(cx, base);
if (!nbase)
return false;
@@ -1028,7 +1026,7 @@ NativeObject::removeProperty(ExclusiveContext* cx, jsid id_)
/* If shape has a slot, free its slot number. */
if (shape->hasSlot()) {
- self->freeSlot(cx, shape->slot());
+ obj->freeSlot(cx, shape->slot());
if (cx->isJSContext())
++cx->asJSContext()->runtime()->propertyRemovals;
}
@@ -1038,8 +1036,8 @@ NativeObject::removeProperty(ExclusiveContext* cx, jsid id_)
* doubly linked list, hashed by lastProperty()->table. So we can edit the
* list and hash in place.
*/
- if (self->inDictionaryMode()) {
- ShapeTable* table = self->lastProperty()->maybeTable(keep);
+ if (obj->inDictionaryMode()) {
+ ShapeTable* table = obj->lastProperty()->maybeTable(keep);
MOZ_ASSERT(table);
if (entry->hadCollision()) {
@@ -1056,23 +1054,23 @@ NativeObject::removeProperty(ExclusiveContext* cx, jsid id_)
* checks not to alter significantly the complexity of the
* delete in debug builds, see bug 534493.
*/
- Shape* aprop = self->lastProperty();
+ Shape* aprop = obj->lastProperty();
for (int n = 50; --n >= 0 && aprop->parent; aprop = aprop->parent)
- MOZ_ASSERT_IF(aprop != shape, self->contains(cx, aprop));
+ MOZ_ASSERT_IF(aprop != shape, obj->contains(cx, aprop));
#endif
}
{
/* Remove shape from its non-circular doubly linked list. */
- Shape* oldLastProp = self->lastProperty();
- shape->removeFromDictionary(self);
+ Shape* oldLastProp = obj->lastProperty();
+ shape->removeFromDictionary(obj);
/* Hand off table from the old to new last property. */
- oldLastProp->handoffTableTo(self->lastProperty());
+ oldLastProp->handoffTableTo(obj->lastProperty());
}
/* Generate a new shape for the object, infallibly. */
- JS_ALWAYS_TRUE(self->generateOwnShape(cx, spare));
+ JS_ALWAYS_TRUE(NativeObject::generateOwnShape(cx, obj, spare));
/* Consider shrinking table if its load factor is <= .25. */
uint32_t size = table->capacity();
@@ -1085,11 +1083,11 @@ NativeObject::removeProperty(ExclusiveContext* cx, jsid id_)
* lazily make via a later hashify the exact table for the new property
* lineage.
*/
- MOZ_ASSERT(shape == self->lastProperty());
- self->removeLastProperty(cx);
+ MOZ_ASSERT(shape == obj->lastProperty());
+ obj->removeLastProperty(cx);
}
- self->checkShapeConsistency();
+ obj->checkShapeConsistency();
return true;
}
@@ -1133,35 +1131,30 @@ NativeObject::rollbackProperties(ExclusiveContext* cx, HandleNativeObject obj, u
if (slot < slotSpan)
break;
}
- if (!obj->removeProperty(cx, obj->lastProperty()->propid()))
+ if (!NativeObject::removeProperty(cx, obj, obj->lastProperty()->propid()))
return false;
}
return true;
}
-Shape*
-NativeObject::replaceWithNewEquivalentShape(ExclusiveContext* cx, Shape* oldShape, Shape* newShape,
- bool accessorShape)
+/* static */ Shape*
+NativeObject::replaceWithNewEquivalentShape(ExclusiveContext* cx, HandleNativeObject obj,
+ Shape* oldShape, Shape* newShape, bool accessorShape)
{
MOZ_ASSERT(cx->isInsideCurrentZone(oldShape));
- MOZ_ASSERT_IF(oldShape != lastProperty(),
- inDictionaryMode() && lookup(cx, oldShape->propidRef()) == oldShape);
-
- NativeObject* self = this;
+ MOZ_ASSERT_IF(oldShape != obj->lastProperty(),
+ obj->inDictionaryMode() && obj->lookup(cx, oldShape->propidRef()) == oldShape);
- if (!inDictionaryMode()) {
- RootedNativeObject selfRoot(cx, self);
+ if (!obj->inDictionaryMode()) {
RootedShape newRoot(cx, newShape);
- if (!toDictionaryMode(cx))
+ if (!toDictionaryMode(cx, obj))
return nullptr;
- oldShape = selfRoot->lastProperty();
- self = selfRoot;
+ oldShape = obj->lastProperty();
newShape = newRoot;
}
if (!newShape) {
- RootedNativeObject selfRoot(cx, self);
RootedShape oldRoot(cx, oldShape);
newShape = (oldShape->isAccessorShape() || accessorShape)
? Allocate<AccessorShape>(cx)
@@ -1169,12 +1162,11 @@ NativeObject::replaceWithNewEquivalentShape(ExclusiveContext* cx, Shape* oldShap
if (!newShape)
return nullptr;
new (newShape) Shape(oldRoot->base()->unowned(), 0);
- self = selfRoot;
oldShape = oldRoot;
}
AutoCheckCannotGC nogc;
- ShapeTable* table = self->lastProperty()->ensureTableForDictionary(cx, nogc);
+ ShapeTable* table = obj->lastProperty()->ensureTableForDictionary(cx, nogc);
if (!table)
return nullptr;
@@ -1187,12 +1179,12 @@ NativeObject::replaceWithNewEquivalentShape(ExclusiveContext* cx, Shape* oldShap
* enumeration order (see bug 601399).
*/
StackShape nshape(oldShape);
- newShape->initDictionaryShape(nshape, self->numFixedSlots(), oldShape->listp);
+ newShape->initDictionaryShape(nshape, obj->numFixedSlots(), oldShape->listp);
MOZ_ASSERT(newShape->parent == oldShape);
- oldShape->removeFromDictionary(self);
+ oldShape->removeFromDictionary(obj);
- if (newShape == self->lastProperty())
+ if (newShape == obj->lastProperty())
oldShape->handoffTableTo(newShape);
if (entry)
@@ -1200,63 +1192,63 @@ NativeObject::replaceWithNewEquivalentShape(ExclusiveContext* cx, Shape* oldShap
return newShape;
}
-bool
-NativeObject::shadowingShapeChange(ExclusiveContext* cx, const Shape& shape)
+/* static */ bool
+NativeObject::shadowingShapeChange(ExclusiveContext* cx, HandleNativeObject obj, const Shape& shape)
{
- return generateOwnShape(cx);
+ return generateOwnShape(cx, obj);
}
-bool
-JSObject::setFlags(ExclusiveContext* cx, BaseShape::Flag flags, GenerateShape generateShape)
+/* static */ bool
+JSObject::setFlags(ExclusiveContext* cx, HandleObject obj, BaseShape::Flag flags,
+ GenerateShape generateShape)
{
- if (hasAllFlags(flags))
+ if (obj->hasAllFlags(flags))
return true;
- RootedObject self(cx, this);
-
- Shape* existingShape = self->ensureShape(cx);
+ Shape* existingShape = obj->ensureShape(cx);
if (!existingShape)
return false;
- if (isNative() && as<NativeObject>().inDictionaryMode()) {
- if (generateShape == GENERATE_SHAPE && !as<NativeObject>().generateOwnShape(cx))
- return false;
- StackBaseShape base(self->as<NativeObject>().lastProperty());
+ if (obj->isNative() && obj->as<NativeObject>().inDictionaryMode()) {
+ if (generateShape == GENERATE_SHAPE) {
+ if (!NativeObject::generateOwnShape(cx, obj.as<NativeObject>()))
+ return false;
+ }
+ StackBaseShape base(obj->as<NativeObject>().lastProperty());
base.flags |= flags;
UnownedBaseShape* nbase = BaseShape::getUnowned(cx, base);
if (!nbase)
return false;
- self->as<NativeObject>().lastProperty()->base()->adoptUnowned(nbase);
+ obj->as<NativeObject>().lastProperty()->base()->adoptUnowned(nbase);
return true;
}
- Shape* newShape = Shape::setObjectFlags(cx, flags, self->taggedProto(), existingShape);
+ Shape* newShape = Shape::setObjectFlags(cx, flags, obj->taggedProto(), existingShape);
if (!newShape)
return false;
- // The success of the |JSObject::ensureShape| call above means that |self|
+ // The success of the |JSObject::ensureShape| call above means that |obj|
// can be assumed to have a shape.
- self->as<ShapedObject>().setShape(newShape);
+ obj->as<ShapedObject>().setShape(newShape);
return true;
}
-bool
-NativeObject::clearFlag(ExclusiveContext* cx, BaseShape::Flag flag)
+/* static */ bool
+NativeObject::clearFlag(ExclusiveContext* cx, HandleNativeObject obj, BaseShape::Flag flag)
{
- MOZ_ASSERT(inDictionaryMode());
+ MOZ_ASSERT(obj->inDictionaryMode());
- RootedNativeObject self(cx, &as<NativeObject>());
- MOZ_ASSERT(self->lastProperty()->getObjectFlags() & flag);
+ MOZ_ASSERT(obj->lastProperty()->getObjectFlags() & flag);
- StackBaseShape base(self->lastProperty());
+ StackBaseShape base(obj->lastProperty());
base.flags &= ~flag;
UnownedBaseShape* nbase = BaseShape::getUnowned(cx, base);
if (!nbase)
return false;
- self->lastProperty()->base()->adoptUnowned(nbase);
+ obj->lastProperty()->base()->adoptUnowned(nbase);
return true;
}
diff --git a/js/src/vm/Shape.h b/js/src/vm/Shape.h
index 978798aaa..fd6d843e0 100644
--- a/js/src/vm/Shape.h
+++ b/js/src/vm/Shape.h
@@ -905,9 +905,6 @@ class Shape : public gc::TenuredCell
setter() == rawSetter;
}
- bool set(JSContext* cx, HandleNativeObject obj, HandleObject receiver, MutableHandleValue vp,
- ObjectOpResult& result);
-
BaseShape* base() const { return base_.get(); }
bool hasSlot() const {
diff --git a/js/src/vm/SharedArrayObject.cpp b/js/src/vm/SharedArrayObject.cpp
index c69306aac..0dff41201 100644
--- a/js/src/vm/SharedArrayObject.cpp
+++ b/js/src/vm/SharedArrayObject.cpp
@@ -366,7 +366,8 @@ static const Class SharedArrayBufferObjectProtoClass = {
static JSObject*
CreateSharedArrayBufferPrototype(JSContext* cx, JSProtoKey key)
{
- return cx->global()->createBlankPrototype(cx, &SharedArrayBufferObjectProtoClass);
+ return GlobalObject::createBlankPrototype(cx, cx->global(),
+ &SharedArrayBufferObjectProtoClass);
}
static const ClassOps SharedArrayBufferObjectClassOps = {
diff --git a/js/src/vm/Stack-inl.h b/js/src/vm/Stack-inl.h
index a51c0aa14..11a19d175 100644
--- a/js/src/vm/Stack-inl.h
+++ b/js/src/vm/Stack-inl.h
@@ -306,7 +306,7 @@ InterpreterStack::pushInlineFrame(JSContext* cx, InterpreterRegs& regs, const Ca
MOZ_ASSERT(regs.sp == args.end());
MOZ_ASSERT(callee->nonLazyScript() == script);
- script->ensureNonLazyCanonicalFunction(cx);
+ script->ensureNonLazyCanonicalFunction();
InterpreterFrame* prev = regs.fp();
jsbytecode* prevpc = regs.pc;
@@ -336,13 +336,13 @@ InterpreterStack::resumeGeneratorCallFrame(JSContext* cx, InterpreterRegs& regs,
HandleObject envChain)
{
MOZ_ASSERT(callee->isGenerator());
- RootedScript script(cx, callee->getOrCreateScript(cx));
+ RootedScript script(cx, JSFunction::getOrCreateScript(cx, callee));
InterpreterFrame* prev = regs.fp();
jsbytecode* prevpc = regs.pc;
Value* prevsp = regs.sp;
MOZ_ASSERT(prev);
- script->ensureNonLazyCanonicalFunction(cx);
+ script->ensureNonLazyCanonicalFunction();
LifoAlloc::Mark mark = allocator_.mark();
diff --git a/js/src/vm/Stack.cpp b/js/src/vm/Stack.cpp
index 87e95c893..c5f2cf5f3 100644
--- a/js/src/vm/Stack.cpp
+++ b/js/src/vm/Stack.cpp
@@ -82,7 +82,7 @@ InterpreterFrame::isNonGlobalEvalFrame() const
return isEvalFrame() && script()->bodyScope()->as<EvalScope>().isNonGlobal();
}
-JSObject*
+ArrayObject*
InterpreterFrame::createRestParameter(JSContext* cx)
{
MOZ_ASSERT(script()->hasRest());
diff --git a/js/src/vm/Stack.h b/js/src/vm/Stack.h
index 552738d89..23e621344 100644
--- a/js/src/vm/Stack.h
+++ b/js/src/vm/Stack.h
@@ -523,7 +523,7 @@ class InterpreterFrame
ArgumentsObject& argsObj() const;
void initArgsObj(ArgumentsObject& argsobj);
- JSObject* createRestParameter(JSContext* cx);
+ ArrayObject* createRestParameter(JSContext* cx);
/*
* Environment chain
@@ -1006,6 +1006,17 @@ class InvokeArgs : public detail::GenericArgsBase<NO_CONSTRUCT>
explicit InvokeArgs(JSContext* cx) : Base(cx) {}
};
+/** Function call args of statically-unknown count. */
+class InvokeArgsMaybeIgnoresReturnValue : public detail::GenericArgsBase<NO_CONSTRUCT>
+{
+ using Base = detail::GenericArgsBase<NO_CONSTRUCT>;
+
+ public:
+ explicit InvokeArgsMaybeIgnoresReturnValue(JSContext* cx, bool ignoresReturnValue) : Base(cx) {
+ this->ignoresReturnValue_ = ignoresReturnValue;
+ }
+};
+
/** Function call args of statically-known count. */
template <size_t N>
class FixedInvokeArgs : public detail::FixedArgsBase<NO_CONSTRUCT, N>
diff --git a/js/src/vm/StringObject-inl.h b/js/src/vm/StringObject-inl.h
index 5fc1656f6..38191fc7a 100644
--- a/js/src/vm/StringObject-inl.h
+++ b/js/src/vm/StringObject-inl.h
@@ -15,31 +15,29 @@
namespace js {
-inline bool
-StringObject::init(JSContext* cx, HandleString str)
+/* static */ inline bool
+StringObject::init(JSContext* cx, Handle<StringObject*> obj, HandleString str)
{
- MOZ_ASSERT(numFixedSlots() == 2);
+ MOZ_ASSERT(obj->numFixedSlots() == 2);
- Rooted<StringObject*> self(cx, this);
-
- if (!EmptyShape::ensureInitialCustomShape<StringObject>(cx, self))
+ if (!EmptyShape::ensureInitialCustomShape<StringObject>(cx, obj))
return false;
- MOZ_ASSERT(self->lookup(cx, NameToId(cx->names().length))->slot() == LENGTH_SLOT);
+ MOZ_ASSERT(obj->lookup(cx, NameToId(cx->names().length))->slot() == LENGTH_SLOT);
- self->setStringThis(str);
+ obj->setStringThis(str);
return true;
}
-inline StringObject*
+/* static */ inline StringObject*
StringObject::create(JSContext* cx, HandleString str, HandleObject proto, NewObjectKind newKind)
{
JSObject* obj = NewObjectWithClassProto(cx, &class_, proto, newKind);
if (!obj)
return nullptr;
Rooted<StringObject*> strobj(cx, &obj->as<StringObject>());
- if (!strobj->init(cx, str))
+ if (!StringObject::init(cx, strobj, str))
return nullptr;
return strobj;
}
diff --git a/js/src/vm/StringObject.h b/js/src/vm/StringObject.h
index 119e3d9fa..561e0478a 100644
--- a/js/src/vm/StringObject.h
+++ b/js/src/vm/StringObject.h
@@ -56,7 +56,7 @@ class StringObject : public NativeObject
}
private:
- inline bool init(JSContext* cx, HandleString str);
+ static inline bool init(JSContext* cx, Handle<StringObject*> obj, HandleString str);
void setStringThis(JSString* str) {
MOZ_ASSERT(getReservedSlot(PRIMITIVE_VALUE_SLOT).isUndefined());
diff --git a/js/src/vm/TypeInference-inl.h b/js/src/vm/TypeInference-inl.h
index da47fa898..2af252cea 100644
--- a/js/src/vm/TypeInference-inl.h
+++ b/js/src/vm/TypeInference-inl.h
@@ -23,7 +23,6 @@
#include "vm/SharedArrayObject.h"
#include "vm/StringObject.h"
#include "vm/TypedArrayObject.h"
-#include "vm/UnboxedObject.h"
#include "jscntxtinlines.h"
@@ -285,10 +284,6 @@ TypeIdString(jsid id)
*/
struct AutoEnterAnalysis
{
- // For use when initializing an UnboxedLayout. The UniquePtr's destructor
- // must run when GC is not suppressed.
- UniquePtr<UnboxedLayout> unboxedLayoutToCleanUp;
-
// Prevent GC activity in the middle of analysis.
gc::AutoSuppressGC suppressGC;
diff --git a/js/src/vm/TypeInference.cpp b/js/src/vm/TypeInference.cpp
index 9e0342382..7c2c0194e 100644
--- a/js/src/vm/TypeInference.cpp
+++ b/js/src/vm/TypeInference.cpp
@@ -35,7 +35,6 @@
#include "vm/Opcodes.h"
#include "vm/Shape.h"
#include "vm/Time.h"
-#include "vm/UnboxedObject.h"
#include "jsatominlines.h"
#include "jsscriptinlines.h"
@@ -297,9 +296,6 @@ js::ObjectGroupHasProperty(JSContext* cx, ObjectGroup* group, jsid id, const Val
return true;
}
}
- JSObject* obj = &value.toObject();
- if (!obj->hasLazyGroup() && obj->group()->maybeOriginalUnboxedGroup())
- return true;
}
if (!types->hasType(type)) {
@@ -1323,7 +1319,8 @@ js::EnsureTrackPropertyTypes(JSContext* cx, JSObject* obj, jsid id)
AutoEnterAnalysis enter(cx);
if (obj->hasLazyGroup()) {
AutoEnterOOMUnsafeRegion oomUnsafe;
- if (!obj->getGroup(cx)) {
+ RootedObject objRoot(cx, obj);
+ if (!JSObject::getGroup(cx, objRoot)) {
oomUnsafe.crash("Could not allocate ObjectGroup in EnsureTrackPropertyTypes");
return;
}
@@ -1342,9 +1339,12 @@ HeapTypeSetKey::instantiate(JSContext* cx)
{
if (maybeTypes())
return true;
- if (object()->isSingleton() && !object()->singleton()->getGroup(cx)) {
- cx->clearPendingException();
- return false;
+ if (object()->isSingleton()) {
+ RootedObject obj(cx, object()->singleton());
+ if (!JSObject::getGroup(cx, obj)) {
+ cx->clearPendingException();
+ return false;
+ }
}
JSObject* obj = object()->isSingleton() ? object()->singleton() : nullptr;
maybeTypes_ = object()->maybeGroup()->getProperty(cx, obj, id());
@@ -1944,33 +1944,6 @@ class ConstraintDataFreezeObjectForTypedArrayData
}
};
-// Constraint which triggers recompilation if an unboxed object in some group
-// is converted to a native object.
-class ConstraintDataFreezeObjectForUnboxedConvertedToNative
-{
- public:
- ConstraintDataFreezeObjectForUnboxedConvertedToNative()
- {}
-
- const char* kind() { return "freezeObjectForUnboxedConvertedToNative"; }
-
- bool invalidateOnNewType(TypeSet::Type type) { return false; }
- bool invalidateOnNewPropertyState(TypeSet* property) { return false; }
- bool invalidateOnNewObjectState(ObjectGroup* group) {
- return group->unboxedLayout().nativeGroup() != nullptr;
- }
-
- bool constraintHolds(JSContext* cx,
- const HeapTypeSetKey& property, TemporaryTypeSet* expected)
- {
- return !invalidateOnNewObjectState(property.object()->maybeGroup());
- }
-
- bool shouldSweep() { return false; }
-
- JSCompartment* maybeCompartment() { return nullptr; }
-};
-
} /* anonymous namespace */
void
@@ -2505,8 +2478,6 @@ TemporaryTypeSet::propertyNeedsBarrier(CompilerConstraintList* constraints, jsid
bool
js::ClassCanHaveExtraProperties(const Class* clasp)
{
- if (clasp == &UnboxedPlainObject::class_ || clasp == &UnboxedArrayObject::class_)
- return false;
return clasp->getResolve()
|| clasp->getOpsLookupProperty()
|| clasp->getOpsGetProperty()
@@ -2805,15 +2776,6 @@ js::AddTypePropertyId(ExclusiveContext* cx, ObjectGroup* group, JSObject* obj, j
// from acquiring the fully initialized group.
if (group->newScript() && group->newScript()->initializedGroup())
AddTypePropertyId(cx, group->newScript()->initializedGroup(), nullptr, id, type);
-
- // Maintain equivalent type information for unboxed object groups and their
- // corresponding native group. Since type sets might contain the unboxed
- // group but not the native group, this ensures optimizations based on the
- // unboxed group are valid for the native group.
- if (group->maybeUnboxedLayout() && group->maybeUnboxedLayout()->nativeGroup())
- AddTypePropertyId(cx, group->maybeUnboxedLayout()->nativeGroup(), nullptr, id, type);
- if (ObjectGroup* unboxedGroup = group->maybeOriginalUnboxedGroup())
- AddTypePropertyId(cx, unboxedGroup, nullptr, id, type);
}
void
@@ -2885,12 +2847,6 @@ ObjectGroup::setFlags(ExclusiveContext* cx, ObjectGroupFlags flags)
// acquired properties analysis.
if (newScript() && newScript()->initializedGroup())
newScript()->initializedGroup()->setFlags(cx, flags);
-
- // Propagate flag changes between unboxed and corresponding native groups.
- if (maybeUnboxedLayout() && maybeUnboxedLayout()->nativeGroup())
- maybeUnboxedLayout()->nativeGroup()->setFlags(cx, flags);
- if (ObjectGroup* unboxedGroup = maybeOriginalUnboxedGroup())
- unboxedGroup->setFlags(cx, flags);
}
void
@@ -2923,23 +2879,6 @@ ObjectGroup::markUnknown(ExclusiveContext* cx)
prop->types.setNonDataProperty(cx);
}
}
-
- if (ObjectGroup* unboxedGroup = maybeOriginalUnboxedGroup())
- MarkObjectGroupUnknownProperties(cx, unboxedGroup);
- if (maybeUnboxedLayout() && maybeUnboxedLayout()->nativeGroup())
- MarkObjectGroupUnknownProperties(cx, maybeUnboxedLayout()->nativeGroup());
- if (ObjectGroup* unboxedGroup = maybeOriginalUnboxedGroup())
- MarkObjectGroupUnknownProperties(cx, unboxedGroup);
-}
-
-TypeNewScript*
-ObjectGroup::anyNewScript()
-{
- if (newScript())
- return newScript();
- if (maybeUnboxedLayout())
- return unboxedLayout().newScript();
- return nullptr;
}
void
@@ -2949,7 +2888,7 @@ ObjectGroup::detachNewScript(bool writeBarrier, ObjectGroup* replacement)
// analyzed, remove it from the newObjectGroups table so that it will not be
// produced by calling 'new' on the associated function anymore.
// The TypeNewScript is not actually destroyed.
- TypeNewScript* newScript = anyNewScript();
+ TypeNewScript* newScript = this->newScript();
MOZ_ASSERT(newScript);
if (newScript->analyzed()) {
@@ -2968,10 +2907,7 @@ ObjectGroup::detachNewScript(bool writeBarrier, ObjectGroup* replacement)
MOZ_ASSERT(!replacement);
}
- if (this->newScript())
- setAddendum(Addendum_None, nullptr, writeBarrier);
- else
- unboxedLayout().setNewScript(nullptr, writeBarrier);
+ setAddendum(Addendum_None, nullptr, writeBarrier);
}
void
@@ -2982,7 +2918,7 @@ ObjectGroup::maybeClearNewScriptOnOOM()
if (!isMarked())
return;
- TypeNewScript* newScript = anyNewScript();
+ TypeNewScript* newScript = this->newScript();
if (!newScript)
return;
@@ -2997,7 +2933,7 @@ ObjectGroup::maybeClearNewScriptOnOOM()
void
ObjectGroup::clearNewScript(ExclusiveContext* cx, ObjectGroup* replacement /* = nullptr*/)
{
- TypeNewScript* newScript = anyNewScript();
+ TypeNewScript* newScript = this->newScript();
if (!newScript)
return;
@@ -3009,7 +2945,8 @@ ObjectGroup::clearNewScript(ExclusiveContext* cx, ObjectGroup* replacement /* =
// Mark the constructing function as having its 'new' script cleared, so we
// will not try to construct another one later.
- if (!newScript->function()->setNewScriptCleared(cx))
+ RootedFunction fun(cx, newScript->function());
+ if (!JSObject::setNewScriptCleared(cx, fun))
cx->recoverFromOutOfMemory();
}
@@ -3156,7 +3093,7 @@ js::AddClearDefiniteGetterSetterForPrototypeChain(JSContext* cx, ObjectGroup* gr
*/
RootedObject proto(cx, group->proto().toObjectOrNull());
while (proto) {
- ObjectGroup* protoGroup = proto->getGroup(cx);
+ ObjectGroup* protoGroup = JSObject::getGroup(cx, proto);
if (!protoGroup) {
cx->recoverFromOutOfMemory();
return false;
@@ -3393,7 +3330,7 @@ JSFunction::setTypeForScriptedFunction(ExclusiveContext* cx, HandleFunction fun,
/////////////////////////////////////////////////////////////////////
void
-PreliminaryObjectArray::registerNewObject(JSObject* res)
+PreliminaryObjectArray::registerNewObject(PlainObject* res)
{
// The preliminary object pointers are weak, and won't be swept properly
// during nursery collections, so the preliminary objects need to be
@@ -3411,7 +3348,7 @@ PreliminaryObjectArray::registerNewObject(JSObject* res)
}
void
-PreliminaryObjectArray::unregisterObject(JSObject* obj)
+PreliminaryObjectArray::unregisterObject(PlainObject* obj)
{
for (size_t i = 0; i < COUNT; i++) {
if (objects[i] == obj) {
@@ -3451,22 +3388,6 @@ PreliminaryObjectArray::sweep()
for (size_t i = 0; i < COUNT; i++) {
JSObject** ptr = &objects[i];
if (*ptr && IsAboutToBeFinalizedUnbarriered(ptr)) {
- // Before we clear this reference, change the object's group to the
- // Object.prototype group. This is done to ensure JSObject::finalize
- // sees a NativeObject Class even if we change the current group's
- // Class to one of the unboxed object classes in the meantime. If
- // the compartment's global is dead, we don't do anything as the
- // group's Class is not going to change in that case.
- JSObject* obj = *ptr;
- GlobalObject* global = obj->compartment()->unsafeUnbarrieredMaybeGlobal();
- if (global && !obj->isSingleton()) {
- JSObject* objectProto = GetBuiltinPrototypePure(global, JSProto_Object);
- obj->setGroup(objectProto->groupRaw());
- MOZ_ASSERT(obj->is<NativeObject>());
- MOZ_ASSERT(obj->getClass() == objectProto->getClass());
- MOZ_ASSERT(!obj->getClass()->hasFinalize());
- }
-
*ptr = nullptr;
}
}
@@ -3566,16 +3487,11 @@ PreliminaryObjectArrayWithTemplate::maybeAnalyze(ExclusiveContext* cx, ObjectGro
}
}
- if (group->maybeUnboxedLayout())
- return;
-
- if (shape()) {
- // We weren't able to use an unboxed layout, but since the preliminary
- // objects still reflect the template object's properties, and all
- // objects in the future will be created with those properties, the
- // properties can be marked as definite for objects in the group.
- group->addDefiniteProperties(cx, shape());
- }
+ // Since the preliminary objects still reflect the template object's
+ // properties, and all objects in the future will be created with those
+ // properties, the properties can be marked as definitive for objects in
+ // the group.
+ group->addDefiniteProperties(cx, shape());
}
/////////////////////////////////////////////////////////////////////
@@ -3589,7 +3505,6 @@ TypeNewScript::make(JSContext* cx, ObjectGroup* group, JSFunction* fun)
{
MOZ_ASSERT(cx->zone()->types.activeAnalysis);
MOZ_ASSERT(!group->newScript());
- MOZ_ASSERT(!group->maybeUnboxedLayout());
// rollbackPartiallyInitializedObjects expects function_ to be
// canonicalized.
@@ -3802,7 +3717,8 @@ TypeNewScript::maybeAnalyze(JSContext* cx, ObjectGroup* group, bool* regenerate,
Vector<Initializer> initializerVector(cx);
RootedPlainObject templateRoot(cx, templateObject());
- if (!jit::AnalyzeNewScriptDefiniteProperties(cx, function(), group, templateRoot, &initializerVector))
+ RootedFunction fun(cx, function());
+ if (!jit::AnalyzeNewScriptDefiniteProperties(cx, fun, group, templateRoot, &initializerVector))
return false;
if (!group->newScript())
@@ -3852,27 +3768,6 @@ TypeNewScript::maybeAnalyze(JSContext* cx, ObjectGroup* group, bool* regenerate,
js_delete(preliminaryObjects);
preliminaryObjects = nullptr;
- if (group->maybeUnboxedLayout()) {
- // An unboxed layout was constructed for the group, and this has already
- // been hooked into it.
- MOZ_ASSERT(group->unboxedLayout().newScript() == this);
- destroyNewScript.group = nullptr;
-
- // Clear out the template object, which is not used for TypeNewScripts
- // with an unboxed layout. Currently it is a mutant object with a
- // non-native group and native shape, so make it safe for GC by changing
- // its group to the default for its prototype.
- AutoEnterOOMUnsafeRegion oomUnsafe;
- ObjectGroup* plainGroup = ObjectGroup::defaultNewGroup(cx, &PlainObject::class_,
- group->proto());
- if (!plainGroup)
- oomUnsafe.crash("TypeNewScript::maybeAnalyze");
- templateObject_->setGroup(plainGroup);
- templateObject_ = nullptr;
-
- return true;
- }
-
if (prefixShape->slotSpan() == templateObject()->slotSpan()) {
// The definite properties analysis found exactly the properties that
// are held in common by the preliminary objects. No further analysis
@@ -3968,12 +3863,6 @@ TypeNewScript::rollbackPartiallyInitializedObjects(JSContext* cx, ObjectGroup* g
continue;
}
- if (thisv.toObject().is<UnboxedPlainObject>()) {
- AutoEnterOOMUnsafeRegion oomUnsafe;
- if (!UnboxedPlainObject::convertToNative(cx, &thisv.toObject()))
- oomUnsafe.crash("rollbackPartiallyInitializedObjects");
- }
-
// Found a matching frame.
RootedPlainObject obj(cx, &thisv.toObject().as<PlainObject>());
@@ -4167,12 +4056,6 @@ ConstraintTypeSet::sweep(Zone* zone, AutoClearTypeInferenceStateOnOOM& oom)
// Object sets containing objects with unknown properties might
// not be complete. Mark the type set as unknown, which it will
// be treated as during Ion compilation.
- //
- // Note that we don't have to do this when the type set might
- // be missing the native group corresponding to an unboxed
- // object group. In this case, the native group points to the
- // unboxed object group via its addendum, so as long as objects
- // with either group exist, neither group will be finalized.
flags |= TYPE_FLAG_ANYOBJECT;
clearObjects();
objectCount = 0;
@@ -4256,21 +4139,6 @@ ObjectGroup::sweep(AutoClearTypeInferenceStateOnOOM* oom)
Maybe<AutoClearTypeInferenceStateOnOOM> fallbackOOM;
EnsureHasAutoClearTypeInferenceStateOnOOM(oom, zone(), fallbackOOM);
- if (maybeUnboxedLayout()) {
- // Remove unboxed layouts that are about to be finalized from the
- // compartment wide list while we are still on the main thread.
- ObjectGroup* group = this;
- if (IsAboutToBeFinalizedUnbarriered(&group))
- unboxedLayout().detachFromCompartment();
-
- if (unboxedLayout().newScript())
- unboxedLayout().newScript()->sweep();
-
- // Discard constructor code to avoid holding onto ExecutablePools.
- if (zone()->isGCCompacting())
- unboxedLayout().setConstructorCode(nullptr);
- }
-
if (maybePreliminaryObjects())
maybePreliminaryObjects()->sweep();
diff --git a/js/src/vm/TypeInference.h b/js/src/vm/TypeInference.h
index 04fed448c..94ce7e871 100644
--- a/js/src/vm/TypeInference.h
+++ b/js/src/vm/TypeInference.h
@@ -814,8 +814,8 @@ class PreliminaryObjectArray
public:
PreliminaryObjectArray() = default;
- void registerNewObject(JSObject* res);
- void unregisterObject(JSObject* obj);
+ void registerNewObject(PlainObject* res);
+ void unregisterObject(PlainObject* obj);
JSObject* get(size_t i) const {
MOZ_ASSERT(i < COUNT);
diff --git a/js/src/vm/TypedArrayObject.cpp b/js/src/vm/TypedArrayObject.cpp
index ae97be0de..8b0302917 100644
--- a/js/src/vm/TypedArrayObject.cpp
+++ b/js/src/vm/TypedArrayObject.cpp
@@ -361,7 +361,7 @@ class TypedArrayObjectTemplate : public TypedArrayObject
return nullptr;
const Class* clasp = TypedArrayObject::protoClassForType(ArrayTypeID());
- return global->createBlankPrototypeInheriting(cx, clasp, typedArrayProto);
+ return GlobalObject::createBlankPrototypeInheriting(cx, global, clasp, typedArrayProto);
}
static JSObject*
@@ -1892,7 +1892,7 @@ DataViewObject::constructWrapped(JSContext* cx, HandleObject bufobj, const CallA
Rooted<GlobalObject*> global(cx, cx->compartment()->maybeGlobal());
if (!proto) {
- proto = global->getOrCreateDataViewPrototype(cx);
+ proto = GlobalObject::getOrCreateDataViewPrototype(cx, global);
if (!proto)
return false;
}
@@ -2892,12 +2892,13 @@ DataViewObject::initClass(JSContext* cx)
if (global->isStandardClassResolved(JSProto_DataView))
return true;
- RootedNativeObject proto(cx, global->createBlankPrototype(cx, &DataViewObject::protoClass));
+ RootedNativeObject proto(cx, GlobalObject::createBlankPrototype(cx, global,
+ &DataViewObject::protoClass));
if (!proto)
return false;
- RootedFunction ctor(cx, global->createConstructor(cx, DataViewObject::class_constructor,
- cx->names().DataView, 3));
+ RootedFunction ctor(cx, GlobalObject::createConstructor(cx, DataViewObject::class_constructor,
+ cx->names().DataView, 3));
if (!ctor)
return false;
diff --git a/js/src/vm/UnboxedObject-inl.h b/js/src/vm/UnboxedObject-inl.h
deleted file mode 100644
index 93ad7bf28..000000000
--- a/js/src/vm/UnboxedObject-inl.h
+++ /dev/null
@@ -1,840 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- * vim: set ts=8 sts=4 et sw=4 tw=99:
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef vm_UnboxedObject_inl_h
-#define vm_UnboxedObject_inl_h
-
-#include "vm/UnboxedObject.h"
-
-#include "gc/StoreBuffer-inl.h"
-#include "vm/ArrayObject-inl.h"
-#include "vm/NativeObject-inl.h"
-
-namespace js {
-
-static inline Value
-GetUnboxedValue(uint8_t* p, JSValueType type, bool maybeUninitialized)
-{
- switch (type) {
- case JSVAL_TYPE_BOOLEAN:
- return BooleanValue(*p != 0);
-
- case JSVAL_TYPE_INT32:
- return Int32Value(*reinterpret_cast<int32_t*>(p));
-
- case JSVAL_TYPE_DOUBLE: {
- // During unboxed plain object creation, non-GC thing properties are
- // left uninitialized. This is normally fine, since the properties will
- // be filled in shortly, but if they are read before that happens we
- // need to make sure that doubles are canonical.
- double d = *reinterpret_cast<double*>(p);
- if (maybeUninitialized)
- return DoubleValue(JS::CanonicalizeNaN(d));
- return DoubleValue(d);
- }
-
- case JSVAL_TYPE_STRING:
- return StringValue(*reinterpret_cast<JSString**>(p));
-
- case JSVAL_TYPE_OBJECT:
- return ObjectOrNullValue(*reinterpret_cast<JSObject**>(p));
-
- default:
- MOZ_CRASH("Invalid type for unboxed value");
- }
-}
-
-static inline void
-SetUnboxedValueNoTypeChange(JSObject* unboxedObject,
- uint8_t* p, JSValueType type, const Value& v,
- bool preBarrier)
-{
- switch (type) {
- case JSVAL_TYPE_BOOLEAN:
- *p = v.toBoolean();
- return;
-
- case JSVAL_TYPE_INT32:
- *reinterpret_cast<int32_t*>(p) = v.toInt32();
- return;
-
- case JSVAL_TYPE_DOUBLE:
- *reinterpret_cast<double*>(p) = v.toNumber();
- return;
-
- case JSVAL_TYPE_STRING: {
- MOZ_ASSERT(!IsInsideNursery(v.toString()));
- JSString** np = reinterpret_cast<JSString**>(p);
- if (preBarrier)
- JSString::writeBarrierPre(*np);
- *np = v.toString();
- return;
- }
-
- case JSVAL_TYPE_OBJECT: {
- JSObject** np = reinterpret_cast<JSObject**>(p);
-
- // Manually trigger post barriers on the whole object. If we treat
- // the pointer as a HeapPtrObject we will get confused later if the
- // object is converted to its native representation.
- JSObject* obj = v.toObjectOrNull();
- if (IsInsideNursery(obj) && !IsInsideNursery(unboxedObject)) {
- JSRuntime* rt = unboxedObject->runtimeFromMainThread();
- rt->gc.storeBuffer.putWholeCell(unboxedObject);
- }
-
- if (preBarrier)
- JSObject::writeBarrierPre(*np);
- *np = obj;
- return;
- }
-
- default:
- MOZ_CRASH("Invalid type for unboxed value");
- }
-}
-
-static inline bool
-SetUnboxedValue(ExclusiveContext* cx, JSObject* unboxedObject, jsid id,
- uint8_t* p, JSValueType type, const Value& v, bool preBarrier)
-{
- switch (type) {
- case JSVAL_TYPE_BOOLEAN:
- if (v.isBoolean()) {
- *p = v.toBoolean();
- return true;
- }
- return false;
-
- case JSVAL_TYPE_INT32:
- if (v.isInt32()) {
- *reinterpret_cast<int32_t*>(p) = v.toInt32();
- return true;
- }
- return false;
-
- case JSVAL_TYPE_DOUBLE:
- if (v.isNumber()) {
- *reinterpret_cast<double*>(p) = v.toNumber();
- return true;
- }
- return false;
-
- case JSVAL_TYPE_STRING:
- if (v.isString()) {
- MOZ_ASSERT(!IsInsideNursery(v.toString()));
- JSString** np = reinterpret_cast<JSString**>(p);
- if (preBarrier)
- JSString::writeBarrierPre(*np);
- *np = v.toString();
- return true;
- }
- return false;
-
- case JSVAL_TYPE_OBJECT:
- if (v.isObjectOrNull()) {
- JSObject** np = reinterpret_cast<JSObject**>(p);
-
- // Update property types when writing object properties. Types for
- // other properties were captured when the unboxed layout was
- // created.
- AddTypePropertyId(cx, unboxedObject, id, v);
-
- // As above, trigger post barriers on the whole object.
- JSObject* obj = v.toObjectOrNull();
- if (IsInsideNursery(v.toObjectOrNull()) && !IsInsideNursery(unboxedObject)) {
- JSRuntime* rt = unboxedObject->runtimeFromMainThread();
- rt->gc.storeBuffer.putWholeCell(unboxedObject);
- }
-
- if (preBarrier)
- JSObject::writeBarrierPre(*np);
- *np = obj;
- return true;
- }
- return false;
-
- default:
- MOZ_CRASH("Invalid type for unboxed value");
- }
-}
-
-/////////////////////////////////////////////////////////////////////
-// UnboxedPlainObject
-/////////////////////////////////////////////////////////////////////
-
-inline const UnboxedLayout&
-UnboxedPlainObject::layout() const
-{
- return group()->unboxedLayout();
-}
-
-/////////////////////////////////////////////////////////////////////
-// UnboxedArrayObject
-/////////////////////////////////////////////////////////////////////
-
-inline const UnboxedLayout&
-UnboxedArrayObject::layout() const
-{
- return group()->unboxedLayout();
-}
-
-inline void
-UnboxedArrayObject::setLength(ExclusiveContext* cx, uint32_t length)
-{
- if (length > INT32_MAX) {
- // Track objects with overflowing lengths in type information.
- MarkObjectGroupFlags(cx, this, OBJECT_FLAG_LENGTH_OVERFLOW);
- }
-
- length_ = length;
-}
-
-inline void
-UnboxedArrayObject::setInitializedLength(uint32_t initlen)
-{
- if (initlen < initializedLength()) {
- switch (elementType()) {
- case JSVAL_TYPE_STRING:
- for (size_t i = initlen; i < initializedLength(); i++)
- triggerPreBarrier<JSVAL_TYPE_STRING>(i);
- break;
- case JSVAL_TYPE_OBJECT:
- for (size_t i = initlen; i < initializedLength(); i++)
- triggerPreBarrier<JSVAL_TYPE_OBJECT>(i);
- break;
- default:
- MOZ_ASSERT(!UnboxedTypeNeedsPreBarrier(elementType()));
- }
- }
- setInitializedLengthNoBarrier(initlen);
-}
-
-template <JSValueType Type>
-inline bool
-UnboxedArrayObject::setElementSpecific(ExclusiveContext* cx, size_t index, const Value& v)
-{
- MOZ_ASSERT(index < initializedLength());
- MOZ_ASSERT(Type == elementType());
- uint8_t* p = elements() + index * UnboxedTypeSize(Type);
- return SetUnboxedValue(cx, this, JSID_VOID, p, elementType(), v, /* preBarrier = */ true);
-}
-
-template <JSValueType Type>
-inline void
-UnboxedArrayObject::setElementNoTypeChangeSpecific(size_t index, const Value& v)
-{
- MOZ_ASSERT(index < initializedLength());
- MOZ_ASSERT(Type == elementType());
- uint8_t* p = elements() + index * UnboxedTypeSize(Type);
- return SetUnboxedValueNoTypeChange(this, p, elementType(), v, /* preBarrier = */ true);
-}
-
-template <JSValueType Type>
-inline bool
-UnboxedArrayObject::initElementSpecific(ExclusiveContext* cx, size_t index, const Value& v)
-{
- MOZ_ASSERT(index < initializedLength());
- MOZ_ASSERT(Type == elementType());
- uint8_t* p = elements() + index * UnboxedTypeSize(Type);
- return SetUnboxedValue(cx, this, JSID_VOID, p, elementType(), v, /* preBarrier = */ false);
-}
-
-template <JSValueType Type>
-inline void
-UnboxedArrayObject::initElementNoTypeChangeSpecific(size_t index, const Value& v)
-{
- MOZ_ASSERT(index < initializedLength());
- MOZ_ASSERT(Type == elementType());
- uint8_t* p = elements() + index * UnboxedTypeSize(Type);
- return SetUnboxedValueNoTypeChange(this, p, elementType(), v, /* preBarrier = */ false);
-}
-
-template <JSValueType Type>
-inline Value
-UnboxedArrayObject::getElementSpecific(size_t index)
-{
- MOZ_ASSERT(index < initializedLength());
- MOZ_ASSERT(Type == elementType());
- uint8_t* p = elements() + index * UnboxedTypeSize(Type);
- return GetUnboxedValue(p, Type, /* maybeUninitialized = */ false);
-}
-
-template <JSValueType Type>
-inline void
-UnboxedArrayObject::triggerPreBarrier(size_t index)
-{
- MOZ_ASSERT(UnboxedTypeNeedsPreBarrier(Type));
-
- uint8_t* p = elements() + index * UnboxedTypeSize(Type);
-
- switch (Type) {
- case JSVAL_TYPE_STRING: {
- JSString** np = reinterpret_cast<JSString**>(p);
- JSString::writeBarrierPre(*np);
- break;
- }
-
- case JSVAL_TYPE_OBJECT: {
- JSObject** np = reinterpret_cast<JSObject**>(p);
- JSObject::writeBarrierPre(*np);
- break;
- }
-
- default:
- MOZ_CRASH("Bad type");
- }
-}
-
-/////////////////////////////////////////////////////////////////////
-// Combined methods for NativeObject and UnboxedArrayObject accesses.
-/////////////////////////////////////////////////////////////////////
-
-static inline bool
-HasAnyBoxedOrUnboxedDenseElements(JSObject* obj)
-{
- return obj->isNative() || obj->is<UnboxedArrayObject>();
-}
-
-static inline size_t
-GetAnyBoxedOrUnboxedInitializedLength(JSObject* obj)
-{
- if (obj->isNative())
- return obj->as<NativeObject>().getDenseInitializedLength();
- if (obj->is<UnboxedArrayObject>())
- return obj->as<UnboxedArrayObject>().initializedLength();
- return 0;
-}
-
-static inline size_t
-GetAnyBoxedOrUnboxedCapacity(JSObject* obj)
-{
- if (obj->isNative())
- return obj->as<NativeObject>().getDenseCapacity();
- if (obj->is<UnboxedArrayObject>())
- return obj->as<UnboxedArrayObject>().capacity();
- return 0;
-}
-
-static inline Value
-GetAnyBoxedOrUnboxedDenseElement(JSObject* obj, size_t index)
-{
- if (obj->isNative())
- return obj->as<NativeObject>().getDenseElement(index);
- return obj->as<UnboxedArrayObject>().getElement(index);
-}
-
-static inline size_t
-GetAnyBoxedOrUnboxedArrayLength(JSObject* obj)
-{
- if (obj->is<ArrayObject>())
- return obj->as<ArrayObject>().length();
- return obj->as<UnboxedArrayObject>().length();
-}
-
-static inline void
-SetAnyBoxedOrUnboxedArrayLength(JSContext* cx, JSObject* obj, size_t length)
-{
- if (obj->is<ArrayObject>()) {
- MOZ_ASSERT(length >= obj->as<ArrayObject>().length());
- obj->as<ArrayObject>().setLength(cx, length);
- } else {
- MOZ_ASSERT(length >= obj->as<UnboxedArrayObject>().length());
- obj->as<UnboxedArrayObject>().setLength(cx, length);
- }
-}
-
-static inline bool
-SetAnyBoxedOrUnboxedDenseElement(JSContext* cx, JSObject* obj, size_t index, const Value& value)
-{
- if (obj->isNative()) {
- obj->as<NativeObject>().setDenseElementWithType(cx, index, value);
- return true;
- }
- return obj->as<UnboxedArrayObject>().setElement(cx, index, value);
-}
-
-static inline bool
-InitAnyBoxedOrUnboxedDenseElement(JSContext* cx, JSObject* obj, size_t index, const Value& value)
-{
- if (obj->isNative()) {
- obj->as<NativeObject>().initDenseElementWithType(cx, index, value);
- return true;
- }
- return obj->as<UnboxedArrayObject>().initElement(cx, index, value);
-}
-
-/////////////////////////////////////////////////////////////////////
-// Template methods for NativeObject and UnboxedArrayObject accesses.
-/////////////////////////////////////////////////////////////////////
-
-static inline JSValueType
-GetBoxedOrUnboxedType(JSObject* obj)
-{
- if (obj->isNative())
- return JSVAL_TYPE_MAGIC;
- return obj->as<UnboxedArrayObject>().elementType();
-}
-
-template <JSValueType Type>
-static inline bool
-HasBoxedOrUnboxedDenseElements(JSObject* obj)
-{
- if (Type == JSVAL_TYPE_MAGIC)
- return obj->isNative();
- return obj->is<UnboxedArrayObject>() && obj->as<UnboxedArrayObject>().elementType() == Type;
-}
-
-template <JSValueType Type>
-static inline size_t
-GetBoxedOrUnboxedInitializedLength(JSObject* obj)
-{
- if (Type == JSVAL_TYPE_MAGIC)
- return obj->as<NativeObject>().getDenseInitializedLength();
- return obj->as<UnboxedArrayObject>().initializedLength();
-}
-
-template <JSValueType Type>
-static inline DenseElementResult
-SetBoxedOrUnboxedInitializedLength(JSContext* cx, JSObject* obj, size_t initlen)
-{
- size_t oldInitlen = GetBoxedOrUnboxedInitializedLength<Type>(obj);
- if (Type == JSVAL_TYPE_MAGIC) {
- obj->as<NativeObject>().setDenseInitializedLength(initlen);
- if (initlen < oldInitlen)
- obj->as<NativeObject>().shrinkElements(cx, initlen);
- } else {
- obj->as<UnboxedArrayObject>().setInitializedLength(initlen);
- if (initlen < oldInitlen)
- obj->as<UnboxedArrayObject>().shrinkElements(cx, initlen);
- }
- return DenseElementResult::Success;
-}
-
-template <JSValueType Type>
-static inline size_t
-GetBoxedOrUnboxedCapacity(JSObject* obj)
-{
- if (Type == JSVAL_TYPE_MAGIC)
- return obj->as<NativeObject>().getDenseCapacity();
- return obj->as<UnboxedArrayObject>().capacity();
-}
-
-template <JSValueType Type>
-static inline Value
-GetBoxedOrUnboxedDenseElement(JSObject* obj, size_t index)
-{
- if (Type == JSVAL_TYPE_MAGIC)
- return obj->as<NativeObject>().getDenseElement(index);
- return obj->as<UnboxedArrayObject>().getElementSpecific<Type>(index);
-}
-
-template <JSValueType Type>
-static inline void
-SetBoxedOrUnboxedDenseElementNoTypeChange(JSObject* obj, size_t index, const Value& value)
-{
- if (Type == JSVAL_TYPE_MAGIC)
- obj->as<NativeObject>().setDenseElement(index, value);
- else
- obj->as<UnboxedArrayObject>().setElementNoTypeChangeSpecific<Type>(index, value);
-}
-
-template <JSValueType Type>
-static inline bool
-SetBoxedOrUnboxedDenseElement(JSContext* cx, JSObject* obj, size_t index, const Value& value)
-{
- if (Type == JSVAL_TYPE_MAGIC) {
- obj->as<NativeObject>().setDenseElementWithType(cx, index, value);
- return true;
- }
- return obj->as<UnboxedArrayObject>().setElementSpecific<Type>(cx, index, value);
-}
-
-template <JSValueType Type>
-static inline DenseElementResult
-EnsureBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* obj, size_t count)
-{
- if (Type == JSVAL_TYPE_MAGIC) {
- if (!obj->as<ArrayObject>().ensureElements(cx, count))
- return DenseElementResult::Failure;
- } else {
- if (obj->as<UnboxedArrayObject>().capacity() < count) {
- if (!obj->as<UnboxedArrayObject>().growElements(cx, count))
- return DenseElementResult::Failure;
- }
- }
- return DenseElementResult::Success;
-}
-
-template <JSValueType Type>
-static inline DenseElementResult
-SetOrExtendBoxedOrUnboxedDenseElements(ExclusiveContext* cx, JSObject* obj,
- uint32_t start, const Value* vp, uint32_t count,
- ShouldUpdateTypes updateTypes = ShouldUpdateTypes::Update)
-{
- if (Type == JSVAL_TYPE_MAGIC) {
- NativeObject* nobj = &obj->as<NativeObject>();
-
- if (nobj->denseElementsAreFrozen())
- return DenseElementResult::Incomplete;
-
- if (obj->is<ArrayObject>() &&
- !obj->as<ArrayObject>().lengthIsWritable() &&
- start + count >= obj->as<ArrayObject>().length())
- {
- return DenseElementResult::Incomplete;
- }
-
- DenseElementResult result = nobj->ensureDenseElements(cx, start, count);
- if (result != DenseElementResult::Success)
- return result;
-
- if (obj->is<ArrayObject>() && start + count >= obj->as<ArrayObject>().length())
- obj->as<ArrayObject>().setLengthInt32(start + count);
-
- if (updateTypes == ShouldUpdateTypes::DontUpdate && !nobj->shouldConvertDoubleElements()) {
- nobj->copyDenseElements(start, vp, count);
- } else {
- for (size_t i = 0; i < count; i++)
- nobj->setDenseElementWithType(cx, start + i, vp[i]);
- }
-
- return DenseElementResult::Success;
- }
-
- UnboxedArrayObject* nobj = &obj->as<UnboxedArrayObject>();
-
- if (start > nobj->initializedLength())
- return DenseElementResult::Incomplete;
-
- if (start + count >= UnboxedArrayObject::MaximumCapacity)
- return DenseElementResult::Incomplete;
-
- if (start + count > nobj->capacity() && !nobj->growElements(cx, start + count))
- return DenseElementResult::Failure;
-
- size_t oldInitlen = nobj->initializedLength();
-
- // Overwrite any existing elements covered by the new range. If we fail
- // after this point due to some incompatible type being written to the
- // object's elements, afterwards the contents will be different from when
- // we started. The caller must retry the operation using a generic path,
- // which will overwrite the already-modified elements as well as the ones
- // that were left alone.
- size_t i = 0;
- if (updateTypes == ShouldUpdateTypes::DontUpdate) {
- for (size_t j = start; i < count && j < oldInitlen; i++, j++)
- nobj->setElementNoTypeChangeSpecific<Type>(j, vp[i]);
- } else {
- for (size_t j = start; i < count && j < oldInitlen; i++, j++) {
- if (!nobj->setElementSpecific<Type>(cx, j, vp[i]))
- return DenseElementResult::Incomplete;
- }
- }
-
- if (i != count) {
- obj->as<UnboxedArrayObject>().setInitializedLength(start + count);
- if (updateTypes == ShouldUpdateTypes::DontUpdate) {
- for (; i < count; i++)
- nobj->initElementNoTypeChangeSpecific<Type>(start + i, vp[i]);
- } else {
- for (; i < count; i++) {
- if (!nobj->initElementSpecific<Type>(cx, start + i, vp[i])) {
- nobj->setInitializedLengthNoBarrier(oldInitlen);
- return DenseElementResult::Incomplete;
- }
- }
- }
- }
-
- if (start + count >= nobj->length())
- nobj->setLength(cx, start + count);
-
- return DenseElementResult::Success;
-}
-
-template <JSValueType Type>
-static inline DenseElementResult
-MoveBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* obj, uint32_t dstStart, uint32_t srcStart,
- uint32_t length)
-{
- MOZ_ASSERT(HasBoxedOrUnboxedDenseElements<Type>(obj));
-
- if (Type == JSVAL_TYPE_MAGIC) {
- if (obj->as<NativeObject>().denseElementsAreFrozen())
- return DenseElementResult::Incomplete;
-
- if (!obj->as<NativeObject>().maybeCopyElementsForWrite(cx))
- return DenseElementResult::Failure;
- obj->as<NativeObject>().moveDenseElements(dstStart, srcStart, length);
- } else {
- uint8_t* data = obj->as<UnboxedArrayObject>().elements();
- size_t elementSize = UnboxedTypeSize(Type);
-
- if (UnboxedTypeNeedsPreBarrier(Type) &&
- JS::shadow::Zone::asShadowZone(obj->zone())->needsIncrementalBarrier())
- {
- // Trigger pre barriers on any elements we are overwriting. See
- // NativeObject::moveDenseElements. No post barrier is needed as
- // only whole cell post barriers are used with unboxed objects.
- for (size_t i = 0; i < length; i++)
- obj->as<UnboxedArrayObject>().triggerPreBarrier<Type>(dstStart + i);
- }
-
- memmove(data + dstStart * elementSize,
- data + srcStart * elementSize,
- length * elementSize);
- }
-
- return DenseElementResult::Success;
-}
-
-template <JSValueType DstType, JSValueType SrcType>
-static inline DenseElementResult
-CopyBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* dst, JSObject* src,
- uint32_t dstStart, uint32_t srcStart, uint32_t length)
-{
- MOZ_ASSERT(HasBoxedOrUnboxedDenseElements<SrcType>(src));
- MOZ_ASSERT(HasBoxedOrUnboxedDenseElements<DstType>(dst));
- MOZ_ASSERT(GetBoxedOrUnboxedInitializedLength<DstType>(dst) == dstStart);
- MOZ_ASSERT(GetBoxedOrUnboxedInitializedLength<SrcType>(src) >= srcStart + length);
- MOZ_ASSERT(GetBoxedOrUnboxedCapacity<DstType>(dst) >= dstStart + length);
-
- SetBoxedOrUnboxedInitializedLength<DstType>(cx, dst, dstStart + length);
-
- if (DstType == JSVAL_TYPE_MAGIC) {
- if (SrcType == JSVAL_TYPE_MAGIC) {
- const Value* vp = src->as<NativeObject>().getDenseElements() + srcStart;
- dst->as<NativeObject>().initDenseElements(dstStart, vp, length);
- } else {
- for (size_t i = 0; i < length; i++) {
- Value v = GetBoxedOrUnboxedDenseElement<SrcType>(src, srcStart + i);
- dst->as<NativeObject>().initDenseElement(dstStart + i, v);
- }
- }
- } else if (DstType == SrcType) {
- uint8_t* dstData = dst->as<UnboxedArrayObject>().elements();
- uint8_t* srcData = src->as<UnboxedArrayObject>().elements();
- size_t elementSize = UnboxedTypeSize(DstType);
-
- memcpy(dstData + dstStart * elementSize,
- srcData + srcStart * elementSize,
- length * elementSize);
-
- // Add a store buffer entry if we might have copied a nursery pointer to dst.
- if (UnboxedTypeNeedsPostBarrier(DstType) && !IsInsideNursery(dst))
- dst->runtimeFromMainThread()->gc.storeBuffer.putWholeCell(dst);
- } else if (DstType == JSVAL_TYPE_DOUBLE && SrcType == JSVAL_TYPE_INT32) {
- uint8_t* dstData = dst->as<UnboxedArrayObject>().elements();
- uint8_t* srcData = src->as<UnboxedArrayObject>().elements();
-
- for (size_t i = 0; i < length; i++) {
- int32_t v = *reinterpret_cast<int32_t*>(srcData + (srcStart + i) * sizeof(int32_t));
- *reinterpret_cast<double*>(dstData + (dstStart + i) * sizeof(double)) = v;
- }
- } else {
- for (size_t i = 0; i < length; i++) {
- Value v = GetBoxedOrUnboxedDenseElement<SrcType>(src, srcStart + i);
- dst->as<UnboxedArrayObject>().initElementNoTypeChangeSpecific<DstType>(dstStart + i, v);
- }
- }
-
- return DenseElementResult::Success;
-}
-
-/////////////////////////////////////////////////////////////////////
-// Dispatch to specialized methods based on the type of an object.
-/////////////////////////////////////////////////////////////////////
-
-// Goop to fix MSVC. See DispatchTraceKindTyped in TraceKind.h.
-// The clang-cl front end defines _MSC_VER, but still requires the explicit
-// template declaration, so we must test for __clang__ here as well.
-#if defined(_MSC_VER) && !defined(__clang__)
-# define DEPENDENT_TEMPLATE_HINT
-#else
-# define DEPENDENT_TEMPLATE_HINT template
-#endif
-
-// Function to dispatch a method specialized to whatever boxed or unboxed dense
-// elements which an input object has.
-template <typename F>
-DenseElementResult
-CallBoxedOrUnboxedSpecialization(F f, JSObject* obj)
-{
- if (!HasAnyBoxedOrUnboxedDenseElements(obj))
- return DenseElementResult::Incomplete;
- switch (GetBoxedOrUnboxedType(obj)) {
- case JSVAL_TYPE_MAGIC:
- return f. DEPENDENT_TEMPLATE_HINT operator()<JSVAL_TYPE_MAGIC>();
- case JSVAL_TYPE_BOOLEAN:
- return f. DEPENDENT_TEMPLATE_HINT operator()<JSVAL_TYPE_BOOLEAN>();
- case JSVAL_TYPE_INT32:
- return f. DEPENDENT_TEMPLATE_HINT operator()<JSVAL_TYPE_INT32>();
- case JSVAL_TYPE_DOUBLE:
- return f. DEPENDENT_TEMPLATE_HINT operator()<JSVAL_TYPE_DOUBLE>();
- case JSVAL_TYPE_STRING:
- return f. DEPENDENT_TEMPLATE_HINT operator()<JSVAL_TYPE_STRING>();
- case JSVAL_TYPE_OBJECT:
- return f. DEPENDENT_TEMPLATE_HINT operator()<JSVAL_TYPE_OBJECT>();
- default:
- MOZ_CRASH();
- }
-}
-
-// As above, except the specialization can reflect the unboxed type of two objects.
-template <typename F>
-DenseElementResult
-CallBoxedOrUnboxedSpecialization(F f, JSObject* obj1, JSObject* obj2)
-{
- if (!HasAnyBoxedOrUnboxedDenseElements(obj1) || !HasAnyBoxedOrUnboxedDenseElements(obj2))
- return DenseElementResult::Incomplete;
-
-#define SPECIALIZE_OBJ2(TYPE) \
- switch (GetBoxedOrUnboxedType(obj2)) { \
- case JSVAL_TYPE_MAGIC: \
- return f. DEPENDENT_TEMPLATE_HINT operator()<TYPE, JSVAL_TYPE_MAGIC>(); \
- case JSVAL_TYPE_BOOLEAN: \
- return f. DEPENDENT_TEMPLATE_HINT operator()<TYPE, JSVAL_TYPE_BOOLEAN>(); \
- case JSVAL_TYPE_INT32: \
- return f. DEPENDENT_TEMPLATE_HINT operator()<TYPE, JSVAL_TYPE_INT32>(); \
- case JSVAL_TYPE_DOUBLE: \
- return f. DEPENDENT_TEMPLATE_HINT operator()<TYPE, JSVAL_TYPE_DOUBLE>(); \
- case JSVAL_TYPE_STRING: \
- return f. DEPENDENT_TEMPLATE_HINT operator()<TYPE, JSVAL_TYPE_STRING>(); \
- case JSVAL_TYPE_OBJECT: \
- return f. DEPENDENT_TEMPLATE_HINT operator()<TYPE, JSVAL_TYPE_OBJECT>(); \
- default: \
- MOZ_CRASH(); \
- }
-
- switch (GetBoxedOrUnboxedType(obj1)) {
- case JSVAL_TYPE_MAGIC:
- SPECIALIZE_OBJ2(JSVAL_TYPE_MAGIC)
- case JSVAL_TYPE_BOOLEAN:
- SPECIALIZE_OBJ2(JSVAL_TYPE_BOOLEAN)
- case JSVAL_TYPE_INT32:
- SPECIALIZE_OBJ2(JSVAL_TYPE_INT32)
- case JSVAL_TYPE_DOUBLE:
- SPECIALIZE_OBJ2(JSVAL_TYPE_DOUBLE)
- case JSVAL_TYPE_STRING:
- SPECIALIZE_OBJ2(JSVAL_TYPE_STRING)
- case JSVAL_TYPE_OBJECT:
- SPECIALIZE_OBJ2(JSVAL_TYPE_OBJECT)
- default:
- MOZ_CRASH();
- }
-
-#undef SPECIALIZE_OBJ2
-}
-
-#undef DEPENDENT_TEMPLATE_HINT
-
-#define DefineBoxedOrUnboxedFunctor1(Signature, A) \
-struct Signature ## Functor { \
- A a; \
- explicit Signature ## Functor(A a) \
- : a(a) \
- {} \
- template <JSValueType Type> \
- DenseElementResult operator()() { \
- return Signature<Type>(a); \
- } \
-}
-
-#define DefineBoxedOrUnboxedFunctor3(Signature, A, B, C) \
-struct Signature ## Functor { \
- A a; B b; C c; \
- Signature ## Functor(A a, B b, C c) \
- : a(a), b(b), c(c) \
- {} \
- template <JSValueType Type> \
- DenseElementResult operator()() { \
- return Signature<Type>(a, b, c); \
- } \
-}
-
-#define DefineBoxedOrUnboxedFunctor4(Signature, A, B, C, D) \
-struct Signature ## Functor { \
- A a; B b; C c; D d; \
- Signature ## Functor(A a, B b, C c, D d) \
- : a(a), b(b), c(c), d(d) \
- {} \
- template <JSValueType Type> \
- DenseElementResult operator()() { \
- return Signature<Type>(a, b, c, d); \
- } \
-}
-
-#define DefineBoxedOrUnboxedFunctorPair4(Signature, A, B, C, D) \
-struct Signature ## Functor { \
- A a; B b; C c; D d; \
- Signature ## Functor(A a, B b, C c, D d) \
- : a(a), b(b), c(c), d(d) \
- {} \
- template <JSValueType TypeOne, JSValueType TypeTwo> \
- DenseElementResult operator()() { \
- return Signature<TypeOne, TypeTwo>(a, b, c, d); \
- } \
-}
-
-#define DefineBoxedOrUnboxedFunctor5(Signature, A, B, C, D, E) \
-struct Signature ## Functor { \
- A a; B b; C c; D d; E e; \
- Signature ## Functor(A a, B b, C c, D d, E e) \
- : a(a), b(b), c(c), d(d), e(e) \
- {} \
- template <JSValueType Type> \
- DenseElementResult operator()() { \
- return Signature<Type>(a, b, c, d, e); \
- } \
-}
-
-#define DefineBoxedOrUnboxedFunctor6(Signature, A, B, C, D, E, F) \
-struct Signature ## Functor { \
- A a; B b; C c; D d; E e; F f; \
- Signature ## Functor(A a, B b, C c, D d, E e, F f) \
- : a(a), b(b), c(c), d(d), e(e), f(f) \
- {} \
- template <JSValueType Type> \
- DenseElementResult operator()() { \
- return Signature<Type>(a, b, c, d, e, f); \
- } \
-}
-
-#define DefineBoxedOrUnboxedFunctorPair6(Signature, A, B, C, D, E, F) \
-struct Signature ## Functor { \
- A a; B b; C c; D d; E e; F f; \
- Signature ## Functor(A a, B b, C c, D d, E e, F f) \
- : a(a), b(b), c(c), d(d), e(e), f(f) \
- {} \
- template <JSValueType TypeOne, JSValueType TypeTwo> \
- DenseElementResult operator()() { \
- return Signature<TypeOne, TypeTwo>(a, b, c, d, e, f); \
- } \
-}
-
-DenseElementResult
-SetOrExtendAnyBoxedOrUnboxedDenseElements(ExclusiveContext* cx, JSObject* obj,
- uint32_t start, const Value* vp, uint32_t count,
- ShouldUpdateTypes updateTypes = ShouldUpdateTypes::Update);
-
-DenseElementResult
-MoveAnyBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* obj,
- uint32_t dstStart, uint32_t srcStart, uint32_t length);
-
-DenseElementResult
-CopyAnyBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* dst, JSObject* src,
- uint32_t dstStart, uint32_t srcStart, uint32_t length);
-
-void
-SetAnyBoxedOrUnboxedInitializedLength(JSContext* cx, JSObject* obj, size_t initlen);
-
-DenseElementResult
-EnsureAnyBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* obj, size_t count);
-
-} // namespace js
-
-#endif // vm_UnboxedObject_inl_h
diff --git a/js/src/vm/UnboxedObject.cpp b/js/src/vm/UnboxedObject.cpp
deleted file mode 100644
index d7ad91de4..000000000
--- a/js/src/vm/UnboxedObject.cpp
+++ /dev/null
@@ -1,1752 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- * vim: set ts=8 sts=4 et sw=4 tw=99:
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "vm/UnboxedObject-inl.h"
-
-#include "jit/BaselineIC.h"
-#include "jit/ExecutableAllocator.h"
-#include "jit/JitCommon.h"
-#include "jit/Linker.h"
-
-#include "jsobjinlines.h"
-
-#include "gc/Nursery-inl.h"
-#include "jit/MacroAssembler-inl.h"
-#include "vm/Shape-inl.h"
-
-using mozilla::ArrayLength;
-using mozilla::DebugOnly;
-using mozilla::PodCopy;
-
-using namespace js;
-
-/////////////////////////////////////////////////////////////////////
-// UnboxedLayout
-/////////////////////////////////////////////////////////////////////
-
-void
-UnboxedLayout::trace(JSTracer* trc)
-{
- for (size_t i = 0; i < properties_.length(); i++)
- TraceManuallyBarrieredEdge(trc, &properties_[i].name, "unboxed_layout_name");
-
- if (newScript())
- newScript()->trace(trc);
-
- TraceNullableEdge(trc, &nativeGroup_, "unboxed_layout_nativeGroup");
- TraceNullableEdge(trc, &nativeShape_, "unboxed_layout_nativeShape");
- TraceNullableEdge(trc, &allocationScript_, "unboxed_layout_allocationScript");
- TraceNullableEdge(trc, &replacementGroup_, "unboxed_layout_replacementGroup");
- TraceNullableEdge(trc, &constructorCode_, "unboxed_layout_constructorCode");
-}
-
-size_t
-UnboxedLayout::sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf)
-{
- return mallocSizeOf(this)
- + properties_.sizeOfExcludingThis(mallocSizeOf)
- + (newScript() ? newScript()->sizeOfIncludingThis(mallocSizeOf) : 0)
- + mallocSizeOf(traceList());
-}
-
-void
-UnboxedLayout::setNewScript(TypeNewScript* newScript, bool writeBarrier /* = true */)
-{
- if (newScript_ && writeBarrier)
- TypeNewScript::writeBarrierPre(newScript_);
- newScript_ = newScript;
-}
-
-// Constructor code returns a 0x1 value to indicate the constructor code should
-// be cleared.
-static const uintptr_t CLEAR_CONSTRUCTOR_CODE_TOKEN = 0x1;
-
-/* static */ bool
-UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group)
-{
- gc::AutoSuppressGC suppress(cx);
-
- using namespace jit;
-
- if (!cx->compartment()->ensureJitCompartmentExists(cx))
- return false;
-
- UnboxedLayout& layout = group->unboxedLayout();
- MOZ_ASSERT(!layout.constructorCode());
-
- UnboxedPlainObject* templateObject = UnboxedPlainObject::create(cx, group, TenuredObject);
- if (!templateObject)
- return false;
-
- JitContext jitContext(cx, nullptr);
-
- MacroAssembler masm;
-
- Register propertiesReg, newKindReg;
-#ifdef JS_CODEGEN_X86
- propertiesReg = eax;
- newKindReg = ecx;
- masm.loadPtr(Address(masm.getStackPointer(), sizeof(void*)), propertiesReg);
- masm.loadPtr(Address(masm.getStackPointer(), 2 * sizeof(void*)), newKindReg);
-#else
- propertiesReg = IntArgReg0;
- newKindReg = IntArgReg1;
-#endif
-
-#ifdef JS_CODEGEN_ARM64
- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing.
- masm.initStackPtr();
-#endif
-
- MOZ_ASSERT(propertiesReg.volatile_());
- MOZ_ASSERT(newKindReg.volatile_());
-
- AllocatableGeneralRegisterSet regs(GeneralRegisterSet::All());
- regs.take(propertiesReg);
- regs.take(newKindReg);
- Register object = regs.takeAny(), scratch1 = regs.takeAny(), scratch2 = regs.takeAny();
-
- LiveGeneralRegisterSet savedNonVolatileRegisters = SavedNonVolatileRegisters(regs);
- masm.PushRegsInMask(savedNonVolatileRegisters);
-
- // The scratch double register might be used by MacroAssembler methods.
- if (ScratchDoubleReg.volatile_())
- masm.push(ScratchDoubleReg);
-
- Label failure, tenuredObject, allocated;
- masm.branch32(Assembler::NotEqual, newKindReg, Imm32(GenericObject), &tenuredObject);
- masm.branchTest32(Assembler::NonZero, AbsoluteAddress(group->addressOfFlags()),
- Imm32(OBJECT_FLAG_PRE_TENURE), &tenuredObject);
-
- // Allocate an object in the nursery
- masm.createGCObject(object, scratch1, templateObject, gc::DefaultHeap, &failure,
- /* initFixedSlots = */ false);
-
- masm.jump(&allocated);
- masm.bind(&tenuredObject);
-
- // Allocate an object in the tenured heap.
- masm.createGCObject(object, scratch1, templateObject, gc::TenuredHeap, &failure,
- /* initFixedSlots = */ false);
-
- // If any of the properties being stored are in the nursery, add a store
- // buffer entry for the new object.
- Label postBarrier;
- for (size_t i = 0; i < layout.properties().length(); i++) {
- const UnboxedLayout::Property& property = layout.properties()[i];
- if (property.type == JSVAL_TYPE_OBJECT) {
- Address valueAddress(propertiesReg, i * sizeof(IdValuePair) + offsetof(IdValuePair, value));
- Label notObject;
- masm.branchTestObject(Assembler::NotEqual, valueAddress, &notObject);
- Register valueObject = masm.extractObject(valueAddress, scratch1);
- masm.branchPtrInNurseryChunk(Assembler::Equal, valueObject, scratch2, &postBarrier);
- masm.bind(&notObject);
- }
- }
-
- masm.jump(&allocated);
- masm.bind(&postBarrier);
-
- LiveGeneralRegisterSet liveVolatileRegisters;
- liveVolatileRegisters.add(propertiesReg);
- if (object.volatile_())
- liveVolatileRegisters.add(object);
- masm.PushRegsInMask(liveVolatileRegisters);
-
- masm.mov(ImmPtr(cx->runtime()), scratch1);
- masm.setupUnalignedABICall(scratch2);
- masm.passABIArg(scratch1);
- masm.passABIArg(object);
- masm.callWithABI(JS_FUNC_TO_DATA_PTR(void*, PostWriteBarrier));
-
- masm.PopRegsInMask(liveVolatileRegisters);
-
- masm.bind(&allocated);
-
- ValueOperand valueOperand;
-#ifdef JS_NUNBOX32
- valueOperand = ValueOperand(scratch1, scratch2);
-#else
- valueOperand = ValueOperand(scratch1);
-#endif
-
- Label failureStoreOther, failureStoreObject;
-
- for (size_t i = 0; i < layout.properties().length(); i++) {
- const UnboxedLayout::Property& property = layout.properties()[i];
- Address valueAddress(propertiesReg, i * sizeof(IdValuePair) + offsetof(IdValuePair, value));
- Address targetAddress(object, UnboxedPlainObject::offsetOfData() + property.offset);
-
- masm.loadValue(valueAddress, valueOperand);
-
- if (property.type == JSVAL_TYPE_OBJECT) {
- HeapTypeSet* types = group->maybeGetProperty(IdToTypeId(NameToId(property.name)));
-
- Label notObject;
- masm.branchTestObject(Assembler::NotEqual, valueOperand,
- types->mightBeMIRType(MIRType::Null) ? &notObject : &failureStoreObject);
-
- Register payloadReg = masm.extractObject(valueOperand, scratch1);
-
- if (!types->hasType(TypeSet::AnyObjectType())) {
- Register scratch = (payloadReg == scratch1) ? scratch2 : scratch1;
- masm.guardObjectType(payloadReg, types, scratch, &failureStoreObject);
- }
-
- masm.storeUnboxedProperty(targetAddress, JSVAL_TYPE_OBJECT,
- TypedOrValueRegister(MIRType::Object,
- AnyRegister(payloadReg)), nullptr);
-
- if (notObject.used()) {
- Label done;
- masm.jump(&done);
- masm.bind(&notObject);
- masm.branchTestNull(Assembler::NotEqual, valueOperand, &failureStoreOther);
- masm.storeUnboxedProperty(targetAddress, JSVAL_TYPE_OBJECT, NullValue(), nullptr);
- masm.bind(&done);
- }
- } else {
- masm.storeUnboxedProperty(targetAddress, property.type,
- ConstantOrRegister(valueOperand), &failureStoreOther);
- }
- }
-
- Label done;
- masm.bind(&done);
-
- if (object != ReturnReg)
- masm.movePtr(object, ReturnReg);
-
- // Restore non-volatile registers which were saved on entry.
- if (ScratchDoubleReg.volatile_())
- masm.pop(ScratchDoubleReg);
- masm.PopRegsInMask(savedNonVolatileRegisters);
-
- masm.abiret();
-
- masm.bind(&failureStoreOther);
-
- // There was a failure while storing a value which cannot be stored at all
- // in the unboxed object. Initialize the object so it is safe for GC and
- // return null.
- masm.initUnboxedObjectContents(object, templateObject);
-
- masm.bind(&failure);
-
- masm.movePtr(ImmWord(0), object);
- masm.jump(&done);
-
- masm.bind(&failureStoreObject);
-
- // There was a failure while storing a value to an object slot of the
- // unboxed object. If the value is storable, the failure occurred due to
- // incomplete type information in the object, so return a token to trigger
- // regeneration of the jitcode after a new object is created in the VM.
- {
- Label isObject;
- masm.branchTestObject(Assembler::Equal, valueOperand, &isObject);
- masm.branchTestNull(Assembler::NotEqual, valueOperand, &failureStoreOther);
- masm.bind(&isObject);
- }
-
- // Initialize the object so it is safe for GC.
- masm.initUnboxedObjectContents(object, templateObject);
-
- masm.movePtr(ImmWord(CLEAR_CONSTRUCTOR_CODE_TOKEN), object);
- masm.jump(&done);
-
- Linker linker(masm);
- AutoFlushICache afc("UnboxedObject");
- JitCode* code = linker.newCode<NoGC>(cx, OTHER_CODE);
- if (!code)
- return false;
-
- layout.setConstructorCode(code);
- return true;
-}
-
-void
-UnboxedLayout::detachFromCompartment()
-{
- if (isInList())
- remove();
-}
-
-/////////////////////////////////////////////////////////////////////
-// UnboxedPlainObject
-/////////////////////////////////////////////////////////////////////
-
-bool
-UnboxedPlainObject::setValue(ExclusiveContext* cx, const UnboxedLayout::Property& property,
- const Value& v)
-{
- uint8_t* p = &data_[property.offset];
- return SetUnboxedValue(cx, this, NameToId(property.name), p, property.type, v,
- /* preBarrier = */ true);
-}
-
-Value
-UnboxedPlainObject::getValue(const UnboxedLayout::Property& property,
- bool maybeUninitialized /* = false */)
-{
- uint8_t* p = &data_[property.offset];
- return GetUnboxedValue(p, property.type, maybeUninitialized);
-}
-
-void
-UnboxedPlainObject::trace(JSTracer* trc, JSObject* obj)
-{
- if (obj->as<UnboxedPlainObject>().expando_) {
- TraceManuallyBarrieredEdge(trc,
- reinterpret_cast<NativeObject**>(&obj->as<UnboxedPlainObject>().expando_),
- "unboxed_expando");
- }
-
- const UnboxedLayout& layout = obj->as<UnboxedPlainObject>().layoutDontCheckGeneration();
- const int32_t* list = layout.traceList();
- if (!list)
- return;
-
- uint8_t* data = obj->as<UnboxedPlainObject>().data();
- while (*list != -1) {
- GCPtrString* heap = reinterpret_cast<GCPtrString*>(data + *list);
- TraceEdge(trc, heap, "unboxed_string");
- list++;
- }
- list++;
- while (*list != -1) {
- GCPtrObject* heap = reinterpret_cast<GCPtrObject*>(data + *list);
- TraceNullableEdge(trc, heap, "unboxed_object");
- list++;
- }
-
- // Unboxed objects don't have Values to trace.
- MOZ_ASSERT(*(list + 1) == -1);
-}
-
-/* static */ UnboxedExpandoObject*
-UnboxedPlainObject::ensureExpando(JSContext* cx, Handle<UnboxedPlainObject*> obj)
-{
- if (obj->expando_)
- return obj->expando_;
-
- UnboxedExpandoObject* expando =
- NewObjectWithGivenProto<UnboxedExpandoObject>(cx, nullptr, gc::AllocKind::OBJECT4);
- if (!expando)
- return nullptr;
-
- // Don't track property types for expando objects. This allows Baseline
- // and Ion AddSlot ICs to guard on the unboxed group without guarding on
- // the expando group.
- MarkObjectGroupUnknownProperties(cx, expando->group());
-
- // If the expando is tenured then the original object must also be tenured.
- // Otherwise barriers triggered on the original object for writes to the
- // expando (as can happen in the JIT) won't see the tenured->nursery edge.
- // See WholeCellEdges::mark.
- MOZ_ASSERT_IF(!IsInsideNursery(expando), !IsInsideNursery(obj));
-
- // As with setValue(), we need to manually trigger post barriers on the
- // whole object. If we treat the field as a GCPtrObject and later
- // convert the object to its native representation, we will end up with a
- // corrupted store buffer entry.
- if (IsInsideNursery(expando) && !IsInsideNursery(obj))
- cx->runtime()->gc.storeBuffer.putWholeCell(obj);
-
- obj->expando_ = expando;
- return expando;
-}
-
-bool
-UnboxedPlainObject::containsUnboxedOrExpandoProperty(ExclusiveContext* cx, jsid id) const
-{
- if (layout().lookup(id))
- return true;
-
- if (maybeExpando() && maybeExpando()->containsShapeOrElement(cx, id))
- return true;
-
- return false;
-}
-
-static bool
-PropagatePropertyTypes(JSContext* cx, jsid id, ObjectGroup* oldGroup, ObjectGroup* newGroup)
-{
- HeapTypeSet* typeProperty = oldGroup->maybeGetProperty(id);
- TypeSet::TypeList types;
- if (!typeProperty->enumerateTypes(&types)) {
- ReportOutOfMemory(cx);
- return false;
- }
- for (size_t j = 0; j < types.length(); j++)
- AddTypePropertyId(cx, newGroup, nullptr, id, types[j]);
- return true;
-}
-
-static PlainObject*
-MakeReplacementTemplateObject(JSContext* cx, HandleObjectGroup group, const UnboxedLayout &layout)
-{
- PlainObject* obj = NewObjectWithGroup<PlainObject>(cx, group, layout.getAllocKind(),
- TenuredObject);
- if (!obj)
- return nullptr;
-
- for (size_t i = 0; i < layout.properties().length(); i++) {
- const UnboxedLayout::Property& property = layout.properties()[i];
- if (!obj->addDataProperty(cx, NameToId(property.name), i, JSPROP_ENUMERATE))
- return nullptr;
- MOZ_ASSERT(obj->slotSpan() == i + 1);
- MOZ_ASSERT(!obj->inDictionaryMode());
- }
-
- return obj;
-}
-
-/* static */ bool
-UnboxedLayout::makeNativeGroup(JSContext* cx, ObjectGroup* group)
-{
- AutoEnterAnalysis enter(cx);
-
- UnboxedLayout& layout = group->unboxedLayout();
- Rooted<TaggedProto> proto(cx, group->proto());
-
- MOZ_ASSERT(!layout.nativeGroup());
-
- RootedObjectGroup replacementGroup(cx);
-
- const Class* clasp = layout.isArray() ? &ArrayObject::class_ : &PlainObject::class_;
-
- // Immediately clear any new script on the group. This is done by replacing
- // the existing new script with one for a replacement default new group.
- // This is done so that the size of the replacment group's objects is the
- // same as that for the unboxed group, so that we do not see polymorphic
- // slot accesses later on for sites that see converted objects from this
- // group and objects that were allocated using the replacement new group.
- if (layout.newScript()) {
- MOZ_ASSERT(!layout.isArray());
-
- replacementGroup = ObjectGroupCompartment::makeGroup(cx, &PlainObject::class_, proto);
- if (!replacementGroup)
- return false;
-
- PlainObject* templateObject = MakeReplacementTemplateObject(cx, replacementGroup, layout);
- if (!templateObject)
- return false;
-
- TypeNewScript* replacementNewScript =
- TypeNewScript::makeNativeVersion(cx, layout.newScript(), templateObject);
- if (!replacementNewScript)
- return false;
-
- replacementGroup->setNewScript(replacementNewScript);
- gc::TraceTypeNewScript(replacementGroup);
-
- group->clearNewScript(cx, replacementGroup);
- }
-
- // Similarly, if this group is keyed to an allocation site, replace its
- // entry with a new group that has no unboxed layout.
- if (layout.allocationScript()) {
- RootedScript script(cx, layout.allocationScript());
- jsbytecode* pc = layout.allocationPc();
-
- replacementGroup = ObjectGroupCompartment::makeGroup(cx, clasp, proto);
- if (!replacementGroup)
- return false;
-
- PlainObject* templateObject = &script->getObject(pc)->as<PlainObject>();
- replacementGroup->addDefiniteProperties(cx, templateObject->lastProperty());
-
- JSProtoKey key = layout.isArray() ? JSProto_Array : JSProto_Object;
- cx->compartment()->objectGroups.replaceAllocationSiteGroup(script, pc, key,
- replacementGroup);
-
- // Clear any baseline information at this opcode which might use the old group.
- if (script->hasBaselineScript()) {
- jit::ICEntry& entry = script->baselineScript()->icEntryFromPCOffset(script->pcToOffset(pc));
- jit::ICFallbackStub* fallback = entry.fallbackStub();
- for (jit::ICStubIterator iter = fallback->beginChain(); !iter.atEnd(); iter++)
- iter.unlink(cx);
- if (fallback->isNewObject_Fallback())
- fallback->toNewObject_Fallback()->setTemplateObject(nullptr);
- else if (fallback->isNewArray_Fallback())
- fallback->toNewArray_Fallback()->setTemplateGroup(replacementGroup);
- }
- }
-
- size_t nfixed = layout.isArray() ? 0 : gc::GetGCKindSlots(layout.getAllocKind());
-
- if (layout.isArray()) {
- // The length shape to use for arrays is cached via a modified initial
- // shape for array objects. Create an array now to make sure this entry
- // is instantiated.
- if (!NewDenseEmptyArray(cx))
- return false;
- }
-
- RootedShape shape(cx, EmptyShape::getInitialShape(cx, clasp, proto, nfixed, 0));
- if (!shape)
- return false;
-
- MOZ_ASSERT_IF(layout.isArray(), !shape->isEmptyShape() && shape->slotSpan() == 0);
-
- // Add shapes for each property, if this is for a plain object.
- for (size_t i = 0; i < layout.properties().length(); i++) {
- const UnboxedLayout::Property& property = layout.properties()[i];
-
- Rooted<StackShape> child(cx, StackShape(shape->base()->unowned(), NameToId(property.name),
- i, JSPROP_ENUMERATE, 0));
- shape = cx->zone()->propertyTree.getChild(cx, shape, child);
- if (!shape)
- return false;
- }
-
- ObjectGroup* nativeGroup =
- ObjectGroupCompartment::makeGroup(cx, clasp, proto,
- group->flags() & OBJECT_FLAG_DYNAMIC_MASK);
- if (!nativeGroup)
- return false;
-
- // No sense propagating if we don't know what we started with.
- if (!group->unknownProperties()) {
- // Propagate all property types from the old group to the new group.
- if (layout.isArray()) {
- if (!PropagatePropertyTypes(cx, JSID_VOID, group, nativeGroup))
- return false;
- } else {
- for (size_t i = 0; i < layout.properties().length(); i++) {
- const UnboxedLayout::Property& property = layout.properties()[i];
- jsid id = NameToId(property.name);
- if (!PropagatePropertyTypes(cx, id, group, nativeGroup))
- return false;
-
- // If we are OOM we may not be able to propagate properties.
- if (nativeGroup->unknownProperties())
- break;
-
- HeapTypeSet* nativeProperty = nativeGroup->maybeGetProperty(id);
- if (nativeProperty && nativeProperty->canSetDefinite(i))
- nativeProperty->setDefinite(i);
- }
- }
- } else {
- // If we skip, though, the new group had better agree.
- MOZ_ASSERT(nativeGroup->unknownProperties());
- }
-
- layout.nativeGroup_ = nativeGroup;
- layout.nativeShape_ = shape;
- layout.replacementGroup_ = replacementGroup;
-
- nativeGroup->setOriginalUnboxedGroup(group);
-
- group->markStateChange(cx);
-
- return true;
-}
-
-/* static */ bool
-UnboxedPlainObject::convertToNative(JSContext* cx, JSObject* obj)
-{
- const UnboxedLayout& layout = obj->as<UnboxedPlainObject>().layout();
- UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando();
-
- if (!layout.nativeGroup()) {
- if (!UnboxedLayout::makeNativeGroup(cx, obj->group()))
- return false;
-
- // makeNativeGroup can reentrantly invoke this method.
- if (obj->is<PlainObject>())
- return true;
- }
-
- AutoValueVector values(cx);
- for (size_t i = 0; i < layout.properties().length(); i++) {
- // We might be reading properties off the object which have not been
- // initialized yet. Make sure any double values we read here are
- // canonicalized.
- if (!values.append(obj->as<UnboxedPlainObject>().getValue(layout.properties()[i], true)))
- return false;
- }
-
- // We are eliminating the expando edge with the conversion, so trigger a
- // pre barrier.
- JSObject::writeBarrierPre(expando);
-
- // Additionally trigger a post barrier on the expando itself. Whole cell
- // store buffer entries can be added on the original unboxed object for
- // writes to the expando (see WholeCellEdges::trace), so after conversion
- // we need to make sure the expando itself will still be traced.
- if (expando && !IsInsideNursery(expando))
- cx->runtime()->gc.storeBuffer.putWholeCell(expando);
-
- obj->setGroup(layout.nativeGroup());
- obj->as<PlainObject>().setLastPropertyMakeNative(cx, layout.nativeShape());
-
- for (size_t i = 0; i < values.length(); i++)
- obj->as<PlainObject>().initSlotUnchecked(i, values[i]);
-
- if (expando) {
- // Add properties from the expando object to the object, in order.
- // Suppress GC here, so that callers don't need to worry about this
- // method collecting. The stuff below can only fail due to OOM, in
- // which case the object will not have been completely filled back in.
- gc::AutoSuppressGC suppress(cx);
-
- Vector<jsid> ids(cx);
- for (Shape::Range<NoGC> r(expando->lastProperty()); !r.empty(); r.popFront()) {
- if (!ids.append(r.front().propid()))
- return false;
- }
- for (size_t i = 0; i < expando->getDenseInitializedLength(); i++) {
- if (!expando->getDenseElement(i).isMagic(JS_ELEMENTS_HOLE)) {
- if (!ids.append(INT_TO_JSID(i)))
- return false;
- }
- }
- ::Reverse(ids.begin(), ids.end());
-
- RootedPlainObject nobj(cx, &obj->as<PlainObject>());
- Rooted<UnboxedExpandoObject*> nexpando(cx, expando);
- RootedId id(cx);
- Rooted<PropertyDescriptor> desc(cx);
- for (size_t i = 0; i < ids.length(); i++) {
- id = ids[i];
- if (!GetOwnPropertyDescriptor(cx, nexpando, id, &desc))
- return false;
- ObjectOpResult result;
- if (!DefineProperty(cx, nobj, id, desc, result))
- return false;
- MOZ_ASSERT(result.ok());
- }
- }
-
- return true;
-}
-
-/* static */
-UnboxedPlainObject*
-UnboxedPlainObject::create(ExclusiveContext* cx, HandleObjectGroup group, NewObjectKind newKind)
-{
- AutoSetNewObjectMetadata metadata(cx);
-
- MOZ_ASSERT(group->clasp() == &class_);
- gc::AllocKind allocKind = group->unboxedLayout().getAllocKind();
-
- UnboxedPlainObject* res =
- NewObjectWithGroup<UnboxedPlainObject>(cx, group, allocKind, newKind);
- if (!res)
- return nullptr;
-
- // Overwrite the dummy shape which was written to the object's expando field.
- res->initExpando();
-
- // Initialize reference fields of the object. All fields in the object will
- // be overwritten shortly, but references need to be safe for the GC.
- const int32_t* list = res->layout().traceList();
- if (list) {
- uint8_t* data = res->data();
- while (*list != -1) {
- GCPtrString* heap = reinterpret_cast<GCPtrString*>(data + *list);
- heap->init(cx->names().empty);
- list++;
- }
- list++;
- while (*list != -1) {
- GCPtrObject* heap = reinterpret_cast<GCPtrObject*>(data + *list);
- heap->init(nullptr);
- list++;
- }
- // Unboxed objects don't have Values to initialize.
- MOZ_ASSERT(*(list + 1) == -1);
- }
-
- return res;
-}
-
-/* static */ JSObject*
-UnboxedPlainObject::createWithProperties(ExclusiveContext* cx, HandleObjectGroup group,
- NewObjectKind newKind, IdValuePair* properties)
-{
- MOZ_ASSERT(newKind == GenericObject || newKind == TenuredObject);
-
- UnboxedLayout& layout = group->unboxedLayout();
-
- if (layout.constructorCode()) {
- MOZ_ASSERT(cx->isJSContext());
-
- typedef JSObject* (*ConstructorCodeSignature)(IdValuePair*, NewObjectKind);
- ConstructorCodeSignature function =
- reinterpret_cast<ConstructorCodeSignature>(layout.constructorCode()->raw());
-
- JSObject* obj;
- {
- JS::AutoSuppressGCAnalysis nogc;
- obj = reinterpret_cast<JSObject*>(CALL_GENERATED_2(function, properties, newKind));
- }
- if (obj > reinterpret_cast<JSObject*>(CLEAR_CONSTRUCTOR_CODE_TOKEN))
- return obj;
-
- if (obj == reinterpret_cast<JSObject*>(CLEAR_CONSTRUCTOR_CODE_TOKEN))
- layout.setConstructorCode(nullptr);
- }
-
- UnboxedPlainObject* obj = UnboxedPlainObject::create(cx, group, newKind);
- if (!obj)
- return nullptr;
-
- for (size_t i = 0; i < layout.properties().length(); i++) {
- if (!obj->setValue(cx, layout.properties()[i], properties[i].value))
- return NewPlainObjectWithProperties(cx, properties, layout.properties().length(), newKind);
- }
-
-#ifndef JS_CODEGEN_NONE
- if (cx->isJSContext() &&
- !group->unknownProperties() &&
- !layout.constructorCode() &&
- cx->asJSContext()->runtime()->jitSupportsFloatingPoint &&
- jit::CanLikelyAllocateMoreExecutableMemory())
- {
- if (!UnboxedLayout::makeConstructorCode(cx->asJSContext(), group))
- return nullptr;
- }
-#endif
-
- return obj;
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_lookupProperty(JSContext* cx, HandleObject obj,
- HandleId id, MutableHandleObject objp,
- MutableHandleShape propp)
-{
- if (obj->as<UnboxedPlainObject>().containsUnboxedOrExpandoProperty(cx, id)) {
- MarkNonNativePropertyFound<CanGC>(propp);
- objp.set(obj);
- return true;
- }
-
- RootedObject proto(cx, obj->staticPrototype());
- if (!proto) {
- objp.set(nullptr);
- propp.set(nullptr);
- return true;
- }
-
- return LookupProperty(cx, proto, id, objp, propp);
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id,
- Handle<PropertyDescriptor> desc,
- ObjectOpResult& result)
-{
- const UnboxedLayout& layout = obj->as<UnboxedPlainObject>().layout();
-
- if (const UnboxedLayout::Property* property = layout.lookup(id)) {
- if (!desc.getter() && !desc.setter() && desc.attributes() == JSPROP_ENUMERATE) {
- // This define is equivalent to setting an existing property.
- if (obj->as<UnboxedPlainObject>().setValue(cx, *property, desc.value()))
- return result.succeed();
- }
-
- // Trying to incompatibly redefine an existing property requires the
- // object to be converted to a native object.
- if (!convertToNative(cx, obj))
- return false;
-
- return DefineProperty(cx, obj, id, desc, result);
- }
-
- // Define the property on the expando object.
- Rooted<UnboxedExpandoObject*> expando(cx, ensureExpando(cx, obj.as<UnboxedPlainObject>()));
- if (!expando)
- return false;
-
- // Update property types on the unboxed object as well.
- AddTypePropertyId(cx, obj, id, desc.value());
-
- return DefineProperty(cx, expando, id, desc, result);
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_hasProperty(JSContext* cx, HandleObject obj, HandleId id, bool* foundp)
-{
- if (obj->as<UnboxedPlainObject>().containsUnboxedOrExpandoProperty(cx, id)) {
- *foundp = true;
- return true;
- }
-
- RootedObject proto(cx, obj->staticPrototype());
- if (!proto) {
- *foundp = false;
- return true;
- }
-
- return HasProperty(cx, proto, id, foundp);
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_getProperty(JSContext* cx, HandleObject obj, HandleValue receiver,
- HandleId id, MutableHandleValue vp)
-{
- const UnboxedLayout& layout = obj->as<UnboxedPlainObject>().layout();
-
- if (const UnboxedLayout::Property* property = layout.lookup(id)) {
- vp.set(obj->as<UnboxedPlainObject>().getValue(*property));
- return true;
- }
-
- if (UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando()) {
- if (expando->containsShapeOrElement(cx, id)) {
- RootedObject nexpando(cx, expando);
- return GetProperty(cx, nexpando, receiver, id, vp);
- }
- }
-
- RootedObject proto(cx, obj->staticPrototype());
- if (!proto) {
- vp.setUndefined();
- return true;
- }
-
- return GetProperty(cx, proto, receiver, id, vp);
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_setProperty(JSContext* cx, HandleObject obj, HandleId id, HandleValue v,
- HandleValue receiver, ObjectOpResult& result)
-{
- const UnboxedLayout& layout = obj->as<UnboxedPlainObject>().layout();
-
- if (const UnboxedLayout::Property* property = layout.lookup(id)) {
- if (receiver.isObject() && obj == &receiver.toObject()) {
- if (obj->as<UnboxedPlainObject>().setValue(cx, *property, v))
- return result.succeed();
-
- if (!convertToNative(cx, obj))
- return false;
- return SetProperty(cx, obj, id, v, receiver, result);
- }
-
- return SetPropertyByDefining(cx, id, v, receiver, result);
- }
-
- if (UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando()) {
- if (expando->containsShapeOrElement(cx, id)) {
- // Update property types on the unboxed object as well.
- AddTypePropertyId(cx, obj, id, v);
-
- RootedObject nexpando(cx, expando);
- return SetProperty(cx, nexpando, id, v, receiver, result);
- }
- }
-
- return SetPropertyOnProto(cx, obj, id, v, receiver, result);
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_getOwnPropertyDescriptor(JSContext* cx, HandleObject obj, HandleId id,
- MutableHandle<PropertyDescriptor> desc)
-{
- const UnboxedLayout& layout = obj->as<UnboxedPlainObject>().layout();
-
- if (const UnboxedLayout::Property* property = layout.lookup(id)) {
- desc.value().set(obj->as<UnboxedPlainObject>().getValue(*property));
- desc.setAttributes(JSPROP_ENUMERATE);
- desc.object().set(obj);
- return true;
- }
-
- if (UnboxedExpandoObject* expando = obj->as<UnboxedPlainObject>().maybeExpando()) {
- if (expando->containsShapeOrElement(cx, id)) {
- RootedObject nexpando(cx, expando);
- if (!GetOwnPropertyDescriptor(cx, nexpando, id, desc))
- return false;
- if (desc.object() == nexpando)
- desc.object().set(obj);
- return true;
- }
- }
-
- desc.object().set(nullptr);
- return true;
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_deleteProperty(JSContext* cx, HandleObject obj, HandleId id,
- ObjectOpResult& result)
-{
- if (!convertToNative(cx, obj))
- return false;
- return DeleteProperty(cx, obj, id, result);
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_watch(JSContext* cx, HandleObject obj, HandleId id, HandleObject callable)
-{
- if (!convertToNative(cx, obj))
- return false;
- return WatchProperty(cx, obj, id, callable);
-}
-
-/* static */ bool
-UnboxedPlainObject::obj_enumerate(JSContext* cx, HandleObject obj, AutoIdVector& properties,
- bool enumerableOnly)
-{
- // Ignore expando properties here, they are special-cased by the property
- // enumeration code.
-
- const UnboxedLayout::PropertyVector& unboxed = obj->as<UnboxedPlainObject>().layout().properties();
- for (size_t i = 0; i < unboxed.length(); i++) {
- if (!properties.append(NameToId(unboxed[i].name)))
- return false;
- }
-
- return true;
-}
-
-const Class UnboxedExpandoObject::class_ = {
- "UnboxedExpandoObject",
- 0
-};
-
-static const ClassOps UnboxedPlainObjectClassOps = {
- nullptr, /* addProperty */
- nullptr, /* delProperty */
- nullptr, /* getProperty */
- nullptr, /* setProperty */
- nullptr, /* enumerate */
- nullptr, /* resolve */
- nullptr, /* mayResolve */
- nullptr, /* finalize */
- nullptr, /* call */
- nullptr, /* hasInstance */
- nullptr, /* construct */
- UnboxedPlainObject::trace,
-};
-
-static const ObjectOps UnboxedPlainObjectObjectOps = {
- UnboxedPlainObject::obj_lookupProperty,
- UnboxedPlainObject::obj_defineProperty,
- UnboxedPlainObject::obj_hasProperty,
- UnboxedPlainObject::obj_getProperty,
- UnboxedPlainObject::obj_setProperty,
- UnboxedPlainObject::obj_getOwnPropertyDescriptor,
- UnboxedPlainObject::obj_deleteProperty,
- UnboxedPlainObject::obj_watch,
- nullptr, /* No unwatch needed, as watch() converts the object to native */
- nullptr, /* getElements */
- UnboxedPlainObject::obj_enumerate,
- nullptr /* funToString */
-};
-
-const Class UnboxedPlainObject::class_ = {
- js_Object_str,
- Class::NON_NATIVE |
- JSCLASS_HAS_CACHED_PROTO(JSProto_Object) |
- JSCLASS_DELAY_METADATA_BUILDER,
- &UnboxedPlainObjectClassOps,
- JS_NULL_CLASS_SPEC,
- JS_NULL_CLASS_EXT,
- &UnboxedPlainObjectObjectOps
-};
-
-/////////////////////////////////////////////////////////////////////
-// UnboxedArrayObject
-/////////////////////////////////////////////////////////////////////
-
-template <JSValueType Type>
-DenseElementResult
-AppendUnboxedDenseElements(UnboxedArrayObject* obj, uint32_t initlen,
- MutableHandle<GCVector<Value>> values)
-{
- for (size_t i = 0; i < initlen; i++)
- values.infallibleAppend(obj->getElementSpecific<Type>(i));
- return DenseElementResult::Success;
-}
-
-DefineBoxedOrUnboxedFunctor3(AppendUnboxedDenseElements,
- UnboxedArrayObject*, uint32_t, MutableHandle<GCVector<Value>>);
-
-/* static */ bool
-UnboxedArrayObject::convertToNativeWithGroup(ExclusiveContext* cx, JSObject* obj,
- ObjectGroup* group, Shape* shape)
-{
- size_t length = obj->as<UnboxedArrayObject>().length();
- size_t initlen = obj->as<UnboxedArrayObject>().initializedLength();
-
- Rooted<GCVector<Value>> values(cx, GCVector<Value>(cx));
- if (!values.reserve(initlen))
- return false;
-
- AppendUnboxedDenseElementsFunctor functor(&obj->as<UnboxedArrayObject>(), initlen, &values);
- DebugOnly<DenseElementResult> result = CallBoxedOrUnboxedSpecialization(functor, obj);
- MOZ_ASSERT(result.value == DenseElementResult::Success);
-
- obj->setGroup(group);
-
- ArrayObject* aobj = &obj->as<ArrayObject>();
- aobj->setLastPropertyMakeNative(cx, shape);
-
- // Make sure there is at least one element, so that this array does not
- // use emptyObjectElements / emptyObjectElementsShared.
- if (!aobj->ensureElements(cx, Max<size_t>(initlen, 1)))
- return false;
-
- MOZ_ASSERT(!aobj->getDenseInitializedLength());
- aobj->setDenseInitializedLength(initlen);
- aobj->initDenseElements(0, values.begin(), initlen);
- aobj->setLengthInt32(length);
-
- return true;
-}
-
-/* static */ bool
-UnboxedArrayObject::convertToNative(JSContext* cx, JSObject* obj)
-{
- const UnboxedLayout& layout = obj->as<UnboxedArrayObject>().layout();
-
- if (!layout.nativeGroup()) {
- if (!UnboxedLayout::makeNativeGroup(cx, obj->group()))
- return false;
- }
-
- return convertToNativeWithGroup(cx, obj, layout.nativeGroup(), layout.nativeShape());
-}
-
-bool
-UnboxedArrayObject::convertInt32ToDouble(ExclusiveContext* cx, ObjectGroup* group)
-{
- MOZ_ASSERT(elementType() == JSVAL_TYPE_INT32);
- MOZ_ASSERT(group->unboxedLayout().elementType() == JSVAL_TYPE_DOUBLE);
-
- Vector<int32_t> values(cx);
- if (!values.reserve(initializedLength()))
- return false;
- for (size_t i = 0; i < initializedLength(); i++)
- values.infallibleAppend(getElementSpecific<JSVAL_TYPE_INT32>(i).toInt32());
-
- uint8_t* newElements;
- if (hasInlineElements()) {
- newElements = AllocateObjectBuffer<uint8_t>(cx, this, capacity() * sizeof(double));
- } else {
- newElements = ReallocateObjectBuffer<uint8_t>(cx, this, elements(),
- capacity() * sizeof(int32_t),
- capacity() * sizeof(double));
- }
- if (!newElements)
- return false;
-
- setGroup(group);
- elements_ = newElements;
-
- for (size_t i = 0; i < initializedLength(); i++)
- setElementNoTypeChangeSpecific<JSVAL_TYPE_DOUBLE>(i, DoubleValue(values[i]));
-
- return true;
-}
-
-/* static */ UnboxedArrayObject*
-UnboxedArrayObject::create(ExclusiveContext* cx, HandleObjectGroup group, uint32_t length,
- NewObjectKind newKind, uint32_t maxLength)
-{
- MOZ_ASSERT(length <= MaximumCapacity);
-
- MOZ_ASSERT(group->clasp() == &class_);
- uint32_t elementSize = UnboxedTypeSize(group->unboxedLayout().elementType());
- uint32_t capacity = Min(length, maxLength);
- uint32_t nbytes = offsetOfInlineElements() + elementSize * capacity;
-
- UnboxedArrayObject* res;
- if (nbytes <= JSObject::MAX_BYTE_SIZE) {
- gc::AllocKind allocKind = gc::GetGCObjectKindForBytes(nbytes);
-
- // If there was no provided length information, pick an allocation kind
- // to accommodate small arrays (as is done for normal native arrays).
- if (capacity == 0)
- allocKind = gc::AllocKind::OBJECT8;
-
- res = NewObjectWithGroup<UnboxedArrayObject>(cx, group, allocKind, newKind);
- if (!res)
- return nullptr;
- res->setInitializedLengthNoBarrier(0);
- res->setInlineElements();
-
- size_t actualCapacity = (GetGCKindBytes(allocKind) - offsetOfInlineElements()) / elementSize;
- MOZ_ASSERT(actualCapacity >= capacity);
- res->setCapacityIndex(exactCapacityIndex(actualCapacity));
- } else {
- res = NewObjectWithGroup<UnboxedArrayObject>(cx, group, gc::AllocKind::OBJECT0, newKind);
- if (!res)
- return nullptr;
- res->setInitializedLengthNoBarrier(0);
-
- uint32_t capacityIndex = (capacity == length)
- ? CapacityMatchesLengthIndex
- : chooseCapacityIndex(capacity, length);
- uint32_t actualCapacity = computeCapacity(capacityIndex, length);
-
- res->elements_ = AllocateObjectBuffer<uint8_t>(cx, res, actualCapacity * elementSize);
- if (!res->elements_) {
- // Make the object safe for GC.
- res->setInlineElements();
- return nullptr;
- }
-
- res->setCapacityIndex(capacityIndex);
- }
-
- res->setLength(cx, length);
- return res;
-}
-
-bool
-UnboxedArrayObject::setElement(ExclusiveContext* cx, size_t index, const Value& v)
-{
- MOZ_ASSERT(index < initializedLength());
- uint8_t* p = elements() + index * elementSize();
- return SetUnboxedValue(cx, this, JSID_VOID, p, elementType(), v, /* preBarrier = */ true);
-}
-
-bool
-UnboxedArrayObject::initElement(ExclusiveContext* cx, size_t index, const Value& v)
-{
- MOZ_ASSERT(index < initializedLength());
- uint8_t* p = elements() + index * elementSize();
- return SetUnboxedValue(cx, this, JSID_VOID, p, elementType(), v, /* preBarrier = */ false);
-}
-
-void
-UnboxedArrayObject::initElementNoTypeChange(size_t index, const Value& v)
-{
- MOZ_ASSERT(index < initializedLength());
- uint8_t* p = elements() + index * elementSize();
- if (UnboxedTypeNeedsPreBarrier(elementType()))
- *reinterpret_cast<void**>(p) = nullptr;
- SetUnboxedValueNoTypeChange(this, p, elementType(), v, /* preBarrier = */ false);
-}
-
-Value
-UnboxedArrayObject::getElement(size_t index)
-{
- MOZ_ASSERT(index < initializedLength());
- uint8_t* p = elements() + index * elementSize();
- return GetUnboxedValue(p, elementType(), /* maybeUninitialized = */ false);
-}
-
-/* static */ void
-UnboxedArrayObject::trace(JSTracer* trc, JSObject* obj)
-{
- JSValueType type = obj->as<UnboxedArrayObject>().elementType();
- if (!UnboxedTypeNeedsPreBarrier(type))
- return;
-
- MOZ_ASSERT(obj->as<UnboxedArrayObject>().elementSize() == sizeof(uintptr_t));
- size_t initlen = obj->as<UnboxedArrayObject>().initializedLength();
- void** elements = reinterpret_cast<void**>(obj->as<UnboxedArrayObject>().elements());
-
- switch (type) {
- case JSVAL_TYPE_OBJECT:
- for (size_t i = 0; i < initlen; i++) {
- GCPtrObject* heap = reinterpret_cast<GCPtrObject*>(elements + i);
- TraceNullableEdge(trc, heap, "unboxed_object");
- }
- break;
-
- case JSVAL_TYPE_STRING:
- for (size_t i = 0; i < initlen; i++) {
- GCPtrString* heap = reinterpret_cast<GCPtrString*>(elements + i);
- TraceEdge(trc, heap, "unboxed_string");
- }
- break;
-
- default:
- MOZ_CRASH();
- }
-}
-
-/* static */ void
-UnboxedArrayObject::objectMoved(JSObject* obj, const JSObject* old)
-{
- UnboxedArrayObject& dst = obj->as<UnboxedArrayObject>();
- const UnboxedArrayObject& src = old->as<UnboxedArrayObject>();
-
- // Fix up possible inline data pointer.
- if (src.hasInlineElements())
- dst.setInlineElements();
-}
-
-/* static */ void
-UnboxedArrayObject::finalize(FreeOp* fop, JSObject* obj)
-{
- MOZ_ASSERT(!IsInsideNursery(obj));
- if (!obj->as<UnboxedArrayObject>().hasInlineElements())
- js_free(obj->as<UnboxedArrayObject>().elements());
-}
-
-/* static */ size_t
-UnboxedArrayObject::objectMovedDuringMinorGC(JSTracer* trc, JSObject* dst, JSObject* src,
- gc::AllocKind allocKind)
-{
- UnboxedArrayObject* ndst = &dst->as<UnboxedArrayObject>();
- UnboxedArrayObject* nsrc = &src->as<UnboxedArrayObject>();
- MOZ_ASSERT(ndst->elements() == nsrc->elements());
-
- Nursery& nursery = trc->runtime()->gc.nursery;
-
- if (!nursery.isInside(nsrc->elements())) {
- nursery.removeMallocedBuffer(nsrc->elements());
- return 0;
- }
-
- // Determine if we can use inline data for the target array. If this is
- // possible, the nursery will have picked an allocation size that is large
- // enough.
- size_t nbytes = nsrc->capacity() * nsrc->elementSize();
- if (offsetOfInlineElements() + nbytes <= GetGCKindBytes(allocKind)) {
- ndst->setInlineElements();
- } else {
- MOZ_ASSERT(allocKind == gc::AllocKind::OBJECT0);
-
- AutoEnterOOMUnsafeRegion oomUnsafe;
- uint8_t* data = nsrc->zone()->pod_malloc<uint8_t>(nbytes);
- if (!data)
- oomUnsafe.crash("Failed to allocate unboxed array elements while tenuring.");
- ndst->elements_ = data;
- }
-
- PodCopy(ndst->elements(), nsrc->elements(), nsrc->initializedLength() * nsrc->elementSize());
-
- // Set a forwarding pointer for the element buffers in case they were
- // preserved on the stack by Ion.
- bool direct = nsrc->capacity() * nsrc->elementSize() >= sizeof(uintptr_t);
- nursery.maybeSetForwardingPointer(trc, nsrc->elements(), ndst->elements(), direct);
-
- return ndst->hasInlineElements() ? 0 : nbytes;
-}
-
-// Possible capacities for unboxed arrays. Some of these capacities might seem
-// a little weird, but were chosen to allow the inline data of objects of each
-// size to be fully utilized for arrays of the various types on both 32 bit and
-// 64 bit platforms.
-//
-// To find the possible inline capacities, the following script was used:
-//
-// var fixedSlotCapacities = [0, 2, 4, 8, 12, 16];
-// var dataSizes = [1, 4, 8];
-// var header32 = 4 * 2 + 4 * 2;
-// var header64 = 8 * 2 + 4 * 2;
-//
-// for (var i = 0; i < fixedSlotCapacities.length; i++) {
-// var nfixed = fixedSlotCapacities[i];
-// var size32 = 4 * 4 + 8 * nfixed - header32;
-// var size64 = 8 * 4 + 8 * nfixed - header64;
-// for (var j = 0; j < dataSizes.length; j++) {
-// print(size32 / dataSizes[j]);
-// print(size64 / dataSizes[j]);
-// }
-// }
-//
-/* static */ const uint32_t
-UnboxedArrayObject::CapacityArray[] = {
- UINT32_MAX, // For CapacityMatchesLengthIndex.
- 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 16, 17, 18, 24, 26, 32, 34, 40, 64, 72, 96, 104, 128, 136,
- 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288,
- 1048576, 2097152, 3145728, 4194304, 5242880, 6291456, 7340032, 8388608, 9437184, 11534336,
- 13631488, 15728640, 17825792, 20971520, 24117248, 27262976, 31457280, 35651584, 40894464,
- 46137344, 52428800, 59768832, MaximumCapacity
-};
-
-static const uint32_t
-Pow2CapacityIndexes[] = {
- 2, // 1
- 3, // 2
- 5, // 4
- 8, // 8
- 13, // 16
- 18, // 32
- 21, // 64
- 25, // 128
- 27, // 256
- 28, // 512
- 29, // 1024
- 30, // 2048
- 31, // 4096
- 32, // 8192
- 33, // 16384
- 34, // 32768
- 35, // 65536
- 36, // 131072
- 37, // 262144
- 38, // 524288
- 39 // 1048576
-};
-
-static const uint32_t MebiCapacityIndex = 39;
-
-/* static */ uint32_t
-UnboxedArrayObject::chooseCapacityIndex(uint32_t capacity, uint32_t length)
-{
- // Note: the structure and behavior of this method follow along with
- // NativeObject::goodAllocated. Changes to the allocation strategy in one
- // should generally be matched by the other.
-
- // Make sure we have enough space to store all possible values for the capacity index.
- // This ought to be a static_assert, but MSVC doesn't like that.
- MOZ_ASSERT(mozilla::ArrayLength(CapacityArray) - 1 <= (CapacityMask >> CapacityShift));
-
- // The caller should have ensured the capacity is possible for an unboxed array.
- MOZ_ASSERT(capacity <= MaximumCapacity);
-
- static const uint32_t Mebi = 1024 * 1024;
-
- if (capacity <= Mebi) {
- capacity = mozilla::RoundUpPow2(capacity);
-
- // When the required capacity is close to the array length, then round
- // up to the array length itself, as for NativeObject.
- if (length >= capacity && capacity > (length / 3) * 2)
- return CapacityMatchesLengthIndex;
-
- if (capacity < MinimumDynamicCapacity)
- capacity = MinimumDynamicCapacity;
-
- uint32_t bit = mozilla::FloorLog2Size(capacity);
- MOZ_ASSERT(capacity == uint32_t(1 << bit));
- MOZ_ASSERT(bit <= 20);
- MOZ_ASSERT(mozilla::ArrayLength(Pow2CapacityIndexes) == 21);
-
- uint32_t index = Pow2CapacityIndexes[bit];
- MOZ_ASSERT(CapacityArray[index] == capacity);
-
- return index;
- }
-
- MOZ_ASSERT(CapacityArray[MebiCapacityIndex] == Mebi);
-
- for (uint32_t i = MebiCapacityIndex + 1;; i++) {
- if (CapacityArray[i] >= capacity)
- return i;
- }
-
- MOZ_CRASH("Invalid capacity");
-}
-
-/* static */ uint32_t
-UnboxedArrayObject::exactCapacityIndex(uint32_t capacity)
-{
- for (size_t i = CapacityMatchesLengthIndex + 1; i < ArrayLength(CapacityArray); i++) {
- if (CapacityArray[i] == capacity)
- return i;
- }
- MOZ_CRASH();
-}
-
-bool
-UnboxedArrayObject::growElements(ExclusiveContext* cx, size_t cap)
-{
- // The caller should have checked if this capacity is possible for an
- // unboxed array, so the only way this call can fail is from OOM.
- MOZ_ASSERT(cap <= MaximumCapacity);
-
- uint32_t oldCapacity = capacity();
- uint32_t newCapacityIndex = chooseCapacityIndex(cap, length());
- uint32_t newCapacity = computeCapacity(newCapacityIndex, length());
-
- MOZ_ASSERT(oldCapacity < cap);
- MOZ_ASSERT(cap <= newCapacity);
-
- // The allocation size computation below cannot have integer overflows.
- JS_STATIC_ASSERT(MaximumCapacity < UINT32_MAX / sizeof(double));
-
- uint8_t* newElements;
- if (hasInlineElements()) {
- newElements = AllocateObjectBuffer<uint8_t>(cx, this, newCapacity * elementSize());
- if (!newElements)
- return false;
- js_memcpy(newElements, elements(), initializedLength() * elementSize());
- } else {
- newElements = ReallocateObjectBuffer<uint8_t>(cx, this, elements(),
- oldCapacity * elementSize(),
- newCapacity * elementSize());
- if (!newElements)
- return false;
- }
-
- elements_ = newElements;
- setCapacityIndex(newCapacityIndex);
-
- return true;
-}
-
-void
-UnboxedArrayObject::shrinkElements(ExclusiveContext* cx, size_t cap)
-{
- if (hasInlineElements())
- return;
-
- uint32_t oldCapacity = capacity();
- uint32_t newCapacityIndex = chooseCapacityIndex(cap, 0);
- uint32_t newCapacity = computeCapacity(newCapacityIndex, 0);
-
- MOZ_ASSERT(cap < oldCapacity);
- MOZ_ASSERT(cap <= newCapacity);
-
- if (newCapacity >= oldCapacity)
- return;
-
- uint8_t* newElements = ReallocateObjectBuffer<uint8_t>(cx, this, elements(),
- oldCapacity * elementSize(),
- newCapacity * elementSize());
- if (!newElements)
- return;
-
- elements_ = newElements;
- setCapacityIndex(newCapacityIndex);
-}
-
-bool
-UnboxedArrayObject::containsProperty(ExclusiveContext* cx, jsid id)
-{
- if (JSID_IS_INT(id) && uint32_t(JSID_TO_INT(id)) < initializedLength())
- return true;
- if (JSID_IS_ATOM(id) && JSID_TO_ATOM(id) == cx->names().length)
- return true;
- return false;
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_lookupProperty(JSContext* cx, HandleObject obj,
- HandleId id, MutableHandleObject objp,
- MutableHandleShape propp)
-{
- if (obj->as<UnboxedArrayObject>().containsProperty(cx, id)) {
- MarkNonNativePropertyFound<CanGC>(propp);
- objp.set(obj);
- return true;
- }
-
- RootedObject proto(cx, obj->staticPrototype());
- if (!proto) {
- objp.set(nullptr);
- propp.set(nullptr);
- return true;
- }
-
- return LookupProperty(cx, proto, id, objp, propp);
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id,
- Handle<PropertyDescriptor> desc,
- ObjectOpResult& result)
-{
- if (JSID_IS_INT(id) && !desc.getter() && !desc.setter() && desc.attributes() == JSPROP_ENUMERATE) {
- UnboxedArrayObject* nobj = &obj->as<UnboxedArrayObject>();
-
- uint32_t index = JSID_TO_INT(id);
- if (index < nobj->initializedLength()) {
- if (nobj->setElement(cx, index, desc.value()))
- return result.succeed();
- } else if (index == nobj->initializedLength() && index < MaximumCapacity) {
- if (nobj->initializedLength() == nobj->capacity()) {
- if (!nobj->growElements(cx, index + 1))
- return false;
- }
- nobj->setInitializedLength(index + 1);
- if (nobj->initElement(cx, index, desc.value())) {
- if (nobj->length() <= index)
- nobj->setLengthInt32(index + 1);
- return result.succeed();
- }
- nobj->setInitializedLengthNoBarrier(index);
- }
- }
-
- if (!convertToNative(cx, obj))
- return false;
-
- return DefineProperty(cx, obj, id, desc, result);
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_hasProperty(JSContext* cx, HandleObject obj, HandleId id, bool* foundp)
-{
- if (obj->as<UnboxedArrayObject>().containsProperty(cx, id)) {
- *foundp = true;
- return true;
- }
-
- RootedObject proto(cx, obj->staticPrototype());
- if (!proto) {
- *foundp = false;
- return true;
- }
-
- return HasProperty(cx, proto, id, foundp);
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_getProperty(JSContext* cx, HandleObject obj, HandleValue receiver,
- HandleId id, MutableHandleValue vp)
-{
- if (obj->as<UnboxedArrayObject>().containsProperty(cx, id)) {
- if (JSID_IS_INT(id))
- vp.set(obj->as<UnboxedArrayObject>().getElement(JSID_TO_INT(id)));
- else
- vp.set(Int32Value(obj->as<UnboxedArrayObject>().length()));
- return true;
- }
-
- RootedObject proto(cx, obj->staticPrototype());
- if (!proto) {
- vp.setUndefined();
- return true;
- }
-
- return GetProperty(cx, proto, receiver, id, vp);
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_setProperty(JSContext* cx, HandleObject obj, HandleId id, HandleValue v,
- HandleValue receiver, ObjectOpResult& result)
-{
- if (obj->as<UnboxedArrayObject>().containsProperty(cx, id)) {
- if (receiver.isObject() && obj == &receiver.toObject()) {
- if (JSID_IS_INT(id)) {
- if (obj->as<UnboxedArrayObject>().setElement(cx, JSID_TO_INT(id), v))
- return result.succeed();
- } else {
- uint32_t len;
- if (!CanonicalizeArrayLengthValue(cx, v, &len))
- return false;
- UnboxedArrayObject* nobj = &obj->as<UnboxedArrayObject>();
- if (len < nobj->initializedLength()) {
- nobj->setInitializedLength(len);
- nobj->shrinkElements(cx, len);
- }
- nobj->setLength(cx, len);
- return result.succeed();
- }
-
- if (!convertToNative(cx, obj))
- return false;
- return SetProperty(cx, obj, id, v, receiver, result);
- }
-
- return SetPropertyByDefining(cx, id, v, receiver, result);
- }
-
- return SetPropertyOnProto(cx, obj, id, v, receiver, result);
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_getOwnPropertyDescriptor(JSContext* cx, HandleObject obj, HandleId id,
- MutableHandle<PropertyDescriptor> desc)
-{
- if (obj->as<UnboxedArrayObject>().containsProperty(cx, id)) {
- if (JSID_IS_INT(id)) {
- desc.value().set(obj->as<UnboxedArrayObject>().getElement(JSID_TO_INT(id)));
- desc.setAttributes(JSPROP_ENUMERATE);
- } else {
- desc.value().set(Int32Value(obj->as<UnboxedArrayObject>().length()));
- desc.setAttributes(JSPROP_PERMANENT);
- }
- desc.object().set(obj);
- return true;
- }
-
- desc.object().set(nullptr);
- return true;
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_deleteProperty(JSContext* cx, HandleObject obj, HandleId id,
- ObjectOpResult& result)
-{
- if (obj->as<UnboxedArrayObject>().containsProperty(cx, id)) {
- size_t initlen = obj->as<UnboxedArrayObject>().initializedLength();
- if (JSID_IS_INT(id) && JSID_TO_INT(id) == int32_t(initlen - 1)) {
- obj->as<UnboxedArrayObject>().setInitializedLength(initlen - 1);
- obj->as<UnboxedArrayObject>().shrinkElements(cx, initlen - 1);
- return result.succeed();
- }
- }
-
- if (!convertToNative(cx, obj))
- return false;
- return DeleteProperty(cx, obj, id, result);
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_watch(JSContext* cx, HandleObject obj, HandleId id, HandleObject callable)
-{
- if (!convertToNative(cx, obj))
- return false;
- return WatchProperty(cx, obj, id, callable);
-}
-
-/* static */ bool
-UnboxedArrayObject::obj_enumerate(JSContext* cx, HandleObject obj, AutoIdVector& properties,
- bool enumerableOnly)
-{
- for (size_t i = 0; i < obj->as<UnboxedArrayObject>().initializedLength(); i++) {
- if (!properties.append(INT_TO_JSID(i)))
- return false;
- }
-
- if (!enumerableOnly && !properties.append(NameToId(cx->names().length)))
- return false;
-
- return true;
-}
-
-static const ClassOps UnboxedArrayObjectClassOps = {
- nullptr, /* addProperty */
- nullptr, /* delProperty */
- nullptr, /* getProperty */
- nullptr, /* setProperty */
- nullptr, /* enumerate */
- nullptr, /* resolve */
- nullptr, /* mayResolve */
- UnboxedArrayObject::finalize,
- nullptr, /* call */
- nullptr, /* hasInstance */
- nullptr, /* construct */
- UnboxedArrayObject::trace,
-};
-
-static const ClassExtension UnboxedArrayObjectClassExtension = {
- nullptr, /* weakmapKeyDelegateOp */
- UnboxedArrayObject::objectMoved
-};
-
-static const ObjectOps UnboxedArrayObjectObjectOps = {
- UnboxedArrayObject::obj_lookupProperty,
- UnboxedArrayObject::obj_defineProperty,
- UnboxedArrayObject::obj_hasProperty,
- UnboxedArrayObject::obj_getProperty,
- UnboxedArrayObject::obj_setProperty,
- UnboxedArrayObject::obj_getOwnPropertyDescriptor,
- UnboxedArrayObject::obj_deleteProperty,
- UnboxedArrayObject::obj_watch,
- nullptr, /* No unwatch needed, as watch() converts the object to native */
- nullptr, /* getElements */
- UnboxedArrayObject::obj_enumerate,
- nullptr /* funToString */
-};
-
-const Class UnboxedArrayObject::class_ = {
- "Array",
- Class::NON_NATIVE |
- JSCLASS_SKIP_NURSERY_FINALIZE |
- JSCLASS_BACKGROUND_FINALIZE,
- &UnboxedArrayObjectClassOps,
- JS_NULL_CLASS_SPEC,
- &UnboxedArrayObjectClassExtension,
- &UnboxedArrayObjectObjectOps
-};
-
-/////////////////////////////////////////////////////////////////////
-// API
-/////////////////////////////////////////////////////////////////////
-
-static inline Value
-NextValue(Handle<GCVector<Value>> values, size_t* valueCursor)
-{
- return values[(*valueCursor)++];
-}
-
-void
-UnboxedArrayObject::fillAfterConvert(ExclusiveContext* cx,
- Handle<GCVector<Value>> values, size_t* valueCursor)
-{
- MOZ_ASSERT(CapacityArray[1] == 0);
- setCapacityIndex(1);
- setInitializedLengthNoBarrier(0);
- setInlineElements();
-
- setLength(cx, NextValue(values, valueCursor).toInt32());
-
- int32_t initlen = NextValue(values, valueCursor).toInt32();
- if (!initlen)
- return;
-
- AutoEnterOOMUnsafeRegion oomUnsafe;
- if (!growElements(cx, initlen))
- oomUnsafe.crash("UnboxedArrayObject::fillAfterConvert");
-
- setInitializedLength(initlen);
-
- for (size_t i = 0; i < size_t(initlen); i++)
- JS_ALWAYS_TRUE(initElement(cx, i, NextValue(values, valueCursor)));
-}
-
-void
-UnboxedPlainObject::fillAfterConvert(ExclusiveContext* cx,
- Handle<GCVector<Value>> values, size_t* valueCursor)
-{
- initExpando();
- memset(data(), 0, layout().size());
- for (size_t i = 0; i < layout().properties().length(); i++)
- JS_ALWAYS_TRUE(setValue(cx, layout().properties()[i], NextValue(values, valueCursor)));
-}
-
-DefineBoxedOrUnboxedFunctor6(SetOrExtendBoxedOrUnboxedDenseElements,
- ExclusiveContext*, JSObject*, uint32_t, const Value*, uint32_t,
- ShouldUpdateTypes);
-
-DenseElementResult
-js::SetOrExtendAnyBoxedOrUnboxedDenseElements(ExclusiveContext* cx, JSObject* obj,
- uint32_t start, const Value* vp, uint32_t count,
- ShouldUpdateTypes updateTypes)
-{
- SetOrExtendBoxedOrUnboxedDenseElementsFunctor functor(cx, obj, start, vp, count, updateTypes);
- return CallBoxedOrUnboxedSpecialization(functor, obj);
-};
-
-DefineBoxedOrUnboxedFunctor5(MoveBoxedOrUnboxedDenseElements,
- JSContext*, JSObject*, uint32_t, uint32_t, uint32_t);
-
-DenseElementResult
-js::MoveAnyBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* obj,
- uint32_t dstStart, uint32_t srcStart, uint32_t length)
-{
- MoveBoxedOrUnboxedDenseElementsFunctor functor(cx, obj, dstStart, srcStart, length);
- return CallBoxedOrUnboxedSpecialization(functor, obj);
-}
-
-DefineBoxedOrUnboxedFunctorPair6(CopyBoxedOrUnboxedDenseElements,
- JSContext*, JSObject*, JSObject*, uint32_t, uint32_t, uint32_t);
-
-DenseElementResult
-js::CopyAnyBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* dst, JSObject* src,
- uint32_t dstStart, uint32_t srcStart, uint32_t length)
-{
- CopyBoxedOrUnboxedDenseElementsFunctor functor(cx, dst, src, dstStart, srcStart, length);
- return CallBoxedOrUnboxedSpecialization(functor, dst, src);
-}
-
-DefineBoxedOrUnboxedFunctor3(SetBoxedOrUnboxedInitializedLength,
- JSContext*, JSObject*, size_t);
-
-void
-js::SetAnyBoxedOrUnboxedInitializedLength(JSContext* cx, JSObject* obj, size_t initlen)
-{
- SetBoxedOrUnboxedInitializedLengthFunctor functor(cx, obj, initlen);
- JS_ALWAYS_TRUE(CallBoxedOrUnboxedSpecialization(functor, obj) == DenseElementResult::Success);
-}
-
-DefineBoxedOrUnboxedFunctor3(EnsureBoxedOrUnboxedDenseElements,
- JSContext*, JSObject*, size_t);
-
-DenseElementResult
-js::EnsureAnyBoxedOrUnboxedDenseElements(JSContext* cx, JSObject* obj, size_t initlen)
-{
- EnsureBoxedOrUnboxedDenseElementsFunctor functor(cx, obj, initlen);
- return CallBoxedOrUnboxedSpecialization(functor, obj);
-}
diff --git a/js/src/vm/UnboxedObject.h b/js/src/vm/UnboxedObject.h
deleted file mode 100644
index 779dd14c7..000000000
--- a/js/src/vm/UnboxedObject.h
+++ /dev/null
@@ -1,524 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- * vim: set ts=8 sts=4 et sw=4 tw=99:
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef vm_UnboxedObject_h
-#define vm_UnboxedObject_h
-
-#include "jsgc.h"
-#include "jsobj.h"
-
-#include "vm/Runtime.h"
-#include "vm/TypeInference.h"
-
-namespace js {
-
-// Memory required for an unboxed value of a given type. Returns zero for types
-// which can't be used for unboxed objects.
-static inline size_t
-UnboxedTypeSize(JSValueType type)
-{
- switch (type) {
- case JSVAL_TYPE_BOOLEAN: return 1;
- case JSVAL_TYPE_INT32: return 4;
- case JSVAL_TYPE_DOUBLE: return 8;
- case JSVAL_TYPE_STRING: return sizeof(void*);
- case JSVAL_TYPE_OBJECT: return sizeof(void*);
- default: return 0;
- }
-}
-
-static inline bool
-UnboxedTypeNeedsPreBarrier(JSValueType type)
-{
- return type == JSVAL_TYPE_STRING || type == JSVAL_TYPE_OBJECT;
-}
-
-static inline bool
-UnboxedTypeNeedsPostBarrier(JSValueType type)
-{
- return type == JSVAL_TYPE_OBJECT;
-}
-
-// Class tracking information specific to unboxed objects.
-class UnboxedLayout : public mozilla::LinkedListElement<UnboxedLayout>
-{
- public:
- struct Property {
- PropertyName* name;
- uint32_t offset;
- JSValueType type;
-
- Property()
- : name(nullptr), offset(UINT32_MAX), type(JSVAL_TYPE_MAGIC)
- {}
- };
-
- typedef Vector<Property, 0, SystemAllocPolicy> PropertyVector;
-
- private:
- // If objects in this group have ever been converted to native objects,
- // these store the corresponding native group and initial shape for such
- // objects. Type information for this object is reflected in nativeGroup.
- GCPtrObjectGroup nativeGroup_;
- GCPtrShape nativeShape_;
-
- // Any script/pc which the associated group is created for.
- GCPtrScript allocationScript_;
- jsbytecode* allocationPc_;
-
- // If nativeGroup is set and this object originally had a TypeNewScript or
- // was keyed to an allocation site, this points to the group which replaced
- // this one. This link is only needed to keep the replacement group from
- // being GC'ed. If it were GC'ed and a new one regenerated later, that new
- // group might have a different allocation kind from this group.
- GCPtrObjectGroup replacementGroup_;
-
- // The following members are only used for unboxed plain objects.
-
- // All properties on objects with this layout, in enumeration order.
- PropertyVector properties_;
-
- // Byte size of the data for objects with this layout.
- size_t size_;
-
- // Any 'new' script information associated with this layout.
- TypeNewScript* newScript_;
-
- // List for use in tracing objects with this layout. This has the same
- // structure as the trace list on a TypeDescr.
- int32_t* traceList_;
-
- // If this layout has been used to construct script or JSON constant
- // objects, this code might be filled in to more quickly fill in objects
- // from an array of values.
- GCPtrJitCode constructorCode_;
-
- // The following members are only used for unboxed arrays.
-
- // The type of array elements.
- JSValueType elementType_;
-
- public:
- UnboxedLayout()
- : nativeGroup_(nullptr), nativeShape_(nullptr),
- allocationScript_(nullptr), allocationPc_(nullptr), replacementGroup_(nullptr),
- size_(0), newScript_(nullptr), traceList_(nullptr), constructorCode_(nullptr),
- elementType_(JSVAL_TYPE_MAGIC)
- {}
-
- bool initProperties(const PropertyVector& properties, size_t size) {
- size_ = size;
- return properties_.appendAll(properties);
- }
-
- void initArray(JSValueType elementType) {
- elementType_ = elementType;
- }
-
- ~UnboxedLayout() {
- if (newScript_)
- newScript_->clear();
- js_delete(newScript_);
- js_free(traceList_);
-
- nativeGroup_.init(nullptr);
- nativeShape_.init(nullptr);
- replacementGroup_.init(nullptr);
- constructorCode_.init(nullptr);
- }
-
- bool isArray() const {
- return elementType_ != JSVAL_TYPE_MAGIC;
- }
-
- void detachFromCompartment();
-
- const PropertyVector& properties() const {
- return properties_;
- }
-
- TypeNewScript* newScript() const {
- return newScript_;
- }
-
- void setNewScript(TypeNewScript* newScript, bool writeBarrier = true);
-
- JSScript* allocationScript() const {
- return allocationScript_;
- }
-
- jsbytecode* allocationPc() const {
- return allocationPc_;
- }
-
- void setAllocationSite(JSScript* script, jsbytecode* pc) {
- allocationScript_ = script;
- allocationPc_ = pc;
- }
-
- const int32_t* traceList() const {
- return traceList_;
- }
-
- void setTraceList(int32_t* traceList) {
- traceList_ = traceList;
- }
-
- const Property* lookup(JSAtom* atom) const {
- for (size_t i = 0; i < properties_.length(); i++) {
- if (properties_[i].name == atom)
- return &properties_[i];
- }
- return nullptr;
- }
-
- const Property* lookup(jsid id) const {
- if (JSID_IS_STRING(id))
- return lookup(JSID_TO_ATOM(id));
- return nullptr;
- }
-
- size_t size() const {
- return size_;
- }
-
- ObjectGroup* nativeGroup() const {
- return nativeGroup_;
- }
-
- Shape* nativeShape() const {
- return nativeShape_;
- }
-
- jit::JitCode* constructorCode() const {
- return constructorCode_;
- }
-
- void setConstructorCode(jit::JitCode* code) {
- constructorCode_ = code;
- }
-
- JSValueType elementType() const {
- return elementType_;
- }
-
- inline gc::AllocKind getAllocKind() const;
-
- void trace(JSTracer* trc);
-
- size_t sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf);
-
- static bool makeNativeGroup(JSContext* cx, ObjectGroup* group);
- static bool makeConstructorCode(JSContext* cx, HandleObjectGroup group);
-};
-
-// Class for expando objects holding extra properties given to an unboxed plain
-// object. These objects behave identically to normal native plain objects, and
-// have a separate Class to distinguish them for memory usage reporting.
-class UnboxedExpandoObject : public NativeObject
-{
- public:
- static const Class class_;
-};
-
-// Class for a plain object using an unboxed representation. The physical
-// layout of these objects is identical to that of an InlineTypedObject, though
-// these objects use an UnboxedLayout instead of a TypeDescr to keep track of
-// how their properties are stored.
-class UnboxedPlainObject : public JSObject
-{
- // Optional object which stores extra properties on this object. This is
- // not automatically barriered to avoid problems if the object is converted
- // to a native. See ensureExpando().
- UnboxedExpandoObject* expando_;
-
- // Start of the inline data, which immediately follows the group and extra properties.
- uint8_t data_[1];
-
- public:
- static const Class class_;
-
- static bool obj_lookupProperty(JSContext* cx, HandleObject obj,
- HandleId id, MutableHandleObject objp,
- MutableHandleShape propp);
-
- static bool obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id,
- Handle<PropertyDescriptor> desc,
- ObjectOpResult& result);
-
- static bool obj_hasProperty(JSContext* cx, HandleObject obj, HandleId id, bool* foundp);
-
- static bool obj_getProperty(JSContext* cx, HandleObject obj, HandleValue receiver,
- HandleId id, MutableHandleValue vp);
-
- static bool obj_setProperty(JSContext* cx, HandleObject obj, HandleId id, HandleValue v,
- HandleValue receiver, ObjectOpResult& result);
-
- static bool obj_getOwnPropertyDescriptor(JSContext* cx, HandleObject obj, HandleId id,
- MutableHandle<PropertyDescriptor> desc);
-
- static bool obj_deleteProperty(JSContext* cx, HandleObject obj, HandleId id,
- ObjectOpResult& result);
-
- static bool obj_enumerate(JSContext* cx, HandleObject obj, AutoIdVector& properties,
- bool enumerableOnly);
- static bool obj_watch(JSContext* cx, HandleObject obj, HandleId id, HandleObject callable);
-
- inline const UnboxedLayout& layout() const;
-
- const UnboxedLayout& layoutDontCheckGeneration() const {
- return group()->unboxedLayoutDontCheckGeneration();
- }
-
- uint8_t* data() {
- return &data_[0];
- }
-
- UnboxedExpandoObject* maybeExpando() const {
- return expando_;
- }
-
- void initExpando() {
- expando_ = nullptr;
- }
-
- // For use during GC.
- JSObject** addressOfExpando() {
- return reinterpret_cast<JSObject**>(&expando_);
- }
-
- bool containsUnboxedOrExpandoProperty(ExclusiveContext* cx, jsid id) const;
-
- static UnboxedExpandoObject* ensureExpando(JSContext* cx, Handle<UnboxedPlainObject*> obj);
-
- bool setValue(ExclusiveContext* cx, const UnboxedLayout::Property& property, const Value& v);
- Value getValue(const UnboxedLayout::Property& property, bool maybeUninitialized = false);
-
- static bool convertToNative(JSContext* cx, JSObject* obj);
- static UnboxedPlainObject* create(ExclusiveContext* cx, HandleObjectGroup group,
- NewObjectKind newKind);
- static JSObject* createWithProperties(ExclusiveContext* cx, HandleObjectGroup group,
- NewObjectKind newKind, IdValuePair* properties);
-
- void fillAfterConvert(ExclusiveContext* cx,
- Handle<GCVector<Value>> values, size_t* valueCursor);
-
- static void trace(JSTracer* trc, JSObject* object);
-
- static size_t offsetOfExpando() {
- return offsetof(UnboxedPlainObject, expando_);
- }
-
- static size_t offsetOfData() {
- return offsetof(UnboxedPlainObject, data_[0]);
- }
-};
-
-inline gc::AllocKind
-UnboxedLayout::getAllocKind() const
-{
- MOZ_ASSERT(size());
- return gc::GetGCObjectKindForBytes(UnboxedPlainObject::offsetOfData() + size());
-}
-
-// Class for an array object using an unboxed representation.
-class UnboxedArrayObject : public JSObject
-{
- // Elements pointer for the object.
- uint8_t* elements_;
-
- // The nominal array length. This always fits in an int32_t.
- uint32_t length_;
-
- // Value indicating the allocated capacity and initialized length of the
- // array. The top CapacityBits bits are an index into CapacityArray, which
- // indicates the elements capacity. The low InitializedLengthBits store the
- // initialized length of the array.
- uint32_t capacityIndexAndInitializedLength_;
-
- // If the elements are inline, they will point here.
- uint8_t inlineElements_[1];
-
- public:
- static const uint32_t CapacityBits = 6;
- static const uint32_t CapacityShift = 26;
-
- static const uint32_t CapacityMask = uint32_t(-1) << CapacityShift;
- static const uint32_t InitializedLengthMask = (1 << CapacityShift) - 1;
-
- static const uint32_t MaximumCapacity = InitializedLengthMask;
- static const uint32_t MinimumDynamicCapacity = 8;
-
- static const uint32_t CapacityArray[];
-
- // Capacity index which indicates the array's length is also its capacity.
- static const uint32_t CapacityMatchesLengthIndex = 0;
-
- private:
- static inline uint32_t computeCapacity(uint32_t index, uint32_t length) {
- if (index == CapacityMatchesLengthIndex)
- return length;
- return CapacityArray[index];
- }
-
- static uint32_t chooseCapacityIndex(uint32_t capacity, uint32_t length);
- static uint32_t exactCapacityIndex(uint32_t capacity);
-
- public:
- static const Class class_;
-
- static bool obj_lookupProperty(JSContext* cx, HandleObject obj,
- HandleId id, MutableHandleObject objp,
- MutableHandleShape propp);
-
- static bool obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id,
- Handle<PropertyDescriptor> desc,
- ObjectOpResult& result);
-
- static bool obj_hasProperty(JSContext* cx, HandleObject obj, HandleId id, bool* foundp);
-
- static bool obj_getProperty(JSContext* cx, HandleObject obj, HandleValue receiver,
- HandleId id, MutableHandleValue vp);
-
- static bool obj_setProperty(JSContext* cx, HandleObject obj, HandleId id, HandleValue v,
- HandleValue receiver, ObjectOpResult& result);
-
- static bool obj_getOwnPropertyDescriptor(JSContext* cx, HandleObject obj, HandleId id,
- MutableHandle<PropertyDescriptor> desc);
-
- static bool obj_deleteProperty(JSContext* cx, HandleObject obj, HandleId id,
- ObjectOpResult& result);
-
- static bool obj_enumerate(JSContext* cx, HandleObject obj, AutoIdVector& properties,
- bool enumerableOnly);
- static bool obj_watch(JSContext* cx, HandleObject obj, HandleId id, HandleObject callable);
-
- inline const UnboxedLayout& layout() const;
-
- const UnboxedLayout& layoutDontCheckGeneration() const {
- return group()->unboxedLayoutDontCheckGeneration();
- }
-
- JSValueType elementType() const {
- return layoutDontCheckGeneration().elementType();
- }
-
- uint32_t elementSize() const {
- return UnboxedTypeSize(elementType());
- }
-
- static bool convertToNative(JSContext* cx, JSObject* obj);
- static UnboxedArrayObject* create(ExclusiveContext* cx, HandleObjectGroup group,
- uint32_t length, NewObjectKind newKind,
- uint32_t maxLength = MaximumCapacity);
-
- static bool convertToNativeWithGroup(ExclusiveContext* cx, JSObject* obj,
- ObjectGroup* group, Shape* shape);
- bool convertInt32ToDouble(ExclusiveContext* cx, ObjectGroup* group);
-
- void fillAfterConvert(ExclusiveContext* cx,
- Handle<GCVector<Value>> values, size_t* valueCursor);
-
- static void trace(JSTracer* trc, JSObject* object);
- static void objectMoved(JSObject* obj, const JSObject* old);
- static void finalize(FreeOp* fop, JSObject* obj);
-
- static size_t objectMovedDuringMinorGC(JSTracer* trc, JSObject* dst, JSObject* src,
- gc::AllocKind allocKind);
-
- uint8_t* elements() {
- return elements_;
- }
-
- bool hasInlineElements() const {
- return elements_ == &inlineElements_[0];
- }
-
- uint32_t length() const {
- return length_;
- }
-
- uint32_t initializedLength() const {
- return capacityIndexAndInitializedLength_ & InitializedLengthMask;
- }
-
- uint32_t capacityIndex() const {
- return (capacityIndexAndInitializedLength_ & CapacityMask) >> CapacityShift;
- }
-
- uint32_t capacity() const {
- return computeCapacity(capacityIndex(), length());
- }
-
- bool containsProperty(ExclusiveContext* cx, jsid id);
-
- bool setElement(ExclusiveContext* cx, size_t index, const Value& v);
- bool initElement(ExclusiveContext* cx, size_t index, const Value& v);
- void initElementNoTypeChange(size_t index, const Value& v);
- Value getElement(size_t index);
-
- template <JSValueType Type> inline bool setElementSpecific(ExclusiveContext* cx, size_t index,
- const Value& v);
- template <JSValueType Type> inline void setElementNoTypeChangeSpecific(size_t index, const Value& v);
- template <JSValueType Type> inline bool initElementSpecific(ExclusiveContext* cx, size_t index,
- const Value& v);
- template <JSValueType Type> inline void initElementNoTypeChangeSpecific(size_t index, const Value& v);
- template <JSValueType Type> inline Value getElementSpecific(size_t index);
- template <JSValueType Type> inline void triggerPreBarrier(size_t index);
-
- bool growElements(ExclusiveContext* cx, size_t cap);
- void shrinkElements(ExclusiveContext* cx, size_t cap);
-
- static uint32_t offsetOfElements() {
- return offsetof(UnboxedArrayObject, elements_);
- }
- static uint32_t offsetOfLength() {
- return offsetof(UnboxedArrayObject, length_);
- }
- static uint32_t offsetOfCapacityIndexAndInitializedLength() {
- return offsetof(UnboxedArrayObject, capacityIndexAndInitializedLength_);
- }
- static uint32_t offsetOfInlineElements() {
- return offsetof(UnboxedArrayObject, inlineElements_);
- }
-
- void setLengthInt32(uint32_t length) {
- MOZ_ASSERT(length <= INT32_MAX);
- length_ = length;
- }
-
- inline void setLength(ExclusiveContext* cx, uint32_t len);
- inline void setInitializedLength(uint32_t initlen);
-
- inline void setInitializedLengthNoBarrier(uint32_t initlen) {
- MOZ_ASSERT(initlen <= InitializedLengthMask);
- capacityIndexAndInitializedLength_ =
- (capacityIndexAndInitializedLength_ & CapacityMask) | initlen;
- }
-
- private:
- void setInlineElements() {
- elements_ = &inlineElements_[0];
- }
-
- void setCapacityIndex(uint32_t index) {
- MOZ_ASSERT(index <= (CapacityMask >> CapacityShift));
- capacityIndexAndInitializedLength_ =
- (index << CapacityShift) | initializedLength();
- }
-};
-
-} // namespace js
-
-namespace JS {
-
-template <>
-struct DeletePolicy<js::UnboxedLayout> : public js::GCManagedDeletePolicy<js::UnboxedLayout>
-{};
-
-} /* namespace JS */
-
-#endif /* vm_UnboxedObject_h */
diff --git a/js/src/wasm/AsmJS.cpp b/js/src/wasm/AsmJS.cpp
index a318d67a9..52b8eeed1 100644
--- a/js/src/wasm/AsmJS.cpp
+++ b/js/src/wasm/AsmJS.cpp
@@ -34,6 +34,7 @@
#include "frontend/Parser.h"
#include "gc/Policy.h"
#include "js/MemoryMetrics.h"
+#include "vm/SelfHosting.h"
#include "vm/StringBuffer.h"
#include "vm/Time.h"
#include "vm/TypedArrayObject.h"
@@ -318,7 +319,7 @@ struct js::AsmJSMetadata : Metadata, AsmJSMetadataCacheablePod
// Function constructor, this will be the first character in the function
// source. Otherwise, it will be the opening parenthesis of the arguments
// list.
- uint32_t preludeStart;
+ uint32_t toStringStart;
uint32_t srcStart;
uint32_t srcBodyStart;
bool strict;
@@ -1759,7 +1760,7 @@ class MOZ_STACK_CLASS ModuleValidator
if (!asmJSMetadata_)
return false;
- asmJSMetadata_->preludeStart = moduleFunctionNode_->pn_funbox->preludeStart;
+ asmJSMetadata_->toStringStart = moduleFunctionNode_->pn_funbox->toStringStart;
asmJSMetadata_->srcStart = moduleFunctionNode_->pn_body->pn_pos.begin;
asmJSMetadata_->srcBodyStart = parser_.tokenStream.currentToken().pos.end;
asmJSMetadata_->strict = parser_.pc->sc()->strict() &&
@@ -3250,10 +3251,9 @@ CheckModuleLevelName(ModuleValidator& m, ParseNode* usepn, PropertyName* name)
static bool
CheckFunctionHead(ModuleValidator& m, ParseNode* fn)
{
- JSFunction* fun = FunctionObject(fn);
if (fn->pn_funbox->hasRest())
return m.fail(fn, "rest args not allowed");
- if (fun->isExprBody())
+ if (fn->pn_funbox->isExprBody())
return m.fail(fn, "expression closures not allowed");
if (fn->pn_funbox->hasDestructuringArgs)
return m.fail(fn, "destructuring args not allowed");
@@ -7051,13 +7051,13 @@ ParseFunction(ModuleValidator& m, ParseNode** fnOut, unsigned* line)
TokenStream& tokenStream = m.tokenStream();
tokenStream.consumeKnownToken(TOK_FUNCTION, TokenStream::Operand);
- uint32_t preludeStart = tokenStream.currentToken().pos.begin;
+ uint32_t toStringStart = tokenStream.currentToken().pos.begin;
*line = tokenStream.srcCoords.lineNum(tokenStream.currentToken().pos.end);
TokenKind tk;
if (!tokenStream.getToken(&tk, TokenStream::Operand))
return false;
- if (tk != TOK_NAME && tk != TOK_YIELD)
+ if (!TokenKindIsPossibleIdentifier(tk))
return false; // The regular parser will throw a SyntaxError, no need to m.fail.
RootedPropertyName name(m.cx(), m.parser().bindingIdentifier(YieldIsName));
@@ -7074,7 +7074,7 @@ ParseFunction(ModuleValidator& m, ParseNode** fnOut, unsigned* line)
ParseContext* outerpc = m.parser().pc;
Directives directives(outerpc);
- FunctionBox* funbox = m.parser().newFunctionBox(fn, fun, preludeStart, directives, NotGenerator,
+ FunctionBox* funbox = m.parser().newFunctionBox(fn, fun, toStringStart, directives, NotGenerator,
SyncFunction, /* tryAnnexB = */ false);
if (!funbox)
return false;
@@ -7466,6 +7466,20 @@ GetDataProperty(JSContext* cx, HandleValue objVal, ImmutablePropertyNamePtr fiel
}
static bool
+HasObjectValueOfMethodPure(JSObject* obj, JSContext* cx)
+{
+ Value v;
+ if (!GetPropertyPure(cx, obj, NameToId(cx->names().valueOf), &v))
+ return false;
+
+ JSFunction* fun;
+ if (!IsFunctionObject(v, &fun))
+ return false;
+
+ return IsSelfHostedFunctionWithName(fun, cx->names().Object_valueOf);
+}
+
+static bool
HasPureCoercion(JSContext* cx, HandleValue v)
{
// Unsigned SIMD types are not allowed in function signatures.
@@ -7479,10 +7493,10 @@ HasPureCoercion(JSContext* cx, HandleValue v)
// coercions are not observable and coercion via ToNumber/ToInt32
// definitely produces NaN/0. We should remove this special case later once
// most apps have been built with newer Emscripten.
- jsid toString = NameToId(cx->names().toString);
if (v.toObject().is<JSFunction>() &&
- HasObjectValueOf(&v.toObject(), cx) &&
- ClassMethodIsNative(cx, &v.toObject().as<JSFunction>(), &JSFunction::class_, toString, fun_toString))
+ HasNoToPrimitiveMethodPure(&v.toObject(), cx) &&
+ HasObjectValueOfMethodPure(&v.toObject(), cx) &&
+ HasNativeMethodPure(&v.toObject(), cx->names().toString, fun_toString, cx))
{
return true;
}
@@ -8057,7 +8071,7 @@ HandleInstantiationFailure(JSContext* cx, CallArgs args, const AsmJSMetadata& me
return false;
}
- uint32_t begin = metadata.preludeStart;
+ uint32_t begin = metadata.toStringStart;
uint32_t end = metadata.srcEndAfterCurly();
Rooted<JSFlatString*> src(cx, source->substringDontDeflate(cx, begin, end));
if (!src)
@@ -8540,7 +8554,7 @@ LookupAsmJSModuleInCache(ExclusiveContext* cx, AsmJSParser& parser, bool* loaded
return true;
// See AsmJSMetadata comment as well as ModuleValidator::init().
- asmJSMetadata->preludeStart = parser.pc->functionBox()->preludeStart;
+ asmJSMetadata->toStringStart = parser.pc->functionBox()->toStringStart;
asmJSMetadata->srcStart = parser.pc->functionBox()->functionNode->pn_body->pn_pos.begin;
asmJSMetadata->srcBodyStart = parser.tokenStream.currentToken().pos.end;
asmJSMetadata->strict = parser.pc->sc()->strict() && !parser.pc->sc()->hasExplicitUseStrict();
@@ -8838,7 +8852,7 @@ js::AsmJSModuleToString(JSContext* cx, HandleFunction fun, bool addParenToLambda
MOZ_ASSERT(IsAsmJSModule(fun));
const AsmJSMetadata& metadata = AsmJSModuleFunctionToModule(fun).metadata().asAsmJS();
- uint32_t begin = metadata.preludeStart;
+ uint32_t begin = metadata.toStringStart;
uint32_t end = metadata.srcEndAfterCurly();
ScriptSource* source = metadata.scriptSource.get();
diff --git a/js/src/wasm/WasmJS.cpp b/js/src/wasm/WasmJS.cpp
index 0b030c844..8d4f575b2 100644
--- a/js/src/wasm/WasmJS.cpp
+++ b/js/src/wasm/WasmJS.cpp
@@ -1659,7 +1659,7 @@ Reject(JSContext* cx, const CompileArgs& args, UniqueChars error, Handle<Promise
if (!cx->getPendingException(&rejectionValue))
return false;
- return promise->reject(cx, rejectionValue);
+ return PromiseObject::reject(cx, promise, rejectionValue);
}
RootedObject stack(cx, promise->allocationSite());
@@ -1687,7 +1687,7 @@ Reject(JSContext* cx, const CompileArgs& args, UniqueChars error, Handle<Promise
return false;
RootedValue rejectionValue(cx, ObjectValue(*errorObj));
- return promise->reject(cx, rejectionValue);
+ return PromiseObject::reject(cx, promise, rejectionValue);
}
static bool
@@ -1699,7 +1699,7 @@ ResolveCompilation(JSContext* cx, Module& module, Handle<PromiseObject*> promise
return false;
RootedValue resolutionValue(cx, ObjectValue(*moduleObj));
- return promise->resolve(cx, resolutionValue);
+ return PromiseObject::resolve(cx, promise, resolutionValue);
}
struct CompileTask : PromiseTask
@@ -1734,7 +1734,7 @@ RejectWithPendingException(JSContext* cx, Handle<PromiseObject*> promise)
if (!GetAndClearException(cx, &rejectionValue))
return false;
- return promise->reject(cx, rejectionValue);
+ return PromiseObject::reject(cx, promise, rejectionValue);
}
static bool
@@ -1822,7 +1822,7 @@ ResolveInstantiation(JSContext* cx, Module& module, HandleObject importObj,
return false;
val = ObjectValue(*resultObj);
- return promise->resolve(cx, val);
+ return PromiseObject::resolve(cx, promise, val);
}
struct InstantiateTask : CompileTask
@@ -1894,7 +1894,7 @@ WebAssembly_instantiate(JSContext* cx, unsigned argc, Value* vp)
return RejectWithPendingException(cx, promise, callArgs);
RootedValue resolutionValue(cx, ObjectValue(*instanceObj));
- if (!promise->resolve(cx, resolutionValue))
+ if (!PromiseObject::resolve(cx, promise, resolutionValue))
return false;
} else {
auto task = cx->make_unique<InstantiateTask>(cx, promise, importObj);
@@ -2018,7 +2018,7 @@ js::InitWebAssemblyClass(JSContext* cx, HandleObject obj)
Handle<GlobalObject*> global = obj.as<GlobalObject>();
MOZ_ASSERT(!global->isStandardClassResolved(JSProto_WebAssembly));
- RootedObject proto(cx, global->getOrCreateObjectPrototype(cx));
+ RootedObject proto(cx, GlobalObject::getOrCreateObjectPrototype(cx, global));
if (!proto)
return nullptr;
diff --git a/js/xpconnect/idl/moz.build b/js/xpconnect/idl/moz.build
index 2438b1a5a..0808d3450 100644
--- a/js/xpconnect/idl/moz.build
+++ b/js/xpconnect/idl/moz.build
@@ -7,7 +7,6 @@
XPIDL_SOURCES += [
'mozIJSSubScriptLoader.idl',
'nsIAddonInterposition.idl',
- 'nsIScriptError.idl',
'nsIXPConnect.idl',
'nsIXPCScriptable.idl',
'xpccomponents.idl',
diff --git a/js/xpconnect/src/XPCComponents.cpp b/js/xpconnect/src/XPCComponents.cpp
index dbb63092e..07ce7460b 100644
--- a/js/xpconnect/src/XPCComponents.cpp
+++ b/js/xpconnect/src/XPCComponents.cpp
@@ -34,9 +34,11 @@
#include "nsDOMClassInfo.h"
#include "ShimInterfaceInfo.h"
#include "nsIAddonInterposition.h"
+#include "nsIScriptError.h"
#include "nsISimpleEnumerator.h"
#include "nsPIDOMWindow.h"
#include "nsGlobalWindow.h"
+#include "nsScriptError.h"
using namespace mozilla;
using namespace JS;
diff --git a/js/xpconnect/src/XPCConvert.cpp b/js/xpconnect/src/XPCConvert.cpp
index 37932b452..77f09f4a5 100644
--- a/js/xpconnect/src/XPCConvert.cpp
+++ b/js/xpconnect/src/XPCConvert.cpp
@@ -11,9 +11,11 @@
#include "xpcprivate.h"
#include "nsIAtom.h"
+#include "nsIScriptError.h"
#include "nsWrapperCache.h"
#include "nsJSUtils.h"
#include "nsQueryObject.h"
+#include "nsScriptError.h"
#include "WrapperFactory.h"
#include "nsWrapperCacheInlines.h"
diff --git a/js/xpconnect/src/XPCModule.h b/js/xpconnect/src/XPCModule.h
index d62764625..506e8945a 100644
--- a/js/xpconnect/src/XPCModule.h
+++ b/js/xpconnect/src/XPCModule.h
@@ -23,7 +23,6 @@
NS_GENERIC_FACTORY_CONSTRUCTOR(nsJSID)
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIXPConnect,
nsXPConnect::GetSingleton)
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsScriptError)
NS_GENERIC_FACTORY_CONSTRUCTOR(mozJSComponentLoader)
NS_GENERIC_FACTORY_CONSTRUCTOR(mozJSSubScriptLoader)
@@ -31,14 +30,12 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(mozJSSubScriptLoader)
NS_DEFINE_NAMED_CID(NS_JS_ID_CID);
NS_DEFINE_NAMED_CID(NS_XPCONNECT_CID);
NS_DEFINE_NAMED_CID(NS_XPCEXCEPTION_CID);
-NS_DEFINE_NAMED_CID(NS_SCRIPTERROR_CID);
NS_DEFINE_NAMED_CID(MOZJSCOMPONENTLOADER_CID);
NS_DEFINE_NAMED_CID(MOZ_JSSUBSCRIPTLOADER_CID);
#define XPCONNECT_CIDENTRIES \
{ &kNS_JS_ID_CID, false, nullptr, nsJSIDConstructor }, \
{ &kNS_XPCONNECT_CID, false, nullptr, nsIXPConnectConstructor }, \
- { &kNS_SCRIPTERROR_CID, false, nullptr, nsScriptErrorConstructor }, \
{ &kMOZJSCOMPONENTLOADER_CID, false, nullptr, mozJSComponentLoaderConstructor },\
{ &kMOZ_JSSUBSCRIPTLOADER_CID, false, nullptr, mozJSSubScriptLoaderConstructor },
@@ -46,7 +43,6 @@ NS_DEFINE_NAMED_CID(MOZ_JSSUBSCRIPTLOADER_CID);
{ XPC_ID_CONTRACTID, &kNS_JS_ID_CID }, \
{ XPC_XPCONNECT_CONTRACTID, &kNS_XPCONNECT_CID }, \
{ XPC_CONTEXT_STACK_CONTRACTID, &kNS_XPCONNECT_CID }, \
- { NS_SCRIPTERROR_CONTRACTID, &kNS_SCRIPTERROR_CID }, \
{ MOZJSCOMPONENTLOADER_CONTRACTID, &kMOZJSCOMPONENTLOADER_CID }, \
{ MOZJSSUBSCRIPTLOADER_CONTRACTID, &kMOZ_JSSUBSCRIPTLOADER_CID },
diff --git a/js/xpconnect/src/XPCWrappedJSClass.cpp b/js/xpconnect/src/XPCWrappedJSClass.cpp
index 2c9fd66bc..e90373e3d 100644
--- a/js/xpconnect/src/XPCWrappedJSClass.cpp
+++ b/js/xpconnect/src/XPCWrappedJSClass.cpp
@@ -10,6 +10,7 @@
#include "jsprf.h"
#include "nsArrayEnumerator.h"
#include "nsContentUtils.h"
+#include "nsIScriptError.h"
#include "nsWrapperCache.h"
#include "AccessCheck.h"
#include "nsJSUtils.h"
diff --git a/js/xpconnect/src/XPCWrappedNativeInfo.cpp b/js/xpconnect/src/XPCWrappedNativeInfo.cpp
index 302454fb5..4b0330af6 100644
--- a/js/xpconnect/src/XPCWrappedNativeInfo.cpp
+++ b/js/xpconnect/src/XPCWrappedNativeInfo.cpp
@@ -11,6 +11,7 @@
#include "mozilla/MemoryReporting.h"
#include "mozilla/XPTInterfaceInfoManager.h"
+#include "nsIScriptError.h"
#include "nsPrintfCString.h"
using namespace JS;
diff --git a/js/xpconnect/src/moz.build b/js/xpconnect/src/moz.build
index 7e787bb56..7d9cd5b37 100644
--- a/js/xpconnect/src/moz.build
+++ b/js/xpconnect/src/moz.build
@@ -14,8 +14,6 @@ EXPORTS += [
UNIFIED_SOURCES += [
'ExportHelpers.cpp',
- 'nsScriptError.cpp',
- 'nsScriptErrorWithStack.cpp',
'nsXPConnect.cpp',
'Sandbox.cpp',
'XPCCallContext.cpp',
@@ -58,6 +56,7 @@ LOCAL_INCLUDES += [
'../wrappers',
'/caps',
'/dom/base',
+ '/dom/bindings',
'/dom/html',
'/dom/svg',
'/dom/workers',
diff --git a/js/xpconnect/src/nsXPConnect.cpp b/js/xpconnect/src/nsXPConnect.cpp
index 0466175b1..0d1a6be0a 100644
--- a/js/xpconnect/src/nsXPConnect.cpp
+++ b/js/xpconnect/src/nsXPConnect.cpp
@@ -33,7 +33,9 @@
#include "nsIObjectOutputStream.h"
#include "nsScriptSecurityManager.h"
#include "nsIPermissionManager.h"
+#include "nsIScriptError.h"
#include "nsContentUtils.h"
+#include "nsScriptError.h"
#include "jsfriendapi.h"
using namespace mozilla;
@@ -170,9 +172,31 @@ nsXPConnect::IsISupportsDescendant(nsIInterfaceInfo* info)
}
void
+xpc::ErrorBase::Init(JSErrorBase* aReport)
+{
+ if (!aReport->filename) {
+ mFileName.SetIsVoid(true);
+ } else {
+ mFileName.AssignWithConversion(aReport->filename);
+ }
+
+ mLineNumber = aReport->lineno;
+ mColumn = aReport->column;
+}
+
+void
+xpc::ErrorNote::Init(JSErrorNotes::Note* aNote)
+{
+ xpc::ErrorBase::Init(aNote);
+
+ ErrorNoteToMessageString(aNote, mErrorMsg);
+}
+
+void
xpc::ErrorReport::Init(JSErrorReport* aReport, const char* aToStringResult,
bool aIsChrome, uint64_t aWindowID)
{
+ xpc::ErrorBase::Init(aReport);
mCategory = aIsChrome ? NS_LITERAL_CSTRING("chrome javascript")
: NS_LITERAL_CSTRING("content javascript");
mWindowID = aWindowID;
@@ -182,12 +206,6 @@ xpc::ErrorReport::Init(JSErrorReport* aReport, const char* aToStringResult,
AppendUTF8toUTF16(aToStringResult, mErrorMsg);
}
- if (!aReport->filename) {
- mFileName.SetIsVoid(true);
- } else {
- mFileName.AssignWithConversion(aReport->filename);
- }
-
mSourceLine.Assign(aReport->linebuf(), aReport->linebufLength());
const JSErrorFormatString* efs = js::GetErrorMessage(nullptr, aReport->errorNumber);
@@ -197,10 +215,20 @@ xpc::ErrorReport::Init(JSErrorReport* aReport, const char* aToStringResult,
mErrorMsgName.AssignASCII(efs->name);
}
- mLineNumber = aReport->lineno;
- mColumn = aReport->column;
mFlags = aReport->flags;
mIsMuted = aReport->isMuted;
+
+ if (aReport->notes) {
+ if (!mNotes.SetLength(aReport->notes->length(), fallible)) {
+ return;
+ }
+
+ size_t i = 0;
+ for (auto&& note : *aReport->notes) {
+ mNotes.ElementAt(i).Init(note.get());
+ i++;
+ }
+ }
}
void
@@ -226,6 +254,59 @@ xpc::ErrorReport::Init(JSContext* aCx, mozilla::dom::Exception* aException,
static LazyLogModule gJSDiagnostics("JSDiagnostics");
void
+xpc::ErrorBase::AppendErrorDetailsTo(nsCString& error)
+{
+ error.Append(NS_LossyConvertUTF16toASCII(mFileName));
+ error.AppendLiteral(", line ");
+ error.AppendInt(mLineNumber, 10);
+ error.AppendLiteral(": ");
+ error.Append(NS_LossyConvertUTF16toASCII(mErrorMsg));
+}
+
+void
+xpc::ErrorNote::LogToStderr()
+{
+ if (!nsContentUtils::DOMWindowDumpEnabled()) {
+ return;
+ }
+
+ nsAutoCString error;
+ error.AssignLiteral("JavaScript note: ");
+ AppendErrorDetailsTo(error);
+
+ fprintf(stderr, "%s\n", error.get());
+ fflush(stderr);
+}
+
+void
+xpc::ErrorReport::LogToStderr()
+{
+ if (!nsContentUtils::DOMWindowDumpEnabled()) {
+ return;
+ }
+
+ nsAutoCString error;
+ error.AssignLiteral("JavaScript ");
+ if (JSREPORT_IS_STRICT(mFlags)) {
+ error.AppendLiteral("strict ");
+ }
+ if (JSREPORT_IS_WARNING(mFlags)) {
+ error.AppendLiteral("warning: ");
+ } else {
+ error.AppendLiteral("error: ");
+ }
+ AppendErrorDetailsTo(error);
+
+ fprintf(stderr, "%s\n", error.get());
+ fflush(stderr);
+
+ for (size_t i = 0, len = mNotes.Length(); i < len; i++) {
+ ErrorNote& note = mNotes[i];
+ note.LogToStderr();
+ }
+}
+
+void
xpc::ErrorReport::LogToConsole()
{
LogToConsoleWithStack(nullptr);
@@ -233,25 +314,7 @@ xpc::ErrorReport::LogToConsole()
void
xpc::ErrorReport::LogToConsoleWithStack(JS::HandleObject aStack)
{
- // Log to stdout.
- if (nsContentUtils::DOMWindowDumpEnabled()) {
- nsAutoCString error;
- error.AssignLiteral("JavaScript ");
- if (JSREPORT_IS_STRICT(mFlags))
- error.AppendLiteral("strict ");
- if (JSREPORT_IS_WARNING(mFlags))
- error.AppendLiteral("warning: ");
- else
- error.AppendLiteral("error: ");
- error.Append(NS_LossyConvertUTF16toASCII(mFileName));
- error.AppendLiteral(", line ");
- error.AppendInt(mLineNumber, 10);
- error.AppendLiteral(": ");
- error.Append(NS_LossyConvertUTF16toASCII(mErrorMsg));
-
- fprintf(stderr, "%s\n", error.get());
- fflush(stderr);
- }
+ LogToStderr();
MOZ_LOG(gJSDiagnostics,
JSREPORT_IS_WARNING(mFlags) ? LogLevel::Warning : LogLevel::Error,
@@ -263,8 +326,9 @@ xpc::ErrorReport::LogToConsoleWithStack(JS::HandleObject aStack)
// mechanisms.
nsCOMPtr<nsIConsoleService> consoleService =
do_GetService(NS_CONSOLESERVICE_CONTRACTID);
+ NS_ENSURE_TRUE_VOID(consoleService);
- nsCOMPtr<nsIScriptError> errorObject;
+ RefPtr<nsScriptErrorBase> errorObject;
if (mWindowID && aStack) {
// Only set stack on messages related to a document
// As we cache messages in the console service,
@@ -275,18 +339,38 @@ xpc::ErrorReport::LogToConsoleWithStack(JS::HandleObject aStack)
errorObject = new nsScriptError();
}
errorObject->SetErrorMessageName(mErrorMsgName);
- NS_ENSURE_TRUE_VOID(consoleService);
nsresult rv = errorObject->InitWithWindowID(mErrorMsg, mFileName, mSourceLine,
mLineNumber, mColumn, mFlags,
mCategory, mWindowID);
NS_ENSURE_SUCCESS_VOID(rv);
+
+ for (size_t i = 0, len = mNotes.Length(); i < len; i++) {
+ ErrorNote& note = mNotes[i];
+
+ nsScriptErrorNote* noteObject = new nsScriptErrorNote();
+ noteObject->Init(note.mErrorMsg, note.mFileName,
+ note.mLineNumber, note.mColumn);
+ errorObject->AddNote(noteObject);
+ }
+
consoleService->LogMessage(errorObject);
}
/* static */
void
+xpc::ErrorNote::ErrorNoteToMessageString(JSErrorNotes::Note* aNote,
+ nsAString& aString)
+{
+ aString.Truncate();
+ if (aNote->message()) {
+ aString.Append(NS_ConvertUTF8toUTF16(aNote->message().c_str()));
+ }
+}
+
+/* static */
+void
xpc::ErrorReport::ErrorReportToMessageString(JSErrorReport* aReport,
nsAString& aString)
{
diff --git a/js/xpconnect/src/xpcprivate.h b/js/xpconnect/src/xpcprivate.h
index 347b406eb..e55cc06e0 100644
--- a/js/xpconnect/src/xpcprivate.h
+++ b/js/xpconnect/src/xpcprivate.h
@@ -128,7 +128,6 @@
#include "MainThreadUtils.h"
#include "nsIConsoleService.h"
-#include "nsIScriptError.h"
#include "nsIException.h"
#include "nsVariant.h"
@@ -2552,77 +2551,6 @@ extern char*
xpc_PrintJSStack(JSContext* cx, bool showArgs, bool showLocals,
bool showThisProps);
-/***************************************************************************/
-
-// Definition of nsScriptError, defined here because we lack a place to put
-// XPCOM objects associated with the JavaScript engine.
-class nsScriptErrorBase : public nsIScriptError {
-public:
- nsScriptErrorBase();
-
- // TODO - do something reasonable on getting null from these babies.
-
- NS_DECL_NSICONSOLEMESSAGE
- NS_DECL_NSISCRIPTERROR
-
-protected:
- virtual ~nsScriptErrorBase();
-
- void
- InitializeOnMainThread();
-
- nsString mMessage;
- nsString mMessageName;
- nsString mSourceName;
- uint32_t mLineNumber;
- nsString mSourceLine;
- uint32_t mColumnNumber;
- uint32_t mFlags;
- nsCString mCategory;
- // mOuterWindowID is set on the main thread from InitializeOnMainThread().
- uint64_t mOuterWindowID;
- uint64_t mInnerWindowID;
- int64_t mTimeStamp;
- // mInitializedOnMainThread and mIsFromPrivateWindow are set on the main
- // thread from InitializeOnMainThread().
- mozilla::Atomic<bool> mInitializedOnMainThread;
- bool mIsFromPrivateWindow;
-};
-
-class nsScriptError final : public nsScriptErrorBase {
-public:
- nsScriptError() {}
- NS_DECL_THREADSAFE_ISUPPORTS
-
-private:
- virtual ~nsScriptError() {}
-};
-
-class nsScriptErrorWithStack : public nsScriptErrorBase {
-public:
- explicit nsScriptErrorWithStack(JS::HandleObject);
-
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsScriptErrorWithStack)
-
- NS_IMETHOD Init(const nsAString& message,
- const nsAString& sourceName,
- const nsAString& sourceLine,
- uint32_t lineNumber,
- uint32_t columnNumber,
- uint32_t flags,
- const char* category) override;
-
- NS_IMETHOD GetStack(JS::MutableHandleValue) override;
- NS_IMETHOD ToString(nsACString& aResult) override;
-
-private:
- virtual ~nsScriptErrorWithStack();
- // Complete stackframe where the error happened.
- // Must be SavedFrame object.
- JS::Heap<JSObject*> mStack;
-};
-
/******************************************************************************
* Handles pre/post script processing.
*/
diff --git a/js/xpconnect/src/xpcpublic.h b/js/xpconnect/src/xpcpublic.h
index fc8670d46..399cd2181 100644
--- a/js/xpconnect/src/xpcpublic.h
+++ b/js/xpconnect/src/xpcpublic.h
@@ -515,13 +515,50 @@ AllowCPOWsInAddon(const nsACString& addonId, bool allow);
bool
ExtraWarningsForSystemJS();
-class ErrorReport {
+class ErrorBase {
+ public:
+ nsString mErrorMsg;
+ nsString mFileName;
+ uint32_t mLineNumber;
+ uint32_t mColumn;
+
+ ErrorBase() : mLineNumber(0)
+ , mColumn(0)
+ {}
+
+ void Init(JSErrorBase* aReport);
+
+ void AppendErrorDetailsTo(nsCString& error);
+};
+
+class ErrorNote : public ErrorBase {
+ public:
+ void Init(JSErrorNotes::Note* aNote);
+
+ // Produce an error event message string from the given JSErrorNotes::Note.
+ // This may produce an empty string if aNote doesn't have a message
+ // attached.
+ static void ErrorNoteToMessageString(JSErrorNotes::Note* aNote,
+ nsAString& aString);
+
+ // Log the error note to the stderr.
+ void LogToStderr();
+};
+
+class ErrorReport : public ErrorBase {
public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(ErrorReport);
+ nsTArray<ErrorNote> mNotes;
+
+ nsCString mCategory;
+ nsString mSourceLine;
+ nsString mErrorMsgName;
+ uint64_t mWindowID;
+ uint32_t mFlags;
+ bool mIsMuted;
+
ErrorReport() : mWindowID(0)
- , mLineNumber(0)
- , mColumn(0)
, mFlags(0)
, mIsMuted(false)
{}
@@ -530,6 +567,7 @@ class ErrorReport {
bool aIsChrome, uint64_t aWindowID);
void Init(JSContext* aCx, mozilla::dom::Exception* aException,
bool aIsChrome, uint64_t aWindowID);
+
// Log the error report to the console. Which console will depend on the
// window id it was initialized with.
void LogToConsole();
@@ -544,18 +582,8 @@ class ErrorReport {
static void ErrorReportToMessageString(JSErrorReport* aReport,
nsAString& aString);
- public:
-
- nsCString mCategory;
- nsString mErrorMsgName;
- nsString mErrorMsg;
- nsString mFileName;
- nsString mSourceLine;
- uint64_t mWindowID;
- uint32_t mLineNumber;
- uint32_t mColumn;
- uint32_t mFlags;
- bool mIsMuted;
+ // Log the error report to the stderr.
+ void LogToStderr();
private:
~ErrorReport() {}
diff --git a/js/xpconnect/tests/chrome/test_bug1041626.xul b/js/xpconnect/tests/chrome/test_bug1041626.xul
index c7c7b7024..11529fbe4 100644
--- a/js/xpconnect/tests/chrome/test_bug1041626.xul
+++ b/js/xpconnect/tests/chrome/test_bug1041626.xul
@@ -28,9 +28,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1041626
ok(Cu.isXrayWrapper(window[0].location), "Location is Xrayed");
let xrayOwnProperties = Object.getOwnPropertyNames(window[0].location);
- todo(xrayOwnProperties.indexOf('toJSON') != -1,
- "dummy toJSON on Location should show up in Xrayable properties");
- xrayOwnProperties.push('toJSON');
let realOwnProperties = Object.getOwnPropertyNames(window[0].wrappedJSObject.location);
ok(realOwnProperties.length > 2);
diff --git a/js/xpconnect/wrappers/WrapperFactory.cpp b/js/xpconnect/wrappers/WrapperFactory.cpp
index 0031fb127..8c9d38788 100644
--- a/js/xpconnect/wrappers/WrapperFactory.cpp
+++ b/js/xpconnect/wrappers/WrapperFactory.cpp
@@ -536,7 +536,7 @@ WrapperFactory::Rewrap(JSContext* cx, HandleObject existing, HandleObject obj)
DEBUG_CheckUnwrapSafety(obj, wrapper, origin, target);
if (existing)
- return Wrapper::Renew(cx, existing, obj, wrapper);
+ return Wrapper::Renew(existing, obj, wrapper);
return Wrapper::New(cx, obj, wrapper);
}
diff --git a/layout/base/ActiveLayerTracker.cpp b/layout/base/ActiveLayerTracker.cpp
index 4f60f82d7..ecee4897a 100644
--- a/layout/base/ActiveLayerTracker.cpp
+++ b/layout/base/ActiveLayerTracker.cpp
@@ -178,7 +178,7 @@ LayerActivityTracker::NotifyExpired(LayerActivity* aObject)
f->SchedulePaint();
}
f->RemoveStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY);
- f->Properties().Delete(LayerActivityProperty());
+ f->DeleteProperty(LayerActivityProperty());
} else {
c->DeleteProperty(nsGkAtoms::LayerActivity);
}
@@ -190,15 +190,13 @@ GetLayerActivity(nsIFrame* aFrame)
if (!aFrame->HasAnyStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY)) {
return nullptr;
}
- FrameProperties properties = aFrame->Properties();
- return properties.Get(LayerActivityProperty());
+ return aFrame->GetProperty(LayerActivityProperty());
}
static LayerActivity*
GetLayerActivityForUpdate(nsIFrame* aFrame)
{
- FrameProperties properties = aFrame->Properties();
- LayerActivity* layerActivity = properties.Get(LayerActivityProperty());
+ LayerActivity* layerActivity = aFrame->GetProperty(LayerActivityProperty());
if (layerActivity) {
gLayerActivityTracker->MarkUsed(layerActivity);
} else {
@@ -208,7 +206,7 @@ GetLayerActivityForUpdate(nsIFrame* aFrame)
layerActivity = new LayerActivity(aFrame);
gLayerActivityTracker->AddObject(layerActivity);
aFrame->AddStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY);
- properties.Set(LayerActivityProperty(), layerActivity);
+ aFrame->SetProperty(LayerActivityProperty(), layerActivity);
}
return layerActivity;
}
@@ -225,8 +223,7 @@ ActiveLayerTracker::TransferActivityToContent(nsIFrame* aFrame, nsIContent* aCon
if (!aFrame->HasAnyStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY)) {
return;
}
- FrameProperties properties = aFrame->Properties();
- LayerActivity* layerActivity = properties.Remove(LayerActivityProperty());
+ LayerActivity* layerActivity = aFrame->RemoveProperty(LayerActivityProperty());
aFrame->RemoveStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY);
if (!layerActivity) {
return;
@@ -248,7 +245,7 @@ ActiveLayerTracker::TransferActivityToFrame(nsIContent* aContent, nsIFrame* aFra
layerActivity->mContent = nullptr;
layerActivity->mFrame = aFrame;
aFrame->AddStateBits(NS_FRAME_HAS_LAYER_ACTIVITY_PROPERTY);
- aFrame->Properties().Set(LayerActivityProperty(), layerActivity);
+ aFrame->SetProperty(LayerActivityProperty(), layerActivity);
}
static void
diff --git a/layout/base/FrameLayerBuilder.cpp b/layout/base/FrameLayerBuilder.cpp
index 9aaa28fb5..934d108e0 100644
--- a/layout/base/FrameLayerBuilder.cpp
+++ b/layout/base/FrameLayerBuilder.cpp
@@ -165,10 +165,10 @@ FrameLayerBuilder::DisplayItemData::AddFrame(nsIFrame* aFrame)
mFrameList.AppendElement(aFrame);
nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(FrameLayerBuilder::LayerManagerDataProperty());
+ aFrame->GetProperty(FrameLayerBuilder::LayerManagerDataProperty());
if (!array) {
array = new nsTArray<DisplayItemData*>();
- aFrame->Properties().Set(FrameLayerBuilder::LayerManagerDataProperty(), array);
+ aFrame->SetProperty(FrameLayerBuilder::LayerManagerDataProperty(), array);
}
array->AppendElement(this);
}
@@ -181,7 +181,7 @@ FrameLayerBuilder::DisplayItemData::RemoveFrame(nsIFrame* aFrame)
MOZ_RELEASE_ASSERT(result, "Can't remove a frame that wasn't added!");
nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(FrameLayerBuilder::LayerManagerDataProperty());
+ aFrame->GetProperty(FrameLayerBuilder::LayerManagerDataProperty());
MOZ_RELEASE_ASSERT(array, "Must be already stored on the frame!");
array->RemoveElement(this);
}
@@ -268,12 +268,17 @@ FrameLayerBuilder::DisplayItemData::~DisplayItemData()
continue;
}
nsTArray<DisplayItemData*> *array =
- reinterpret_cast<nsTArray<DisplayItemData*>*>(frame->Properties().Get(LayerManagerDataProperty()));
+ reinterpret_cast<nsTArray<DisplayItemData*>*>(frame->GetProperty(LayerManagerDataProperty()));
array->RemoveElement(this);
}
- MOZ_RELEASE_ASSERT(sAliveDisplayItemDatas && sAliveDisplayItemDatas->Contains(this));
- sAliveDisplayItemDatas->RemoveEntry(this);
+ MOZ_RELEASE_ASSERT(sAliveDisplayItemDatas);
+ nsPtrHashKey<mozilla::FrameLayerBuilder::DisplayItemData>* entry
+ = sAliveDisplayItemDatas->GetEntry(this);
+ MOZ_RELEASE_ASSERT(entry);
+
+ sAliveDisplayItemDatas->RemoveEntry(entry);
+
if (sAliveDisplayItemDatas->Count() == 0) {
delete sAliveDisplayItemDatas;
sAliveDisplayItemDatas = nullptr;
@@ -390,8 +395,7 @@ public:
/* static */ void
FrameLayerBuilder::DestroyDisplayItemDataFor(nsIFrame* aFrame)
{
- FrameProperties props = aFrame->Properties();
- props.Delete(LayerManagerDataProperty());
+ aFrame->DeleteProperty(LayerManagerDataProperty());
}
struct AssignedDisplayItem
@@ -1823,7 +1827,7 @@ FrameLayerBuilder::DisplayItemData*
FrameLayerBuilder::GetDisplayItemData(nsIFrame* aFrame, uint32_t aKey)
{
const nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(LayerManagerDataProperty());
+ aFrame->GetProperty(LayerManagerDataProperty());
if (array) {
for (uint32_t i = 0; i < array->Length(); i++) {
DisplayItemData* item = AssertDisplayItemData(array->ElementAt(i));
@@ -2052,7 +2056,7 @@ FrameLayerBuilder::GetDisplayItemDataForManager(nsDisplayItem* aItem,
LayerManager* aManager)
{
const nsTArray<DisplayItemData*>* array =
- aItem->Frame()->Properties().Get(LayerManagerDataProperty());
+ aItem->Frame()->GetProperty(LayerManagerDataProperty());
if (array) {
for (uint32_t i = 0; i < array->Length(); i++) {
DisplayItemData* item = AssertDisplayItemData(array->ElementAt(i));
@@ -2069,7 +2073,7 @@ bool
FrameLayerBuilder::HasRetainedDataFor(nsIFrame* aFrame, uint32_t aDisplayItemKey)
{
const nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(LayerManagerDataProperty());
+ aFrame->GetProperty(LayerManagerDataProperty());
if (array) {
for (uint32_t i = 0; i < array->Length(); i++) {
if (AssertDisplayItemData(array->ElementAt(i))->mDisplayItemKey == aDisplayItemKey) {
@@ -2084,7 +2088,7 @@ void
FrameLayerBuilder::IterateRetainedDataFor(nsIFrame* aFrame, DisplayItemDataCallback aCallback)
{
const nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(LayerManagerDataProperty());
+ aFrame->GetProperty(LayerManagerDataProperty());
if (!array) {
return;
}
@@ -2151,7 +2155,7 @@ FrameLayerBuilder::ClearCachedGeometry(nsDisplayItem* aItem)
FrameLayerBuilder::GetDebugOldLayerFor(nsIFrame* aFrame, uint32_t aDisplayItemKey)
{
const nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(LayerManagerDataProperty());
+ aFrame->GetProperty(LayerManagerDataProperty());
if (!array) {
return nullptr;
@@ -2171,7 +2175,7 @@ FrameLayerBuilder::GetDebugOldLayerFor(nsIFrame* aFrame, uint32_t aDisplayItemKe
FrameLayerBuilder::GetDebugSingleOldPaintedLayerForFrame(nsIFrame* aFrame)
{
const nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(LayerManagerDataProperty());
+ aFrame->GetProperty(LayerManagerDataProperty());
if (!array) {
return nullptr;
@@ -5656,7 +5660,7 @@ FrameLayerBuilder::InvalidateAllLayers(LayerManager* aManager)
FrameLayerBuilder::InvalidateAllLayersForFrame(nsIFrame *aFrame)
{
const nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(LayerManagerDataProperty());
+ aFrame->GetProperty(LayerManagerDataProperty());
if (array) {
for (uint32_t i = 0; i < array->Length(); i++) {
AssertDisplayItemData(array->ElementAt(i))->mParent->mInvalidateAllLayers = true;
@@ -5673,7 +5677,7 @@ FrameLayerBuilder::GetDedicatedLayer(nsIFrame* aFrame, uint32_t aDisplayItemKey)
// in the secondary manager
const nsTArray<DisplayItemData*>* array =
- aFrame->Properties().Get(LayerManagerDataProperty());
+ aFrame->GetProperty(LayerManagerDataProperty());
if (array) {
for (uint32_t i = 0; i < array->Length(); i++) {
DisplayItemData *element = AssertDisplayItemData(array->ElementAt(i));
@@ -5729,7 +5733,7 @@ FrameLayerBuilder::GetPaintedLayerScaleForFrame(nsIFrame* aFrame)
}
const nsTArray<DisplayItemData*>* array =
- f->Properties().Get(LayerManagerDataProperty());
+ f->GetProperty(LayerManagerDataProperty());
if (!array) {
continue;
}
@@ -6165,9 +6169,8 @@ FrameLayerBuilder::GetMostRecentGeometry(nsDisplayItem* aItem)
typedef nsTArray<DisplayItemData*> DataArray;
// Retrieve the array of DisplayItemData associated with our frame.
- FrameProperties properties = aItem->Frame()->Properties();
const DataArray* dataArray =
- properties.Get(LayerManagerDataProperty());
+ aItem->Frame()->GetProperty(LayerManagerDataProperty());
if (!dataArray) {
return nullptr;
}
diff --git a/layout/base/FramePropertyTable.h b/layout/base/FrameProperties.h
index e9847efbf..3884b07bd 100644
--- a/layout/base/FramePropertyTable.h
+++ b/layout/base/FrameProperties.h
@@ -3,15 +3,15 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-#ifndef FRAMEPROPERTYTABLE_H_
-#define FRAMEPROPERTYTABLE_H_
+#ifndef FRAMEPROPERTIES_H_
+#define FRAMEPROPERTIES_H_
+#include "mozilla/DebugOnly.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/TypeTraits.h"
#include "mozilla/Unused.h"
#include "nsTArray.h"
-#include "nsTHashtable.h"
-#include "nsHashKeys.h"
+#include "nsThreadUtils.h"
class nsIFrame;
@@ -62,7 +62,7 @@ protected:
*
* To use this class, declare a global (i.e., file, class or function-scope
* static member) FramePropertyDescriptor and pass its address as
- * aProperty in the FramePropertyTable methods.
+ * aProperty in the FrameProperties methods.
*/
template<typename T>
struct FramePropertyDescriptor : public FramePropertyDescriptorUntyped
@@ -131,7 +131,7 @@ struct FramePropertyTypeHelper<SmallValueHolder<T>>
}
/**
- * The FramePropertyTable is optimized for storing 0 or 1 properties on
+ * The FrameProperties class is optimized for storing 0 or 1 properties on
* a given frame. Storing very large numbers of properties on a single
* frame will not be efficient.
*
@@ -141,7 +141,8 @@ struct FramePropertyTypeHelper<SmallValueHolder<T>>
* Of course, the destructor function (if any) must handle such values
* correctly.
*/
-class FramePropertyTable {
+class FrameProperties
+{
public:
template<typename T>
using Descriptor = const FramePropertyDescriptor<T>*;
@@ -150,32 +151,36 @@ public:
template<typename T>
using PropertyType = typename detail::FramePropertyTypeHelper<T>::Type;
- FramePropertyTable() : mLastFrame(nullptr), mLastEntry(nullptr)
+ explicit FrameProperties()
{
}
- ~FramePropertyTable()
+
+ ~FrameProperties()
{
- DeleteAll();
+ MOZ_ASSERT(mProperties.Length() == 0, "forgot to delete properties");
}
/**
- * Set a property value on a frame. This requires one hashtable
- * lookup (using the frame as the key) and a linear search through
- * the properties of that frame. Any existing value for the property
+ * Return true if we have no properties, otherwise return false.
+ */
+ bool IsEmpty() const { return mProperties.IsEmpty(); }
+
+ /**
+ * Set a property value. This requires a linear search through
+ * the properties of the frame. Any existing value for the property
* is destroyed.
*/
template<typename T>
- void Set(const nsIFrame* aFrame, Descriptor<T> aProperty,
- PropertyType<T> aValue)
+ void Set(Descriptor<T> aProperty, PropertyType<T> aValue,
+ const nsIFrame* aFrame)
{
void* ptr = ReinterpretHelper<T>::ToPointer(aValue);
- SetInternal(aFrame, aProperty, ptr);
+ SetInternal(aProperty, ptr, aFrame);
}
/**
- * @return true if @aProperty is set for @aFrame. This requires one hashtable
- * lookup (using the frame as the key) and a linear search through the
- * properties of that frame.
+ * @return true if @aProperty is set. This requires a linear search through the
+ * properties of the frame.
*
* In most cases, this shouldn't be used outside of assertions, because if
* you're doing a lookup anyway it would be far more efficient to call Get()
@@ -190,17 +195,14 @@ public:
* an existing value for the frame property.
*/
template<typename T>
- bool Has(const nsIFrame* aFrame, Descriptor<T> aProperty)
+ bool Has(Descriptor<T> aProperty) const
{
- bool foundResult = false;
- mozilla::Unused << GetInternal(aFrame, aProperty, &foundResult);
- return foundResult;
+ return mProperties.IndexOf(aProperty, 0, PropertyComparator()) != nsTArray<PropertyValue>::NoIndex;
}
/**
- * Get a property value for a frame. This requires one hashtable
- * lookup (using the frame as the key) and a linear search through
- * the properties of that frame. If the frame has no such property,
+ * Get a property value. This requires a linear search through
+ * the properties of the frame. If the frame has no such property,
* returns zero-filled result, which means null for pointers and
* zero for integers and floating point types.
* @param aFoundResult if non-null, receives a value 'true' iff
@@ -209,16 +211,15 @@ public:
* 'property value is null'.
*/
template<typename T>
- PropertyType<T> Get(const nsIFrame* aFrame, Descriptor<T> aProperty,
- bool* aFoundResult = nullptr)
+ PropertyType<T> Get(Descriptor<T> aProperty,
+ bool* aFoundResult = nullptr) const
{
- void* ptr = GetInternal(aFrame, aProperty, aFoundResult);
+ void* ptr = GetInternal(aProperty, aFoundResult);
return ReinterpretHelper<T>::FromPointer(ptr);
}
/**
- * Remove a property value for a frame. This requires one hashtable
- * lookup (using the frame as the key) and a linear search through
- * the properties of that frame. The old property value is returned
+ * Remove a property value. This requires a linear search through
+ * the properties of the frame. The old property value is returned
* (and not destroyed). If the frame has no such property,
* returns zero-filled result, which means null for pointers and
* zero for integers and floating point types.
@@ -228,46 +229,85 @@ public:
* 'property value is null'.
*/
template<typename T>
- PropertyType<T> Remove(const nsIFrame* aFrame, Descriptor<T> aProperty,
+ PropertyType<T> Remove(Descriptor<T> aProperty,
bool* aFoundResult = nullptr)
{
- void* ptr = RemoveInternal(aFrame, aProperty, aFoundResult);
+ void* ptr = RemoveInternal(aProperty, aFoundResult);
return ReinterpretHelper<T>::FromPointer(ptr);
}
/**
- * Remove and destroy a property value for a frame. This requires one
- * hashtable lookup (using the frame as the key) and a linear search
- * through the properties of that frame. If the frame has no such
+ * Remove and destroy a property value. This requires a linear search
+ * through the properties of the frame. If the frame has no such
* property, nothing happens.
*/
template<typename T>
- void Delete(const nsIFrame* aFrame, Descriptor<T> aProperty)
+ void Delete(Descriptor<T> aProperty, const nsIFrame* aFrame)
{
- DeleteInternal(aFrame, aProperty);
+ DeleteInternal(aProperty, aFrame);
}
+
/**
- * Remove and destroy all property values for a frame. This requires one
- * hashtable lookup (using the frame as the key).
+ * Call @aFunction for each property or until @aFunction returns false.
*/
- void DeleteAllFor(const nsIFrame* aFrame);
+ template<class F>
+ void ForEach(F aFunction) const
+ {
+#ifdef DEBUG
+ size_t len = mProperties.Length();
+#endif
+ for (const auto& prop : mProperties) {
+ bool shouldContinue = aFunction(prop.mProperty, prop.mValue);
+#ifdef DEBUG
+ MOZ_ASSERT(len == mProperties.Length(),
+ "frame property list was modified by ForEach callback!");
+#endif
+ if (!shouldContinue) {
+ return;
+ }
+ }
+ }
+
/**
- * Remove and destroy all property values for all frames.
+ * Remove and destroy all property values for the frame.
*/
- void DeleteAll();
+ void DeleteAll(const nsIFrame* aFrame) {
+ mozilla::DebugOnly<size_t> len = mProperties.Length();
+ for (auto& prop : mProperties) {
+ prop.DestroyValueFor(aFrame);
+ MOZ_ASSERT(mProperties.Length() == len);
+ }
+ mProperties.Clear();
+ }
- size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+ size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const {
+ // We currently report only the shallow size of the mProperties array.
+ // As for the PropertyValue entries: we don't need to measure the mProperty
+ // field of because it always points to static memory, and we can't measure
+ // mValue because the type is opaque.
+ // XXX Can we do better, e.g. with a method on the descriptor?
+ return mProperties.ShallowSizeOfExcludingThis(aMallocSizeOf);
+ }
-protected:
- void SetInternal(const nsIFrame* aFrame, UntypedDescriptor aProperty,
- void* aValue);
+private:
+ friend class ::nsIFrame;
- void* GetInternal(const nsIFrame* aFrame, UntypedDescriptor aProperty,
- bool* aFoundResult);
+ // Prevent copying of FrameProperties; we should always return/pass around
+ // references to it, not copies!
+ FrameProperties(const FrameProperties&) = delete;
+ FrameProperties& operator=(const FrameProperties&) = delete;
- void* RemoveInternal(const nsIFrame* aFrame, UntypedDescriptor aProperty,
- bool* aFoundResult);
+ inline void
+ SetInternal(UntypedDescriptor aProperty, void* aValue,
+ const nsIFrame* aFrame);
- void DeleteInternal(const nsIFrame* aFrame, UntypedDescriptor aProperty);
+ inline void*
+ GetInternal(UntypedDescriptor aProperty, bool* aFoundResult) const;
+
+ inline void*
+ RemoveInternal(UntypedDescriptor aProperty, bool* aFoundResult);
+
+ inline void
+ DeleteInternal(UntypedDescriptor aProperty, const nsIFrame* aFrame);
template<typename T>
struct ReinterpretHelper
@@ -305,21 +345,13 @@ protected:
};
/**
- * Stores a property descriptor/value pair. It can also be used to
- * store an nsTArray of PropertyValues.
+ * Stores a property descriptor/value pair.
*/
struct PropertyValue {
PropertyValue() : mProperty(nullptr), mValue(nullptr) {}
PropertyValue(UntypedDescriptor aProperty, void* aValue)
: mProperty(aProperty), mValue(aValue) {}
- bool IsArray() { return !mProperty && mValue; }
- nsTArray<PropertyValue>* ToArray()
- {
- NS_ASSERTION(IsArray(), "Must be array");
- return reinterpret_cast<nsTArray<PropertyValue>*>(&mValue);
- }
-
void DestroyValueFor(const nsIFrame* aFrame) {
if (mProperty->mDestructor) {
mProperty->mDestructor(mValue);
@@ -328,20 +360,6 @@ protected:
}
}
- size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) {
- size_t n = 0;
- // We don't need to measure mProperty because it always points to static
- // memory. As for mValue: if it's a single value we can't measure it,
- // because the type is opaque; if it's an array, we measure the array
- // storage, but we can't measure the individual values, again because
- // their types are opaque.
- if (IsArray()) {
- nsTArray<PropertyValue>* array = ToArray();
- n += array->ShallowSizeOfExcludingThis(aMallocSizeOf);
- }
- return n;
- }
-
UntypedDescriptor mProperty;
void* mValue;
};
@@ -363,80 +381,86 @@ protected:
}
};
- /**
- * Our hashtable entry. The key is an nsIFrame*, the value is a
- * PropertyValue representing one or more property/value pairs.
- */
- class Entry : public nsPtrHashKey<const nsIFrame>
- {
- public:
- explicit Entry(KeyTypePointer aKey) : nsPtrHashKey<const nsIFrame>(aKey) {}
- Entry(const Entry &toCopy) :
- nsPtrHashKey<const nsIFrame>(toCopy), mProp(toCopy.mProp) {}
-
- size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) {
- return mProp.SizeOfExcludingThis(aMallocSizeOf);
- }
-
- PropertyValue mProp;
- };
-
- static void DeleteAllForEntry(Entry* aEntry);
-
- // Note that mLastEntry points into mEntries, so we need to be careful about
- // not triggering a resize of mEntries, e.g. use RawRemoveEntry() instead of
- // RemoveEntry() in some places.
- nsTHashtable<Entry> mEntries;
- const nsIFrame* mLastFrame;
- Entry* mLastEntry;
+ nsTArray<PropertyValue> mProperties;
};
/**
* This class encapsulates the properties of a frame.
*/
-class FrameProperties {
-public:
- template<typename T> using Descriptor = FramePropertyTable::Descriptor<T>;
- template<typename T> using PropertyType = FramePropertyTable::PropertyType<T>;
-
- FrameProperties(FramePropertyTable* aTable, const nsIFrame* aFrame)
- : mTable(aTable), mFrame(aFrame) {}
+inline void*
+FrameProperties::GetInternal(UntypedDescriptor aProperty,
+ bool* aFoundResult) const
+{
+ MOZ_ASSERT(aProperty, "Null property?");
- template<typename T>
- void Set(Descriptor<T> aProperty, PropertyType<T> aValue) const
- {
- mTable->Set(mFrame, aProperty, aValue);
+ auto index = mProperties.IndexOf(aProperty, 0, PropertyComparator());
+ if (index == nsTArray<PropertyValue>::NoIndex) {
+ if (aFoundResult) {
+ *aFoundResult = false;
+ }
+ return nullptr;
}
- template<typename T>
- bool Has(Descriptor<T> aProperty) const
- {
- return mTable->Has(mFrame, aProperty);
+ if (aFoundResult) {
+ *aFoundResult = true;
}
- template<typename T>
- PropertyType<T> Get(Descriptor<T> aProperty,
- bool* aFoundResult = nullptr) const
- {
- return mTable->Get(mFrame, aProperty, aFoundResult);
- }
- template<typename T>
- PropertyType<T> Remove(Descriptor<T> aProperty,
- bool* aFoundResult = nullptr) const
- {
- return mTable->Remove(mFrame, aProperty, aFoundResult);
+return mProperties.ElementAt(index).mValue;
+}
+
+inline void
+FrameProperties::SetInternal(UntypedDescriptor aProperty, void* aValue,
+ const nsIFrame* aFrame)
+{
+ MOZ_ASSERT(aProperty, "Null property?");
+
+ auto index = mProperties.IndexOf(aProperty, 0, PropertyComparator());
+ if (index != nsTArray<PropertyValue>::NoIndex) {
+ PropertyValue* pv = &mProperties.ElementAt(index);
+ pv->DestroyValueFor(aFrame);
+ pv->mValue = aValue;
+ return;
}
- template<typename T>
- void Delete(Descriptor<T> aProperty)
- {
- mTable->Delete(mFrame, aProperty);
+
+ mProperties.AppendElement(PropertyValue(aProperty, aValue));
+}
+
+inline void*
+FrameProperties::RemoveInternal(UntypedDescriptor aProperty, bool* aFoundResult)
+{
+ MOZ_ASSERT(aProperty, "Null property?");
+
+ auto index = mProperties.IndexOf(aProperty, 0, PropertyComparator());
+ if (index == nsTArray<PropertyValue>::NoIndex) {
+ if (aFoundResult) {
+ *aFoundResult = false;
+ }
+ return nullptr;
}
-private:
- FramePropertyTable* mTable;
- const nsIFrame* mFrame;
-};
+if (aFoundResult) {
+ *aFoundResult = true;
+}
+
+void* result = mProperties.ElementAt(index).mValue;
+mProperties.RemoveElementAt(index);
+
+return result;
+}
+
+inline void
+FrameProperties::DeleteInternal(UntypedDescriptor aProperty,
+ const nsIFrame* aFrame)
+{
+ MOZ_ASSERT(aProperty, "Null property?");
+
+ auto index = mProperties.IndexOf(aProperty, 0, PropertyComparator());
+ if (index != nsTArray<PropertyValue>::NoIndex) {
+ mProperties.ElementAt(index).DestroyValueFor(aFrame);
+ mProperties.RemoveElementAt(index);
+ }
+}
} // namespace mozilla
-#endif /* FRAMEPROPERTYTABLE_H_ */
+#endif /* FRAMEPROPERTIES_H_ */
diff --git a/layout/base/FramePropertyTable.cpp b/layout/base/FramePropertyTable.cpp
deleted file mode 100644
index 0fd9b1c37..000000000
--- a/layout/base/FramePropertyTable.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "FramePropertyTable.h"
-
-#include "mozilla/MemoryReporting.h"
-
-namespace mozilla {
-
-void
-FramePropertyTable::SetInternal(
- const nsIFrame* aFrame, UntypedDescriptor aProperty, void* aValue)
-{
- NS_ASSERTION(aFrame, "Null frame?");
- NS_ASSERTION(aProperty, "Null property?");
-
- if (mLastFrame != aFrame || !mLastEntry) {
- mLastFrame = aFrame;
- mLastEntry = mEntries.PutEntry(aFrame);
- }
- Entry* entry = mLastEntry;
-
- if (!entry->mProp.IsArray()) {
- if (!entry->mProp.mProperty) {
- // Empty entry, so we can just store our property in the empty slot
- entry->mProp.mProperty = aProperty;
- entry->mProp.mValue = aValue;
- return;
- }
- if (entry->mProp.mProperty == aProperty) {
- // Just overwrite the current value
- entry->mProp.DestroyValueFor(aFrame);
- entry->mProp.mValue = aValue;
- return;
- }
-
- // We need to expand the single current entry to an array
- PropertyValue current = entry->mProp;
- entry->mProp.mProperty = nullptr;
- static_assert(sizeof(nsTArray<PropertyValue>) <= sizeof(void *),
- "Property array must fit entirely within entry->mProp.mValue");
- new (&entry->mProp.mValue) nsTArray<PropertyValue>(4);
- entry->mProp.ToArray()->AppendElement(current);
- }
-
- nsTArray<PropertyValue>* array = entry->mProp.ToArray();
- nsTArray<PropertyValue>::index_type index =
- array->IndexOf(aProperty, 0, PropertyComparator());
- if (index != nsTArray<PropertyValue>::NoIndex) {
- PropertyValue* pv = &array->ElementAt(index);
- pv->DestroyValueFor(aFrame);
- pv->mValue = aValue;
- return;
- }
-
- array->AppendElement(PropertyValue(aProperty, aValue));
-}
-
-void*
-FramePropertyTable::GetInternal(
- const nsIFrame* aFrame, UntypedDescriptor aProperty, bool* aFoundResult)
-{
- NS_ASSERTION(aFrame, "Null frame?");
- NS_ASSERTION(aProperty, "Null property?");
-
- if (aFoundResult) {
- *aFoundResult = false;
- }
-
- if (mLastFrame != aFrame) {
- mLastFrame = aFrame;
- mLastEntry = mEntries.GetEntry(mLastFrame);
- }
- Entry* entry = mLastEntry;
- if (!entry)
- return nullptr;
-
- if (entry->mProp.mProperty == aProperty) {
- if (aFoundResult) {
- *aFoundResult = true;
- }
- return entry->mProp.mValue;
- }
- if (!entry->mProp.IsArray()) {
- // There's just one property and it's not the one we want, bail
- return nullptr;
- }
-
- nsTArray<PropertyValue>* array = entry->mProp.ToArray();
- nsTArray<PropertyValue>::index_type index =
- array->IndexOf(aProperty, 0, PropertyComparator());
- if (index == nsTArray<PropertyValue>::NoIndex)
- return nullptr;
-
- if (aFoundResult) {
- *aFoundResult = true;
- }
-
- return array->ElementAt(index).mValue;
-}
-
-void*
-FramePropertyTable::RemoveInternal(
- const nsIFrame* aFrame, UntypedDescriptor aProperty, bool* aFoundResult)
-{
- NS_ASSERTION(aFrame, "Null frame?");
- NS_ASSERTION(aProperty, "Null property?");
-
- if (aFoundResult) {
- *aFoundResult = false;
- }
-
- if (mLastFrame != aFrame) {
- mLastFrame = aFrame;
- mLastEntry = mEntries.GetEntry(aFrame);
- }
- Entry* entry = mLastEntry;
- if (!entry)
- return nullptr;
-
- if (entry->mProp.mProperty == aProperty) {
- // There's only one entry and it's the one we want
- void* value = entry->mProp.mValue;
-
- // Here it's ok to use RemoveEntry() -- which may resize mEntries --
- // because we null mLastEntry at the same time.
- mEntries.RemoveEntry(entry);
- mLastEntry = nullptr;
- if (aFoundResult) {
- *aFoundResult = true;
- }
- return value;
- }
- if (!entry->mProp.IsArray()) {
- // There's just one property and it's not the one we want, bail
- return nullptr;
- }
-
- nsTArray<PropertyValue>* array = entry->mProp.ToArray();
- nsTArray<PropertyValue>::index_type index =
- array->IndexOf(aProperty, 0, PropertyComparator());
- if (index == nsTArray<PropertyValue>::NoIndex) {
- // No such property, bail
- return nullptr;
- }
-
- if (aFoundResult) {
- *aFoundResult = true;
- }
-
- void* result = array->ElementAt(index).mValue;
-
- uint32_t last = array->Length() - 1;
- array->ElementAt(index) = array->ElementAt(last);
- array->RemoveElementAt(last);
-
- if (last == 1) {
- PropertyValue pv = array->ElementAt(0);
- array->~nsTArray<PropertyValue>();
- entry->mProp = pv;
- }
-
- return result;
-}
-
-void
-FramePropertyTable::DeleteInternal(
- const nsIFrame* aFrame, UntypedDescriptor aProperty)
-{
- NS_ASSERTION(aFrame, "Null frame?");
- NS_ASSERTION(aProperty, "Null property?");
-
- bool found;
- void* v = RemoveInternal(aFrame, aProperty, &found);
- if (found) {
- PropertyValue pv(aProperty, v);
- pv.DestroyValueFor(aFrame);
- }
-}
-
-/* static */ void
-FramePropertyTable::DeleteAllForEntry(Entry* aEntry)
-{
- if (!aEntry->mProp.IsArray()) {
- aEntry->mProp.DestroyValueFor(aEntry->GetKey());
- return;
- }
-
- nsTArray<PropertyValue>* array = aEntry->mProp.ToArray();
- for (uint32_t i = 0; i < array->Length(); ++i) {
- array->ElementAt(i).DestroyValueFor(aEntry->GetKey());
- }
- array->~nsTArray<PropertyValue>();
-}
-
-void
-FramePropertyTable::DeleteAllFor(const nsIFrame* aFrame)
-{
- NS_ASSERTION(aFrame, "Null frame?");
-
- Entry* entry = mEntries.GetEntry(aFrame);
- if (!entry)
- return;
-
- if (mLastFrame == aFrame) {
- // Flush cache. We assume DeleteAllForEntry will be called before
- // a frame is destroyed.
- mLastFrame = nullptr;
- mLastEntry = nullptr;
- }
-
- DeleteAllForEntry(entry);
-
- // mLastEntry points into mEntries, so we use RawRemoveEntry() which will not
- // resize mEntries.
- mEntries.RawRemoveEntry(entry);
-}
-
-void
-FramePropertyTable::DeleteAll()
-{
- mLastFrame = nullptr;
- mLastEntry = nullptr;
-
- for (auto iter = mEntries.Iter(); !iter.Done(); iter.Next()) {
- DeleteAllForEntry(iter.Get());
- }
- mEntries.Clear();
-}
-
-size_t
-FramePropertyTable::SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const
-{
- return mEntries.SizeOfExcludingThis(aMallocSizeOf);
-}
-
-} // namespace mozilla
diff --git a/layout/base/OverflowChangedTracker.h b/layout/base/OverflowChangedTracker.h
index a18d64b46..40145c65c 100644
--- a/layout/base/OverflowChangedTracker.h
+++ b/layout/base/OverflowChangedTracker.h
@@ -112,12 +112,12 @@ public:
// Take a faster path that doesn't require unioning the overflow areas
// of our children.
- NS_ASSERTION(frame->Properties().Get(
+ NS_ASSERTION(frame->GetProperty(
nsIFrame::DebugInitialOverflowPropertyApplied()),
"InitialOverflowProperty must be set first.");
nsOverflowAreas* overflow =
- frame->Properties().Get(nsIFrame::InitialOverflowProperty());
+ frame->GetProperty(nsIFrame::InitialOverflowProperty());
if (overflow) {
// FinishAndStoreOverflow will change the overflow areas passed in,
// so make a copy.
diff --git a/layout/base/RestyleManager.cpp b/layout/base/RestyleManager.cpp
index de8f10224..124b5535e 100644
--- a/layout/base/RestyleManager.cpp
+++ b/layout/base/RestyleManager.cpp
@@ -1122,10 +1122,10 @@ GetPrevContinuationWithPossiblySameStyle(nsIFrame* aFrame)
// We're the first continuation, so we can just get the frame
// property directly
prevContinuation =
- aFrame->Properties().Get(nsIFrame::IBSplitPrevSibling());
+ aFrame->GetProperty(nsIFrame::IBSplitPrevSibling());
if (prevContinuation) {
prevContinuation =
- prevContinuation->Properties().Get(nsIFrame::IBSplitPrevSibling());
+ prevContinuation->GetProperty(nsIFrame::IBSplitPrevSibling());
}
}
@@ -1313,8 +1313,7 @@ RestyleManager::ReparentStyleContext(nsIFrame* aFrame)
// oldContext)" check will prevent us from redoing work.
if ((aFrame->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) &&
!aFrame->GetPrevContinuation()) {
- nsIFrame* sib =
- aFrame->Properties().Get(nsIFrame::IBSplitSibling());
+ nsIFrame* sib = aFrame->GetProperty(nsIFrame::IBSplitSibling());
if (sib) {
ReparentStyleContext(sib);
}
@@ -3349,7 +3348,6 @@ ElementRestyler::ComputeStyleChangeFor(nsIFrame* aFrame,
// line), we might restyle more than that.
nsPresContext* presContext = aFrame->PresContext();
- FramePropertyTable* propTable = presContext->PropertyTable();
TreeMatchContext treeMatchContext(true,
nsRuleWalker::eRelevantLinkUnvisited,
@@ -3363,7 +3361,7 @@ ElementRestyler::ComputeStyleChangeFor(nsIFrame* aFrame,
nsTArray<nsIContent*> visibleKidsOfHiddenElement;
nsIFrame* nextIBSibling;
for (nsIFrame* ibSibling = aFrame; ibSibling; ibSibling = nextIBSibling) {
- nextIBSibling = RestyleManager::GetNextBlockInInlineSibling(propTable, ibSibling);
+ nextIBSibling = RestyleManager::GetNextBlockInInlineSibling(ibSibling);
if (nextIBSibling) {
// Don't allow some ib-split siblings to be processed with
diff --git a/layout/base/RestyleManagerBase.cpp b/layout/base/RestyleManagerBase.cpp
index d96d9dbbb..6770f9464 100644
--- a/layout/base/RestyleManagerBase.cpp
+++ b/layout/base/RestyleManagerBase.cpp
@@ -385,8 +385,6 @@ RestyleManagerBase::DebugVerifyStyleTree(nsIFrame* aFrame)
#endif // DEBUG
-NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(ChangeListProperty, bool)
-
/**
* Sync views on aFrame and all of aFrame's descendants (following placeholders),
* if aChange has nsChangeHint_SyncFrameView.
@@ -521,10 +519,9 @@ RecomputePosition(nsIFrame* aFrame)
// normal position, go ahead and add the offsets directly.
// First, we need to ensure that the normal position is stored though.
nsPoint normalPosition = cont->GetNormalPosition();
- auto props = cont->Properties();
- const auto& prop = nsIFrame::NormalPositionProperty();
- if (!props.Get(prop)) {
- props.Set(prop, new nsPoint(normalPosition));
+ if (!cont->GetProperty(nsIFrame::NormalPositionProperty())) {
+ cont->SetProperty(nsIFrame::NormalPositionProperty(),
+ new nsPoint(normalPosition));
}
cont->SetPosition(normalPosition +
nsPoint(newOffsets.left, newOffsets.top));
@@ -739,8 +736,7 @@ RestyleManagerBase::GetNearestAncestorFrame(nsIContent* aContent)
}
/* static */ nsIFrame*
-RestyleManagerBase::GetNextBlockInInlineSibling(FramePropertyTable* aPropTable,
- nsIFrame* aFrame)
+RestyleManagerBase::GetNextBlockInInlineSibling(nsIFrame* aFrame)
{
NS_ASSERTION(!aFrame->GetPrevContinuation(),
"must start with the first continuation");
@@ -750,8 +746,7 @@ RestyleManagerBase::GetNextBlockInInlineSibling(FramePropertyTable* aPropTable,
return nullptr;
}
- return static_cast<nsIFrame*>
- (aPropTable->Get(aFrame, nsIFrame::IBSplitSibling()));
+ return aFrame->GetProperty(nsIFrame::IBSplitSibling());
}
static void
@@ -1028,10 +1023,10 @@ RestyleManagerBase::GetNextContinuationWithSameStyle(
// We're the last continuation, so we have to hop back to the first
// before getting the frame property
nextContinuation =
- aFrame->FirstContinuation()->Properties().Get(nsIFrame::IBSplitSibling());
+ aFrame->FirstContinuation()->GetProperty(nsIFrame::IBSplitSibling());
if (nextContinuation) {
nextContinuation =
- nextContinuation->Properties().Get(nsIFrame::IBSplitSibling());
+ nextContinuation->GetProperty(nsIFrame::IBSplitSibling());
}
}
@@ -1060,14 +1055,52 @@ RestyleManagerBase::ProcessRestyledFrames(nsStyleChangeList& aChangeList)
{
NS_ASSERTION(!nsContentUtils::IsSafeToRunScript(),
"Someone forgot a script blocker");
- if (aChangeList.IsEmpty())
- return NS_OK;
+
+// See bug 1378219 comment 9:
+// Recursive calls here are a bit worrying, but apparently do happen in the
+// wild (although not currently in any of our automated tests). Try to get a
+// stack from Nightly/Dev channel to figure out what's going on and whether
+// it's OK.
+MOZ_DIAGNOSTIC_ASSERT(!mDestroyedFrames, "ProcessRestyledFrames recursion");
+
+if (aChangeList.IsEmpty())
+ return NS_OK;
+
+// If mDestroyedFrames is null, we want to create a new hashtable here
+// and destroy it on exit; but if it is already non-null (because we're in
+// a recursive call), we will continue to use the existing table to
+// accumulate destroyed frames, and NOT clear mDestroyedFrames on exit.
+// We use a MaybeClearDestroyedFrames helper to conditionally reset the
+// mDestroyedFrames pointer when this method returns.
+typedef decltype(mDestroyedFrames) DestroyedFramesT;
+class MOZ_RAII MaybeClearDestroyedFrames
+{
+private:
+ DestroyedFramesT& mDestroyedFramesRef; // ref to caller's mDestroyedFrames
+ const bool mResetOnDestruction;
+public:
+ explicit MaybeClearDestroyedFrames(DestroyedFramesT& aTarget)
+ : mDestroyedFramesRef(aTarget)
+ , mResetOnDestruction(!aTarget) // reset only if target starts out null
+ {
+ }
+ ~MaybeClearDestroyedFrames()
+ {
+ if (mResetOnDestruction) {
+ mDestroyedFramesRef.reset(nullptr);
+ }
+ }
+};
+
+MaybeClearDestroyedFrames maybeClear(mDestroyedFrames);
+if (!mDestroyedFrames) {
+ mDestroyedFrames = MakeUnique<nsTHashtable<nsPtrHashKey<const nsIFrame>>>();
+}
PROFILER_LABEL("RestyleManager", "ProcessRestyledFrames",
js::ProfileEntry::Category::CSS);
nsPresContext* presContext = PresContext();
- FramePropertyTable* propTable = presContext->PropertyTable();
nsCSSFrameConstructor* frameConstructor = presContext->FrameConstructor();
// Handle nsChangeHint_CSSOverflowChange, by either updating the
@@ -1135,15 +1168,6 @@ RestyleManagerBase::ProcessRestyledFrames(nsStyleChangeList& aChangeList)
// processing restyles
frameConstructor->BeginUpdate();
- // Mark frames so that we skip frames that die along the way, bug 123049.
- // A frame can be in the list multiple times with different hints. Further
- // optmization is possible if nsStyleChangeList::AppendChange could coalesce
- for (const nsStyleChangeData& data : aChangeList) {
- if (data.mFrame) {
- propTable->Set(data.mFrame, ChangeListProperty(), true);
- }
- }
-
bool didUpdateCursor = false;
for (const nsStyleChangeData& data : aChangeList) {
@@ -1157,7 +1181,7 @@ RestyleManagerBase::ProcessRestyledFrames(nsStyleChangeList& aChangeList)
"Reflow hint bits set without actually asking for a reflow");
// skip any frame that has been destroyed due to a ripple effect
- if (frame && !propTable->Get(frame, ChangeListProperty())) {
+ if (frame && mDestroyedFrames->Contains(frame)) {
continue;
}
@@ -1409,15 +1433,11 @@ RestyleManagerBase::ProcessRestyledFrames(nsStyleChangeList& aChangeList)
frameConstructor->EndUpdate();
- // cleanup references and verify the style tree. Note that the latter needs
- // to happen once we've processed the whole list, since until then the tree
- // is not in fact in a consistent state.
- for (const nsStyleChangeData& data : aChangeList) {
- if (data.mFrame) {
- propTable->Delete(data.mFrame, ChangeListProperty());
- }
-
#ifdef DEBUG
+ // Verify the style tree. Note that this needs to happen once we've
+ // processed the whole list, since until then the tree is not in fact in a
+ // consistent state.
+ for (const nsStyleChangeData& data : aChangeList) {
// reget frame from content since it may have been regenerated...
if (data.mContent) {
nsIFrame* frame = data.mContent->GetPrimaryFrame();
@@ -1429,8 +1449,8 @@ RestyleManagerBase::ProcessRestyledFrames(nsStyleChangeList& aChangeList)
NS_WARNING("Unable to test style tree integrity -- no content node "
"(and not a viewport frame)");
}
-#endif
}
+#endif
aChangeList.Clear();
return NS_OK;
diff --git a/layout/base/RestyleManagerBase.h b/layout/base/RestyleManagerBase.h
index f81f5e73f..d92c3d1f7 100644
--- a/layout/base/RestyleManagerBase.h
+++ b/layout/base/RestyleManagerBase.h
@@ -72,6 +72,11 @@ public:
// WillDestroyFrameTree hasn't been called yet.
void NotifyDestroyingFrame(nsIFrame* aFrame) {
mOverflowChangedTracker.RemoveFrame(aFrame);
+ // If ProcessRestyledFrames is tracking frames which have been
+ // destroyed (to avoid re-visiting them), add this one to its set.
+ if (mDestroyedFrames) {
+ mDestroyedFrames->PutEntry(aFrame);
+ }
}
// Note: It's the caller's responsibility to make sure to wrap a
@@ -127,6 +132,12 @@ private:
nsPresContext* mPresContext; // weak, can be null after Disconnect().
uint32_t mRestyleGeneration;
uint32_t mHoverGeneration;
+
+ // Used to keep track of frames that have been destroyed during
+ // ProcessRestyledFrames, so we don't try to touch them again even if
+ // they're referenced again later in the changelist.
+ mozilla::UniquePtr<nsTHashtable<nsPtrHashKey<const nsIFrame>>> mDestroyedFrames;
+
// True if we're already waiting for a refresh notification.
bool mObservingRefreshDriver;
@@ -146,7 +157,7 @@ protected:
GetNearestAncestorFrame(nsIContent* aContent);
static nsIFrame*
- GetNextBlockInInlineSibling(FramePropertyTable* aPropTable, nsIFrame* aFrame);
+ GetNextBlockInInlineSibling(nsIFrame* aFrame);
/**
* Get the next continuation or similar ib-split sibling (assuming
diff --git a/layout/base/moz.build b/layout/base/moz.build
index d3e417f16..4308a6e4d 100644
--- a/layout/base/moz.build
+++ b/layout/base/moz.build
@@ -61,7 +61,7 @@ EXPORTS += [
'DisplayItemScrollClip.h',
'DisplayListClipState.h',
'FrameLayerBuilder.h',
- 'FramePropertyTable.h',
+ 'FrameProperties.h',
'LayerState.h',
'LayoutLogging.h',
'nsArenaMemoryStats.h',
@@ -126,7 +126,6 @@ UNIFIED_SOURCES += [
'DisplayListClipState.cpp',
'DottedCornerFinder.cpp',
'FrameLayerBuilder.cpp',
- 'FramePropertyTable.cpp',
'GeometryUtils.cpp',
'LayoutLogging.cpp',
'MaskLayerImageCache.cpp',
diff --git a/layout/base/nsBidiPresUtils.cpp b/layout/base/nsBidiPresUtils.cpp
index b3c20aabb..887563504 100644
--- a/layout/base/nsBidiPresUtils.cpp
+++ b/layout/base/nsBidiPresUtils.cpp
@@ -753,7 +753,6 @@ nsBidiPresUtils::ResolveParagraph(BidiParagraphData* aBpd)
nsIContent* content = nullptr;
int32_t contentTextLength = 0;
- FramePropertyTable* propTable = aBpd->mPresContext->PropertyTable();
nsLineBox* currentLine = nullptr;
#ifdef DEBUG
@@ -809,7 +808,7 @@ nsBidiPresUtils::ResolveParagraph(BidiParagraphData* aBpd)
}
precedingControl = kBidiLevelNone;
lastEmbedingLevel = embeddingLevel;
- propTable->Set(frame, nsIFrame::BidiDataProperty(), bidiData);
+ frame->SetProperty(nsIFrame::BidiDataProperty(), bidiData);
};
for (; ;) {
@@ -1787,7 +1786,7 @@ nsBidiPresUtils::RemoveBidiContinuation(BidiParagraphData *aBpd,
if (frame != NS_BIDI_CONTROL_FRAME) {
// Make the frame and its continuation ancestors fluid,
// so they can be reused or deleted by normal reflow code
- frame->Properties().Set(nsIFrame::BidiDataProperty(), bidiData);
+ frame->SetProperty(nsIFrame::BidiDataProperty(), bidiData);
frame->AddStateBits(NS_FRAME_IS_BIDI);
while (frame) {
nsIFrame* prev = frame->GetPrevContinuation();
diff --git a/layout/base/nsCSSFrameConstructor.cpp b/layout/base/nsCSSFrameConstructor.cpp
index 07a5b80e7..ec676ca92 100644
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -492,9 +492,8 @@ static nsContainerFrame* GetIBSplitSibling(nsIFrame* aFrame)
// We only store the "ib-split sibling" annotation with the first
// frame in the continuation chain. Walk back to find that frame now.
- return static_cast<nsContainerFrame*>
- (aFrame->FirstContinuation()->
- Properties().Get(nsIFrame::IBSplitSibling()));
+ return aFrame->FirstContinuation()->
+ GetProperty(nsIFrame::IBSplitSibling());
}
static nsContainerFrame* GetIBSplitPrevSibling(nsIFrame* aFrame)
@@ -503,9 +502,8 @@ static nsContainerFrame* GetIBSplitPrevSibling(nsIFrame* aFrame)
// We only store the ib-split sibling annotation with the first
// frame in the continuation chain. Walk back to find that frame now.
- return static_cast<nsContainerFrame*>
- (aFrame->FirstContinuation()->
- Properties().Get(nsIFrame::IBSplitPrevSibling()));
+ return aFrame->FirstContinuation()->
+ GetProperty(nsIFrame::IBSplitPrevSibling());
}
static nsContainerFrame*
@@ -526,7 +524,7 @@ GetLastIBSplitSibling(nsIFrame* aFrame, bool aReturnEmptyTrailingInline)
}
static void
-SetFrameIsIBSplit(nsContainerFrame* aFrame, nsIFrame* aIBSplitSibling)
+SetFrameIsIBSplit(nsContainerFrame* aFrame, nsContainerFrame* aIBSplitSibling)
{
NS_PRECONDITION(aFrame, "bad args!");
@@ -547,9 +545,8 @@ SetFrameIsIBSplit(nsContainerFrame* aFrame, nsIFrame* aIBSplitSibling)
// Store the ib-split sibling (if we were given one) with the
// first frame in the flow.
- FramePropertyTable* props = aFrame->PresContext()->PropertyTable();
- props->Set(aFrame, nsIFrame::IBSplitSibling(), aIBSplitSibling);
- props->Set(aIBSplitSibling, nsIFrame::IBSplitPrevSibling(), aFrame);
+ aFrame->SetProperty(nsIFrame::IBSplitSibling(), aIBSplitSibling);
+ aIBSplitSibling->SetProperty(nsIFrame::IBSplitPrevSibling(), aFrame);
}
}
@@ -6075,11 +6072,11 @@ AddGenConPseudoToFrame(nsIFrame* aOwnerFrame, nsIContent* aContent)
NS_ASSERTION(nsLayoutUtils::IsFirstContinuationOrIBSplitSibling(aOwnerFrame),
"property should only be set on first continuation/ib-sibling");
- FrameProperties props = aOwnerFrame->Properties();
- nsIFrame::ContentArray* value = props.Get(nsIFrame::GenConProperty());
+ nsIFrame::ContentArray* value =
+ aOwnerFrame->GetProperty(nsIFrame::GenConProperty());
if (!value) {
value = new nsIFrame::ContentArray;
- props.Set(nsIFrame::GenConProperty(), value);
+ aOwnerFrame->SetProperty(nsIFrame::GenConProperty(), value);
}
value->AppendElement(aContent);
}
diff --git a/layout/base/nsCSSRendering.cpp b/layout/base/nsCSSRendering.cpp
index ff9edf742..119c6c8a2 100644
--- a/layout/base/nsCSSRendering.cpp
+++ b/layout/base/nsCSSRendering.cpp
@@ -293,13 +293,13 @@ protected:
if (!prevCont &&
(aFrame->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT)) {
nsIFrame* block =
- aFrame->Properties().Get(nsIFrame::IBSplitPrevSibling());
+ aFrame->GetProperty(nsIFrame::IBSplitPrevSibling());
if (block) {
// The {ib} properties are only stored on first continuations
NS_ASSERTION(!block->GetPrevContinuation(),
"Incorrect value for IBSplitPrevSibling");
prevCont =
- block->Properties().Get(nsIFrame::IBSplitPrevSibling());
+ block->GetProperty(nsIFrame::IBSplitPrevSibling());
NS_ASSERTION(prevCont, "How did that happen?");
}
}
@@ -313,9 +313,9 @@ protected:
(aFrame->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT)) {
// The {ib} properties are only stored on first continuations
aFrame = aFrame->FirstContinuation();
- nsIFrame* block = aFrame->Properties().Get(nsIFrame::IBSplitSibling());
+ nsIFrame* block = aFrame->GetProperty(nsIFrame::IBSplitSibling());
if (block) {
- nextCont = block->Properties().Get(nsIFrame::IBSplitSibling());
+ nextCont = block->GetProperty(nsIFrame::IBSplitSibling());
NS_ASSERTION(nextCont, "How did that happen?");
}
}
@@ -842,7 +842,7 @@ static nsRect
GetOutlineInnerRect(nsIFrame* aFrame)
{
nsRect* savedOutlineInnerRect =
- aFrame->Properties().Get(nsIFrame::OutlineInnerRectProperty());
+ aFrame->GetProperty(nsIFrame::OutlineInnerRectProperty());
if (savedOutlineInnerRect)
return *savedOutlineInnerRect;
NS_NOTREACHED("we should have saved a frame property");
diff --git a/layout/base/nsDisplayList.cpp b/layout/base/nsDisplayList.cpp
index a55ec1e39..e22230b41 100644
--- a/layout/base/nsDisplayList.cpp
+++ b/layout/base/nsDisplayList.cpp
@@ -666,7 +666,7 @@ nsDisplayListBuilder::AddAnimationsAndTransitionsToLayer(Layer* aLayer,
// EffectCompositor needs to know that we refused to run this animation
// asynchronously so that it will not throttle the main thread
// animation.
- aFrame->Properties().Set(nsIFrame::RefusedAsyncAnimationProperty(), true);
+ aFrame->SetProperty(nsIFrame::RefusedAsyncAnimationProperty(), true);
// We need to schedule another refresh driver run so that EffectCompositor
// gets a chance to unthrottle the animation.
@@ -902,15 +902,13 @@ void nsDisplayListBuilder::MarkOutOfFlowFrameForDisplay(nsIFrame* aDirtyFrame,
const DisplayItemClip* oldClip = mClipState.GetClipForContainingBlockDescendants();
const DisplayItemScrollClip* sc = mClipState.GetCurrentInnermostScrollClip();
OutOfFlowDisplayData* data = new OutOfFlowDisplayData(oldClip, sc, dirty);
- aFrame->Properties().Set(nsDisplayListBuilder::OutOfFlowDisplayDataProperty(), data);
+ aFrame->SetProperty(nsDisplayListBuilder::OutOfFlowDisplayDataProperty(), data);
MarkFrameForDisplay(aFrame, aDirtyFrame);
}
static void UnmarkFrameForDisplay(nsIFrame* aFrame) {
- nsPresContext* presContext = aFrame->PresContext();
- presContext->PropertyTable()->
- Delete(aFrame, nsDisplayListBuilder::OutOfFlowDisplayDataProperty());
+ aFrame->DeleteProperty(nsDisplayListBuilder::OutOfFlowDisplayDataProperty());
for (nsIFrame* f = aFrame; f;
f = nsLayoutUtils::GetParentOrPlaceholderFor(f)) {
@@ -5710,7 +5708,7 @@ nsDisplayTransform::GetDeltaToTransformOrigin(const nsIFrame* aFrame,
}
/* Allows us to access dimension getters by index. */
- float coords[2];
+ float transformOrigin[2];
TransformReferenceBox::DimensionGetter dimensionGetter[] =
{ &TransformReferenceBox::Width, &TransformReferenceBox::Height };
TransformReferenceBox::DimensionGetter offsetGetter[] =
@@ -5720,33 +5718,33 @@ nsDisplayTransform::GetDeltaToTransformOrigin(const nsIFrame* aFrame,
/* If the transform-origin specifies a percentage, take the percentage
* of the size of the box.
*/
- const nsStyleCoord &coord = display->mTransformOrigin[index];
- if (coord.GetUnit() == eStyleUnit_Calc) {
- const nsStyleCoord::Calc *calc = coord.GetCalcValue();
- coords[index] =
+ const nsStyleCoord &originValue = display->mTransformOrigin[index];
+ if (originValue.GetUnit() == eStyleUnit_Calc) {
+ const nsStyleCoord::Calc *calc = originValue.GetCalcValue();
+ transformOrigin[index] =
NSAppUnitsToFloatPixels((refBox.*dimensionGetter[index])(), aAppUnitsPerPixel) *
calc->mPercent +
NSAppUnitsToFloatPixels(calc->mLength, aAppUnitsPerPixel);
- } else if (coord.GetUnit() == eStyleUnit_Percent) {
- coords[index] =
+ } else if (originValue.GetUnit() == eStyleUnit_Percent) {
+ transformOrigin[index] =
NSAppUnitsToFloatPixels((refBox.*dimensionGetter[index])(), aAppUnitsPerPixel) *
- coord.GetPercentValue();
+ originValue.GetPercentValue();
} else {
- MOZ_ASSERT(coord.GetUnit() == eStyleUnit_Coord, "unexpected unit");
- coords[index] =
- NSAppUnitsToFloatPixels(coord.GetCoordValue(), aAppUnitsPerPixel);
+ MOZ_ASSERT(originValue.GetUnit() == eStyleUnit_Coord, "unexpected unit");
+ transformOrigin[index] =
+ NSAppUnitsToFloatPixels(originValue.GetCoordValue(), aAppUnitsPerPixel);
}
if (aFrame->GetStateBits() & NS_FRAME_SVG_LAYOUT) {
// SVG frames (unlike other frames) have a reference box that can be (and
// typically is) offset from the TopLeft() of the frame. We need to
// account for that here.
- coords[index] +=
+ transformOrigin[index] +=
NSAppUnitsToFloatPixels((refBox.*offsetGetter[index])(), aAppUnitsPerPixel);
}
}
- return Point3D(coords[0], coords[1],
+ return Point3D(transformOrigin[0], transformOrigin[1],
NSAppUnitsToFloatPixels(display->mTransformOrigin[2].GetCoordValue(),
aAppUnitsPerPixel));
}
@@ -5919,6 +5917,17 @@ nsDisplayTransform::GetResultingTransformMatrixInternal(const FrameTransformProp
frame && frame->IsSVGTransformed(&svgTransform, &transformFromSVGParent);
bool hasTransformFromSVGParent =
hasSVGTransforms && !transformFromSVGParent.IsIdentity();
+
+ bool shouldRound = true;
+
+ // An SVG frame should not have its translation rounded.
+ // Note it's possible that the SVG frame doesn't have an SVG
+ // transform but only has a CSS transform.
+ if (frame && frame->HasAnyStateBits(NS_FRAME_SVG_LAYOUT) &&
+ !(frame->GetType() == nsGkAtoms::svgOuterSVGAnonChildFrame)) {
+ shouldRound = false;
+ }
+
/* Transformed frames always have a transform, or are preserving 3d (and might still have perspective!) */
if (aProperties.mTransformList) {
result = nsStyleTransformMatrix::ReadTransforms(aProperties.mTransformList->mHead,
@@ -5996,7 +6005,7 @@ nsDisplayTransform::GetResultingTransformMatrixInternal(const FrameTransformProp
// Otherwise we need to manually translate into our parent's coordinate
// space.
if (frame->IsTransformed()) {
- nsLayoutUtils::PostTranslate(result, frame->GetPosition(), aAppUnitsPerPixel, !hasSVGTransforms);
+ nsLayoutUtils::PostTranslate(result, frame->GetPosition(), aAppUnitsPerPixel, shouldRound);
}
Matrix4x4 parent =
GetResultingTransformMatrixInternal(props,
@@ -6007,7 +6016,7 @@ nsDisplayTransform::GetResultingTransformMatrixInternal(const FrameTransformProp
}
if (aFlags & OFFSET_BY_ORIGIN) {
- nsLayoutUtils::PostTranslate(result, aOrigin, aAppUnitsPerPixel, !hasSVGTransforms);
+ nsLayoutUtils::PostTranslate(result, aOrigin, aAppUnitsPerPixel, shouldRound);
}
return result;
diff --git a/layout/base/nsDisplayList.h b/layout/base/nsDisplayList.h
index fcdc9e4fc..c81d34fac 100644
--- a/layout/base/nsDisplayList.h
+++ b/layout/base/nsDisplayList.h
@@ -1003,7 +1003,7 @@ public:
static OutOfFlowDisplayData* GetOutOfFlowData(nsIFrame* aFrame)
{
- return aFrame->Properties().Get(OutOfFlowDisplayDataProperty());
+ return aFrame->GetProperty(OutOfFlowDisplayDataProperty());
}
nsPresContext* CurrentPresContext() {
diff --git a/layout/base/nsIPresShell.h b/layout/base/nsIPresShell.h
index 4016cc0a9..865f5534c 100644
--- a/layout/base/nsIPresShell.h
+++ b/layout/base/nsIPresShell.h
@@ -1533,11 +1533,12 @@ public:
bool aFlushOnHoverChange) = 0;
virtual void AddSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf,
- nsArenaMemoryStats *aArenaObjectsSize,
- size_t *aPresShellSize,
- size_t *aStyleSetsSize,
- size_t *aTextRunsSize,
- size_t *aPresContextSize) = 0;
+ nsArenaMemoryStats* aArenaObjectsSize,
+ size_t* aPresShellSize,
+ size_t* aStyleSetsSize,
+ size_t* aTextRunsSize,
+ size_t* aPresContextSize,
+ size_t* aFramePropertiesSize) = 0;
/**
* Methods that retrieve the cached font inflation preferences.
diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp
index 07befdc81..06690b208 100644
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -2057,13 +2057,13 @@ NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(ScrollbarThumbLayerized, bool)
/* static */ void
nsLayoutUtils::SetScrollbarThumbLayerization(nsIFrame* aThumbFrame, bool aLayerize)
{
- aThumbFrame->Properties().Set(ScrollbarThumbLayerized(), aLayerize);
+ aThumbFrame->SetProperty(ScrollbarThumbLayerized(), aLayerize);
}
bool
nsLayoutUtils::IsScrollbarThumbLayerized(nsIFrame* aThumbFrame)
{
- return aThumbFrame->Properties().Get(ScrollbarThumbLayerized());
+ return aThumbFrame->GetProperty(ScrollbarThumbLayerized());
}
// static
@@ -4427,7 +4427,7 @@ nsLayoutUtils::GetNextContinuationOrIBSplitSibling(nsIFrame *aFrame)
// frame in the continuation chain. Walk back to find that frame now.
aFrame = aFrame->FirstContinuation();
- return aFrame->Properties().Get(nsIFrame::IBSplitSibling());
+ return aFrame->GetProperty(nsIFrame::IBSplitSibling());
}
return nullptr;
@@ -4440,7 +4440,7 @@ nsLayoutUtils::FirstContinuationOrIBSplitSibling(nsIFrame *aFrame)
if (result->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) {
while (true) {
nsIFrame* f =
- result->Properties().Get(nsIFrame::IBSplitPrevSibling());
+ result->GetProperty(nsIFrame::IBSplitPrevSibling());
if (!f)
break;
result = f;
@@ -4456,10 +4456,10 @@ nsLayoutUtils::LastContinuationOrIBSplitSibling(nsIFrame *aFrame)
nsIFrame *result = aFrame->FirstContinuation();
if (result->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) {
while (true) {
- nsIFrame* f =
- result->Properties().Get(nsIFrame::IBSplitSibling());
- if (!f)
+ nsIFrame* f = result->GetProperty(nsIFrame::IBSplitSibling());
+ if (!f) {
break;
+ }
result = f;
}
}
@@ -4476,7 +4476,7 @@ nsLayoutUtils::IsFirstContinuationOrIBSplitSibling(nsIFrame *aFrame)
return false;
}
if ((aFrame->GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) &&
- aFrame->Properties().Get(nsIFrame::IBSplitPrevSibling())) {
+ aFrame->GetProperty(nsIFrame::IBSplitPrevSibling())) {
return false;
}
diff --git a/layout/base/nsPresContext.cpp b/layout/base/nsPresContext.cpp
index 3106ff386..befb5deb2 100644
--- a/layout/base/nsPresContext.cpp
+++ b/layout/base/nsPresContext.cpp
@@ -2741,8 +2741,7 @@ nsPresContext::GetPrimaryFrameFor(nsIContent* aContent)
size_t
nsPresContext::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
{
- return mPropertyTable.SizeOfExcludingThis(aMallocSizeOf) +
- mLangGroupFontPrefs.SizeOfExcludingThis(aMallocSizeOf);
+ return mLangGroupFontPrefs.SizeOfExcludingThis(aMallocSizeOf);
// Measurement of other members may be added later if DMD finds it is
// worthwhile.
diff --git a/layout/base/nsPresContext.h b/layout/base/nsPresContext.h
index d8f876291..a2b9bb533 100644
--- a/layout/base/nsPresContext.h
+++ b/layout/base/nsPresContext.h
@@ -22,7 +22,6 @@
#include "nsITimer.h"
#include "nsCRT.h"
#include "nsIWidgetListener.h"
-#include "FramePropertyTable.h"
#include "nsGkAtoms.h"
#include "nsCycleCollectionParticipant.h"
#include "nsChangeHint.h"
@@ -140,7 +139,6 @@ class nsRootPresContext;
class nsPresContext : public nsIObserver,
public mozilla::SupportsWeakPtr<nsPresContext> {
public:
- typedef mozilla::FramePropertyTable FramePropertyTable;
typedef mozilla::LangGroupFontPrefs LangGroupFontPrefs;
typedef mozilla::ScrollbarStyles ScrollbarStyles;
typedef mozilla::StaticPresData StaticPresData;
@@ -867,9 +865,6 @@ public:
nsIPrintSettings* GetPrintSettings() { return mPrintSettings; }
- /* Accessor for table of frame properties */
- FramePropertyTable* PropertyTable() { return &mPropertyTable; }
-
/* Helper function that ensures that this prescontext is shown in its
docshell if it's the most recent prescontext for the docshell. Returns
whether the prescontext is now being shown.
@@ -1064,11 +1059,6 @@ public:
*/
nsIFrame* GetPrimaryFrameFor(nsIContent* aContent);
- void NotifyDestroyingFrame(nsIFrame* aFrame)
- {
- PropertyTable()->DeleteAllFor(aFrame);
- }
-
virtual size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const {
return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
@@ -1294,7 +1284,6 @@ protected:
nsCOMPtr<nsIPrintSettings> mPrintSettings;
nsCOMPtr<nsITimer> mPrefChangedTimer;
- FramePropertyTable mPropertyTable;
nsInvalidateRequestList mInvalidateRequestsSinceLastPaint;
nsInvalidateRequestList mUndeliveredInvalidateRequestsBeforeLastPaint;
diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp
index d4fbebbf2..264b52b18 100644
--- a/layout/base/nsPresShell.cpp
+++ b/layout/base/nsPresShell.cpp
@@ -1306,19 +1306,6 @@ PresShell::Destroy()
// Destroy the frame manager. This will destroy the frame hierarchy
mFrameConstructor->WillDestroyFrameTree();
- // Destroy all frame properties (whose destruction was suppressed
- // while destroying the frame tree, but which might contain more
- // frames within the properties.
- if (mPresContext) {
- // Clear out the prescontext's property table -- since our frame tree is
- // now dead, we shouldn't be looking up any more properties in that table.
- // We want to do this before we call DetachShell() on the prescontext, so
- // property destructors can usefully call GetPresShell() on the
- // prescontext.
- mPresContext->PropertyTable()->DeleteAll();
- }
-
-
NS_WARNING_ASSERTION(!mWeakFrames,
"Weak frames alive after destroying FrameManager");
while (mWeakFrames) {
@@ -2047,7 +2034,7 @@ PresShell::NotifyDestroyingFrame(nsIFrame* aFrame)
}
// Remove frame properties
- mPresContext->NotifyDestroyingFrame(aFrame);
+ aFrame->DeleteAllProperties();
if (aFrame == mCurrentEventFrame) {
mCurrentEventContent = aFrame->GetContent();
@@ -2076,8 +2063,7 @@ PresShell::NotifyDestroyingFrame(nsIFrame* aFrame)
// frame from FrameLayerBuilder::DisplayItemData::mFrameList -- otherwise
// the DisplayItemData destructor will use the destroyed frame when it
// tries to remove it from the (array) value of this property.
- mPresContext->PropertyTable()->
- Delete(aFrame, FrameLayerBuilder::LayerManagerDataProperty());
+ aFrame->DeleteProperty( FrameLayerBuilder::LayerManagerDataProperty());
}
}
@@ -8192,9 +8178,6 @@ PresShell::HandleEventInternal(WidgetEvent* aEvent,
}
}
}
- if (aEvent->mMessage == eKeyDown) {
- mIsLastKeyDownCanceled = aEvent->mFlags.mDefaultPrevented;
- }
break;
}
case eMouseUp:
@@ -8984,9 +8967,6 @@ PresShell::FireOrClearDelayedEvents(bool aFireEvents)
!doc->EventHandlingSuppressed()) {
nsAutoPtr<DelayedEvent> ev(mDelayedEvents[0].forget());
mDelayedEvents.RemoveElementAt(0);
- if (ev->IsKeyPressEvent() && mIsLastKeyDownCanceled) {
- continue;
- }
ev->Dispatch();
}
if (!doc->EventHandlingSuppressed()) {
@@ -9781,12 +9761,6 @@ PresShell::DelayedKeyEvent::DelayedKeyEvent(WidgetKeyboardEvent* aEvent) :
mEvent = keyEvent;
}
-bool
-PresShell::DelayedKeyEvent::IsKeyPressEvent()
-{
- return mEvent->mMessage == eKeyPress;
-}
-
// Start of DEBUG only code
#ifdef DEBUG
@@ -10929,11 +10903,12 @@ PresShell::GetRootPresShell()
void
PresShell::AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf,
- nsArenaMemoryStats *aArenaObjectsSize,
- size_t *aPresShellSize,
- size_t *aStyleSetsSize,
- size_t *aTextRunsSize,
- size_t *aPresContextSize)
+ nsArenaMemoryStats* aArenaObjectsSize,
+ size_t* aPresShellSize,
+ size_t* aStyleSetsSize,
+ size_t* aTextRunsSize,
+ size_t* aPresContextSize,
+ size_t* aFramePropertiesSize)
{
mFrameArena.AddSizeOfExcludingThis(aMallocSizeOf, aArenaObjectsSize);
*aPresShellSize += aMallocSizeOf(this);
@@ -10953,6 +10928,12 @@ PresShell::AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf,
*aTextRunsSize += SizeOfTextRuns(aMallocSizeOf);
*aPresContextSize += mPresContext->SizeOfIncludingThis(aMallocSizeOf);
+
+ nsIFrame* rootFrame = mFrameConstructor->GetRootFrame();
+ if (rootFrame) {
+ *aFramePropertiesSize +=
+ rootFrame->SizeOfFramePropertiesForTree(aMallocSizeOf);
+ }
}
size_t
diff --git a/layout/base/nsPresShell.h b/layout/base/nsPresShell.h
index 1a8dd3fef..f20370d73 100644
--- a/layout/base/nsPresShell.h
+++ b/layout/base/nsPresShell.h
@@ -384,11 +384,12 @@ public:
virtual void LoadComplete() override;
void AddSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf,
- nsArenaMemoryStats *aArenaObjectsSize,
- size_t *aPresShellSize,
- size_t *aStyleSetsSize,
- size_t *aTextRunsSize,
- size_t *aPresContextSize) override;
+ nsArenaMemoryStats* aArenaObjectsSize,
+ size_t* aPresShellSize,
+ size_t* aStyleSetsSize,
+ size_t* aTextRunsSize,
+ size_t* aPresContextSize,
+ size_t* aFramePropertiesSize) override;
size_t SizeOfTextRuns(mozilla::MallocSizeOf aMallocSizeOf) const;
virtual void AddInvalidateHiddenPresShellObserver(nsRefreshDriver *aDriver) override;
@@ -617,7 +618,6 @@ protected:
public:
virtual ~DelayedEvent() { }
virtual void Dispatch() { }
- virtual bool IsKeyPressEvent() { return false; }
};
class DelayedInputEvent : public DelayedEvent
@@ -642,7 +642,6 @@ protected:
{
public:
explicit DelayedKeyEvent(mozilla::WidgetKeyboardEvent* aEvent);
- virtual bool IsKeyPressEvent() override;
};
// Check if aEvent is a mouse event and record the mouse location for later
@@ -953,8 +952,6 @@ protected:
// Whether the widget has received a paint message yet.
bool mHasReceivedPaintMessage : 1;
- bool mIsLastKeyDownCanceled : 1;
-
static bool sDisableNonTestMouseEvents;
};
diff --git a/layout/build/moz.build b/layout/build/moz.build
index 5b607c171..ecf180d78 100644
--- a/layout/build/moz.build
+++ b/layout/build/moz.build
@@ -31,6 +31,7 @@ LOCAL_INCLUDES += [
'/docshell/base',
'/dom/audiochannel',
'/dom/base',
+ '/dom/bindings',
'/dom/canvas',
'/dom/filesystem',
'/dom/geolocation',
diff --git a/layout/build/nsLayoutModule.cpp b/layout/build/nsLayoutModule.cpp
index 8bb70f85c..9313b8e45 100644
--- a/layout/build/nsLayoutModule.cpp
+++ b/layout/build/nsLayoutModule.cpp
@@ -35,6 +35,7 @@
#include "nsIObserver.h"
#include "nsIObserverService.h"
#include "nsIScriptNameSpaceManager.h"
+#include "nsIScriptError.h"
#include "nsISelection.h"
#include "nsCaret.h"
#include "nsPlainTextSerializer.h"
@@ -192,6 +193,8 @@ static void Shutdown();
#include "mozilla/dom/PresentationDeviceManager.h"
#include "mozilla/dom/PresentationTCPSessionTransport.h"
+#include "nsScriptError.h"
+
#include "mozilla/TextInputProcessor.h"
using namespace mozilla;
@@ -560,6 +563,8 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(UDPSocketChild)
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(GeckoMediaPluginService, GeckoMediaPluginService::GetGeckoMediaPluginService)
+NS_GENERIC_FACTORY_CONSTRUCTOR(nsScriptError)
+
#ifdef ACCESSIBILITY
#include "xpcAccessibilityService.h"
@@ -720,6 +725,8 @@ NS_DEFINE_NAMED_CID(PRESENTATION_TCP_SESSION_TRANSPORT_CID);
NS_DEFINE_NAMED_CID(TEXT_INPUT_PROCESSOR_CID);
+NS_DEFINE_NAMED_CID(NS_SCRIPTERROR_CID);
+
static nsresult
CreateWindowCommandTableConstructor(nsISupports *aOuter,
REFNSIID aIID, void **aResult)
@@ -978,6 +985,7 @@ static const mozilla::Module::CIDEntry kLayoutCIDs[] = {
{ &kPRESENTATION_DEVICE_MANAGER_CID, false, nullptr, PresentationDeviceManagerConstructor },
{ &kPRESENTATION_TCP_SESSION_TRANSPORT_CID, false, nullptr, PresentationTCPSessionTransportConstructor },
{ &kTEXT_INPUT_PROCESSOR_CID, false, nullptr, TextInputProcessorConstructor },
+ { &kNS_SCRIPTERROR_CID, false, nullptr, nsScriptErrorConstructor },
{ nullptr }
};
@@ -1109,6 +1117,7 @@ static const mozilla::Module::ContractIDEntry kLayoutContracts[] = {
{ PRESENTATION_DEVICE_MANAGER_CONTRACTID, &kPRESENTATION_DEVICE_MANAGER_CID },
{ PRESENTATION_TCP_SESSION_TRANSPORT_CONTRACTID, &kPRESENTATION_TCP_SESSION_TRANSPORT_CID },
{ "@mozilla.org/text-input-processor;1", &kTEXT_INPUT_PROCESSOR_CID },
+ { NS_SCRIPTERROR_CONTRACTID, &kNS_SCRIPTERROR_CID },
{ nullptr }
};
diff --git a/layout/forms/nsTextControlFrame.cpp b/layout/forms/nsTextControlFrame.cpp
index a7f7d40a8..f8fdf3420 100644
--- a/layout/forms/nsTextControlFrame.cpp
+++ b/layout/forms/nsTextControlFrame.cpp
@@ -124,10 +124,10 @@ nsTextControlFrame::DestroyFrom(nsIFrame* aDestructRoot)
{
mScrollEvent.Revoke();
- EditorInitializer* initializer = Properties().Get(TextControlInitializer());
+ EditorInitializer* initializer = GetProperty(TextControlInitializer());
if (initializer) {
initializer->Revoke();
- Properties().Delete(TextControlInitializer());
+ DeleteProperty(TextControlInitializer());
}
// Unbind the text editor state object from the frame. The editor will live
@@ -410,12 +410,12 @@ nsTextControlFrame::CreateAnonymousContent(nsTArray<ContentInfo>& aElements)
if (initEagerly) {
NS_ASSERTION(!nsContentUtils::IsSafeToRunScript(),
"Someone forgot a script blocker?");
- EditorInitializer* initializer = Properties().Get(TextControlInitializer());
+ EditorInitializer* initializer = GetProperty(TextControlInitializer());
if (initializer) {
initializer->Revoke();
}
initializer = new EditorInitializer(this);
- Properties().Set(TextControlInitializer(),initializer);
+ SetProperty(TextControlInitializer(),initializer);
nsContentUtils::AddScriptRunner(initializer);
}
@@ -1262,7 +1262,7 @@ nsTextControlFrame::SetInitialChildList(ChildListID aListID,
NS_ASSERTION(txtCtrl, "Content not a text control element");
txtCtrl->InitializeKeyboardEventListeners();
- nsPoint* contentScrollPos = Properties().Get(ContentScrollPos());
+ nsPoint* contentScrollPos = GetProperty(ContentScrollPos());
if (contentScrollPos) {
// If we have a scroll pos stored to be passed to our anonymous
// div, do it here!
@@ -1271,7 +1271,7 @@ nsTextControlFrame::SetInitialChildList(ChildListID aListID,
nsPresState fakePresState;
fakePresState.SetScrollState(*contentScrollPos);
statefulFrame->RestoreState(&fakePresState);
- Properties().Remove(ContentScrollPos());
+ RemoveProperty(ContentScrollPos());
delete contentScrollPos;
}
}
@@ -1421,7 +1421,7 @@ nsTextControlFrame::RestoreState(nsPresState* aState)
// Most likely, we don't have our anonymous content constructed yet, which
// would cause us to end up here. In this case, we'll just store the scroll
// pos ourselves, and forward it to the scroll frame later when it's created.
- Properties().Set(ContentScrollPos(), new nsPoint(aState->GetScrollPosition()));
+ SetProperty(ContentScrollPos(), new nsPoint(aState->GetScrollPosition()));
return NS_OK;
}
diff --git a/layout/forms/nsTextControlFrame.h b/layout/forms/nsTextControlFrame.h
index 9d4d0b77c..7fa39c5fb 100644
--- a/layout/forms/nsTextControlFrame.h
+++ b/layout/forms/nsTextControlFrame.h
@@ -327,7 +327,7 @@ private:
nsresult GetRootNodeAndInitializeEditor(nsIDOMElement **aRootElement);
void FinishedInitializer() {
- Properties().Delete(TextControlInitializer());
+ DeleteProperty(TextControlInitializer());
}
private:
diff --git a/layout/generic/ReflowInput.cpp b/layout/generic/ReflowInput.cpp
index bbff77ad4..78eca8c6c 100644
--- a/layout/generic/ReflowInput.cpp
+++ b/layout/generic/ReflowInput.cpp
@@ -999,13 +999,13 @@ ReflowInput::ComputeRelativeOffsets(WritingMode aWM,
// Convert the offsets to physical coordinates and store them on the frame
aComputedOffsets = offsets.GetPhysicalMargin(aWM);
- FrameProperties props = aFrame->Properties();
- nsMargin* physicalOffsets = props.Get(nsIFrame::ComputedOffsetProperty());
+ nsMargin* physicalOffsets =
+ aFrame->GetProperty(nsIFrame::ComputedOffsetProperty());
if (physicalOffsets) {
*physicalOffsets = aComputedOffsets;
} else {
- props.Set(nsIFrame::ComputedOffsetProperty(),
- new nsMargin(aComputedOffsets));
+ aFrame->SetProperty(nsIFrame::ComputedOffsetProperty(),
+ new nsMargin(aComputedOffsets));
}
}
@@ -1015,21 +1015,22 @@ ReflowInput::ApplyRelativePositioning(nsIFrame* aFrame,
nsPoint* aPosition)
{
if (!aFrame->IsRelativelyPositioned()) {
- NS_ASSERTION(!aFrame->Properties().Get(nsIFrame::NormalPositionProperty()),
+ NS_ASSERTION(!aFrame->GetProperty(nsIFrame::NormalPositionProperty()),
"We assume that changing the 'position' property causes "
"frame reconstruction. If that ever changes, this code "
"should call "
- "props.Delete(nsIFrame::NormalPositionProperty())");
+ "aFrame->DeleteProperty(nsIFrame::NormalPositionProperty())");
return;
}
// Store the normal position
- FrameProperties props = aFrame->Properties();
- nsPoint* normalPosition = props.Get(nsIFrame::NormalPositionProperty());
+ nsPoint* normalPosition =
+ aFrame->GetProperty(nsIFrame::NormalPositionProperty());
if (normalPosition) {
*normalPosition = *aPosition;
} else {
- props.Set(nsIFrame::NormalPositionProperty(), new nsPoint(*aPosition));
+ aFrame->SetProperty(nsIFrame::NormalPositionProperty(),
+ new nsPoint(*aPosition));
}
const nsStyleDisplay* display = aFrame->StyleDisplay();
@@ -2452,20 +2453,20 @@ ReflowInput::InitConstraints(nsPresContext* aPresContext,
}
static void
-UpdateProp(FrameProperties& aProps,
+UpdateProp(nsIFrame* aFrame,
const FramePropertyDescriptor<nsMargin>* aProperty,
bool aNeeded,
nsMargin& aNewValue)
{
if (aNeeded) {
- nsMargin* propValue = aProps.Get(aProperty);
+ nsMargin* propValue = aFrame->GetProperty(aProperty);
if (propValue) {
*propValue = aNewValue;
} else {
- aProps.Set(aProperty, new nsMargin(aNewValue));
+ aFrame->SetProperty(aProperty, new nsMargin(aNewValue));
}
} else {
- aProps.Delete(aProperty);
+ aFrame->DeleteProperty(aProperty);
}
}
@@ -2482,8 +2483,7 @@ SizeComputationInput::InitOffsets(WritingMode aWM,
// Since we are in reflow, we don't need to store these properties anymore
// unless they are dependent on width, in which case we store the new value.
nsPresContext *presContext = mFrame->PresContext();
- FrameProperties props(presContext->PropertyTable(), mFrame);
- props.Delete(nsIFrame::UsedBorderProperty());
+ mFrame->DeleteProperty(nsIFrame::UsedBorderProperty());
// Compute margins from the specified margin style information. These
// become the default computed values, and may be adjusted below
@@ -2494,7 +2494,7 @@ SizeComputationInput::InitOffsets(WritingMode aWM,
// ... but if we did that, we'd need to fix nsFrame::GetUsedMargin
// to use it even when the margins are all zero (since sometimes
// they get treated as auto)
- ::UpdateProp(props, nsIFrame::UsedMarginProperty(), needMarginProp,
+ ::UpdateProp(mFrame, nsIFrame::UsedMarginProperty(), needMarginProp,
ComputedPhysicalMargin());
@@ -2530,7 +2530,7 @@ SizeComputationInput::InitOffsets(WritingMode aWM,
auto ApplyBaselinePadding = [this, &needPaddingProp]
(LogicalAxis aAxis, Prop aProp) {
bool found;
- nscoord val = mFrame->Properties().Get(aProp, &found);
+ nscoord val = mFrame->GetProperty(aProp, &found);
if (found) {
NS_ASSERTION(val != nscoord(0), "zero in this property is useless");
WritingMode wm = GetWritingMode();
@@ -2603,7 +2603,7 @@ SizeComputationInput::InitOffsets(WritingMode aWM,
ComputedPhysicalBorderPadding().SizeTo(0,0,0,0);
}
}
- ::UpdateProp(props, nsIFrame::UsedPaddingProperty(), needPaddingProp,
+ ::UpdateProp(mFrame, nsIFrame::UsedPaddingProperty(), needPaddingProp,
ComputedPhysicalPadding());
}
diff --git a/layout/generic/RubyUtils.cpp b/layout/generic/RubyUtils.cpp
index f340663bc..05dd25413 100644
--- a/layout/generic/RubyUtils.cpp
+++ b/layout/generic/RubyUtils.cpp
@@ -19,21 +19,21 @@ NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(ReservedISize, nscoord)
RubyUtils::SetReservedISize(nsIFrame* aFrame, nscoord aISize)
{
MOZ_ASSERT(IsExpandableRubyBox(aFrame));
- aFrame->Properties().Set(ReservedISize(), aISize);
+ aFrame->SetProperty(ReservedISize(), aISize);
}
/* static */ void
RubyUtils::ClearReservedISize(nsIFrame* aFrame)
{
MOZ_ASSERT(IsExpandableRubyBox(aFrame));
- aFrame->Properties().Remove(ReservedISize());
+ aFrame->RemoveProperty(ReservedISize());
}
/* static */ nscoord
RubyUtils::GetReservedISize(nsIFrame* aFrame)
{
MOZ_ASSERT(IsExpandableRubyBox(aFrame));
- return aFrame->Properties().Get(ReservedISize());
+ return aFrame->GetProperty(ReservedISize());
}
AutoRubyTextContainerArray::AutoRubyTextContainerArray(
diff --git a/layout/generic/StickyScrollContainer.cpp b/layout/generic/StickyScrollContainer.cpp
index d61a7e042..ca68992c3 100644
--- a/layout/generic/StickyScrollContainer.cpp
+++ b/layout/generic/StickyScrollContainer.cpp
@@ -45,12 +45,12 @@ StickyScrollContainer::GetStickyScrollContainerForFrame(nsIFrame* aFrame)
// <html style="position: fixed">
return nullptr;
}
- FrameProperties props = static_cast<nsIFrame*>(do_QueryFrame(scrollFrame))->
- Properties();
- StickyScrollContainer* s = props.Get(StickyScrollContainerProperty());
+ auto frame = static_cast<nsIFrame*>(do_QueryFrame(scrollFrame));
+ StickyScrollContainer* s =
+ frame->GetProperty(StickyScrollContainerProperty());
if (!s) {
s = new StickyScrollContainer(scrollFrame);
- props.Set(StickyScrollContainerProperty(), s);
+ frame->SetProperty(StickyScrollContainerProperty(), s);
}
return s;
}
@@ -69,9 +69,9 @@ StickyScrollContainer::NotifyReparentedFrameAcrossScrollFrameBoundary(nsIFrame*
// we aren't going to handle that.
return;
}
- FrameProperties props = static_cast<nsIFrame*>(do_QueryFrame(oldScrollFrame))->
- Properties();
- StickyScrollContainer* oldSSC = props.Get(StickyScrollContainerProperty());
+ StickyScrollContainer* oldSSC =
+ static_cast<nsIFrame*>(do_QueryFrame(oldScrollFrame))->
+ GetProperty(StickyScrollContainerProperty());
if (!oldSSC) {
// aOldParent had no sticky descendants, so aFrame doesn't have any sticky
// descendants, and we're done here.
@@ -95,8 +95,7 @@ StickyScrollContainer::NotifyReparentedFrameAcrossScrollFrameBoundary(nsIFrame*
StickyScrollContainer*
StickyScrollContainer::GetStickyScrollContainerForScrollFrame(nsIFrame* aFrame)
{
- FrameProperties props = aFrame->Properties();
- return props.Get(StickyScrollContainerProperty());
+ return aFrame->GetProperty(StickyScrollContainerProperty());
}
static nscoord
@@ -141,13 +140,12 @@ StickyScrollContainer::ComputeStickyOffsets(nsIFrame* aFrame)
scrollContainerSize.height);
// Store the offset
- FrameProperties props = aFrame->Properties();
- nsMargin* offsets = props.Get(nsIFrame::ComputedOffsetProperty());
+ nsMargin* offsets = aFrame->GetProperty(nsIFrame::ComputedOffsetProperty());
if (offsets) {
*offsets = computedOffsets;
} else {
- props.Set(nsIFrame::ComputedOffsetProperty(),
- new nsMargin(computedOffsets));
+ aFrame->SetProperty(nsIFrame::ComputedOffsetProperty(),
+ new nsMargin(computedOffsets));
}
}
@@ -162,7 +160,7 @@ StickyScrollContainer::ComputeStickyLimits(nsIFrame* aFrame, nsRect* aStick,
aContain->SetRect(nscoord_MIN/2, nscoord_MIN/2, nscoord_MAX, nscoord_MAX);
const nsMargin* computedOffsets =
- aFrame->Properties().Get(nsIFrame::ComputedOffsetProperty());
+ aFrame->GetProperty(nsIFrame::ComputedOffsetProperty());
if (!computedOffsets) {
// We haven't reflowed the scroll frame yet, so offsets haven't been
// computed. Bail.
diff --git a/layout/generic/nsBlockFrame.cpp b/layout/generic/nsBlockFrame.cpp
index 851e3406c..a37bfc06b 100644
--- a/layout/generic/nsBlockFrame.cpp
+++ b/layout/generic/nsBlockFrame.cpp
@@ -326,10 +326,8 @@ nsBlockFrame::DestroyFrom(nsIFrame* aDestructRoot)
nsLineBox::DeleteLineList(presContext, mLines, aDestructRoot,
&mFrames);
- FramePropertyTable* props = presContext->PropertyTable();
-
if (HasPushedFloats()) {
- SafelyDestroyFrameListProp(aDestructRoot, shell, props,
+ SafelyDestroyFrameListProp(aDestructRoot, shell,
PushedFloatProperty());
RemoveStateBits(NS_BLOCK_HAS_PUSHED_FLOATS);
}
@@ -343,13 +341,13 @@ nsBlockFrame::DestroyFrom(nsIFrame* aDestructRoot)
}
if (GetStateBits() & NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS) {
- SafelyDestroyFrameListProp(aDestructRoot, shell, props,
+ SafelyDestroyFrameListProp(aDestructRoot, shell,
OverflowOutOfFlowsProperty());
RemoveStateBits(NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS);
}
if (HasOutsideBullet()) {
- SafelyDestroyFrameListProp(aDestructRoot, shell, props,
+ SafelyDestroyFrameListProp(aDestructRoot, shell,
OutsideBulletProperty());
RemoveStateBits(NS_BLOCK_FRAME_HAS_OUTSIDE_BULLET);
}
@@ -1669,7 +1667,7 @@ nsBlockFrame::ComputeFinalSize(const ReflowInput& aReflowInput,
// our computed size due to overflowing their containing block. (E.g. this
// ensures we fill the last row when a multi-row grid item is fragmented).
bool found;
- nscoord bSize = Properties().Get(FragStretchBSizeProperty(), &found);
+ nscoord bSize = GetProperty(FragStretchBSizeProperty(), &found);
if (found) {
finalSize.BSize(wm) = std::max(bSize, finalSize.BSize(wm));
}
@@ -1679,7 +1677,7 @@ nsBlockFrame::ComputeFinalSize(const ReflowInput& aReflowInput,
if (MOZ_UNLIKELY(aReflowInput.mFlags.mBClampMarginBoxMinSize) &&
NS_FRAME_IS_COMPLETE(aState.mReflowStatus)) {
bool found;
- nscoord cbSize = Properties().Get(BClampMarginBoxMinSizeProperty(), &found);
+ nscoord cbSize = GetProperty(BClampMarginBoxMinSizeProperty(), &found);
if (found) {
auto marginBoxBSize = finalSize.BSize(wm) +
aReflowInput.ComputedLogicalMargin().BStartEnd(wm);
@@ -1697,11 +1695,10 @@ nsBlockFrame::ComputeFinalSize(const ReflowInput& aReflowInput,
finalSize.BSize(wm) = std::max(0, finalSize.BSize(wm));
*aBEndEdgeOfChildren = blockEndEdgeOfChildren;
- FrameProperties properties = Properties();
if (blockEndEdgeOfChildren != finalSize.BSize(wm) - borderPadding.BEnd(wm)) {
- properties.Set(BlockEndEdgeOfChildrenProperty(), blockEndEdgeOfChildren);
+ SetProperty(BlockEndEdgeOfChildrenProperty(), blockEndEdgeOfChildren);
} else {
- properties.Delete(BlockEndEdgeOfChildrenProperty());
+ DeleteProperty(BlockEndEdgeOfChildrenProperty());
}
aMetrics.SetSize(wm, finalSize);
@@ -1834,7 +1831,7 @@ nsBlockFrame::ComputeCustomOverflow(nsOverflowAreas& aOverflowAreas)
{
bool found;
nscoord blockEndEdgeOfChildren =
- Properties().Get(BlockEndEdgeOfChildrenProperty(), &found);
+ GetProperty(BlockEndEdgeOfChildrenProperty(), &found);
if (found) {
ConsiderBlockEndEdgeOfChildren(GetWritingMode(),
blockEndEdgeOfChildren, aOverflowAreas);
@@ -4985,7 +4982,7 @@ nsBlockFrame::GetOverflowLines() const
if (!HasOverflowLines()) {
return nullptr;
}
- FrameLines* prop = Properties().Get(OverflowLinesProperty());
+ FrameLines* prop = GetProperty(OverflowLinesProperty());
NS_ASSERTION(prop && !prop->mLines.empty() &&
prop->mLines.front()->GetChildCount() == 0 ? prop->mFrames.IsEmpty() :
prop->mLines.front()->mFirstChild == prop->mFrames.FirstChild(),
@@ -4999,7 +4996,7 @@ nsBlockFrame::RemoveOverflowLines()
if (!HasOverflowLines()) {
return nullptr;
}
- FrameLines* prop = Properties().Remove(OverflowLinesProperty());
+ FrameLines* prop = RemoveProperty(OverflowLinesProperty());
NS_ASSERTION(prop && !prop->mLines.empty() &&
prop->mLines.front()->GetChildCount() == 0 ? prop->mFrames.IsEmpty() :
prop->mLines.front()->mFirstChild == prop->mFrames.FirstChild(),
@@ -5012,7 +5009,7 @@ void
nsBlockFrame::DestroyOverflowLines()
{
NS_ASSERTION(HasOverflowLines(), "huh?");
- FrameLines* prop = Properties().Remove(OverflowLinesProperty());
+ FrameLines* prop = RemoveProperty(OverflowLinesProperty());
NS_ASSERTION(prop && prop->mLines.empty(),
"value should always be stored but empty when destroying");
RemoveStateBits(NS_BLOCK_HAS_OVERFLOW_LINES);
@@ -5032,10 +5029,9 @@ nsBlockFrame::SetOverflowLines(FrameLines* aOverflowLines)
NS_ASSERTION(!(GetStateBits() & NS_BLOCK_HAS_OVERFLOW_LINES),
"Overwriting existing overflow lines");
- FrameProperties props = Properties();
// Verify that we won't overwrite an existing overflow list
- NS_ASSERTION(!props.Get(OverflowLinesProperty()), "existing overflow list");
- props.Set(OverflowLinesProperty(), aOverflowLines);
+ NS_ASSERTION(!GetProperty(OverflowLinesProperty()), "existing overflow list");
+ SetProperty(OverflowLinesProperty(), aOverflowLines);
AddStateBits(NS_BLOCK_HAS_OVERFLOW_LINES);
}
@@ -5088,7 +5084,7 @@ nsBlockFrame::GetInsideBullet() const
return nullptr;
}
NS_ASSERTION(!HasOutsideBullet(), "invalid bullet state");
- nsBulletFrame* frame = Properties().Get(InsideBulletProperty());
+ nsBulletFrame* frame = GetProperty(InsideBulletProperty());
NS_ASSERTION(frame && frame->GetType() == nsGkAtoms::bulletFrame,
"bogus inside bullet frame");
return frame;
@@ -5109,8 +5105,7 @@ nsBlockFrame::GetOutsideBulletList() const
return nullptr;
}
NS_ASSERTION(!HasInsideBullet(), "invalid bullet state");
- nsFrameList* list =
- Properties().Get(OutsideBulletProperty());
+ nsFrameList* list = GetProperty(OutsideBulletProperty());
NS_ASSERTION(list && list->GetLength() == 1 &&
list->FirstChild()->GetType() == nsGkAtoms::bulletFrame,
"bogus outside bullet list");
@@ -5123,8 +5118,7 @@ nsBlockFrame::GetPushedFloats() const
if (!HasPushedFloats()) {
return nullptr;
}
- nsFrameList* result =
- Properties().Get(PushedFloatProperty());
+ nsFrameList* result = GetProperty(PushedFloatProperty());
NS_ASSERTION(result, "value should always be non-empty when state set");
return result;
}
@@ -5137,7 +5131,7 @@ nsBlockFrame::EnsurePushedFloats()
return result;
result = new (PresContext()->PresShell()) nsFrameList;
- Properties().Set(PushedFloatProperty(), result);
+ SetProperty(PushedFloatProperty(), result);
AddStateBits(NS_BLOCK_HAS_PUSHED_FLOATS);
return result;
@@ -5149,7 +5143,7 @@ nsBlockFrame::RemovePushedFloats()
if (!HasPushedFloats()) {
return nullptr;
}
- nsFrameList *result = Properties().Remove(PushedFloatProperty());
+ nsFrameList *result = RemoveProperty(PushedFloatProperty());
RemoveStateBits(NS_BLOCK_HAS_PUSHED_FLOATS);
NS_ASSERTION(result, "value should always be non-empty when state set");
return result;
@@ -5619,7 +5613,7 @@ nsBlockInFlowLineIterator::nsBlockInFlowLineIterator(nsBlockFrame* aFrame,
if (mLine != line_end) {
*aFoundValidLine = true;
if (mLine != cursor) {
- aFrame->Properties().Set(nsBlockFrame::LineCursorProperty(), mLine);
+ aFrame->SetProperty(nsBlockFrame::LineCursorProperty(), mLine);
}
return;
}
@@ -6769,7 +6763,7 @@ void nsBlockFrame::ClearLineCursor()
return;
}
- Properties().Delete(LineCursorProperty());
+ DeleteProperty(LineCursorProperty());
RemoveStateBits(NS_BLOCK_HAS_LINE_CURSOR);
}
@@ -6780,7 +6774,7 @@ void nsBlockFrame::SetupLineCursor()
return;
}
- Properties().Set(LineCursorProperty(), mLines.front());
+ SetProperty(LineCursorProperty(), mLines.front());
AddStateBits(NS_BLOCK_HAS_LINE_CURSOR);
}
@@ -6790,9 +6784,7 @@ nsLineBox* nsBlockFrame::GetFirstLineContaining(nscoord y)
return nullptr;
}
- FrameProperties props = Properties();
-
- nsLineBox* property = props.Get(LineCursorProperty());
+ nsLineBox* property = GetProperty(LineCursorProperty());
LineIterator cursor = mLines.begin(property);
nsRect cursorArea = cursor->GetVisualOverflowArea();
@@ -6808,7 +6800,7 @@ nsLineBox* nsBlockFrame::GetFirstLineContaining(nscoord y)
}
if (cursor.get() != property) {
- props.Set(LineCursorProperty(), cursor.get());
+ SetProperty(LineCursorProperty(), cursor.get());
}
return cursor.get();
@@ -7021,11 +7013,11 @@ nsBlockFrame::CreateBulletFrameForListItem(bool aCreateBulletList,
if (aListStylePositionInside) {
nsFrameList bulletList(bullet, bullet);
AddFrames(bulletList, nullptr);
- Properties().Set(InsideBulletProperty(), bullet);
+ SetProperty(InsideBulletProperty(), bullet);
AddStateBits(NS_BLOCK_FRAME_HAS_INSIDE_BULLET);
} else {
nsFrameList* bulletList = new (shell) nsFrameList(bullet, bullet);
- Properties().Set(OutsideBulletProperty(), bulletList);
+ SetProperty(OutsideBulletProperty(), bulletList);
AddStateBits(NS_BLOCK_FRAME_HAS_OUTSIDE_BULLET);
}
}
diff --git a/layout/generic/nsBlockFrame.h b/layout/generic/nsBlockFrame.h
index bb41a6e99..f515cc26f 100644
--- a/layout/generic/nsBlockFrame.h
+++ b/layout/generic/nsBlockFrame.h
@@ -215,7 +215,7 @@ public:
~AutoLineCursorSetup()
{
if (mOrigCursor) {
- mFrame->Properties().Set(LineCursorProperty(), mOrigCursor);
+ mFrame->SetProperty(LineCursorProperty(), mOrigCursor);
} else {
mFrame->ClearLineCursor();
}
@@ -416,7 +416,7 @@ protected:
NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(LineCursorProperty, nsLineBox)
bool HasLineCursor() { return GetStateBits() & NS_BLOCK_HAS_LINE_CURSOR; }
nsLineBox* GetLineCursor() {
- return HasLineCursor() ? Properties().Get(LineCursorProperty()) : nullptr;
+ return HasLineCursor() ? GetProperty(LineCursorProperty()) : nullptr;
}
nsLineBox* NewLineBox(nsIFrame* aFrame, bool aIsBlock) {
diff --git a/layout/generic/nsBulletFrame.cpp b/layout/generic/nsBulletFrame.cpp
index aa8794321..f6595e8f6 100644
--- a/layout/generic/nsBulletFrame.cpp
+++ b/layout/generic/nsBulletFrame.cpp
@@ -903,7 +903,7 @@ nsBulletFrame::GetFontSizeInflation() const
if (!HasFontSizeInflation()) {
return 1.0f;
}
- return Properties().Get(FontSizeInflationProperty());
+ return GetProperty(FontSizeInflationProperty());
}
void
@@ -912,13 +912,13 @@ nsBulletFrame::SetFontSizeInflation(float aInflation)
if (aInflation == 1.0f) {
if (HasFontSizeInflation()) {
RemoveStateBits(BULLET_FRAME_HAS_FONT_INFLATION);
- Properties().Delete(FontSizeInflationProperty());
+ DeleteProperty(FontSizeInflationProperty());
}
return;
}
AddStateBits(BULLET_FRAME_HAS_FONT_INFLATION);
- Properties().Set(FontSizeInflationProperty(), aInflation);
+ SetProperty(FontSizeInflationProperty(), aInflation);
}
already_AddRefed<imgIContainer>
diff --git a/layout/generic/nsCanvasFrame.cpp b/layout/generic/nsCanvasFrame.cpp
index 70a2117cf..1a8812fb7 100644
--- a/layout/generic/nsCanvasFrame.cpp
+++ b/layout/generic/nsCanvasFrame.cpp
@@ -300,7 +300,7 @@ nsDisplayCanvasBackgroundImage::Paint(nsDisplayListBuilder* aBuilder,
// above.
destRect.Round();
RefPtr<DrawTarget> dt =
- Frame()->Properties().Get(nsIFrame::CachedBackgroundImageDT());
+ Frame()->GetProperty(nsIFrame::CachedBackgroundImageDT());
DrawTarget* destDT = dest->GetDrawTarget();
if (dt) {
BlitSurface(destDT, destRect, dt);
@@ -317,7 +317,7 @@ nsDisplayCanvasBackgroundImage::Paint(nsDisplayListBuilder* aBuilder,
nsRenderingContext context(ctx);
PaintInternal(aBuilder, &context, bgClipRect, &bgClipRect);
BlitSurface(dest->GetDrawTarget(), destRect, dt);
- frame->Properties().Set(nsIFrame::CachedBackgroundImageDT(),
+ frame->SetProperty(nsIFrame::CachedBackgroundImageDT(),
dt.forget().take());
return;
}
diff --git a/layout/generic/nsCanvasFrame.h b/layout/generic/nsCanvasFrame.h
index 236ffb9c7..8bd9dbf79 100644
--- a/layout/generic/nsCanvasFrame.h
+++ b/layout/generic/nsCanvasFrame.h
@@ -201,7 +201,7 @@ public:
virtual void NotifyRenderingChanged() override
{
- mFrame->Properties().Delete(nsIFrame::CachedBackgroundImageDT());
+ mFrame->DeleteProperty(nsIFrame::CachedBackgroundImageDT());
}
virtual bool ShouldFixToViewport(nsDisplayListBuilder* aBuilder) override
diff --git a/layout/generic/nsContainerFrame.cpp b/layout/generic/nsContainerFrame.cpp
index 813d19dfe..abf687c9b 100644
--- a/layout/generic/nsContainerFrame.cpp
+++ b/layout/generic/nsContainerFrame.cpp
@@ -78,7 +78,7 @@ nsContainerFrame::SetInitialChildList(ChildListID aListID,
"Only top layer frames should have backdrop");
MOZ_ASSERT(GetStateBits() & NS_FRAME_OUT_OF_FLOW,
"Top layer frames should be out-of-flow");
- MOZ_ASSERT(!Properties().Get(BackdropProperty()),
+ MOZ_ASSERT(!GetProperty(BackdropProperty()),
"We shouldn't have setup backdrop frame list before");
#ifdef DEBUG
{
@@ -93,7 +93,7 @@ nsContainerFrame::SetInitialChildList(ChildListID aListID,
#endif
nsFrameList* list =
new (PresContext()->PresShell()) nsFrameList(aChildList);
- Properties().Set(BackdropProperty(), list);
+ SetProperty(BackdropProperty(), list);
} else {
MOZ_ASSERT_UNREACHABLE("Unexpected child list");
}
@@ -189,18 +189,17 @@ nsContainerFrame::DestroyAbsoluteFrames(nsIFrame* aDestructRoot)
void
nsContainerFrame::SafelyDestroyFrameListProp(nsIFrame* aDestructRoot,
nsIPresShell* aPresShell,
- FramePropertyTable* aPropTable,
FrameListPropertyDescriptor aProp)
{
// Note that the last frame can be removed through another route and thus
// delete the property -- that's why we fetch the property again before
// removing each frame rather than fetching it once and iterating the list.
- while (nsFrameList* frameList = aPropTable->Get(this, aProp)) {
+ while (nsFrameList* frameList = GetProperty(aProp)) {
nsIFrame* frame = frameList->RemoveFirstChild();
if (MOZ_LIKELY(frame)) {
frame->DestroyFrom(aDestructRoot);
} else {
- aPropTable->Remove(this, aProp);
+ RemoveProperty(aProp);
frameList->Delete(aPresShell);
return;
}
@@ -220,25 +219,49 @@ nsContainerFrame::DestroyFrom(nsIFrame* aDestructRoot)
// Destroy frames on the principal child list.
mFrames.DestroyFramesFrom(aDestructRoot);
+
+ if (MOZ_UNLIKELY(!mProperties.IsEmpty())) {
+ using T = mozilla::FrameProperties::UntypedDescriptor;
+ bool hasO = false, hasOC = false, hasEOC = false, hasBackdrop = false;
+ mProperties.ForEach([&] (const T& aProp, void*) {
+ if (aProp == OverflowProperty()) {
+ hasO = true;
+ } else if (aProp == OverflowContainersProperty()) {
+ hasOC = true;
+ } else if (aProp == ExcessOverflowContainersProperty()) {
+ hasEOC = true;
+ } else if (aProp == BackdropProperty()) {
+ hasBackdrop = true;
+ }
+ return true;
+ });
+
// Destroy frames on the auxiliary frame lists and delete the lists.
nsPresContext* pc = PresContext();
nsIPresShell* shell = pc->PresShell();
- FramePropertyTable* props = pc->PropertyTable();
- SafelyDestroyFrameListProp(aDestructRoot, shell, props, OverflowProperty());
-
- MOZ_ASSERT(IsFrameOfType(nsIFrame::eCanContainOverflowContainers) ||
- !(props->Get(this, nsContainerFrame::OverflowContainersProperty()) ||
- props->Get(this, nsContainerFrame::ExcessOverflowContainersProperty())),
- "this type of frame should't have overflow containers");
- SafelyDestroyFrameListProp(aDestructRoot, shell, props,
- OverflowContainersProperty());
- SafelyDestroyFrameListProp(aDestructRoot, shell, props,
- ExcessOverflowContainersProperty());
-
- MOZ_ASSERT(!props->Get(this, BackdropProperty()) ||
+ if (hasO) {
+ SafelyDestroyFrameListProp(aDestructRoot, shell, OverflowProperty());
+ }
+
+ MOZ_ASSERT(IsFrameOfType(eCanContainOverflowContainers) ||
+ !(hasOC || hasEOC),
+ "this type of frame shouldn't have overflow containers");
+ if (hasOC) {
+ SafelyDestroyFrameListProp(aDestructRoot, shell,
+ OverflowContainersProperty());
+ }
+ if (hasEOC) {
+ SafelyDestroyFrameListProp(aDestructRoot, shell,
+ ExcessOverflowContainersProperty());
+ }
+
+ MOZ_ASSERT(!GetProperty(BackdropProperty()) ||
StyleDisplay()->mTopLayer != NS_STYLE_TOP_LAYER_NONE,
"only top layer frame may have backdrop");
- SafelyDestroyFrameListProp(aDestructRoot, shell, props, BackdropProperty());
+ if (hasBackdrop) {
+ SafelyDestroyFrameListProp(aDestructRoot, shell, BackdropProperty());
+ }
+}
nsSplittableFrame::DestroyFrom(aDestructRoot);
}
@@ -276,38 +299,28 @@ nsContainerFrame::GetChildList(ChildListID aListID) const
}
}
-static void
-AppendIfNonempty(const nsIFrame* aFrame,
- FramePropertyTable* aPropTable,
- nsContainerFrame::FrameListPropertyDescriptor aProperty,
- nsTArray<nsIFrame::ChildList>* aLists,
- nsIFrame::ChildListID aListID)
-{
- if (nsFrameList* list = aPropTable->Get(aFrame, aProperty)) {
- list->AppendIfNonempty(aLists, aListID);
- }
-}
-
void
nsContainerFrame::GetChildLists(nsTArray<ChildList>* aLists) const
{
mFrames.AppendIfNonempty(aLists, kPrincipalList);
- FramePropertyTable* propTable = PresContext()->PropertyTable();
- ::AppendIfNonempty(this, propTable, OverflowProperty(),
- aLists, kOverflowList);
- if (IsFrameOfType(nsIFrame::eCanContainOverflowContainers)) {
- ::AppendIfNonempty(this, propTable, OverflowContainersProperty(),
- aLists, kOverflowContainersList);
- ::AppendIfNonempty(this, propTable, ExcessOverflowContainersProperty(),
- aLists, kExcessOverflowContainersList);
- }
- // Bypass BackdropProperty hashtable lookup for any in-flow frames
- // since frames in the top layer (only which can have backdrop) are
- // definitely out-of-flow.
- if (GetStateBits() & NS_FRAME_OUT_OF_FLOW) {
- ::AppendIfNonempty(this, propTable, BackdropProperty(),
- aLists, kBackdropList);
- }
+ using T = mozilla::FrameProperties::UntypedDescriptor;
+ mProperties.ForEach([this, aLists] (const T& aProp, void* aValue) {
+ typedef const nsFrameList* L;
+ if (aProp == OverflowProperty()) {
+ L(aValue)->AppendIfNonempty(aLists, kOverflowList);
+ } else if (aProp == OverflowContainersProperty()) {
+ MOZ_ASSERT(IsFrameOfType(nsIFrame::eCanContainOverflowContainers),
+ "found unexpected OverflowContainersProperty");
+ L(aValue)->AppendIfNonempty(aLists, kOverflowContainersList);
+ } else if (aProp == ExcessOverflowContainersProperty()) {
+ MOZ_ASSERT(IsFrameOfType(nsIFrame::eCanContainOverflowContainers),
+ "found unexpected ExcessOverflowContainersProperty");
+ L(aValue)->AppendIfNonempty(aLists, kExcessOverflowContainersList);
+ } else if (aProp == BackdropProperty()) {
+ L(aValue)->AppendIfNonempty(aLists, kBackdropList);
+ }
+ return true;
+ });
nsSplittableFrame::GetChildLists(aLists);
}
@@ -1335,15 +1348,15 @@ nsContainerFrame::DisplayOverflowContainers(nsDisplayListBuilder* aBuilder,
}
static bool
-TryRemoveFrame(nsIFrame* aFrame, FramePropertyTable* aPropTable,
+TryRemoveFrame(nsIFrame* aFrame,
nsContainerFrame::FrameListPropertyDescriptor aProp,
nsIFrame* aChildToRemove)
{
- nsFrameList* list = aPropTable->Get(aFrame, aProp);
+ nsFrameList* list = aFrame->GetProperty(aProp);
if (list && list->StartRemoveFrame(aChildToRemove)) {
// aChildToRemove *may* have been removed from this list.
if (list->IsEmpty()) {
- aPropTable->Remove(aFrame, aProp);
+ aFrame->RemoveProperty(aProp);
list->Delete(aFrame->PresContext()->PresShell());
}
return true;
@@ -1356,13 +1369,12 @@ nsContainerFrame::MaybeStealOverflowContainerFrame(nsIFrame* aChild)
{
bool removed = false;
if (MOZ_UNLIKELY(aChild->GetStateBits() & NS_FRAME_IS_OVERFLOW_CONTAINER)) {
- FramePropertyTable* propTable = PresContext()->PropertyTable();
// Try removing from the overflow container list.
- removed = ::TryRemoveFrame(this, propTable, OverflowContainersProperty(),
+ removed = ::TryRemoveFrame(this, OverflowContainersProperty(),
aChild);
if (!removed) {
// It might be in the excess overflow container list.
- removed = ::TryRemoveFrame(this, propTable,
+ removed = ::TryRemoveFrame(this,
ExcessOverflowContainersProperty(),
aChild);
}
@@ -1377,10 +1389,9 @@ nsContainerFrame::StealFrame(nsIFrame* aChild)
if (!mFrames.ContainsFrame(aChild)) {
nsFrameList* list = GetOverflowFrames();
if (!list || !list->ContainsFrame(aChild)) {
- FramePropertyTable* propTable = PresContext()->PropertyTable();
- list = propTable->Get(this, OverflowContainersProperty());
+ list = GetProperty(OverflowContainersProperty());
if (!list || !list->ContainsFrame(aChild)) {
- list = propTable->Get(this, ExcessOverflowContainersProperty());
+ list = GetProperty(ExcessOverflowContainersProperty());
MOZ_ASSERT(list && list->ContainsFrame(aChild), "aChild isn't our child"
" or on a frame list not supported by StealFrame");
}
@@ -1536,20 +1547,20 @@ nsContainerFrame::SetOverflowFrames(const nsFrameList& aOverflowFrames)
nsPresContext* pc = PresContext();
nsFrameList* newList = new (pc->PresShell()) nsFrameList(aOverflowFrames);
- pc->PropertyTable()->Set(this, OverflowProperty(), newList);
+ SetProperty(OverflowProperty(), newList);
}
nsFrameList*
nsContainerFrame::GetPropTableFrames(
FrameListPropertyDescriptor aProperty) const
{
- return PresContext()->PropertyTable()->Get(this, aProperty);
+ return GetProperty(aProperty);
}
nsFrameList*
nsContainerFrame::RemovePropTableFrames(FrameListPropertyDescriptor aProperty)
{
- return PresContext()->PropertyTable()->Remove(this, aProperty);
+ return RemoveProperty(aProperty);
}
void
@@ -1563,7 +1574,7 @@ nsContainerFrame::SetPropTableFrames(nsFrameList* aFrameList,
IsFrameOfType(nsIFrame::eCanContainOverflowContainers),
"this type of frame can't have overflow containers");
MOZ_ASSERT(!GetPropTableFrames(aProperty));
- PresContext()->PropertyTable()->Set(this, aProperty, aFrameList);
+ SetProperty(aProperty, aFrameList);
}
/**
@@ -2253,13 +2264,11 @@ nsOverflowContinuationTracker::EndFinish(nsIFrame* aChild)
return;
}
// Forget mOverflowContList if it was deleted.
- nsPresContext* pc = aChild->PresContext();
- FramePropertyTable* propTable = pc->PropertyTable();
- nsFrameList* eoc = propTable->Get(
- mParent, nsContainerFrame::ExcessOverflowContainersProperty());
+ nsFrameList* eoc = mParent->GetProperty
+ (nsContainerFrame::ExcessOverflowContainersProperty());
if (eoc != mOverflowContList) {
- nsFrameList* oc = static_cast<nsFrameList*>(propTable->Get(mParent,
- nsContainerFrame::OverflowContainersProperty()));
+ nsFrameList* oc = static_cast<nsFrameList*>(mParent->GetProperty
+ (nsContainerFrame::OverflowContainersProperty()));
if (oc != mOverflowContList) {
// mOverflowContList was deleted
mPrevOverflowCont = nullptr;
diff --git a/layout/generic/nsContainerFrame.h b/layout/generic/nsContainerFrame.h
index a9f6d52df..ddf993d91 100644
--- a/layout/generic/nsContainerFrame.h
+++ b/layout/generic/nsContainerFrame.h
@@ -24,9 +24,6 @@
#define NS_FRAME_NO_DELETE_NEXT_IN_FLOW_CHILD 0x0010
class nsOverflowContinuationTracker;
-namespace mozilla {
-class FramePropertyTable;
-} // namespace mozilla
// Some macros for container classes to do sanity checking on
// width/height/x/y values computed during reflow.
@@ -548,7 +545,7 @@ public:
// Use this to suppress the CRAZY_SIZE assertions.
NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(DebugReflowingWithInfiniteISize, bool)
bool IsCrazySizeAssertSuppressed() const {
- return Properties().Get(DebugReflowingWithInfiniteISize());
+ return GetProperty(DebugReflowingWithInfiniteISize());
}
#endif
@@ -716,7 +713,6 @@ protected:
*/
void SafelyDestroyFrameListProp(nsIFrame* aDestructRoot,
nsIPresShell* aPresShell,
- mozilla::FramePropertyTable* aPropTable,
FrameListPropertyDescriptor aProp);
// ==========================================================================
@@ -898,7 +894,7 @@ inline
nsFrameList*
nsContainerFrame::GetOverflowFrames() const
{
- nsFrameList* list = Properties().Get(OverflowProperty());
+ nsFrameList* list = GetProperty(OverflowProperty());
NS_ASSERTION(!list || !list->IsEmpty(), "Unexpected empty overflow list");
return list;
}
@@ -907,7 +903,7 @@ inline
nsFrameList*
nsContainerFrame::StealOverflowFrames()
{
- nsFrameList* list = Properties().Remove(OverflowProperty());
+ nsFrameList* list = RemoveProperty(OverflowProperty());
NS_ASSERTION(!list || !list->IsEmpty(), "Unexpected empty overflow list");
return list;
}
diff --git a/layout/generic/nsFlexContainerFrame.cpp b/layout/generic/nsFlexContainerFrame.cpp
index 3818d3cb7..94bce1e7a 100644
--- a/layout/generic/nsFlexContainerFrame.cpp
+++ b/layout/generic/nsFlexContainerFrame.cpp
@@ -1816,8 +1816,8 @@ nsFlexContainerFrame::MeasureAscentAndHeightForFlexItem(
nsPresContext* aPresContext,
ReflowInput& aChildReflowInput)
{
- const FrameProperties props = aItem.Frame()->Properties();
- if (const auto* cachedResult = props.Get(CachedFlexMeasuringReflow())) {
+ if (const auto* cachedResult =
+ aItem.Frame()->GetProperty(CachedFlexMeasuringReflow())) {
if (cachedResult->IsValidFor(aChildReflowInput)) {
return *cachedResult;
}
@@ -1847,7 +1847,7 @@ nsFlexContainerFrame::MeasureAscentAndHeightForFlexItem(
auto result =
new CachedMeasuringReflowResult(aChildReflowInput, childDesiredSize);
- props.Set(CachedFlexMeasuringReflow(), result);
+ aItem.Frame()->SetProperty(CachedFlexMeasuringReflow(), result);
return *result;
}
@@ -1855,7 +1855,7 @@ nsFlexContainerFrame::MeasureAscentAndHeightForFlexItem(
nsFlexContainerFrame::MarkIntrinsicISizesDirty()
{
for (nsIFrame* childFrame : mFrames) {
- childFrame->Properties().Delete(CachedFlexMeasuringReflow());
+ childFrame->DeleteProperty(CachedFlexMeasuringReflow());
}
nsContainerFrame::MarkIntrinsicISizesDirty();
}
@@ -4236,25 +4236,26 @@ class MOZ_RAII AutoFlexItemMainSizeOverride final
public:
explicit AutoFlexItemMainSizeOverride(FlexItem& aItem
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
- : mItemProps(aItem.Frame()->Properties())
+ : mItemFrame(aItem.Frame())
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
- MOZ_ASSERT(!mItemProps.Has(nsIFrame::FlexItemMainSizeOverride()),
+ MOZ_ASSERT(!mItemFrame->HasProperty(nsIFrame::FlexItemMainSizeOverride()),
"FlexItemMainSizeOverride prop shouldn't be set already; "
"it should only be set temporarily (& not recursively)");
NS_ASSERTION(aItem.HasIntrinsicRatio(),
"This should only be needed for items with an aspect ratio");
- mItemProps.Set(nsIFrame::FlexItemMainSizeOverride(), aItem.GetMainSize());
+ mItemFrame->SetProperty(nsIFrame::FlexItemMainSizeOverride(),
+ aItem.GetMainSize());
}
~AutoFlexItemMainSizeOverride() {
- mItemProps.Remove(nsIFrame::FlexItemMainSizeOverride());
+ mItemFrame->RemoveProperty(nsIFrame::FlexItemMainSizeOverride());
}
private:
- const FrameProperties mItemProps;
+ nsIFrame* mItemFrame;
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
@@ -4668,8 +4669,7 @@ nsFlexContainerFrame::MoveFlexItemToFinalPosition(
// If item is relpos, look up its offsets (cached from prev reflow)
LogicalMargin logicalOffsets(outerWM);
if (NS_STYLE_POSITION_RELATIVE == aItem.Frame()->StyleDisplay()->mPosition) {
- FrameProperties props = aItem.Frame()->Properties();
- nsMargin* cachedOffsets = props.Get(nsIFrame::ComputedOffsetProperty());
+ nsMargin* cachedOffsets = aItem.Frame()->GetProperty(nsIFrame::ComputedOffsetProperty());
MOZ_ASSERT(cachedOffsets,
"relpos previously-reflowed frame should've cached its offsets");
logicalOffsets = LogicalMargin(outerWM, *cachedOffsets);
diff --git a/layout/generic/nsFloatManager.cpp b/layout/generic/nsFloatManager.cpp
index 2c0ff1f38..4e7e7ff91 100644
--- a/layout/generic/nsFloatManager.cpp
+++ b/layout/generic/nsFloatManager.cpp
@@ -331,7 +331,7 @@ nsFloatManager::GetRegionFor(WritingMode aWM, nsIFrame* aFloat,
const nsSize& aContainerSize)
{
LogicalRect region = aFloat->GetLogicalRect(aWM, aContainerSize);
- void* storedRegion = aFloat->Properties().Get(FloatRegionProperty());
+ void* storedRegion = aFloat->GetProperty(FloatRegionProperty());
if (storedRegion) {
nsMargin margin = *static_cast<nsMargin*>(storedRegion);
region.Inflate(aWM, LogicalMargin(aWM, margin));
@@ -346,15 +346,14 @@ nsFloatManager::StoreRegionFor(WritingMode aWM, nsIFrame* aFloat,
{
nsRect region = aRegion.GetPhysicalRect(aWM, aContainerSize);
nsRect rect = aFloat->GetRect();
- FrameProperties props = aFloat->Properties();
if (region.IsEqualEdges(rect)) {
- props.Delete(FloatRegionProperty());
+ aFloat->DeleteProperty(FloatRegionProperty());
}
else {
- nsMargin* storedMargin = props.Get(FloatRegionProperty());
+ nsMargin* storedMargin = aFloat->GetProperty(FloatRegionProperty());
if (!storedMargin) {
storedMargin = new nsMargin();
- props.Set(FloatRegionProperty(), storedMargin);
+ aFloat->SetProperty(FloatRegionProperty(), storedMargin);
}
*storedMargin = region - rect;
}
diff --git a/layout/generic/nsFontInflationData.cpp b/layout/generic/nsFontInflationData.cpp
index 9e9a51999..831658c9e 100644
--- a/layout/generic/nsFontInflationData.cpp
+++ b/layout/generic/nsFontInflationData.cpp
@@ -6,7 +6,7 @@
/* Per-block-formatting-context manager of font size inflation for pan and zoom UI. */
#include "nsFontInflationData.h"
-#include "FramePropertyTable.h"
+#include "FrameProperties.h"
#include "nsTextControlFrame.h"
#include "nsListControlFrame.h"
#include "nsComboboxControlFrame.h"
@@ -27,7 +27,7 @@ nsFontInflationData::FindFontInflationDataFor(const nsIFrame *aFrame)
NS_ASSERTION(bfc->GetStateBits() & NS_FRAME_FONT_INFLATION_FLOW_ROOT,
"should have found a flow root");
- return bfc->Properties().Get(FontInflationDataProperty());
+ return bfc->GetProperty(FontInflationDataProperty());
}
/* static */ bool
@@ -36,8 +36,7 @@ nsFontInflationData::UpdateFontInflationDataISizeFor(const ReflowInput& aReflowI
nsIFrame *bfc = aReflowInput.mFrame;
NS_ASSERTION(bfc->GetStateBits() & NS_FRAME_FONT_INFLATION_FLOW_ROOT,
"should have been given a flow root");
- FrameProperties bfcProps(bfc->Properties());
- nsFontInflationData *data = bfcProps.Get(FontInflationDataProperty());
+ nsFontInflationData *data = bfc->GetProperty(FontInflationDataProperty());
bool oldInflationEnabled;
nscoord oldNCAISize;
if (data) {
@@ -45,7 +44,7 @@ nsFontInflationData::UpdateFontInflationDataISizeFor(const ReflowInput& aReflowI
oldInflationEnabled = data->mInflationEnabled;
} else {
data = new nsFontInflationData(bfc);
- bfcProps.Set(FontInflationDataProperty(), data);
+ bfc->SetProperty(FontInflationDataProperty(), data);
oldNCAISize = -1;
oldInflationEnabled = true; /* not relevant */
}
@@ -65,8 +64,7 @@ nsFontInflationData::MarkFontInflationDataTextDirty(nsIFrame *aBFCFrame)
NS_ASSERTION(aBFCFrame->GetStateBits() & NS_FRAME_FONT_INFLATION_FLOW_ROOT,
"should have been given a flow root");
- FrameProperties bfcProps(aBFCFrame->Properties());
- nsFontInflationData *data = bfcProps.Get(FontInflationDataProperty());
+ nsFontInflationData *data = aBFCFrame->GetProperty(FontInflationDataProperty());
if (data) {
data->MarkTextDirty();
}
diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp
index fa5b24d40..bd96f213b 100644
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -168,13 +168,12 @@ NS_DECLARE_FRAME_PROPERTY_DELETABLE(BoxMetricsProperty, nsBoxLayoutMetrics)
static void
InitBoxMetrics(nsIFrame* aFrame, bool aClear)
{
- FrameProperties props = aFrame->Properties();
if (aClear) {
- props.Delete(BoxMetricsProperty());
+ aFrame->DeleteProperty(BoxMetricsProperty());
}
nsBoxLayoutMetrics* metrics = new nsBoxLayoutMetrics();
- props.Set(BoxMetricsProperty(), metrics);
+ aFrame->SetProperty(BoxMetricsProperty(), metrics);
static_cast<nsFrame*>(aFrame)->nsFrame::MarkIntrinsicISizesDirty();
metrics->mBlockAscent = 0;
@@ -254,7 +253,7 @@ nsIFrame::HasAbsolutelyPositionedChildren() const {
nsAbsoluteContainingBlock*
nsIFrame::GetAbsoluteContainingBlock() const {
NS_ASSERTION(IsAbsoluteContainer(), "The frame is not marked as an abspos container correctly");
- nsAbsoluteContainingBlock* absCB = Properties().Get(AbsoluteContainingBlockProperty());
+ nsAbsoluteContainingBlock* absCB = GetProperty(AbsoluteContainingBlockProperty());
NS_ASSERTION(absCB, "The frame is marked as an abspos container but doesn't have the property");
return absCB;
}
@@ -263,25 +262,25 @@ void
nsIFrame::MarkAsAbsoluteContainingBlock()
{
MOZ_ASSERT(GetStateBits() & NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN);
- NS_ASSERTION(!Properties().Get(AbsoluteContainingBlockProperty()),
+ NS_ASSERTION(!GetProperty(AbsoluteContainingBlockProperty()),
"Already has an abs-pos containing block property?");
NS_ASSERTION(!HasAnyStateBits(NS_FRAME_HAS_ABSPOS_CHILDREN),
"Already has NS_FRAME_HAS_ABSPOS_CHILDREN state bit?");
AddStateBits(NS_FRAME_HAS_ABSPOS_CHILDREN);
- Properties().Set(AbsoluteContainingBlockProperty(), new nsAbsoluteContainingBlock(GetAbsoluteListID()));
+ SetProperty(AbsoluteContainingBlockProperty(), new nsAbsoluteContainingBlock(GetAbsoluteListID()));
}
void
nsIFrame::MarkAsNotAbsoluteContainingBlock()
{
NS_ASSERTION(!HasAbsolutelyPositionedChildren(), "Think of the children!");
- NS_ASSERTION(Properties().Get(AbsoluteContainingBlockProperty()),
+ NS_ASSERTION(GetProperty(AbsoluteContainingBlockProperty()),
"Should have an abs-pos containing block property");
NS_ASSERTION(HasAnyStateBits(NS_FRAME_HAS_ABSPOS_CHILDREN),
"Should have NS_FRAME_HAS_ABSPOS_CHILDREN state bit");
MOZ_ASSERT(HasAnyStateBits(NS_FRAME_CAN_HAVE_ABSPOS_CHILDREN));
RemoveStateBits(NS_FRAME_HAS_ABSPOS_CHILDREN);
- Properties().Delete(AbsoluteContainingBlockProperty());
+ DeleteProperty(AbsoluteContainingBlockProperty());
}
bool
@@ -652,32 +651,30 @@ nsFrame::DestroyFrom(nsIFrame* aDestructRoot)
}
// If we have any IB split siblings, clear their references to us.
- // (Note: This has to happen before we call shell->NotifyDestroyingFrame,
- // because that clears our Properties() table.)
+ // (Note: This has to happen before we clear our Properties() table.)
if (mState & NS_FRAME_PART_OF_IBSPLIT) {
// Delete previous sibling's reference to me.
- nsIFrame* prevSib = Properties().Get(nsIFrame::IBSplitPrevSibling());
+ nsIFrame* prevSib = GetProperty(nsIFrame::IBSplitPrevSibling());
if (prevSib) {
NS_WARNING_ASSERTION(
- this == prevSib->Properties().Get(nsIFrame::IBSplitSibling()),
+ this == prevSib->GetProperty(nsIFrame::IBSplitSibling()),
"IB sibling chain is inconsistent");
- prevSib->Properties().Delete(nsIFrame::IBSplitSibling());
+ prevSib->DeleteProperty(nsIFrame::IBSplitSibling());
}
// Delete next sibling's reference to me.
- nsIFrame* nextSib = Properties().Get(nsIFrame::IBSplitSibling());
+ nsIFrame* nextSib = GetProperty(nsIFrame::IBSplitSibling());
if (nextSib) {
NS_WARNING_ASSERTION(
- this == nextSib->Properties().Get(nsIFrame::IBSplitPrevSibling()),
+ this == nextSib->GetProperty(nsIFrame::IBSplitPrevSibling()),
"IB sibling chain is inconsistent");
- nextSib->Properties().Delete(nsIFrame::IBSplitPrevSibling());
+ nextSib->DeleteProperty(nsIFrame::IBSplitPrevSibling());
}
}
bool isPrimaryFrame = (mContent && mContent->GetPrimaryFrame() == this);
if (isPrimaryFrame) {
- // This needs to happen before shell->NotifyDestroyingFrame because
- // that clears our Properties() table.
+ // This needs to happen before we clear our Properties() table.
ActiveLayerTracker::TransferActivityToContent(this, mContent);
// Unfortunately, we need to do this for all frames being reframed
@@ -712,9 +709,8 @@ nsFrame::DestroyFrom(nsIFrame* aDestructRoot)
}
}
- // Disable visibility tracking. Note that we have to do this before calling
- // NotifyDestroyingFrame(), which will clear frame properties and make us lose
- // track of whether we were previously visible or not.
+ // Disable visibility tracking. Note that we have to do this before we clear
+ // frame properties and lose track of whether we were previously visible.
// XXX(seth): It'd be ideal to assert that we're already marked nonvisible
// here, but it's unfortunately tricky to guarantee in the face of things like
// frame reconstruction induced by style changes.
@@ -742,6 +738,10 @@ nsFrame::DestroyFrom(nsIFrame* aDestructRoot)
mContent->SetPrimaryFrame(nullptr);
}
+ // Delete all properties attached to the frame, to ensure any property
+ // destructors that need the frame pointer are handled properly.
+ DeleteAllProperties();
+
// Must retrieve the object ID before calling destructors, so the
// vtable is still valid.
//
@@ -860,22 +860,21 @@ nsFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext)
// calls GetUsed(Margin|Border|Padding)() before the next reflow, we
// can give an accurate answer.
// We don't want to set the property if one already exists.
- FrameProperties props = Properties();
nsMargin oldValue(0, 0, 0, 0);
nsMargin newValue(0, 0, 0, 0);
const nsStyleMargin* oldMargin = aOldStyleContext->PeekStyleMargin();
if (oldMargin && oldMargin->GetMargin(oldValue)) {
if ((!StyleMargin()->GetMargin(newValue) || oldValue != newValue) &&
- !props.Get(UsedMarginProperty())) {
- props.Set(UsedMarginProperty(), new nsMargin(oldValue));
+ !GetProperty(UsedMarginProperty())) {
+ SetProperty(UsedMarginProperty(), new nsMargin(oldValue));
}
}
const nsStylePadding* oldPadding = aOldStyleContext->PeekStylePadding();
if (oldPadding && oldPadding->GetPadding(oldValue)) {
if ((!StylePadding()->GetPadding(newValue) || oldValue != newValue) &&
- !props.Get(UsedPaddingProperty())) {
- props.Set(UsedPaddingProperty(), new nsMargin(oldValue));
+ !GetProperty(UsedPaddingProperty())) {
+ SetProperty(UsedPaddingProperty(), new nsMargin(oldValue));
}
}
@@ -884,8 +883,8 @@ nsFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext)
oldValue = oldBorder->GetComputedBorder();
newValue = StyleBorder()->GetComputedBorder();
if (oldValue != newValue &&
- !props.Get(UsedBorderProperty())) {
- props.Set(UsedBorderProperty(), new nsMargin(oldValue));
+ !GetProperty(UsedBorderProperty())) {
+ SetProperty(UsedBorderProperty(), new nsMargin(oldValue));
}
}
}
@@ -961,7 +960,7 @@ nsIFrame::GetUsedMargin() const
IsSVGText())
return margin;
- nsMargin *m = Properties().Get(UsedMarginProperty());
+ nsMargin *m = GetProperty(UsedMarginProperty());
if (m) {
margin = *m;
} else {
@@ -1000,7 +999,7 @@ nsIFrame::GetUsedBorder() const
return border;
}
- nsMargin *b = Properties().Get(UsedBorderProperty());
+ nsMargin *b = GetProperty(UsedBorderProperty());
if (b) {
border = *b;
} else {
@@ -1037,7 +1036,7 @@ nsIFrame::GetUsedPadding() const
}
}
- nsMargin *p = Properties().Get(UsedPaddingProperty());
+ nsMargin *p = GetProperty(UsedPaddingProperty());
if (p) {
padding = *p;
} else {
@@ -1478,8 +1477,7 @@ nsIFrame::GetVisibility() const
}
bool isSet = false;
- FrameProperties props = Properties();
- uint32_t visibleCount = props.Get(VisibilityStateProperty(), &isSet);
+ uint32_t visibleCount = GetProperty(VisibilityStateProperty(), &isSet);
MOZ_ASSERT(isSet, "Should have a VisibilityStateProperty value "
"if NS_FRAME_VISIBILITY_IS_TRACKED is set");
@@ -1552,15 +1550,14 @@ nsIFrame::EnableVisibilityTracking()
return; // Nothing to do.
}
- FrameProperties props = Properties();
- MOZ_ASSERT(!props.Has(VisibilityStateProperty()),
+ MOZ_ASSERT(!HasProperty(VisibilityStateProperty()),
"Shouldn't have a VisibilityStateProperty value "
"if NS_FRAME_VISIBILITY_IS_TRACKED is not set");
// Add the state bit so we know to track visibility for this frame, and
// initialize the frame property.
AddStateBits(NS_FRAME_VISIBILITY_IS_TRACKED);
- props.Set(VisibilityStateProperty(), 0);
+ SetProperty(VisibilityStateProperty(), 0);
nsIPresShell* presShell = PresContext()->PresShell();
if (!presShell) {
@@ -1582,8 +1579,7 @@ nsIFrame::DisableVisibilityTracking()
}
bool isSet = false;
- FrameProperties props = Properties();
- uint32_t visibleCount = props.Remove(VisibilityStateProperty(), &isSet);
+ uint32_t visibleCount = RemoveProperty(VisibilityStateProperty(), &isSet);
MOZ_ASSERT(isSet, "Should have a VisibilityStateProperty value "
"if NS_FRAME_VISIBILITY_IS_TRACKED is set");
@@ -1605,8 +1601,7 @@ nsIFrame::DecApproximateVisibleCount(Maybe<OnNonvisible> aNonvisibleAction
MOZ_ASSERT(GetStateBits() & NS_FRAME_VISIBILITY_IS_TRACKED);
bool isSet = false;
- FrameProperties props = Properties();
- uint32_t visibleCount = props.Get(VisibilityStateProperty(), &isSet);
+ uint32_t visibleCount = GetProperty(VisibilityStateProperty(), &isSet);
MOZ_ASSERT(isSet, "Should have a VisibilityStateProperty value "
"if NS_FRAME_VISIBILITY_IS_TRACKED is set");
@@ -1614,7 +1609,7 @@ nsIFrame::DecApproximateVisibleCount(Maybe<OnNonvisible> aNonvisibleAction
"decrementing its visible count?");
visibleCount--;
- props.Set(VisibilityStateProperty(), visibleCount);
+ SetProperty(VisibilityStateProperty(), visibleCount);
if (visibleCount > 0) {
return;
}
@@ -1629,14 +1624,13 @@ nsIFrame::IncApproximateVisibleCount()
MOZ_ASSERT(GetStateBits() & NS_FRAME_VISIBILITY_IS_TRACKED);
bool isSet = false;
- FrameProperties props = Properties();
- uint32_t visibleCount = props.Get(VisibilityStateProperty(), &isSet);
+ uint32_t visibleCount = GetProperty(VisibilityStateProperty(), &isSet);
MOZ_ASSERT(isSet, "Should have a VisibilityStateProperty value "
"if NS_FRAME_VISIBILITY_IS_TRACKED is set");
visibleCount++;
- props.Set(VisibilityStateProperty(), visibleCount);
+ SetProperty(VisibilityStateProperty(), visibleCount);
if (visibleCount > 1) {
return;
}
@@ -4943,10 +4937,9 @@ nsFrame::ComputeSizeWithIntrinsicDimensions(nsRenderingContext* aRenderingConte
// If FlexItemMainSizeOverride frame-property is set, then that means the
// flex container is imposing a main-size on this flex item for it to use
// as its size in the container's main axis.
- FrameProperties props = Properties();
bool didImposeMainSize;
nscoord imposedMainSize =
- props.Get(nsIFrame::FlexItemMainSizeOverride(), &didImposeMainSize);
+ GetProperty(nsIFrame::FlexItemMainSizeOverride(), &didImposeMainSize);
if (didImposeMainSize) {
imposedMainSizeStyleCoord.emplace(imposedMainSize,
nsStyleCoord::CoordConstructor);
@@ -5686,7 +5679,7 @@ nsIFrame::GetView() const
return nullptr;
// Check for a property on the frame
- nsView* value = Properties().Get(ViewProperty());
+ nsView* value = GetProperty(ViewProperty());
NS_ASSERTION(value, "frame state bit was set but frame has no view");
return value;
}
@@ -5709,7 +5702,7 @@ nsIFrame::SetView(nsView* aView)
#endif
// Set a property on the frame
- Properties().Set(ViewProperty(), aView);
+ SetProperty(ViewProperty(), aView);
// Set the frame state bit that says the frame has a view
AddStateBits(NS_FRAME_HAS_VIEW);
@@ -6098,7 +6091,7 @@ static void InvalidateFrameInternal(nsIFrame *aFrame, bool aHasDisplayItem = tru
SchedulePaintInternal(aFrame);
}
if (aFrame->HasAnyStateBits(NS_FRAME_HAS_INVALID_RECT)) {
- aFrame->Properties().Delete(nsIFrame::InvalidationRect());
+ aFrame->DeleteProperty(nsIFrame::InvalidationRect());
aFrame->RemoveStateBits(NS_FRAME_HAS_INVALID_RECT);
}
}
@@ -6173,13 +6166,13 @@ nsIFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemKey)
return;
}
- nsRect* rect = Properties().Get(InvalidationRect());
+ nsRect* rect = GetProperty(InvalidationRect());
if (!rect) {
if (alreadyInvalid) {
return;
}
rect = new nsRect();
- Properties().Set(InvalidationRect(), rect);
+ SetProperty(InvalidationRect(), rect);
AddStateBits(NS_FRAME_HAS_INVALID_RECT);
}
@@ -6280,7 +6273,7 @@ nsIFrame::IsInvalid(nsRect& aRect)
}
if (HasAnyStateBits(NS_FRAME_HAS_INVALID_RECT)) {
- nsRect* rect = Properties().Get(InvalidationRect());
+ nsRect* rect = GetProperty(InvalidationRect());
NS_ASSERTION(rect, "Must have an invalid rect if NS_FRAME_HAS_INVALID_RECT is set!");
aRect = *rect;
} else {
@@ -6368,8 +6361,8 @@ ComputeEffectsRect(nsIFrame* aFrame, const nsRect& aOverflowRect,
// TODO: We could also take account of clipPath and mask to reduce the
// visual overflow, but that's not essential.
if (aFrame->StyleEffects()->HasFilters()) {
- aFrame->Properties().
- Set(nsIFrame::PreEffectsBBoxProperty(), new nsRect(r));
+ aFrame->SetProperty
+ (nsIFrame::PreEffectsBBoxProperty(), new nsRect(r));
r = nsSVGUtils::GetPostFilterVisualOverflowRect(aFrame, aOverflowRect);
}
return r;
@@ -6407,8 +6400,8 @@ ComputeEffectsRect(nsIFrame* aFrame, const nsRect& aOverflowRect,
// the frame dies.
if (nsSVGIntegrationUtils::UsingEffectsForFrame(aFrame)) {
- aFrame->Properties().
- Set(nsIFrame::PreEffectsBBoxProperty(), new nsRect(r));
+ aFrame->SetProperty
+ (nsIFrame::PreEffectsBBoxProperty(), new nsRect(r));
r = nsSVGIntegrationUtils::ComputePostEffectsVisualOverflowRect(aFrame, r);
}
@@ -6422,7 +6415,7 @@ nsIFrame::MovePositionBy(const nsPoint& aTranslation)
const nsMargin* computedOffsets = nullptr;
if (IsRelativelyPositioned()) {
- computedOffsets = Properties().Get(nsIFrame::ComputedOffsetProperty());
+ computedOffsets = GetProperty(nsIFrame::ComputedOffsetProperty());
}
ReflowInput::ApplyRelativePositioning(this, computedOffsets ?
*computedOffsets : nsMargin(),
@@ -6435,7 +6428,7 @@ nsIFrame::GetNormalRect() const
{
// It might be faster to first check
// StyleDisplay()->IsRelativelyPositionedStyle().
- nsPoint* normalPosition = Properties().Get(NormalPositionProperty());
+ nsPoint* normalPosition = GetProperty(NormalPositionProperty());
if (normalPosition) {
return nsRect(*normalPosition, GetSize());
}
@@ -6447,7 +6440,7 @@ nsIFrame::GetNormalPosition() const
{
// It might be faster to first check
// StyleDisplay()->IsRelativelyPositionedStyle().
- nsPoint* normalPosition = Properties().Get(NormalPositionProperty());
+ nsPoint* normalPosition = GetProperty(NormalPositionProperty());
if (normalPosition) {
return *normalPosition;
}
@@ -6506,7 +6499,7 @@ nsIFrame::GetOverflowAreasRelativeToSelf() const
{
if (IsTransformed()) {
nsOverflowAreas* preTransformOverflows =
- Properties().Get(PreTransformOverflowAreasProperty());
+ GetProperty(PreTransformOverflowAreasProperty());
if (preTransformOverflows) {
return nsOverflowAreas(preTransformOverflows->VisualOverflow(),
preTransformOverflows->ScrollableOverflow());
@@ -6533,7 +6526,7 @@ nsIFrame::GetScrollableOverflowRectRelativeToSelf() const
{
if (IsTransformed()) {
nsOverflowAreas* preTransformOverflows =
- Properties().Get(PreTransformOverflowAreasProperty());
+ GetProperty(PreTransformOverflowAreasProperty());
if (preTransformOverflows)
return preTransformOverflows->ScrollableOverflow();
}
@@ -6545,7 +6538,7 @@ nsIFrame::GetVisualOverflowRectRelativeToSelf() const
{
if (IsTransformed()) {
nsOverflowAreas* preTransformOverflows =
- Properties().Get(PreTransformOverflowAreasProperty());
+ GetProperty(PreTransformOverflowAreasProperty());
if (preTransformOverflows)
return preTransformOverflows->VisualOverflow();
}
@@ -6555,7 +6548,7 @@ nsIFrame::GetVisualOverflowRectRelativeToSelf() const
nsRect
nsIFrame::GetPreEffectsVisualOverflowRect() const
{
- nsRect* r = Properties().Get(nsIFrame::PreEffectsBBoxProperty());
+ nsRect* r = GetProperty(nsIFrame::PreEffectsBBoxProperty());
return r ? *r : GetVisualOverflowRectRelativeToSelf();
}
@@ -6758,11 +6751,11 @@ nsIFrame::ListGeneric(nsACString& aTo, const char* aPrefix, uint32_t aFlags) con
aTo += nsPrintfCString(" next-%s=%p", fluid?"in-flow":"continuation",
static_cast<void*>(GetNextContinuation()));
}
- void* IBsibling = Properties().Get(IBSplitSibling());
+ void* IBsibling = GetProperty(IBSplitSibling());
if (IBsibling) {
aTo += nsPrintfCString(" IBSplitSibling=%p", IBsibling);
}
- void* IBprevsibling = Properties().Get(IBSplitPrevSibling());
+ void* IBprevsibling = GetProperty(IBSplitPrevSibling());
if (IBprevsibling) {
aTo += nsPrintfCString(" IBSplitPrevSibling=%p", IBprevsibling);
}
@@ -7164,8 +7157,7 @@ nsFrame::GetPointFromOffset(int32_t inOffset, nsPoint* outPoint)
// If the embedding level isn't set, just use the CSS direction
// property.
bool hasBidiData;
- FrameBidiData bidiData =
- Properties().Get(BidiDataProperty(), &hasBidiData);
+ FrameBidiData bidiData = GetProperty(BidiDataProperty(), &hasBidiData);
bool isRTL = hasBidiData
? IS_LEVEL_RTL(bidiData.embeddingLevel)
: StyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL;
@@ -8315,7 +8307,7 @@ nsIFrame::ClearOverflowRects()
return false;
}
if (mOverflow.mType == NS_FRAME_OVERFLOW_LARGE) {
- Properties().Delete(OverflowAreasProperty());
+ DeleteProperty(OverflowAreasProperty());
}
mOverflow.mType = NS_FRAME_OVERFLOW_NONE;
return true;
@@ -8328,8 +8320,7 @@ nsIFrame::ClearOverflowRects()
nsOverflowAreas*
nsIFrame::GetOverflowAreasProperty()
{
- FrameProperties props = Properties();
- nsOverflowAreas* overflow = props.Get(OverflowAreasProperty());
+ nsOverflowAreas* overflow = GetProperty(OverflowAreasProperty());
if (overflow) {
return overflow; // the property already exists
@@ -8338,7 +8329,7 @@ nsIFrame::GetOverflowAreasProperty()
// The property isn't set yet, so allocate a new rect, set the property,
// and return the newly allocated rect
overflow = new nsOverflowAreas;
- props.Set(OverflowAreasProperty(), overflow);
+ SetProperty(OverflowAreasProperty(), overflow);
return overflow;
}
@@ -8349,7 +8340,7 @@ bool
nsIFrame::SetOverflowAreas(const nsOverflowAreas& aOverflowAreas)
{
if (mOverflow.mType == NS_FRAME_OVERFLOW_LARGE) {
- nsOverflowAreas* overflow = Properties().Get(OverflowAreasProperty());
+ nsOverflowAreas* overflow = GetProperty(OverflowAreasProperty());
bool changed = *overflow != aOverflowAreas;
*overflow = aOverflowAreas;
@@ -8593,7 +8584,7 @@ ComputeAndIncludeOutlineArea(nsIFrame* aFrame, nsOverflowAreas& aOverflowAreas,
}
// Keep this code in sync with GetOutlineInnerRect in nsCSSRendering.cpp.
- aFrame->Properties().Set(nsIFrame::OutlineInnerRectProperty(),
+ aFrame->SetProperty(nsIFrame::OutlineInnerRectProperty(),
new nsRect(innerRect));
const nscoord offset = outline->mOutlineOffset;
nsRect outerRect(innerRect);
@@ -8635,22 +8626,22 @@ nsIFrame::FinishAndStoreOverflow(nsOverflowAreas& aOverflowAreas,
if (!aOverflowAreas.VisualOverflow().IsEqualEdges(bounds) ||
!aOverflowAreas.ScrollableOverflow().IsEqualEdges(bounds)) {
nsOverflowAreas* initial =
- Properties().Get(nsIFrame::InitialOverflowProperty());
+ GetProperty(nsIFrame::InitialOverflowProperty());
if (!initial) {
- Properties().Set(nsIFrame::InitialOverflowProperty(),
+ SetProperty(nsIFrame::InitialOverflowProperty(),
new nsOverflowAreas(aOverflowAreas));
} else if (initial != &aOverflowAreas) {
*initial = aOverflowAreas;
}
} else {
- Properties().Delete(nsIFrame::InitialOverflowProperty());
+ DeleteProperty(nsIFrame::InitialOverflowProperty());
}
#ifdef DEBUG
- Properties().Set(nsIFrame::DebugInitialOverflowPropertyApplied(), true);
+ SetProperty(nsIFrame::DebugInitialOverflowPropertyApplied(), true);
#endif
} else {
#ifdef DEBUG
- Properties().Delete(nsIFrame::DebugInitialOverflowPropertyApplied());
+ DeleteProperty(nsIFrame::DebugInitialOverflowPropertyApplied());
#endif
}
@@ -8745,8 +8736,8 @@ nsIFrame::FinishAndStoreOverflow(nsOverflowAreas& aOverflowAreas,
}
if (hasTransform) {
- Properties().Set(nsIFrame::PreTransformOverflowAreasProperty(),
- new nsOverflowAreas(aOverflowAreas));
+ SetProperty(nsIFrame::PreTransformOverflowAreasProperty(),
+ new nsOverflowAreas(aOverflowAreas));
if (Combines3DTransformWithAncestors()) {
/* If we're a preserve-3d leaf frame, then our pre-transform overflow should be correct. Our
@@ -8771,7 +8762,7 @@ nsIFrame::FinishAndStoreOverflow(nsOverflowAreas& aOverflowAreas,
}
}
} else {
- Properties().Delete(nsIFrame::PreTransformOverflowAreasProperty());
+ DeleteProperty(nsIFrame::PreTransformOverflowAreasProperty());
}
/* Revert the size change in case some caller is depending on this. */
@@ -8803,7 +8794,7 @@ nsIFrame::RecomputePerspectiveChildrenOverflow(const nsIFrame* aStartFrame)
}
if (child->HasPerspective()) {
nsOverflowAreas* overflow =
- child->Properties().Get(nsIFrame::InitialOverflowProperty());
+ child->GetProperty(nsIFrame::InitialOverflowProperty());
nsRect bounds(nsPoint(0, 0), child->GetSize());
if (overflow) {
nsOverflowAreas overflowCopy = *overflow;
@@ -8915,7 +8906,7 @@ GetIBSplitSiblingForAnonymousBlock(const nsIFrame* aFrame)
* property.
*/
nsIFrame *ibSplitSibling =
- aFrame->Properties().Get(nsIFrame::IBSplitPrevSibling());
+ aFrame->GetProperty(nsIFrame::IBSplitPrevSibling());
NS_ASSERTION(ibSplitSibling, "Broken frame tree?");
return ibSplitSibling;
}
@@ -9825,7 +9816,7 @@ nsFrame::BoxReflow(nsBoxLayoutState& aState,
nsBoxLayoutMetrics*
nsFrame::BoxMetrics() const
{
- nsBoxLayoutMetrics* metrics = Properties().Get(BoxMetricsProperty());
+ nsBoxLayoutMetrics* metrics = GetProperty(BoxMetricsProperty());
NS_ASSERTION(metrics, "A box layout method was called but InitBoxMetrics was never called");
return metrics;
}
@@ -10069,6 +10060,24 @@ nsFrame::HasCSSTransitions()
return collection && collection->mAnimations.Length() > 0;
}
+size_t
+nsIFrame::SizeOfFramePropertiesForTree(MallocSizeOf aMallocSizeOf) const
+{
+ size_t result = 0;
+
+ result += mProperties.SizeOfExcludingThis(aMallocSizeOf);
+
+ FrameChildListIterator iter(this);
+ while (!iter.IsDone()) {
+ for (const nsIFrame* f : iter.CurrentList()) {
+ result += f->SizeOfFramePropertiesForTree(aMallocSizeOf);
+ }
+ iter.Next();
+ }
+
+ return result;
+}
+
// Box layout debugging
#ifdef DEBUG_REFLOW
int32_t gIndent2 = 0;
diff --git a/layout/generic/nsGridContainerFrame.cpp b/layout/generic/nsGridContainerFrame.cpp
index fbd61f783..3a2d5ad1d 100644
--- a/layout/generic/nsGridContainerFrame.cpp
+++ b/layout/generic/nsGridContainerFrame.cpp
@@ -2000,7 +2000,7 @@ struct MOZ_STACK_CLASS nsGridContainerFrame::GridReflowInput
++fragment;
firstInFlow = pif;
}
- mSharedGridData = firstInFlow->Properties().Get(SharedGridData::Prop());
+ mSharedGridData = firstInFlow->GetProperty(SharedGridData::Prop());
MOZ_ASSERT(mSharedGridData, "first-in-flow must have SharedGridData");
// Find the start row for this fragment and undo breaks after that row
@@ -2809,7 +2809,7 @@ nsGridContainerFrame::GridItemCB(nsIFrame* aChild)
{
MOZ_ASSERT((aChild->GetStateBits() & NS_FRAME_OUT_OF_FLOW) &&
aChild->IsAbsolutelyPositioned());
- nsRect* cb = aChild->Properties().Get(GridItemContainingBlockRect());
+ nsRect* cb = aChild->GetProperty(GridItemContainingBlockRect());
MOZ_ASSERT(cb, "this method must only be called on grid items, and the grid "
"container should've reflowed this item by now and set up cb");
return *cb;
@@ -2836,7 +2836,7 @@ nsGridContainerFrame::AddImplicitNamedAreas(
// Lazily create the ImplicitNamedAreas.
if (!areas) {
areas = new ImplicitNamedAreas;
- Properties().Set(ImplicitNamedAreasProperty(), areas);
+ SetProperty(ImplicitNamedAreasProperty(), areas);
}
mozilla::css::GridNamedArea area;
@@ -2868,7 +2868,7 @@ nsGridContainerFrame::InitImplicitNamedAreas(const nsStylePosition* aStyle)
AddImplicitNamedAreas(aStyle->mGridTemplateColumns.mLineNameLists);
AddImplicitNamedAreas(aStyle->mGridTemplateRows.mLineNameLists);
if (areas && areas->Count() == 0) {
- Properties().Delete(ImplicitNamedAreasProperty());
+ DeleteProperty(ImplicitNamedAreasProperty());
}
}
@@ -3711,7 +3711,7 @@ MeasuringReflow(nsIFrame* aChild,
}
#ifdef DEBUG
// This will suppress various CRAZY_SIZE warnings for this reflow.
- parent->Properties().Set(
+ parent->SetProperty(
nsContainerFrame::DebugReflowingWithInfiniteISize(), true);
#endif
auto wm = aChild->GetWritingMode();
@@ -3724,10 +3724,10 @@ MeasuringReflow(nsIFrame* aChild,
}
if (aBMinSizeClamp != NS_MAXSIZE) {
riFlags |= ReflowInput::B_CLAMP_MARGIN_BOX_MIN_SIZE;
- aChild->Properties().Set(nsIFrame::BClampMarginBoxMinSizeProperty(),
+ aChild->SetProperty(nsIFrame::BClampMarginBoxMinSizeProperty(),
aBMinSizeClamp);
} else {
- aChild->Properties().Delete(nsIFrame::BClampMarginBoxMinSizeProperty());
+ aChild->DeleteProperty(nsIFrame::BClampMarginBoxMinSizeProperty());
}
ReflowInput childRI(pc, *rs, aChild, aAvailableSize, &aCBSize, riFlags);
ReflowOutput childSize(childRI);
@@ -3738,7 +3738,7 @@ MeasuringReflow(nsIFrame* aChild,
parent->FinishReflowChild(aChild, pc, childSize, &childRI, wm,
LogicalPoint(wm), nsSize(), flags);
#ifdef DEBUG
- parent->Properties().Delete(nsContainerFrame::DebugReflowingWithInfiniteISize());
+ parent->DeleteProperty(nsContainerFrame::DebugReflowingWithInfiniteISize());
#endif
return childSize.BSize(wm);
}
@@ -5253,9 +5253,9 @@ nsGridContainerFrame::ReflowInFlowChild(nsIFrame* aChild,
baselineAdjust = -baselineAdjust;
}
if (baselineAdjust != nscoord(0)) {
- aChild->Properties().Set(aProp, baselineAdjust);
+ aChild->SetProperty(aProp, baselineAdjust);
} else {
- aChild->Properties().Delete(aProp);
+ aChild->DeleteProperty(aProp);
}
};
SetProp(eLogicalAxisBlock, isOrthogonal ? IBaselinePadProperty() :
@@ -5292,10 +5292,10 @@ nsGridContainerFrame::ReflowInFlowChild(nsIFrame* aChild,
auto childBAxis = GetOrthogonalAxis(childIAxis);
if (aGridItemInfo->mState[childBAxis] & ItemState::eClampMarginBoxMinSize) {
flags |= ReflowInput::B_CLAMP_MARGIN_BOX_MIN_SIZE;
- aChild->Properties().Set(BClampMarginBoxMinSizeProperty(),
- childCBSize.BSize(childWM));
+ aChild->SetProperty(BClampMarginBoxMinSizeProperty(),
+ childCBSize.BSize(childWM));
} else {
- aChild->Properties().Delete(BClampMarginBoxMinSizeProperty());
+ aChild->DeleteProperty(BClampMarginBoxMinSizeProperty());
}
if ((aGridItemInfo->mState[childIAxis] & ItemState::eApplyAutoMinSize)) {
flags |= ReflowInput::I_APPLY_AUTO_MIN_SIZE;
@@ -5313,11 +5313,11 @@ nsGridContainerFrame::ReflowInFlowChild(nsIFrame* aChild,
// A table-wrapper needs to propagate the CB size we give it to its
// inner table frame later. @see nsTableWrapperFrame::InitChildReflowInput.
if (childType == nsGkAtoms::tableWrapperFrame) {
- const auto& props = aChild->Properties();
- LogicalSize* cb = props.Get(nsTableWrapperFrame::GridItemCBSizeProperty());
+ LogicalSize* cb =
+ aChild->GetProperty(nsTableWrapperFrame::GridItemCBSizeProperty());
if (!cb) {
cb = new LogicalSize(childWM);
- props.Set(nsTableWrapperFrame::GridItemCBSizeProperty(), cb);
+ aChild->SetProperty(nsTableWrapperFrame::GridItemCBSizeProperty(), cb);
}
*cb = percentBasis;
}
@@ -5337,9 +5337,9 @@ nsGridContainerFrame::ReflowInFlowChild(nsIFrame* aChild,
}
}
if (stretch) {
- aChild->Properties().Set(FragStretchBSizeProperty(), *aStretchBSize);
+ aChild->SetProperty(FragStretchBSizeProperty(), *aStretchBSize);
} else {
- aChild->Properties().Delete(FragStretchBSizeProperty());
+ aChild->DeleteProperty(FragStretchBSizeProperty());
}
}
@@ -5951,10 +5951,10 @@ nsGridContainerFrame::ReflowChildren(GridReflowInput& aState,
LogicalRect itemCB =
aState.ContainingBlockForAbsPos(area, gridOrigin, gridCB);
// nsAbsoluteContainingBlock::Reflow uses physical coordinates.
- nsRect* cb = child->Properties().Get(GridItemContainingBlockRect());
+ nsRect* cb = child->GetProperty(GridItemContainingBlockRect());
if (!cb) {
cb = new nsRect;
- child->Properties().Set(GridItemContainingBlockRect(), cb);
+ child->SetProperty(GridItemContainingBlockRect(), cb);
}
*cb = itemCB.GetPhysicalRect(wm, gridCBPhysicalSize);
}
@@ -6044,7 +6044,7 @@ nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
f = next;
}
if (overflowContainers->IsEmpty()) {
- Properties().Delete(OverflowContainersProperty());
+ DeleteProperty(OverflowContainersProperty());
}
MergeSortedExcessOverflowContainers(moveToEOC);
}
@@ -6355,7 +6355,7 @@ nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
Move(colTrackStates),
Move(colRemovedRepeatTracks),
gridReflowInput.mColFunctions.mRepeatAutoStart);
- Properties().Set(GridColTrackInfo(), colInfo);
+ SetProperty(GridColTrackInfo(), colInfo);
uint32_t rowTrackCount = gridReflowInput.mRows.mSizes.Length();
nsTArray<nscoord> rowTrackPositions(rowTrackCount);
@@ -6390,7 +6390,7 @@ nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
Move(rowTrackStates),
Move(rowRemovedRepeatTracks),
gridReflowInput.mRowFunctions.mRepeatAutoStart);
- Properties().Set(GridRowTrackInfo(), rowInfo);
+ SetProperty(GridRowTrackInfo(), rowInfo);
if (prevInFlow) {
// This frame is fragmenting rows from a previous frame, so patch up
@@ -6399,7 +6399,7 @@ nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
// FIXME: This can be streamlined and/or removed when bug 1151204 lands.
ComputedGridTrackInfo* priorRowInfo =
- prevInFlow->Properties().Get(GridRowTrackInfo());
+ prevInFlow->GetProperty(GridRowTrackInfo());
// Adjust track positions based on the first track in this fragment.
if (priorRowInfo->mPositions.Length() >
@@ -6421,7 +6421,7 @@ nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
Move(priorRowInfo->mStates),
Move(priorRowInfo->mRemovedRepeatTracks),
priorRowInfo->mRepeatFirstTrack);
- prevInFlow->Properties().Set(GridRowTrackInfo(), revisedPriorRowInfo);
+ prevInFlow->SetProperty(GridRowTrackInfo(), revisedPriorRowInfo);
}
// Generate the line info properties. We need to provide the number of
@@ -6448,7 +6448,7 @@ nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
Move(columnLineNames),
gridColTemplate.mRepeatAutoLineNameListBefore,
gridColTemplate.mRepeatAutoLineNameListAfter);
- Properties().Set(GridColumnLineInfo(), columnLineInfo);
+ SetProperty(GridColumnLineInfo(), columnLineInfo);
// Generate row lines next.
capacity = gridReflowInput.mRows.mSizes.Length();
@@ -6469,25 +6469,25 @@ nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
Move(rowLineNames),
gridRowTemplate.mRepeatAutoLineNameListBefore,
gridRowTemplate.mRepeatAutoLineNameListAfter);
- Properties().Set(GridRowLineInfo(), rowLineInfo);
+ SetProperty(GridRowLineInfo(), rowLineInfo);
// Generate area info for explicit areas. Implicit areas are handled
// elsewhere.
if (gridReflowInput.mGridStyle->mGridTemplateAreas) {
nsTArray<css::GridNamedArea>* areas = new nsTArray<css::GridNamedArea>(
gridReflowInput.mGridStyle->mGridTemplateAreas->mNamedAreas);
- Properties().Set(ExplicitNamedAreasProperty(), areas);
+ SetProperty(ExplicitNamedAreasProperty(), areas);
} else {
- Properties().Delete(ExplicitNamedAreasProperty());
+ DeleteProperty(ExplicitNamedAreasProperty());
}
}
if (!prevInFlow) {
- SharedGridData* sharedGridData = Properties().Get(SharedGridData::Prop());
+ SharedGridData* sharedGridData = GetProperty(SharedGridData::Prop());
if (!NS_FRAME_IS_FULLY_COMPLETE(aStatus)) {
if (!sharedGridData) {
sharedGridData = new SharedGridData;
- Properties().Set(SharedGridData::Prop(), sharedGridData);
+ SetProperty(SharedGridData::Prop(), sharedGridData);
}
sharedGridData->mCols.mSizes.Clear();
sharedGridData->mCols.mSizes.SwapElements(gridReflowInput.mCols.mSizes);
@@ -6522,7 +6522,7 @@ nsGridContainerFrame::Reflow(nsPresContext* aPresContext,
sharedGridData->mGenerateComputedGridInfo =
HasAnyStateBits(NS_STATE_GRID_GENERATE_COMPUTED_VALUES);
} else if (sharedGridData && !GetNextInFlow()) {
- Properties().Delete(SharedGridData::Prop());
+ DeleteProperty(SharedGridData::Prop());
}
}
@@ -7142,10 +7142,10 @@ nsGridContainerFrame::GetGridFrameWithComputedInfo(nsIFrame* aFrame)
nsGridContainerFrame* gridFrame = GetGridContainerFrame(aFrame);
if (gridFrame) {
// if any of our properties are missing, generate them
- bool reflowNeeded = (!gridFrame->Properties().Has(GridColTrackInfo()) ||
- !gridFrame->Properties().Has(GridRowTrackInfo()) ||
- !gridFrame->Properties().Has(GridColumnLineInfo()) ||
- !gridFrame->Properties().Has(GridRowLineInfo()));
+ bool reflowNeeded = (!gridFrame->HasProperty(GridColTrackInfo()) ||
+ !gridFrame->HasProperty(GridRowTrackInfo()) ||
+ !gridFrame->HasProperty(GridColumnLineInfo()) ||
+ !gridFrame->HasProperty(GridRowLineInfo()));
if (reflowNeeded) {
// Trigger a reflow that generates additional grid property data.
@@ -7161,13 +7161,13 @@ nsGridContainerFrame::GetGridFrameWithComputedInfo(nsIFrame* aFrame)
// Assert the grid properties are present
MOZ_ASSERT(!gridFrame ||
- gridFrame->Properties().Has(GridColTrackInfo()));
+ gridFrame->HasProperty(GridColTrackInfo()));
MOZ_ASSERT(!gridFrame ||
- gridFrame->Properties().Has(GridRowTrackInfo()));
+ gridFrame->HasProperty(GridRowTrackInfo()));
MOZ_ASSERT(!gridFrame ||
- gridFrame->Properties().Has(GridColumnLineInfo()));
+ gridFrame->HasProperty(GridColumnLineInfo()));
MOZ_ASSERT(!gridFrame ||
- gridFrame->Properties().Has(GridRowLineInfo()));
+ gridFrame->HasProperty(GridRowLineInfo()));
}
}
diff --git a/layout/generic/nsGridContainerFrame.h b/layout/generic/nsGridContainerFrame.h
index e610dfa0b..960558421 100644
--- a/layout/generic/nsGridContainerFrame.h
+++ b/layout/generic/nsGridContainerFrame.h
@@ -164,7 +164,7 @@ public:
NS_DECLARE_FRAME_PROPERTY_DELETABLE(GridColTrackInfo, ComputedGridTrackInfo)
const ComputedGridTrackInfo* GetComputedTemplateColumns()
{
- const ComputedGridTrackInfo* info = Properties().Get(GridColTrackInfo());
+ const ComputedGridTrackInfo* info = GetProperty(GridColTrackInfo());
MOZ_ASSERT(info, "Property generation wasn't requested.");
return info;
}
@@ -172,7 +172,7 @@ public:
NS_DECLARE_FRAME_PROPERTY_DELETABLE(GridRowTrackInfo, ComputedGridTrackInfo)
const ComputedGridTrackInfo* GetComputedTemplateRows()
{
- const ComputedGridTrackInfo* info = Properties().Get(GridRowTrackInfo());
+ const ComputedGridTrackInfo* info = GetProperty(GridRowTrackInfo());
MOZ_ASSERT(info, "Property generation wasn't requested.");
return info;
}
@@ -180,7 +180,7 @@ public:
NS_DECLARE_FRAME_PROPERTY_DELETABLE(GridColumnLineInfo, ComputedGridLineInfo)
const ComputedGridLineInfo* GetComputedTemplateColumnLines()
{
- const ComputedGridLineInfo* info = Properties().Get(GridColumnLineInfo());
+ const ComputedGridLineInfo* info = GetProperty(GridColumnLineInfo());
MOZ_ASSERT(info, "Property generation wasn't requested.");
return info;
}
@@ -188,7 +188,7 @@ public:
NS_DECLARE_FRAME_PROPERTY_DELETABLE(GridRowLineInfo, ComputedGridLineInfo)
const ComputedGridLineInfo* GetComputedTemplateRowLines()
{
- const ComputedGridLineInfo* info = Properties().Get(GridRowLineInfo());
+ const ComputedGridLineInfo* info = GetProperty(GridRowLineInfo());
MOZ_ASSERT(info, "Property generation wasn't requested.");
return info;
}
@@ -199,14 +199,14 @@ public:
NS_DECLARE_FRAME_PROPERTY_DELETABLE(ImplicitNamedAreasProperty,
ImplicitNamedAreas)
ImplicitNamedAreas* GetImplicitNamedAreas() const {
- return Properties().Get(ImplicitNamedAreasProperty());
+ return GetProperty(ImplicitNamedAreasProperty());
}
typedef nsTArray<mozilla::css::GridNamedArea> ExplicitNamedAreas;
NS_DECLARE_FRAME_PROPERTY_DELETABLE(ExplicitNamedAreasProperty,
ExplicitNamedAreas)
ExplicitNamedAreas* GetExplicitNamedAreas() const {
- return Properties().Get(ExplicitNamedAreasProperty());
+ return GetProperty(ExplicitNamedAreasProperty());
}
/**
diff --git a/layout/generic/nsIFrame.h b/layout/generic/nsIFrame.h
index 2acafa882..ec3568483 100644
--- a/layout/generic/nsIFrame.h
+++ b/layout/generic/nsIFrame.h
@@ -24,7 +24,7 @@
#include <stdio.h>
#include "CaretAssociationHint.h"
-#include "FramePropertyTable.h"
+#include "FrameProperties.h"
#include "mozilla/layout/FrameChildList.h"
#include "mozilla/Maybe.h"
#include "mozilla/WritingModes.h"
@@ -997,7 +997,7 @@ public:
#define NS_DECLARE_FRAME_PROPERTY_WITH_DTOR_NEVER_CALLED(prop, type) \
static void AssertOnDestroyingProperty##prop(type*) { \
MOZ_ASSERT_UNREACHABLE("Frame property " #prop " should never " \
- "be destroyed by the FramePropertyTable"); \
+ "be destroyed by the FrameProperties class"); \
} \
NS_DECLARE_FRAME_PROPERTY_WITH_DTOR(prop, type, \
AssertOnDestroyingProperty##prop)
@@ -1005,8 +1005,8 @@ public:
#define NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(prop, type) \
NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(prop, mozilla::SmallValueHolder<type>)
- NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(IBSplitSibling, nsIFrame)
- NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(IBSplitPrevSibling, nsIFrame)
+ NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(IBSplitSibling, nsContainerFrame)
+ NS_DECLARE_FRAME_PROPERTY_WITHOUT_DTOR(IBSplitPrevSibling, nsContainerFrame)
NS_DECLARE_FRAME_PROPERTY_DELETABLE(NormalPositionProperty, nsPoint)
NS_DECLARE_FRAME_PROPERTY_DELETABLE(ComputedOffsetProperty, nsMargin)
@@ -1059,7 +1059,7 @@ public:
mozilla::FrameBidiData GetBidiData()
{
- return Properties().Get(BidiDataProperty());
+ return GetProperty(BidiDataProperty());
}
nsBidiLevel GetBaseLevel()
@@ -1073,7 +1073,7 @@ public:
}
nsTArray<nsIContent*>* GetGenConPseudos() {
- return Properties().Get(GenConProperty());
+ return GetProperty(GenConProperty());
}
/**
@@ -1534,7 +1534,7 @@ public:
bool RefusedAsyncAnimation() const
{
- return Properties().Get(RefusedAsyncAnimationProperty());
+ return GetProperty(RefusedAsyncAnimationProperty());
}
/**
@@ -3061,9 +3061,53 @@ public:
return mContent == aParentContent;
}
- FrameProperties Properties() const {
- return FrameProperties(PresContext()->PropertyTable(), this);
- }
+/**
+ * Support for reading and writing properties on the frame.
+ * These call through to the frame's FrameProperties object, if it
+ * exists, but avoid creating it if no property is ever set.
+ */
+template<typename T>
+FrameProperties::PropertyType<T>
+GetProperty(FrameProperties::Descriptor<T> aProperty,
+ bool* aFoundResult = nullptr) const
+{
+ return mProperties.Get(aProperty, aFoundResult);
+}
+
+template<typename T>
+bool HasProperty(FrameProperties::Descriptor<T> aProperty) const
+{
+ return mProperties.Has(aProperty);
+}
+
+template<typename T>
+void SetProperty(FrameProperties::Descriptor<T> aProperty,
+ FrameProperties::PropertyType<T> aValue)
+{
+ mProperties.Set(aProperty, aValue, this);
+}
+
+template<typename T>
+FrameProperties::PropertyType<T>
+RemoveProperty(FrameProperties::Descriptor<T> aProperty,
+ bool* aFoundResult = nullptr)
+{
+ return mProperties.Remove(aProperty, aFoundResult);
+}
+
+template<typename T>
+void DeleteProperty(FrameProperties::Descriptor<T> aProperty)
+{
+ mProperties.Delete(aProperty, this);
+}
+
+void DeleteAllProperties()
+{
+ mProperties.DeleteAll(this);
+}
+
+// Reports size of the FrameProperties for this frame and its descendants
+size_t SizeOfFramePropertiesForTree(mozilla::MallocSizeOf aMallocSizeOf) const;
/**
* Return true if and only if this frame obeys visibility:hidden.
@@ -3423,7 +3467,7 @@ public:
*/
bool FrameIsNonFirstInIBSplit() const {
return (GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) &&
- FirstContinuation()->Properties().Get(nsIFrame::IBSplitPrevSibling());
+ FirstContinuation()->GetProperty(nsIFrame::IBSplitPrevSibling());
}
/**
@@ -3432,7 +3476,7 @@ public:
*/
bool FrameIsNonLastInIBSplit() const {
return (GetStateBits() & NS_FRAME_PART_OF_IBSPLIT) &&
- FirstContinuation()->Properties().Get(nsIFrame::IBSplitSibling());
+ FirstContinuation()->GetProperty(nsIFrame::IBSplitSibling());
}
/**
@@ -3514,11 +3558,11 @@ private:
DestroyPaintedPresShellList)
nsTArray<nsWeakPtr>* PaintedPresShellList() {
- nsTArray<nsWeakPtr>* list = Properties().Get(PaintedPresShellsProperty());
+ nsTArray<nsWeakPtr>* list = GetProperty(PaintedPresShellsProperty());
if (!list) {
list = new nsTArray<nsWeakPtr>();
- Properties().Set(PaintedPresShellsProperty(), list);
+ SetProperty(PaintedPresShellsProperty(), list);
}
return list;
@@ -3535,6 +3579,11 @@ protected:
nsFrameState mState;
+ /**
+ * List of properties attached to the frame.
+ */
+ FrameProperties mProperties;
+
// When there is an overflow area only slightly larger than mRect,
// we store a set of four 1-byte deltas from the edges of mRect
// rather than allocating a whole separate rectangle property.
diff --git a/layout/generic/nsLineLayout.cpp b/layout/generic/nsLineLayout.cpp
index 138d0b871..6a15a9cfa 100644
--- a/layout/generic/nsLineLayout.cpp
+++ b/layout/generic/nsLineLayout.cpp
@@ -819,11 +819,11 @@ nsLineLayout::ReflowFrame(nsIFrame* aFrame,
#endif
if (mCurrentSpan == mRootSpan) {
- pfd->mFrame->Properties().Remove(nsIFrame::LineBaselineOffset());
+ pfd->mFrame->RemoveProperty(nsIFrame::LineBaselineOffset());
} else {
#ifdef DEBUG
bool hasLineOffset;
- pfd->mFrame->Properties().Get(nsIFrame::LineBaselineOffset(), &hasLineOffset);
+ pfd->mFrame->GetProperty(nsIFrame::LineBaselineOffset(), &hasLineOffset);
NS_ASSERTION(!hasLineOffset, "LineBaselineOffset was set but was not expected");
#endif
}
diff --git a/layout/generic/nsPlaceholderFrame.cpp b/layout/generic/nsPlaceholderFrame.cpp
index 2b6799f48..bd380a2d9 100644
--- a/layout/generic/nsPlaceholderFrame.cpp
+++ b/layout/generic/nsPlaceholderFrame.cpp
@@ -128,7 +128,7 @@ nsPlaceholderFrame::Reflow(nsPresContext* aPresContext,
nsIFrame* ancestor = this;
while ((ancestor = ancestor->GetParent())) {
if (ancestor->GetPrevContinuation() ||
- ancestor->Properties().Get(IBSplitPrevSibling())) {
+ ancestor->GetProperty(IBSplitPrevSibling())) {
isInContinuationOrIBSplit = true;
break;
}
diff --git a/layout/generic/nsTextFrame.cpp b/layout/generic/nsTextFrame.cpp
index 3288d3f2e..0641c7439 100644
--- a/layout/generic/nsTextFrame.cpp
+++ b/layout/generic/nsTextFrame.cpp
@@ -2838,9 +2838,9 @@ nsTextFrame::EnsureTextRun(TextRunType aWhichTextRun,
return gfxSkipCharsIterator(gfxPlatform::
GetPlatform()->EmptySkipChars(), 0);
}
- TabWidthStore* tabWidths = Properties().Get(TabWidthProperty());
+ TabWidthStore* tabWidths = GetProperty(TabWidthProperty());
if (tabWidths && tabWidths->mValidForContentOffset != GetContentOffset()) {
- Properties().Delete(TabWidthProperty());
+ DeleteProperty(TabWidthProperty());
}
}
@@ -3478,7 +3478,7 @@ PropertyProvider::CalcTabWidths(Range aRange)
return;
}
if (!mReflowing) {
- mTabWidths = mFrame->Properties().Get(TabWidthProperty());
+ mTabWidths = mFrame->GetProperty(TabWidthProperty());
#ifdef DEBUG
// If we're not reflowing, we should have already computed the
// tab widths; check that they're available as far as the last
@@ -3524,7 +3524,7 @@ PropertyProvider::CalcTabWidths(Range aRange)
} else {
if (!mTabWidths) {
mTabWidths = new TabWidthStore(mFrame->GetContentOffset());
- mFrame->Properties().Set(TabWidthProperty(), mTabWidths);
+ mFrame->SetProperty(TabWidthProperty(), mTabWidths);
}
double nextTab = AdvanceToNextTab(mOffsetFromBlockOriginForTabs,
mFrame, mTextRun, &tabWidth);
@@ -3543,7 +3543,7 @@ PropertyProvider::CalcTabWidths(Range aRange)
if (!mTabWidths) {
// Delete any stale property that may be left on the frame
- mFrame->Properties().Delete(TabWidthProperty());
+ mFrame->DeleteProperty(TabWidthProperty());
mTabWidthsAnalyzedLimit = std::max(mTabWidthsAnalyzedLimit,
aRange.end - startOffset);
}
@@ -4249,7 +4249,7 @@ nsTextFrame::ClearFrameOffsetCache()
// just destroys the frames in order, which means that the primary frame is already
// dead if we're a continuing text frame, in which case, all of its properties are
// gone, and we don't need to worry about deleting this property here.
- primaryFrame->Properties().Delete(OffsetToFrameProperty());
+ primaryFrame->DeleteProperty(OffsetToFrameProperty());
}
RemoveStateBits(TEXT_IN_OFFSET_CACHE);
}
@@ -4358,7 +4358,7 @@ nsContinuingTextFrame::Init(nsIContent* aContent,
if (aPrevInFlow->GetStateBits() & NS_FRAME_IS_BIDI) {
FrameBidiData bidiData = aPrevInFlow->GetBidiData();
bidiData.precedingControl = kBidiLevelNone;
- Properties().Set(BidiDataProperty(), bidiData);
+ SetProperty(BidiDataProperty(), bidiData);
if (nextContinuation) {
SetNextContinuation(nextContinuation);
@@ -4622,7 +4622,7 @@ nsTextFrame::InvalidateFrameWithRect(const nsRect& aRect, uint32_t aDisplayItemK
gfxTextRun*
nsTextFrame::GetUninflatedTextRun()
{
- return Properties().Get(UninflatedTextRunProperty());
+ return GetProperty(UninflatedTextRunProperty());
}
void
@@ -4648,7 +4648,7 @@ nsTextFrame::SetTextRun(gfxTextRun* aTextRun, TextRunType aWhichTextRun,
// Setting the property will not automatically increment the textrun's
// reference count, so we need to do it here.
aTextRun->AddRef();
- Properties().Set(UninflatedTextRunProperty(), aTextRun);
+ SetProperty(UninflatedTextRunProperty(), aTextRun);
return;
}
// fall through to setting mTextRun
@@ -4668,10 +4668,9 @@ nsTextFrame::RemoveTextRun(gfxTextRun* aTextRun)
mTextRun = nullptr;
return true;
}
- FrameProperties props = Properties();
if ((GetStateBits() & TEXT_HAS_FONT_INFLATION) &&
- props.Get(UninflatedTextRunProperty()) == aTextRun) {
- props.Delete(UninflatedTextRunProperty());
+ GetProperty(UninflatedTextRunProperty()) == aTextRun) {
+ DeleteProperty(UninflatedTextRunProperty());
return true;
}
return false;
@@ -4689,7 +4688,7 @@ nsTextFrame::ClearTextRun(nsTextFrame* aStartContinuation,
DebugOnly<bool> checkmTextrun = textRun == mTextRun;
UnhookTextRunFromFrames(textRun, aStartContinuation);
MOZ_ASSERT(checkmTextrun ? !mTextRun
- : !Properties().Get(UninflatedTextRunProperty()));
+ : !GetProperty(UninflatedTextRunProperty()));
}
void
@@ -4699,7 +4698,7 @@ nsTextFrame::DisconnectTextRuns()
"Textrun mentions this frame in its user data so we can't just disconnect");
mTextRun = nullptr;
if ((GetStateBits() & TEXT_HAS_FONT_INFLATION)) {
- Properties().Delete(UninflatedTextRunProperty());
+ DeleteProperty(UninflatedTextRunProperty());
}
}
@@ -4929,7 +4928,7 @@ NS_DECLARE_FRAME_PROPERTY_SMALL_VALUE(TextCombineScaleFactorProperty, float)
static float
GetTextCombineScaleFactor(nsTextFrame* aFrame)
{
- float factor = aFrame->Properties().Get(TextCombineScaleFactorProperty());
+ float factor = aFrame->GetProperty(TextCombineScaleFactorProperty());
return factor ? factor : 1.0f;
}
@@ -5105,7 +5104,7 @@ static nscoord
LazyGetLineBaselineOffset(nsIFrame* aChildFrame, nsBlockFrame* aBlockFrame)
{
bool offsetFound;
- nscoord offset = aChildFrame->Properties().Get(
+ nscoord offset = aChildFrame->GetProperty(
nsIFrame::LineBaselineOffset(), &offsetFound);
if (!offsetFound) {
@@ -5118,11 +5117,11 @@ LazyGetLineBaselineOffset(nsIFrame* aChildFrame, nsBlockFrame* aBlockFrame)
for (nsIFrame* lineFrame = line->mFirstChild;
n > 0; lineFrame = lineFrame->GetNextSibling(), --n) {
offset = lineBaseline - lineFrame->GetNormalPosition().y;
- lineFrame->Properties().Set(nsIFrame::LineBaselineOffset(), offset);
+ lineFrame->SetProperty(nsIFrame::LineBaselineOffset(), offset);
}
}
}
- return aChildFrame->Properties().Get(
+ return aChildFrame->GetProperty(
nsIFrame::LineBaselineOffset(), &offsetFound);
} else {
return offset;
@@ -5367,7 +5366,7 @@ nsTextFrame::UpdateTextEmphasis(WritingMode aWM, PropertyProvider& aProvider)
{
const nsStyleText* styleText = StyleText();
if (!styleText->HasTextEmphasis()) {
- Properties().Delete(EmphasisMarkProperty());
+ DeleteProperty(EmphasisMarkProperty());
return nsRect();
}
@@ -5419,7 +5418,7 @@ nsTextFrame::UpdateTextEmphasis(WritingMode aWM, PropertyProvider& aProvider)
overflowRect.BStart(aWM) += gap * (side == eLogicalSideBStart ? -1 : 1);
}
- Properties().Set(EmphasisMarkProperty(), info);
+ SetProperty(EmphasisMarkProperty(), info);
return overflowRect.GetPhysicalRect(aWM, frameSize.GetPhysicalSize(aWM));
}
@@ -6432,7 +6431,7 @@ nsTextFrame::DrawEmphasisMarks(gfxContext* aContext, WritingMode aWM,
const nscolor* aDecorationOverrideColor,
PropertyProvider* aProvider)
{
- const EmphasisMarkInfo* info = Properties().Get(EmphasisMarkProperty());
+ const EmphasisMarkInfo* info = GetProperty(EmphasisMarkProperty());
if (!info) {
return;
}
@@ -7584,7 +7583,7 @@ nsTextFrame::GetChildFrameContainingOffset(int32_t aContentOffset,
int32_t offset = mContentOffset;
// Try to look up the offset to frame property
- nsTextFrame* cachedFrame = Properties().Get(OffsetToFrameProperty());
+ nsTextFrame* cachedFrame = GetProperty(OffsetToFrameProperty());
if (cachedFrame) {
f = cachedFrame;
@@ -7632,7 +7631,7 @@ nsTextFrame::GetChildFrameContainingOffset(int32_t aContentOffset,
*aOutFrame = f;
// cache the frame we found
- Properties().Set(OffsetToFrameProperty(), f);
+ SetProperty(OffsetToFrameProperty(), f);
f->AddStateBits(TEXT_IN_OFFSET_CACHE);
return NS_OK;
@@ -8169,7 +8168,7 @@ nsTextFrame::GetFontSizeInflation() const
if (!HasFontSizeInflation()) {
return 1.0f;
}
- return Properties().Get(FontSizeInflationProperty());
+ return GetProperty(FontSizeInflationProperty());
}
void
@@ -8178,13 +8177,13 @@ nsTextFrame::SetFontSizeInflation(float aInflation)
if (aInflation == 1.0f) {
if (HasFontSizeInflation()) {
RemoveStateBits(TEXT_HAS_FONT_INFLATION);
- Properties().Delete(FontSizeInflationProperty());
+ DeleteProperty(FontSizeInflationProperty());
}
return;
}
AddStateBits(TEXT_HAS_FONT_INFLATION);
- Properties().Set(FontSizeInflationProperty(), aInflation);
+ SetProperty(FontSizeInflationProperty(), aInflation);
}
/* virtual */
@@ -9319,9 +9318,9 @@ nsTextFrame::ReflowText(nsLineLayout& aLineLayout, nscoord aAvailableWidth,
gfxFloat em = fm->EmHeight();
// Compress the characters in horizontal axis if necessary.
if (width <= em) {
- Properties().Remove(TextCombineScaleFactorProperty());
+ RemoveProperty(TextCombineScaleFactorProperty());
} else {
- Properties().Set(TextCombineScaleFactorProperty(), em / width);
+ SetProperty(TextCombineScaleFactorProperty(), em / width);
finalSize.ISize(wm) = em;
}
// Make the characters be in an 1em square.
@@ -10049,13 +10048,13 @@ nsTextFrame::AssignJustificationGaps(
static_assert(sizeof(aAssign) == 1,
"The encoding might be broken if JustificationAssignment "
"is larger than 1 byte");
- Properties().Set(JustificationAssignmentProperty(), encoded);
+ SetProperty(JustificationAssignmentProperty(), encoded);
}
mozilla::JustificationAssignment
nsTextFrame::GetJustificationAssignment() const
{
- int32_t encoded = Properties().Get(JustificationAssignmentProperty());
+ int32_t encoded = GetProperty(JustificationAssignmentProperty());
mozilla::JustificationAssignment result;
result.mGapsAtStart = encoded >> 8;
result.mGapsAtEnd = encoded & 0xFF;
diff --git a/layout/mathml/nsMathMLContainerFrame.cpp b/layout/mathml/nsMathMLContainerFrame.cpp
index ad1b13efd..93b631c9d 100644
--- a/layout/mathml/nsMathMLContainerFrame.cpp
+++ b/layout/mathml/nsMathMLContainerFrame.cpp
@@ -134,7 +134,7 @@ nsMathMLContainerFrame::SaveReflowAndBoundingMetricsFor(nsIFrame*
{
ReflowOutput* reflowOutput = new ReflowOutput(aReflowOutput);
reflowOutput->mBoundingMetrics = aBoundingMetrics;
- aFrame->Properties().Set(HTMLReflowOutputProperty(), reflowOutput);
+ aFrame->SetProperty(HTMLReflowOutputProperty(), reflowOutput);
}
// helper method to facilitate getting the reflow and bounding metrics
@@ -147,7 +147,7 @@ nsMathMLContainerFrame::GetReflowAndBoundingMetricsFor(nsIFrame* aFra
NS_PRECONDITION(aFrame, "null arg");
ReflowOutput* reflowOutput =
- aFrame->Properties().Get(HTMLReflowOutputProperty());
+ aFrame->GetProperty(HTMLReflowOutputProperty());
// IMPORTANT: This function is only meant to be called in Place() methods
// where it is assumed that SaveReflowAndBoundingMetricsFor has recorded the
@@ -175,9 +175,8 @@ void
nsMathMLContainerFrame::ClearSavedChildMetrics()
{
nsIFrame* childFrame = mFrames.FirstChild();
- FramePropertyTable* props = PresContext()->PropertyTable();
while (childFrame) {
- props->Delete(childFrame, HTMLReflowOutputProperty());
+ childFrame->DeleteProperty(HTMLReflowOutputProperty());
childFrame = childFrame->GetNextSibling();
}
}
diff --git a/layout/mathml/nsMathMLmtableFrame.cpp b/layout/mathml/nsMathMLmtableFrame.cpp
index a706fb483..fd184e637 100644
--- a/layout/mathml/nsMathMLmtableFrame.cpp
+++ b/layout/mathml/nsMathMLmtableFrame.cpp
@@ -167,8 +167,7 @@ FindCellProperty(const nsIFrame* aCellFrame,
nsTArray<int8_t>* propertyData = nullptr;
while (currentFrame) {
- FrameProperties props = currentFrame->Properties();
- propertyData = props.Get(aFrameProperty);
+ propertyData = currentFrame->GetProperty(aFrameProperty);
bool frameIsTable = (currentFrame->GetType() == nsGkAtoms::tableFrame);
if (propertyData || frameIsTable)
@@ -361,8 +360,7 @@ ParseFrameAttribute(nsIFrame* aFrame,
if (valueList) {
// The code reading the property assumes that this list is nonempty.
NS_ASSERTION(valueList->Length() >= 1, "valueList should not be empty!");
- FrameProperties props = aFrame->Properties();
- props.Set(AttributeToProperty(aAttribute), valueList);
+ aFrame->SetProperty(AttributeToProperty(aAttribute), valueList);
} else {
ReportParseError(aFrame, aAttribute->GetUTF16String(), attrValue.get());
}
@@ -769,8 +767,7 @@ nsMathMLmtableWrapperFrame::AttributeChanged(int32_t aNameSpaceID,
aAttribute == nsGkAtoms::columnalign_ ||
aAttribute == nsGkAtoms::columnlines_) {
// clear any cached property list for this table
- presContext->PropertyTable()->
- Delete(tableFrame, AttributeToProperty(aAttribute));
+ tableFrame->DeleteProperty(AttributeToProperty(aAttribute));
// Reparse the new attribute on the table.
ParseFrameAttribute(tableFrame, aAttribute, true);
} else {
@@ -1120,7 +1117,7 @@ nsMathMLmtrFrame::AttributeChanged(int32_t aNameSpaceID,
return NS_OK;
}
- presContext->PropertyTable()->Delete(this, AttributeToProperty(aAttribute));
+ DeleteProperty(AttributeToProperty(aAttribute));
bool allowMultiValues = (aAttribute == nsGkAtoms::columnalign_);
@@ -1219,8 +1216,7 @@ nsMathMLmtdFrame::AttributeChanged(int32_t aNameSpaceID,
if (aAttribute == nsGkAtoms::rowalign_ ||
aAttribute == nsGkAtoms::columnalign_) {
- nsPresContext* presContext = PresContext();
- presContext->PropertyTable()->Delete(this, AttributeToProperty(aAttribute));
+ DeleteProperty(AttributeToProperty(aAttribute));
// Reparse the attribute.
ParseFrameAttribute(this, aAttribute, false);
diff --git a/layout/reftests/svg/css-transform-svg-ref.html b/layout/reftests/svg/css-transform-svg-ref.html
new file mode 100644
index 000000000..6167442e7
--- /dev/null
+++ b/layout/reftests/svg/css-transform-svg-ref.html
@@ -0,0 +1,10 @@
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<style>
+</style>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
+ <rect id="a" x="0.49" y="0.51" width="2.5" height="2.5"/>
+ <rect id="b" x="3.5" y="3.5" width="2.5" height="2.5"/>
+</svg>
diff --git a/layout/reftests/svg/css-transform-svg.html b/layout/reftests/svg/css-transform-svg.html
new file mode 100644
index 000000000..c1c63a839
--- /dev/null
+++ b/layout/reftests/svg/css-transform-svg.html
@@ -0,0 +1,13 @@
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<style>
+#a {
+ transform: scaleY(1);
+}
+</style>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
+ <rect id="a" x="0.49" y="0.51" width="2.5" height="2.5"/>
+ <rect id="b" x="3.5" y="3.5" width="2.5" height="2.5"/>
+</svg>
diff --git a/layout/reftests/svg/reftest.list b/layout/reftests/svg/reftest.list
index 096628681..21e1c68a1 100644
--- a/layout/reftests/svg/reftest.list
+++ b/layout/reftests/svg/reftest.list
@@ -140,6 +140,7 @@ random == dynamic-use-nested-01b.svg dynamic-use-nested-01-ref.svg
== fragmentIdentifier-01.xhtml pass.svg
== linked-filter-01.svg pass.svg
== linked-pattern-01.svg pass.svg
+pref(layout.css.devPixelsPerPx,"1.0") == svg-blurry-with-subpixel-position.html svg-blurry-with-subpixel-position-ref.html
== use-01.svg pass.svg
== use-01-extref.svg pass.svg
== use-02-extref.svg use-02-extref-ref.svg
@@ -371,6 +372,7 @@ fuzzy-if(skiaContent,1,610) == textPath-03.svg pass.svg
== text-white-space-01.svg text-white-space-01-ref.svg
== thin-stroke-01.svg pass.svg
== zero-stroke-01.svg pass.svg
+== css-transform-svg.html css-transform-svg-ref.html
== tspan-dxdy-01.svg tspan-dxdy-ref.svg
== tspan-dxdy-02.svg tspan-dxdy-ref.svg
== tspan-dxdy-03.svg tspan-dxdy-ref.svg
diff --git a/layout/reftests/svg/svg-blurry-with-subpixel-position-ref.html b/layout/reftests/svg/svg-blurry-with-subpixel-position-ref.html
new file mode 100644
index 000000000..c315509d7
--- /dev/null
+++ b/layout/reftests/svg/svg-blurry-with-subpixel-position-ref.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<style>
+ svg {
+ width:750px;
+ height:750px;
+ margin:3px;
+ }
+</style>
+
+<svg viewBox="0.5 0.5 750 750">
+ <path d="M3,6L277,6M3,12L277,12M3,18L277,18M3,24L277,24M3,30L277,30M3,36L277,36M3,42L277,42M3,48L277,48M3,54L277,54M3,60L277,60M3,66L277,66M3,72L277,72M3,78L277,78M3,84L277,84M3,90L277,90M3,96L277,96M3,102L277,102M3,108L277,108M3,114L277,114" style="stroke-width:1; stroke:black;" />
+ <path d="M6,3L6,277M12,3L12,277M18,3L18,277M24,3L24,277M30,3L30,277M36,3L36,277M42,3L42,277M48,3L48,277M54,3L54,277M60,3L60,277M66,3L66,277M72,3L72,277M78,3L78,277M84,3L84,277M90,3L90,277M96,3L96,277M102,3L102,277M108,3L108,277M114,3L114,277" style="stroke-width:1; stroke:black;" />
+</svg>
diff --git a/layout/reftests/svg/svg-blurry-with-subpixel-position.html b/layout/reftests/svg/svg-blurry-with-subpixel-position.html
new file mode 100644
index 000000000..20bca7174
--- /dev/null
+++ b/layout/reftests/svg/svg-blurry-with-subpixel-position.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<style>
+ svg {
+ width:750px;
+ height:750px;
+ margin:2.5px;
+ }
+</style>
+
+<svg viewBox="0.5 0.5 750 750">
+ <path d="M3,6L277,6M3,12L277,12M3,18L277,18M3,24L277,24M3,30L277,30M3,36L277,36M3,42L277,42M3,48L277,48M3,54L277,54M3,60L277,60M3,66L277,66M3,72L277,72M3,78L277,78M3,84L277,84M3,90L277,90M3,96L277,96M3,102L277,102M3,108L277,108M3,114L277,114" style="stroke-width:1; stroke:black;" />
+ <path d="M6,3L6,277M12,3L12,277M18,3L18,277M24,3L24,277M30,3L30,277M36,3L36,277M42,3L42,277M48,3L48,277M54,3L54,277M60,3L60,277M66,3L66,277M72,3L72,277M78,3L78,277M84,3L84,277M90,3L90,277M96,3L96,277M102,3L102,277M108,3L108,277M114,3L114,277" style="stroke-width:1; stroke:black;" />
+</svg>
diff --git a/layout/style/FontFaceSet.cpp b/layout/style/FontFaceSet.cpp
index 1645adfef..81c5ede0e 100644
--- a/layout/style/FontFaceSet.cpp
+++ b/layout/style/FontFaceSet.cpp
@@ -583,6 +583,19 @@ FontFaceSet::StartLoad(gfxUserFontEntry* aUserFontEntry,
nsCOMPtr<nsIStreamLoader> streamLoader;
nsCOMPtr<nsILoadGroup> loadGroup(mDocument->GetDocumentLoadGroup());
+ // We're determining the security flags for font loading here based on
+ // scheme, because we want to allow fonts to be loaded using file:
+ // even if unique origins for file: access is enforced (allow CORS
+ // bypass in this case).
+ uint32_t securityFlags = 0;
+ bool isFile = false;
+ if (NS_SUCCEEDED(aFontFaceSrc->mURI->SchemeIs("file", &isFile)) &&
+ isFile) {
+ securityFlags = nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS;
+ } else {
+ securityFlags = nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS;
+ }
+
nsCOMPtr<nsIChannel> channel;
// Note we are calling NS_NewChannelWithTriggeringPrincipal() with both a
// node and a principal. This is because the document where the font is
@@ -592,7 +605,7 @@ FontFaceSet::StartLoad(gfxUserFontEntry* aUserFontEntry,
aFontFaceSrc->mURI,
mDocument,
aUserFontEntry->GetPrincipal(),
- nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS,
+ securityFlags,
nsIContentPolicy::TYPE_FONT,
loadGroup);
NS_ENSURE_SUCCESS(rv, rv);
diff --git a/layout/svg/SVGTextFrame.cpp b/layout/svg/SVGTextFrame.cpp
index e5a03333f..6ba267ee8 100644
--- a/layout/svg/SVGTextFrame.cpp
+++ b/layout/svg/SVGTextFrame.cpp
@@ -1328,7 +1328,7 @@ NS_DECLARE_FRAME_PROPERTY_DELETABLE(TextNodeCorrespondenceProperty,
static uint32_t
GetUndisplayedCharactersBeforeFrame(nsTextFrame* aFrame)
{
- void* value = aFrame->Properties().Get(TextNodeCorrespondenceProperty());
+ void* value = aFrame->GetProperty(TextNodeCorrespondenceProperty());
TextNodeCorrespondence* correspondence =
static_cast<TextNodeCorrespondence*>(value);
if (!correspondence) {
@@ -1517,8 +1517,8 @@ TextNodeCorrespondenceRecorder::TraverseAndRecord(nsIFrame* aFrame)
}
// Set the frame property.
- frame->Properties().Set(TextNodeCorrespondenceProperty(),
- new TextNodeCorrespondence(undisplayed));
+ frame->SetProperty(TextNodeCorrespondenceProperty(),
+ new TextNodeCorrespondence(undisplayed));
// Remember how far into the current nsTextNode we are.
mNodeCharIndex = frame->GetContentEnd();
@@ -3391,7 +3391,7 @@ SVGTextFrame::HandleAttributeChangeInDescendant(Element* aElement,
// Blow away our reference, if any
nsIFrame* childElementFrame = aElement->GetPrimaryFrame();
if (childElementFrame) {
- childElementFrame->Properties().Delete(
+ childElementFrame->DeleteProperty(
nsSVGEffects::HrefAsTextPathProperty());
NotifyGlyphMetricsChange();
}
@@ -4817,7 +4817,7 @@ SVGPathElement*
SVGTextFrame::GetTextPathPathElement(nsIFrame* aTextPathFrame)
{
nsSVGTextPathProperty *property =
- aTextPathFrame->Properties().Get(nsSVGEffects::HrefAsTextPathProperty());
+ aTextPathFrame->GetProperty(nsSVGEffects::HrefAsTextPathProperty());
if (!property) {
nsIContent* content = aTextPathFrame->GetContent();
diff --git a/layout/svg/nsSVGEffects.cpp b/layout/svg/nsSVGEffects.cpp
index e75c973c8..ca4c5778c 100644
--- a/layout/svg/nsSVGEffects.cpp
+++ b/layout/svg/nsSVGEffects.cpp
@@ -480,27 +480,26 @@ GetOrCreateFilterProperty(nsIFrame* aFrame)
if (!effects->HasFilters())
return nullptr;
- FrameProperties props = aFrame->Properties();
- nsSVGFilterProperty *prop = props.Get(nsSVGEffects::FilterProperty());
+ nsSVGFilterProperty *prop =
+ aFrame->GetProperty(nsSVGEffects::FilterProperty());
if (prop)
return prop;
prop = new nsSVGFilterProperty(effects->mFilters, aFrame);
NS_ADDREF(prop);
- props.Set(nsSVGEffects::FilterProperty(), prop);
+ aFrame->SetProperty(nsSVGEffects::FilterProperty(), prop);
return prop;
}
static nsSVGMaskProperty*
GetOrCreateMaskProperty(nsIFrame* aFrame)
{
- FrameProperties props = aFrame->Properties();
- nsSVGMaskProperty *prop = props.Get(nsSVGEffects::MaskProperty());
+ nsSVGMaskProperty *prop = aFrame->GetProperty(nsSVGEffects::MaskProperty());
if (prop)
return prop;
prop = new nsSVGMaskProperty(aFrame);
NS_ADDREF(prop);
- props.Set(nsSVGEffects::MaskProperty(), prop);
+ aFrame->SetProperty(nsSVGEffects::MaskProperty(), prop);
return prop;
}
@@ -512,13 +511,12 @@ GetEffectProperty(nsIURI* aURI, nsIFrame* aFrame,
if (!aURI)
return nullptr;
- FrameProperties props = aFrame->Properties();
- T* prop = props.Get(aProperty);
+ T* prop = aFrame->GetProperty(aProperty);
if (prop)
return prop;
prop = new T(aURI, aFrame, false);
NS_ADDREF(prop);
- props.Set(aProperty, prop);
+ aFrame->SetProperty(aProperty, prop);
return prop;
}
@@ -553,11 +551,11 @@ nsSVGEffects::GetPaintingPropertyForURI(nsIURI* aURI, nsIFrame* aFrame,
if (!aURI)
return nullptr;
- FrameProperties props = aFrame->Properties();
- nsSVGEffects::URIObserverHashtable *hashtable = props.Get(aProperty);
+ nsSVGEffects::URIObserverHashtable *hashtable =
+ aFrame->GetProperty(aProperty);
if (!hashtable) {
hashtable = new nsSVGEffects::URIObserverHashtable();
- props.Set(aProperty, hashtable);
+ aFrame->SetProperty(aProperty, hashtable);
}
nsSVGPaintingProperty* prop =
static_cast<nsSVGPaintingProperty*>(hashtable->GetWeak(aURI));
@@ -689,16 +687,15 @@ nsSVGEffects::UpdateEffects(nsIFrame* aFrame)
NS_ASSERTION(aFrame->GetContent()->IsElement(),
"aFrame's content should be an element");
- FrameProperties props = aFrame->Properties();
- props.Delete(FilterProperty());
- props.Delete(MaskProperty());
- props.Delete(ClipPathProperty());
- props.Delete(MarkerBeginProperty());
- props.Delete(MarkerMiddleProperty());
- props.Delete(MarkerEndProperty());
- props.Delete(FillProperty());
- props.Delete(StrokeProperty());
- props.Delete(BackgroundImageProperty());
+ aFrame->DeleteProperty(FilterProperty());
+ aFrame->DeleteProperty(MaskProperty());
+ aFrame->DeleteProperty(ClipPathProperty());
+ aFrame->DeleteProperty(MarkerBeginProperty());
+ aFrame->DeleteProperty(MarkerMiddleProperty());
+ aFrame->DeleteProperty(MarkerEndProperty());
+ aFrame->DeleteProperty(FillProperty());
+ aFrame->DeleteProperty(StrokeProperty());
+ aFrame->DeleteProperty(BackgroundImageProperty());
// Ensure that the filter is repainted correctly
// We can't do that in DoUpdate as the referenced frame may not be valid
@@ -725,7 +722,7 @@ nsSVGEffects::GetFilterProperty(nsIFrame* aFrame)
if (!aFrame->StyleEffects()->HasFilters())
return nullptr;
- return aFrame->Properties().Get(FilterProperty());
+ return aFrame->GetProperty(FilterProperty());
}
void
@@ -835,7 +832,7 @@ nsSVGEffects::InvalidateRenderingObservers(nsIFrame* aFrame)
return;
// If the rendering has changed, the bounds may well have changed too:
- aFrame->Properties().Delete(nsSVGUtils::ObjectBoundingBoxProperty());
+ aFrame->DeleteProperty(nsSVGUtils::ObjectBoundingBoxProperty());
nsSVGRenderingObserverList *observerList =
GetObserverList(content->AsElement());
@@ -864,7 +861,7 @@ nsSVGEffects::InvalidateDirectRenderingObservers(Element* aElement, uint32_t aFl
nsIFrame* frame = aElement->GetPrimaryFrame();
if (frame) {
// If the rendering has changed, the bounds may well have changed too:
- frame->Properties().Delete(nsSVGUtils::ObjectBoundingBoxProperty());
+ frame->DeleteProperty(nsSVGUtils::ObjectBoundingBoxProperty());
}
if (aElement->HasRenderingObservers()) {
diff --git a/layout/svg/nsSVGEffects.h b/layout/svg/nsSVGEffects.h
index 0cf9b1500..b8b2e53c1 100644
--- a/layout/svg/nsSVGEffects.h
+++ b/layout/svg/nsSVGEffects.h
@@ -7,7 +7,7 @@
#define NSSVGEFFECTS_H_
#include "mozilla/Attributes.h"
-#include "FramePropertyTable.h"
+#include "FrameProperties.h"
#include "mozilla/dom/Element.h"
#include "nsHashKeys.h"
#include "nsID.h"
diff --git a/layout/svg/nsSVGFilterFrame.cpp b/layout/svg/nsSVGFilterFrame.cpp
index 13ce16993..3b99f413e 100644
--- a/layout/svg/nsSVGFilterFrame.cpp
+++ b/layout/svg/nsSVGFilterFrame.cpp
@@ -107,7 +107,7 @@ nsSVGFilterFrame::GetReferencedFilter()
return nullptr;
nsSVGPaintingProperty *property =
- Properties().Get(nsSVGEffects::HrefAsPaintingProperty());
+ GetProperty(nsSVGEffects::HrefAsPaintingProperty());
if (!property) {
// Fetch our Filter element's href or xlink:href attribute
@@ -183,7 +183,7 @@ nsSVGFilterFrame::AttributeChanged(int32_t aNameSpaceID,
aNameSpaceID == kNameSpaceID_None) &&
aAttribute == nsGkAtoms::href) {
// Blow away our reference, if any
- Properties().Delete(nsSVGEffects::HrefAsPaintingProperty());
+ DeleteProperty(nsSVGEffects::HrefAsPaintingProperty());
mNoHRefURI = false;
// And update whoever references us
nsSVGEffects::InvalidateDirectRenderingObservers(this);
diff --git a/layout/svg/nsSVGGradientFrame.cpp b/layout/svg/nsSVGGradientFrame.cpp
index 2d7684f5a..340cfa881 100644
--- a/layout/svg/nsSVGGradientFrame.cpp
+++ b/layout/svg/nsSVGGradientFrame.cpp
@@ -72,7 +72,7 @@ nsSVGGradientFrame::AttributeChanged(int32_t aNameSpaceID,
aNameSpaceID == kNameSpaceID_None) &&
aAttribute == nsGkAtoms::href) {
// Blow away our reference, if any
- Properties().Delete(nsSVGEffects::HrefAsPaintingProperty());
+ DeleteProperty(nsSVGEffects::HrefAsPaintingProperty());
mNoHRefURI = false;
// And update whoever references us
nsSVGEffects::InvalidateDirectRenderingObservers(this);
@@ -316,7 +316,7 @@ nsSVGGradientFrame::GetReferencedGradient()
return nullptr;
nsSVGPaintingProperty *property =
- Properties().Get(nsSVGEffects::HrefAsPaintingProperty());
+ GetProperty(nsSVGEffects::HrefAsPaintingProperty());
if (!property) {
// Fetch our gradient element's href or xlink:href attribute
diff --git a/layout/svg/nsSVGIntegrationUtils.cpp b/layout/svg/nsSVGIntegrationUtils.cpp
index 0003e1a73..4ce2941d4 100644
--- a/layout/svg/nsSVGIntegrationUtils.cpp
+++ b/layout/svg/nsSVGIntegrationUtils.cpp
@@ -75,7 +75,7 @@ public:
private:
static nsRect GetPreEffectsVisualOverflowRect(nsIFrame* aFrame) {
- nsRect* r = aFrame->Properties().Get(nsIFrame::PreEffectsBBoxProperty());
+ nsRect* r = aFrame->GetProperty(nsIFrame::PreEffectsBBoxProperty());
if (r) {
return *r;
}
@@ -113,8 +113,7 @@ private:
NS_ASSERTION(aFrame->GetParent()->StyleContext()->GetPseudo() ==
nsCSSAnonBoxes::mozAnonymousBlock,
"How did we getting here, then?");
- NS_ASSERTION(!aFrame->Properties().Get(
- aFrame->PreTransformOverflowAreasProperty()),
+ NS_ASSERTION(!aFrame->GetProperty(aFrame->PreTransformOverflowAreasProperty()),
"GetVisualOverflowRect() won't return the pre-effects rect!");
return aFrame->GetVisualOverflowRect();
}
diff --git a/layout/svg/nsSVGOuterSVGFrame.cpp b/layout/svg/nsSVGOuterSVGFrame.cpp
index e1b97bb40..b1ee54eb9 100644
--- a/layout/svg/nsSVGOuterSVGFrame.cpp
+++ b/layout/svg/nsSVGOuterSVGFrame.cpp
@@ -979,43 +979,56 @@ nsSVGOuterSVGAnonChildFrame::GetType() const
return nsGkAtoms::svgOuterSVGAnonChildFrame;
}
-bool
-nsSVGOuterSVGAnonChildFrame::IsSVGTransformed(Matrix* aOwnTransform,
- Matrix* aFromParentTransform) const
+static Matrix
+ComputeOuterSVGAnonChildFrameTransform(const nsSVGOuterSVGAnonChildFrame* aFrame)
{
// Our elements 'transform' attribute is applied to our nsSVGOuterSVGFrame
// parent, and the element's children-only transforms are applied to us, the
// anonymous child frame. Since we are the child frame, we apply the
// children-only transforms as if they are our own transform.
- SVGSVGElement* content = static_cast<SVGSVGElement*>(mContent);
+ SVGSVGElement* content = static_cast<SVGSVGElement*>(aFrame->GetContent());
if (!content->HasChildrenOnlyTransform()) {
- return false;
+ return Matrix();
}
// Outer-<svg> doesn't use x/y, so we can pass eChildToUserSpace here.
gfxMatrix ownMatrix =
content->PrependLocalTransformsTo(gfxMatrix(), eChildToUserSpace);
- if (ownMatrix.IsIdentity()) {
- return false;
+ if (ownMatrix.HasNonTranslation()) {
+ // viewBox, currentScale and currentTranslate should only produce a
+ // rectilinear transform.
+ MOZ_ASSERT(ownMatrix.IsRectilinear(),
+ "Non-rectilinear transform will break the following logic");
+
+ // The nsDisplayTransform code will apply this transform to our frame,
+ // including to our frame position. We don't want our frame position to
+ // be scaled though, so we need to correct for that in the transform.
+ CSSPoint pos = CSSPixel::FromAppUnits(aFrame->GetPosition());
+ CSSPoint scaledPos = CSSPoint(ownMatrix._11 * pos.x, ownMatrix._22 * pos.y);
+ CSSPoint deltaPos = scaledPos - pos;
+ ownMatrix *= gfxMatrix::Translation(-deltaPos.x, -deltaPos.y);
}
- if (aOwnTransform) {
- if (ownMatrix.HasNonTranslation()) {
- // Note: viewBox, currentScale and currentTranslate should only
- // produce a rectilinear transform.
- // The nsDisplayTransform code will apply this transform to our frame,
- // including to our frame position. We don't want our frame position to
- // be scaled though, so we need to correct for that in the transform.
- CSSPoint pos = CSSPixel::FromAppUnits(GetPosition());
- CSSPoint scaledPos = CSSPoint(ownMatrix._11 * pos.x, ownMatrix._22 * pos.y);
- CSSPoint deltaPos = scaledPos - pos;
- ownMatrix *= gfxMatrix::Translation(-deltaPos.x, -deltaPos.y);
- }
+ return gfx::ToMatrix(ownMatrix);
+}
- *aOwnTransform = gfx::ToMatrix(ownMatrix);
+// We want this frame to be a reference frame. An easy way to achieve that is
+// to always return true from this method, even for identity transforms.
+// This frame being a reference frame ensures that the offset between this
+// <svg> element and the parent reference frame is completely absorbed by the
+// nsDisplayTransform that's created for this frame, and that this offset does
+// not affect our descendants' transforms. Consequently, if the <svg> element
+// moves, e.g. during scrolling, the transform matrices of our contents are
+// unaffected. This simplifies invalidation.
+bool
+nsSVGOuterSVGAnonChildFrame::IsSVGTransformed(Matrix* aOwnTransform,
+ Matrix* aFromParentTransform) const
+{
+ if (aOwnTransform) {
+ *aOwnTransform = ComputeOuterSVGAnonChildFrameTransform(this);
}
return true;
diff --git a/layout/svg/nsSVGPatternFrame.cpp b/layout/svg/nsSVGPatternFrame.cpp
index 198163d7f..2cd7eeaad 100644
--- a/layout/svg/nsSVGPatternFrame.cpp
+++ b/layout/svg/nsSVGPatternFrame.cpp
@@ -89,7 +89,7 @@ nsSVGPatternFrame::AttributeChanged(int32_t aNameSpaceID,
aNameSpaceID == kNameSpaceID_None) &&
aAttribute == nsGkAtoms::href) {
// Blow away our reference, if any
- Properties().Delete(nsSVGEffects::HrefAsPaintingProperty());
+ DeleteProperty(nsSVGEffects::HrefAsPaintingProperty());
mNoHRefURI = false;
// And update whoever references us
nsSVGEffects::InvalidateDirectRenderingObservers(this);
@@ -548,7 +548,7 @@ nsSVGPatternFrame::GetReferencedPattern()
return nullptr;
nsSVGPaintingProperty *property =
- Properties().Get(nsSVGEffects::HrefAsPaintingProperty());
+ GetProperty(nsSVGEffects::HrefAsPaintingProperty());
if (!property) {
// Fetch our pattern element's href or xlink:href attribute
diff --git a/layout/svg/nsSVGUtils.cpp b/layout/svg/nsSVGUtils.cpp
index 98e5f9b5f..c3394e292 100644
--- a/layout/svg/nsSVGUtils.cpp
+++ b/layout/svg/nsSVGUtils.cpp
@@ -1060,10 +1060,9 @@ nsSVGUtils::GetBBox(nsIFrame *aFrame, uint32_t aFlags)
return bbox;
}
- FrameProperties props = aFrame->Properties();
if (aFlags == eBBoxIncludeFillGeometry) {
- gfxRect* prop = props.Get(ObjectBoundingBoxProperty());
+ gfxRect* prop = aFrame->GetProperty(ObjectBoundingBoxProperty());
if (prop) {
return *prop;
}
@@ -1139,7 +1138,7 @@ nsSVGUtils::GetBBox(nsIFrame *aFrame, uint32_t aFlags)
if (aFlags == eBBoxIncludeFillGeometry) {
// Obtaining the bbox for objectBoundingBox calculations is common so we
// cache the result for future calls, since calculation can be expensive:
- props.Set(ObjectBoundingBoxProperty(), new gfxRect(bbox));
+ aFrame->SetProperty(ObjectBoundingBoxProperty(), new gfxRect(bbox));
}
return bbox;
diff --git a/layout/tables/nsTableFrame.cpp b/layout/tables/nsTableFrame.cpp
index 4c11d2704..b9b6ca5fe 100644
--- a/layout/tables/nsTableFrame.cpp
+++ b/layout/tables/nsTableFrame.cpp
@@ -272,13 +272,12 @@ nsTableFrame::RegisterPositionedTablePart(nsIFrame* aFrame)
tableFrame = static_cast<nsTableFrame*>(tableFrame->FirstContinuation());
// Retrieve the positioned parts array for this table.
- FrameProperties props = tableFrame->Properties();
- FrameTArray* positionedParts = props.Get(PositionedTablePartArray());
+ FrameTArray* positionedParts = tableFrame->GetProperty(PositionedTablePartArray());
// Lazily create the array if it doesn't exist yet.
if (!positionedParts) {
positionedParts = new FrameTArray;
- props.Set(PositionedTablePartArray(), positionedParts);
+ tableFrame->SetProperty(PositionedTablePartArray(), positionedParts);
}
// Add this frame to the list.
@@ -302,8 +301,7 @@ nsTableFrame::UnregisterPositionedTablePart(nsIFrame* aFrame,
tableFrame = static_cast<nsTableFrame*>(tableFrame->FirstContinuation());
// Retrieve the positioned parts array for this table.
- FrameProperties props = tableFrame->Properties();
- FrameTArray* positionedParts = props.Get(PositionedTablePartArray());
+ FrameTArray* positionedParts = tableFrame->GetProperty(PositionedTablePartArray());
// Remove the frame.
MOZ_ASSERT(positionedParts && positionedParts->Contains(aFrame),
@@ -1992,7 +1990,7 @@ nsTableFrame::FixupPositionedTableParts(nsPresContext* aPresContext,
ReflowOutput& aDesiredSize,
const ReflowInput& aReflowInput)
{
- FrameTArray* positionedParts = Properties().Get(PositionedTablePartArray());
+ FrameTArray* positionedParts = GetProperty(PositionedTablePartArray());
if (!positionedParts) {
return;
}
@@ -2653,13 +2651,18 @@ nsTableFrame::GetUsedMargin() const
NS_DECLARE_FRAME_PROPERTY_DELETABLE(TableBCProperty, BCPropertyData)
BCPropertyData*
-nsTableFrame::GetBCProperty(bool aCreateIfNecessary) const
+nsTableFrame::GetBCProperty() const
{
- FrameProperties props = Properties();
- BCPropertyData* value = props.Get(TableBCProperty());
- if (!value && aCreateIfNecessary) {
+ return GetProperty(TableBCProperty());
+}
+
+BCPropertyData*
+nsTableFrame::GetOrCreateBCProperty()
+{
+ BCPropertyData* value = GetProperty(TableBCProperty());
+ if (!value) {
value = new BCPropertyData();
- props.Set(TableBCProperty(), value);
+ SetProperty(TableBCProperty(), value);
}
return value;
@@ -4103,7 +4106,7 @@ nsTableFrame::AddBCDamageArea(const TableArea& aValue)
SetNeedToCalcBCBorders(true);
// Get the property
- BCPropertyData* value = GetBCProperty(true);
+ BCPropertyData* value = GetOrCreateBCProperty();
if (value) {
#ifdef DEBUG
VerifyNonNegativeDamageRect(value->mDamageArea);
@@ -4143,7 +4146,7 @@ nsTableFrame::SetFullBCDamageArea()
SetNeedToCalcBCBorders(true);
- BCPropertyData* value = GetBCProperty(true);
+ BCPropertyData* value = GetOrCreateBCProperty();
if (value) {
value->mDamageArea = TableArea(0, 0, GetColCount(), GetRowCount());
}
@@ -4310,7 +4313,7 @@ BCMapCellInfo::BCMapCellInfo(nsTableFrame* aTableFrame)
: mTableFrame(aTableFrame)
, mNumTableRows(aTableFrame->GetRowCount())
, mNumTableCols(aTableFrame->GetColCount())
- , mTableBCData(mTableFrame->Properties().Get(TableBCProperty()))
+ , mTableBCData(mTableFrame->GetProperty(TableBCProperty()))
, mTableWM(aTableFrame->StyleContext())
{
ResetCellInfo();
diff --git a/layout/tables/nsTableFrame.h b/layout/tables/nsTableFrame.h
index a78625339..7e56c28c1 100644
--- a/layout/tables/nsTableFrame.h
+++ b/layout/tables/nsTableFrame.h
@@ -809,7 +809,8 @@ protected:
void SetBorderCollapse(bool aValue);
- BCPropertyData* GetBCProperty(bool aCreateIfNecessary = false) const;
+ BCPropertyData* GetBCProperty() const;
+ BCPropertyData* GetOrCreateBCProperty();
void SetFullBCDamageArea();
void CalcBCBorders();
diff --git a/layout/tables/nsTableRowFrame.cpp b/layout/tables/nsTableRowFrame.cpp
index 81b5d6699..1b6051ef2 100644
--- a/layout/tables/nsTableRowFrame.cpp
+++ b/layout/tables/nsTableRowFrame.cpp
@@ -978,7 +978,7 @@ nsTableRowFrame::ReflowChildren(nsPresContext* aPresContext,
// MovePositionBy does internally. (This codepath should really
// be merged into the else below if we can.)
nsMargin* computedOffsetProp =
- kidFrame->Properties().Get(nsIFrame::ComputedOffsetProperty());
+ kidFrame->GetProperty(nsIFrame::ComputedOffsetProperty());
// Bug 975644: a position:sticky kid can end up with a null
// property value here.
LogicalMargin computedOffsets(wm, computedOffsetProp ?
@@ -1417,16 +1417,14 @@ nsTableRowFrame::SetUnpaginatedBSize(nsPresContext* aPresContext,
nscoord aValue)
{
NS_ASSERTION(!GetPrevInFlow(), "program error");
- // Get the property
- aPresContext->PropertyTable()->
- Set(this, RowUnpaginatedHeightProperty(), aValue);
+ // Set the property
+ SetProperty(RowUnpaginatedHeightProperty(), aValue);
}
nscoord
nsTableRowFrame::GetUnpaginatedBSize()
{
- FrameProperties props = FirstInFlow()->Properties();
- return props.Get(RowUnpaginatedHeightProperty());
+ return GetProperty(RowUnpaginatedHeightProperty());
}
void nsTableRowFrame::SetContinuousBCBorderWidth(LogicalSide aForSide,
diff --git a/layout/tables/nsTableRowGroupFrame.cpp b/layout/tables/nsTableRowGroupFrame.cpp
index 60596f12b..8f014b204 100644
--- a/layout/tables/nsTableRowGroupFrame.cpp
+++ b/layout/tables/nsTableRowGroupFrame.cpp
@@ -1910,7 +1910,7 @@ nsTableRowGroupFrame::ClearRowCursor()
}
RemoveStateBits(NS_ROWGROUP_HAS_ROW_CURSOR);
- Properties().Delete(RowCursorProperty());
+ DeleteProperty(RowCursorProperty());
}
nsTableRowGroupFrame::FrameCursorData*
@@ -1934,7 +1934,7 @@ nsTableRowGroupFrame::SetupRowCursor()
FrameCursorData* data = new FrameCursorData();
if (!data)
return nullptr;
- Properties().Set(RowCursorProperty(), data);
+ SetProperty(RowCursorProperty(), data);
AddStateBits(NS_ROWGROUP_HAS_ROW_CURSOR);
return data;
}
@@ -1946,7 +1946,7 @@ nsTableRowGroupFrame::GetFirstRowContaining(nscoord aY, nscoord* aOverflowAbove)
return nullptr;
}
- FrameCursorData* property = Properties().Get(RowCursorProperty());
+ FrameCursorData* property = GetProperty(RowCursorProperty());
uint32_t cursorIndex = property->mCursorIndex;
uint32_t frameCount = property->mFrames.Length();
if (cursorIndex >= frameCount)
diff --git a/layout/tables/nsTableWrapperFrame.cpp b/layout/tables/nsTableWrapperFrame.cpp
index e44652a73..f0b6d1512 100644
--- a/layout/tables/nsTableWrapperFrame.cpp
+++ b/layout/tables/nsTableWrapperFrame.cpp
@@ -246,7 +246,7 @@ nsTableWrapperFrame::InitChildReflowInput(nsPresContext& aPresContext,
}
// Propagate our stored CB size if present, minus any margins.
if (!HasAnyStateBits(NS_FRAME_OUT_OF_FLOW)) {
- LogicalSize* cb = Properties().Get(GridItemCBSizeProperty());
+ LogicalSize* cb = GetProperty(GridItemCBSizeProperty());
if (cb) {
cbSize.emplace(*cb);
*cbSize -= aReflowInput.ComputedLogicalMargin().Size(wm);
@@ -953,7 +953,7 @@ nsTableWrapperFrame::Reflow(nsPresContext* aPresContext,
// for the table frame if we are bsize constrained and the caption is above
// or below the inner table. Also reduce the CB size that we store for
// our children in case we're a grid item, by the same amount.
- LogicalSize* cbSize = Properties().Get(GridItemCBSizeProperty());
+ LogicalSize* cbSize = GetProperty(GridItemCBSizeProperty());
if (NS_UNCONSTRAINEDSIZE != aOuterRI.AvailableBSize() || cbSize) {
nscoord captionBSize = 0;
nscoord captionISize = 0;
diff --git a/layout/xul/nsBox.cpp b/layout/xul/nsBox.cpp
index f7ec5fead..787758b15 100644
--- a/layout/xul/nsBox.cpp
+++ b/layout/xul/nsBox.cpp
@@ -144,10 +144,9 @@ nsBox::BeginXULLayout(nsBoxLayoutState& aState)
// Another copy-over from ReflowInput.
// Since we are in reflow, we don't need to store these properties anymore.
- FrameProperties props = Properties();
- props.Delete(UsedBorderProperty());
- props.Delete(UsedPaddingProperty());
- props.Delete(UsedMarginProperty());
+ DeleteProperty(UsedBorderProperty());
+ DeleteProperty(UsedPaddingProperty());
+ DeleteProperty(UsedMarginProperty());
#ifdef DEBUG_LAYOUT
PropagateDebug(aState);
diff --git a/layout/xul/nsMenuFrame.cpp b/layout/xul/nsMenuFrame.cpp
index ea968fab5..67fcdbe43 100644
--- a/layout/xul/nsMenuFrame.cpp
+++ b/layout/xul/nsMenuFrame.cpp
@@ -273,7 +273,7 @@ nsMenuFrame::GetPopupList() const
if (!HasPopup()) {
return nullptr;
}
- nsFrameList* prop = Properties().Get(PopupListProperty());
+ nsFrameList* prop = GetProperty(PopupListProperty());
NS_ASSERTION(prop && prop->GetLength() == 1 &&
prop->FirstChild()->GetType() == nsGkAtoms::menuPopupFrame,
"popup list should have exactly one nsMenuPopupFrame");
@@ -284,7 +284,7 @@ void
nsMenuFrame::DestroyPopupList()
{
NS_ASSERTION(HasPopup(), "huh?");
- nsFrameList* prop = Properties().Remove(PopupListProperty());
+ nsFrameList* prop = RemoveProperty(PopupListProperty());
NS_ASSERTION(prop && prop->IsEmpty(),
"popup list must exist and be empty when destroying");
RemoveStateBits(NS_STATE_MENU_HAS_POPUP_LIST);
@@ -300,7 +300,7 @@ nsMenuFrame::SetPopupFrame(nsFrameList& aFrameList)
// Remove the frame from the list and store it in a nsFrameList* property.
aFrameList.RemoveFrame(popupFrame);
nsFrameList* popupList = new (PresContext()->PresShell()) nsFrameList(popupFrame, popupFrame);
- Properties().Set(PopupListProperty(), popupList);
+ SetProperty(PopupListProperty(), popupList);
AddStateBits(NS_STATE_MENU_HAS_POPUP_LIST);
break;
}
diff --git a/media/libnestegg/include/nestegg.h b/media/libnestegg/include/nestegg.h
index 2baa50bc5..2a9f08f5d 100644
--- a/media/libnestegg/include/nestegg.h
+++ b/media/libnestegg/include/nestegg.h
@@ -72,6 +72,8 @@ extern "C" {
#define NESTEGG_CODEC_VP9 2 /**< Track uses Google On2 VP9 codec. */
#define NESTEGG_CODEC_OPUS 3 /**< Track uses Xiph Opus codec. */
#define NESTEGG_CODEC_AV1 4 /**< Track uses AOMedia AV1 codec. */
+#define NESTEGG_CODEC_AVC1 5 /**< Track uses AVC1 'h264' */
+#define NESTEGG_CODEC_AAC 6 /**< Track uses AAC 'mp4a' */
#define NESTEGG_CODEC_UNKNOWN INT_MAX /**< Track uses unknown codec. */
#define NESTEGG_VIDEO_MONO 0 /**< Track is mono video. */
diff --git a/media/libnestegg/src/nestegg.c b/media/libnestegg/src/nestegg.c
index 61c30ec6b..051bc50fa 100644
--- a/media/libnestegg/src/nestegg.c
+++ b/media/libnestegg/src/nestegg.c
@@ -157,6 +157,8 @@ enum ebml_type_enum {
#define TRACK_ID_AV1 "V_AV1"
#define TRACK_ID_VORBIS "A_VORBIS"
#define TRACK_ID_OPUS "A_OPUS"
+#define TRACK_ID_AVC1 "V_MPEG4/ISO/AVC"
+#define TRACK_ID_AAC "A_AAC"
/* Track Encryption */
#define CONTENT_ENC_ALGO_AES 5
@@ -2401,6 +2403,12 @@ nestegg_track_codec_id(nestegg * ctx, unsigned int track)
if (strcmp(codec_id, TRACK_ID_OPUS) == 0)
return NESTEGG_CODEC_OPUS;
+ if (strcmp(codec_id, TRACK_ID_AVC1) == 0)
+ return NESTEGG_CODEC_AVC1;
+
+ if (strcmp(codec_id, TRACK_ID_AAC) == 0)
+ return NESTEGG_CODEC_AAC;
+
return NESTEGG_CODEC_UNKNOWN;
}
@@ -2421,7 +2429,8 @@ nestegg_track_codec_data_count(nestegg * ctx, unsigned int track,
codec_id = nestegg_track_codec_id(ctx, track);
- if (codec_id == NESTEGG_CODEC_OPUS) {
+ if (codec_id == NESTEGG_CODEC_OPUS ||
+ codec_id == NESTEGG_CODEC_AAC) {
*count = 1;
return 0;
}
@@ -2459,7 +2468,9 @@ nestegg_track_codec_data(nestegg * ctx, unsigned int track, unsigned int item,
return -1;
if (nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_VORBIS &&
- nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_OPUS)
+ nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_OPUS &&
+ nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_AVC1 &&
+ nestegg_track_codec_id(ctx, track) != NESTEGG_CODEC_AAC)
return -1;
if (ne_get_binary(entry->codec_private, &codec_private) != 0)
@@ -2772,6 +2783,19 @@ nestegg_read_packet(nestegg * ctx, nestegg_packet ** pkt)
if (r != 1)
return r;
+ /* Some files have a crc32 element, since it also has to be first it
+ conflicts with the timecode spec. Just ignore it */
+ if (id == ID_CRC32) {
+ ctx->log(ctx, NESTEGG_LOG_DEBUG,
+ "read_packet: skipping crc element in a cluster");
+ r = ne_io_read_skip(ctx->io, size);
+ if (r != 1)
+ return r;
+ r = ne_read_element(ctx, &id, &size);
+ if (r != 1)
+ return r;
+ }
+
/* Timecode must be the first element in a Cluster, per spec. */
if (id != ID_TIMECODE)
return -1;
diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
index d5005cbdd..e69a985ce 100644
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -1319,12 +1319,7 @@ pref("javascript.options.mem.gc_max_empty_chunk_count", 30);
pref("javascript.options.showInConsole", false);
-#ifdef RELEASE_OR_BETA
-// Disabled in Beta and Release for now, see bug 1225406
-pref("javascript.options.shared_memory", false);
-#else
pref("javascript.options.shared_memory", true);
-#endif
pref("javascript.options.throw_on_debuggee_would_run", false);
pref("javascript.options.dump_stack_on_debuggee_would_run", false);
@@ -1336,6 +1331,10 @@ pref("image.animation_mode", "normal");
// Same-origin policy for file URIs, "false" is traditional
pref("security.fileuri.strict_origin_policy", true);
+// Treat all file URIs as having a unique origin.
+// Only has an effect if strict origin policy is true.
+pref("security.fileuri.unique_origin", true);
+
// If this pref is true, prefs in the logging.config branch will be cleared on
// startup. This is done so that setting a log-file and log-modules at runtime
// doesn't persist across restarts leading to huge logfile and low disk space.
@@ -1993,6 +1992,13 @@ pref("network.generic-ntlm-auth.workstation", "WORKSTATION");
// 2 - allow the cross-origin authentication as well.
pref("network.auth.subresource-http-auth-allow", 2);
+// Sub-resources HTTP-authentication for cross-origin images:
+// true - presenting the http auth. dialog for cross-origin images is allowed.
+// false - suppress the http auth. dialog for cross-origin images.
+// If network.auth.subresource-http-auth-allow has a value of 0 or 1, this pref
+// does not have any effect.
+pref("network.auth.subresource-http-img-XO-auth", false);
+
// This preference controls whether to allow sending default credentials (SSO) to
// NTLM/Negotiate servers allowed in the "trusted uri" list when navigating them
// in a Private Browsing window.
@@ -4006,6 +4012,12 @@ pref("autocomplete.ungrab_during_mode_switch", true);
// toggling to use the XUL filepicker
pref("ui.allow_platform_file_picker", true);
+// Allow for using the native GTK file picker. If the application is not run
+// with GTK_USE_PORTAL=1 this pref has no effect.
+#ifdef MOZ_WIDGET_GTK
+pref("widget.allow-gtk-native-file-chooser", false);
+#endif
+
pref("helpers.global_mime_types_file", "/etc/mime.types");
pref("helpers.global_mailcap_file", "/etc/mailcap");
pref("helpers.private_mime_types_file", "~/.mime.types");
@@ -5445,6 +5457,9 @@ pref("layout.css.servo.enabled", true);
// URL-Bar will not be blocked when flipping this pref.
pref("security.data_uri.block_toplevel_data_uri_navigations", true);
+// If true, all FTP subresource loads will be blocked.
+pref("security.block_ftp_subresources", true);
+
// Disable Storage api in release builds.
#ifdef NIGHTLY_BUILD
pref("dom.storageManager.enabled", true);
diff --git a/netwerk/base/nsIBrowserSearchService.idl b/netwerk/base/nsIBrowserSearchService.idl
index 045973e0c..4ca052e91 100644
--- a/netwerk/base/nsIBrowserSearchService.idl
+++ b/netwerk/base/nsIBrowserSearchService.idl
@@ -7,7 +7,7 @@
interface nsIURI;
interface nsIInputStream;
-[scriptable, uuid(5799251f-5b55-4df7-a9e7-0c27812c469a)]
+[scriptable, uuid(72599f7a-3712-4b93-90e9-86127006cd68)]
interface nsISearchSubmission : nsISupports
{
/**
@@ -20,6 +20,12 @@ interface nsISearchSubmission : nsISupports
* The URI to submit a search to.
*/
readonly attribute nsIURI uri;
+
+ /**
+ * The POST data associated with a search submission as an
+ * application/x-www-form-urlencoded string. May be null.
+ */
+ readonly attribute AString postDataString;
};
[scriptable, uuid(620bd920-0491-48c8-99a8-d6047e64802d)]
diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp
index e0dc7d8e8..bd9a4a96f 100644
--- a/netwerk/base/nsIOService.cpp
+++ b/netwerk/base/nsIOService.cpp
@@ -166,6 +166,7 @@ uint32_t nsIOService::gDefaultSegmentSize = 4096;
uint32_t nsIOService::gDefaultSegmentCount = 24;
bool nsIOService::sBlockToplevelDataUriNavigations = false;
+bool nsIOService::sBlockFTPSubresources = false;
////////////////////////////////////////////////////////////////////////////////
@@ -243,6 +244,8 @@ nsIOService::Init()
Preferences::AddBoolVarCache(&sBlockToplevelDataUriNavigations,
"security.data_uri.block_toplevel_data_uri_navigations", false);
+ Preferences::AddBoolVarCache(&sBlockFTPSubresources,
+ "security.block_ftp_subresources", true);
Preferences::AddBoolVarCache(&mOfflineMirrorsConnectivity, OFFLINE_MIRRORS_CONNECTIVITY, true);
gIOService = this;
@@ -1869,5 +1872,11 @@ nsIOService::BlockToplevelDataUriNavigations()
return sBlockToplevelDataUriNavigations;
}
+/*static*/ bool
+nsIOService::BlockFTPSubresources()
+{
+ return sBlockFTPSubresources;
+}
+
} // namespace net
} // namespace mozilla
diff --git a/netwerk/base/nsIOService.h b/netwerk/base/nsIOService.h
index 19eed743a..f3a26f5d2 100644
--- a/netwerk/base/nsIOService.h
+++ b/netwerk/base/nsIOService.h
@@ -94,6 +94,8 @@ public:
static bool BlockToplevelDataUriNavigations();
+ static bool BlockFTPSubresources();
+
// Used to trigger a recheck of the captive portal status
nsresult RecheckCaptivePortal();
private:
@@ -175,6 +177,8 @@ private:
static bool sBlockToplevelDataUriNavigations;
+ static bool sBlockFTPSubresources;
+
// Time a network tearing down started.
mozilla::Atomic<PRIntervalTime> mNetTearingDownStarted;
public:
diff --git a/netwerk/base/nsNetUtil.cpp b/netwerk/base/nsNetUtil.cpp
index 653a9003e..2974e26b0 100644
--- a/netwerk/base/nsNetUtil.cpp
+++ b/netwerk/base/nsNetUtil.cpp
@@ -10,6 +10,7 @@
#include "mozilla/LoadContext.h"
#include "mozilla/LoadInfo.h"
#include "mozilla/BasePrincipal.h"
+#include "mozilla/Preferences.h"
#include "mozilla/Telemetry.h"
#include "nsNetUtil.h"
#include "nsNetUtilInlines.h"
@@ -1821,33 +1822,40 @@ NS_RelaxStrictFileOriginPolicy(nsIURI *aTargetURI,
return false;
}
- //
- // If the file to be loaded is in a subdirectory of the source
- // (or same-dir if source is not a directory) then it will
- // inherit its source principal and be scriptable by that source.
- //
- bool sourceIsDir;
- bool allowed = false;
- nsresult rv = sourceFile->IsDirectory(&sourceIsDir);
- if (NS_SUCCEEDED(rv) && sourceIsDir) {
- rv = sourceFile->Contains(targetFile, &allowed);
- } else {
- nsCOMPtr<nsIFile> sourceParent;
- rv = sourceFile->GetParent(getter_AddRefs(sourceParent));
- if (NS_SUCCEEDED(rv) && sourceParent) {
- rv = sourceParent->Equals(targetFile, &allowed);
- if (NS_FAILED(rv) || !allowed) {
- rv = sourceParent->Contains(targetFile, &allowed);
- } else {
- MOZ_ASSERT(aAllowDirectoryTarget,
- "sourceFile->Parent == targetFile, but targetFile "
- "should've been disallowed if it is a directory");
+ bool uniqueOrigin = true;
+ uniqueOrigin = Preferences::GetBool("security.fileuri.unique_origin");
+
+ // If treating all files as unique origins, we can skip this because
+ // it should always be refused.
+ if (!uniqueOrigin) {
+ //
+ // If the file to be loaded is in a subdirectory of the source
+ // (or same-dir if source is not a directory) then it will
+ // inherit its source principal and be scriptable by that source.
+ //
+ bool sourceIsDir;
+ bool allowed = false;
+ nsresult rv = sourceFile->IsDirectory(&sourceIsDir);
+ if (NS_SUCCEEDED(rv) && sourceIsDir) {
+ rv = sourceFile->Contains(targetFile, &allowed);
+ } else {
+ nsCOMPtr<nsIFile> sourceParent;
+ rv = sourceFile->GetParent(getter_AddRefs(sourceParent));
+ if (NS_SUCCEEDED(rv) && sourceParent) {
+ rv = sourceParent->Equals(targetFile, &allowed);
+ if (NS_FAILED(rv) || !allowed) {
+ rv = sourceParent->Contains(targetFile, &allowed);
+ } else {
+ MOZ_ASSERT(aAllowDirectoryTarget,
+ "sourceFile->Parent == targetFile, but targetFile "
+ "should've been disallowed if it is a directory");
+ }
}
}
- }
- if (NS_SUCCEEDED(rv) && allowed) {
- return true;
+ if (NS_SUCCEEDED(rv) && allowed) {
+ return true;
+ }
}
return false;
diff --git a/netwerk/base/nsStandardURL.cpp b/netwerk/base/nsStandardURL.cpp
index dff4ecbc0..7317240c2 100644
--- a/netwerk/base/nsStandardURL.cpp
+++ b/netwerk/base/nsStandardURL.cpp
@@ -575,7 +575,7 @@ nsStandardURL::ValidIPv6orHostname(const char *host, uint32_t length)
}
const char *end = host + length;
- if (end != net_FindCharInSet(host, end, CONTROL_CHARACTERS " #/:?@[\\]*<>|\"")) {
+ if (end != net_FindCharInSet(host, end, CONTROL_CHARACTERS " #/:?@[\\]*<>|\"^")) {
// We still allow % because it is in the ID of addons.
// Any percent encoded ASCII characters that are not allowed in the
// hostname are not percent decoded, and will be parsed just fine.
diff --git a/netwerk/protocol/http/AlternateServices.cpp b/netwerk/protocol/http/AlternateServices.cpp
index ee2fa9331..10bd61928 100644
--- a/netwerk/protocol/http/AlternateServices.cpp
+++ b/netwerk/protocol/http/AlternateServices.cpp
@@ -121,6 +121,11 @@ AltSvcMapping::ProcessHeader(const nsCString &buf, const nsCString &originScheme
continue;
}
+ if (NS_FAILED(NS_CheckPortSafety(portno, originScheme.get()))) {
+ LOG(("Alt Svc does not allow port %d, ignoring request", portno));
+ continue;
+ }
+
// unescape modifies a c string in place, so afterwards
// update nsCString length
nsUnescape(npnToken.BeginWriting());
diff --git a/netwerk/protocol/http/Http2Push.cpp b/netwerk/protocol/http/Http2Push.cpp
index b6fc485e2..34fc425d2 100644
--- a/netwerk/protocol/http/Http2Push.cpp
+++ b/netwerk/protocol/http/Http2Push.cpp
@@ -30,8 +30,8 @@ class CallChannelOnPush final : public Runnable {
Http2PushedStream *pushStream)
: mAssociatedChannel(associatedChannel)
, mPushedURI(pushedURI)
- , mPushedStream(pushStream)
{
+ mPushedStreamWrapper = new Http2PushedStreamWrapper(pushStream);
}
NS_IMETHOD Run() override
@@ -40,21 +40,94 @@ class CallChannelOnPush final : public Runnable {
RefPtr<nsHttpChannel> channel;
CallQueryInterface(mAssociatedChannel, channel.StartAssignment());
MOZ_ASSERT(channel);
- if (channel && NS_SUCCEEDED(channel->OnPush(mPushedURI, mPushedStream))) {
+ if (channel && NS_SUCCEEDED(channel->OnPush(mPushedURI, mPushedStreamWrapper))) {
return NS_OK;
}
LOG3(("Http2PushedStream Orphan %p failed OnPush\n", this));
- mPushedStream->OnPushFailed();
+ mPushedStreamWrapper->OnPushFailed();
return NS_OK;
}
private:
nsCOMPtr<nsIHttpChannelInternal> mAssociatedChannel;
const nsCString mPushedURI;
- Http2PushedStream *mPushedStream;
+ RefPtr<Http2PushedStreamWrapper> mPushedStreamWrapper;
};
+// Because WeakPtr isn't thread-safe we must ensure that the object is destroyed
+// on the socket thread, so any Release() called on a different thread is
+// dispatched to the socket thread.
+bool Http2PushedStreamWrapper::DispatchRelease() {
+ if (PR_GetCurrentThread() == gSocketThread) {
+ return false;
+ }
+
+ gSocketTransportService->Dispatch(
+ NewNonOwningRunnableMethod(this, &Http2PushedStreamWrapper::Release),
+ NS_DISPATCH_NORMAL);
+
+ return true;
+}
+
+NS_IMPL_ADDREF(Http2PushedStreamWrapper)
+NS_IMETHODIMP_(MozExternalRefCountType)
+Http2PushedStreamWrapper::Release() {
+ nsrefcnt count = mRefCnt - 1;
+ if (DispatchRelease()) {
+ // Redispatched to the socket thread.
+ return count;
+ }
+
+ MOZ_ASSERT(0 != mRefCnt, "dup release");
+ count = --mRefCnt;
+ NS_LOG_RELEASE(this, count, "Http2PushedStreamWrapper");
+
+ if (0 == count) {
+ mRefCnt = 1;
+ delete (this);
+ return 0;
+ }
+
+ return count;
+}
+
+NS_INTERFACE_MAP_BEGIN(Http2PushedStreamWrapper)
+NS_INTERFACE_MAP_END
+
+Http2PushedStreamWrapper::Http2PushedStreamWrapper(
+ Http2PushedStream* aPushStream) {
+ MOZ_ASSERT(PR_GetCurrentThread() == gSocketThread, "not on socket thread");
+ mStream = aPushStream;
+ mRequestString = aPushStream->GetRequestString();
+}
+
+Http2PushedStreamWrapper::~Http2PushedStreamWrapper() {
+ MOZ_ASSERT(PR_GetCurrentThread() == gSocketThread, "not on socket thread");
+}
+
+Http2PushedStream* Http2PushedStreamWrapper::GetStream() {
+ MOZ_ASSERT(PR_GetCurrentThread() == gSocketThread, "not on socket thread");
+ if (mStream) {
+ Http2Stream* stream = mStream;
+ return static_cast<Http2PushedStream*>(stream);
+ }
+ return nullptr;
+}
+
+void Http2PushedStreamWrapper::OnPushFailed() {
+ if (PR_GetCurrentThread() == gSocketThread) {
+ if (mStream) {
+ Http2Stream* stream = mStream;
+ static_cast<Http2PushedStream*>(stream)->OnPushFailed();
+ }
+ } else {
+ gSocketTransportService->Dispatch(
+ NewRunnableMethod(this, &Http2PushedStreamWrapper::OnPushFailed),
+ NS_DISPATCH_NORMAL);
+ }
+}
+
//////////////////////////////////////////
// Http2PushedStream
//////////////////////////////////////////
diff --git a/netwerk/protocol/http/Http2Push.h b/netwerk/protocol/http/Http2Push.h
index fd39eb2c7..d4b71c1ef 100644
--- a/netwerk/protocol/http/Http2Push.h
+++ b/netwerk/protocol/http/Http2Push.h
@@ -123,6 +123,24 @@ private:
uint32_t mBufferedHTTP1Consumed;
};
+class Http2PushedStreamWrapper : public nsISupports {
+public:
+ NS_DECL_THREADSAFE_ISUPPORTS
+ bool DispatchRelease();
+
+ explicit Http2PushedStreamWrapper(Http2PushedStream* aPushStream);
+
+ nsCString& GetRequestString() { return mRequestString; }
+ Http2PushedStream* GetStream();
+ void OnPushFailed();
+
+private:
+ virtual ~Http2PushedStreamWrapper();
+
+ nsCString mRequestString;
+ WeakPtr<Http2Stream> mStream;
+};
+
} // namespace net
} // namespace mozilla
diff --git a/netwerk/protocol/http/Http2Session.cpp b/netwerk/protocol/http/Http2Session.cpp
index 4a178f091..86e8c74f6 100644
--- a/netwerk/protocol/http/Http2Session.cpp
+++ b/netwerk/protocol/http/Http2Session.cpp
@@ -380,12 +380,24 @@ Http2Session::AddStream(nsAHttpTransaction *aHttpTransaction,
if (mClosed || mShouldGoAway) {
nsHttpTransaction *trans = aHttpTransaction->QueryHttpTransaction();
- if (trans && !trans->GetPushedStream()) {
- LOG3(("Http2Session::AddStream %p atrans=%p trans=%p session unusable - resched.\n",
- this, aHttpTransaction, trans));
- aHttpTransaction->SetConnection(nullptr);
- gHttpHandler->InitiateTransaction(trans, trans->Priority());
- return true;
+ if (trans) {
+ RefPtr<Http2PushedStreamWrapper> pushedStreamWrapper;
+ pushedStreamWrapper = trans->GetPushedStream();
+ if (!pushedStreamWrapper || !pushedStreamWrapper->GetStream()) {
+ LOG3(
+ ("Http2Session::AddStream %p atrans=%p trans=%p session unusable - "
+ "resched.\n", this, aHttpTransaction, trans));
+ aHttpTransaction->SetConnection(nullptr);
+ nsresult rv =
+ gHttpHandler->InitiateTransaction(trans, trans->Priority());
+ if (NS_FAILED(rv)) {
+ LOG3(
+ ("Http2Session::AddStream %p atrans=%p trans=%p failed to "
+ "initiate transaction (%08x).\n",
+ this, aHttpTransaction, trans, static_cast<uint32_t>(rv)));
+ }
+ return true;
+ }
}
}
diff --git a/netwerk/protocol/http/Http2Stream.cpp b/netwerk/protocol/http/Http2Stream.cpp
index 581ebe016..22d8142c9 100644
--- a/netwerk/protocol/http/Http2Stream.cpp
+++ b/netwerk/protocol/http/Http2Stream.cpp
@@ -442,12 +442,14 @@ Http2Stream::ParseHttpRequestHeaders(const char *buf,
requestContext->GetSpdyPushCache(&cache);
}
+ RefPtr<Http2PushedStreamWrapper> pushedStreamWrapper;
Http2PushedStream *pushedStream = nullptr;
// If a push stream is attached to the transaction via onPush, match only with that
// one. This occurs when a push was made with in conjunction with a nsIHttpPushListener
nsHttpTransaction *trans = mTransaction->QueryHttpTransaction();
- if (trans && (pushedStream = trans->TakePushedStream())) {
+ if (trans && (pushedStreamWrapper = trans->TakePushedStream()) &&
+ (pushedStream = pushedStreamWrapper->GetStream())) {
if (pushedStream->mSession == mSession) {
LOG3(("Pushed Stream match based on OnPush correlation %p", pushedStream));
} else {
diff --git a/netwerk/protocol/http/Http2Stream.h b/netwerk/protocol/http/Http2Stream.h
index 8783eefed..484457650 100644
--- a/netwerk/protocol/http/Http2Stream.h
+++ b/netwerk/protocol/http/Http2Stream.h
@@ -28,8 +28,10 @@ class Http2Decompressor;
class Http2Stream
: public nsAHttpSegmentReader
, public nsAHttpSegmentWriter
+ , public SupportsWeakPtr<Http2Stream>
{
public:
+ MOZ_DECLARE_WEAKREFERENCE_TYPENAME(Http2Stream)
NS_DECL_NSAHTTPSEGMENTREADER
NS_DECL_NSAHTTPSEGMENTWRITER
diff --git a/netwerk/protocol/http/nsCORSListenerProxy.cpp b/netwerk/protocol/http/nsCORSListenerProxy.cpp
index b9355c82b..70035be28 100644
--- a/netwerk/protocol/http/nsCORSListenerProxy.cpp
+++ b/netwerk/protocol/http/nsCORSListenerProxy.cpp
@@ -907,6 +907,9 @@ nsCORSListenerProxy::UpdateChannel(nsIChannel* aChannel,
NS_ENSURE_SUCCESS(rv, rv);
}
+ // TODO: Bug 1353683
+ // consider calling SetBlockedRequest in nsCORSListenerProxy::UpdateChannel
+ //
// Check that the uri is ok to load
rv = nsContentUtils::GetSecurityManager()->
CheckLoadURIWithPrincipal(mRequestingPrincipal, uri,
diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
index 481df5ff0..05383916f 100644
--- a/netwerk/protocol/http/nsHttpChannel.cpp
+++ b/netwerk/protocol/http/nsHttpChannel.cpp
@@ -7828,7 +7828,7 @@ nsHttpChannel::AwaitingCacheCallbacks()
}
void
-nsHttpChannel::SetPushedStream(Http2PushedStream *stream)
+nsHttpChannel::SetPushedStream(Http2PushedStreamWrapper *stream)
{
MOZ_ASSERT(stream);
MOZ_ASSERT(!mPushedStream);
@@ -7836,7 +7836,7 @@ nsHttpChannel::SetPushedStream(Http2PushedStream *stream)
}
nsresult
-nsHttpChannel::OnPush(const nsACString &url, Http2PushedStream *pushedStream)
+nsHttpChannel::OnPush(const nsACString &url, Http2PushedStreamWrapper *pushedStream)
{
MOZ_ASSERT(NS_IsMainThread());
LOG(("nsHttpChannel::OnPush [this=%p]\n", this));
diff --git a/netwerk/protocol/http/nsHttpChannel.h b/netwerk/protocol/http/nsHttpChannel.h
index 0038e1f71..defd710c3 100644
--- a/netwerk/protocol/http/nsHttpChannel.h
+++ b/netwerk/protocol/http/nsHttpChannel.h
@@ -126,7 +126,7 @@ public:
const nsID& aChannelId,
nsContentPolicyType aContentPolicyType) override;
- nsresult OnPush(const nsACString &uri, Http2PushedStream *pushedStream);
+ nsresult OnPush(const nsACString &uri, Http2PushedStreamWrapper *pushedStream);
static bool IsRedirectStatus(uint32_t status);
@@ -448,7 +448,7 @@ private:
nsresult OpenCacheInputStream(nsICacheEntry* cacheEntry, bool startBuffering,
bool checkingAppCacheEntry);
- void SetPushedStream(Http2PushedStream *stream);
+ void SetPushedStream(Http2PushedStreamWrapper *stream);
void SetDoNotTrack();
@@ -578,9 +578,10 @@ private:
nsTArray<nsContinueRedirectionFunc> mRedirectFuncStack;
// Needed for accurate DNS timing
- RefPtr<nsDNSPrefetch> mDNSPrefetch;
+ RefPtr<nsDNSPrefetch> mDNSPrefetch;
- Http2PushedStream *mPushedStream;
+ RefPtr<Http2PushedStreamWrapper> mPushedStream;
+
// True if the channel's principal was found on a phishing, malware, or
// tracking (if tracking protection is enabled) blocklist
bool mLocalBlocklist;
diff --git a/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp b/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
index 0e7eb55c3..a6681cfc6 100644
--- a/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
+++ b/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
@@ -95,6 +95,8 @@ nsHttpChannelAuthProvider::~nsHttpChannelAuthProvider()
uint32_t nsHttpChannelAuthProvider::sAuthAllowPref =
SUBRESOURCE_AUTH_DIALOG_ALLOW_ALL;
+bool nsHttpChannelAuthProvider::sImgCrossOriginAuthAllowPref = false;
+
void
nsHttpChannelAuthProvider::InitializePrefs()
{
@@ -102,6 +104,9 @@ nsHttpChannelAuthProvider::InitializePrefs()
mozilla::Preferences::AddUintVarCache(&sAuthAllowPref,
"network.auth.subresource-http-auth-allow",
SUBRESOURCE_AUTH_DIALOG_ALLOW_ALL);
+ mozilla::Preferences::AddBoolVarCache(&sImgCrossOriginAuthAllowPref,
+ "network.auth.subresource-http-img-XO-auth",
+ false);
}
NS_IMETHODIMP
@@ -867,15 +872,15 @@ nsHttpChannelAuthProvider::GetCredentialsForChallenge(const char *challenge,
else if (authFlags & nsIHttpAuthenticator::IDENTITY_ENCRYPTED)
level = nsIAuthPrompt2::LEVEL_PW_ENCRYPTED;
- // Depending on the pref setting, the authentication dialog may be
+ // Depending on the pref settings, the authentication dialog may be
// blocked for all sub-resources, blocked for cross-origin
// sub-resources, or always allowed for sub-resources.
- // For more details look at the bug 647010.
- // BlockPrompt will set mCrossOrigin parameter as well.
+ // If always allowed, image prompts may still be blocked by pref.
+ // BlockPrompt() will set the mCrossOrigin parameter as well.
if (BlockPrompt()) {
LOG(("nsHttpChannelAuthProvider::GetCredentialsForChallenge: "
- "Prompt is blocked [this=%p pref=%d]\n",
- this, sAuthAllowPref));
+ "Prompt is blocked [this=%p pref=%d img-pref=%d]\n",
+ this, sAuthAllowPref, sImgCrossOriginAuthAllowPref));
return NS_ERROR_ABORT;
}
@@ -983,7 +988,15 @@ nsHttpChannelAuthProvider::BlockPrompt()
// the sub-resources only if they are not cross-origin.
return !topDoc && !xhr && mCrossOrigin;
case SUBRESOURCE_AUTH_DIALOG_ALLOW_ALL:
- // Allow the http-authentication dialog.
+ // Allow the http-authentication dialog for subresources.
+ // If the pref network.auth.subresource-http-img-XO-auth is set to false,
+ // the http authentication dialog for image subresources is still blocked.
+ if (!sImgCrossOriginAuthAllowPref &&
+ loadInfo &&
+ ((loadInfo->GetExternalContentPolicyType() == nsIContentPolicy::TYPE_IMAGE) ||
+ (loadInfo->GetExternalContentPolicyType() == nsIContentPolicy::TYPE_IMAGESET))) {
+ return true;
+ }
return false;
default:
// This is an invalid value.
diff --git a/netwerk/protocol/http/nsHttpChannelAuthProvider.h b/netwerk/protocol/http/nsHttpChannelAuthProvider.h
index 44d79b22b..0d6045875 100644
--- a/netwerk/protocol/http/nsHttpChannelAuthProvider.h
+++ b/netwerk/protocol/http/nsHttpChannelAuthProvider.h
@@ -179,10 +179,11 @@ private:
RefPtr<nsHttpHandler> mHttpHandler; // keep gHttpHandler alive
- // A variable holding the preference settings to whether to open HTTP
+ // Variables holding the preference settings for whether to open HTTP
// authentication credentials dialogs for sub-resources and cross-origin
// sub-resources.
static uint32_t sAuthAllowPref;
+ static bool sImgCrossOriginAuthAllowPref;
nsCOMPtr<nsICancelable> mGenerateCredentialsCancelable;
};
diff --git a/netwerk/protocol/http/nsHttpConnectionMgr.cpp b/netwerk/protocol/http/nsHttpConnectionMgr.cpp
index 907f33436..d402b4104 100644
--- a/netwerk/protocol/http/nsHttpConnectionMgr.cpp
+++ b/netwerk/protocol/http/nsHttpConnectionMgr.cpp
@@ -373,8 +373,12 @@ nsHttpConnectionMgr::VerifyTraffic()
nsresult
nsHttpConnectionMgr::DoShiftReloadConnectionCleanup(nsHttpConnectionInfo *aCI)
{
+ RefPtr<nsHttpConnectionInfo> ci;
+ if (aCI) {
+ ci = aCI->Clone();
+ }
return PostEvent(&nsHttpConnectionMgr::OnMsgDoShiftReloadConnectionCleanup,
- 0, aCI);
+ 0, ci);
}
class SpeculativeConnectArgs : public ARefBase
@@ -504,9 +508,13 @@ nsHttpConnectionMgr::UpdateParam(nsParamName name, uint16_t value)
}
nsresult
-nsHttpConnectionMgr::ProcessPendingQ(nsHttpConnectionInfo *ci)
+nsHttpConnectionMgr::ProcessPendingQ(nsHttpConnectionInfo* aCI)
{
- LOG(("nsHttpConnectionMgr::ProcessPendingQ [ci=%s]\n", ci->HashKey().get()));
+ LOG(("nsHttpConnectionMgr::ProcessPendingQ [ci=%s]\n", aCI->HashKey().get()));
+ RefPtr<nsHttpConnectionInfo> ci;
+ if (aCI) {
+ ci = aCI->Clone();
+ }
return PostEvent(&nsHttpConnectionMgr::OnMsgProcessPendingQ, 0, ci);
}
@@ -1819,13 +1827,18 @@ nsHttpConnectionMgr::ProcessNewTransaction(nsHttpTransaction *trans)
trans->SetPendingTime();
- Http2PushedStream *pushedStream = trans->GetPushedStream();
- if (pushedStream) {
- LOG((" ProcessNewTransaction %p tied to h2 session push %p\n",
- trans, pushedStream->Session()));
- return pushedStream->Session()->
- AddStream(trans, trans->Priority(), false, nullptr) ?
- NS_OK : NS_ERROR_UNEXPECTED;
+ RefPtr<Http2PushedStreamWrapper> pushedStreamWrapper =
+ trans->GetPushedStream();
+ if (pushedStreamWrapper) {
+ Http2PushedStream* pushedStream = pushedStreamWrapper->GetStream();
+ if (pushedStream) {
+ LOG((" ProcessNewTransaction %p tied to h2 session push %p\n", trans,
+ pushedStream->Session()));
+ return pushedStream->Session()->AddStream(trans, trans->Priority(), false,
+ nullptr)
+ ? NS_OK
+ : NS_ERROR_UNEXPECTED;
+ }
}
nsresult rv = NS_OK;
diff --git a/netwerk/protocol/http/nsHttpHandler.h b/netwerk/protocol/http/nsHttpHandler.h
index 67b9ebe0e..402147577 100644
--- a/netwerk/protocol/http/nsHttpHandler.h
+++ b/netwerk/protocol/http/nsHttpHandler.h
@@ -246,7 +246,8 @@ public:
uint32_t caps = 0)
{
TickleWifi(callbacks);
- return mConnMgr->SpeculativeConnect(ci, callbacks, caps);
+ RefPtr<nsHttpConnectionInfo> clone = ci->Clone();
+ return mConnMgr->SpeculativeConnect(clone, callbacks, caps);
}
// Alternate Services Maps are main thread only
diff --git a/netwerk/protocol/http/nsHttpTransaction.h b/netwerk/protocol/http/nsHttpTransaction.h
index 262796d71..1197bd98e 100644
--- a/netwerk/protocol/http/nsHttpTransaction.h
+++ b/netwerk/protocol/http/nsHttpTransaction.h
@@ -131,14 +131,14 @@ public:
nsHttpTransaction *QueryHttpTransaction() override { return this; }
- Http2PushedStream *GetPushedStream() { return mPushedStream; }
- Http2PushedStream *TakePushedStream()
- {
- Http2PushedStream *r = mPushedStream;
- mPushedStream = nullptr;
- return r;
+ already_AddRefed<Http2PushedStreamWrapper> GetPushedStream() {
+ return do_AddRef(mPushedStream);
}
- void SetPushedStream(Http2PushedStream *push) { mPushedStream = push; }
+ already_AddRefed<Http2PushedStreamWrapper> TakePushedStream() {
+ return mPushedStream.forget();
+ }
+
+ void SetPushedStream(Http2PushedStreamWrapper* push) { mPushedStream = push; }
uint32_t InitialRwin() const { return mInitialRwin; };
bool ChannelPipeFull() { return mWaitingOnPipeOut; }
@@ -264,7 +264,7 @@ private:
// so far been skipped.
uint32_t mInvalidResponseBytesRead;
- Http2PushedStream *mPushedStream;
+ RefPtr<Http2PushedStreamWrapper> mPushedStream;
uint32_t mInitialRwin;
nsHttpChunkedDecoder *mChunkedDecoder;
diff --git a/old-configure.in b/old-configure.in
index 6a7bc701f..1525ecc9b 100644
--- a/old-configure.in
+++ b/old-configure.in
@@ -2045,6 +2045,10 @@ MOZ_ARG_WITH_BOOL(system-nss,
_USE_SYSTEM_NSS=1 )
if test -n "$_USE_SYSTEM_NSS"; then
+ AC_MSG_ERROR([Building with system NSS is currently not supported.])
+fi
+
+if test -n "$_USE_SYSTEM_NSS"; then
AM_PATH_NSS(3.41, [MOZ_SYSTEM_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
fi
@@ -5095,13 +5099,13 @@ MOZ_ARG_WITH_STRING(macbundlename-prefix,
Prefix for MOZ_MACBUNDLE_NAME],
[ MOZ_MACBUNDLE_NAME_PREFIX="$withval"])
-MOZ_MACBUNDLE_NAME=`echo $MOZ_APP_DISPLAYNAME | tr -d ' '`
+MOZ_MACBUNDLE_NAME=$MOZ_APP_DISPLAYNAME
if test "$MOZ_MACBUNDLE_NAME_PREFIX"; then
- MOZ_MACBUNDLE_NAME="${MOZ_MACBUNDLE_NAME_PREFIX}${MOZ_MACBUNDLE_NAME}"
+ MOZ_MACBUNDLE_NAME="${MOZ_MACBUNDLE_NAME_PREFIX} ${MOZ_MACBUNDLE_NAME}"
fi
if test "$MOZ_DEBUG"; then
- MOZ_MACBUNDLE_NAME=${MOZ_MACBUNDLE_NAME}Debug.app
+ MOZ_MACBUNDLE_NAME="${MOZ_MACBUNDLE_NAME}Debug.app"
else
MOZ_MACBUNDLE_NAME=${MOZ_MACBUNDLE_NAME}.app
fi
@@ -5479,10 +5483,6 @@ if test "$ACCESSIBILITY" -a "$MOZ_ENABLE_GTK" ; then
AC_DEFINE_UNQUOTED(ATK_REV_VERSION, $ATK_REV_VERSION)
fi
-if test -n "$MOZ_DEV_EDITION"; then
- AC_DEFINE(MOZ_DEV_EDITION)
-fi
-
if test "$MOZ_DEBUG"; then
A11Y_LOG=1
fi
diff --git a/parser/html/javasrc/Tokenizer.java b/parser/html/javasrc/Tokenizer.java
index d9eaafeb3..70e1df75c 100644
--- a/parser/html/javasrc/Tokenizer.java
+++ b/parser/html/javasrc/Tokenizer.java
@@ -3850,12 +3850,9 @@ public class Tokenizer implements Locator {
tokenHandler.characters(
Tokenizer.LT_SOLIDUS, 0, 2);
emitStrBuf();
- if (c == '\u0000') {
- emitReplacementCharacter(buf, pos);
- } else {
- cstart = pos; // don't drop the
- // character
- }
+ cstart = pos; // don't drop the
+ // character
+ reconsume = true;
state = transition(state, returnState, reconsume, pos);
continue stateloop;
}
diff --git a/parser/html/moz.build b/parser/html/moz.build
index 4a2da8a79..cd6031abe 100644
--- a/parser/html/moz.build
+++ b/parser/html/moz.build
@@ -39,6 +39,7 @@ EXPORTS += [
'nsHtml5SpeculativeLoad.h',
'nsHtml5StreamListener.h',
'nsHtml5StreamParser.h',
+ 'nsHtml5String.h',
'nsHtml5StringParser.h',
'nsHtml5SVGLoadDispatcher.h',
'nsHtml5TreeOperation.h',
@@ -78,6 +79,7 @@ UNIFIED_SOURCES += [
'nsHtml5StateSnapshot.cpp',
'nsHtml5StreamListener.cpp',
'nsHtml5StreamParser.cpp',
+ 'nsHtml5String.cpp',
'nsHtml5StringParser.cpp',
'nsHtml5SVGLoadDispatcher.cpp',
'nsHtml5Tokenizer.cpp',
diff --git a/parser/html/nsHtml5ArrayCopy.h b/parser/html/nsHtml5ArrayCopy.h
index 78ed65568..594a801ab 100644
--- a/parser/html/nsHtml5ArrayCopy.h
+++ b/parser/html/nsHtml5ArrayCopy.h
@@ -51,10 +51,11 @@ class nsHtml5ArrayCopy {
memcpy(target, source, size_t(length) * sizeof(int32_t));
}
- static inline void
- arraycopy(nsString** source, nsString** target, int32_t length)
+ static inline void arraycopy(nsHtml5String* source,
+ nsHtml5String* target,
+ int32_t length)
{
- memcpy(target, source, size_t(length) * sizeof(nsString*));
+ memcpy(target, source, size_t(length) * sizeof(nsHtml5String));
}
static inline void
diff --git a/parser/html/nsHtml5AttributeName.cpp b/parser/html/nsHtml5AttributeName.cpp
index fc7745adc..dc546c111 100644
--- a/parser/html/nsHtml5AttributeName.cpp
+++ b/parser/html/nsHtml5AttributeName.cpp
@@ -29,7 +29,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5AttributeName.h b/parser/html/nsHtml5AttributeName.h
index 748dcf3c9..d0b93341b 100644
--- a/parser/html/nsHtml5AttributeName.h
+++ b/parser/html/nsHtml5AttributeName.h
@@ -30,7 +30,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5ElementName.cpp b/parser/html/nsHtml5ElementName.cpp
index 1aa6f11ce..fb523e7ef 100644
--- a/parser/html/nsHtml5ElementName.cpp
+++ b/parser/html/nsHtml5ElementName.cpp
@@ -29,7 +29,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5ElementName.h b/parser/html/nsHtml5ElementName.h
index b4df323a6..b5f0e4b9b 100644
--- a/parser/html/nsHtml5ElementName.h
+++ b/parser/html/nsHtml5ElementName.h
@@ -30,7 +30,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5Highlighter.cpp b/parser/html/nsHtml5Highlighter.cpp
index 259803ee1..23cdf7d84 100644
--- a/parser/html/nsHtml5Highlighter.cpp
+++ b/parser/html/nsHtml5Highlighter.cpp
@@ -91,7 +91,7 @@ nsHtml5Highlighter::Start(const nsAutoString& aTitle)
if (length > INT32_MAX) {
length = INT32_MAX;
}
- AppendCharacters(aTitle.get(), 0, (int32_t)length);
+ AppendCharacters(aTitle.BeginReading(), 0, (int32_t)length);
Pop(); // title
Push(nsGkAtoms::link, nsHtml5ViewSourceUtils::NewLinkAttributes());
@@ -105,7 +105,7 @@ nsHtml5Highlighter::Start(const nsAutoString& aTitle)
Push(nsGkAtoms::body, nsHtml5ViewSourceUtils::NewBodyAttributes());
nsHtml5HtmlAttributes* preAttrs = new nsHtml5HtmlAttributes(0);
- nsString* preId = new nsString(NS_LITERAL_STRING("line1"));
+ nsHtml5String preId = nsHtml5Portability::newStringFromLiteral("line1");
preAttrs->addAttribute(nsHtml5AttributeName::ATTR_ID, preId, -1);
Push(nsGkAtoms::pre, preAttrs);
@@ -618,7 +618,7 @@ nsHtml5Highlighter::FlushOps()
void
nsHtml5Highlighter::MaybeLinkifyAttributeValue(nsHtml5AttributeName* aName,
- nsString* aValue)
+ nsHtml5String aValue)
{
if (!(nsHtml5AttributeName::ATTR_HREF == aName ||
nsHtml5AttributeName::ATTR_SRC == aName ||
@@ -630,7 +630,7 @@ nsHtml5Highlighter::MaybeLinkifyAttributeValue(nsHtml5AttributeName* aName,
nsHtml5AttributeName::ATTR_DEFINITIONURL == aName)) {
return;
}
- AddViewSourceHref(*aValue);
+ AddViewSourceHref(aValue);
}
void
@@ -717,10 +717,10 @@ nsHtml5Highlighter::AddClass(const char16_t* aClass)
}
void
-nsHtml5Highlighter::AddViewSourceHref(const nsString& aValue)
+nsHtml5Highlighter::AddViewSourceHref(nsHtml5String aValue)
{
char16_t* bufferCopy = new char16_t[aValue.Length() + 1];
- memcpy(bufferCopy, aValue.get(), aValue.Length() * sizeof(char16_t));
+ aValue.CopyToBuffer(bufferCopy);
bufferCopy[aValue.Length()] = 0;
mOpQueue.AppendElement()->Init(eTreeOpAddViewSourceHref,
@@ -730,14 +730,14 @@ nsHtml5Highlighter::AddViewSourceHref(const nsString& aValue)
}
void
-nsHtml5Highlighter::AddBase(const nsString& aValue)
+nsHtml5Highlighter::AddBase(nsHtml5String aValue)
{
if(mSeenBase) {
return;
}
mSeenBase = true;
char16_t* bufferCopy = new char16_t[aValue.Length() + 1];
- memcpy(bufferCopy, aValue.get(), aValue.Length() * sizeof(char16_t));
+ aValue.CopyToBuffer(bufferCopy);
bufferCopy[aValue.Length()] = 0;
mOpQueue.AppendElement()->Init(eTreeOpAddViewSourceBase,
diff --git a/parser/html/nsHtml5Highlighter.h b/parser/html/nsHtml5Highlighter.h
index e9474869e..366f11582 100644
--- a/parser/html/nsHtml5Highlighter.h
+++ b/parser/html/nsHtml5Highlighter.h
@@ -78,7 +78,7 @@ class nsHtml5Highlighter
* @param aValue the value of the attribute
*/
void MaybeLinkifyAttributeValue(nsHtml5AttributeName* aName,
- nsString* aValue);
+ nsHtml5String aValue);
/**
* Inform the highlighter that the tokenizer successfully completed a
@@ -147,7 +147,7 @@ class nsHtml5Highlighter
*
* @param aValue the base URL to add
*/
- void AddBase(const nsString& aValue);
+ void AddBase(nsHtml5String aValue);
private:
@@ -272,7 +272,7 @@ class nsHtml5Highlighter
*
* @param aValue the (potentially relative) URL to link to
*/
- void AddViewSourceHref(const nsString& aValue);
+ void AddViewSourceHref(nsHtml5String aValue);
/**
* The state we are transitioning away from.
diff --git a/parser/html/nsHtml5HtmlAttributes.cpp b/parser/html/nsHtml5HtmlAttributes.cpp
index d515f381d..62b9ae2b2 100644
--- a/parser/html/nsHtml5HtmlAttributes.cpp
+++ b/parser/html/nsHtml5HtmlAttributes.cpp
@@ -30,7 +30,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
@@ -58,11 +58,11 @@
nsHtml5HtmlAttributes* nsHtml5HtmlAttributes::EMPTY_ATTRIBUTES = nullptr;
nsHtml5HtmlAttributes::nsHtml5HtmlAttributes(int32_t mode)
- : mode(mode),
- length(0),
- names(jArray<nsHtml5AttributeName*,int32_t>::newJArray(8)),
- values(jArray<nsString*,int32_t>::newJArray(8)),
- lines(jArray<int32_t,int32_t>::newJArray(8))
+ : mode(mode)
+ , length(0)
+ , names(jArray<nsHtml5AttributeName*, int32_t>::newJArray(8))
+ , values(jArray<nsHtml5String, int32_t>::newJArray(8))
+ , lines(jArray<int32_t, int32_t>::newJArray(8))
{
MOZ_COUNT_CTOR(nsHtml5HtmlAttributes);
}
@@ -85,7 +85,7 @@ nsHtml5HtmlAttributes::getIndex(nsHtml5AttributeName* name)
return -1;
}
-nsString*
+nsHtml5String
nsHtml5HtmlAttributes::getValue(nsHtml5AttributeName* name)
{
int32_t index = getIndex(name);
@@ -123,7 +123,7 @@ nsHtml5HtmlAttributes::getPrefixNoBoundsCheck(int32_t index)
return names[index]->getPrefix(mode);
}
-nsString*
+nsHtml5String
nsHtml5HtmlAttributes::getValueNoBoundsCheck(int32_t index)
{
MOZ_ASSERT(index < length && index >= 0, "Index out of bounds");
@@ -145,14 +145,17 @@ nsHtml5HtmlAttributes::getLineNoBoundsCheck(int32_t index)
}
void
-nsHtml5HtmlAttributes::addAttribute(nsHtml5AttributeName* name, nsString* value, int32_t line)
+nsHtml5HtmlAttributes::addAttribute(nsHtml5AttributeName* name,
+ nsHtml5String value,
+ int32_t line)
{
if (names.length == length) {
int32_t newLen = length << 1;
jArray<nsHtml5AttributeName*,int32_t> newNames = jArray<nsHtml5AttributeName*,int32_t>::newJArray(newLen);
nsHtml5ArrayCopy::arraycopy(names, newNames, names.length);
names = newNames;
- jArray<nsString*,int32_t> newValues = jArray<nsString*,int32_t>::newJArray(newLen);
+ jArray<nsHtml5String, int32_t> newValues =
+ jArray<nsHtml5String, int32_t>::newJArray(newLen);
nsHtml5ArrayCopy::arraycopy(values, newValues, values.length);
values = newValues;
jArray<int32_t,int32_t> newLines = jArray<int32_t,int32_t>::newJArray(newLen);
@@ -171,7 +174,7 @@ nsHtml5HtmlAttributes::clear(int32_t m)
for (int32_t i = 0; i < length; i++) {
names[i]->release();
names[i] = nullptr;
- nsHtml5Portability::releaseString(values[i]);
+ values[i].Release();
values[i] = nullptr;
}
length = 0;
@@ -181,7 +184,7 @@ nsHtml5HtmlAttributes::clear(int32_t m)
void
nsHtml5HtmlAttributes::releaseValue(int32_t i)
{
- nsHtml5Portability::releaseString(values[i]);
+ values[i].Release();
}
void
diff --git a/parser/html/nsHtml5HtmlAttributes.h b/parser/html/nsHtml5HtmlAttributes.h
index c02d0a08c..12149a0b5 100644
--- a/parser/html/nsHtml5HtmlAttributes.h
+++ b/parser/html/nsHtml5HtmlAttributes.h
@@ -31,7 +31,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
@@ -64,21 +64,23 @@ class nsHtml5HtmlAttributes
int32_t mode;
int32_t length;
autoJArray<nsHtml5AttributeName*,int32_t> names;
- autoJArray<nsString*,int32_t> values;
+ autoJArray<nsHtml5String, int32_t> values;
autoJArray<int32_t,int32_t> lines;
public:
explicit nsHtml5HtmlAttributes(int32_t mode);
~nsHtml5HtmlAttributes();
int32_t getIndex(nsHtml5AttributeName* name);
- nsString* getValue(nsHtml5AttributeName* name);
+ nsHtml5String getValue(nsHtml5AttributeName* name);
int32_t getLength();
nsIAtom* getLocalNameNoBoundsCheck(int32_t index);
int32_t getURINoBoundsCheck(int32_t index);
nsIAtom* getPrefixNoBoundsCheck(int32_t index);
- nsString* getValueNoBoundsCheck(int32_t index);
+ nsHtml5String getValueNoBoundsCheck(int32_t index);
nsHtml5AttributeName* getAttributeNameNoBoundsCheck(int32_t index);
int32_t getLineNoBoundsCheck(int32_t index);
- void addAttribute(nsHtml5AttributeName* name, nsString* value, int32_t line);
+ void addAttribute(nsHtml5AttributeName* name,
+ nsHtml5String value,
+ int32_t line);
void clear(int32_t m);
void releaseValue(int32_t i);
void clearWithoutReleasingContents();
diff --git a/parser/html/nsHtml5MetaScanner.cpp b/parser/html/nsHtml5MetaScanner.cpp
index d39eacd9b..24f17b02b 100644
--- a/parser/html/nsHtml5MetaScanner.cpp
+++ b/parser/html/nsHtml5MetaScanner.cpp
@@ -30,7 +30,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
@@ -86,8 +86,8 @@ nsHtml5MetaScanner::nsHtml5MetaScanner(nsHtml5TreeBuilder* tb)
nsHtml5MetaScanner::~nsHtml5MetaScanner()
{
MOZ_COUNT_DTOR(nsHtml5MetaScanner);
- nsHtml5Portability::releaseString(content);
- nsHtml5Portability::releaseString(charset);
+ content.Release();
+ charset.Release();
}
void
@@ -771,9 +771,9 @@ bool
nsHtml5MetaScanner::handleTag()
{
bool stop = handleTagInner();
- nsHtml5Portability::releaseString(content);
+ content.Release();
content = nullptr;
- nsHtml5Portability::releaseString(charset);
+ charset.Release();
charset = nullptr;
httpEquivState = NS_HTML5META_SCANNER_HTTP_EQUIV_NOT_SEEN;
return stop;
@@ -786,12 +786,13 @@ nsHtml5MetaScanner::handleTagInner()
return true;
}
if (!!content && httpEquivState == NS_HTML5META_SCANNER_HTTP_EQUIV_CONTENT_TYPE) {
- nsString* extract = nsHtml5TreeBuilder::extractCharsetFromContent(content, treeBuilder);
+ nsHtml5String extract =
+ nsHtml5TreeBuilder::extractCharsetFromContent(content, treeBuilder);
if (!extract) {
return false;
}
bool success = tryCharset(extract);
- nsHtml5Portability::releaseString(extract);
+ extract.Release();
return success;
}
return false;
diff --git a/parser/html/nsHtml5MetaScanner.h b/parser/html/nsHtml5MetaScanner.h
index 4e0ad7647..a4d308147 100644
--- a/parser/html/nsHtml5MetaScanner.h
+++ b/parser/html/nsHtml5MetaScanner.h
@@ -31,7 +31,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
@@ -76,8 +76,8 @@ class nsHtml5MetaScanner
private:
int32_t strBufLen;
autoJArray<char16_t,int32_t> strBuf;
- nsString* content;
- nsString* charset;
+ nsHtml5String content;
+ nsHtml5String charset;
int32_t httpEquivState;
nsHtml5TreeBuilder* treeBuilder;
public:
@@ -100,7 +100,7 @@ class nsHtml5MetaScanner
bool handleTag();
bool handleTagInner();
protected:
- bool tryCharset(nsString* encoding);
+ bool tryCharset(nsHtml5String encoding);
public:
static void initializeStatics();
static void releaseStatics();
diff --git a/parser/html/nsHtml5MetaScannerCppSupplement.h b/parser/html/nsHtml5MetaScannerCppSupplement.h
index 5e7033777..9d2496361 100644
--- a/parser/html/nsHtml5MetaScannerCppSupplement.h
+++ b/parser/html/nsHtml5MetaScannerCppSupplement.h
@@ -19,13 +19,15 @@ nsHtml5MetaScanner::sniff(nsHtml5ByteReadable* bytes, nsACString& charset)
}
bool
-nsHtml5MetaScanner::tryCharset(nsString* charset)
+nsHtml5MetaScanner::tryCharset(nsHtml5String charset)
{
// This code needs to stay in sync with
// nsHtml5StreamParser::internalEncodingDeclaration. Unfortunately, the
// trickery with member fields here leads to some copy-paste reuse. :-(
nsAutoCString label;
- CopyUTF16toUTF8(*charset, label);
+ nsString charset16; // Not Auto, because using it to hold nsStringBuffer*
+ charset.ToString(charset16);
+ CopyUTF16toUTF8(charset16, label);
nsAutoCString encoding;
if (!EncodingUtils::FindEncodingForLabel(label, encoding)) {
return false;
diff --git a/parser/html/nsHtml5PlainTextUtils.cpp b/parser/html/nsHtml5PlainTextUtils.cpp
index 4f0eab81b..0d2933150 100644
--- a/parser/html/nsHtml5PlainTextUtils.cpp
+++ b/parser/html/nsHtml5PlainTextUtils.cpp
@@ -5,21 +5,24 @@
#include "nsHtml5PlainTextUtils.h"
#include "nsHtml5AttributeName.h"
+#include "nsHtml5Portability.h"
#include "nsIServiceManager.h"
#include "nsIStringBundle.h"
#include "mozilla/Preferences.h"
+#include "nsHtml5String.h"
// static
nsHtml5HtmlAttributes*
nsHtml5PlainTextUtils::NewLinkAttributes()
{
nsHtml5HtmlAttributes* linkAttrs = new nsHtml5HtmlAttributes(0);
- nsString* rel = new nsString(NS_LITERAL_STRING("alternate stylesheet"));
+ nsHtml5String rel =
+ nsHtml5Portability::newStringFromLiteral("alternate stylesheet");
linkAttrs->addAttribute(nsHtml5AttributeName::ATTR_REL, rel, -1);
- nsString* type = new nsString(NS_LITERAL_STRING("text/css"));
+ nsHtml5String type = nsHtml5Portability::newStringFromLiteral("text/css");
linkAttrs->addAttribute(nsHtml5AttributeName::ATTR_TYPE, type, -1);
- nsString* href = new nsString(
- NS_LITERAL_STRING("resource://gre-resources/plaintext.css"));
+ nsHtml5String href = nsHtml5Portability::newStringFromLiteral(
+ "resource://gre-resources/plaintext.css");
linkAttrs->addAttribute(nsHtml5AttributeName::ATTR_HREF, href, -1);
nsresult rv;
@@ -34,7 +37,7 @@ nsHtml5PlainTextUtils::NewLinkAttributes()
bundle->GetStringFromName(u"plainText.wordWrap", getter_Copies(title));
}
- nsString* titleCopy = new nsString(title);
- linkAttrs->addAttribute(nsHtml5AttributeName::ATTR_TITLE, titleCopy, -1);
+ linkAttrs->addAttribute(
+ nsHtml5AttributeName::ATTR_TITLE, nsHtml5String::FromString(title), -1);
return linkAttrs;
}
diff --git a/parser/html/nsHtml5Portability.cpp b/parser/html/nsHtml5Portability.cpp
index 0a7c6f845..5a76b3c56 100644
--- a/parser/html/nsHtml5Portability.cpp
+++ b/parser/html/nsHtml5Portability.cpp
@@ -16,37 +16,31 @@ nsHtml5Portability::newLocalNameFromBuffer(char16_t* buf, int32_t offset, int32_
return interner->GetAtom(nsDependentSubstring(buf, buf + length));
}
-nsString*
-nsHtml5Portability::newStringFromBuffer(char16_t* buf, int32_t offset, int32_t length, nsHtml5TreeBuilder* treeBuilder)
+nsHtml5String
+nsHtml5Portability::newStringFromBuffer(char16_t* buf,
+ int32_t offset,
+ int32_t length,
+ nsHtml5TreeBuilder* treeBuilder)
{
- nsString* str = new nsString();
- bool succeeded = str->Append(buf + offset, length, mozilla::fallible);
- if (!succeeded) {
- str->Assign(char16_t(0xFFFD));
- treeBuilder->MarkAsBroken(NS_ERROR_OUT_OF_MEMORY);
- }
- return str;
+ return nsHtml5String::FromBuffer(buf + offset, length, treeBuilder);
}
-nsString*
+nsHtml5String
nsHtml5Portability::newEmptyString()
{
- return new nsString();
+ return nsHtml5String::EmptyString();
}
-nsString*
+nsHtml5String
nsHtml5Portability::newStringFromLiteral(const char* literal)
{
- nsString* str = new nsString();
- str->AssignASCII(literal);
- return str;
+ return nsHtml5String::FromLiteral(literal);
}
-nsString*
-nsHtml5Portability::newStringFromString(nsString* string) {
- nsString* newStr = new nsString();
- newStr->Assign(*string);
- return newStr;
+nsHtml5String
+nsHtml5Portability::newStringFromString(nsHtml5String string)
+{
+ return string.Clone();
}
jArray<char16_t,int32_t>
@@ -60,12 +54,14 @@ nsHtml5Portability::newCharArrayFromLocal(nsIAtom* local)
return arr;
}
-jArray<char16_t,int32_t>
-nsHtml5Portability::newCharArrayFromString(nsString* string)
+jArray<char16_t, int32_t>
+nsHtml5Portability::newCharArrayFromString(nsHtml5String string)
{
- int32_t len = string->Length();
+ MOZ_RELEASE_ASSERT(string);
+ uint32_t len = string.Length();
+ MOZ_RELEASE_ASSERT(len < INT32_MAX);
jArray<char16_t,int32_t> arr = jArray<char16_t,int32_t>::newJArray(len);
- memcpy(arr, string->BeginReading(), len * sizeof(char16_t));
+ string.CopyToBuffer(arr);
return arr;
}
@@ -82,12 +78,6 @@ nsHtml5Portability::newLocalFromLocal(nsIAtom* local, nsHtml5AtomTable* interner
return local;
}
-void
-nsHtml5Portability::releaseString(nsString* str)
-{
- delete str;
-}
-
bool
nsHtml5Portability::localEqualsBuffer(nsIAtom* local, char16_t* buf, int32_t offset, int32_t length)
{
@@ -95,55 +85,32 @@ nsHtml5Portability::localEqualsBuffer(nsIAtom* local, char16_t* buf, int32_t off
}
bool
-nsHtml5Portability::lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(const char* lowerCaseLiteral, nsString* string)
+nsHtml5Portability::lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(
+ const char* lowerCaseLiteral,
+ nsHtml5String string)
{
- if (!string) {
- return false;
- }
- const char* litPtr = lowerCaseLiteral;
- const char16_t* strPtr = string->BeginReading();
- const char16_t* end = string->EndReading();
- char16_t litChar;
- while ((litChar = *litPtr)) {
- NS_ASSERTION(!(litChar >= 'A' && litChar <= 'Z'), "Literal isn't in lower case.");
- if (strPtr == end) {
- return false;
- }
- char16_t strChar = *strPtr;
- if (strChar >= 'A' && strChar <= 'Z') {
- strChar += 0x20;
- }
- if (litChar != strChar) {
- return false;
- }
- ++litPtr;
- ++strPtr;
- }
- return true;
+ return string.LowerCaseStartsWithASCII(lowerCaseLiteral);
}
bool
-nsHtml5Portability::lowerCaseLiteralEqualsIgnoreAsciiCaseString(const char* lowerCaseLiteral, nsString* string)
+nsHtml5Portability::lowerCaseLiteralEqualsIgnoreAsciiCaseString(
+ const char* lowerCaseLiteral,
+ nsHtml5String string)
{
- if (!string) {
- return false;
- }
- return string->LowerCaseEqualsASCII(lowerCaseLiteral);
+ return string.LowerCaseEqualsASCII(lowerCaseLiteral);
}
bool
-nsHtml5Portability::literalEqualsString(const char* literal, nsString* string)
+nsHtml5Portability::literalEqualsString(const char* literal,
+ nsHtml5String string)
{
- if (!string) {
- return false;
- }
- return string->EqualsASCII(literal);
+ return string.EqualsASCII(literal);
}
bool
-nsHtml5Portability::stringEqualsString(nsString* one, nsString* other)
+nsHtml5Portability::stringEqualsString(nsHtml5String one, nsHtml5String other)
{
- return one->Equals(*other);
+ return one.Equals(other);
}
void
diff --git a/parser/html/nsHtml5Portability.h b/parser/html/nsHtml5Portability.h
index bd85ccbdb..a3214dd2f 100644
--- a/parser/html/nsHtml5Portability.h
+++ b/parser/html/nsHtml5Portability.h
@@ -30,7 +30,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
@@ -59,19 +59,26 @@ class nsHtml5Portability
{
public:
static nsIAtom* newLocalNameFromBuffer(char16_t* buf, int32_t offset, int32_t length, nsHtml5AtomTable* interner);
- static nsString* newStringFromBuffer(char16_t* buf, int32_t offset, int32_t length, nsHtml5TreeBuilder* treeBuilder);
- static nsString* newEmptyString();
- static nsString* newStringFromLiteral(const char* literal);
- static nsString* newStringFromString(nsString* string);
+ static nsHtml5String newStringFromBuffer(char16_t* buf,
+ int32_t offset,
+ int32_t length,
+ nsHtml5TreeBuilder* treeBuilder);
+ static nsHtml5String newEmptyString();
+ static nsHtml5String newStringFromLiteral(const char* literal);
+ static nsHtml5String newStringFromString(nsHtml5String string);
static jArray<char16_t,int32_t> newCharArrayFromLocal(nsIAtom* local);
- static jArray<char16_t,int32_t> newCharArrayFromString(nsString* string);
+ static jArray<char16_t, int32_t> newCharArrayFromString(
+ nsHtml5String string);
static nsIAtom* newLocalFromLocal(nsIAtom* local, nsHtml5AtomTable* interner);
- static void releaseString(nsString* str);
static bool localEqualsBuffer(nsIAtom* local, char16_t* buf, int32_t offset, int32_t length);
- static bool lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(const char* lowerCaseLiteral, nsString* string);
- static bool lowerCaseLiteralEqualsIgnoreAsciiCaseString(const char* lowerCaseLiteral, nsString* string);
- static bool literalEqualsString(const char* literal, nsString* string);
- static bool stringEqualsString(nsString* one, nsString* other);
+ static bool lowerCaseLiteralIsPrefixOfIgnoreAsciiCaseString(
+ const char* lowerCaseLiteral,
+ nsHtml5String string);
+ static bool lowerCaseLiteralEqualsIgnoreAsciiCaseString(
+ const char* lowerCaseLiteral,
+ nsHtml5String string);
+ static bool literalEqualsString(const char* literal, nsHtml5String string);
+ static bool stringEqualsString(nsHtml5String one, nsHtml5String other);
static void initializeStatics();
static void releaseStatics();
};
diff --git a/parser/html/nsHtml5SpeculativeLoad.h b/parser/html/nsHtml5SpeculativeLoad.h
index 575f6186d..6f1365bcf 100644
--- a/parser/html/nsHtml5SpeculativeLoad.h
+++ b/parser/html/nsHtml5SpeculativeLoad.h
@@ -35,45 +35,57 @@ class nsHtml5SpeculativeLoad {
nsHtml5SpeculativeLoad();
~nsHtml5SpeculativeLoad();
- inline void InitBase(const nsAString& aUrl)
+ inline void InitBase(nsHtml5String aUrl)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = eSpeculativeLoadBase;
- mUrl.Assign(aUrl);
+ aUrl.ToString(mUrl);
}
- inline void InitMetaCSP(const nsAString& aCSP) {
+ inline void InitMetaCSP(nsHtml5String aCSP)
+ {
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = eSpeculativeLoadCSP;
+ nsString csp; // Not Auto, because using it to hold nsStringBuffer*
+ aCSP.ToString(csp);
mMetaCSP.Assign(
- nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(aCSP));
+ nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(csp));
}
- inline void InitMetaReferrerPolicy(const nsAString& aReferrerPolicy) {
+ inline void InitMetaReferrerPolicy(nsHtml5String aReferrerPolicy)
+ {
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = eSpeculativeLoadMetaReferrer;
+ nsString
+ referrerPolicy; // Not Auto, because using it to hold nsStringBuffer*
+ aReferrerPolicy.ToString(referrerPolicy);
mReferrerPolicy.Assign(
- nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(aReferrerPolicy));
+ nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(
+ referrerPolicy));
}
- inline void InitImage(const nsAString& aUrl,
- const nsAString& aCrossOrigin,
- const nsAString& aReferrerPolicy,
- const nsAString& aSrcset,
- const nsAString& aSizes)
+ inline void InitImage(nsHtml5String aUrl,
+ nsHtml5String aCrossOrigin,
+ nsHtml5String aReferrerPolicy,
+ nsHtml5String aSrcset,
+ nsHtml5String aSizes)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = eSpeculativeLoadImage;
- mUrl.Assign(aUrl);
- mCrossOrigin.Assign(aCrossOrigin);
+ aUrl.ToString(mUrl);
+ aCrossOrigin.ToString(mCrossOrigin);
+ nsString
+ referrerPolicy; // Not Auto, because using it to hold nsStringBuffer*
+ aReferrerPolicy.ToString(referrerPolicy);
mReferrerPolicy.Assign(
- nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(aReferrerPolicy));
- mSrcset.Assign(aSrcset);
- mSizes.Assign(aSizes);
+ nsContentUtils::TrimWhitespace<nsContentUtils::IsHTMLWhitespace>(
+ referrerPolicy));
+ aSrcset.ToString(mSrcset);
+ aSizes.ToString(mSizes);
}
// <picture> elements have multiple <source> nodes followed by an <img>,
@@ -97,49 +109,50 @@ class nsHtml5SpeculativeLoad {
mOpCode = eSpeculativeLoadEndPicture;
}
- inline void InitPictureSource(const nsAString& aSrcset,
- const nsAString& aSizes,
- const nsAString& aType,
- const nsAString& aMedia)
+ inline void InitPictureSource(nsHtml5String aSrcset,
+ nsHtml5String aSizes,
+ nsHtml5String aType,
+ nsHtml5String aMedia)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = eSpeculativeLoadPictureSource;
- mSrcset.Assign(aSrcset);
- mSizes.Assign(aSizes);
- mTypeOrCharsetSourceOrDocumentMode.Assign(aType);
- mMedia.Assign(aMedia);
+ aSrcset.ToString(mSrcset);
+ aSizes.ToString(mSizes);
+ aType.ToString(mTypeOrCharsetSourceOrDocumentMode);
+ aMedia.ToString(mMedia);
}
- inline void InitScript(const nsAString& aUrl,
- const nsAString& aCharset,
- const nsAString& aType,
- const nsAString& aCrossOrigin,
- const nsAString& aIntegrity,
+ inline void InitScript(nsHtml5String aUrl,
+ nsHtml5String aCharset,
+ nsHtml5String aType,
+ nsHtml5String aCrossOrigin,
+ nsHtml5String aIntegrity,
bool aParserInHead)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = aParserInHead ?
eSpeculativeLoadScriptFromHead : eSpeculativeLoadScript;
- mUrl.Assign(aUrl);
- mCharset.Assign(aCharset);
- mTypeOrCharsetSourceOrDocumentMode.Assign(aType);
- mCrossOrigin.Assign(aCrossOrigin);
- mIntegrity.Assign(aIntegrity);
+ aUrl.ToString(mUrl);
+ aCharset.ToString(mCharset);
+ aType.ToString(mTypeOrCharsetSourceOrDocumentMode);
+ aCrossOrigin.ToString(mCrossOrigin);
+ aIntegrity.ToString(mIntegrity);
}
- inline void InitStyle(const nsAString& aUrl, const nsAString& aCharset,
- const nsAString& aCrossOrigin,
- const nsAString& aIntegrity)
+ inline void InitStyle(nsHtml5String aUrl,
+ nsHtml5String aCharset,
+ nsHtml5String aCrossOrigin,
+ nsHtml5String aIntegrity)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = eSpeculativeLoadStyle;
- mUrl.Assign(aUrl);
- mCharset.Assign(aCharset);
- mCrossOrigin.Assign(aCrossOrigin);
- mIntegrity.Assign(aIntegrity);
+ aUrl.ToString(mUrl);
+ aCharset.ToString(mCharset);
+ aCrossOrigin.ToString(mCrossOrigin);
+ aIntegrity.ToString(mIntegrity);
}
/**
@@ -153,12 +166,12 @@ class nsHtml5SpeculativeLoad {
* manifests seen by the parser thread have to maintain the queue order
* relative to true speculative loads. See bug 541079.
*/
- inline void InitManifest(const nsAString& aUrl)
+ inline void InitManifest(nsHtml5String aUrl)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = eSpeculativeLoadManifest;
- mUrl.Assign(aUrl);
+ aUrl.ToString(mUrl);
}
/**
@@ -195,14 +208,13 @@ class nsHtml5SpeculativeLoad {
mTypeOrCharsetSourceOrDocumentMode.Assign((char16_t)aMode);
}
- inline void InitPreconnect(const nsAString& aUrl,
- const nsAString& aCrossOrigin)
+ inline void InitPreconnect(nsHtml5String aUrl, nsHtml5String aCrossOrigin)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
"Trying to reinitialize a speculative load!");
mOpCode = eSpeculativeLoadPreconnect;
- mUrl.Assign(aUrl);
- mCrossOrigin.Assign(aCrossOrigin);
+ aUrl.ToString(mUrl);
+ aCrossOrigin.ToString(mCrossOrigin);
}
void Perform(nsHtml5TreeOpExecutor* aExecutor);
diff --git a/parser/html/nsHtml5StackNode.cpp b/parser/html/nsHtml5StackNode.cpp
index ac5f0b2a3..41163ae40 100644
--- a/parser/html/nsHtml5StackNode.cpp
+++ b/parser/html/nsHtml5StackNode.cpp
@@ -30,7 +30,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5StackNode.h b/parser/html/nsHtml5StackNode.h
index 57909ca9c..1677ec571 100644
--- a/parser/html/nsHtml5StackNode.h
+++ b/parser/html/nsHtml5StackNode.h
@@ -31,7 +31,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5StateSnapshot.cpp b/parser/html/nsHtml5StateSnapshot.cpp
index e8e3debf0..90780738b 100644
--- a/parser/html/nsHtml5StateSnapshot.cpp
+++ b/parser/html/nsHtml5StateSnapshot.cpp
@@ -29,7 +29,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5StateSnapshot.h b/parser/html/nsHtml5StateSnapshot.h
index 141b34340..119570499 100644
--- a/parser/html/nsHtml5StateSnapshot.h
+++ b/parser/html/nsHtml5StateSnapshot.h
@@ -30,7 +30,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5StreamParser.cpp b/parser/html/nsHtml5StreamParser.cpp
index 83bf4d8b6..ab4548125 100644
--- a/parser/html/nsHtml5StreamParser.cpp
+++ b/parser/html/nsHtml5StreamParser.cpp
@@ -1261,7 +1261,7 @@ nsHtml5StreamParser::PreferredForInternalEncodingDecl(nsACString& aEncoding)
}
bool
-nsHtml5StreamParser::internalEncodingDeclaration(nsString* aEncoding)
+nsHtml5StreamParser::internalEncodingDeclaration(nsHtml5String aEncoding)
{
// This code needs to stay in sync with
// nsHtml5MetaScanner::tryCharset. Unfortunately, the
@@ -1270,9 +1270,10 @@ nsHtml5StreamParser::internalEncodingDeclaration(nsString* aEncoding)
if (mCharsetSource >= kCharsetFromMetaTag) { // this threshold corresponds to "confident" in the HTML5 spec
return false;
}
-
+ nsString newEncoding16; // Not Auto, because using it to hold nsStringBuffer*
+ aEncoding.ToString(newEncoding16);
nsAutoCString newEncoding;
- CopyUTF16toUTF8(*aEncoding, newEncoding);
+ CopyUTF16toUTF8(newEncoding16, newEncoding);
if (!PreferredForInternalEncodingDecl(newEncoding)) {
return false;
diff --git a/parser/html/nsHtml5StreamParser.h b/parser/html/nsHtml5StreamParser.h
index 9a38ba067..2560f84ab 100644
--- a/parser/html/nsHtml5StreamParser.h
+++ b/parser/html/nsHtml5StreamParser.h
@@ -145,7 +145,7 @@ class nsHtml5StreamParser : public nsICharsetDetectionObserver {
/**
* Tree builder uses this to report a late <meta charset>
*/
- bool internalEncodingDeclaration(nsString* aEncoding);
+ bool internalEncodingDeclaration(nsHtml5String aEncoding);
// Not from an external interface
diff --git a/parser/html/nsHtml5String.cpp b/parser/html/nsHtml5String.cpp
new file mode 100644
index 000000000..d26eeaede
--- /dev/null
+++ b/parser/html/nsHtml5String.cpp
@@ -0,0 +1,226 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsHtml5String.h"
+#include "nsCharTraits.h"
+#include "nsUTF8Utils.h"
+#include "nsHtml5TreeBuilder.h"
+
+nsHtml5String::nsHtml5String(already_AddRefed<nsStringBuffer> aBuffer,
+ uint32_t aLength)
+ : mBuffer(aBuffer.take())
+ , mLength(aLength)
+{
+ if (mBuffer) {
+ MOZ_ASSERT(aLength);
+ } else {
+ MOZ_ASSERT(!aLength || aLength == UINT32_MAX);
+ }
+}
+
+void
+nsHtml5String::ToString(nsAString& aString)
+{
+ if (mBuffer) {
+ mBuffer->ToString(mLength, aString);
+ } else {
+ aString.Truncate();
+ if (mLength) {
+ aString.SetIsVoid(true);
+ }
+ }
+}
+
+void
+nsHtml5String::CopyToBuffer(char16_t* aBuffer)
+{
+ if (mBuffer) {
+ memcpy(aBuffer, mBuffer->Data(), mLength * sizeof(char16_t));
+ }
+}
+
+bool
+nsHtml5String::LowerCaseEqualsASCII(const char* aLowerCaseLiteral)
+{
+ if (!mBuffer) {
+ if (mLength) {
+ // This string is null
+ return false;
+ }
+ // this string is empty
+ return !(*aLowerCaseLiteral);
+ }
+ return !nsCharTraits<char16_t>::compareLowerCaseToASCIINullTerminated(
+ reinterpret_cast<char16_t*>(mBuffer->Data()), Length(), aLowerCaseLiteral);
+}
+
+bool
+nsHtml5String::EqualsASCII(const char* aLiteral)
+{
+ if (!mBuffer) {
+ if (mLength) {
+ // This string is null
+ return false;
+ }
+ // this string is empty
+ return !(*aLiteral);
+ }
+ return !nsCharTraits<char16_t>::compareASCIINullTerminated(
+ reinterpret_cast<char16_t*>(mBuffer->Data()), Length(), aLiteral);
+}
+
+bool
+nsHtml5String::LowerCaseStartsWithASCII(const char* aLowerCaseLiteral)
+{
+ if (!mBuffer) {
+ if (mLength) {
+ // This string is null
+ return false;
+ }
+ // this string is empty
+ return !(*aLowerCaseLiteral);
+ }
+ const char* litPtr = aLowerCaseLiteral;
+ const char16_t* strPtr = reinterpret_cast<char16_t*>(mBuffer->Data());
+ const char16_t* end = strPtr + Length();
+ char16_t litChar;
+ while ((litChar = *litPtr) && (strPtr != end)) {
+ MOZ_ASSERT(!(litChar >= 'A' && litChar <= 'Z'),
+ "Literal isn't in lower case.");
+ char16_t strChar = *strPtr;
+ if (strChar >= 'A' && strChar <= 'Z') {
+ strChar += 0x20;
+ }
+ if (litChar != strChar) {
+ return false;
+ }
+ ++litPtr;
+ ++strPtr;
+ }
+ return true;
+}
+
+bool
+nsHtml5String::Equals(nsHtml5String aOther)
+{
+ MOZ_ASSERT(operator bool());
+ MOZ_ASSERT(aOther);
+ if (mLength != aOther.mLength) {
+ return false;
+ }
+ if (!mBuffer) {
+ return true;
+ }
+ MOZ_ASSERT(aOther.mBuffer);
+ return !memcmp(
+ mBuffer->Data(), aOther.mBuffer->Data(), Length() * sizeof(char16_t));
+}
+
+nsHtml5String
+nsHtml5String::Clone()
+{
+ MOZ_ASSERT(operator bool());
+ RefPtr<nsStringBuffer> ref(mBuffer);
+ return nsHtml5String(ref.forget(), mLength);
+}
+
+void
+nsHtml5String::Release()
+{
+ if (mBuffer) {
+ mBuffer->Release();
+ mBuffer = nullptr;
+ }
+ mLength = UINT32_MAX;
+}
+
+// static
+nsHtml5String
+nsHtml5String::FromBuffer(char16_t* aBuffer,
+ int32_t aLength,
+ nsHtml5TreeBuilder* aTreeBuilder)
+{
+ if (!aLength) {
+ return nsHtml5String(nullptr, 0U);
+ }
+ // Work with nsStringBuffer directly to make sure that storage is actually
+ // nsStringBuffer and to make sure the allocation strategy matches
+ // nsAttrValue::GetStringBuffer, so that it doesn't need to reallocate and
+ // copy.
+ RefPtr<nsStringBuffer> buffer(
+ nsStringBuffer::Alloc((aLength + 1) * sizeof(char16_t)));
+ if (!buffer) {
+ if (!aTreeBuilder) {
+ MOZ_CRASH("Out of memory.");
+ }
+ aTreeBuilder->MarkAsBroken(NS_ERROR_OUT_OF_MEMORY);
+ buffer = nsStringBuffer::Alloc(2 * sizeof(char16_t));
+ if (!buffer) {
+ MOZ_CRASH(
+ "Out of memory so badly that couldn't even allocate placeholder.");
+ }
+ char16_t* data = reinterpret_cast<char16_t*>(buffer->Data());
+ data[0] = 0xFFFD;
+ data[1] = 0;
+ return nsHtml5String(buffer.forget(), 1);
+ }
+ char16_t* data = reinterpret_cast<char16_t*>(buffer->Data());
+ memcpy(data, aBuffer, aLength * sizeof(char16_t));
+ data[aLength] = 0;
+ return nsHtml5String(buffer.forget(), aLength);
+}
+
+// static
+nsHtml5String
+nsHtml5String::FromLiteral(const char* aLiteral)
+{
+ size_t length = std::strlen(aLiteral);
+ if (!length) {
+ return nsHtml5String(nullptr, 0U);
+ }
+ // Work with nsStringBuffer directly to make sure that storage is actually
+ // nsStringBuffer and to make sure the allocation strategy matches
+ // nsAttrValue::GetStringBuffer, so that it doesn't need to reallocate and
+ // copy.
+ RefPtr<nsStringBuffer> buffer(
+ nsStringBuffer::Alloc((length + 1) * sizeof(char16_t)));
+ if (!buffer) {
+ MOZ_CRASH("Out of memory.");
+ }
+ char16_t* data = reinterpret_cast<char16_t*>(buffer->Data());
+ LossyConvertEncoding8to16 converter(data);
+ converter.write(aLiteral, length);
+ data[length] = 0;
+ return nsHtml5String(buffer.forget(), length);
+}
+
+// static
+nsHtml5String
+nsHtml5String::FromString(const nsAString& aString)
+{
+ auto length = aString.Length();
+ if (!length) {
+ return nsHtml5String(nullptr, 0U);
+ }
+ RefPtr<nsStringBuffer> buffer = nsStringBuffer::FromString(aString);
+ if (buffer) {
+ return nsHtml5String(buffer.forget(), length);
+ }
+ buffer = nsStringBuffer::Alloc((length + 1) * sizeof(char16_t));
+ if (!buffer) {
+ MOZ_CRASH("Out of memory.");
+ }
+ char16_t* data = reinterpret_cast<char16_t*>(buffer->Data());
+ memcpy(data, aString.BeginReading(), length * sizeof(char16_t));
+ data[length] = 0;
+ return nsHtml5String(buffer.forget(), length);
+}
+
+// static
+nsHtml5String
+nsHtml5String::EmptyString()
+{
+ return nsHtml5String(nullptr, 0U);
+
+} \ No newline at end of file
diff --git a/parser/html/nsHtml5String.h b/parser/html/nsHtml5String.h
new file mode 100644
index 000000000..191bf6be8
--- /dev/null
+++ b/parser/html/nsHtml5String.h
@@ -0,0 +1,95 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef nsHtml5String_h
+#define nsHtml5String_h
+
+#include "nsString.h"
+
+class nsHtml5TreeBuilder;
+
+/**
+ * A pass-by-value type that combines an unsafe `nsStringBuffer*` with its
+ * logical length (`uint32_t`). (`nsStringBuffer` knows its capacity but not
+ * its logical length, i.e. how much of the capacity is in use.)
+ *
+ * Holding or passing this type is as unsafe as holding or passing
+ * `nsStringBuffer*`.
+ *
+ * Empty strings and null strings are distinct. Since an empty nsString does
+ * not have a an `nsStringBuffer`, both empty and null `nsHtml5String` have
+ * `nullptr` as `mBuffer`. If `mBuffer` is `nullptr`, the empty case is marked
+ * with `mLength` being zero and the null case with `mLength` being non-zero.
+ */
+class nsHtml5String final
+{
+public:
+ /**
+ * Default constructor.
+ */
+ inline nsHtml5String()
+ : nsHtml5String(nullptr)
+ {
+ }
+
+ /**
+ * Constructor from nullptr.
+ */
+ inline MOZ_IMPLICIT nsHtml5String(decltype(nullptr))
+ : mBuffer(nullptr)
+ , mLength(UINT32_MAX)
+ {
+ }
+
+ inline uint32_t Length() const { return mBuffer ? mLength : 0; }
+
+ /**
+ * False iff the string is logically null
+ */
+ inline MOZ_IMPLICIT operator bool() const { return !(!mBuffer && mLength); }
+
+ void ToString(nsAString& aString);
+
+ void CopyToBuffer(char16_t* aBuffer);
+
+ bool LowerCaseEqualsASCII(const char* aLowerCaseLiteral);
+
+ bool EqualsASCII(const char* aLiteral);
+
+ bool LowerCaseStartsWithASCII(const char* aLowerCaseLiteral);
+
+ bool Equals(nsHtml5String aOther);
+
+ nsHtml5String Clone();
+
+ void Release();
+
+ static nsHtml5String FromBuffer(char16_t* aBuffer,
+ int32_t aLength,
+ nsHtml5TreeBuilder* aTreeBuilder);
+
+ static nsHtml5String FromLiteral(const char* aLiteral);
+
+ static nsHtml5String FromString(const nsAString& aString);
+
+ static nsHtml5String EmptyString();
+
+private:
+ /**
+ * Constructor from raw parts.
+ */
+ nsHtml5String(already_AddRefed<nsStringBuffer> aBuffer, uint32_t aLength);
+
+ /**
+ * nullptr if the string is logically null or logically empty
+ */
+ nsStringBuffer* mBuffer;
+
+ /**
+ * The length of the string. non-zero if the string is logically null.
+ */
+ uint32_t mLength;
+};
+
+#endif // nsHtml5String_h \ No newline at end of file
diff --git a/parser/html/nsHtml5Tokenizer.cpp b/parser/html/nsHtml5Tokenizer.cpp
index 2838d74aa..e70c081bf 100644
--- a/parser/html/nsHtml5Tokenizer.cpp
+++ b/parser/html/nsHtml5Tokenizer.cpp
@@ -32,7 +32,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
#include "jArray.h"
@@ -113,7 +113,8 @@ nsHtml5Tokenizer::setInterner(nsHtml5AtomTable* interner)
}
void
-nsHtml5Tokenizer::initLocation(nsString* newPublicId, nsString* newSystemId)
+nsHtml5Tokenizer::initLocation(nsHtml5String newPublicId,
+ nsHtml5String newSystemId)
{
this->systemId = newSystemId;
this->publicId = newPublicId;
@@ -222,10 +223,11 @@ nsHtml5Tokenizer::emitOrAppendCharRefBuf(int32_t returnState)
}
}
-nsString*
+nsHtml5String
nsHtml5Tokenizer::strBufToString()
{
- nsString* str = nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen, tokenHandler);
+ nsHtml5String str =
+ nsHtml5Portability::newStringFromBuffer(strBuf, 0, strBufLen, tokenHandler);
clearStrBufAfterUse();
return str;
}
@@ -350,7 +352,7 @@ void
nsHtml5Tokenizer::addAttributeWithValue()
{
if (attributeName) {
- nsString* val = strBufToString();
+ nsHtml5String val = strBufToString();
if (mViewSource) {
mViewSource->MaybeLinkifyAttributeValue(attributeName, val);
}
@@ -2091,11 +2093,8 @@ nsHtml5Tokenizer::stateLoop(int32_t state, char16_t c, int32_t pos, char16_t* bu
default: {
tokenHandler->characters(nsHtml5Tokenizer::LT_SOLIDUS, 0, 2);
emitStrBuf();
- if (c == '\0') {
- emitReplacementCharacter(buf, pos);
- } else {
- cstart = pos;
- }
+ cstart = pos;
+ reconsume = true;
state = P::transition(mViewSource, returnState, reconsume, pos);
NS_HTML5_CONTINUE(stateloop);
}
@@ -3496,11 +3495,11 @@ nsHtml5Tokenizer::initDoctypeFields()
clearStrBufAfterUse();
doctypeName = nsHtml5Atoms::emptystring;
if (systemIdentifier) {
- nsHtml5Portability::releaseString(systemIdentifier);
+ systemIdentifier.Release();
systemIdentifier = nullptr;
}
if (publicIdentifier) {
- nsHtml5Portability::releaseString(publicIdentifier);
+ publicIdentifier.Release();
publicIdentifier = nullptr;
}
forceQuirks = false;
@@ -3662,11 +3661,11 @@ nsHtml5Tokenizer::eof()
errEofInDoctype();
doctypeName = nsHtml5Atoms::emptystring;
if (systemIdentifier) {
- nsHtml5Portability::releaseString(systemIdentifier);
+ systemIdentifier.Release();
systemIdentifier = nullptr;
}
if (publicIdentifier) {
- nsHtml5Portability::releaseString(publicIdentifier);
+ publicIdentifier.Release();
publicIdentifier = nullptr;
}
forceQuirks = true;
@@ -3896,14 +3895,14 @@ nsHtml5Tokenizer::emitDoctypeToken(int32_t pos)
cstart = pos + 1;
tokenHandler->doctype(doctypeName, publicIdentifier, systemIdentifier, forceQuirks);
doctypeName = nullptr;
- nsHtml5Portability::releaseString(publicIdentifier);
+ publicIdentifier.Release();
publicIdentifier = nullptr;
- nsHtml5Portability::releaseString(systemIdentifier);
+ systemIdentifier.Release();
systemIdentifier = nullptr;
}
bool
-nsHtml5Tokenizer::internalEncodingDeclaration(nsString* internalCharset)
+nsHtml5Tokenizer::internalEncodingDeclaration(nsHtml5String internalCharset)
{
if (encodingDeclarationHandler) {
return encodingDeclarationHandler->internalEncodingDeclaration(internalCharset);
@@ -3938,11 +3937,11 @@ nsHtml5Tokenizer::end()
strBuf = nullptr;
doctypeName = nullptr;
if (systemIdentifier) {
- nsHtml5Portability::releaseString(systemIdentifier);
+ systemIdentifier.Release();
systemIdentifier = nullptr;
}
if (publicIdentifier) {
- nsHtml5Portability::releaseString(publicIdentifier);
+ publicIdentifier.Release();
publicIdentifier = nullptr;
}
if (tagName) {
@@ -4041,13 +4040,13 @@ nsHtml5Tokenizer::loadState(nsHtml5Tokenizer* other)
} else {
doctypeName = nsHtml5Portability::newLocalFromLocal(other->doctypeName, interner);
}
- nsHtml5Portability::releaseString(systemIdentifier);
+ systemIdentifier.Release();
if (!other->systemIdentifier) {
systemIdentifier = nullptr;
} else {
systemIdentifier = nsHtml5Portability::newStringFromString(other->systemIdentifier);
}
- nsHtml5Portability::releaseString(publicIdentifier);
+ publicIdentifier.Release();
if (!other->publicIdentifier) {
publicIdentifier = nullptr;
} else {
diff --git a/parser/html/nsHtml5Tokenizer.h b/parser/html/nsHtml5Tokenizer.h
index da509b69b..00cca9a9c 100644
--- a/parser/html/nsHtml5Tokenizer.h
+++ b/parser/html/nsHtml5Tokenizer.h
@@ -33,7 +33,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
#include "jArray.h"
@@ -106,8 +106,8 @@ class nsHtml5Tokenizer
protected:
int32_t cstart;
private:
- nsString* publicId;
- nsString* systemId;
+ nsHtml5String publicId;
+ nsHtml5String systemId;
autoJArray<char16_t,int32_t> strBuf;
int32_t strBufLen;
autoJArray<char16_t,int32_t> charRefBuf;
@@ -126,8 +126,8 @@ class nsHtml5Tokenizer
nsHtml5AttributeName* attributeName;
private:
nsIAtom* doctypeName;
- nsString* publicIdentifier;
- nsString* systemIdentifier;
+ nsHtml5String publicIdentifier;
+ nsHtml5String systemIdentifier;
nsHtml5HtmlAttributes* attributes;
bool newAttributesEachTime;
bool shouldSuspend;
@@ -141,7 +141,7 @@ class nsHtml5Tokenizer
public:
nsHtml5Tokenizer(nsHtml5TreeBuilder* tokenHandler, bool viewingXmlSource);
void setInterner(nsHtml5AtomTable* interner);
- void initLocation(nsString* newPublicId, nsString* newSystemId);
+ void initLocation(nsHtml5String newPublicId, nsHtml5String newSystemId);
bool isViewingXmlSource();
void setStateAndEndTagExpectation(int32_t specialTokenizerState, nsIAtom* endTagExpectation);
void setStateAndEndTagExpectation(int32_t specialTokenizerState, nsHtml5ElementName* endTagExpectation);
@@ -193,7 +193,7 @@ class nsHtml5Tokenizer
}
protected:
- nsString* strBufToString();
+ nsHtml5String strBufToString();
private:
void strBufToDoctypeName();
void emitStrBuf();
@@ -285,7 +285,7 @@ class nsHtml5Tokenizer
}
public:
- bool internalEncodingDeclaration(nsString* internalCharset);
+ bool internalEncodingDeclaration(nsHtml5String internalCharset);
private:
void emitOrAppendTwo(const char16_t* val, int32_t returnState);
void emitOrAppendOne(const char16_t* val, int32_t returnState);
diff --git a/parser/html/nsHtml5TreeBuilder.cpp b/parser/html/nsHtml5TreeBuilder.cpp
index f694116ba..457c7deb1 100644
--- a/parser/html/nsHtml5TreeBuilder.cpp
+++ b/parser/html/nsHtml5TreeBuilder.cpp
@@ -34,7 +34,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
#include "nsITimer.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
@@ -154,13 +154,16 @@ nsHtml5TreeBuilder::startTokenization(nsHtml5Tokenizer* self)
}
void
-nsHtml5TreeBuilder::doctype(nsIAtom* name, nsString* publicIdentifier, nsString* systemIdentifier, bool forceQuirks)
+nsHtml5TreeBuilder::doctype(nsIAtom* name,
+ nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier,
+ bool forceQuirks)
{
needToDropLF = false;
if (!isInForeign() && mode == NS_HTML5TREE_BUILDER_INITIAL) {
- nsString* emptyString = nsHtml5Portability::newEmptyString();
+ nsHtml5String emptyString = nsHtml5Portability::newEmptyString();
appendDoctypeToDocument(!name ? nsHtml5Atoms::emptystring : name, !publicIdentifier ? emptyString : publicIdentifier, !systemIdentifier ? emptyString : systemIdentifier);
- nsHtml5Portability::releaseString(emptyString);
+ emptyString.Release();
if (isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks)) {
errQuirkyDoctype();
documentModeInternal(QUIRKS_MODE, publicIdentifier, systemIdentifier, false);
@@ -1990,8 +1993,9 @@ nsHtml5TreeBuilder::isSpecialParentInForeign(nsHtml5StackNode* stackNode)
return (kNameSpaceID_XHTML == ns) || (stackNode->isHtmlIntegrationPoint()) || ((kNameSpaceID_MathML == ns) && (stackNode->getGroup() == NS_HTML5TREE_BUILDER_MI_MO_MN_MS_MTEXT));
}
-nsString*
-nsHtml5TreeBuilder::extractCharsetFromContent(nsString* attributeValue, nsHtml5TreeBuilder* tb)
+nsHtml5String
+nsHtml5TreeBuilder::extractCharsetFromContent(nsHtml5String attributeValue,
+ nsHtml5TreeBuilder* tb)
{
int32_t charsetState = NS_HTML5TREE_BUILDER_CHARSET_INITIAL;
int32_t start = -1;
@@ -2175,12 +2179,13 @@ nsHtml5TreeBuilder::extractCharsetFromContent(nsString* attributeValue, nsHtml5T
}
}
charsetloop_end: ;
- nsString* charset = nullptr;
+ nsHtml5String charset = nullptr;
if (start != -1) {
if (end == -1) {
end = buffer.length;
}
- charset = nsHtml5Portability::newStringFromBuffer(buffer, start, end - start, tb);
+ charset =
+ nsHtml5Portability::newStringFromBuffer(buffer, start, end - start, tb);
}
return charset;
}
@@ -2188,7 +2193,8 @@ nsHtml5TreeBuilder::extractCharsetFromContent(nsString* attributeValue, nsHtml5T
void
nsHtml5TreeBuilder::checkMetaCharset(nsHtml5HtmlAttributes* attributes)
{
- nsString* charset = attributes->getValue(nsHtml5AttributeName::ATTR_CHARSET);
+ nsHtml5String charset =
+ attributes->getValue(nsHtml5AttributeName::ATTR_CHARSET);
if (charset) {
if (tokenizer->internalEncodingDeclaration(charset)) {
requestSuspension();
@@ -2199,15 +2205,17 @@ nsHtml5TreeBuilder::checkMetaCharset(nsHtml5HtmlAttributes* attributes)
if (!nsHtml5Portability::lowerCaseLiteralEqualsIgnoreAsciiCaseString("content-type", attributes->getValue(nsHtml5AttributeName::ATTR_HTTP_EQUIV))) {
return;
}
- nsString* content = attributes->getValue(nsHtml5AttributeName::ATTR_CONTENT);
+ nsHtml5String content =
+ attributes->getValue(nsHtml5AttributeName::ATTR_CONTENT);
if (content) {
- nsString* extract = nsHtml5TreeBuilder::extractCharsetFromContent(content, this);
+ nsHtml5String extract =
+ nsHtml5TreeBuilder::extractCharsetFromContent(content, this);
if (extract) {
if (tokenizer->internalEncodingDeclaration(extract)) {
requestSuspension();
}
}
- nsHtml5Portability::releaseString(extract);
+ extract.Release();
}
}
@@ -3208,7 +3216,11 @@ nsHtml5TreeBuilder::isSecondOnStackBody()
}
void
-nsHtml5TreeBuilder::documentModeInternal(nsHtml5DocumentMode m, nsString* publicIdentifier, nsString* systemIdentifier, bool html4SpecificAdditionalErrorChecks)
+nsHtml5TreeBuilder::documentModeInternal(
+ nsHtml5DocumentMode m,
+ nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier,
+ bool html4SpecificAdditionalErrorChecks)
{
if (isSrcdocDocument) {
quirks = false;
@@ -3220,7 +3232,8 @@ nsHtml5TreeBuilder::documentModeInternal(nsHtml5DocumentMode m, nsString* public
}
bool
-nsHtml5TreeBuilder::isAlmostStandards(nsString* publicIdentifier, nsString* systemIdentifier)
+nsHtml5TreeBuilder::isAlmostStandards(nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier)
{
if (nsHtml5Portability::lowerCaseLiteralEqualsIgnoreAsciiCaseString("-//w3c//dtd xhtml 1.0 transitional//en", publicIdentifier)) {
return true;
@@ -3240,7 +3253,10 @@ nsHtml5TreeBuilder::isAlmostStandards(nsString* publicIdentifier, nsString* syst
}
bool
-nsHtml5TreeBuilder::isQuirky(nsIAtom* name, nsString* publicIdentifier, nsString* systemIdentifier, bool forceQuirks)
+nsHtml5TreeBuilder::isQuirky(nsIAtom* name,
+ nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier,
+ bool forceQuirks)
{
if (forceQuirks) {
return true;
@@ -4051,7 +4067,8 @@ nsHtml5TreeBuilder::appendToCurrentNodeAndPushElementMayFosterMathML(nsHtml5Elem
bool
nsHtml5TreeBuilder::annotationXmlEncodingPermitsHtml(nsHtml5HtmlAttributes* attributes)
{
- nsString* encoding = attributes->getValue(nsHtml5AttributeName::ATTR_ENCODING);
+ nsHtml5String encoding =
+ attributes->getValue(nsHtml5AttributeName::ATTR_ENCODING);
if (!encoding) {
return false;
}
diff --git a/parser/html/nsHtml5TreeBuilder.h b/parser/html/nsHtml5TreeBuilder.h
index a66b168be..67f5010c5 100644
--- a/parser/html/nsHtml5TreeBuilder.h
+++ b/parser/html/nsHtml5TreeBuilder.h
@@ -35,7 +35,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
#include "nsITimer.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
@@ -103,7 +103,10 @@ class nsHtml5TreeBuilder : public nsAHtml5TreeBuilderState
bool isSrcdocDocument;
public:
void startTokenization(nsHtml5Tokenizer* self);
- void doctype(nsIAtom* name, nsString* publicIdentifier, nsString* systemIdentifier, bool forceQuirks);
+ void doctype(nsIAtom* name,
+ nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier,
+ bool forceQuirks);
void comment(char16_t* buf, int32_t start, int32_t length);
void characters(const char16_t* buf, int32_t start, int32_t length);
void zeroOriginatingReplacementCharacter();
@@ -119,7 +122,8 @@ class nsHtml5TreeBuilder : public nsAHtml5TreeBuilderState
bool isTemplateModeStackEmpty();
bool isSpecialParentInForeign(nsHtml5StackNode* stackNode);
public:
- static nsString* extractCharsetFromContent(nsString* attributeValue, nsHtml5TreeBuilder* tb);
+ static nsHtml5String extractCharsetFromContent(nsHtml5String attributeValue,
+ nsHtml5TreeBuilder* tb);
private:
void checkMetaCharset(nsHtml5HtmlAttributes* attributes);
public:
@@ -136,9 +140,16 @@ class nsHtml5TreeBuilder : public nsAHtml5TreeBuilderState
void generateImpliedEndTagsExceptFor(nsIAtom* name);
void generateImpliedEndTags();
bool isSecondOnStackBody();
- void documentModeInternal(nsHtml5DocumentMode m, nsString* publicIdentifier, nsString* systemIdentifier, bool html4SpecificAdditionalErrorChecks);
- bool isAlmostStandards(nsString* publicIdentifier, nsString* systemIdentifier);
- bool isQuirky(nsIAtom* name, nsString* publicIdentifier, nsString* systemIdentifier, bool forceQuirks);
+ void documentModeInternal(nsHtml5DocumentMode m,
+ nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier,
+ bool html4SpecificAdditionalErrorChecks);
+ bool isAlmostStandards(nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier);
+ bool isQuirky(nsIAtom* name,
+ nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier,
+ bool forceQuirks);
void closeTheCell(int32_t eltPos);
int32_t findLastInTableScopeTdTh();
void clearStackBackTo(int32_t eltPos);
@@ -224,7 +235,9 @@ class nsHtml5TreeBuilder : public nsAHtml5TreeBuilderState
void markMalformedIfScript(nsIContentHandle* elt);
void start(bool fragmentMode);
void end();
- void appendDoctypeToDocument(nsIAtom* name, nsString* publicIdentifier, nsString* systemIdentifier);
+ void appendDoctypeToDocument(nsIAtom* name,
+ nsHtml5String publicIdentifier,
+ nsHtml5String systemIdentifier);
void elementPushed(int32_t ns, nsIAtom* name, nsIContentHandle* node);
void elementPopped(int32_t ns, nsIAtom* name, nsIContentHandle* node);
public:
diff --git a/parser/html/nsHtml5TreeBuilderCppSupplement.h b/parser/html/nsHtml5TreeBuilderCppSupplement.h
index ff17c326e..aacc5a3e0 100644
--- a/parser/html/nsHtml5TreeBuilderCppSupplement.h
+++ b/parser/html/nsHtml5TreeBuilderCppSupplement.h
@@ -123,181 +123,178 @@ nsHtml5TreeBuilder::createElement(int32_t aNamespace, nsIAtom* aName,
switch (aNamespace) {
case kNameSpaceID_XHTML:
if (nsHtml5Atoms::img == aName) {
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_SRC);
- nsString* srcset =
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_SRC);
+ nsHtml5String srcset =
aAttributes->getValue(nsHtml5AttributeName::ATTR_SRCSET);
- nsString* crossOrigin =
+ nsHtml5String crossOrigin =
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
- nsString* referrerPolicy =
+ nsHtml5String referrerPolicy =
aAttributes->getValue(nsHtml5AttributeName::ATTR_REFERRERPOLICY);
- nsString* sizes =
+ nsHtml5String sizes =
aAttributes->getValue(nsHtml5AttributeName::ATTR_SIZES);
- mSpeculativeLoadQueue.AppendElement()->
- InitImage(url ? *url : NullString(),
- crossOrigin ? *crossOrigin : NullString(),
- referrerPolicy ? *referrerPolicy : NullString(),
- srcset ? *srcset : NullString(),
- sizes ? *sizes : NullString());
+ mSpeculativeLoadQueue.AppendElement()->InitImage(
+ url, crossOrigin, referrerPolicy, srcset, sizes);
} else if (nsHtml5Atoms::source == aName) {
- nsString* srcset =
+ nsHtml5String srcset =
aAttributes->getValue(nsHtml5AttributeName::ATTR_SRCSET);
// Sources without srcset cannot be selected. The source could also be
// for a media element, but in that context doesn't use srcset. See
// comments in nsHtml5SpeculativeLoad.h about <picture> preloading
if (srcset) {
- nsString* sizes =
+ nsHtml5String sizes =
aAttributes->getValue(nsHtml5AttributeName::ATTR_SIZES);
- nsString* type =
+ nsHtml5String type =
aAttributes->getValue(nsHtml5AttributeName::ATTR_TYPE);
- nsString* media =
+ nsHtml5String media =
aAttributes->getValue(nsHtml5AttributeName::ATTR_MEDIA);
- mSpeculativeLoadQueue.AppendElement()->
- InitPictureSource(*srcset,
- sizes ? *sizes : NullString(),
- type ? *type : NullString(),
- media ? *media : NullString());
+ mSpeculativeLoadQueue.AppendElement()->InitPictureSource(
+ srcset, sizes, type, media);
}
} else if (nsHtml5Atoms::script == aName) {
nsHtml5TreeOperation* treeOp = mOpQueue.AppendElement();
NS_ASSERTION(treeOp, "Tree op allocation failed.");
treeOp->Init(eTreeOpSetScriptLineNumberAndFreeze, content, tokenizer->getLineNumber());
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_SRC);
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_SRC);
if (url) {
- nsString* charset = aAttributes->getValue(nsHtml5AttributeName::ATTR_CHARSET);
- nsString* type = aAttributes->getValue(nsHtml5AttributeName::ATTR_TYPE);
- nsString* crossOrigin =
+ nsHtml5String charset =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_CHARSET);
+ nsHtml5String type =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_TYPE);
+ nsHtml5String crossOrigin =
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
- nsString* integrity =
+ nsHtml5String integrity =
aAttributes->getValue(nsHtml5AttributeName::ATTR_INTEGRITY);
- mSpeculativeLoadQueue.AppendElement()->
- InitScript(*url,
- (charset) ? *charset : EmptyString(),
- (type) ? *type : EmptyString(),
- (crossOrigin) ? *crossOrigin : NullString(),
- (integrity) ? *integrity : NullString(),
- mode == NS_HTML5TREE_BUILDER_IN_HEAD);
+ mSpeculativeLoadQueue.AppendElement()->InitScript(
+ url,
+ charset,
+ type,
+ crossOrigin,
+ integrity,
+ mode == NS_HTML5TREE_BUILDER_IN_HEAD);
mCurrentHtmlScriptIsAsyncOrDefer =
aAttributes->contains(nsHtml5AttributeName::ATTR_ASYNC) ||
aAttributes->contains(nsHtml5AttributeName::ATTR_DEFER);
}
} else if (nsHtml5Atoms::link == aName) {
- nsString* rel = aAttributes->getValue(nsHtml5AttributeName::ATTR_REL);
+ nsHtml5String rel =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_REL);
// Not splitting on space here is bogus but the old parser didn't even
// do a case-insensitive check.
if (rel) {
- if (rel->LowerCaseEqualsASCII("stylesheet")) {
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
+ if (rel.LowerCaseEqualsASCII("stylesheet")) {
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
if (url) {
- nsString* charset = aAttributes->getValue(nsHtml5AttributeName::ATTR_CHARSET);
- nsString* crossOrigin =
+ nsHtml5String charset =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_CHARSET);
+ nsHtml5String crossOrigin =
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
- nsString* integrity =
+ nsHtml5String integrity =
aAttributes->getValue(nsHtml5AttributeName::ATTR_INTEGRITY);
- mSpeculativeLoadQueue.AppendElement()->
- InitStyle(*url,
- (charset) ? *charset : EmptyString(),
- (crossOrigin) ? *crossOrigin : NullString(),
- (integrity) ? *integrity : NullString());
+ mSpeculativeLoadQueue.AppendElement()->InitStyle(
+ url, charset, crossOrigin, integrity);
}
- } else if (rel->LowerCaseEqualsASCII("preconnect")) {
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
+ } else if (rel.LowerCaseEqualsASCII("preconnect")) {
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
if (url) {
- nsString* crossOrigin =
+ nsHtml5String crossOrigin =
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
- mSpeculativeLoadQueue.AppendElement()->
- InitPreconnect(*url, (crossOrigin) ? *crossOrigin : NullString());
+ mSpeculativeLoadQueue.AppendElement()->InitPreconnect(
+ url, crossOrigin);
}
}
}
} else if (nsHtml5Atoms::video == aName) {
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_POSTER);
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_POSTER);
if (url) {
- mSpeculativeLoadQueue.AppendElement()->InitImage(*url, NullString(),
- NullString(),
- NullString(),
- NullString());
+ mSpeculativeLoadQueue.AppendElement()->InitImage(
+ url, nullptr, nullptr, nullptr, nullptr);
}
} else if (nsHtml5Atoms::style == aName) {
nsHtml5TreeOperation* treeOp = mOpQueue.AppendElement();
NS_ASSERTION(treeOp, "Tree op allocation failed.");
treeOp->Init(eTreeOpSetStyleLineNumber, content, tokenizer->getLineNumber());
} else if (nsHtml5Atoms::html == aName) {
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_MANIFEST);
- if (url) {
- mSpeculativeLoadQueue.AppendElement()->InitManifest(*url);
- } else {
- mSpeculativeLoadQueue.AppendElement()->InitManifest(EmptyString());
- }
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_MANIFEST);
+ mSpeculativeLoadQueue.AppendElement()->InitManifest(url);
} else if (nsHtml5Atoms::base == aName) {
- nsString* url =
- aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
if (url) {
- mSpeculativeLoadQueue.AppendElement()->InitBase(*url);
+ mSpeculativeLoadQueue.AppendElement()->InitBase(url);
}
} else if (nsHtml5Atoms::meta == aName) {
if (nsHtml5Portability::lowerCaseLiteralEqualsIgnoreAsciiCaseString(
"content-security-policy",
aAttributes->getValue(nsHtml5AttributeName::ATTR_HTTP_EQUIV))) {
- nsString* csp = aAttributes->getValue(nsHtml5AttributeName::ATTR_CONTENT);
+ nsHtml5String csp =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_CONTENT);
if (csp) {
- mSpeculativeLoadQueue.AppendElement()->InitMetaCSP(*csp);
+ mSpeculativeLoadQueue.AppendElement()->InitMetaCSP(csp);
}
}
else if (nsHtml5Portability::lowerCaseLiteralEqualsIgnoreAsciiCaseString(
"referrer",
aAttributes->getValue(nsHtml5AttributeName::ATTR_NAME))) {
- nsString* referrerPolicy = aAttributes->getValue(nsHtml5AttributeName::ATTR_CONTENT);
+ nsHtml5String referrerPolicy =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_CONTENT);
if (referrerPolicy) {
- mSpeculativeLoadQueue.AppendElement()->InitMetaReferrerPolicy(*referrerPolicy);
+ mSpeculativeLoadQueue.AppendElement()->InitMetaReferrerPolicy(
+ referrerPolicy);
}
}
}
break;
case kNameSpaceID_SVG:
if (nsHtml5Atoms::image == aName) {
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_XLINK_HREF);
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_XLINK_HREF);
if (url) {
- mSpeculativeLoadQueue.AppendElement()->InitImage(*url, NullString(),
- NullString(),
- NullString(),
- NullString());
+ mSpeculativeLoadQueue.AppendElement()->InitImage(
+ url, nullptr, nullptr, nullptr, nullptr);
}
} else if (nsHtml5Atoms::script == aName) {
nsHtml5TreeOperation* treeOp = mOpQueue.AppendElement();
NS_ASSERTION(treeOp, "Tree op allocation failed.");
treeOp->Init(eTreeOpSetScriptLineNumberAndFreeze, content, tokenizer->getLineNumber());
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_XLINK_HREF);
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_XLINK_HREF);
if (url) {
- nsString* type = aAttributes->getValue(nsHtml5AttributeName::ATTR_TYPE);
- nsString* crossOrigin =
+ nsHtml5String type =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_TYPE);
+ nsHtml5String crossOrigin =
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
- nsString* integrity =
+ nsHtml5String integrity =
aAttributes->getValue(nsHtml5AttributeName::ATTR_INTEGRITY);
- mSpeculativeLoadQueue.AppendElement()->
- InitScript(*url,
- EmptyString(),
- (type) ? *type : EmptyString(),
- (crossOrigin) ? *crossOrigin : NullString(),
- (integrity) ? *integrity : NullString(),
- mode == NS_HTML5TREE_BUILDER_IN_HEAD);
+ mSpeculativeLoadQueue.AppendElement()->InitScript(
+ url,
+ nullptr,
+ type,
+ crossOrigin,
+ integrity,
+ mode == NS_HTML5TREE_BUILDER_IN_HEAD);
}
} else if (nsHtml5Atoms::style == aName) {
nsHtml5TreeOperation* treeOp = mOpQueue.AppendElement();
NS_ASSERTION(treeOp, "Tree op allocation failed.");
treeOp->Init(eTreeOpSetStyleLineNumber, content, tokenizer->getLineNumber());
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_XLINK_HREF);
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_XLINK_HREF);
if (url) {
- nsString* crossOrigin =
+ nsHtml5String crossOrigin =
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
- nsString* integrity =
+ nsHtml5String integrity =
aAttributes->getValue(nsHtml5AttributeName::ATTR_INTEGRITY);
- mSpeculativeLoadQueue.AppendElement()->
- InitStyle(*url, EmptyString(),
- (crossOrigin) ? *crossOrigin : NullString(),
- (integrity) ? *integrity : NullString());
+ mSpeculativeLoadQueue.AppendElement()->InitStyle(
+ url, nullptr, crossOrigin, integrity);
}
}
break;
@@ -320,18 +317,23 @@ nsHtml5TreeBuilder::createElement(int32_t aNamespace, nsIAtom* aName,
}
} else if (aNamespace == kNameSpaceID_XHTML) {
if (nsHtml5Atoms::html == aName) {
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_MANIFEST);
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_MANIFEST);
nsHtml5TreeOperation* treeOp = mOpQueue.AppendElement();
NS_ASSERTION(treeOp, "Tree op allocation failed.");
if (url) {
- treeOp->Init(eTreeOpProcessOfflineManifest, *url);
+ nsString
+ urlString; // Not Auto, because using it to hold nsStringBuffer*
+ url.ToString(urlString);
+ treeOp->Init(eTreeOpProcessOfflineManifest, urlString);
} else {
treeOp->Init(eTreeOpProcessOfflineManifest, EmptyString());
}
} else if (nsHtml5Atoms::base == aName && mViewSource) {
- nsString* url = aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
+ nsHtml5String url =
+ aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
if (url) {
- mViewSource->AddBase(*url);
+ mViewSource->AddBase(url);
}
}
}
@@ -743,17 +745,19 @@ nsHtml5TreeBuilder::end()
}
void
-nsHtml5TreeBuilder::appendDoctypeToDocument(nsIAtom* aName, nsString* aPublicId, nsString* aSystemId)
+nsHtml5TreeBuilder::appendDoctypeToDocument(nsIAtom* aName,
+ nsHtml5String aPublicId,
+ nsHtml5String aSystemId)
{
NS_PRECONDITION(aName, "Null name");
-
+ nsString publicId; // Not Auto, because using it to hold nsStringBuffer*
+ nsString systemId; // Not Auto, because using it to hold nsStringBuffer*
+ aPublicId.ToString(publicId);
+ aSystemId.ToString(systemId);
if (mBuilder) {
nsCOMPtr<nsIAtom> name = nsHtml5TreeOperation::Reget(aName);
- nsresult rv =
- nsHtml5TreeOperation::AppendDoctypeToDocument(name,
- *aPublicId,
- *aSystemId,
- mBuilder);
+ nsresult rv = nsHtml5TreeOperation::AppendDoctypeToDocument(
+ name, publicId, systemId, mBuilder);
if (NS_FAILED(rv)) {
MarkAsBrokenAndRequestSuspension(rv);
}
@@ -762,7 +766,7 @@ nsHtml5TreeBuilder::appendDoctypeToDocument(nsIAtom* aName, nsString* aPublicId,
nsHtml5TreeOperation* treeOp = mOpQueue.AppendElement();
NS_ASSERTION(treeOp, "Tree op allocation failed.");
- treeOp->Init(aName, *aPublicId, *aSystemId);
+ treeOp->Init(aName, publicId, systemId);
// nsXMLContentSink can flush here, but what's the point?
// It can also interrupt here, but we can't.
}
diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp
index 5c3f32d6f..95f177376 100644
--- a/parser/html/nsHtml5TreeOpExecutor.cpp
+++ b/parser/html/nsHtml5TreeOpExecutor.cpp
@@ -954,8 +954,9 @@ nsHtml5TreeOpExecutor::PreloadImage(const nsAString& aURL,
const nsAString& aImageReferrerPolicy)
{
nsCOMPtr<nsIURI> baseURI = BaseURIForPreload();
+ bool isImgSet = false;
nsCOMPtr<nsIURI> uri = mDocument->ResolvePreloadImage(baseURI, aURL, aSrcset,
- aSizes);
+ aSizes, &isImgSet);
if (uri && ShouldPreloadURI(uri)) {
// use document wide referrer policy
mozilla::net::ReferrerPolicy referrerPolicy = mSpeculationReferrerPolicy;
@@ -969,7 +970,7 @@ nsHtml5TreeOpExecutor::PreloadImage(const nsAString& aURL,
}
}
- mDocument->MaybePreLoadImage(uri, aCrossOrigin, referrerPolicy);
+ mDocument->MaybePreLoadImage(uri, aCrossOrigin, referrerPolicy, isImgSet);
}
}
diff --git a/parser/html/nsHtml5TreeOperation.cpp b/parser/html/nsHtml5TreeOperation.cpp
index af246a253..3877e01b8 100644
--- a/parser/html/nsHtml5TreeOperation.cpp
+++ b/parser/html/nsHtml5TreeOperation.cpp
@@ -319,11 +319,10 @@ nsHtml5TreeOperation::AddAttributes(nsIContent* aNode,
if (!node->HasAttr(nsuri, localName)) {
// prefix doesn't need regetting. it is always null or a static atom
// local name is never null
- node->SetAttr(nsuri,
- localName,
- aAttributes->getPrefixNoBoundsCheck(i),
- *(aAttributes->getValueNoBoundsCheck(i)),
- true);
+ nsString value; // Not Auto, because using it to hold nsStringBuffer*
+ aAttributes->getValueNoBoundsCheck(i).ToString(value);
+ node->SetAttr(
+ nsuri, localName, aAttributes->getPrefixNoBoundsCheck(i), value, true);
// XXX what to do with nsresult?
}
}
@@ -418,12 +417,14 @@ nsHtml5TreeOperation::CreateElement(int32_t aNs,
nsCOMPtr<nsIAtom> prefix = aAttributes->getPrefixNoBoundsCheck(i);
int32_t nsuri = aAttributes->getURINoBoundsCheck(i);
+ nsString value; // Not Auto, because using it to hold nsStringBuffer*
+ aAttributes->getValueNoBoundsCheck(i).ToString(value);
if (aNs == kNameSpaceID_XHTML &&
nsHtml5Atoms::a == aName &&
nsHtml5Atoms::name == localName) {
// This is an HTML5-incompliant Geckoism.
// Remove when fixing bug 582361
- NS_ConvertUTF16toUTF8 cname(*(aAttributes->getValueNoBoundsCheck(i)));
+ NS_ConvertUTF16toUTF8 cname(value);
NS_ConvertUTF8toUTF16 uv(nsUnescape(cname.BeginWriting()));
newContent->SetAttr(nsuri,
localName,
@@ -431,7 +432,6 @@ nsHtml5TreeOperation::CreateElement(int32_t aNs,
uv,
false);
} else {
- nsString& value = *(aAttributes->getValueNoBoundsCheck(i));
newContent->SetAttr(nsuri,
localName,
prefix,
diff --git a/parser/html/nsHtml5UTF16Buffer.cpp b/parser/html/nsHtml5UTF16Buffer.cpp
index f70365ce4..0d6870bc4 100644
--- a/parser/html/nsHtml5UTF16Buffer.cpp
+++ b/parser/html/nsHtml5UTF16Buffer.cpp
@@ -29,7 +29,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5UTF16Buffer.h b/parser/html/nsHtml5UTF16Buffer.h
index cf810e124..c94245f74 100644
--- a/parser/html/nsHtml5UTF16Buffer.h
+++ b/parser/html/nsHtml5UTF16Buffer.h
@@ -30,7 +30,7 @@
#include "nsIAtom.h"
#include "nsHtml5AtomTable.h"
-#include "nsString.h"
+#include "nsHtml5String.h"
#include "nsNameSpaceManager.h"
#include "nsIContent.h"
#include "nsTraceRefcnt.h"
diff --git a/parser/html/nsHtml5ViewSourceUtils.cpp b/parser/html/nsHtml5ViewSourceUtils.cpp
index 4dd33fc05..b2f635bff 100644
--- a/parser/html/nsHtml5ViewSourceUtils.cpp
+++ b/parser/html/nsHtml5ViewSourceUtils.cpp
@@ -6,32 +6,35 @@
#include "nsHtml5ViewSourceUtils.h"
#include "nsHtml5AttributeName.h"
#include "mozilla/Preferences.h"
-#include "mozilla/UniquePtr.h"
+#include "nsHtml5String.h"
// static
nsHtml5HtmlAttributes*
nsHtml5ViewSourceUtils::NewBodyAttributes()
{
nsHtml5HtmlAttributes* bodyAttrs = new nsHtml5HtmlAttributes(0);
- auto id = MakeUnique<nsString>(NS_LITERAL_STRING("viewsource"));
- bodyAttrs->addAttribute(nsHtml5AttributeName::ATTR_ID, id.release(), -1);
+ nsHtml5String id = nsHtml5Portability::newStringFromLiteral("viewsource");
+ bodyAttrs->addAttribute(nsHtml5AttributeName::ATTR_ID, id, -1);
- auto klass = MakeUnique<nsString>();
+ nsString klass;
if (mozilla::Preferences::GetBool("view_source.wrap_long_lines", true)) {
- klass->Append(NS_LITERAL_STRING("wrap "));
+ klass.Append(NS_LITERAL_STRING("wrap "));
}
if (mozilla::Preferences::GetBool("view_source.syntax_highlight", true)) {
- klass->Append(NS_LITERAL_STRING("highlight"));
+ klass.Append(NS_LITERAL_STRING("highlight"));
}
- if (!klass->IsEmpty()) {
- bodyAttrs->addAttribute(nsHtml5AttributeName::ATTR_CLASS, klass.release(), -1);
+ if (!klass.IsEmpty()) {
+ bodyAttrs->addAttribute(
+ nsHtml5AttributeName::ATTR_CLASS, nsHtml5String::FromString(klass), -1);
}
int32_t tabSize = mozilla::Preferences::GetInt("view_source.tab_size", 4);
if (tabSize > 0) {
- auto style = MakeUnique<nsString>(NS_LITERAL_STRING("-moz-tab-size: "));
- style->AppendInt(tabSize);
- bodyAttrs->addAttribute(nsHtml5AttributeName::ATTR_STYLE, style.release(), -1);
+ nsString style;
+ style.AssignASCII("-moz-tab-size: ");
+ style.AppendInt(tabSize);
+ bodyAttrs->addAttribute(
+ nsHtml5AttributeName::ATTR_STYLE, nsHtml5String::FromString(style), -1);
}
return bodyAttrs;
@@ -42,12 +45,12 @@ nsHtml5HtmlAttributes*
nsHtml5ViewSourceUtils::NewLinkAttributes()
{
nsHtml5HtmlAttributes* linkAttrs = new nsHtml5HtmlAttributes(0);
- nsString* rel = new nsString(NS_LITERAL_STRING("stylesheet"));
+ nsHtml5String rel = nsHtml5Portability::newStringFromLiteral("stylesheet");
linkAttrs->addAttribute(nsHtml5AttributeName::ATTR_REL, rel, -1);
- nsString* type = new nsString(NS_LITERAL_STRING("text/css"));
+ nsHtml5String type = nsHtml5Portability::newStringFromLiteral("text/css");
linkAttrs->addAttribute(nsHtml5AttributeName::ATTR_TYPE, type, -1);
- nsString* href = new nsString(
- NS_LITERAL_STRING("resource://gre-resources/viewsource.css"));
+ nsHtml5String href = nsHtml5Portability::newStringFromLiteral(
+ "resource://gre-resources/viewsource.css");
linkAttrs->addAttribute(nsHtml5AttributeName::ATTR_HREF, href, -1);
return linkAttrs;
}
diff --git a/security/manager/ssl/nsSTSPreloadList.errors b/security/manager/ssl/nsSTSPreloadList.errors
index 07c14c1f5..c1db31978 100644
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -1,43 +1,43 @@
0-1.party: could not connect to host
-0005.com: could not connect to host
+0005.com: did not receive HSTS header
0005aa.com: could not connect to host
0005pay.com: could not connect to host
000books.net: did not receive HSTS header
-00100010.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00100010.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
0010100.net: could not connect to host
-00120012.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-00130013.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-00140014.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-00150015.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-00160016.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-00180018.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-00190019.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00120012.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00130013.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00140014.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00150015.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00160016.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00180018.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00190019.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
00220022.net: could not connect to host
00330033.net: could not connect to host
-00334.vip: could not connect to host
+00334.vip: did not receive HSTS header
00370038.com: max-age too low: 0
0038088.com: max-age too low: 0
-00440044.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-00550055.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00440044.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00550055.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
00660066.net: could not connect to host
007-preisvergleich.de: did not receive HSTS header
-00770077.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00770077.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
00778899.com: could not connect to host
007kf.com: could not connect to host
007sascha.de: did not receive HSTS header
-0086286.com: did not receive HSTS header
00880088.net: could not connect to host
-00990099.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+00990099.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
00wbf.com: could not connect to host
-01-edu.org: could not connect to host
+01-edu.org: did not receive HSTS header
+010888a.com: did not receive HSTS header
01100010011001010111001101110100.com: could not connect to host
013028.com: did not receive HSTS header
016028.com: did not receive HSTS header
-016098.com: did not receive HSTS header
+016098.com: could not connect to host
016298.com: did not receive HSTS header
016328.com: did not receive HSTS header
019328.com: could not connect to host
-019398.com: did not receive HSTS header
+019398.com: could not connect to host
01electronica.com.ar: did not receive HSTS header
01media.fr: did not receive HSTS header
01seguridad.com.ar: did not receive HSTS header
@@ -50,12 +50,12 @@
023sec.com: could not connect to host
02607.com: could not connect to host
028718.com: did not receive HSTS header
-029978.com: did not receive HSTS header
+029978.com: could not connect to host
029inno.com: did not receive HSTS header
02dl.net: could not connect to host
02smh.com: could not connect to host
03-09-2016.wedding: could not connect to host
-0311buy.cn: did not receive HSTS header
+0311buy.cn: could not connect to host
035711630.xyz: could not connect to host
0380l.com: max-age too low: 0
040fit.nl: did not receive HSTS header
@@ -68,7 +68,7 @@
066318.com: did not receive HSTS header
066538.com: did not receive HSTS header
066718.com: did not receive HSTS header
-066928.com: could not connect to host
+066928.com: did not receive HSTS header
066938.com: could not connect to host
070709.net: could not connect to host
07733.win: did not receive HSTS header
@@ -79,8 +79,10 @@
078890.com: could not connect to host
0788yh.com: could not connect to host
0809yh.com: could not connect to host
-081638.com: did not receive HSTS header
-086628.com: did not receive HSTS header
+081638.com: could not connect to host
+085950.com: could not connect to host
+086628.com: could not connect to host
+08detaxe.fr: could not connect to host
09115.com: did not receive HSTS header
0999sfce.com: max-age too low: 0
0akarma.me: could not connect to host
@@ -91,22 +93,21 @@
0fl.com: did not receive HSTS header
0g.org.uk: could not connect to host
0i0.nl: could not connect to host
-0iz.net: could not connect to host
0o0.edu.pl: could not connect to host
0o0.ooo: could not connect to host
0p.no: did not receive HSTS header
0vi.org: could not connect to host
0vo.moe: could not connect to host
0w0.vc: could not connect to host
+0x0000.ml: could not connect to host
0x0a.net: could not connect to host
0x1337.eu: could not connect to host
0x44.net: could not connect to host
0x4b0c131e.pub: could not connect to host
-0x52.org: could not connect to host
0x539.be: did not receive HSTS header
0x539.pw: could not connect to host
0x5f3759df.cf: could not connect to host
-0x65.net: could not connect to host
+0x65.net: did not receive HSTS header
0x90.fi: could not connect to host
0x90.in: could not connect to host
0xa.in: did not receive HSTS header
@@ -114,6 +115,7 @@
0xb612.org: could not connect to host
0xcafec0.de: did not receive HSTS header
0xee.eu: could not connect to host
+0xf00.ch: could not connect to host
0yen.org: could not connect to host
1.0.0.1: max-age too low: 0
100086ll.com: max-age too low: 0
@@ -130,6 +132,7 @@
1017scribes.com: could not connect to host
1018hosting.nl: did not receive HSTS header
1022996493.rsc.cdn77.org: could not connect to host
+10365a.com: did not receive HSTS header
10414.org: could not connect to host
1049578.com: max-age too low: 0
1066.io: could not connect to host
@@ -143,12 +146,13 @@
10x.ooo: could not connect to host
10xiuxiu.com: could not connect to host
1100.so: could not connect to host
-110110110.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+110110110.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+111.one: could not connect to host
1116pay.com: did not receive HSTS header
-112112112.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-11221jz.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-113113113.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-118118118.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+112112112.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+11221jz.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+113113113.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+118118118.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
11bt.cc: did not receive HSTS header
11dzon.com: could not connect to host
11recruitment.com.au: did not receive HSTS header
@@ -158,6 +162,7 @@
123110.com: could not connect to host
1231212.com: did not receive HSTS header
123123q.com: did not receive HSTS header
+123123qq.com: did not receive HSTS header
123movies.fyi: could not connect to host
123pay.ir: did not receive HSTS header
123plons.nl: could not connect to host
@@ -172,13 +177,13 @@
127011-networks.ch: could not connect to host
1288366.com: could not connect to host
1288fc.com: could not connect to host
+12gotovo.com: did not receive HSTS header
12photos.eu: could not connect to host
12vpn.org: could not connect to host
12vpnchina.com: could not connect to host
130978.com: did not receive HSTS header
1325390854.com: max-age too low: 0
13318522.com: could not connect to host
-1359826938.rsc.cdn77.org: did not receive HSTS header
135vv.com: could not connect to host
138000.xyz: could not connect to host
13826145000.com: could not connect to host
@@ -186,26 +191,27 @@
1396.cc: could not connect to host
1396.net: did not receive HSTS header
13982407454.com: max-age too low: 0
-13th-dover.uk: could not connect to host
+1406304513.com: max-age too low: 0
1441805971.com: max-age too low: 0
-1481481.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1481481.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1481482.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1481482.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1481483.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1481483.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1481485.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1481485.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1481486.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481481.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481481.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481482.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481482.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481483.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481483.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481485.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481485.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1481486.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
1481486.net: could not connect to host
1536.cf: could not connect to host
+158306.com: could not connect to host
16164f.com: could not connect to host
163pwd.com: could not connect to host
166166.com: could not connect to host
1689886.com: did not receive HSTS header
168bet9.com: could not connect to host
-168bo9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-168bo9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+168bo9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+168bo9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
168esb.com: could not connect to host
168wcw.com: max-age too low: 0
16book.org: did not receive HSTS header
@@ -217,6 +223,7 @@
174.net.nz: could not connect to host
174343.com: could not connect to host
17hats.com: did not receive HSTS header
+182wh.com: could not connect to host
1834202695.com: max-age too low: 0
18680288.com: max-age too low: 0
188522.com: did not receive HSTS header
@@ -248,17 +255,17 @@
1atic.com: could not connect to host
1b1.pl: could not connect to host
1co-jp.net: did not receive HSTS header
-1cool.vip: could not connect to host
1cover.com: could not connect to host
-1day1ac.red: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-1db77.cn: could not connect to host
+1cover.com.au: did not receive HSTS header
+1day1ac.red: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+1db77.cn: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
1er-secours.ch: could not connect to host
-1europlan.nl: could not connect to host
1f412.space: did not receive HSTS header
1gsoft.com: could not connect to host
1item.co.il: did not receive HSTS header
1k8b.com: could not connect to host
1km.ro: did not receive HSTS header
+1lord1faith.com: could not connect to host
1nian.vip: could not connect to host
1para.net: could not connect to host
1plus-agency.com: did not receive HSTS header
@@ -272,7 +279,6 @@
1ststop.co.uk: did not receive HSTS header
1three1.net: did not receive HSTS header
1upinternet.com: could not connect to host
-1volcano.ru: could not connect to host
1xcess.com: did not receive HSTS header
1years.cc: could not connect to host
2-cpu.de: could not connect to host
@@ -280,7 +286,7 @@
2001617.com: max-age too low: 0
200fcw.com: could not connect to host
2018.wales: could not connect to host
-20188088.com: could not connect to host
+20188088.com: did not receive HSTS header
20190204.com: max-age too low: 0
20190508.com: max-age too low: 0
2019318.com: max-age too low: 0
@@ -303,7 +309,7 @@
232192.com: could not connect to host
2324275338.com: max-age too low: 0
2333.press: could not connect to host
-23333.link: could not connect to host
+2333666.xyz: could not connect to host
233abc.com: could not connect to host
233hugo.com: could not connect to host
233ss.net: could not connect to host
@@ -312,15 +318,16 @@
247a.co.uk: could not connect to host
247quickbooks.com: did not receive HSTS header
2488.ch: did not receive HSTS header
+2495dentalimplants.com: could not connect to host
249cq.com: could not connect to host
24hourpaint.com: could not connect to host
24hrs.shopping: could not connect to host
24items.com: did not receive HSTS header
24kbet.com: could not connect to host
24pcr.com: could not connect to host
+24seven.pk: did not receive HSTS header
24sihu.com: could not connect to host
-24timeravis.dk: did not receive HSTS header
-2566335.xyz: could not connect to host
+2566335.xyz: did not receive HSTS header
2569abc.com: max-age too low: 0
256k.me: could not connect to host
258da.com: did not receive HSTS header
@@ -330,10 +337,9 @@
2692646200.com: max-age too low: 0
27728522.com: could not connect to host
2859cc.com: could not connect to host
-286.com: did not receive HSTS header
+286.com: could not connect to host
288da.com: did not receive HSTS header
29227.com: could not connect to host
-293921.com: could not connect to host
2941798824.com: max-age too low: 0
297computers.com: could not connect to host
298da.com: did not receive HSTS header
@@ -370,18 +376,20 @@
304squadron.org: did not receive HSTS header
3054056550.com: max-age too low: 0
308xsj.com: max-age too low: 0
+30hzcollective.com: could not connect to host
30yearmortgagerates.net: could not connect to host
3133780x.com: did not receive HSTS header
314166.com: could not connect to host
+315422.com: could not connect to host
319k3.com: could not connect to host
31tv.ru: did not receive HSTS header
-321666365.com: did not receive HSTS header
32ph.com: could not connect to host
330.net: could not connect to host
3333yh.com: did not receive HSTS header
33445.com: could not connect to host
+3351p.com: could not connect to host
336yh.com: could not connect to host
-33836.com: did not receive HSTS header
+33836.com: could not connect to host
338da.com: could not connect to host
33drugstore.com: could not connect to host
33scc.com: could not connect to host
@@ -392,6 +400,7 @@
3555aa.com: could not connect to host
357601.com: could not connect to host
35792.de: could not connect to host
+360008888.com: max-age too low: 0
360gradus.com: did not receive HSTS header
360woodworking.com: could not connect to host
365.or.jp: could not connect to host
@@ -403,6 +412,7 @@
36565567.com: could not connect to host
36565678.com: could not connect to host
36565789.com: could not connect to host
+36565b.com: could not connect to host
365maya.com: did not receive HSTS header
368mibn.com: could not connect to host
3778vip.com: did not receive HSTS header
@@ -441,7 +451,7 @@
3807755.com: max-age too low: 0
3808822.com: max-age too low: 0
3808833.com: max-age too low: 0
-3808844.com: max-age too low: 0
+3808844.com: could not connect to host
3808855.com: max-age too low: 0
3808866.com: max-age too low: 0
3809900.com: max-age too low: 0
@@ -450,13 +460,17 @@
3809933.com: max-age too low: 0
3809944.com: max-age too low: 0
380zz8989.com: max-age too low: 0
+38138938.com: could not connect to host
3839.ca: could not connect to host
3880p.com: could not connect to host
38888msc.com: could not connect to host
+388da.com: could not connect to host
38blog.com: did not receive HSTS header
+38sihu.com: did not receive HSTS header
393335.ml: could not connect to host
39661463.com: max-age too low: 0
39sihu.com: could not connect to host
+3ank.in: could not connect to host
3candy.com: could not connect to host
3chit.cf: could not connect to host
3circlefunding.ch: did not receive HSTS header
@@ -472,6 +486,7 @@
3ik.us: could not connect to host
3lot.ru: could not connect to host
3mbo.de: did not receive HSTS header
+3niu168.com: did not receive HSTS header
3niu178.com: did not receive HSTS header
3niu66.com: did not receive HSTS header
3niu666.com: did not receive HSTS header
@@ -483,7 +498,6 @@
3sreporting.com: could not connect to host
3timegear.com: did not receive HSTS header
3trees.tk: could not connect to host
-3ve.com: did not receive HSTS header
3wecommerce.com.br: could not connect to host
3weekdietworks.com: did not receive HSTS header
3xx.link: could not connect to host
@@ -504,15 +518,17 @@
42entrepreneurs.fr: did not receive HSTS header
42ms.org: could not connect to host
42t.ru: could not connect to host
-432666365.com: did not receive HSTS header
439191.com: could not connect to host
-440hz-radio.de: did not receive HSTS header
+440hz-radio.de: could not connect to host
+440hz.radio: did not receive HSTS header
4444yh.com: did not receive HSTS header
-4455software.com: did not receive HSTS header
-448da.com: could not connect to host
+4455software.com: could not connect to host
+448da.com: did not receive HSTS header
44957.com: could not connect to host
44scc.com: could not connect to host
4500.co.il: did not receive HSTS header
+451.ooo: could not connect to host
+4553.com: did not receive HSTS header
4553vip.com: could not connect to host
45636565.com: could not connect to host
4679.space: could not connect to host
@@ -523,7 +539,7 @@
494k.com: did not receive HSTS header
4997777.com: could not connect to host
4999016.com: max-age too low: 0
-4azino777.ru: did not receive HSTS header
+4azino777.ru: could not connect to host
4baby.com.br: could not connect to host
4bike.eu: did not receive HSTS header
4cclothing.com: could not connect to host
@@ -546,6 +562,7 @@
4w-performers.link: could not connect to host
4web-hosting.com: could not connect to host
4winds.pt: did not receive HSTS header
+4x4tt.com: could not connect to host
5000yz.com: could not connect to host
500103.com: did not receive HSTS header
500108.com: did not receive HSTS header
@@ -562,6 +579,7 @@
500h500.com: did not receive HSTS header
500i500.com: did not receive HSTS header
500j500.com: did not receive HSTS header
+500k.nl: could not connect to host
500k500.com: did not receive HSTS header
500l500.com: did not receive HSTS header
500m500.com: did not receive HSTS header
@@ -588,8 +606,9 @@
518558.net: max-age too low: 0
518maicai.com: could not connect to host
51aifuli.com: could not connect to host
-5214889.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-5214889.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+51chiyu.com: could not connect to host
+5214889.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+5214889.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
5219.ml: could not connect to host
5225sf.com: could not connect to host
52b9.com: could not connect to host
@@ -598,17 +617,17 @@
52kb.net: did not receive HSTS header
52kb1.com: could not connect to host
52neptune.com: did not receive HSTS header
-5310899.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-5310899.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-532441.com: could not connect to host
+5310899.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+5310899.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
5356699.com: max-age too low: 0
+5364.com: could not connect to host
+54.sb: could not connect to host
540.co: did not receive HSTS header
-5432.cc: did not receive HSTS header
-543666365.com: did not receive HSTS header
+5432.cc: could not connect to host
545755.com: could not connect to host
54bf.com: could not connect to host
5518k3.com: could not connect to host
-5555yh.com: could not connect to host
+5555yh.com: did not receive HSTS header
555xl.com: could not connect to host
55639.com: did not receive HSTS header
55797.com: could not connect to host
@@ -616,7 +635,6 @@
55bt.cc: did not receive HSTS header
55scc.com: could not connect to host
566380.com: could not connect to host
-567666365.com: did not receive HSTS header
56877.com: could not connect to host
56ct.com: could not connect to host
575380.com: could not connect to host
@@ -624,6 +642,7 @@
578380.com: could not connect to host
57aromas.com: did not receive HSTS header
57he.com: did not receive HSTS header
+57wilkie.net: could not connect to host
585380.com: could not connect to host
58586668.com: max-age too low: 0
588007008.com: max-age too low: 0
@@ -633,7 +652,7 @@
593380.com: could not connect to host
595380.com: could not connect to host
598380.com: could not connect to host
-598598598.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+598598598.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
5986fc.com: could not connect to host
5beanskit.com: did not receive HSTS header
5conejos.com: did not receive HSTS header
@@ -654,12 +673,14 @@
621162.com: could not connect to host
626380.com: could not connect to host
62755.com: could not connect to host
-645ds.cn: could not connect to host
-645ds.com: did not receive HSTS header
+638566.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+645ds.cn: did not receive HSTS header
+645ds.com: could not connect to host
64616e.xyz: could not connect to host
64970.com: could not connect to host
64bitgaming.de: could not connect to host
64bitservers.net: could not connect to host
+6541166.com: could not connect to host
6556hd.com: could not connect to host
6556pk.com: could not connect to host
656088.com: did not receive HSTS header
@@ -669,27 +690,22 @@
6603p.com: did not receive HSTS header
66136.com: did not receive HSTS header
6616fc.com: could not connect to host
-66205.net: did not receive HSTS header
-666365app.com: did not receive HSTS header
-666365ios.com: did not receive HSTS header
-666365iosapp.com: did not receive HSTS header
+66205.net: could not connect to host
6666yh.com: did not receive HSTS header
-666omg.com: could not connect to host
6677.us: could not connect to host
668da.com: did not receive HSTS header
+66b.com: did not receive HSTS header
66bwf.com: could not connect to host
671660.com: could not connect to host
671990.com: could not connect to host
-6729.co: could not connect to host
672990.com: could not connect to host
6729dh.co: could not connect to host
6729dns.com: could not connect to host
-6729dz.com: did not receive HSTS header
+6729dz.com: could not connect to host
673660.com: could not connect to host
673990.com: could not connect to host
675660.com: could not connect to host
675990.com: could not connect to host
-67836565.com: could not connect to host
67899876.com: could not connect to host
679660.com: could not connect to host
680226.com: could not connect to host
@@ -699,47 +715,45 @@
692990.com: could not connect to host
692b8c32.de: could not connect to host
695660.com: could not connect to host
-6957.co: could not connect to host
-6957a.com: could not connect to host
-6957aa.com: could not connect to host
+6957a.com: did not receive HSTS header
+6957aa.com: did not receive HSTS header
6957apk.com: could not connect to host
6957app.com: could not connect to host
-6957b.com: could not connect to host
-6957bb.com: could not connect to host
-6957c.com: could not connect to host
-6957cc.com: could not connect to host
-6957d.com: could not connect to host
-6957dd.com: could not connect to host
+6957b.com: did not receive HSTS header
+6957bb.com: did not receive HSTS header
+6957c.com: did not receive HSTS header
+6957cc.com: did not receive HSTS header
+6957d.com: did not receive HSTS header
+6957dd.com: did not receive HSTS header
6957dh.co: could not connect to host
-6957e.com: could not connect to host
-6957ee.com: could not connect to host
-6957f.com: could not connect to host
-6957ff.com: could not connect to host
-6957g.com: could not connect to host
-6957gg.com: could not connect to host
-6957h.com: could not connect to host
-6957hh.com: could not connect to host
-6957i.com: could not connect to host
-6957ii.com: could not connect to host
+6957e.com: did not receive HSTS header
+6957ee.com: did not receive HSTS header
+6957f.com: did not receive HSTS header
+6957ff.com: did not receive HSTS header
+6957g.com: did not receive HSTS header
+6957gg.com: did not receive HSTS header
+6957h.com: did not receive HSTS header
+6957hh.com: did not receive HSTS header
+6957i.com: did not receive HSTS header
+6957ii.com: did not receive HSTS header
6957ipa.com: could not connect to host
-6957j.com: could not connect to host
-6957jj.com: could not connect to host
-6957k.com: could not connect to host
-6957kk.com: could not connect to host
-6957l.com: could not connect to host
-6957ll.com: could not connect to host
-6957m.com: could not connect to host
-6957n.com: could not connect to host
-6957nn.com: could not connect to host
-6957o.com: could not connect to host
-6957oo.com: could not connect to host
-6957p.com: could not connect to host
-6957r.com: could not connect to host
-6957rr.com: could not connect to host
-6957s.com: could not connect to host
-6957ss.com: could not connect to host
-6957sx.com: could not connect to host
-6957t.com: could not connect to host
+6957j.com: did not receive HSTS header
+6957jj.com: did not receive HSTS header
+6957k.com: did not receive HSTS header
+6957kk.com: did not receive HSTS header
+6957l.com: did not receive HSTS header
+6957ll.com: did not receive HSTS header
+6957m.com: did not receive HSTS header
+6957n.com: did not receive HSTS header
+6957nn.com: did not receive HSTS header
+6957o.com: did not receive HSTS header
+6957oo.com: did not receive HSTS header
+6957p.com: did not receive HSTS header
+6957r.com: did not receive HSTS header
+6957rr.com: did not receive HSTS header
+6957s.com: did not receive HSTS header
+6957ss.com: did not receive HSTS header
+6957t.com: did not receive HSTS header
6957tt.com: could not connect to host
6957u.com: could not connect to host
6957uu.com: could not connect to host
@@ -753,7 +767,8 @@
6957z.com: could not connect to host
6957zz.com: could not connect to host
695990.com: could not connect to host
-69759.com: did not receive HSTS header
+6969.us: could not connect to host
+69759.com: could not connect to host
69928.com: did not receive HSTS header
69mentor.com: could not connect to host
69square.com: could not connect to host
@@ -761,10 +776,21 @@
6pm.com: did not receive HSTS header
6t-montjoye.org: could not connect to host
6w6.la: could not connect to host
+6z0.cn: did not receive HSTS header
6z3.net: could not connect to host
7045.com: could not connect to host
715805617.com: max-age too low: 0
7177p.com: did not receive HSTS header
+71787777.com: could not connect to host
+71787m.com: did not receive HSTS header
+71787n.com: did not receive HSTS header
+71787o.com: did not receive HSTS header
+71787p.com: did not receive HSTS header
+71787t.com: did not receive HSTS header
+71787w.com: did not receive HSTS header
+71787x.com: did not receive HSTS header
+71787y.com: did not receive HSTS header
+71787z.com: did not receive HSTS header
7183.org: could not connect to host
721av.com: max-age too low: 2592000
724go.com: could not connect to host
@@ -776,12 +802,11 @@
755k3.com: could not connect to host
7570.com: could not connect to host
758global.com: could not connect to host
-758m.com: did not receive HSTS header
771122.tv: did not receive HSTS header
7717411.com: max-age too low: 0
7717a.com: did not receive HSTS header
7717p.com: did not receive HSTS header
-772244.net: did not receive HSTS header
+772244.net: could not connect to host
776573.net: did not receive HSTS header
7771p.com: did not receive HSTS header
7777av.co: could not connect to host
@@ -790,37 +815,41 @@
778da.com: did not receive HSTS header
77book.cn: could not connect to host
77dostavkaroz.ru: did not receive HSTS header
+780aa.com: could not connect to host
787k3.com: could not connect to host
788da.com: did not receive HSTS header
+7893.net: max-age too low: 86400
78936565.com: could not connect to host
789zr.com: could not connect to host
7f-wgg.cf: could not connect to host
+7f.is: could not connect to host
7ferfer.com.br: did not receive HSTS header
7links.com.br: did not receive HSTS header
7nw.eu: could not connect to host
7qly.com: could not connect to host
7thheavenrestaurant.com: could not connect to host
-7trade8.com: could not connect to host
+7trade8.com: did not receive HSTS header
+7x24servis.com: could not connect to host
8.net.co: could not connect to host
80036.com: could not connect to host
8003pay.com: could not connect to host
808.lv: did not receive HSTS header
+80887.cc: could not connect to host
808phone.net: could not connect to host
81000906.com: max-age too low: 0
818bwf.com: could not connect to host
+818da.com: did not receive HSTS header
81uc.com: could not connect to host
-8206688.com: did not receive HSTS header
-8211p.com: could not connect to host
-8212p.com: could not connect to host
-8213p.com: could not connect to host
-8215p.com: could not connect to host
+8206688.com: could not connect to host
+8214p.com: could not connect to host
+8216p.com: could not connect to host
826468.com: could not connect to host
826498.com: could not connect to host
82ty.com: could not connect to host
83969789.com: max-age too low: 0
83i.net: could not connect to host
850226.com: could not connect to host
-8522.com: max-age too low: 86400
+8522.com: could not connect to host
8522cn.com: did not receive HSTS header
8522hk.com: could not connect to host
8522top.com: could not connect to host
@@ -832,36 +861,52 @@
8649977.com: could not connect to host
8666213.com: max-age too low: 0
8688fc.com: could not connect to host
-86metro.ru: could not connect to host
8722.com: could not connect to host
87577.com: could not connect to host
-876666365.com: did not receive HSTS header
877027.com: could not connect to host
88.to: did not receive HSTS header
-8802p.com: could not connect to host
8818k3.com: could not connect to host
+8876007.com: did not receive HSTS header
+8876008.com: did not receive HSTS header
+8876009.com: did not receive HSTS header
8876138.com: did not receive HSTS header
+8876205.com: could not connect to host
+8876278.com: did not receive HSTS header
+8876289.com: could not connect to host
+8876290.com: did not receive HSTS header
+8876353.com: did not receive HSTS header
+8876389.com: did not receive HSTS header
8876520.com: could not connect to host
8876578.com: did not receive HSTS header
8876598.com: did not receive HSTS header
8876655.com: did not receive HSTS header
8876660.com: did not receive HSTS header
8876687.com: did not receive HSTS header
+8876764.com: could not connect to host
8876770.com: did not receive HSTS header
8876775.com: did not receive HSTS header
8876776.com: did not receive HSTS header
8876779.com: did not receive HSTS header
+8876808.com: did not receive HSTS header
8876818.com: did not receive HSTS header
-8876822.com: did not receive HSTS header
+8876822.com: could not connect to host
+8876832.com: did not receive HSTS header
+8876835.com: did not receive HSTS header
8876838.com: did not receive HSTS header
8876858.com: did not receive HSTS header
+8876859.com: did not receive HSTS header
8876866.com: did not receive HSTS header
+8876878.com: did not receive HSTS header
8876879.com: did not receive HSTS header
8876881.com: did not receive HSTS header
8876882.com: did not receive HSTS header
8876883.com: did not receive HSTS header
8876898.com: did not receive HSTS header
8876900.com: did not receive HSTS header
+8876955.com: did not receive HSTS header
+8876979.com: did not receive HSTS header
+8876987.com: did not receive HSTS header
+8876989.com: did not receive HSTS header
8876991.com: did not receive HSTS header
8876992.com: did not receive HSTS header
8876996.com: did not receive HSTS header
@@ -876,7 +921,7 @@
8880083.com: did not receive HSTS header
8880100.com: did not receive HSTS header
8884553.com: could not connect to host
-88851333.com: could not connect to host
+888666pj.com: could not connect to host
8886737.com: did not receive HSTS header
8886739.com: did not receive HSTS header
8886793.com: did not receive HSTS header
@@ -884,7 +929,7 @@
8886860.com: did not receive HSTS header
8887999.com: did not receive HSTS header
8888av.co: could not connect to host
-8888esb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8888esb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
8888yh.com: did not receive HSTS header
8889457.com: did not receive HSTS header
8889458.com: did not receive HSTS header
@@ -910,19 +955,19 @@
88d.com: could not connect to host
88laohu.cc: could not connect to host
88laohu.com: could not connect to host
-8901178.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8901178.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8910899.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8910899.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8917168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8917168.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8917818.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8917818.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8951889.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8951889.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8901178.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8901178.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8910899.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8910899.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8917168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8917168.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8917818.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8917818.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8951889.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8951889.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
8989k3.com: could not connect to host
-8992088.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-8992088.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8992088.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+8992088.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
89955.com: could not connect to host
899699.com: did not receive HSTS header
89he.com: could not connect to host
@@ -930,9 +975,13 @@
8ackprotect.com: did not receive HSTS header
8azino777.ru: did not receive HSTS header
8ballbombom.uk: could not connect to host
+8da188.com: did not receive HSTS header
8da2017.com: did not receive HSTS header
8da2018.com: could not connect to host
+8da222.com: did not receive HSTS header
8da88.com: could not connect to host
+8da999.com: did not receive HSTS header
+8dabet.com: could not connect to host
8hrs.net: could not connect to host
8mpay.com: could not connect to host
8pecxstudios.com: could not connect to host
@@ -961,38 +1010,20 @@
9181187.com: could not connect to host
9181189.com: could not connect to host
9182289.com: could not connect to host
+918dp.com: could not connect to host
918yy.com: did not receive HSTS header
919093590.com: max-age too low: 0
91966.com: did not receive HSTS header
-919945.com: did not receive HSTS header
+919945.com: could not connect to host
91dh.cc: could not connect to host
91lt.info: did not receive HSTS header
91tianmi.com: could not connect to host
922.be: could not connect to host
-9297a.com: could not connect to host
-9297b.com: could not connect to host
-9297c.com: could not connect to host
-9297d.com: could not connect to host
+9297.com: did not receive HSTS header
9297dh.co: could not connect to host
9297e.com: did not receive HSTS header
-9297f.com: could not connect to host
-9297g.com: could not connect to host
9297hd.co: could not connect to host
-9297i.com: could not connect to host
-9297j.com: could not connect to host
-9297k.com: could not connect to host
-9297l.com: could not connect to host
-9297m.com: could not connect to host
-9297o.com: could not connect to host
9297p.com: did not receive HSTS header
-9297q.com: could not connect to host
-9297r.com: could not connect to host
-9297s.com: could not connect to host
-9297u.com: could not connect to host
-9297v.com: could not connect to host
-9297w.com: could not connect to host
-9297x.com: could not connect to host
-9297z.com: could not connect to host
92bmh.com: did not receive HSTS header
944cq.com: did not receive HSTS header
9454.com: could not connect to host
@@ -1005,17 +1036,15 @@
9617818.net: could not connect to host
961cq.com: could not connect to host
9651678.ru: could not connect to host
-9696178.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-9696178.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-9728.com: could not connect to host
+9696178.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+9696178.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
9728dh.co: could not connect to host
9728hd.co: did not receive HSTS header
97bros.com: did not receive HSTS header
98198823.com: max-age too low: 0
-9822.bz: did not receive HSTS header
+9822.bz: could not connect to host
9822.com: did not receive HSTS header
9822.info: did not receive HSTS header
-987666365.com: did not receive HSTS header
987987.com: did not receive HSTS header
989868888.com: max-age too low: 0
98laba.com: could not connect to host
@@ -1025,9 +1054,10 @@
99511.fi: did not receive HSTS header
99599.net: could not connect to host
99818adc.com: max-age too low: 0
+9998722.com: could not connect to host
99buffets.com: could not connect to host
99wxt.com: could not connect to host
-9bingo.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+9bingo.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
9hosts.net: could not connect to host
9jajuice.com: could not connect to host
9jatrust.com: could not connect to host
@@ -1041,6 +1071,7 @@
a-bm.de: did not receive HSTS header
a-intel.com: did not receive HSTS header
a-ix.net: could not connect to host
+a-little-linux-box.at: did not receive HSTS header
a-plus.space: could not connect to host
a-pro-pos.info: did not receive HSTS header
a-rickroll-n.pw: could not connect to host
@@ -1048,24 +1079,29 @@ a-shafaat.ir: did not receive HSTS header
a-starbouncycastles.co.uk: could not connect to host
a-theme.com: could not connect to host
a1-autopartsglasgow.com: could not connect to host
+a122.cc: could not connect to host
a1798.com: could not connect to host
a1972894570.com: max-age too low: 0
a19840925.com: max-age too low: 0
+a1moldsolutions.com: could not connect to host
a1scubastore.com: did not receive HSTS header
a200k.xyz: did not receive HSTS header
a2c-co.net: could not connect to host
a2it.gr: did not receive HSTS header
+a2os.club: could not connect to host
a3.pm: did not receive HSTS header
a3workshop.swiss: could not connect to host
+a632079.me: could not connect to host
a666l.com: max-age too low: 0
a6957.com: could not connect to host
a8q.org: could not connect to host
a9c.co: could not connect to host
aa43d.cn: could not connect to host
-aa6688.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+aa6688.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
aa6957.com: could not connect to host
aa753159.com: max-age too low: 0
aa7733.com: could not connect to host
+aaa-racing.com: did not receive HSTS header
aacfree.com: could not connect to host
aaeblog.com: did not receive HSTS header
aaeblog.net: did not receive HSTS header
@@ -1073,27 +1109,27 @@ aaeblog.org: did not receive HSTS header
aaex.cloud: did not receive HSTS header
aagetransport.no: could not connect to host
aanbieders.ga: did not receive HSTS header
-aandeautobody.com: could not connect to host
+aandeautobody.com: did not receive HSTS header
aaoo.net: could not connect to host
aapp.space: could not connect to host
aardvarksolutions.co.za: did not receive HSTS header
aariefhaafiz.com: could not connect to host
aaron-gustafson.com: did not receive HSTS header
-aaron.cm: did not receive HSTS header
+aaron-schaal.de: could not connect to host
+aaron.cm: could not connect to host
aaron.xin: could not connect to host
-aaronburt.co.uk: did not receive HSTS header
+aaronfurtado.com: could not connect to host
aaronmcguire.me: did not receive HSTS header
-aaronsilber.me: did not receive HSTS header
aarvinproperties.com: could not connect to host
ab-bauservice-berlin.de: did not receive HSTS header
-abacus-events.co.uk: could not connect to host
-abacustech.co.jp: could not connect to host
+abacus-events.co.uk: did not receive HSTS header
+abaev.uk: could not connect to host
abareplace.com: did not receive HSTS header
abasalehngo.com: could not connect to host
abasky.net: could not connect to host
abbas.ch: could not connect to host
abborsjo.fi: did not receive HSTS header
-abbotsparties.co.uk: did not receive HSTS header
+abbotsparties.co.uk: could not connect to host
abbradar.net: did not receive HSTS header
abc9981.com: max-age too low: 0
abcdentalcare.com: did not receive HSTS header
@@ -1105,8 +1141,9 @@ abearofsoap.com: could not connect to host
abecodes.net: could not connect to host
abeestrada.com: did not receive HSTS header
abeontech.com: could not connect to host
-aberdeenalmeras.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+aberdeenalmeras.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
abhibhat.com: could not connect to host
+abi-2017.tk: could not connect to host
abi-fvs.de: could not connect to host
abigailstark.com: could not connect to host
abilitylist.org: did not receive HSTS header
@@ -1126,17 +1163,20 @@ about.ge: did not receive HSTS header
aboutmyip.info: did not receive HSTS header
aboutyou-deals.de: could not connect to host
abraxan.pro: could not connect to host
+abrilect.com: could not connect to host
absimple.ca: did not receive HSTS header
absinthium.ch: could not connect to host
absolutehaitian.com: did not receive HSTS header
absolutewaterproofingsolutions.com: did not receive HSTS header
abstractbarista.com: could not connect to host
+abstraction21.com: could not connect to host
+abstudio.de: did not receive HSTS header
abt.de: did not receive HSTS header
abtom.de: did not receive HSTS header
+abublog.com: did not receive HSTS header
abury.fr: could not connect to host
-abury.me: did not receive HSTS header
+abury.me: could not connect to host
abyssgaming.eu: could not connect to host
-ac-town.com: could not connect to host
acabadosboston.com: could not connect to host
academialowcost.com.br: did not receive HSTS header
academicenterprise.org: did not receive HSTS header
@@ -1153,23 +1193,26 @@ accelight.co.jp: did not receive HSTS header
accelight.jp: did not receive HSTS header
access-sofia.org: did not receive HSTS header
accessibility.gov: did not receive HSTS header
+accessmy.net: did not receive HSTS header
acchikocchi.org: did not receive HSTS header
accolade.com.br: could not connect to host
accoun.technology: could not connect to host
accounts-p.com: did not receive HSTS header
accountsuspended.club: could not connect to host
+accredit.ly: max-age too low: 86400
accuritconsulting.com: did not receive HSTS header
accuritpresence.com: did not receive HSTS header
accwing.com: could not connect to host
ace-aegon.cloud: could not connect to host
ace.media: did not receive HSTS header
aceadvisory.biz: did not receive HSTS header
-acecerts.co.uk: did not receive HSTS header
acedog.co: max-age too low: 0
-acevik.de: could not connect to host
+acen.eu: could not connect to host
+acerislaw.com: did not receive HSTS header
+acevik.de: did not receive HSTS header
acfo.org: did not receive HSTS header
-acg.mn: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-acg.sb: did not receive HSTS header
+acg.mn: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+acg.sb: could not connect to host
acg1080.com: did not receive HSTS header
acg18.us: max-age too low: 0
acgaudio.com: could not connect to host
@@ -1181,12 +1224,13 @@ achow101.com: did not receive HSTS header
achterhoekseveiligheidsbeurs.nl: could not connect to host
acidbin.co: did not receive HSTS header
acisonline.net: did not receive HSTS header
+acklandstainless.com.au: did not receive HSTS header
acksoft.fr: did not receive HSTS header
acksoftdemo.fr: did not receive HSTS header
-acl.ink: could not connect to host
acoffeeshops.com: could not connect to host
acorns.com: did not receive HSTS header
-acorntreecare.com: could not connect to host
+acoshift.com: did not receive HSTS header
+acoshift.me: did not receive HSTS header
acpinformatique.fr: could not connect to host
acr.im: could not connect to host
acraft.org: could not connect to host
@@ -1197,14 +1241,13 @@ acroso.me: did not receive HSTS header
across.ml: could not connect to host
acrossgw.com: could not connect to host
acs-chantal.com: did not receive HSTS header
-acsihostingsolutions.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+acsihostingsolutions.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
acslimited.co.uk: did not receive HSTS header
actc81.fr: did not receive HSTS header
actilove.ch: could not connect to host
actiontowingroundrock.com: did not receive HSTS header
activateplay.com: did not receive HSTS header
active-escape.com: could not connect to host
-activeclearweb.com: could not connect to host
activeweb.top: could not connect to host
activistasconstructivos.org: did not receive HSTS header
activitesaintnicaise.org: could not connect to host
@@ -1213,10 +1256,10 @@ actorsroom.com: could not connect to host
actu-film.com: max-age too low: 0
actu-medias.com: did not receive HSTS header
actualite-videos.com: could not connect to host
-actuatemedia.com: did not receive HSTS header
acupofsalt.tv: could not connect to host
+acupunturamadrid.xyz: could not connect to host
acuve.jp: could not connect to host
-acwcerts.co.uk: did not receive HSTS header
+acyume.com: could not connect to host
ad-disruptio.fr: could not connect to host
ada.is: max-age too low: 2592000
adajwells.me: could not connect to host
@@ -1232,7 +1275,6 @@ adamsfoundationrepair.com: did not receive HSTS header
adamwallington.co.uk: could not connect to host
adamwilcox.org: did not receive HSTS header
adamwk.com: did not receive HSTS header
-adaptiveicons.com: could not connect to host
adastra.re: could not connect to host
adblock.ovh: could not connect to host
adboos.com: could not connect to host
@@ -1242,7 +1284,7 @@ addvocate.com: could not connect to host
adec-emsa.ae: could not connect to host
adelaides.com: did not receive HSTS header
adelevie.com: could not connect to host
-adelianz.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+adelianz.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
adelinlydia-coach.com: did not receive HSTS header
adequatetechnology.com: could not connect to host
aderal.io: could not connect to host
@@ -1252,16 +1294,17 @@ adhigamindia.com: could not connect to host
adhoc.is: could not connect to host
adhosting.nl: did not receive HSTS header
adhs-chaoten.net: could not connect to host
+adidasrunningpartners.com: could not connect to host
adigitali.biz: did not receive HSTS header
adindexr.com: could not connect to host
adint.net: could not connect to host
adiponectinsupplement.info: did not receive HSTS header
adiponectinsupplement.net: did not receive HSTS header
adlerweb.info: did not receive HSTS header
-adm-sarov.ru: could not connect to host
admin-forms.co.uk: did not receive HSTS header
admin-numerique.com: did not receive HSTS header
admin.google.com: did not receive HSTS header (error ignored - included regardless)
+admins.tech: did not receive HSTS header
adminwerk.com: did not receive HSTS header
adminwiki.fr: did not receive HSTS header
admitcard.co.in: could not connect to host
@@ -1274,13 +1317,14 @@ adoge.me: could not connect to host
adoll.ml: could not connect to host
adonairelogios.com.br: could not connect to host
adopteunsiteflash.com: could not connect to host
-adorade.ro: could not connect to host
adorai.tk: could not connect to host
adoriasoft.com: did not receive HSTS header
adprospb.com: did not receive HSTS header
adquisitio.de: did not receive HSTS header
adquisitio.in: could not connect to host
adrenaline-gaming.ru: could not connect to host
+adresults.com: did not receive HSTS header
+adresults.nl: did not receive HSTS header
adrianajewelry.my: could not connect to host
adriancohea.ninja: could not connect to host
adrianseo.ro: could not connect to host
@@ -1296,11 +1340,10 @@ aduthapa.com: could not connect to host
advaithnikhi.ml: could not connect to host
advaithnikhi.tk: could not connect to host
advanced-online.eu: could not connect to host
-advancedoneroofing.com: did not receive HSTS header
+advancedpestspecialists.com: did not receive HSTS header
advancedplasticsurgerycenter.com: did not receive HSTS header
advancedstudio.ro: could not connect to host
advelty.cz: did not receive HSTS header
-advenapay.com: could not connect to host
adventistdeploy.org: could not connect to host
adventureally.com: could not connect to host
adventures.de: max-age too low: 0
@@ -1309,14 +1352,16 @@ advertisemant.com: could not connect to host
advicepro.org.uk: did not receive HSTS header
adviespuntklokkenluiders.nl: could not connect to host
advocaten-avocats.be: did not receive HSTS header
-advocatenalkmaar.org: did not receive HSTS header
+advocatenalkmaar.org: could not connect to host
+adws.io: could not connect to host
adzie.xyz: could not connect to host
adzuna.co.uk: did not receive HSTS header
ae8601.com: could not connect to host
+ae86sb.com: could not connect to host
+ae86x.com: could not connect to host
aegialis.com: did not receive HSTS header
aegisinsight.com: did not receive HSTS header
aei-asc.edu.my: did not receive HSTS header
-aelisya.ch: did not receive HSTS header
aemoria.com: could not connect to host
aeon.wiki: could not connect to host
aep-digital.com: did not receive HSTS header
@@ -1336,29 +1381,30 @@ aevpn.org: could not connect to host
aeyoun.com: did not receive HSTS header
af-fotografie.net: did not receive HSTS header
af-internet.nl: did not receive HSTS header
-af-tech.cz: did not receive HSTS header
+afb24.de: did not receive HSTS header
afbeelding.im: could not connect to host
afbeeldinguploaden.nl: could not connect to host
-afcurgentcarelyndhurst.com: could not connect to host
afdkompakt.de: max-age too low: 86400
afeefzarapackages.com: did not receive HSTS header
affiliateroyale.com: did not receive HSTS header
affily.io: could not connect to host
affinity.vc: did not receive HSTS header
affloc.com: could not connect to host
-affordableblindsexpress.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+affordableblindsexpress.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
affordablebouncycastle.co.uk: did not receive HSTS header
affordableenergyadvocates.com: could not connect to host
affordablekilimanjaro.com: could not connect to host
aficotroceni.ro: did not receive HSTS header
afinterio.com: did not receive HSTS header
afiru.net: could not connect to host
-aflamtorrent.com: could not connect to host
+aflamtorrent.com: did not receive HSTS header
+aflowershop.ca: could not connect to host
afmchandler.com: could not connect to host
afmt.fr: did not receive HSTS header
afonso.io: did not receive HSTS header
afp548.tk: could not connect to host
afree.ir: did not receive HSTS header
+africankitchen.gallery: could not connect to host
africatravel.de: did not receive HSTS header
after.im: could not connect to host
afterskool.eu: could not connect to host
@@ -1368,6 +1414,8 @@ afvallendoeje.nu: could not connect to host
afyou.co.kr: could not connect to host
afzco.asia: did not receive HSTS header
ag-websolutions.de: did not receive HSTS header
+ag3131a.com: could not connect to host
+ag6211.com: could not connect to host
agalaxyfarfaraway.co.uk: could not connect to host
agatheetraphael.fr: could not connect to host
agbremen.de: could not connect to host
@@ -1380,7 +1428,6 @@ agenceactiv.immo: did not receive HSTS header
agenceklic.com: did not receive HSTS header
agencewebstreet.com: could not connect to host
agenciagriff.com: did not receive HSTS header
-agenciamdg.com.br: could not connect to host
agencymanager.be: could not connect to host
agendazilei.com: did not receive HSTS header
agent6.com.au: did not receive HSTS header
@@ -1396,19 +1443,21 @@ agiserv.fr: could not connect to host
agonswim.com: did not receive HSTS header
agoravm.tk: could not connect to host
agostinhoenascimento.com.br: could not connect to host
+agotnes.com: could not connect to host
agouraexteriorlighting.com: could not connect to host
agowa.eu: did not receive HSTS header
-agowa338.de: did not receive HSTS header
agracan.com: did not receive HSTS header
agrafix.design: did not receive HSTS header
+agrajag.nl: did not receive HSTS header
agrias.com.br: did not receive HSTS header
-agricolo.ch: could not connect to host
agrikulturchic.com: could not connect to host
agrilinks.org: did not receive HSTS header
agrimap.com: did not receive HSTS header
+agro-forestry.net: could not connect to host
agro-id.gov.ua: did not receive HSTS header
agro.rip: could not connect to host
agroglass.com.br: did not receive HSTS header
+agroline.by: could not connect to host
agtv.com.br: did not receive HSTS header
ahabingo.com: did not receive HSTS header
ahd1234.com: max-age too low: 0
@@ -1425,20 +1474,22 @@ ahwatukeefoothillsmontessori.com: could not connect to host
ai.je: did not receive HSTS header
ai00.vip: could not connect to host
ai1989.com: could not connect to host
+aia.de: did not receive HSTS header
aibaoyou.com: could not connect to host
aibsoftware.mx: could not connect to host
-aicial.com: could not connect to host
+aicial.com: did not receive HSTS header
aicial.com.au: could not connect to host
+aicv.club: could not connect to host
aidanwoods.com: did not receive HSTS header
aidarikako.com: did not receive HSTS header
aide-admin.com: did not receive HSTS header
aide-valais.ch: could not connect to host
-aidikofflaw.com: could not connect to host
+aidikofflaw.com: did not receive HSTS header
aiesecarad.ro: could not connect to host
-aiforsocialmedia.com: could not connect to host
aifreeze.ru: could not connect to host
aify.eu: could not connect to host
aiheisi.com: could not connect to host
+aiicy.org: could not connect to host
aikenorganics.com: could not connect to host
aiki.tk: did not receive HSTS header
aim-consultants.com: did not receive HSTS header
@@ -1447,26 +1498,28 @@ aimrom.org: could not connect to host
ainishitou.com: max-age too low: 0
ainrb.com: could not connect to host
ainutrition.co.uk: did not receive HSTS header
-aioboot.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+aioboot.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
aip-marine.com: could not connect to host
aiphyron.com: could not connect to host
aiponne.com: could not connect to host
airbly.com: did not receive HSTS header
-airconsalberton.co.za: did not receive HSTS header
-airconsboksburg.co.za: did not receive HSTS header
-airconsfourways.co.za: did not receive HSTS header
-airconsmidrand.co.za: did not receive HSTS header
-airconsrandburg.co.za: did not receive HSTS header
-airconssandton.co.za: did not receive HSTS header
+airconsalberton.co.za: could not connect to host
+airconsboksburg.co.za: could not connect to host
+airconsfourways.co.za: could not connect to host
+airconsmidrand.co.za: could not connect to host
+airconsrandburg.co.za: could not connect to host
+airconssandton.co.za: could not connect to host
+airductcleaning-fresno.com: could not connect to host
airedaleterrier.com.br: could not connect to host
airlea.com: could not connect to host
airlinecheckins.com: did not receive HSTS header
+airlock.com: did not receive HSTS header
airmazinginflatables.com: could not connect to host
-airportlimototoronto.com: did not receive HSTS header
airproto.com: did not receive HSTS header
airpurifierproductsonline.com: could not connect to host
airsick.guide: did not receive HSTS header
airtimefranchise.com: did not receive HSTS header
+airware.com: did not receive HSTS header
aishnair.com: could not connect to host
aisle3.space: could not connect to host
aisr.nl: did not receive HSTS header
@@ -1482,12 +1535,12 @@ ajibot.com: did not receive HSTS header
ajmahal.com: could not connect to host
ajouin.com: could not connect to host
ajw-group.com: did not receive HSTS header
-ak47-miyamoto.spdns.org: did not receive HSTS header
aka.my: did not receive HSTS header
akazakov.info: could not connect to host
akboy.pw: could not connect to host
akclinics.org: did not receive HSTS header
akcounselingservices.com: did not receive HSTS header
+akelius.de: did not receive HSTS header
akerek.hu: could not connect to host
akgundemirbas.com: could not connect to host
akhilindurti.com: could not connect to host
@@ -1500,37 +1553,42 @@ akita-stream.com: could not connect to host
akkadia.cc: could not connect to host
akoch.net: could not connect to host
akombakom.net: could not connect to host
-akoww.de: could not connect to host
-akracing.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+akoofs.com: did not receive HSTS header
+akovana.com: max-age too low: 0
+akracing.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
akritikos.info: could not connect to host
akselimedia.fi: could not connect to host
+akshay.in.eu.org: could not connect to host
akstudentsfirst.org: could not connect to host
aktan.com.br: could not connect to host
aktivist.in: did not receive HSTS header
akul.co.in: could not connect to host
+akupunktur-akupunktoer.dk: did not receive HSTS header
akustik.tech: could not connect to host
akyildiz.net: did not receive HSTS header
al-f.net: did not receive HSTS header
al-shami.net: could not connect to host
-alamancetv.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-alandoyle.com: did not receive HSTS header
+alainodea.com: could not connect to host
+alamancetv.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+alamgir.works: did not receive HSTS header
alanlee.net: could not connect to host
alanrickmanflipstable.com: did not receive HSTS header
alanya.law: did not receive HSTS header
alariel.de: did not receive HSTS header
alarme-gps.ch: could not connect to host
alarmegps.ch: could not connect to host
-alarmsystemreviews.com: did not receive HSTS header
+alarmsystemreviews.com: could not connect to host
alasta.info: could not connect to host
alauda-home.de: could not connect to host
alaundeil.xyz: could not connect to host
-alaxyjewellers.co.za: did not receive HSTS header
+alaxyjewellers.co.za: could not connect to host
alb-flirt.de: did not receive HSTS header
+albanboye.info: did not receive HSTS header
albanien.guide: could not connect to host
alberguecimballa.es: could not connect to host
albertbogdanowicz.pl: did not receive HSTS header
albertify.xyz: could not connect to host
-albertonplumber24-7.co.za: did not receive HSTS header
+albertonplumber24-7.co.za: could not connect to host
albertopimienta.com: did not receive HSTS header
albinma.com: could not connect to host
albuic.tk: could not connect to host
@@ -1538,11 +1596,13 @@ alcantarafleuriste.com: did not receive HSTS header
alcatraz.online: did not receive HSTS header
alcazaar.com: could not connect to host
alchemia.co.il: did not receive HSTS header
+alcnutrition.com: could not connect to host
alcorao.org: could not connect to host
aldes.co.za: did not receive HSTS header
aldo-vandini.de: did not receive HSTS header
aldred.cloud: could not connect to host
aleax.me: could not connect to host
+alecel.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
alecvannoten.be: did not receive HSTS header
aledg.cl: did not receive HSTS header
alenan.org: could not connect to host
@@ -1551,6 +1611,7 @@ alessandro.pw: did not receive HSTS header
alessandroz.ddns.net: could not connect to host
alessandroz.pro: could not connect to host
alethearose.com: could not connect to host
+alexandercanton.com: could not connect to host
alexandermuetzel.de: did not receive HSTS header
alexandernorth.ch: could not connect to host
alexandre.sh: did not receive HSTS header
@@ -1562,6 +1623,7 @@ alexdodge.ca: did not receive HSTS header
alexfisherhealth.com.au: did not receive HSTS header
alexhaydock.co.uk: did not receive HSTS header
alexio.ml: could not connect to host
+alexisathlani.com: could not connect to host
alexischaussy.xyz: could not connect to host
alexismeza.com: could not connect to host
alexismeza.com.mx: could not connect to host
@@ -1574,6 +1636,8 @@ alexmak.net: did not receive HSTS header
alexmol.tk: could not connect to host
alexperry.io: could not connect to host
alexsinnott.me: did not receive HSTS header
+alexthayne.co.uk: could not connect to host
+alexvdveen.nl: could not connect to host
alexwilliams.tech: did not receive HSTS header
alfa24.pro: could not connect to host
alfaperfumes.com.br: could not connect to host
@@ -1581,17 +1645,20 @@ alfaponny.se: could not connect to host
alfirous.com: could not connect to host
alfredxing.com: did not receive HSTS header
algarmatic-automatismos.pt: could not connect to host
+algawell.com: did not receive HSTS header
algbee.com: could not connect to host
algebra-quiz.com: could not connect to host
algebraaec.com: did not receive HSTS header
algercounty.gov: did not receive HSTS header
alghaib.com: could not connect to host
+algoaware.eu: did not receive HSTS header
algofactory.de: could not connect to host
algorithmofsuccess.com: could not connect to host
alibababee.com: did not receive HSTS header
alibip.de: could not connect to host
alicialab.org: could not connect to host
alien.bz: did not receive HSTS header
+alienvision.com.br: could not connect to host
aliim.gdn: could not connect to host
alilialili.ga: could not connect to host
alinemaciel.adm.br: could not connect to host
@@ -1601,12 +1668,10 @@ alistairholland.me: did not receive HSTS header
alisync.com: could not connect to host
alittlebitcheeky.com: did not receive HSTS header
aliwebstore.com: could not connect to host
-aljammaz.holdings: could not connect to host
-aljaspod.net: could not connect to host
-aljmz.com: could not connect to host
+aljammaz.holdings: did not receive HSTS header
+aljmz.com: did not receive HSTS header
alkami.com: max-age too low: 0
alkamitech.com: max-age too low: 0
-alkel.info: did not receive HSTS header
all-subtitles.com: did not receive HSTS header
all.tf: could not connect to host
all4os.com: could not connect to host
@@ -1617,11 +1682,12 @@ allegro-inc.com: did not receive HSTS header
allemobieleproviders.nl: could not connect to host
allenosgood.com: could not connect to host
allerbestefreunde.de: did not receive HSTS header
+allesovertech.nl: could not connect to host
allfreelancers.su: did not receive HSTS header
allgrass.es: did not receive HSTS header
allgrass.net: did not receive HSTS header
alliance-compacts.com: did not receive HSTS header
-alliances-faq.de: could not connect to host
+alliances-faq.de: did not receive HSTS header
alligatorge.de: did not receive HSTS header
allinnote.com: could not connect to host
allinone-ranking150.com: did not receive HSTS header
@@ -1631,7 +1697,7 @@ allmbw.com: could not connect to host
allmebel.ru: did not receive HSTS header
allmystery.de: did not receive HSTS header
allo-symo.fr: did not receive HSTS header
-allods-zone.ru: did not receive HSTS header
+allods-zone.ru: could not connect to host
alloffice.com.ua: did not receive HSTS header
alloinformatique.net: could not connect to host
alloutatl.com: could not connect to host
@@ -1704,8 +1770,8 @@ alvis-audio.com: did not receive HSTS header
alvn.ga: could not connect to host
alwaysonssl.com: could not connect to host
alxpresentes.com.br: could not connect to host
-am3.se: could not connect to host
-am6118.com: could not connect to host
+alza.co.uk: did not receive HSTS header
+am5566m.com: could not connect to host
am8888.top: could not connect to host
amadilo.de: could not connect to host
amaforro.com: could not connect to host
@@ -1721,7 +1787,7 @@ amatzen.dk: did not receive HSTS header
amavis.org: did not receive HSTS header
amazing-gaming.fr: could not connect to host
amazingbouncycastles.co.uk: did not receive HSTS header
-amazingfloridagulfhomes.com: did not receive HSTS header
+amazingfloridagulfhomes.com: could not connect to host
amazinginflatables.co.uk: could not connect to host
ambiancestudio.ro: did not receive HSTS header
ambouncyhire.com: could not connect to host
@@ -1731,7 +1797,7 @@ amdouglas.uk: could not connect to host
amechancez.site: could not connect to host
amelandadventure.nl: did not receive HSTS header
amerhd.com: could not connect to host
-america250.gov: could not connect to host
+america250.gov: did not receive HSTS header
american-truck-simulator.de: could not connect to host
american-truck-simulator.net: could not connect to host
americanbio.com: did not receive HSTS header
@@ -1751,7 +1817,7 @@ ameza.com.mx: could not connect to host
ameza.io: could not connect to host
ameza.me: could not connect to host
ameza.net: could not connect to host
-amicimar.it: could not connect to host
+amicimar.it: did not receive HSTS header
amicsdelbus.com: did not receive HSTS header
amielle.com: did not receive HSTS header
amielucha.com: did not receive HSTS header
@@ -1761,7 +1827,7 @@ amilum.org: could not connect to host
amilx.com: could not connect to host
amilx.org: could not connect to host
amimoto-ami.com: did not receive HSTS header
-amin.ga: could not connect to host
+amin.ga: did not receive HSTS header
amin.one: could not connect to host
aminafrance.com: could not connect to host
amisharingstuff.com: could not connect to host
@@ -1772,6 +1838,7 @@ amleeds.co.uk: did not receive HSTS header
amlvfs.net: could not connect to host
ammoulianiapartments.com: did not receive HSTS header
amo-entreprise-et-commerce.fr: could not connect to host
+amok8.am: could not connect to host
amoory.com: could not connect to host
amorimendes.com.br: could not connect to host
amphibo.ly: could not connect to host
@@ -1783,6 +1850,7 @@ amtentertainments.co.uk: could not connect to host
amua.fr: did not receive HSTS header
amunoz.org: could not connect to host
amv-crm.ru: could not connect to host
+amyharrisonline.com: could not connect to host
amyrussellhair.com: could not connect to host
amzanalyzer.com: did not receive HSTS header
anabol.nl: could not connect to host
@@ -1807,20 +1875,22 @@ ancarda.net: could not connect to host
anchorgrounds.com: did not receive HSTS header
anchorinmarinainc.com: did not receive HSTS header
ancient-gates.de: could not connect to host
-ancientcraft.eu: did not receive HSTS header
+ancientcraft.eu: could not connect to host
ancientkarma.com: could not connect to host
andbraiz.com: did not receive HSTS header
andere-gedanken.net: did not receive HSTS header
anderskp.dk: did not receive HSTS header
anderslind.dk: could not connect to host
andiscyber.space: could not connect to host
+andoms.fi: did not receive HSTS header
andre-ballensiefen.de: could not connect to host
andreasanti.net: did not receive HSTS header
andreasbasurto.com: could not connect to host
andreasfritz-fotografie.de: could not connect to host
+andreashecht-blog.de: did not receive HSTS header
andreaskluge.eu: could not connect to host
andreasmuelhaupt.de: could not connect to host
-andreasr.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+andreasr.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
andreastoneman.com: could not connect to host
andrefaber.nl: did not receive HSTS header
andrei-coman.com: could not connect to host
@@ -1838,15 +1908,12 @@ andrewdaws.tv: could not connect to host
andrewhowden.com: did not receive HSTS header
andrewletson.com: could not connect to host
andrewmichaud.beer: could not connect to host
-andrewmichaud.com: could not connect to host
-andrewmichaud.me: could not connect to host
andrewrdaws.com: could not connect to host
andrewregan.me: could not connect to host
andrewtebert.com: did not receive HSTS header
andrewthelott.net: did not receive HSTS header
andrewvoce.com: did not receive HSTS header
andrewyg.net: could not connect to host
-andreypopp.com: could not connect to host
andrezadnik.com: did not receive HSTS header
android: could not connect to host
androidprosmart.com: could not connect to host
@@ -1855,9 +1922,11 @@ androidsphone.com: did not receive HSTS header
androled.fr: max-age too low: 5184000
andronika.net: could not connect to host
androoz.se: did not receive HSTS header
+androzoom.com: did not receive HSTS header
andso.cn: did not receive HSTS header
andyclark.io: could not connect to host
andycloud.dynu.net: could not connect to host
+andycraftz.eu: could not connect to host
andymartin.cc: could not connect to host
andymelichar.com: max-age too low: 0
andymoore.info: did not receive HSTS header
@@ -1878,8 +1947,9 @@ anghami.com: did not receive HSTS header
anglertanke.de: could not connect to host
anglictinatabor.cz: could not connect to host
angry-monk.com: could not connect to host
+angry.im: could not connect to host
angrydragonproductions.com: could not connect to host
-angrylab.com: did not receive HSTS header
+angrylab.com: could not connect to host
angryroute.com: could not connect to host
anguiao.com: did not receive HSTS header
aniaimichal.eu: could not connect to host
@@ -1894,6 +1964,7 @@ anime1.top: could not connect to host
anime1video.tk: could not connect to host
animeday.ml: could not connect to host
animesfusion.com.br: could not connect to host
+animesharp.com: could not connect to host
animurecs.com: did not receive HSTS header
aniplus.cf: could not connect to host
aniplus.gq: could not connect to host
@@ -1902,14 +1973,14 @@ anisekai.com: max-age too low: 2592000
anita-mukorom.hu: did not receive HSTS header
anitklib.ml: could not connect to host
anitube-nocookie.ch: could not connect to host
-anivar.net: could not connect to host
ankakaak.com: could not connect to host
ankaraprofesyonelnakliyat.com: did not receive HSTS header
ankaraprofesyonelnakliyat.com.tr: did not receive HSTS header
ankarayilmaznakliyat.com: did not receive HSTS header
ankarayucelnakliyat.com: did not receive HSTS header
ankenbrand.me: did not receive HSTS header
-ankya9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ankya9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+anlovegeek.net: did not receive HSTS header
anlp.top: could not connect to host
annabellaw.com: did not receive HSTS header
annafiore.com.br: could not connect to host
@@ -1926,12 +1997,15 @@ annsbouncycastles.com: could not connect to host
anoboy.org: did not receive HSTS header
anomaly.ws: did not receive HSTS header
anonboards.com: could not connect to host
+anonoriviera.com: did not receive HSTS header
anonrea.ch: could not connect to host
anonukradio.org: could not connect to host
anonymo.co.uk: could not connect to host
anonymo.uk: could not connect to host
anonymousstatecollegelulzsec.com: could not connect to host
+anopan.tk: could not connect to host
anorak.tech: could not connect to host
+another.ch: could not connect to host
anothermilan.net: could not connect to host
ansdell.info: could not connect to host
anseo.ninja: could not connect to host
@@ -1944,13 +2018,11 @@ ant.land: could not connect to host
antecim.fr: could not connect to host
antenasmundosat.com.br: did not receive HSTS header
anteprima.info: could not connect to host
-anthedesign.fr: did not receive HSTS header
anthenor.co.uk: could not connect to host
anthony-rouanet.com: did not receive HSTS header
anthonyaires.com: did not receive HSTS header
anthonyavon.com: could not connect to host
anthonycarbonaro.com: could not connect to host
-anthonyloop.com: did not receive HSTS header
anthro.id: could not connect to host
antibioticshome.com: max-age too low: 604800
antifraud.net.ru: could not connect to host
@@ -1966,6 +2038,7 @@ antoinemary.io: could not connect to host
antoineschaller.ch: did not receive HSTS header
antoniomarques.eu: did not receive HSTS header
antoniorequena.com.ve: max-age too low: 0
+antonok.com: could not connect to host
antons.io: did not receive HSTS header
antraxx.ee: could not connect to host
antscript.com: did not receive HSTS header
@@ -1979,7 +2052,7 @@ anypool.net: could not connect to host
anyprime.net: could not connect to host
anythingautowebster.com: did not receive HSTS header
anytonetech.com: did not receive HSTS header
-anyways.at: could not connect to host
+ao-dev.com: could not connect to host
aobogo.com: could not connect to host
aocast.info: could not connect to host
aoicprobationil.gov: could not connect to host
@@ -1998,7 +2071,7 @@ apadrinaunolivo.org: did not receive HSTS header
apaginastore.com.br: could not connect to host
aparaatti.org: could not connect to host
apartment-natik.fr: did not receive HSTS header
-apasaja.tech: could not connect to host
+apc.ec: did not receive HSTS header
apeasternpower.com: could not connect to host
aperture-laboratories.science: did not receive HSTS header
apethink.net: did not receive HSTS header
@@ -2020,7 +2093,7 @@ apkriver.com: could not connect to host
apl2bits.net: did not receive HSTS header
apmg-certified.com: did not receive HSTS header
apmg-cyber.com: did not receive HSTS header
-apmpproject.org: could not connect to host
+apmpproject.org: did not receive HSTS header
apnakliyat.com: did not receive HSTS header
apo-deutschland.biz: could not connect to host
apoil.org: could not connect to host
@@ -2037,14 +2110,13 @@ apotheke-ch.org: could not connect to host
app: could not connect to host
app-arena.com: did not receive HSTS header
app.manilla.com: could not connect to host
-app666365.com: did not receive HSTS header
apparels24.com: did not receive HSTS header
appart.ninja: could not connect to host
appcoins.io: did not receive HSTS header
appdb.cc: did not receive HSTS header
appdrinks.com: could not connect to host
appel-aide.ch: could not connect to host
-appeldorn.me: did not receive HSTS header
+appeldorn.me: could not connect to host
appengine.google.com: did not receive HSTS header (error ignored - included regardless)
appformacpc.com: did not receive HSTS header
appimlab.it: could not connect to host
@@ -2052,9 +2124,9 @@ apple-watch-zubehoer.de: could not connect to host
apple.ax: could not connect to host
applejacks-bouncy-castles.co.uk: could not connect to host
appleranch.com: could not connect to host
-applesana.es: could not connect to host
+applesana.es: did not receive HSTS header
applewatch.co.nz: did not receive HSTS header
-applez.xyz: could not connect to host
+applez.xyz: did not receive HSTS header
appliancerepairlosangeles.com: did not receive HSTS header
applic8.com: did not receive HSTS header
apply55gx.com: could not connect to host
@@ -2073,7 +2145,8 @@ apptoutou.com: could not connect to host
appuro.com: did not receive HSTS header
appxcrypto.com: did not receive HSTS header
aprendiendoforexhoy.com: could not connect to host
-aprpullmanportermuseum.org: could not connect to host
+aprpullmanportermuseum.org: did not receive HSTS header
+apt-one.com: did not receive HSTS header
aptitude9.com: could not connect to host
aqilacademy.com.au: could not connect to host
aqqrate.com: could not connect to host
@@ -2090,6 +2163,7 @@ aradulconteaza.ro: could not connect to host
aramado.com: did not receive HSTS header
aran.me.uk: could not connect to host
aranel.me: could not connect to host
+araraexpress.com.br: could not connect to host
arawaza.biz: could not connect to host
arawaza.info: could not connect to host
arboineuropa.nl: did not receive HSTS header
@@ -2097,9 +2171,10 @@ arboleda-hurtado.com: could not connect to host
arboworks.com: could not connect to host
arbu.eu: could not connect to host
arcadiaeng.com: did not receive HSTS header
-arcaea.net: did not receive HSTS header
+arcaea.net: could not connect to host
arcbit.io: could not connect to host
archematerial.com: did not receive HSTS header
+archerygearonline.com: did not receive HSTS header
archii.ca: did not receive HSTS header
architectdirect.nl: did not receive HSTS header
architecte-interieur.be: did not receive HSTS header
@@ -2111,6 +2186,7 @@ ardorlabs.se: could not connect to host
area3.org: could not connect to host
area536.com: did not receive HSTS header
areallyneatwebsite.com: could not connect to host
+arefidgetspinnersgay.com: could not connect to host
arent.kz: did not receive HSTS header
arenzanaphotography.com: could not connect to host
arewedubstepyet.com: could not connect to host
@@ -2125,7 +2201,6 @@ arifburhan.online: could not connect to host
arifp.me: could not connect to host
arimarie.com: could not connect to host
arinflatablefun.co.uk: could not connect to host
-arisevendor.net: could not connect to host
arislight.com: could not connect to host
aristilabs.com: did not receive HSTS header
aristocratps.com: did not receive HSTS header
@@ -2142,6 +2217,7 @@ arlatools.com: could not connect to host
arlen.io: could not connect to host
arlen.se: could not connect to host
arlet.click: could not connect to host
+arm-host.com: did not receive HSTS header
armazemdaminiatura.com.br: could not connect to host
armazemgourmetbrasil.com.br: did not receive HSTS header
armeni-jewellery.gr: did not receive HSTS header
@@ -2170,32 +2246,34 @@ aroundme.org: could not connect to host
arpa.ph: did not receive HSTS header
arpr.co: did not receive HSTS header
arrayify.com: could not connect to host
+arresttracker.com: could not connect to host
arrivedconsulting.com: could not connect to host
arrow-cloud.nl: could not connect to host
arrowfunction.com: could not connect to host
arrowgrove.com: could not connect to host
-arrowheadflats.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-arrowit.net: could not connect to host
+arrowheadflats.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
ars-design.net: could not connect to host
arsenal.ru: could not connect to host
arsk1.com: could not connect to host
+arswb.men: could not connect to host
art2web.net: could not connect to host
artansoft.com: could not connect to host
artaronquieres.com: did not receive HSTS header
artartefatos.com.br: could not connect to host
artbytik.ru: did not receive HSTS header
+arteequipamientos.com.uy: did not receive HSTS header
artegusto.ru: did not receive HSTS header
artemicroway.com.br: could not connect to host
-artemis.re: did not receive HSTS header
+artemis.re: could not connect to host
artesupra.com: did not receive HSTS header
-artetrama.com: did not receive HSTS header
-arthur.cn: did not receive HSTS header
+artetrama.com: max-age too low: 7889238
arti-group.ml: could not connect to host
articaexports.com: could not connect to host
-artifex21.com: did not receive HSTS header
-artifex21.fr: did not receive HSTS header
+artifex21.com: could not connect to host
+artifex21.fr: could not connect to host
+artificial.army: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
artiming.com: could not connect to host
-artisanhd.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+artisanhd.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
artisense.de: could not connect to host
artisphere.ch: did not receive HSTS header
artisticedgegranite.net: could not connect to host
@@ -2208,6 +2286,7 @@ artransparency.gov: did not receive HSTS header
artsinthevalley.net.au: did not receive HSTS header
artstopinc.com: did not receive HSTS header
arturkohut.com: could not connect to host
+arturrossa.de: could not connect to host
artyland.ru: could not connect to host
arvamus.eu: could not connect to host
arviksa.co.uk: could not connect to host
@@ -2223,10 +2302,11 @@ asasuou.pw: could not connect to host
asc16.com: could not connect to host
ascendprime.com: did not receive HSTS header
aschaefer.net: could not connect to host
+ascii.moe: could not connect to host
asdpress.cn: could not connect to host
-asdyx.de: max-age too low: 0
aseith.com: could not connect to host
aseko.gr: did not receive HSTS header
+asemanhotel.com: did not receive HSTS header
asepms.com: could not connect to host
asge-handel.de: did not receive HSTS header
ashastalent.com: could not connect to host
@@ -2239,36 +2319,38 @@ asian-archi.com.tw: did not receive HSTS header
asianbet77.co: did not receive HSTS header
asianbet77.net: did not receive HSTS header
asianodor.com: could not connect to host
-asirviablog.com: did not receive HSTS header
+asirviablog.com: could not connect to host
asisee.co.il: could not connect to host
+asisee.photography: could not connect to host
askcaisse.com: did not receive HSTS header
askfit.cz: did not receive HSTS header
askmagicconch.com: could not connect to host
askme24.de: could not connect to host
asksatya.com: did not receive HSTS header
askyourdentist.com: did not receive HSTS header
-aslinfinity.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+aslinfinity.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
asm-x.com: could not connect to host
asmik-armenie.com: did not receive HSTS header
asmm.cc: did not receive HSTS header
asmui.ga: could not connect to host
asmui.ml: did not receive HSTS header
asoftwareco.com: did not receive HSTS header
-asoul.tw: could not connect to host
aspectcontext.com: could not connect to host
asphaltfruehling.de: could not connect to host
-aspisdata.com: could not connect to host
+asr.cloud: could not connect to host
+asr.li: could not connect to host
+asr.rocks: could not connect to host
+asr.solar: could not connect to host
asral7.com: could not connect to host
asryflorist.com: did not receive HSTS header
-ass.org.au: did not receive HSTS header
-assadrivesloirecher.com: did not receive HSTS header
+ass.org.au: could not connect to host
+assadrivesloirecher.com: could not connect to host
assdecoeur.org: could not connect to host
assekuranzjobs.de: could not connect to host
asset-alive.com: could not connect to host
asset-alive.net: could not connect to host
-assetict.com: max-age too low: 0
+assetict.com: did not receive HSTS header
assetsupervision.com: did not receive HSTS header
-assetvault.co.za: did not receive HSTS header
assindia.nl: did not receive HSTS header
assistance-personnes-agees.ch: could not connect to host
assistcart.com: could not connect to host
@@ -2279,21 +2361,22 @@ asthon.cn: could not connect to host
astraalivankila.net: could not connect to host
astral-imperium.uk: did not receive HSTS header
astral.gq: could not connect to host
+astrath.net: could not connect to host
astrea-voetbal-groningen.nl: could not connect to host
astrolpost.com: could not connect to host
astromelody.com: did not receive HSTS header
astronomie-fulda.de: did not receive HSTS header
-astrosnail.pt.eu.org: could not connect to host
-astrovandalistas.cc: could not connect to host
+astropaykasa.org: did not receive HSTS header
astutr.co: could not connect to host
+asu.moe: could not connect to host
asucrews.com: could not connect to host
asuhe.cc: could not connect to host
asuhe.win: did not receive HSTS header
asuhe.xyz: could not connect to host
-asuka.io: did not receive HSTS header
async.be: could not connect to host
at-one.ca: did not receive HSTS header
at1.co: could not connect to host
+ataber.pw: could not connect to host
atacadooptico.com.br: could not connect to host
atavio.at: could not connect to host
atavio.ch: could not connect to host
@@ -2305,31 +2388,32 @@ atelier-rk.com: did not receive HSTS header
atelier-viennois-cannes.fr: could not connect to host
atelierhupsakee.nl: did not receive HSTS header
ateliernihongo.ch: did not receive HSTS header
-ateliersantgervasi.com: max-age too low: 2592000
+ateliers-veronese-nantes.fr: did not receive HSTS header
atelierssud.swiss: could not connect to host
+atendimentodelta.com.br: did not receive HSTS header
atg.soy: could not connect to host
atgroup.gr: did not receive HSTS header
athaliasoft.com: could not connect to host
-athena-garage.co.uk: could not connect to host
athenelive.com: could not connect to host
athensbusinessresources.us: could not connect to host
atheoryofchange.com: could not connect to host
atherosense.ga: could not connect to host
athi.pl: did not receive HSTS header
athul.xyz: could not connect to host
+atinylittle.space: could not connect to host
atk.me: could not connect to host
atkdesign.pt: did not receive HSTS header
atlantahairsurgeon.com: did not receive HSTS header
atlas-5.site: could not connect to host
atlas-staging.ml: could not connect to host
-atlas.co: could not connect to host
+atlas.co: did not receive HSTS header
atlaschiropractic.org: max-age too low: 0
+atlassian.io: could not connect to host
atlassian.net: did not receive HSTS header
atlayo.com: did not receive HSTS header
atlex.nl: did not receive HSTS header
atlseccon.com: did not receive HSTS header
atmocdn.com: could not connect to host
-atom-china.org: could not connect to host
atomic-bounce.com: could not connect to host
atomic.menu: could not connect to host
atomic.red: could not connect to host
@@ -2338,6 +2422,7 @@ atop.io: could not connect to host
atracaosexshop.com.br: could not connect to host
attelage.net: did not receive HSTS header
attic118.com: could not connect to host
+attilagyorffy.com: could not connect to host
attimidesigns.com: did not receive HSTS header
attiremr.tk: could not connect to host
attogproductions.com: could not connect to host
@@ -2356,6 +2441,7 @@ audividi.shop: could not connect to host
aufmerksamkeitsstudie.com: could not connect to host
aufprise.de: did not receive HSTS header
augaware.org: did not receive HSTS header
+augehost.com: could not connect to host
augenblicke-blog.de: could not connect to host
augias.org: could not connect to host
augmentable.de: could not connect to host
@@ -2364,7 +2450,6 @@ augrandinquisiteur.com: did not receive HSTS header
august.black: did not receive HSTS header
aujapan.ru: could not connect to host
aulaschrank.gq: could not connect to host
-aunali1.com: could not connect to host
auntieme.com: did not receive HSTS header
aupasdecourses.com: could not connect to host
aur.rocks: could not connect to host
@@ -2380,10 +2465,10 @@ aurosa.cz: did not receive HSTS header
aurugs.com: did not receive HSTS header
auslandsjahr-usa.de: did not receive HSTS header
ausnah.me: could not connect to host
+ausschreibungen-suedtirol.it: did not receive HSTS header
aussiecable.org: could not connect to host
aussiegreenmarks.com.au: did not receive HSTS header
aussiehq.com.au: could not connect to host
-aussiestoresonline.com: could not connect to host
aussiewebmarketing.com.au: did not receive HSTS header
austinmobilemechanics.net: did not receive HSTS header
austinstore.com.br: could not connect to host
@@ -2391,6 +2476,7 @@ austinsutphin.com: could not connect to host
australianarmedforces.org: did not receive HSTS header
australiancattle.dog: could not connect to host
australianfreebets.com.au: did not receive HSTS header
+australianimmigrationadvisors.com.au: could not connect to host
auth.mail.ru: did not receive HSTS header
authenitech.com: could not connect to host
authentication.io: could not connect to host
@@ -2400,6 +2486,7 @@ authoritynutrition.com: did not receive HSTS header
authorsguild.in: could not connect to host
authsrv.nl.eu.org: could not connect to host
auto-serwis.zgorzelec.pl: could not connect to host
+auto.nl: did not receive HSTS header
auto3d.cn: could not connect to host
auto4trade.nl: could not connect to host
autobedarf.net: did not receive HSTS header
@@ -2407,17 +2494,20 @@ autobedrijfschalkoort.nl: did not receive HSTS header
autocarparts.ro: could not connect to host
autoclean-plus.ch: did not receive HSTS header
autocmall.com: did not receive HSTS header
+autocobot.com: did not receive HSTS header
autodeploy.it: could not connect to host
autoecolebudget.ch: did not receive HSTS header
autoecoledumontblanc.com: could not connect to host
autoeet.cz: did not receive HSTS header
-autoepc.ro: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+autoepc.ro: could not connect to host
autoeshop.eu: did not receive HSTS header
autohaus-snater.de: did not receive HSTS header
autojuhos.sk: could not connect to host
automaan.nl: did not receive HSTS header
automacity.com: could not connect to host
+automationsmarthome.com: could not connect to host
automobiles5.com: could not connect to host
+automoto-tom.net: could not connect to host
autos-retro-plaisir.com: did not receive HSTS header
autosearch.me: could not connect to host
autoshopsolutions.com: did not receive HSTS header
@@ -2435,7 +2525,6 @@ auxiliumincrementum.co.uk: could not connect to host
av.de: did not receive HSTS header
av163.cc: could not connect to host
avadatravel.com: did not receive HSTS header
-avalon-island.ru: could not connect to host
avalon-studios.de: could not connect to host
avalyuan.com: could not connect to host
avantmfg.com: did not receive HSTS header
@@ -2448,10 +2537,10 @@ aveling-adventure.co.uk: did not receive HSTS header
avi9526.pp.ua: could not connect to host
aviacao.pt: did not receive HSTS header
avidcruiser.com: did not receive HSTS header
-avidthink.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+avidthink.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
aviodeals.com: could not connect to host
avitres.com: could not connect to host
-aviv.nyc: could not connect to host
+aviv.nyc: did not receive HSTS header
avmemo.com: could not connect to host
avmo.pw: could not connect to host
avnavi.jp: could not connect to host
@@ -2459,6 +2548,8 @@ avocadooo.stream: could not connect to host
avocatbeziau.com: could not connect to host
avonlearningcampus.com: could not connect to host
avotoma.com: could not connect to host
+avs-building-services.co.uk: did not receive HSTS header
+avselectrical.co.uk: did not receive HSTS header
avso.pw: could not connect to host
avspot.net: could not connect to host
avus-automobile.com: did not receive HSTS header
@@ -2473,12 +2564,11 @@ awesomesit.es: could not connect to host
awf0.xyz: could not connect to host
awg-mode.de: did not receive HSTS header
awin.la: could not connect to host
-awningsatlantaga.com: could not connect to host
awomaninherprime.com: did not receive HSTS header
aww.moe: did not receive HSTS header
awxg.eu.org: could not connect to host
awxg.org: could not connect to host
-axa-middleeast.com: could not connect to host
+axa-middleeast.com: did not receive HSTS header
axado.com.br: could not connect to host
axchap.ir: could not connect to host
axel-fischer.science: could not connect to host
@@ -2487,6 +2577,7 @@ axem.co.jp: did not receive HSTS header
axeny.com: did not receive HSTS header
axg.io: did not receive HSTS header
axialsports.com: did not receive HSTS header
+axiomer.com: did not receive HSTS header
axiomer.es: did not receive HSTS header
axiomer.eu: did not receive HSTS header
axiomer.me: did not receive HSTS header
@@ -2494,6 +2585,7 @@ axiomer.net: did not receive HSTS header
axiomer.org: did not receive HSTS header
axis-stralis.co.uk: could not connect to host
axisfleetmanagement.co.uk: could not connect to host
+axispara-bg.com: did not receive HSTS header
axiumacademy.com: did not receive HSTS header
axka.com: could not connect to host
axolsoft.com: max-age too low: 10540800
@@ -2513,6 +2605,7 @@ ayuru.info: could not connect to host
az-vinyl-boden.de: could not connect to host
azamra.com: did not receive HSTS header
azane.ga: could not connect to host
+azgfd.com: did not receive HSTS header
azia.info: could not connect to host
azino777.ru: could not connect to host
azirevpn.com: did not receive HSTS header
@@ -2523,104 +2616,108 @@ azmusica.com: could not connect to host
aznaetelivy.ru: did not receive HSTS header
azprep.us: could not connect to host
azrangers.gov: did not receive HSTS header
+azu-l.com: did not receive HSTS header
azun.pl: did not receive HSTS header
+azuxul.fr: could not connect to host
azzag.co.uk: did not receive HSTS header
b-dd.com: could not connect to host
b-entropy.com: could not connect to host
+b-freerobux.ga: could not connect to host
b-landia.net: did not receive HSTS header
b-pi.duckdns.org: could not connect to host
b-rickroll-e.pw: could not connect to host
b-space.de: did not receive HSTS header
b-ticket.ch: could not connect to host
-b0618.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b0618.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b0868.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b0868.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b0618.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b0618.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b0868.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b0868.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b1.work: could not connect to host
b1236.com: did not receive HSTS header
-b1758.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b1758.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b1768.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b1768.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b1788.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b1758.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b1758.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b1768.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b1768.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b1788.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b1rd.tk: could not connect to host
-b2486.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b2486.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b2486.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b2486.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b2b-nestle.com.br: could not connect to host
b2bpromoteit.com: did not receive HSTS header
b3orion.com: could not connect to host
b422edu.com: could not connect to host
+b4ckbone.de: could not connect to host
b4r7.de: could not connect to host
-b5189.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b5189.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b5289.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b5289.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b5989.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b5989.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b5189.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b5189.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b5289.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b5289.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b5989.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b5989.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b61688.com: could not connect to host
b64.club: could not connect to host
-b8591.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b8591.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b8979.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b8979.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9018.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9018.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9108.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9108.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9110.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9110.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9112.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9112.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b911gt.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b911gt.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b8591.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b8591.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b8979.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b8979.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9018.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9018.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9108.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9108.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9110.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9110.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9112.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9112.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b911gt.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b911gt.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b91688.com: could not connect to host
-b91688.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b91688.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b91688.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9175.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9175.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9258.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9258.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9318.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9318.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9418.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9418.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9428.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9428.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9453.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9453.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9468.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9468.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9488.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9488.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9498.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9498.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9518.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9518.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9518.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9518.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9528.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9528.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9538.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9538.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b91688.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b91688.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b91688.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9175.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9175.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9258.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9258.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9318.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9318.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9418.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9418.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9428.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9428.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9453.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9453.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9468.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9468.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9488.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9488.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9498.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9498.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9518.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9518.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9518.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9518.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9528.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9528.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9538.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9538.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b9568.com: could not connect to host
b9586.net: could not connect to host
b9588.net: could not connect to host
b95888.net: could not connect to host
b9589.net: could not connect to host
-b9598.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9598.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9658.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9658.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9598.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9598.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9658.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9658.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b96899.com: could not connect to host
-b9758.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9758.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9818.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9818.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9858.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9858.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9880.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9758.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9758.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9818.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9818.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9858.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9858.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9880.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b9883.net: could not connect to host
b9884.net: could not connect to host
b9885.net: could not connect to host
@@ -2630,30 +2727,28 @@ b9887.net: could not connect to host
b9888.net: could not connect to host
b98886.com: could not connect to host
b9889.net: could not connect to host
-b9920.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9920.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b9930.com: could not connect to host
-b9948.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9948.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9948.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9948.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b99520.com: could not connect to host
-b9960.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9960.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b9980.com: could not connect to host
b99881.com: could not connect to host
b99882.com: could not connect to host
b99883.com: could not connect to host
b99885.com: could not connect to host
b99886.com: could not connect to host
-b9best.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9best.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9king.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9king.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9king.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-b9winner.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9best.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9best.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9king.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9king.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9king.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9winner.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
b9winner.com: could not connect to host
-b9winner.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+b9winner.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
babarkata.com: could not connect to host
babelfisch.eu: could not connect to host
-bablodel.biz: could not connect to host
-bablodel.com: could not connect to host
babursahvizeofisi.com: could not connect to host
baby-click.de: could not connect to host
babybee.ie: could not connect to host
@@ -2663,10 +2758,9 @@ babyhouse.xyz: could not connect to host
babyliss-pro.com: could not connect to host
babyliss-pro.net: did not receive HSTS header
babysaying.me: could not connect to host
-babystep.tv: could not connect to host
+babystep.tv: did not receive HSTS header
bacchanallia.com: could not connect to host
bacgrouppublishing.com: could not connect to host
-baches-piscines.com: could not connect to host
bacimg.com: could not connect to host
back-bone.nl: did not receive HSTS header
backenmachtgluecklich.de: max-age too low: 0
@@ -2679,7 +2773,7 @@ baconate.com: did not receive HSTS header
bacsituvansuckhoe.com: did not receive HSTS header
bad-wurzach.de: did not receive HSTS header
bad.show: could not connect to host
-badai.at: could not connect to host
+badai.at: did not receive HSTS header
badbee.cc: could not connect to host
badboyzclub.de: could not connect to host
badcronjob.com: could not connect to host
@@ -2689,9 +2783,9 @@ badgr.com: did not receive HSTS header
badkamergigant.com: could not connect to host
badlink.org: could not connect to host
badpackets.net: max-age too low: 86400
-badseacoffee.com: could not connect to host
baff.lu: could not connect to host
baffinlee.com: did not receive HSTS header
+bageez.us: could not connect to host
bagelsbakery.com: could not connect to host
bagiobella.com: max-age too low: 0
bagstage.de: did not receive HSTS header
@@ -2713,8 +2807,6 @@ bakanin.ru: could not connect to host
bakaproxy.moe: could not connect to host
bakaweb.fr: could not connect to host
bakkerdesignandbuild.com: did not receive HSTS header
-bakxnet.com: could not connect to host
-balatoni-nyar.hu: did not receive HSTS header
balcan-underground.net: could not connect to host
baldwin.com.au: did not receive HSTS header
baldwinkoo.com: could not connect to host
@@ -2722,7 +2814,6 @@ baleares.party: could not connect to host
balenciaspa.com: did not receive HSTS header
balidesignshop.com.br: could not connect to host
balihai.com: did not receive HSTS header
-balist.es: could not connect to host
ball.holdings: did not receive HSTS header
ballbusting-cbt.com: could not connect to host
balle.dk: did not receive HSTS header
@@ -2735,9 +2826,11 @@ bambooforest.nl: could not connect to host
bambumania.com.br: did not receive HSTS header
bamtoki.com: could not connect to host
bamtoki.se: could not connect to host
+ban.moe: could not connect to host
+bananabandy.com: could not connect to host
bananavapes.com: could not connect to host
bananensap.nl: did not receive HSTS header
-bananium.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bananium.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
banbanchs.com: could not connect to host
banburybid.com: did not receive HSTS header
bancaolhares.com.br: could not connect to host
@@ -2747,12 +2840,13 @@ bandar303.cc: did not receive HSTS header
bandar303.id: did not receive HSTS header
bandar303.win: did not receive HSTS header
bandarifamily.com: could not connect to host
-bandb.xyz: could not connect to host
+bandb.xyz: did not receive HSTS header
bandgap.io: could not connect to host
bandrcrafts.com: could not connect to host
banduhn.com: did not receive HSTS header
bangzafran.com: could not connect to host
bank: could not connect to host
+bankcardoffer.com: could not connect to host
bankcircle.co.in: could not connect to host
bankerbuch.de: did not receive HSTS header
bankersonline.com: did not receive HSTS header
@@ -2760,24 +2854,26 @@ bankfreeoffers.com: could not connect to host
bankitt.network: could not connect to host
bankmilhas.com.br: did not receive HSTS header
bankofrealty.review: could not connect to host
+banland.net: could not connect to host
banningca.gov: did not receive HSTS header
bannisbierblog.de: could not connect to host
banoviny.sk: did not receive HSTS header
banqingdiao.com: could not connect to host
banri.me: could not connect to host
banxehoi.com: did not receive HSTS header
-bao-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bao-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bao-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bao-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
baobeiglass.com: did not receive HSTS header
baodan666.com: could not connect to host
baosuckhoedoisong.net: could not connect to host
baptistboard.com: did not receive HSTS header
baptiste-destombes.fr: did not receive HSTS header
bara1.se: did not receive HSTS header
+baranhotel.ir: did not receive HSTS header
barbaros.info: max-age too low: 7776000
barberlegalcounsel.com: did not receive HSTS header
barbershop-harmony.org: did not receive HSTS header
-barbiere.it: did not receive HSTS header
+barbershop-lasvillas.com: did not receive HSTS header
barcodeberlin.com: did not receive HSTS header
barcoderealty.com: could not connect to host
barcouniforms.com: did not receive HSTS header
@@ -2786,16 +2882,16 @@ barf-alarm.de: did not receive HSTS header
bargainmovingcompany.com: did not receive HSTS header
bariller.fr: did not receive HSTS header
baris-sagdic.com: could not connect to host
-bariskaragoz.nl: did not receive HSTS header
+bariskaragoz.nl: could not connect to host
barnrats.com: could not connect to host
baropkamp.be: did not receive HSTS header
-barpodsosnami.pl: could not connect to host
barprive.com: could not connect to host
barracuda.blog: could not connect to host
barrelhead.org: could not connect to host
-barrett.ag: could not connect to host
+barrett.ag: did not receive HSTS header
barrut.me: did not receive HSTS header
barryswebdesign.co.uk: did not receive HSTS header
+barsgroup.com: did not receive HSTS header
barshout.co.uk: could not connect to host
barsil.de: did not receive HSTS header
barslecht.com: could not connect to host
@@ -2803,8 +2899,8 @@ barslecht.nl: could not connect to host
barss.io: could not connect to host
barta.me: did not receive HSTS header
bartelldrugs.com: did not receive HSTS header
+bartolomebellido.com: could not connect to host
barunisystems.com: could not connect to host
-bascht.com: did not receive HSTS header
basculasconfiables.com: could not connect to host
baseline.ba: did not receive HSTS header
basementdoctor.com: did not receive HSTS header
@@ -2820,21 +2916,20 @@ baskettemple.com: did not receive HSTS header
basnieuwenhuizen.nl: did not receive HSTS header
basnoslovno.com.ua: did not receive HSTS header
bassh.net: could not connect to host
-bassys.com.co: could not connect to host
bastadigital.com: did not receive HSTS header
bastianstalder.ch: did not receive HSTS header
-bastivmobile.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bat909.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bat909.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bat9vip.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bat9vip.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bastivmobile.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bat909.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bat909.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bat9vip.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bat9vip.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
batfoundry.com: could not connect to host
batkave.net: did not receive HSTS header
batonger.com: could not connect to host
batten.eu.org: could not connect to host
batteryservice.ru: did not receive HSTS header
battleofthegridiron.com: could not connect to host
-batvip9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+batvip9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
baud.ninja: could not connect to host
baudairenergyservices.com: did not receive HSTS header
bauen-mit-ziegel.de: max-age too low: 604800
@@ -2843,6 +2938,7 @@ baumstark.ca: could not connect to host
baustils.com: did not receive HSTS header
bauwens.cloud: did not receive HSTS header
baykatre.com: did not receive HSTS header
+bayportfinance.com: max-age too low: 0
bayrisch-fuer-anfaenger.de: could not connect to host
baysse.eu: did not receive HSTS header
bazarstupava.sk: could not connect to host
@@ -2854,13 +2950,12 @@ bbb1991.me: could not connect to host
bbdos.ru: did not receive HSTS header
bbj.io: did not receive HSTS header
bbkanews.com: did not receive HSTS header
-bblove.me: could not connect to host
bblovess.cn: could not connect to host
bbnbb.de: could not connect to host
bbrinck.eu: could not connect to host
bbs8080.net: could not connect to host
-bbswin9.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bbswin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bbswin9.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bbswin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bbw-wrestling.com: could not connect to host
bbwdom.xyz: could not connect to host
bbwf.de: did not receive HSTS header
@@ -2868,9 +2963,10 @@ bbwfacesitting.us: could not connect to host
bbwfacesitting.xyz: could not connect to host
bbwfight.xyz: could not connect to host
bbwteens.org: could not connect to host
-bbxin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bbxin9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bbxin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bbxin9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bc-personal.ch: did not receive HSTS header
+bc-reloaded.net: did not receive HSTS header
bc416.com: did not receive HSTS header
bc418.com: did not receive HSTS header
bc419.com: did not receive HSTS header
@@ -2896,17 +2992,18 @@ bde-epitech.fr: could not connect to host
bdenzer.com: did not receive HSTS header
bdenzer.xyz: could not connect to host
bdsmxxxpics.com: did not receive HSTS header
-be9418.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bdupnews.com: did not receive HSTS header
+be9418.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
be9418.info: could not connect to host
-be9418.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+be9418.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
be9418.org: could not connect to host
-be9458.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-be9458.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-be9458.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-be9458.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-be958.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+be9458.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+be9458.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+be9458.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+be9458.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+be958.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
be958.info: could not connect to host
-be958.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+be958.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
be958.org: could not connect to host
be9966.com: could not connect to host
beach-inspector.com: did not receive HSTS header
@@ -2921,14 +3018,14 @@ beamitapp.com: could not connect to host
beamstat.com: could not connect to host
beanbot.party: could not connect to host
beanworks.ca: did not receive HSTS header
+beardboys.co.za: did not receive HSTS header
bearden.io: did not receive HSTS header
beardydave.com: did not receive HSTS header
beasel.biz: could not connect to host
beastlog.tk: could not connect to host
beastowner.com: could not connect to host
beastowner.li: could not connect to host
-beauty-hippie-schmuck.de: did not receive HSTS header
-beauty-yan-enterprise.com: could not connect to host
+beauty-hippie-schmuck.de: could not connect to host
beautyconcept.co: did not receive HSTS header
beavers.io: could not connect to host
bebeautiful.business: could not connect to host
@@ -2942,8 +3039,8 @@ becoast.fr: did not receive HSTS header
becubed.co: could not connect to host
bedabox.com: did not receive HSTS header
bedeta.de: could not connect to host
+bedfordnissanparts.com: could not connect to host
bedlingtonterrier.com.br: could not connect to host
-bednar.co: did not receive HSTS header
bedouille.com: could not connect to host
bedreid.dk: did not receive HSTS header
bedrijfshulpverleningfriesland.nl: did not receive HSTS header
@@ -2951,7 +3048,8 @@ bedrijfsportaal.nl: did not receive HSTS header
bedrijvenadministratie.nl: could not connect to host
bee-social.it: did not receive HSTS header
beecare.ch: did not receive HSTS header
-beechwoodmetalworks.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+beechwoodmetalworks.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+beekbier.nl: could not connect to host
beelen.fr: could not connect to host
beerboutique.com.br: could not connect to host
beermedlar.com: could not connect to host
@@ -2959,12 +3057,10 @@ beersandco.ch: could not connect to host
beerview.ga: could not connect to host
beetgroup.id: could not connect to host
beetleroadstories.com: could not connect to host
-beetman.net: did not receive HSTS header
befundup.com: could not connect to host
bega-dc.gov: could not connect to host
begcykel.com: did not receive HSTS header
beginatzero.com: did not receive HSTS header
-beginwp.top: did not receive HSTS header
behere.be: could not connect to host
behindthethrills.com: did not receive HSTS header
behoerden-online-dienste.de: could not connect to host
@@ -2973,7 +3069,7 @@ beier.io: could not connect to host
beikeil.de: did not receive HSTS header
beingmad.org: did not receive HSTS header
belairsewvac.com: could not connect to host
-belastingdienst-in-beeld.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+belastingdienst-in-beeld.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
belcompany.nl: could not connect to host
belewpictures.com: could not connect to host
belgien.guide: could not connect to host
@@ -2993,8 +3089,7 @@ bely-mishka.by: max-age too low: 0
belyvly.com: did not receive HSTS header
bemvindoaolar.com.br: could not connect to host
bemyvictim.com: max-age too low: 2678400
-ben2.co.il: max-age too low: 2592000
-benburwell.com: could not connect to host
+benandsarah.life: did not receive HSTS header
benchcast.com: could not connect to host
bendechrai.com: did not receive HSTS header
benedikt-tuchen.de: could not connect to host
@@ -3015,11 +3110,10 @@ benjaminjurke.net: did not receive HSTS header
benk.press: could not connect to host
benleemd.com: could not connect to host
benmorecentre.co.uk: did not receive HSTS header
+bennink.me: could not connect to host
benny003.de: could not connect to host
bennythink.com: could not connect to host
benohead.com: did not receive HSTS header
-bensoy.com: could not connect to host
-bentinata.com: could not connect to host
bentphotos.se: could not connect to host
benwattie.com: could not connect to host
benzkosmetik.de: did not receive HSTS header
@@ -3031,6 +3125,7 @@ beraru.tk: could not connect to host
berasavocate.com: could not connect to host
berdaguermontes.eu: could not connect to host
berduri.com: did not receive HSTS header
+bereaplumber.co.za: could not connect to host
beretech.fr: did not receive HSTS header
berg-freunde.at: max-age too low: 604800
berg-freunde.ch: max-age too low: 604800
@@ -3057,6 +3152,9 @@ bermos.net: could not connect to host
bernardfischer.fr: did not receive HSTS header
bernexskiclub.ch: did not receive HSTS header
berodes.be: could not connect to host
+berr.yt: could not connect to host
+berruezoabogados.com: did not receive HSTS header
+berry.cat: could not connect to host
berrymark.be: did not receive HSTS header
berseb.se: could not connect to host
berthelier.me: could not connect to host
@@ -3083,10 +3181,11 @@ bestbeards.ca: could not connect to host
bestbestbitcoin.com: could not connect to host
bestbridal.top: did not receive HSTS header
bestcellular.com: did not receive HSTS header
-bestdoc.com.br: did not receive HSTS header
+bestdoc.com.br: could not connect to host
+bestelectricnd.com: could not connect to host
bestellipticalmachinereview.info: could not connect to host
bestemailmarketingsoftware.org: could not connect to host
-bestesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bestesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bestesb.net: could not connect to host
bestfitnesswatchreview.info: could not connect to host
bestgifts4you.com: did not receive HSTS header
@@ -3098,7 +3197,8 @@ bestinsider.net: did not receive HSTS header
bestlashesandbrows.com: did not receive HSTS header
bestlashesandbrows.hu: did not receive HSTS header
bestleftwild.com: could not connect to host
-bestmodels.su: could not connect to host
+bestlooperpedalsguide.com: did not receive HSTS header
+bestmodels.su: did not receive HSTS header
bestof1001.de: could not connect to host
bestorangeseo.com: could not connect to host
bestpaintings.nl: did not receive HSTS header
@@ -3106,16 +3206,18 @@ bestpal.eu: could not connect to host
bestparking.xyz: could not connect to host
bestperfumebrands.com: could not connect to host
bestschools.top: did not receive HSTS header
+bestseries.tv: could not connect to host
besuccessful.ch: did not receive HSTS header
-bet-99.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bet-99.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bet-99.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bet-99.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bet-99.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bet-99.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bet.eu: did not receive HSTS header
-bet168wy.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bet168wy.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bet909.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bet168wy.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bet168wy.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bet909.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bet990.com: could not connect to host
-bet9bet9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bet9bet9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+betacavi.com: did not receive HSTS header
betaclean.fr: did not receive HSTS header
betacloud.io: did not receive HSTS header
betafive.net: could not connect to host
@@ -3124,7 +3226,7 @@ betalenviainternet.nl: did not receive HSTS header
betamint.org: did not receive HSTS header
betcafearena.ro: could not connect to host
betformular.com: could not connect to host
-betgo9.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+betgo9.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
betkoo.com: could not connect to host
betleakbot.com: could not connect to host
betnet.fr: could not connect to host
@@ -3133,7 +3235,6 @@ betplanning.it: did not receive HSTS header
betrallyarabia.com: did not receive HSTS header
bets.de: did not receive HSTS header
betsonlinefree.com.au: could not connect to host
-betsyshilling.com: could not connect to host
betterbabyshop.com.au: could not connect to host
betterhelp.com: did not receive HSTS header
betterjapanese.blog: could not connect to host
@@ -3142,11 +3243,11 @@ betterjapanese.org: could not connect to host
betterjapanese.xyz: could not connect to host
bettween.com: did not receive HSTS header
between.be: did not receive HSTS header
-betwin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-betwin9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+betwin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+betwin9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
betz.ro: could not connect to host
beulahtabernacle.com: could not connect to host
-bevapehappy.com: could not connect to host
+bewegigsruum.ch: could not connect to host
bewerbungsfoto-deinfoto.ch: could not connect to host
bewished.co: could not connect to host
bexit-hosting.nl: could not connect to host
@@ -3167,6 +3268,8 @@ bezorg.ninja: could not connect to host
bezprawnik.pl: did not receive HSTS header
bezr.co.uk: could not connect to host
bf.am: max-age too low: 0
+bf7088.com: did not receive HSTS header
+bf7877.com: did not receive HSTS header
bfd.vodka: did not receive HSTS header
bfear.com: could not connect to host
bfelob.gov: could not connect to host
@@ -3187,10 +3290,11 @@ bgneuesheim.de: did not receive HSTS header
bgp.ee: could not connect to host
bgs-game.com: max-age too low: 300
bgwfans.com: did not receive HSTS header
-bhatia.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bhatia.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bhost.net: did not receive HSTS header
bhosted.nl: did not receive HSTS header
bi-ec.ac.cn: could not connect to host
+bi1gif.radio: could not connect to host
bi1gif.space: could not connect to host
biancolievito.it: did not receive HSTS header
bianinapiccanovias.com: could not connect to host
@@ -3205,14 +3309,12 @@ bibles.com.tw: did not receive HSTS header
biblethoughts.blog: did not receive HSTS header
bibliafeminina.com.br: could not connect to host
biblio.wiki: could not connect to host
-bibliotekarien.se: could not connect to host
bichines.es: did not receive HSTS header
bichonfrise.com.br: could not connect to host
bichonmaltes.com.br: could not connect to host
bicilonatours.com: did not receive HSTS header
bidon.ca: did not receive HSTS header
bidorbuy.co.ke: did not receive HSTS header
-bie35.com: could not connect to host
bieberium.de: could not connect to host
biego.cn: did not receive HSTS header
biehl.co: did not receive HSTS header
@@ -3222,6 +3324,7 @@ bienenblog.cc: could not connect to host
biensenvue.com: could not connect to host
bier.jp: did not receive HSTS header
bierbringer.at: could not connect to host
+biergaizi.info: could not connect to host
bierochs.org: could not connect to host
bieumau.net: did not receive HSTS header
biewen.me: did not receive HSTS header
@@ -3233,29 +3336,30 @@ bigbrownpromotions.com.au: did not receive HSTS header
bigcorporateevents.com: could not connect to host
bigerbio.com: could not connect to host
bigfunbouncycastles.com: could not connect to host
-biggreenexchange.com: could not connect to host
+biggreenexchange.com: did not receive HSTS header
bigjohn.ru: did not receive HSTS header
bignumworks.com: did not receive HSTS header
bigshinylock.minazo.net: could not connect to host
bigshort.org: could not connect to host
biguixhe.net: could not connect to host
-bigwiseguide.com: did not receive HSTS header
+bigwiseguide.com: could not connect to host
bijoux.com.br: could not connect to host
bijouxbrasil.com.br: did not receive HSTS header
bijouxdegriffe.com.br: could not connect to host
+biju-neko.jp: did not receive HSTS header
bijugeral.com.br: could not connect to host
bike-discount.de: did not receive HSTS header
bikelifetvkidsquads.co.uk: could not connect to host
bikerebel.com: did not receive HSTS header
bikermusic.net: could not connect to host
bikeshopitalia.com: could not connect to host
-bilalic.com: could not connect to host
bilanligne.com: did not receive HSTS header
bildermachr.de: could not connect to host
biletru.net: could not connect to host
biletua.de: could not connect to host
biletyplus.com: could not connect to host
biletyplus.ru: did not receive HSTS header
+bilimoe.com: could not connect to host
bill-nye-the.science: could not connect to host
billdestler.com: could not connect to host
billigssl.dk: did not receive HSTS header
@@ -3277,9 +3381,9 @@ binarization.net: could not connect to host
binarization.org: did not receive HSTS header
binarka.net: did not receive HSTS header
binaryabstraction.com: could not connect to host
-binaryfigments.com: max-age too low: 7776000
-binbin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-binbin9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+binaryfigments.com: could not connect to host
+binbin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+binbin9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
binderapp.net: could not connect to host
bingcheung.com: could not connect to host
bingcheung.org: could not connect to host
@@ -3287,32 +3391,33 @@ bingo-wear.com: could not connect to host
bingo9.net: could not connect to host
bingofriends.com: could not connect to host
bingostars.com: did not receive HSTS header
+binhp.com: could not connect to host
binimo.com: could not connect to host
binkanhada.biz: could not connect to host
bintangpiaggi.info: could not connect to host
bintangsyurga.com: could not connect to host
-bintelligence.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bintelligence.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
binwu666.com: max-age too low: 0
bioespuna.eu: did not receive HSTS header
biofam.ru: did not receive HSTS header
biogeniq.ca: did not receive HSTS header
-bioknowme.com: did not receive HSTS header
biomax-mep.com.br: did not receive HSTS header
bionicspirit.com: did not receive HSTS header
biophysik-ssl.de: did not receive HSTS header
biopreferred.gov: could not connect to host
biopronut.com: max-age too low: 0
-biosalts.it: did not receive HSTS header
biospeak.solutions: could not connect to host
biou.me: could not connect to host
biovalue.eu: could not connect to host
bip.gov.sa: could not connect to host
+bipyo.com: could not connect to host
birchbarkfurniture.ch: could not connect to host
birgitandmerlin.com: could not connect to host
birkengarten.ch: could not connect to host
birkhoff.me: did not receive HSTS header
birkman.com: did not receive HSTS header
birminghamcastlehire.co.uk: did not receive HSTS header
+bischoff-mathey.family: could not connect to host
biscoint.io: did not receive HSTS header
biscuits-rec.com: could not connect to host
biscuits-shop.com: could not connect to host
@@ -3339,6 +3444,7 @@ bitcoinfo.jp: could not connect to host
bitcoinhk.org: did not receive HSTS header
bitcoinjpn.com: could not connect to host
bitcoinprivacy.net: did not receive HSTS header
+bitcointrade.com.br: did not receive HSTS header
bitcoinwalletscript.tk: could not connect to host
bitcoinworld.me: could not connect to host
bitcoinx.gr: did not receive HSTS header
@@ -3367,7 +3473,6 @@ bitmainwarranty.com.ua: could not connect to host
bitmainwarranty.ru: could not connect to host
bitmex.com: did not receive HSTS header
bitmexin.com: could not connect to host
-bitmoe.com: did not receive HSTS header
bitmon.net: did not receive HSTS header
bitnet.io: did not receive HSTS header
bitplay.space: could not connect to host
@@ -3389,22 +3494,22 @@ bitwrought.net: could not connect to host
bityes.org: could not connect to host
bivsi.com: could not connect to host
bizcms.com: could not connect to host
-bizeau.ch: did not receive HSTS header
bizedge.co.nz: did not receive HSTS header
bizon.sk: did not receive HSTS header
bizzartech.com: did not receive HSTS header
bizzi.tv: could not connect to host
bizzybeebouncers.co.uk: could not connect to host
bjgongyi.com: did not receive HSTS header
-bjl5689.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bjl5689.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bjl5689.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bjl5689.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bjmun.cn: could not connect to host
bjrn.io: could not connect to host
bjtxl.cn: could not connect to host
bkb-skandal.ch: could not connect to host
-blaauwgeers.travel: could not connect to host
black-armada.com: could not connect to host
black-armada.com.pl: could not connect to host
black-armada.pl: could not connect to host
+black-cat-seo.com: did not receive HSTS header
black-octopus.ru: could not connect to host
black-pool.net: could not connect to host
blackapron.com.br: could not connect to host
@@ -3417,49 +3522,51 @@ blackdesertsp.com: could not connect to host
blackdiam.net: did not receive HSTS header
blackdotbrewery.com: could not connect to host
blackhawktreeinc.com: did not receive HSTS header
-blackhell.xyz: did not receive HSTS header
+blackhell.xyz: could not connect to host
blackkeg.ca: could not connect to host
blacklane.com: did not receive HSTS header
blacklightparty.be: could not connect to host
blackly.uk: max-age too low: 0
blackmagic.sk: could not connect to host
blackmirror.com.au: did not receive HSTS header
+blackonion.com: could not connect to host
+blackpayment.ru: could not connect to host
blackphantom.de: could not connect to host
blackpi.dedyn.io: could not connect to host
blackscreen.me: could not connect to host
blackunicorn.wtf: could not connect to host
bladesmith.io: could not connect to host
-blakerandall.xyz: did not receive HSTS header
+blakerandall.xyz: could not connect to host
blankersfamily.com: did not receive HSTS header
blantik.net: could not connect to host
blantr.com: could not connect to host
blarg.co: could not connect to host
+blastzoneentertainments.co.uk: did not receive HSTS header
blatnice.cf: could not connect to host
blatnice.ga: could not connect to host
blatnice.gq: could not connect to host
blatnice.ml: could not connect to host
blatnice.tk: could not connect to host
-blauerhunger.de: could not connect to host
-blauwwit.be: did not receive HSTS header
blazeit.io: could not connect to host
blechpirat.name: could not connect to host
bleep.zone: could not connect to host
blend.guru: did not receive HSTS header
+blending.kr: could not connect to host
blendlecdn.com: could not connect to host
blenheimchalcot.com: did not receive HSTS header
blessedguy.net: did not receive HSTS header
blessnet.jp: did not receive HSTS header
-bleutecmedia.com: did not receive HSTS header
+bleutecmedia.com: max-age too low: 2592000
blha303.com.au: could not connect to host
blicy.net: could not connect to host
bliker.ga: could not connect to host
blindaryproduction.tk: could not connect to host
-blinds-unlimited.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+blinds-unlimited.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
blindsexdate.nl: did not receive HSTS header
-bling9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bling999.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bling999.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bling999.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bling9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bling999.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bling999.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bling999.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
blinkenlight.co.uk: could not connect to host
blinkenlight.com.au: could not connect to host
blinkspeed.eu: could not connect to host
@@ -3467,6 +3574,8 @@ blitzprog.org: could not connect to host
blitzvendor.com: could not connect to host
blmiller.com: could not connect to host
blockchainevents.nl: did not receive HSTS header
+blockified.io: could not connect to host
+blocknodes.live: could not connect to host
blocksatz-medien.de: could not connect to host
blockshopauto.com: could not connect to host
blog-ritaline.com: could not connect to host
@@ -3475,17 +3584,19 @@ blog.cyveillance.com: could not connect to host
blog.gparent.org: could not connect to host
blog.torproject.org: max-age too low: 1000
blogabout.ru: could not connect to host
+blogconcours.net: could not connect to host
blogcuaviet.com: could not connect to host
blogdeyugioh.com: could not connect to host
bloggingwithchildren.com: could not connect to host
-bloggytalky.com: did not receive HSTS header
bloglife-bb.com: could not connect to host
bloglikepro.com: could not connect to host
blognone.com: did not receive HSTS header
blogonblogspot.com: did not receive HSTS header
blogpronto.com.br: did not receive HSTS header
blokino.org: did not receive HSTS header
+blokmy.com: could not connect to host
blokuhaka.fr: did not receive HSTS header
+blondesguide.com: did not receive HSTS header
blood4pets.tk: could not connect to host
bloodyexcellent.com: did not receive HSTS header
bloogle.top: did not receive HSTS header
@@ -3515,10 +3626,12 @@ bluepoint.institute: could not connect to host
blueprintloans.co.uk: could not connect to host
blueridgesecuritycameras.com: did not receive HSTS header
blues-and-pictures.com: could not connect to host
-bluescloud.xyz: could not connect to host
+bluescloud.xyz: did not receive HSTS header
bluesecure.com.br: could not connect to host
bluetenmeer.com: did not receive HSTS header
bluezonehealth.co.uk: did not receive HSTS header
+bluffplumber.co.za: could not connect to host
+blui.cf: could not connect to host
blui.ml: did not receive HSTS header
bluketing.com: did not receive HSTS header
blumen-binder.ch: did not receive HSTS header
@@ -3536,26 +3649,26 @@ bmet.de: did not receive HSTS header
bmriv.com: could not connect to host
bnb-buddy.nl: could not connect to host
bnboy.cn: could not connect to host
-bngsecure.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bngsecure.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bnhlibrary.com: could not connect to host
-bo1689.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo1689.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo9club.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo9club.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo9club.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo9fun.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo9fun.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo9game.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo9game.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-bo9king.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bnty.net: could not connect to host
+bo1689.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo1689.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo9club.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo9club.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo9club.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo9fun.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo9fun.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo9game.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo9game.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bo9king.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
board-buy.ru: could not connect to host
-boatme.de: could not connect to host
+boatme.de: did not receive HSTS header
bobaobei.net: could not connect to host
bobaobei.org: could not connect to host
+bobep.ru: could not connect to host
bobiji.com: could not connect to host
boboates.com: did not receive HSTS header
-boboolo.com: did not receive HSTS header
-bocloud.eu: could not connect to host
bodixite.com: could not connect to host
bodo-wolff.de: could not connect to host
bodrumfarm.com: could not connect to host
@@ -3565,10 +3678,11 @@ bodybuilding.events: could not connect to host
bodyweb.com.br: could not connect to host
bodyweightsolution.com: could not connect to host
bodyworkbymichael.com: did not receive HSTS header
+boekenlegger.nl: did not receive HSTS header
boel073.nl: did not receive HSTS header
boensou.com: did not receive HSTS header
bogobeats.com: did not receive HSTS header
-bogosity.tv: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bogosity.tv: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bohaishibei.com: did not receive HSTS header
bohan.life: could not connect to host
bohyn.cz: could not connect to host
@@ -3585,7 +3699,7 @@ bombsquad.studio: could not connect to host
bonamihome.ro: could not connect to host
bonapp.restaurant: could not connect to host
bondank.com: could not connect to host
-bondoer.fr: could not connect to host
+bondoer.fr: did not receive HSTS header
bondtofte.dk: max-age too low: 2592000
bonibuty.com: max-age too low: 2592000
bonigo.de: could not connect to host
@@ -3618,6 +3732,7 @@ boonehenry.co.uk: did not receive HSTS header
booox.biz: could not connect to host
booox.pw: could not connect to host
booq.org: did not receive HSTS header
+boost.fyi: could not connect to host
boosterlearnpro.com: could not connect to host
boostgame.win: could not connect to host
boote.wien: could not connect to host
@@ -3629,6 +3744,7 @@ boozinyan.com: could not connect to host
bopera.co.uk: could not connect to host
borchers-media.de: could not connect to host
borderlinegroup.com: could not connect to host
+borgodigatteraia.it: could not connect to host
boringsecurity.net: could not connect to host
boris.one: could not connect to host
boris64.net: could not connect to host
@@ -3640,12 +3756,14 @@ borrelioz.com: did not receive HSTS header
borscheid-wenig.com: did not receive HSTS header
borzoi.com.br: did not receive HSTS header
boschee.net: could not connect to host
+bostadsportal.se: did not receive HSTS header
bosworthdental.co.uk: did not receive HSTS header
botlab.ch: could not connect to host
botmanager.pl: could not connect to host
bots.cat: could not connect to host
botsindiscord.me: could not connect to host
botstack.host: could not connect to host
+bottke.berlin: could not connect to host
boueki.jp: did not receive HSTS header
boueki.org: did not receive HSTS header
bougeret.fr: could not connect to host
@@ -3661,17 +3779,22 @@ bouncenslidenortheast.co.uk: did not receive HSTS header
bouncewithbovells.com: could not connect to host
bouncing4joy.co.uk: could not connect to host
bouncingbuzzybees.co.uk: could not connect to host
+bouncourseplanner.net: could not connect to host
bouncy-tots.co.uk: could not connect to host
+bouncyballscastles.co.uk: did not receive HSTS header
+bouncycastle.net.au: could not connect to host
bouncycastleandparty.co.uk: could not connect to host
-bouncycastlehiremedway.com: did not receive HSTS header
+bouncycastlehiremedway.com: could not connect to host
bouncycastles.me: did not receive HSTS header
bouncycastlesperth.net: could not connect to host
bouncyhouses.co.uk: could not connect to host
bouncymadness.com: could not connect to host
bouncytown.co.uk: could not connect to host
bountiful.gov: could not connect to host
+bourdon.fr.eu.org: could not connect to host
bourgdepabos.com: did not receive HSTS header
bourhis.info: did not receive HSTS header
+bourqu.in: did not receive HSTS header
boutiquefutebol.com.br: did not receive HSTS header
bouwbedrijfpurmerend.nl: did not receive HSTS header
bowlsheet.com: did not receive HSTS header
@@ -3685,10 +3808,8 @@ boxlitepackaging.com: did not receive HSTS header
boxmoe.cn: did not receive HSTS header
boxview.com: could not connect to host
boyan.in: could not connect to host
-boyerassoc.com: did not receive HSTS header
boyfriendhusband.men: did not receive HSTS header
boyntonobserver.org: did not receive HSTS header
-boz.nl: could not connect to host
bozemancarpetcleaningservices.com: did not receive HSTS header
bp-wahl.at: did not receive HSTS header
bpadvisors.eu: could not connect to host
@@ -3701,23 +3822,24 @@ bradfergusonrealestate.com: did not receive HSTS header
braemer-it-consulting.de: could not connect to host
bragasoft.com.br: could not connect to host
bragaweb.com.br: could not connect to host
+brahmstaedt.de: did not receive HSTS header
brain-e.co: could not connect to host
-brainbuxa.com: did not receive HSTS header
braineet.com: did not receive HSTS header
brainfork.ml: could not connect to host
brainfpv.com: did not receive HSTS header
+brainhub.nl: could not connect to host
brainlag.org: could not connect to host
braintensive.com: could not connect to host
braintm.com: could not connect to host
braintreebouncycastles.com: could not connect to host
braintreepayments.com: did not receive HSTS header
brainvation.de: did not receive HSTS header
-brakstad.org: could not connect to host
+brakpanplumber24-7.co.za: could not connect to host
bramburek.net: could not connect to host
bramsikkens.be: could not connect to host
bran.cc: could not connect to host
bran.soy: could not connect to host
-branchzero.com: could not connect to host
+branchzero.com: did not receive HSTS header
brand-foo.com: did not receive HSTS header
brand-foo.jp: did not receive HSTS header
brand-foo.net: did not receive HSTS header
@@ -3730,10 +3852,11 @@ brandonlui.ml: could not connect to host
brandons.site: could not connect to host
brandontaylor-black.com: could not connect to host
brandpit.nl: did not receive HSTS header
-brandred.net: could not connect to host
+brandred.net: did not receive HSTS header
brandspray.com: could not connect to host
+brasildxn.com.br: could not connect to host
brasilien.guide: could not connect to host
-brasilmorar.com: did not receive HSTS header
+brasilmorar.com: could not connect to host
bravz.de: could not connect to host
brazenfol.io: did not receive HSTS header
breakpoint.at: did not receive HSTS header
@@ -3742,9 +3865,11 @@ breatheav.com: did not receive HSTS header
breatheproduction.com: did not receive HSTS header
breeswish.org: did not receive HSTS header
bregnedalsystems.dk: did not receive HSTS header
+breitband.bz.it: could not connect to host
breitbild-beamer.de: max-age too low: 1209600
-bremensaki.com: could not connect to host
-brendanscherer.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+brenbarnes.com: could not connect to host
+brenbarnes.com.au: could not connect to host
+brendanscherer.com: could not connect to host
brenden.net.au: could not connect to host
bress.cloud: could not connect to host
brettelliff.com: did not receive HSTS header
@@ -3759,10 +3884,9 @@ brianpcurran.com: did not receive HSTS header
brickoo.com: could not connect to host
brickwerks.io: could not connect to host
brickyardbuffalo.com: did not receive HSTS header
-brideandgroomdirect.ie: did not receive HSTS header
+brideandgroomdirect.ie: could not connect to host
bridesmagazine.co.uk: did not receive HSTS header
bridgeout.com: could not connect to host
-bridgevest.com: could not connect to host
bridzius.lt: did not receive HSTS header
briggsleroux.com: could not connect to host
brightfuturemadebyme.com: could not connect to host
@@ -3786,7 +3910,6 @@ brix.ninja: did not receive HSTS header
brks.xyz: could not connect to host
brmascots.com: could not connect to host
brocinema.com: did not receive HSTS header
-broerict.nl: did not receive HSTS header
broerweb.nl: could not connect to host
broken-oak.com: could not connect to host
brokenjoysticks.net: did not receive HSTS header
@@ -3796,6 +3919,7 @@ brookehatton.com: max-age too low: 2592000
brookframework.org: could not connect to host
brossman.it: could not connect to host
brother-printsmart.nl: did not receive HSTS header
+brouskat.be: did not receive HSTS header
brouwerijkoelit.nl: could not connect to host
brown-devost.com: did not receive HSTS header
brownlawoffice.us: did not receive HSTS header
@@ -3811,7 +3935,7 @@ bryanshearer.accountant: did not receive HSTS header
bryantzheng.org: max-age too low: 0
bryn.xyz: could not connect to host
brynnan.nl: did not receive HSTS header
-brztec.com: could not connect to host
+brztec.com: did not receive HSTS header
bsagan.fr: did not receive HSTS header
bsalyzer.com: could not connect to host
bsc01.dyndns.org: could not connect to host
@@ -3820,6 +3944,7 @@ bsdlab.com: could not connect to host
bsdtips.com: could not connect to host
bsdug.org: could not connect to host
bsg-aok-muenchen.de: did not receive HSTS header
+bsgcredit.ro: could not connect to host
bsklabels.com: did not receive HSTS header
bsktweetup.info: could not connect to host
bsohoekvanholland.nl: could not connect to host
@@ -3829,7 +3954,7 @@ bsuess.de: could not connect to host
bsuru.xyz: could not connect to host
bt78.cn: could not connect to host
bt85.cn: could not connect to host
-bt9.cc: could not connect to host
+bt9.cc: did not receive HSTS header
bt96.cn: did not receive HSTS header
bt995.com: did not receive HSTS header
btaoke.com: could not connect to host
@@ -3841,9 +3966,11 @@ btcontract.com: could not connect to host
btcp.space: could not connect to host
btcpot.ltd: could not connect to host
btcycle.org: could not connect to host
+btine.tk: could not connect to host
btku.org: could not connect to host
btrb.ml: could not connect to host
btserv.de: could not connect to host
+btt7676.com: could not connect to host
btth.live: could not connect to host
btth.xyz: could not connect to host
bturboo.com: could not connect to host
@@ -3856,8 +3983,9 @@ buchverlag-scholz.de: did not receive HSTS header
buck.com: did not receive HSTS header
bucket.tk: could not connect to host
buckmulligans.com: did not receive HSTS header
-budaev-shop.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+budaev-shop.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
buddhistische-weisheiten.org: could not connect to host
+buddy-development-rabodirectconnect-api.azurewebsites.net: could not connect to host
buderus-family.be: could not connect to host
budgetenergievriendenvoordeel.nl: could not connect to host
budgetthostels.nl: did not receive HSTS header
@@ -3865,24 +3993,24 @@ budskap.eu: could not connect to host
budweisermeats.com: did not receive HSTS header
buenosairesestetica.com.ar: could not connect to host
buenotour.ru: did not receive HSTS header
-buergerdialog.net: could not connect to host
+buergerdialog.net: did not receive HSTS header
buergerhaushalt.com: did not receive HSTS header
buffalodrinkinggame.beer: did not receive HSTS header
buffetbouc.com: could not connect to host
bufla.net: did not receive HSTS header
bugtrack.co.uk: did not receive HSTS header
bugtrack.io: could not connect to host
-bugu.org: could not connect to host
buhayguro.com: could not connect to host
buhler.pro: did not receive HSTS header
buiko.com: did not receive HSTS header
build.chromium.org: did not receive HSTS header (error ignored - included regardless)
buildci.asia: could not connect to host
buildfaith.ca: did not receive HSTS header
+buildiffuse.com: could not connect to host
buildify.co.za: could not connect to host
+building-cost-estimators.com: could not connect to host
buildingclouds.at: could not connect to host
buildingclouds.ch: could not connect to host
-buildingclouds.de: could not connect to host
buildingclouds.es: could not connect to host
buildingclouds.eu: could not connect to host
buildingclouds.fr: could not connect to host
@@ -3900,11 +4028,13 @@ buldogueingles.com.br: could not connect to host
bulgarien.guide: could not connect to host
bulkbuy.tech: could not connect to host
bulkingtime.com: did not receive HSTS header
+bulkowespacerkowo.nl: could not connect to host
bull.id.au: could not connect to host
bullbits.com: max-age too low: 0
bulletbabu.com: could not connect to host
bulletpoint.cz: could not connect to host
bullpay.com: could not connect to host
+bullpendaily.com: could not connect to host
bullterrier.me: could not connect to host
bulmafox.com: could not connect to host
bulmastife.com.br: could not connect to host
@@ -3919,7 +4049,6 @@ bunny.tk: could not connect to host
bunnymud.com: could not connect to host
bupu.ml: did not receive HSTS header
buqi.cc: could not connect to host
-buradangonder.com: could not connect to host
burckardtnet.de: did not receive HSTS header
bureaubolster.nl: did not receive HSTS header
bureaugravity.com: did not receive HSTS header
@@ -3927,7 +4056,7 @@ burgawnc.gov: could not connect to host
burian-server.cz: could not connect to host
buricloud.fr: could not connect to host
burlesquemakeup.com: did not receive HSTS header
-burningcrash.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+burningcrash.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
burpsuite.site: could not connect to host
burroughsid.com: could not connect to host
burrow.ovh: could not connect to host
@@ -3936,6 +4065,7 @@ bursa3bydgoszcz.pl: could not connect to host
burtrum.top: could not connect to host
buryat-mongol.cf: could not connect to host
buryit.net: did not receive HSTS header
+burzstudios.com: could not connect to host
busanhs.bid: could not connect to host
busanhs.win: did not receive HSTS header
buserror.cn: could not connect to host
@@ -3956,32 +4086,42 @@ bustimes.org.uk: did not receive HSTS header
busybee360.com: could not connect to host
busyon.cloud: could not connect to host
butchersworkshop.com: did not receive HSTS header
+buthowdoyoubuygroceries.com: could not connect to host
butian518.com: did not receive HSTS header
butikpris.se: did not receive HSTS header
+butlercountyhistory.org: could not connect to host
butt.repair: could not connect to host
buttercoin.com: could not connect to host
buttercupstraining.co.uk: did not receive HSTS header
butterfieldstraining.com: could not connect to host
buttermilk.cf: could not connect to host
+buttonrun.com: did not receive HSTS header
buturyu.net: did not receive HSTS header
buturyu.org: did not receive HSTS header
buy-thing.com: could not connect to host
-buyaccessible.gov: could not connect to host
+buyaccessible.gov: did not receive HSTS header
buybaby.eu: could not connect to host
+buybike.shop: could not connect to host
+buycarpet.shop: could not connect to host
+buycook.shop: could not connect to host
buydesired.com: did not receive HSTS header
buyebook.xyz: could not connect to host
buyfox.de: could not connect to host
buyharpoon.com: could not connect to host
+buyhealth.shop: could not connect to host
buyingsellingflorida.com: could not connect to host
+buyjewel.shop: could not connect to host
buynowdepot.com: did not receive HSTS header
+buyplussize.shop: could not connect to host
+buyprofessional.shop: could not connect to host
buysellinvestproperties.com: did not receive HSTS header
buyshoe.org: could not connect to host
buytheway.co.za: could not connect to host
+buywine.shop: could not connect to host
buywood.shop: could not connect to host
buzzconcert.com: did not receive HSTS header
-buzzdeck.com: did not receive HSTS header
+buzzdeck.com: could not connect to host
buzztelco.com.au: could not connect to host
-bvalle.com: did not receive HSTS header
bvexplained.co.uk: could not connect to host
bvgg.eu: did not receive HSTS header
bw81.xyz: could not connect to host
@@ -3989,10 +4129,9 @@ bwear4all.de: could not connect to host
bwf11.com: could not connect to host
bwf55.com: could not connect to host
bwf6.com: could not connect to host
-bwf66.com: could not connect to host
+bwf66.com: did not receive HSTS header
bwf77.com: could not connect to host
bwf99.com: could not connect to host
-bwilkinson.co.uk: could not connect to host
bwin86.com: could not connect to host
bwin8601.com: could not connect to host
bwin8602.com: did not receive HSTS header
@@ -4008,10 +4147,11 @@ by1896.com: could not connect to host
by1898.com: could not connect to host
by1899.com: could not connect to host
by4cqb.cn: could not connect to host
-by77.com: could not connect to host
+by77.com: did not receive HSTS header
+by777.com: did not receive HSTS header
bydisk.com: could not connect to host
-bye-bye.us: could not connect to host
byji.com: could not connect to host
+byken.cn: could not connect to host
bypass.kr: could not connect to host
bypassed.bid: could not connect to host
bypassed.cc: could not connect to host
@@ -4027,16 +4167,16 @@ bypassed.press: could not connect to host
bypassed.pw: could not connect to host
bypassed.rocks: could not connect to host
bypassed.site: could not connect to host
-bypassed.st: did not receive HSTS header
+bypassed.st: could not connect to host
bypassed.today: could not connect to host
bypassed.works: could not connect to host
bypassed.world: did not receive HSTS header
bypro.xyz: could not connect to host
+byr.moe: could not connect to host
byrko.sk: could not connect to host
byronprivaterehab.com.au: did not receive HSTS header
byronr.com: could not connect to host
byronwade.com: did not receive HSTS header
-byte-time.com: did not receive HSTS header
byte.chat: could not connect to host
byte.wtf: did not receive HSTS header
bytelog.org: did not receive HSTS header
@@ -4046,17 +4186,19 @@ byteshift.ca: could not connect to host
bytesofcode.de: could not connect to host
bytesund.biz: could not connect to host
byteturtle.eu: did not receive HSTS header
+bythen.cn: could not connect to host
byurudraw.pics: could not connect to host
byvshie.com: could not connect to host
-bywin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+bywin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
bzhub.bid: could not connect to host
+bztraveler.com: could not connect to host
+bztraveler.net: could not connect to host
c-rickroll-v.pw: could not connect to host
-c0o.cc: could not connect to host
+c00ke.com: could not connect to host
c0rn3j.com: could not connect to host
c12discountonline.com: could not connect to host
-c16t.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+c16t.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
c1yd3i.me: could not connect to host
-c2media.de: did not receive HSTS header
c2o2.xyz: could not connect to host
c3-compose.com: could not connect to host
c3.pm: could not connect to host
@@ -4066,22 +4208,26 @@ c3bbs.com: could not connect to host
c3hv.cn: could not connect to host
c3ie.com: did not receive HSTS header
c4.hk: could not connect to host
-c6957.com: could not connect to host
-ca-terminal-multiservices.fr: could not connect to host
+c5h8no4na.net: could not connect to host
+c6957.com: did not receive HSTS header
+ca-terminal-multiservices.fr: did not receive HSTS header
+ca5.de: did not receive HSTS header
caaps.org.au: did not receive HSTS header
cabanactf.com: could not connect to host
cablehighspeed.net: could not connect to host
cabsites.com: could not connect to host
cabusar.fr: could not connect to host
-cachetagalong.com: could not connect to host
+cacd.eu: did not receive HSTS header
+cachetagalong.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
cachethome.com: could not connect to host
cachethq.io: did not receive HSTS header
cacn.pw: could not connect to host
caconnect.org: could not connect to host
+cacr.pw: could not connect to host
cadacoon.com: could not connect to host
cadafamilia.de: could not connect to host
cadao.me: did not receive HSTS header
-cadburymovies.in.net: did not receive HSTS header
+cadburymovies.in.net: could not connect to host
cadcreations.co.ke: did not receive HSTS header
cadenadg.gr: did not receive HSTS header
caerostris.com: could not connect to host
@@ -4091,16 +4237,16 @@ cafe-scientifique.org.ec: could not connect to host
cafe-service.ru: could not connect to host
cafechesscourt.com: could not connect to host
cafeey.com: could not connect to host
-cafefresco.pe: did not receive HSTS header
caferestor.com: did not receive HSTS header
cafesdomundo.pt: did not receive HSTS header
cafesg.net: did not receive HSTS header
+caglarcakici.com: could not connect to host
+caiben.org: could not connect to host
caibi.io: could not connect to host
caim.cz: did not receive HSTS header
caipai.fm: could not connect to host
caipao123.com: max-age too low: 0
cairnterrier.com.br: could not connect to host
-cais.de: did not receive HSTS header
caiwenjian.xyz: could not connect to host
cake.care: could not connect to host
cal.goip.de: could not connect to host
@@ -4110,6 +4256,7 @@ calcularpagerank.com.br: could not connect to host
calculatoaresecondhand.xyz: could not connect to host
caldaro.de: did not receive HSTS header
caldecotevillagehall.co.uk: could not connect to host
+caleb.cx: could not connect to host
caleb.host: could not connect to host
calebennett.com: did not receive HSTS header
calendriergratuit.fr: max-age too low: 300
@@ -4127,7 +4274,7 @@ callsigns.ca: could not connect to host
calltrackingreports.com: could not connect to host
calories.org: could not connect to host
caltonnutrition.com: did not receive HSTS header
-calvin.me: did not receive HSTS header
+calvin.me: max-age too low: 2592000
calypso-tour.net: could not connect to host
calypsogames.net: could not connect to host
calypsohost.net: did not receive HSTS header
@@ -4136,12 +4283,14 @@ camaya.net: did not receive HSTS header
cambridgeanalytica.net: could not connect to host
cambridgeanalytica.org: did not receive HSTS header
camda.online: could not connect to host
+camelforensics.com: could not connect to host
camelliaflowers.com.au: did not receive HSTS header
cameroonlounge.com: did not receive HSTS header
camisadotorcedor.com.br: could not connect to host
camjackson.net: did not receive HSTS header
camjobs.net: could not connect to host
cammarkets.com: could not connect to host
+camolist.com: could not connect to host
camomile.desi: did not receive HSTS header
campaignelves.com: could not connect to host
campbellsoftware.co.uk: could not connect to host
@@ -4176,7 +4325,6 @@ cannarobotics.com: could not connect to host
canopy.ninja: could not connect to host
cansworld.com: could not connect to host
canterberry.cc: did not receive HSTS header
-canyons.media: did not receive HSTS header
caodecristachines.com.br: could not connect to host
caodesantohumberto.com.br: could not connect to host
caoyu.info: did not receive HSTS header
@@ -4193,8 +4341,10 @@ captchatheprize.com: could not connect to host
captianseb.de: could not connect to host
captivatedbytabrett.com: did not receive HSTS header
captivationscience.com: could not connect to host
+capturapp.com: could not connect to host
captured-symphonies.com: could not connect to host
capturethepen.co.uk: could not connect to host
+car-insurance-quotes.biz: did not receive HSTS header
car-navi.ph: did not receive HSTS header
car-rental24.com: could not connect to host
car-shop.top: did not receive HSTS header
@@ -4222,15 +4372,18 @@ carey.bio: did not receive HSTS header
carey.li: did not receive HSTS header
cargobay.net: could not connect to host
caribbeanarthritisfoundation.org: did not receive HSTS header
-carif-idf.net: could not connect to host
-carif-idf.org: could not connect to host
+carif-idf.net: did not receive HSTS header
+carif-idf.org: did not receive HSTS header
carinsurance.es: could not connect to host
cariocacooking.com: did not receive HSTS header
carlandfaith.com: did not receive HSTS header
+carlislepassionplay.org: could not connect to host
+carlo.mx: did not receive HSTS header
carlolly.co.uk: could not connect to host
carlosalves.info: could not connect to host
carloshmm.com: could not connect to host
carloshmm.stream: could not connect to host
+carloshmoreira.com: could not connect to host
carlovanwyk.com: could not connect to host
carlsbouncycastlesandhottubs.co.uk: did not receive HSTS header
carlscatering.com: did not receive HSTS header
@@ -4243,6 +4396,7 @@ carrando.de: could not connect to host
carredejardin.com: did not receive HSTS header
carrentalsathens.com: did not receive HSTS header
carroarmato0.be: did not receive HSTS header
+carroceriascarluis.com: could not connect to host
carrollservicecompany.com: did not receive HSTS header
carrosserie-dubois.com: did not receive HSTS header
carrouselcompany.fr: could not connect to host
@@ -4270,66 +4424,71 @@ carun.us: did not receive HSTS header
carwashvapeur.be: could not connect to host
caryefurd.com: could not connect to host
casa-su.casa: did not receive HSTS header
+casaanastasia.ro: did not receive HSTS header
casadellecose.com: could not connect to host
+casadowifi.com.br: could not connect to host
casajardininsecticidas.com: did not receive HSTS header
casamorelli.com.br: did not receive HSTS header
casashopp.com.br: could not connect to host
casasuleletrodomesticos.com.br: could not connect to host
casedi.org: max-age too low: 0
casefall.com: could not connect to host
-cash-pos.com: did not receive HSTS header
+cash-pos.com: could not connect to host
+cashbackcow.us: could not connect to host
cashfortulsahouses.com: could not connect to host
cashless.fr: did not receive HSTS header
cashlink.de: did not receive HSTS header
cashlink.io: did not receive HSTS header
cashmyphone.ch: could not connect to host
cashsector.ga: could not connect to host
+casino-online.info: did not receive HSTS header
+casinobonuscodes.online: could not connect to host
casinoluck.com: did not receive HSTS header
casinoreal.com: could not connect to host
+casinorobots.com: did not receive HSTS header
casinostest.com: could not connect to host
casinovergleich.com: did not receive HSTS header
casionova.org: could not connect to host
casioshop.eu: did not receive HSTS header
-casjay.cloud: could not connect to host
-casjay.com: could not connect to host
+casjay.cloud: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+casjay.com: did not receive HSTS header
casjay.info: could not connect to host
-casjay.us: could not connect to host
-casjaygames.com: could not connect to host
+casjay.us: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+casjaygames.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
casovi.cf: could not connect to host
castagnonavocats.com: did not receive HSTS header
castellannenberg.com: could not connect to host
+casteloinformatica.com.br: did not receive HSTS header
castlejackpot.com: did not receive HSTS header
casualdesignsfurniture.com: max-age too low: 7889238
+casusgrillcaribbean.com: could not connect to host
cat-blum.com: could not connect to host
cat-box.de: did not receive HSTS header
-cat93.com: could not connect to host
+cat73.org: could not connect to host
cata.ga: could not connect to host
-catalin.pw: did not receive HSTS header
+catalin.pw: could not connect to host
catarsisvr.com: could not connect to host
catchfotografie.nl: could not connect to host
catcontent.cloud: could not connect to host
catdecor.ru: did not receive HSTS header
-caterkids.com: could not connect to host
+catenariadiscos.com: did not receive HSTS header
+caterkids.com: did not receive HSTS header
catgirl.me: did not receive HSTS header
catgirl.pics: could not connect to host
-catgirl.science: did not receive HSTS header
catharisme.net: could not connect to host
catharisme.org: could not connect to host
catherinesarasin.com: did not receive HSTS header
catherinescastles.co.uk: did not receive HSTS header
-catherinesofpartick.co.uk: did not receive HSTS header
cathosting.org: could not connect to host
catinmay.com: could not connect to host
catnapstudios.com: could not connect to host
catnet.dk: did not receive HSTS header
catnmeow.com: could not connect to host
catprog.org: did not receive HSTS header
-catram.org: did not receive HSTS header
catsmagic.pp.ua: could not connect to host
caudo.net: did not receive HSTS header
caudohay.com: did not receive HSTS header
caulong-ao.net: could not connect to host
-causae.es: did not receive HSTS header
cavaleria.ro: did not receive HSTS header
cavalierkingcharlesspaniel.com.br: could not connect to host
cave-reynard.ch: could not connect to host
@@ -4343,9 +4502,10 @@ cazes.info: did not receive HSTS header
cbamo.org: did not receive HSTS header
cbdcontact.pl: could not connect to host
cbi-epa.gov: could not connect to host
+cbk-connect.com: did not receive HSTS header
cc-brantomois.fr: did not receive HSTS header
cc2729.com: did not receive HSTS header
-cc6957.com: could not connect to host
+cc6957.com: did not receive HSTS header
ccac.gov: max-age too low: 120
ccayearbook.com: could not connect to host
ccblog.de: did not receive HSTS header
@@ -4377,9 +4537,9 @@ cdnb.co: could not connect to host
cdndepo.com: could not connect to host
cdnk39.com: could not connect to host
cdreporting.co.uk: did not receive HSTS header
+cdshh.club: did not receive HSTS header
cdt.org: did not receive HSTS header
cdu-wilgersdorf.de: did not receive HSTS header
-cduckett.net: could not connect to host
ceagriproducts.com: did not receive HSTS header
cecilga.gov: could not connect to host
cecilwalker.com.au: did not receive HSTS header
@@ -4414,7 +4574,7 @@ centralvoice.org: could not connect to host
centralync.com: could not connect to host
centrepoint-community.com: could not connect to host
centrodoinstalador.com.br: could not connect to host
-centromasterin.com: did not receive HSTS header
+centromasterin.com: could not connect to host
centrym.top: could not connect to host
centsforchange.net: could not connect to host
century-group.com: max-age too low: 2592000
@@ -4424,7 +4584,7 @@ cercevelet.com: did not receive HSTS header
cerebelo.info: could not connect to host
ceres1.space: did not receive HSTS header
ceresia.ch: could not connect to host
-ceritamalam.net: could not connect to host
+ceritamalam.net: did not receive HSTS header
cerize.love: could not connect to host
cernega.ro: did not receive HSTS header
cerpa.com.br: did not receive HSTS header
@@ -4442,6 +4602,7 @@ certmgr.org: could not connect to host
ceruleanmainbeach.com.au: did not receive HSTS header
cesal.net: could not connect to host
cesantias.co: could not connect to host
+cesboard.com: could not connect to host
cesidianroot.eu: could not connect to host
cespri.com.pe: did not receive HSTS header
cestunmetier.ch: could not connect to host
@@ -4452,19 +4613,17 @@ ceyizlikelisleri.com: did not receive HSTS header
cf-tm.net: could not connect to host
cf11.de: did not receive HSTS header
cfa.gov: did not receive HSTS header
-cfan.space: could not connect to host
cfcnexus.org: could not connect to host
cfcproperties.com: did not receive HSTS header
cfetengineering.com: could not connect to host
cfneia.org: did not receive HSTS header
cfoitplaybook.com: could not connect to host
-cfttt.com: could not connect to host
+cfxdesign.com: did not receive HSTS header
cgan.pw: could not connect to host
cganx.org: could not connect to host
-cgeceia.cf: could not connect to host
+cgbilling.com: did not receive HSTS header
cgerstner.eu: did not receive HSTS header
cglib.xyz: could not connect to host
-cgminc.net: could not connect to host
cgsshelper.tk: could not connect to host
cgtx.us: could not connect to host
chabaojia.com: did not receive HSTS header
@@ -4476,6 +4635,7 @@ chainmonitor.com: could not connect to host
chairinstitute.com: did not receive HSTS header
chaizhikang.com: could not connect to host
chaldeen.pro: did not receive HSTS header
+chalker.io: did not receive HSTS header
challengeskins.com: could not connect to host
challstrom.com: could not connect to host
chamathellawala.com: did not receive HSTS header
@@ -4497,28 +4657,30 @@ channyc.com: could not connect to host
chanoyu-gakkai.jp: did not receive HSTS header
chanshiyu.com: did not receive HSTS header
chaos.fail: could not connect to host
-chaoscastles.co.uk: did not receive HSTS header
+chaoscastles.co.uk: could not connect to host
chaoswebs.net: did not receive HSTS header
+chaotichive.com: could not connect to host
chaouby.com: could not connect to host
chapelaria.tf: could not connect to host
chapstick.life: could not connect to host
charakato.com: could not connect to host
chargedmonkey.com: did not receive HSTS header
-chargejuice.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+chargejuice.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
chargersdirect.com.au: did not receive HSTS header
charityclear.com: did not receive HSTS header
-charitystreet.co.uk: could not connect to host
+charitystreet.co.uk: did not receive HSTS header
charl.eu: could not connect to host
charlenevondell.com: could not connect to host
charlesjay.com: could not connect to host
charlesmilette.net: did not receive HSTS header
+charlesstover.com: did not receive HSTS header
charlestonsecuritysystems.net: did not receive HSTS header
charliemcneive.com: could not connect to host
charlimarie.com: did not receive HSTS header
charlipopkids.com.au: did not receive HSTS header
charlotte-touati.ch: could not connect to host
charlottecountyva.gov: could not connect to host
-charlotteswimmingpoolbuilder.com: could not connect to host
+charmyadesara.com: could not connect to host
charnleyhouse.co.uk: did not receive HSTS header
charonsecurity.com: could not connect to host
charp.eu: could not connect to host
@@ -4528,7 +4690,7 @@ chasafilli.ch: could not connect to host
chaseandzoey.de: could not connect to host
chaseganey.com: did not receive HSTS header
chasing-coins.com: did not receive HSTS header
-chaska.co.za: did not receive HSTS header
+chaska.co.za: could not connect to host
chasse-et-plaisir.com: did not receive HSTS header
chat2.cf: could not connect to host
chatbot.me: did not receive HSTS header
@@ -4542,7 +4704,7 @@ chateaudevaugrigneuse.com: did not receive HSTS header
chatint.com: did not receive HSTS header
chatme.im: could not connect to host
chatnbook.com: could not connect to host
-chatup.cf: could not connect to host
+chatup.cf: did not receive HSTS header
chaulootz.com: did not receive HSTS header
chaverde.org: could not connect to host
chazay.net: could not connect to host
@@ -4554,20 +4716,17 @@ chdgaming.xyz: could not connect to host
cheah.xyz: did not receive HSTS header
cheapalarmparts.com.au: did not receive HSTS header
cheapdns.org: could not connect to host
-cheapssl.com.tr: could not connect to host
cheazey.net: did not receive HSTS header
chebedara.com: could not connect to host
chebwebb.com: could not connect to host
checkhost.org: could not connect to host
checkmateshoes.com: did not receive HSTS header
-checkmatewebsolutions.com: did not receive HSTS header
+checkmyip.com: max-age too low: 0
checkout.google.com: could not connect to host (error ignored - included regardless)
checktechnology.com.au: could not connect to host
-checkyourmeds.com: did not receive HSTS header
-checookies.com: could not connect to host
+checkyourmeds.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
cheekylittlerascals.co.uk: could not connect to host
cheerflow.com: could not connect to host
-cheesefusion.com: could not connect to host
cheesehosting.net: did not receive HSTS header
cheesetart.my: could not connect to host
cheesypicsbooths.co.uk: could not connect to host
@@ -4590,16 +4749,15 @@ cheolguso.com: did not receive HSTS header
chepaofen.com: did not receive HSTS header
cherekerry.com: could not connect to host
cherrydropscandycarts.co.uk: could not connect to host
-cherryonit.com: could not connect to host
cherylsoleway.com: did not receive HSTS header
chesscoders.com: did not receive HSTS header
chessreporter.nl: did not receive HSTS header
chesterbrass.uk: did not receive HSTS header
-chestnut.cf: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
chiamata-aiuto.ch: could not connect to host
chiaraiuola.com: could not connect to host
chiaramail.com: could not connect to host
chib.chat: could not connect to host
+chicagostudentactivists.org: could not connect to host
chicorycom.net: did not receive HSTS header
chiemgauflirt.de: did not receive HSTS header
chihiro.xyz: could not connect to host
@@ -4611,7 +4769,7 @@ childcaresolutionscny.org: did not receive HSTS header
childrendeservebetter.org: could not connect to host
childwelfare.gov: did not receive HSTS header
chillebever.nl: could not connect to host
-chilli943.info: could not connect to host
+chilli943.info: did not receive HSTS header
chimparoo.ca: did not receive HSTS header
china-dhl.org: could not connect to host
china-line.org: could not connect to host
@@ -4622,11 +4780,13 @@ chint.ai: could not connect to host
chinternet.xyz: could not connect to host
chiphell.com: did not receive HSTS header
chirgui.eu: could not connect to host
+chl.la: could not connect to host
chloca.jp: could not connect to host
chloe.re: did not receive HSTS header
chloeallison.co.uk: could not connect to host
chloehorler.com: could not connect to host
chlouis.net: could not connect to host
+chlth.com: could not connect to host
chm.vn: did not receive HSTS header
chmurakotori.ml: could not connect to host
chocolat-suisse.ch: could not connect to host
@@ -4640,6 +4800,7 @@ choiralberta.ca: did not receive HSTS header
choisirmonerp.com: did not receive HSTS header
chollima.pro: could not connect to host
chon.io: did not receive HSTS header
+chonghe.org: did not receive HSTS header
chontalpa.pw: could not connect to host
choootto.club: could not connect to host
chopperforums.com: could not connect to host
@@ -4652,12 +4813,14 @@ chorleiterverband.de: did not receive HSTS header
choruscrowd.com: could not connect to host
chotlo.com: did not receive HSTS header
chotu.net: could not connect to host
-chowii.com: could not connect to host
+chowii.com: did not receive HSTS header
chr0me.sh: could not connect to host
+chris-edwards.net: could not connect to host
chris-web.info: could not connect to host
chrisandsarahinasia.com: could not connect to host
chrisbrakebill.com: did not receive HSTS header
chrisbrown.id.au: could not connect to host
+chriscowley.me.uk: did not receive HSTS header
chrisebert.net: could not connect to host
chrisfaber.com: could not connect to host
chriskirchner.de: did not receive HSTS header
@@ -4667,6 +4830,7 @@ chrisself.xyz: could not connect to host
christchurchbouncycastles.co.uk: could not connect to host
christerwaren.fi: did not receive HSTS header
christiaandruif.nl: could not connect to host
+christian-fischer.pictures: did not receive HSTS header
christian-krug.website: did not receive HSTS header
christianbro.gq: could not connect to host
christianhoffmann.info: could not connect to host
@@ -4687,6 +4851,7 @@ chrisupjohn.xyz: could not connect to host
chrisvannooten.tk: could not connect to host
chrisvicmall.com: did not receive HSTS header
chromaryu.net: could not connect to host
+chromaxa.com: could not connect to host
chrome: could not connect to host
chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
chrome.google.com: did not receive HSTS header (error ignored - included regardless)
@@ -4703,7 +4868,7 @@ chuck.ovh: did not receive HSTS header
chuckame.fr: did not receive HSTS header
chulado.com: did not receive HSTS header
chundelac.com: could not connect to host
-churchlinkpro.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+churchlinkpro.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
churchux.co: could not connect to host
churrasqueirafacil.com.br: could not connect to host
chxdf.net: did not receive HSTS header
@@ -4715,6 +4880,7 @@ cidadedopoker.com.br: did not receive HSTS header
cidr.ml: could not connect to host
cienbeaute-lidl.fr: did not receive HSTS header
cienciasempresariais.pt: could not connect to host
+ciftlikesintisi.com: could not connect to host
cigarblogs.net: could not connect to host
cigi.site: could not connect to host
ciiex.co: could not connect to host
@@ -4723,6 +4889,7 @@ cimalando.eu: could not connect to host
cinartelorgu.com: did not receive HSTS header
cinay.pw: could not connect to host
cindey.io: could not connect to host
+cine.to: did not receive HSTS header
cinefilia.tk: could not connect to host
cinelite.club: could not connect to host
cinema5.ru: did not receive HSTS header
@@ -4739,8 +4906,8 @@ cioconference.co.nz: could not connect to host
cipher.co.th: did not receive HSTS header
cipher.land: did not receive HSTS header
cipherli.st: did not receive HSTS header
-ciphrex.com: could not connect to host
ciplanutrition.com: could not connect to host
+cipriano.nl: could not connect to host
cira.email: could not connect to host
circ-logic.com: did not receive HSTS header
circlebox.rocks: could not connect to host
@@ -4756,10 +4923,10 @@ citationgurus.com: could not connect to host
citiagent.cz: could not connect to host
citizen-cam.de: did not receive HSTS header
citizenslasvegas.com: could not connect to host
-citizenspact.eu: did not receive HSTS header
citra-emu.org: did not receive HSTS header
citroner.blog: did not receive HSTS header
citybusexpress.com: did not receive HSTS header
+cityextra.com.au: did not receive HSTS header
cityofarcolatx.gov: could not connect to host
cityofeastpointemi.gov: could not connect to host
cityoflaurel.org: did not receive HSTS header
@@ -4774,12 +4941,14 @@ civicunicorn.us: could not connect to host
cjcaron.org: could not connect to host
cjessett.com: max-age too low: 0
cjtkfan.club: could not connect to host
+ckleemann.de: could not connect to host
ckrubble.co.za: did not receive HSTS header
-cl0ud.space: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+cl0ud.space: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
clacetandil.com.ar: could not connect to host
clad.cf: could not connect to host
claibornecountytn.gov: could not connect to host
claimit.ml: could not connect to host
+clan-ww.com: could not connect to host
clangwarnings.com: could not connect to host
clanthor.com: did not receive HSTS header
clapping-rhymes.com: could not connect to host
@@ -4802,17 +4971,19 @@ claude.tech: could not connect to host
claudearpel.fr: did not receive HSTS header
claudio4.com: did not receive HSTS header
claytoncondon.com: could not connect to host
+claytonstowing.com.au: did not receive HSTS header
clcleaningco.com: could not connect to host
cldfile.com: could not connect to host
cleanbeautymarket.com.au: did not receive HSTS header
cleancode.club: could not connect to host
cleanexperts.co.uk: could not connect to host
cleanfiles.us: could not connect to host
+cleaningbyrosie.com: did not receive HSTS header
cleaningsquad.ca: did not receive HSTS header
cleanmta.com: could not connect to host
cleansewellness.com: could not connect to host
cleanstar.org: did not receive HSTS header
-clear.ml: did not receive HSTS header
+clear.ml: could not connect to host
clearc.tk: could not connect to host
clearchatsandbox.com: could not connect to host
clearer.cloud: could not connect to host
@@ -4828,7 +4999,6 @@ clevergod.net: max-age too low: 604800
clic-et-site.com: could not connect to host
clic-music.com: could not connect to host
clicecompre.com.br: could not connect to host
-clich.cn: did not receive HSTS header
click-2-order.co.uk: did not receive HSTS header
clickandgo.com: did not receive HSTS header
clickandshoot.nl: could not connect to host
@@ -4843,7 +5013,7 @@ clicn.bio: could not connect to host
clicnbio.com: could not connect to host
cliftons.com: did not receive HSTS header
climaencusco.com: could not connect to host
-climaticarus.ru: max-age too low: 0
+climaticarus.ru: did not receive HSTS header
clingout.com: could not connect to host
clinia.ca: did not receive HSTS header
clinicaferrusbratos.com: did not receive HSTS header
@@ -4854,11 +5024,13 @@ clintonbloodworth.com: could not connect to host
clintonbloodworth.io: could not connect to host
clintonplasticsurgery.com: did not receive HSTS header
clintwilson.technology: max-age too low: 2592000
+clip.ovh: could not connect to host
clipped4u.com: could not connect to host
clite.ru: did not receive HSTS header
clnet.com.au: did not receive HSTS header
cloaked.ch: could not connect to host
clochix.net: could not connect to host
+clod-hacking.com: did not receive HSTS header
cloghercastles.co.uk: could not connect to host
clojurescript.ru: could not connect to host
cloppenburg-autmobil.com: could not connect to host
@@ -4871,8 +5043,8 @@ cloud-crowd.com.au: did not receive HSTS header
cloud-project.com: could not connect to host
cloud.wtf: could not connect to host
cloud2go.de: did not receive HSTS header
-cloud58.org: did not receive HSTS header
-cloudalice.net: could not connect to host
+cloud58.org: could not connect to host
+cloudalice.com: could not connect to host
cloudapi.vc: could not connect to host
cloudbased.info: could not connect to host
cloudbasedsite.com: did not receive HSTS header
@@ -4886,30 +5058,28 @@ cloudcy.net: could not connect to host
clouddesktop.co.nz: could not connect to host
cloudfren.com: could not connect to host
cloudimag.es: could not connect to host
-cloudimproved.com: could not connect to host
cloudkit.pro: did not receive HSTS header
cloudland.club: did not receive HSTS header
cloudlink.club: did not receive HSTS header
cloudmigrator365.com: did not receive HSTS header
-cloudnote.cc: could not connect to host
cloudns.com.au: did not receive HSTS header
cloudopt.net: did not receive HSTS header
-cloudoptimizedsmb.com: could not connect to host
cloudpagesforwork.com: did not receive HSTS header
cloudpebble.net: did not receive HSTS header
cloudpengu.in: could not connect to host
clouds.webcam: could not connect to host
-cloudsocial.io: could not connect to host
+cloudsocial.io: did not receive HSTS header
cloudspeedy.net: could not connect to host
cloudspotterapp.com: did not receive HSTS header
cloudsprt.com: did not receive HSTS header
cloudstoragemaus.com: could not connect to host
cloudstorm.me: could not connect to host
cloudstrike.co: could not connect to host
+cloudtocloud.tk: could not connect to host
cloudtskr.com: could not connect to host
cloudwalk.io: did not receive HSTS header
+cloudwallce.com: did not receive HSTS header
cloudwarez.xyz: could not connect to host
-cloudwellmarketing.com: could not connect to host
clounix.online: could not connect to host
clovissantos.com: could not connect to host
clowde.in: could not connect to host
@@ -4935,15 +5105,15 @@ clywedogmaths.co.uk: could not connect to host
cm.center: max-age too low: 0
cm3.pw: did not receive HSTS header
cmahy.be: did not receive HSTS header
-cmangos.net: could not connect to host
+cmangos.net: did not receive HSTS header
cmc-versand.de: did not receive HSTS header
cmcc.network: could not connect to host
cmcelectrical.com: did not receive HSTS header
cmci.dk: did not receive HSTS header
cmdtelecom.net.br: did not receive HSTS header
-cmf.qc.ca: could not connect to host
-cmftech.com: could not connect to host
cmitao.com: could not connect to host
+cmov-plongeurs.fr: did not receive HSTS header
+cmoycontracts.com: could not connect to host
cmpr.es: did not receive HSTS header
cmrss.com: could not connect to host
cmsbattle.com: could not connect to host
@@ -4957,7 +5127,7 @@ cnaprograms.online: could not connect to host
cnatraining.network: could not connect to host
cncfraises.fr: did not receive HSTS header
cncmachinemetal.com: did not receive HSTS header
-cncn.us: did not receive HSTS header
+cncn.us: could not connect to host
cnetw.xyz: could not connect to host
cnlau.com: could not connect to host
cnlic.com: could not connect to host
@@ -4965,13 +5135,12 @@ cnnet.fun: could not connect to host
cnnet.in: could not connect to host
cnrd.me: could not connect to host
cnsyear.com: did not receive HSTS header
-cnwage.com: could not connect to host
cnwarn.com: did not receive HSTS header
co-driversphoto.se: could not connect to host
co-factor.ro: did not receive HSTS header
co-yutaka.com: could not connect to host
+co2eco.cn: could not connect to host
coach-sportif.paris: did not receive HSTS header
-coachfederation.ro: could not connect to host
coachingconsultancy.com: did not receive HSTS header
coam.co: could not connect to host
cobcode.com: could not connect to host
@@ -4997,10 +5166,13 @@ code.google.com: did not receive HSTS header (error ignored - included regardles
codealkemy.co: could not connect to host
codebreaking.org: could not connect to host
codeco.pw: could not connect to host
+codecommunity.io: could not connect to host
codecontrollers.de: could not connect to host
+codedo.info: could not connect to host
+codeferm.com: could not connect to host
codeforce.io: could not connect to host
codefordus.de: could not connect to host
-codeforhakodate.org: did not receive HSTS header
+codeforhakodate.org: could not connect to host
codejunkie.de: could not connect to host
codeknights.com: did not receive HSTS header
codelayer.ca: could not connect to host
@@ -5015,27 +5187,27 @@ codeplay.org: did not receive HSTS header
codepoet.de: could not connect to host
codeproxy.ddns.net: could not connect to host
codepx.com: could not connect to host
+codera.co.uk: could not connect to host
codercross.com: could not connect to host
codercy.com: could not connect to host
coderhangout.com: could not connect to host
coderme.com: could not connect to host
-codersatlas.com: could not connect to host
codersbase.org: could not connect to host
codersbistro.com: did not receive HSTS header
codesplain.in: could not connect to host
codestep.io: could not connect to host
+codesyncro.com: did not receive HSTS header
codewiththepros.org: could not connect to host
codewiz.xyz: could not connect to host
codific.eu: did not receive HSTS header
codigo-bonus-bet.es: did not receive HSTS header
-codigodelbonusbet365.com: could not connect to host
coding.net: did not receive HSTS header
codyscafesb.com: did not receive HSTS header
coecrafters.com: could not connect to host
coffeedino.com: did not receive HSTS header
coffeeetc.co.uk: could not connect to host
-coffeetocode.me: did not receive HSTS header
-coffeist.com: could not connect to host
+coffeetocode.me: could not connect to host
+cogent.cc: could not connect to host
cogniflex.com: could not connect to host
cognixia.com: did not receive HSTS header
cognixia.us: did not receive HSTS header
@@ -5051,7 +5223,8 @@ coindatabase.net: could not connect to host
coindesfilles.fr: did not receive HSTS header
coinessa.com: could not connect to host
coinjar-sandbox.com: could not connect to host
-coinroom.com: could not connect to host
+coins2001.ru: could not connect to host
+coisabakana.com.br: could not connect to host
colarelli.ch: could not connect to host
coldaddy.com: could not connect to host
coldlostsick.net: did not receive HSTS header
@@ -5060,12 +5233,9 @@ colearnr.com: could not connect to host
colectivos.org: did not receive HSTS header
coleg.gov: could not connect to host
colincampbell.me: did not receive HSTS header
-colinchartier.com: could not connect to host
colinstark.ca: could not connect to host
-collab.ddnss.org: did not receive HSTS header
collablynk.com: did not receive HSTS header
collabra.email: did not receive HSTS header
-collage.me: could not connect to host
collard.tk: could not connect to host
collbox.co: did not receive HSTS header
collectivesupply.com: did not receive HSTS header
@@ -5086,7 +5256,6 @@ coloradobluebook.gov: could not connect to host
coloradocomputernetworking.net: could not connect to host
colorcentertoner.com.br: did not receive HSTS header
colorguni.com: could not connect to host
-colorlib.com: did not receive HSTS header
colorunhas.com.br: could not connect to host
colotimes.com: could not connect to host
coltonrb.com: could not connect to host
@@ -5109,39 +5278,43 @@ comfypc.com: could not connect to host
comico.info: could not connect to host
comicrelief.com: did not receive HSTS header
comicspines.com: could not connect to host
+comicspornow.com: could not connect to host
comidasperuanas.net: did not receive HSTS header
comiq.io: could not connect to host
comitesaustria.at: could not connect to host
comiteshopping.com: could not connect to host
-commania.co.kr: could not connect to host
commencepayments.com: did not receive HSTS header
commerciallocker.com: could not connect to host
commercialplanet.eu: could not connect to host
commune-preuilly.fr: did not receive HSTS header
community-cupboard.org: did not receive HSTS header
communityflow.info: could not connect to host
+comocurarlagastritis24.online: did not receive HSTS header
comocurarlashemorroides.org: could not connect to host
-comocurarlashemorroidesya.com: did not receive HSTS header
+comocurarlashemorroidesya.com: could not connect to host
+comodesinflamarlashemorroides.org: did not receive HSTS header
comoeliminarlaspapulasperladasenelglande.com: did not receive HSTS header
comohacerelamoraunhombrenet.com: did not receive HSTS header
+comoquitarlacaspa24.com: did not receive HSTS header
+comoquitarlasestriasrapidamente.com: could not connect to host
comorecuperaratumujerpdf.com: could not connect to host
comosatisfaceraunhombreenlacamaydejarloloco.com: did not receive HSTS header
comotalk.com: could not connect to host
compalytics.com: could not connect to host
comparamejor.com: did not receive HSTS header
-compareandrecycle.com: could not connect to host
+compareandrecycle.com: did not receive HSTS header
comparejewelleryprices.co.uk: could not connect to host
comparetravelinsurance.com.au: did not receive HSTS header
compartir.party: could not connect to host
compassionate-biology.com: could not connect to host
compeuphoria.com: could not connect to host
compiledworks.com: could not connect to host
+compilenix.org: could not connect to host
compitak.com: could not connect to host
complete-it.co.uk: did not receive HSTS header
completesportperformance.com: did not receive HSTS header
completionist.audio: could not connect to host
complex-organization.com: could not connect to host
-complexorganizations.com: could not connect to host
complexsystems.fail: did not receive HSTS header
complt.xyz: could not connect to host
complymd.com: did not receive HSTS header
@@ -5156,6 +5329,7 @@ compsmag.com: did not receive HSTS header
compucastell.ch: did not receive HSTS header
compucorner.com.mx: could not connect to host
compusolve.nl: could not connect to host
+computer-menschen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
computercraft.net: could not connect to host
computerfreunde-barmbek.de: could not connect to host
computertal.de: could not connect to host
@@ -5191,10 +5365,9 @@ connect.social: did not receive HSTS header
connect.ua: did not receive HSTS header
connectavid.com: could not connect to host
connected-verhuurservice.nl: did not receive HSTS header
-connectfss.com: could not connect to host
-connectingconcepts.com: did not receive HSTS header
+connectium.co.uk: did not receive HSTS header
conniesacademy.com: could not connect to host
-connorsmith.co: did not receive HSTS header
+connorsmith.co: could not connect to host
conocimientosdigitales.com: could not connect to host
conrad.am: could not connect to host
conrail.blue: did not receive HSTS header
@@ -5203,11 +5376,11 @@ consciousbrand.co: did not receive HSTS header
consciousbrand.org.au: could not connect to host
consciousbranding.org.au: could not connect to host
consciousbrands.net.au: could not connect to host
-consciousnesschange.com: could not connect to host
+consciousnesschange.com: did not receive HSTS header
consec-systems.de: could not connect to host
conseil-gli.fr: did not receive HSTS header
consejosdehogar.com: did not receive HSTS header
-conservados.com.br: could not connect to host
+conservados.com.br: did not receive HSTS header
consideryourways.net: could not connect to host
consill.com: could not connect to host
console.python.org: did not receive HSTS header
@@ -5217,7 +5390,8 @@ constancechen.me: did not receive HSTS header
constares.de: did not receive HSTS header
construct-trust.com: could not connect to host
consultanta-in-afaceri.ro: max-age too low: 0
-consultcelerity.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+consultasdigitales.com: did not receive HSTS header
+consultcelerity.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
consultingroupitaly.com: did not receive HSTS header
consultorcr.net: could not connect to host
consumer.gov: did not receive HSTS header
@@ -5230,11 +5404,13 @@ contarkos.xyz: could not connect to host
content-design.de: did not receive HSTS header
contentdesign.de: did not receive HSTS header
contents.ga: did not receive HSTS header
+continental-zermatt.ch: did not receive HSTS header
continuation.io: could not connect to host
continuumgaming.com: could not connect to host
contourheating.co.uk: did not receive HSTS header
contractdigital.co.uk: did not receive HSTS header
contraout.com: could not connect to host
+contrasentido.net: could not connect to host
controlcenter.gigahost.dk: did not receive HSTS header
contxt-agentur.de: did not receive HSTS header
convergemagazine.com: did not receive HSTS header
@@ -5245,8 +5421,8 @@ convoitises.com: did not receive HSTS header
cooink.net: could not connect to host
cookcountyclerkil.gov: could not connect to host
cooker.fr: could not connect to host
-cookiee.net: could not connect to host
cookielab.io: did not receive HSTS header
+cookiesoft.de: could not connect to host
cookiestudies.cf: could not connect to host
cookingbazart.com: did not receive HSTS header
cooko.at: could not connect to host
@@ -5256,10 +5432,14 @@ coolaj86.com: did not receive HSTS header
coolbutbroken.com: did not receive HSTS header
coolchevy.org.ua: did not receive HSTS header
coole-meister.de: could not connect to host
+coolerssr.space: could not connect to host
cooljs.me: could not connect to host
coolkidsbouncycastles.co.uk: did not receive HSTS header
coolrc.me: did not receive HSTS header
+cooltang.ooo: could not connect to host
+coolvibe.org: did not receive HSTS header
coolviewthermostat.com: did not receive HSTS header
+coop.se: did not receive HSTS header
cooperativehandmade.com: did not receive HSTS header
cooperativehandmade.pe: did not receive HSTS header
coor.fun: could not connect to host
@@ -5284,7 +5464,6 @@ cordial-restaurant.com: did not receive HSTS header
core4system.de: could not connect to host
coreapm.com: could not connect to host
corecdn.org: could not connect to host
-corecodec.com: could not connect to host
coreinfrastructure.org: did not receive HSTS header
corenetworking.de: could not connect to host
coresos.com: could not connect to host
@@ -5297,26 +5476,29 @@ cormactagging.ie: could not connect to host
cormilu.com.br: did not receive HSTS header
cornishcamels.com: did not receive HSTS header
coroasdefloresonline.com.br: could not connect to host
-corourbano.es: could not connect to host
+corourbano.es: did not receive HSTS header
corozanu.ro: did not receive HSTS header
corp.goog: could not connect to host (error ignored - included regardless)
corpoatletico.com.br: could not connect to host
-corpoepele.com.br: did not receive HSTS header
+corpoepele.com.br: could not connect to host
corporacioninternacionallideres.org: did not receive HSTS header
corporateencryption.com: could not connect to host
corporatesubscriptions.com.au: did not receive HSTS header
corpsepaint.life: could not connect to host
-correct.horse: could not connect to host
+correctemails.com: could not connect to host
correiodovale.com.br: did not receive HSTS header
corruption-mc.net: could not connect to host
corruption-rsps.net: could not connect to host
corruption-server.net: could not connect to host
corruptsamurai.com: could not connect to host
+corsectra.com: could not connect to host
cortisolsupplement.com: did not receive HSTS header
corvus.eu.org: could not connect to host
corytyburski.com: could not connect to host
coslinker.com: could not connect to host
cosmetic-surgery-prices.co.uk: could not connect to host
+cosmeticasimple.com: could not connect to host
+cosmeticos-naturales.com: did not receive HSTS header
cosmeticosdelivery.com.br: could not connect to host
cosmeticosnet.com.br: did not receive HSTS header
cosmiatria.pe: could not connect to host
@@ -5328,12 +5510,14 @@ costa-rica-reisen.ch: did not receive HSTS header
costa-rica-reisen.de: did not receive HSTS header
costcofinance.com: did not receive HSTS header
costellofc.co.uk: could not connect to host
+costinstefan.eu: could not connect to host
costow.club: did not receive HSTS header
+costruzioni.milano.it: could not connect to host
cote-chasse.com: did not receive HSTS header
cotonea.de: did not receive HSTS header
cotta.dk: could not connect to host
cougarsland.com: did not receive HSTS header
-coughlan.de: could not connect to host
+coughlan.de: did not receive HSTS header
counselling.network: could not connect to host
counsellingtime.co.uk: could not connect to host
count.sh: could not connect to host
@@ -5349,12 +5533,10 @@ course.rs: could not connect to host
coursella.com: did not receive HSTS header
courses.nl: could not connect to host
cousincouples.com: max-age too low: 7776000
-coussinsky.net: could not connect to host
covaci.pro: did not receive HSTS header
cove.sh: could not connect to host
covenantbank.net: did not receive HSTS header
covenantmatrix.com: could not connect to host
-covenantoftheriver.org: did not receive HSTS header
coverdat.com: could not connect to host
coverduck.ru: could not connect to host
cowboyim.com: could not connect to host
@@ -5363,8 +5545,10 @@ coworkingmanifesto.com: could not connect to host
coxxs.moe: could not connect to host
cozitop.com.br: could not connect to host
cozmaadrian.ro: could not connect to host
+cozmoapp.com: could not connect to host
cozy.io: did not receive HSTS header
cozycloud.cc: did not receive HSTS header
+cozywebsite.com: could not connect to host
cpahunt.com: did not receive HSTS header
cpaneltips.com: could not connect to host
cpbanq.com: could not connect to host
@@ -5377,6 +5561,7 @@ crackers4cheese.com: could not connect to host
cracking.org: did not receive HSTS header
crackingking.com: did not receive HSTS header
crackpfer.de: could not connect to host
+cradle.ph: did not receive HSTS header
craftbeerbarn.co.uk: could not connect to host
craftcommerce.com: did not receive HSTS header
craftedge.xyz: could not connect to host
@@ -5392,7 +5577,6 @@ crashsec.com: could not connect to host
crate.io: did not receive HSTS header
cravelyrics.com: could not connect to host
crawcial.de: could not connect to host
-crawlspaceandbasementsolutions.com: could not connect to host
crazifyngers.com: could not connect to host
crazy-crawler.de: did not receive HSTS header
crazybulksteroids.com: did not receive HSTS header
@@ -5442,46 +5626,49 @@ crewplanner.eu: did not receive HSTS header
crge.eu: did not receive HSTS header
criadorespet.com.br: could not connect to host
crickey.eu: could not connect to host
+crimbotrees.co.uk: did not receive HSTS header
crimewatch.net.za: could not connect to host
crimson.no: did not receive HSTS header
crisissurvivalspecialists.com: could not connect to host
cristianhares.com: could not connect to host
+cristoraciones.com: did not receive HSTS header
critcola.com: could not connect to host
criticalaim.com: did not receive HSTS header
crl-autos.com: could not connect to host
crmdemo.website: could not connect to host
-crockett.io: did not receive HSTS header
+crmenrich.com: could not connect to host
+crockett.io: could not connect to host
croco.vision: did not receive HSTS header
croeder.net: could not connect to host
croisieres.discount: could not connect to host
-cromefire.myds.me: could not connect to host
croncron.io: could not connect to host
croods-mt2.fr: could not connect to host
croome.no-ip.org: could not connect to host
crop-alert.com: could not connect to host
-croquette.net: could not connect to host
+croquette.net: did not receive HSTS header
crosbug.com: did not receive HSTS header (error ignored - included regardless)
crosscom.ch: could not connect to host
crossfunctional.com: could not connect to host
crossorig.in: did not receive HSTS header
crosspeakoms.com: did not receive HSTS header
crosssec.com: did not receive HSTS header
-crosssellguide.com: could not connect to host
+crosssellguide.com: did not receive HSTS header
crow.tw: could not connect to host
crowdcurity.com: did not receive HSTS header
crowdjuris.com: could not connect to host
crowdwis.com: could not connect to host
-crownbouncycastlehire.co.uk: did not receive HSTS header
crownchessclub.com: could not connect to host
crownruler.com: did not receive HSTS header
crox.co: could not connect to host
crrev.com: did not receive HSTS header (error ignored - included regardless)
crt.cloud: could not connect to host
-crt.sh: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-crtvmgmt.com: did not receive HSTS header
+crt.sh: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+crt2014-2024review.gov: could not connect to host
+crtvmgmt.com: could not connect to host
crudysql.com: could not connect to host
crufad.org: did not receive HSTS header
cruikshank.com.au: could not connect to host
+crunchy.rocks: did not receive HSTS header
cruzadobalcazarabogados.com: could not connect to host
cruzeiropedia.org: did not receive HSTS header
cruzr.xyz: could not connect to host
@@ -5489,7 +5676,7 @@ cryogenix.net: could not connect to host
cryoit.com: did not receive HSTS header
cryp.no: could not connect to host
crypalert.com: could not connect to host
-crypkit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+crypkit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
crypt.guru: did not receive HSTS header
crypticshell.co.uk: did not receive HSTS header
cryptify.eu: could not connect to host
@@ -5529,7 +5716,6 @@ csehnyelv.hu: could not connect to host
cser.me: could not connect to host
csfloors.co.uk: could not connect to host
csfs.org.uk: could not connect to host
-csgo.design: could not connect to host
csgo.help: could not connect to host
csgo77.com: could not connect to host
csgodicegame.com: did not receive HSTS header
@@ -5544,20 +5730,23 @@ csilies.de: could not connect to host
csinfo.us: could not connect to host
cskdoc.com: did not receive HSTS header
csohack.tk: could not connect to host
+csokolade.hu: could not connect to host
cspbuilder.info: did not receive HSTS header
csru.net: could not connect to host
+css.net: could not connect to host
css125.com: max-age too low: 0
cssps.org: could not connect to host
cssu.in: did not receive HSTS header
-csuw.net: could not connect to host
csvape.com: did not receive HSTS header
ct-status.org: could not connect to host
ct-watches.dk: did not receive HSTS header
cthomas.work: could not connect to host
cthulhuden.com: could not connect to host
ctknight.me: could not connect to host
+ctl.email: could not connect to host
ctoforhire.com.au: could not connect to host
ctr.id: did not receive HSTS header
+ctrld.me: could not connect to host
ctyi.me: could not connect to host
cuanhua3s.com: could not connect to host
cube.de: did not receive HSTS header
@@ -5582,7 +5771,7 @@ culturerain.com: could not connect to host
cultureroll.com: could not connect to host
cumparama.com: did not receive HSTS header
cunha.be: could not connect to host
-cuni-cuni-club.com: did not receive HSTS header
+cuni-cuni-club.com: could not connect to host
cuni-rec.com: did not receive HSTS header
cuongquach.com: did not receive HSTS header
cuongthach.com: did not receive HSTS header
@@ -5598,7 +5787,7 @@ curareldolordeespalda.com: could not connect to host
curarnosensalud.com: could not connect to host
curia.fi: could not connect to host
curiouscat.me: max-age too low: 2592000
-curiouspeddler.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+curiouspeddler.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
curlyroots.com: did not receive HSTS header
current.com: did not receive HSTS header
currentobserver.com: could not connect to host
@@ -5618,6 +5807,7 @@ customd.com: did not receive HSTS header
customerbox.ir: did not receive HSTS header
customfilmworks.com: could not connect to host
customizeyourshower.com: could not connect to host
+customizeyoursink.com: could not connect to host
customromlist.com: could not connect to host
customshort.link: could not connect to host
cutelariafiveladeouro.com.br: did not receive HSTS header
@@ -5631,9 +5821,9 @@ cvjm-memmingen.de: did not receive HSTS header
cvninja.pl: did not receive HSTS header
cvsoftub.com: could not connect to host
cvtparking.co.uk: did not receive HSTS header
-cvursache.com: could not connect to host
cw-bw.de: could not connect to host
cwage.com: did not receive HSTS header
+cwarren.org: could not connect to host
cwbw.network: could not connect to host
cwilson.ga: could not connect to host
cwr.gov: did not receive HSTS header
@@ -5658,6 +5848,7 @@ cybergates.org: did not receive HSTS header
cyberlab.kiev.ua: could not connect to host
cyberlab.team: did not receive HSTS header
cyberpeace.nl: could not connect to host
+cyberpioneer.net: did not receive HSTS header
cyberprey.com: could not connect to host
cyberpunk.ca: could not connect to host
cybersantri.com: could not connect to host
@@ -5666,9 +5857,9 @@ cybershambles.com: could not connect to host
cybersmart.co.uk: did not receive HSTS header
cyberspace.community: could not connect to host
cyberspace.today: could not connect to host
-cybertorsk.org: could not connect to host
+cyberxpert.nl: could not connect to host
cybit.io: could not connect to host
-cybozulive-dev.com: did not receive HSTS header
+cybozulive-dev.com: could not connect to host
cybozulive.com: did not receive HSTS header
cybrary.it: did not receive HSTS header
cyclehackluxembourgcity.lu: could not connect to host
@@ -5676,6 +5867,7 @@ cyclingjunkies.com: could not connect to host
cyclisjumper.gallery: could not connect to host
cydia-search.io: could not connect to host
cyelint.com: could not connect to host
+cygnaltech.com: could not connect to host
cygu.ch: could not connect to host
cymtech.net: could not connect to host
cynoshair.com: could not connect to host
@@ -5687,12 +5879,11 @@ cypherpunk.ws: could not connect to host
cyphertite.com: could not connect to host
cyson.tech: could not connect to host
cytadel.fr: did not receive HSTS header
-czaw.org: did not receive HSTS header
czechamlp.com: could not connect to host
czlx.co: could not connect to host
d-academia.com: did not receive HSTS header
d-garnier-delaunay.fr: did not receive HSTS header
-d-imitacion.top: did not receive HSTS header
+d-imitacion.top: could not connect to host
d-msg.com: could not connect to host
d-quantum.com: did not receive HSTS header
d-rickroll-e.pw: could not connect to host
@@ -5704,7 +5895,10 @@ d3njjcbhbojbot.cloudfront.net: did not receive HSTS header
d3x.pw: could not connect to host
d4rkdeagle.tk: could not connect to host
d4wson.com: could not connect to host
-d6957.com: could not connect to host
+d4x.de: could not connect to host
+d6957.com: did not receive HSTS header
+d7215.com: could not connect to host
+d88.com: could not connect to host
d8studio.net: could not connect to host
da-ist-kunst.de: could not connect to host
da.hn: could not connect to host
@@ -5712,7 +5906,8 @@ da42foripad.com: could not connect to host
da8.cc: did not receive HSTS header
dabblegoat.com: could not connect to host
dabbot.org: did not receive HSTS header
-dabneydriveanimalhospital.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dabneydriveanimalhospital.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dachb0den.net: could not connect to host
dad256.tk: could not connect to host
dadahen.com: max-age too low: 0
dadtheimpaler.com: could not connect to host
@@ -5723,15 +5918,15 @@ dagmar2018.cz: could not connect to host
dah5.com: did not receive HSTS header
dahl-pind.dk: did not receive HSTS header
dai-rin.co.jp: could not connect to host
-dai.top: could not connect to host
-dai94.com: could not connect to host
dailybunda.com: did not receive HSTS header
dailystormerpodcasts.com: could not connect to host
dailytopix.com: could not connect to host
daimadi.com: could not connect to host
dair.se: did not receive HSTS header
+daisuki.pw: could not connect to host
daiwai.de: did not receive HSTS header
daiweihu.com: could not connect to host
+daiyuu.jp: did not receive HSTS header
dakerealestate.com: did not receive HSTS header
dakl-shop.de: did not receive HSTS header
dakotasilencer.com: did not receive HSTS header
@@ -5748,11 +5943,13 @@ dam74.com.ar: could not connect to host
damienpontifex.com: did not receive HSTS header
damjanovic.work: could not connect to host
damongant.de: did not receive HSTS header
-dan.org.nz: could not connect to host
+dan-informacijske-varnosti.si: could not connect to host
+dan.org.nz: did not receive HSTS header
danaketh.com: could not connect to host
danbarrett.com.au: could not connect to host
dancebuzz.co.uk: did not receive HSTS header
dancerdates.net: did not receive HSTS header
+dancingshiva.at: max-age too low: 0
dandymrsb.com: could not connect to host
daniel-du.com: did not receive HSTS header
daniel-mosquera.com: could not connect to host
@@ -5767,18 +5964,20 @@ danielheal.net: could not connect to host
danieliancu.com: could not connect to host
danieljireh.com: did not receive HSTS header
daniellockyer.com: did not receive HSTS header
+danielmostertman.com: did not receive HSTS header
+danielmostertman.nl: did not receive HSTS header
+danielsteiner.net: could not connect to host
danielt.co.uk: did not receive HSTS header
-danielvanassen.nl: did not receive HSTS header
danielverlaan.nl: could not connect to host
danielworthy.com: did not receive HSTS header
danielzuzevich.com: could not connect to host
-danifabi.eu: could not connect to host
danijobs.com: could not connect to host
danishenanigans.com: could not connect to host
dankeblog.com: could not connect to host
dankredues.com: could not connect to host
danmark.guide: did not receive HSTS header
danna888.com: max-age too low: 0
+danny.fm: max-age too low: 2592000
dannycrichton.com: did not receive HSTS header
danonsecurity.com: could not connect to host
danova.de: did not receive HSTS header
@@ -5787,10 +5986,8 @@ danrl.de: could not connect to host
dansa.com.co: could not connect to host
dansk-skole.de: did not receive HSTS header
danskringsporta.be: did not receive HSTS header
-danwillenberg.com: did not receive HSTS header
-dao.spb.su: could not connect to host
daolerp.xyz: could not connect to host
-dapianw.com: did not receive HSTS header
+dapim.co.il: could not connect to host
daplie.com: could not connect to host
dapps.earth: could not connect to host
dappworld.com: could not connect to host
@@ -5799,14 +5996,14 @@ daren.com.br: could not connect to host
dargasia.is: could not connect to host
darinjohnson.ca: did not receive HSTS header
dario.im: did not receive HSTS header
-dariosirangelo.me: could not connect to host
+darisni.me: did not receive HSTS header
dark-x.cf: could not connect to host
darkanzali.pl: max-age too low: 0
darkdestiny.ch: could not connect to host
darkestproductions.net: did not receive HSTS header
darkfriday.ddns.net: could not connect to host
darkhole.cn: did not receive HSTS header
-darkishgreen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+darkishgreen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
darknebula.space: could not connect to host
darknode.in: did not receive HSTS header
darkpony.ru: could not connect to host
@@ -5827,18 +6024,18 @@ dart-tanke.com: could not connect to host
dart-tanke.de: could not connect to host
dartsdon.jp: did not receive HSTS header
daryl.moe: could not connect to host
+das-ee.com: did not receive HSTS header
das-tyrol.at: did not receive HSTS header
-dash-board.jp: did not receive HSTS header
+dash-board.jp: could not connect to host
dash.rocks: did not receive HSTS header
dashboard.run: could not connect to host
dashboard.yt: could not connect to host
dashburst.com: did not receive HSTS header
dashnimorad.com: did not receive HSTS header
-dashwebconsulting.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dashwebconsulting.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
data-abundance.com: could not connect to host
data-detox.com: could not connect to host
databeam.de: could not connect to host
-datacandy.com: did not receive HSTS header
datacave.is: could not connect to host
datacenternews.asia: did not receive HSTS header
datacenternews.co.nz: did not receive HSTS header
@@ -5846,8 +6043,6 @@ datacentrenews.eu: did not receive HSTS header
datacool.host: could not connect to host
datacool.tk: could not connect to host
datacubed.com: did not receive HSTS header
-datadyne.technology: could not connect to host
-dataformers.at: max-age too low: 60
datagir.ir: did not receive HSTS header
datahoarder.download: could not connect to host
datahoarder.xyz: could not connect to host
@@ -5855,11 +6050,13 @@ datahoarderschool.club: could not connect to host
dataisme.com: did not receive HSTS header
datajapan.co.jp: did not receive HSTS header
datamatic.ru: could not connect to host
+dataprotectionadvisors.com: did not receive HSTS header
dataretention.solutions: could not connect to host
datascomemorativas.com.br: did not receive HSTS header
datasharesystem.com: could not connect to host
datasnitch.co.uk: could not connect to host
datedeposit.com: could not connect to host
+datelligent.com: could not connect to host
datengrab.ws: could not connect to host
datenlast.de: did not receive HSTS header
datenreiter.cf: could not connect to host
@@ -5878,9 +6075,9 @@ davewut.ca: did not receive HSTS header
david-mallett.com: did not receive HSTS header
davidandkailey.com: could not connect to host
davidbrito.tech: could not connect to host
-davidcrx.net: could not connect to host
+davidcrx.net: did not receive HSTS header
davidglidden.eu: did not receive HSTS header
-davidgrudl.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+davidgrudl.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
davidhunter.scot: did not receive HSTS header
davidletellier.com: did not receive HSTS header
davidlillo.com: could not connect to host
@@ -5889,16 +6086,16 @@ davidnoren.com: did not receive HSTS header
davidreinhardt.de: could not connect to host
davidscherzer.at: could not connect to host
davimun.org: could not connect to host
+davisroi.com: could not connect to host
davros.eu: could not connect to host
davros.ru: could not connect to host
dawena.de: did not receive HSTS header
dawgtag.ca: could not connect to host
dawnofeden.org: could not connect to host
dawnofhope.tk: could not connect to host
-dawnson.is: could not connect to host
dawnsonb.com: did not receive HSTS header
day-peak.com: did not receive HSTS header
-day.vip: could not connect to host
+day.vip: did not receive HSTS header
daylight-dream.ee: did not receive HSTS header
daylightcompany.com: did not receive HSTS header
days.one: could not connect to host
@@ -5909,7 +6106,6 @@ db.gy: could not connect to host
dbcom.ru: did not receive HSTS header
dbdc.us: did not receive HSTS header
dbjc.duckdns.org: could not connect to host
-dbjc.tk: could not connect to host
dbjl.fr: did not receive HSTS header
dblx.io: could not connect to host
dbmxpca.com: did not receive HSTS header
@@ -5923,13 +6119,13 @@ dcautomacao.com.br: did not receive HSTS header
dcc.moe: did not receive HSTS header
dccode.gov: could not connect to host
dccoffeeproducts.com: did not receive HSTS header
-dccommunity.de: did not receive HSTS header
+dccommunity.de: could not connect to host
dccraft.net: could not connect to host
-dcl.re: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dcl.re: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
dctxf.com: did not receive HSTS header
dcuofriends.net: could not connect to host
dd.art.pl: could not connect to host
-dd6957.com: could not connect to host
+dd6957.com: did not receive HSTS header
dden.website: could not connect to host
dden.xyz: could not connect to host
ddholdingservices.com: did not receive HSTS header
@@ -5945,22 +6141,31 @@ deadinsi.de: max-age too low: 0
deadmann.com: could not connect to host
deadsoul.net: could not connect to host
deai-life.biz: could not connect to host
+dealpass.no: did not receive HSTS header
deals.ms: did not receive HSTS header
-deanisa.ninja: did not receive HSTS header
+deanisa.ninja: could not connect to host
dearly.com: did not receive HSTS header
-deathberry.ddns.net: could not connect to host
debank.tv: did not receive HSTS header
+debarrasantony.com: could not connect to host
+debarrasasnieressurseine.com: could not connect to host
+debarrasboulognebillancourt.com: could not connect to host
+debarrasclichy.com: could not connect to host
+debarrascolombes.com: could not connect to host
+debarrasnanterre.com: could not connect to host
debatch.se: could not connect to host
debian-vhost.de: could not connect to host
debiton.dk: could not connect to host
debitoutil.com: did not receive HSTS header
debitpaie.com: did not receive HSTS header
debkleinteam.com: did not receive HSTS header
+debora-singkreis.de: could not connect to host
deborahmarinelli.eu: could not connect to host
+debraydesign.com.au: could not connect to host
debtkit.co.uk: did not receive HSTS header
debtprotectionreporting.com: did not receive HSTS header
-decaffeinated.io: could not connect to host
decafu.co: could not connect to host
+decay24.de: could not connect to host
+decayshop.com: could not connect to host
decentralizedweb.net: did not receive HSTS header
decesus.com: could not connect to host
decibelios.li: could not connect to host
@@ -5968,12 +6173,12 @@ decloverly.com: could not connect to host
deco.me: could not connect to host
decoating.pl: could not connect to host
decoboutique.com: did not receive HSTS header
+decodeanddestroy.com: could not connect to host
decoder.link: did not receive HSTS header
decofire.pl: did not receive HSTS header
decomplify.com: did not receive HSTS header
deconsolutions.com: did not receive HSTS header
decoraid.com: did not receive HSTS header
-decorativeconcretewa.com.au: did not receive HSTS header
decorauvent.ca: did not receive HSTS header
decorincasa.com.br: could not connect to host
decorland.com.ua: could not connect to host
@@ -5984,6 +6189,7 @@ dedeo.tk: could not connect to host
dedicatutiempo.es: could not connect to host
dedietrich-asia.com: could not connect to host
dedimax.de: did not receive HSTS header
+deejayevents.ro: did not receive HSTS header
deeonix.eu: could not connect to host
deep.social: did not receive HSTS header
deepaero.com: could not connect to host
@@ -6004,21 +6210,25 @@ deer.team: could not connect to host
deetz.nl: did not receive HSTS header
deetzen.de: did not receive HSTS header
deezeno.com: could not connect to host
-defi-metier.com: could not connect to host
-defi-metier.fr: could not connect to host
+defcon.org: could not connect to host
+defcongroups.org: could not connect to host
+defendtheweb.co.uk: did not receive HSTS header
+defi-metier.com: did not receive HSTS header
+defi-metier.fr: did not receive HSTS header
defi-metier.org: could not connect to host
-defi-metiers.com: could not connect to host
+defi-metiers.com: did not receive HSTS header
defi-metiers.fr: did not receive HSTS header
-defi-metiers.org: could not connect to host
+defi-metiers.org: did not receive HSTS header
defiler.tk: could not connect to host
defimetier.fr: could not connect to host
-defimetier.org: could not connect to host
-defimetiers.com: could not connect to host
-defimetiers.fr: could not connect to host
+defimetier.org: did not receive HSTS header
+defimetiers.com: did not receive HSTS header
+defimetiers.fr: did not receive HSTS header
defme.eu: could not connect to host
defrax.com: could not connect to host
defrax.de: did not receive HSTS header
degosoft.nl: did not receive HSTS header
+degrasboom.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
degressif.com: could not connect to host
degroetenvanrosaline.nl: could not connect to host
dehydrated.de: did not receive HSTS header
@@ -6027,18 +6237,20 @@ deight.in: could not connect to host
deinserverhost.de: did not receive HSTS header
dekasan.ru: could not connect to host
dekka.cz: did not receive HSTS header
-delandalucia.com: did not receive HSTS header
-delawarenation-nsn.gov: could not connect to host
+delawarenation-nsn.gov: did not receive HSTS header
delayrefunds.co.uk: could not connect to host
delbrouck.ch: did not receive HSTS header
delcopa.gov: did not receive HSTS header
delf.co.jp: did not receive HSTS header
+delfino.cr: did not receive HSTS header
delitto.top: could not connect to host
deliverance.co.uk: could not connect to host
delivery.co.at: could not connect to host
deliveryiquique.cl: could not connect to host
+delkniga42.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
deltaconcepts.de: did not receive HSTS header
deltasmart.ch: did not receive HSTS header
+deluxecccam.tv: could not connect to host
delvj.org: could not connect to host
demandware.com: did not receive HSTS header
demarche-expresse.com: did not receive HSTS header
@@ -6046,7 +6258,6 @@ demdis.org: could not connect to host
demilitarized.ninja: could not connect to host
demo-server.us: could not connect to host
demo.sb: could not connect to host
-demo9.ovh: did not receive HSTS header
demoakasafe2.tk: could not connect to host
democracy.io: did not receive HSTS header
democraticdifference.com: could not connect to host
@@ -6055,7 +6266,8 @@ demuzere.com: could not connect to host
demuzere.eu: could not connect to host
demuzere.net: could not connect to host
demuzere.org: could not connect to host
-denh.am: did not receive HSTS header
+dengchangdong.com: did not receive HSTS header
+denh.am: could not connect to host
denimio.com: did not receive HSTS header
denisjean.fr: could not connect to host
dennispotter.eu: did not receive HSTS header
@@ -6069,27 +6281,29 @@ denvercybersecurity.com: did not receive HSTS header
denverphilharmonic.org: did not receive HSTS header
denverprophit.us: did not receive HSTS header
deped.blog: could not connect to host
+deped.io: could not connect to host
depedclub.ph: could not connect to host
+depedncr.com: could not connect to host
depedshs.com: could not connect to host
-deperewi.gov: could not connect to host
+depedtalks.com: could not connect to host
+depedtambayan.org.ph: could not connect to host
+depedtayo.com: could not connect to host
+deperewi.gov: did not receive HSTS header
depijl-mz.nl: did not receive HSTS header
depixion.agency: could not connect to host
deployitwith.me: did not receive HSTS header
depo.space: could not connect to host
depot-leipzig.de: did not receive HSTS header
-deprobe.pro: could not connect to host
+depth-co.jp: could not connect to host
dequehablamos.es: could not connect to host
derbyshiredotnet.co.uk: did not receive HSTS header
derchris.me: could not connect to host
derechosdigitales.org: did not receive HSTS header
-dereddingsklos.nl: did not receive HSTS header
derivativeshub.pro: could not connect to host
derive.cc: could not connect to host
derk-jan.com: did not receive HSTS header
-derkuki.de: could not connect to host
dermacarecomplex.com: could not connect to host
derpumpkinfuhrer.com: could not connect to host
-derrickemery.com: did not receive HSTS header
dersix.com: did not receive HSTS header
derstulle.de: could not connect to host
derwaldschrat.net: did not receive HSTS header
@@ -6100,6 +6314,7 @@ design-production.jp: did not receive HSTS header
designandmore.it: did not receive HSTS header
designanyware.com.br: could not connect to host
designdevs.eu: did not receive HSTS header
+designerchad.com: did not receive HSTS header
designgears.com: could not connect to host
designgraphic.fr: did not receive HSTS header
designsbykerrialee.co.uk: did not receive HSTS header
@@ -6107,7 +6322,6 @@ designthinking.or.jp: did not receive HSTS header
deskvip.com: could not connect to host
desmo.gg: could not connect to host
despachomartinyasociados.com: could not connect to host
-despora.de: could not connect to host
despotika.de: could not connect to host
desserteagleselvenar.tk: could not connect to host
desterman.ru: could not connect to host
@@ -6115,14 +6329,14 @@ destileria.net.br: could not connect to host
destinationbijoux.fr: could not connect to host
destinationsofnewyorkstate.com: did not receive HSTS header
destinopiriapolis.com: did not receive HSTS header
-destom.be: did not receive HSTS header
-destyntek.com: could not connect to host
+destom.be: could not connect to host
desuperheroes.co: did not receive HSTS header
desveja.com.br: could not connect to host
detalhecomercio.com.br: did not receive HSTS header
detechnologiecooperatie.nl: did not receive HSTS header
detector.exposed: could not connect to host
detest.org: could not connect to host
+detoxic.vn: could not connect to host
detoxsinutritie.ro: did not receive HSTS header
detroitrocs.org: did not receive HSTS header
detroitstylepizza.com: max-age too low: 300
@@ -6149,24 +6363,25 @@ develop.fitness: could not connect to host
developerfair.com: did not receive HSTS header
developersclub.website: did not receive HSTS header
devenney.io: did not receive HSTS header
+devh.net: could not connect to host
+deviajesturismo.com: could not connect to host
deviltracks.net: could not connect to host
+deviltraxxx.de: could not connect to host
devin-balimuhac.de: did not receive HSTS header
devincrow.me: could not connect to host
devinpacker.com: did not receive HSTS header
deviser.wang: could not connect to host
devisonline.ch: could not connect to host
devistravaux.org: did not receive HSTS header
-devjack.de: could not connect to host
devkid.net: did not receive HSTS header
devmsg.com: could not connect to host
devnsec.com: could not connect to host
devnull.team: could not connect to host
-devolution.ws: could not connect to host
devonvintagechina.co.uk: did not receive HSTS header
devopps.me: could not connect to host
devops.moe: could not connect to host
devopsconnected.com: could not connect to host
-devpgsv.com: could not connect to host
+devpgsv.com: did not receive HSTS header
devpsy.info: could not connect to host
devtestfan1.gov: could not connect to host
devtub.com: could not connect to host
@@ -6174,12 +6389,13 @@ devuan.org: did not receive HSTS header
devyn.ca: did not receive HSTS header
dewebwerf.nl: did not receive HSTS header
dewin.io: could not connect to host
-dexonsoftware.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
dezintranet.com: max-age too low: 1
dfc.gov: could not connect to host
dfixit.com: could not connect to host
dfrance.com.br: did not receive HSTS header
+dfranke.com: could not connect to host
dfviana.com.br: max-age too low: 2592000
+dg7.in: did not receive HSTS header
dgby.org: did not receive HSTS header
dggwp.de: did not receive HSTS header
dharamkot.com: could not connect to host
@@ -6187,6 +6403,7 @@ dharma.ai: did not receive HSTS header
dhbr.org: did not receive HSTS header
dhl-smart.ch: could not connect to host
dhlcotizadorexpo-qa.azurewebsites.net: could not connect to host
+dhlinux.org: could not connect to host
dhpcs.com: did not receive HSTS header
dhpiggott.net: did not receive HSTS header
dhub.xyz: could not connect to host
@@ -6194,42 +6411,42 @@ dhxxls.com: could not connect to host
diabetesblog.org: did not receive HSTS header
diablotine.rocks: could not connect to host
diabolic.chat: could not connect to host
-diadiemdangsong.com: did not receive HSTS header
diadorafitness.es: could not connect to host
diag.com.ua: max-age too low: 300
diagnocentro.cl: could not connect to host
diagnosia.com: did not receive HSTS header
-diagnostix.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+diagnostix.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
diagonale-deco.fr: did not receive HSTS header
diagrammingoutloud.co.uk: did not receive HSTS header
dialectic-og.com: could not connect to host
-diamondcare.com.br: did not receive HSTS header
+diamondcare.com.br: could not connect to host
diamondpkg.org: could not connect to host
diamondt.us: did not receive HSTS header
-dianlujitao.com: could not connect to host
+dianlujitao.com: did not receive HSTS header
diannaobos.com: did not receive HSTS header
diasp.cz: did not receive HSTS header
-dicando.com: could not connect to host
+dicando.com: did not receive HSTS header
diceduels.com: could not connect to host
dicgaming.net: could not connect to host
dichgans-besserer.de: did not receive HSTS header
dichvudangkygiayphep.com: could not connect to host
-dick.red: could not connect to host
dickieslife.com: did not receive HSTS header
diconnex.com: did not receive HSTS header
didikhari.web.id: could not connect to host
die-besten-weisheiten.de: could not connect to host
+die-blahuts.de: could not connect to host
die-bobbeloase.com: could not connect to host
dieb.photo: could not connect to host
diedrich.me: could not connect to host
diegobarrosmaia.com.br: could not connect to host
diejanssens.net: did not receive HSTS header
diemogebhardt.com: did not receive HSTS header
+dienstplan.one: could not connect to host
dierencompleet.nl: did not receive HSTS header
dierenkruiden.nl: did not receive HSTS header
dieser.me: could not connect to host
dietagespresse.com: did not receive HSTS header
-dietbrand.eu: could not connect to host
+dietbrand.eu: did not receive HSTS header
diewebstube.de: could not connect to host
diezel.com: could not connect to host
diferenca.com: did not receive HSTS header
@@ -6240,16 +6457,16 @@ digihyp.ch: did not receive HSTS header
digikol.net: could not connect to host
digimomedia.co.uk: could not connect to host
diginota.com: did not receive HSTS header
+digioccumss.ddns.net: could not connect to host
digipitch.com: did not receive HSTS header
digired.xyz: could not connect to host
+digital-muscle.com.au: did not receive HSTS header
digital1world.com: could not connect to host
-digital2web.com: could not connect to host
digitalbank.kz: could not connect to host
digitalcash.cf: could not connect to host
digitalcloud.ovh: could not connect to host
digitalcuko.com: did not receive HSTS header
digitaldaddy.net: could not connect to host
-digitaldashboard.gov: could not connect to host
digitalero.rip: did not receive HSTS header
digitalewelten.de: could not connect to host
digitalexhale.com: did not receive HSTS header
@@ -6267,10 +6484,11 @@ digiworks.se: did not receive HSTS header
diguass.us: could not connect to host
dijks.com: could not connect to host
dikshant.net: could not connect to host
-dilichen.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dilichen.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
dillynbarber.com: did not receive HSTS header
diluv.com: did not receive HSTS header
dim.lighting: could not connect to host
+dimdom.com.br: did not receive HSTS header
dimensionen.de: did not receive HSTS header
dimes.com.tr: did not receive HSTS header
dimeshop.nl: did not receive HSTS header
@@ -6288,7 +6506,6 @@ dinkum.online: could not connect to host
dinotopia.org.uk: could not connect to host
dinotv.at: could not connect to host
dintillat.fr: could not connect to host
-dinube.com: did not receive HSTS header
dionysus.se: could not connect to host
dipconsultants.com: could not connect to host
directhskincream.com: could not connect to host
@@ -6302,14 +6519,13 @@ direnv.net: did not receive HSTS header
direwolfsoftware.ca: could not connect to host
dirips.com: did not receive HSTS header
dirtycat.ru: could not connect to host
-dirtygeek.ovh: did not receive HSTS header
-disadattamentolavorativo.it: could not connect to host
discha.net: did not receive HSTS header
disciplesmakingdisciples.ca: could not connect to host
disciplina.io: did not receive HSTS header
-discipul.nl: could not connect to host
+discipul.nl: did not receive HSTS header
disco-crazy-world.de: could not connect to host
discord-chan.net: could not connect to host
+discordghost.space: could not connect to host
discountmania.eu: did not receive HSTS header
discountmetaux.fr: did not receive HSTS header
discover-mercure.com: could not connect to host
@@ -6337,11 +6553,13 @@ ditrutoancau.vn: could not connect to host
dittvertshus.no: could not connect to host
diva-ey.com: could not connect to host
divegearexpress.com.cn: could not connect to host
-divenwa.com: could not connect to host
+divenwa.com: max-age too low: 300
diversity-spielzeug.de: did not receive HSTS header
+divertiagua.com.br: could not connect to host
divinemercyparishvlds.com: did not receive HSTS header
+divorciosmurcia.com: did not receive HSTS header
divvi.co.nz: did not receive HSTS header
-divvymonkey.com: did not receive HSTS header
+divvymonkey.com: could not connect to host
divvyradio.com: could not connect to host
dixiediner.com: did not receive HSTS header
dixmag.com: could not connect to host
@@ -6351,24 +6569,25 @@ diz.in.ua: could not connect to host
dizalty.tv: did not receive HSTS header
dizihocasi.com: could not connect to host
dizorg.net: could not connect to host
-dizzieforums.com: did not receive HSTS header
dj4et.de: could not connect to host
djangogolf.com: could not connect to host
djeung.org: could not connect to host
djiconsulting.com: did not receive HSTS header
djieno.com: did not receive HSTS header
+djlive.pl: did not receive HSTS header
djroynomden.nl: could not connect to host
-djsk.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
djul.net: could not connect to host
djursland-psykologen.dk: did not receive HSTS header
djxmmx.net: did not receive HSTS header
djz4music.com: could not connect to host
dkniss.de: could not connect to host
dl.google.com: did not receive HSTS header (error ignored - included regardless)
-dlabouncycastlehire.co.uk: did not receive HSTS header
+dlabouncycastlehire.co.uk: could not connect to host
dlc.viasinc.com: could not connect to host
dlcwilson.com: could not connect to host
dlemper.de: did not receive HSTS header
+dlld.biz: could not connect to host
+dlld.info: could not connect to host
dlouwrink.nl: could not connect to host
dlyanxs.com: did not receive HSTS header
dlyl888.com: could not connect to host
@@ -6380,15 +6599,14 @@ dmcibulldog.com: did not receive HSTS header
dmdre.com: did not receive HSTS header
dmeevalumate.com: did not receive HSTS header
dmfd.net: could not connect to host
-dmix.ca: did not receive HSTS header
dmlogic.com: could not connect to host
-dmtry.me: did not receive HSTS header
+dmschilderwerken.nl: could not connect to host
+dmtry.me: max-age too low: 0
dmwall.cn: could not connect to host
dmx.xyz: could not connect to host
-dmxledlights.com: could not connect to host
dmz.ninja: could not connect to host
dmzlab.se: could not connect to host
-dnastatic.com: could not connect to host
+dnastatic.com: did not receive HSTS header
dndesign.be: did not receive HSTS header
dne.lu: did not receive HSTS header
dnfc.rocks: could not connect to host
@@ -6397,9 +6615,9 @@ dns-manager.info: did not receive HSTS header
dns.google.com: did not receive HSTS header (error ignored - included regardless)
dnsbird.net: could not connect to host
dnsbird.org: could not connect to host
+dnscrypt.nl: could not connect to host
dnscrypt.org: did not receive HSTS header
dnsinfo.ml: could not connect to host
-dnsipv6.srv.br: did not receive HSTS header
dnsknowledge.com: did not receive HSTS header
dnsql.io: could not connect to host
dnzz123.com: did not receive HSTS header
@@ -6416,14 +6634,15 @@ dockerm.com: could not connect to host
dockerturkiye.com: could not connect to host
docket.news: could not connect to host
doclassworks.com: could not connect to host
-docloh.de: did not receive HSTS header
doclot.io: could not connect to host
+docnhanh.vn: could not connect to host
docset.io: could not connect to host
docufiel.com: could not connect to host
doculus.io: could not connect to host
documentations-sociales.com: could not connect to host
docupet.com: did not receive HSTS header
docxtemplater.com: did not receive HSTS header
+doda.space: could not connect to host
dodomu.ddns.net: could not connect to host
doesmycodehavebugs.today: could not connect to host
doeswindowssuckforeveryoneorjustme.com: could not connect to host
@@ -6434,14 +6653,17 @@ doge.me: did not receive HSTS header
doge.town: could not connect to host
dogespeed.ga: could not connect to host
dogfi.sh: did not receive HSTS header
+dogft.com: could not connect to host
doggieholic.net: could not connect to host
+doggybag-committee.com: could not connect to host
dognlife.com: did not receive HSTS header
+dogodki.today: could not connect to host
dogoodbehappyllc.com: could not connect to host
dogprograms.net: could not connect to host
dohosting.ru: could not connect to host
dojifish.space: could not connect to host
dojin.nagoya: could not connect to host
-dokan-e.com: did not receive HSTS header
+dokan-e.com: could not connect to host
dokan.online: could not connect to host
doked.io: could not connect to host
dokspot.cf: could not connect to host
@@ -6451,25 +6673,24 @@ dokuraum.de: could not connect to host
dolarcanadense.com.br: could not connect to host
dolevik.com: could not connect to host
dollarstore24.com: could not connect to host
-dollchan.org: could not connect to host
dollywiki.co.uk: could not connect to host
-dolphin-cloud.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-dolphin-hosting.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-dolphin-it.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dolphin-cloud.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dolphin-hosting.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dolphin-it.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
dolphincorp.co.uk: could not connect to host
dolt.xyz: could not connect to host
+domain001.info: could not connect to host
domaine-aigoual-cevennes.com: did not receive HSTS header
domainelaremejeanne.com: did not receive HSTS header
domainhacks.io: could not connect to host
domains.homes: did not receive HSTS header
-domainwatch.me: did not receive HSTS header
-domaris.de: did not receive HSTS header
+domaris.de: could not connect to host
domasazu.pl: did not receive HSTS header
domen-reg.ru: could not connect to host
-domengrad.ru: did not receive HSTS header
+domengrad.ru: could not connect to host
domenicocatelli.com: could not connect to host
dominikanskarepubliken.guide: could not connect to host
-dominioanimal.com: could not connect to host
+dominioanimal.com: did not receive HSTS header
dominioanimal.com.br: could not connect to host
domix.fun: could not connect to host
domizx.de: could not connect to host
@@ -6479,10 +6700,10 @@ domovitae.nl: could not connect to host
domquixoteepi.com.br: did not receive HSTS header
domy-drewniane-kanadyjskie.pl: did not receive HSTS header
don.yokohama: could not connect to host
-donateabox.org: could not connect to host
+donetsk24.su: could not connect to host
dong8.top: could not connect to host
dongjingre.net: could not connect to host
-dongthucvat.com: did not receive HSTS header
+dongthucvat.com: could not connect to host
donhoward.org: did not receive HSTS header
donlydental.ca: did not receive HSTS header
donmez.uk: could not connect to host
@@ -6492,9 +6713,7 @@ donotspampls.me: could not connect to host
donotspellitgav.in: did not receive HSTS header
donovand.info: did not receive HSTS header
donpaginasweb.com: did not receive HSTS header
-donpomodoro.com.co: did not receive HSTS header
donsbach-edv.de: did not receive HSTS header
-donttrust.me: could not connect to host
donttrustrobots.nl: could not connect to host
donzelot.co.uk: did not receive HSTS header
donzool.es: could not connect to host
@@ -6507,11 +6726,12 @@ doopdidoop.com: could not connect to host
door.cards: could not connect to host
dopetrue.com: could not connect to host
dopfer-fenstertechnik.de: did not receive HSTS header
-dophys.top: did not receive HSTS header
dopost.it: could not connect to host
doppenpost.nl: could not connect to host
dopply.com: did not receive HSTS header
+dora.cat: could not connect to host
dorfzittig.de: did not receive HSTS header
+dorianmuthig.com: could not connect to host
doriginal.es: did not receive HSTS header
dorkfarm.com: did not receive HSTS header
dormebebe.com.br: could not connect to host
@@ -6543,9 +6763,11 @@ dovro.de: did not receive HSTS header
dowc.org: did not receive HSTS header
download.jitsi.org: did not receive HSTS header
downsouthweddings.com.au: did not receive HSTS header
+downthe.pub: did not receive HSTS header
downtimerobot.com: could not connect to host
doxcelerate.com: could not connect to host
doyoulyft.com: could not connect to host
+dp2.com.br: did not receive HSTS header
dpangerl.de: did not receive HSTS header
dpsart.it: could not connect to host
dpucarriersma.gov: could not connect to host
@@ -6574,7 +6796,6 @@ drahcro.uk: could not connect to host
drainagebuizen.nl: did not receive HSTS header
drainagedirect.com: did not receive HSTS header
drakefortreasurer.sexy: could not connect to host
-drakensberg-tourism.com: did not receive HSTS header
drakfot.se: could not connect to host
dralexjimenez.com: did not receive HSTS header
drastosasports.com.br: could not connect to host
@@ -6599,16 +6820,15 @@ dreamonkey.com: did not receive HSTS header
dreamstream.mobi: max-age too low: 0
dreamtechie.com: did not receive HSTS header
dredgepress.com: did not receive HSTS header
-dreemurr.com: could not connect to host
dreischneidiger.de: could not connect to host
+dreiweiden.de: could not connect to host
dreizwosechs.de: could not connect to host
dresdner-christstollen-von-reimann.de: could not connect to host
dressify.co: could not connect to host
-drew.life: could not connect to host
drewgle.net: could not connect to host
+drfun1.com: did not receive HSTS header
drgdrp.com: did not receive HSTS header
-drgiyaseddin.com: did not receive HSTS header
-drgn.li: did not receive HSTS header
+drgiyaseddin.com: could not connect to host
drhopeson.com: did not receive HSTS header
drillnation.com.au: could not connect to host
drinknaturespower.com: did not receive HSTS header
@@ -6619,7 +6839,7 @@ drive.xyz: could not connect to host
drivewithstatetransit.com.au: did not receive HSTS header
driving-lessons.co.uk: could not connect to host
drivingtestpro.com: did not receive HSTS header
-drixn.com: could not connect to host
+drixn.com: did not receive HSTS header
drixn.info: could not connect to host
drixn.net: could not connect to host
drjobs.com.au: did not receive HSTS header
@@ -6628,7 +6848,7 @@ drlutfi.com: did not receive HSTS header
drmyco.net: did not receive HSTS header
drobniuch.pl: could not connect to host
drogoz.moe: could not connect to host
-drogueriaelbarco.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+drogueriaelbarco.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
droidboss.com: did not receive HSTS header
droidwave.com: did not receive HSTS header
droidwiki.de: could not connect to host
@@ -6654,6 +6874,7 @@ drostschocolates.com: did not receive HSTS header
drpure.pw: could not connect to host
drrodina.com: did not receive HSTS header
drros.ru: could not connect to host
+drschlarb.eu: could not connect to host
drschruefer.de: max-age too low: 0
drtroyhendrickson.com: could not connect to host
drtti.io: could not connect to host
@@ -6673,19 +6894,23 @@ ds-christiansen.de: could not connect to host
dsanraffleshangbai.xyz: could not connect to host
dsdalismerkezi.com: did not receive HSTS header
dshiv.io: could not connect to host
-dsimons.tk: could not connect to host
dsmstainlessproducts.co.uk: did not receive HSTS header
-dsne.com.mx: did not receive HSTS header
+dsne.com.mx: could not connect to host
dsouzamusic.com: did not receive HSTS header
dssale.com: did not receive HSTS header
+dstvinstalledenvale.co.za: could not connect to host
dstvinstallfourways.co.za: did not receive HSTS header
+dstvinstallkemptonpark.co.za: could not connect to host
+dstvrandburg.co.za: could not connect to host
+dstvsandton.co.za: could not connect to host
+dstvsouthafrica.com: could not connect to host
dsyunmall.com: could not connect to host
dte.co.uk: did not receive HSTS header
dtechstore.com.br: did not receive HSTS header
dtpak.cz: max-age too low: 0
dtub.co: could not connect to host
+dualascent.com: could not connect to host
dualias.xyz: could not connect to host
-duan.li: could not connect to host
dubaosheng.com: could not connect to host
dubik.su: did not receive HSTS header
duchyoffeann.com: could not connect to host
@@ -6693,15 +6918,18 @@ ducius.net: could not connect to host
duckasylum.com: did not receive HSTS header
duckyubuntu.tk: could not connect to host
ducohosting.com: did not receive HSTS header
-due-diligence-security.com: could not connect to host
duelsow.eu: could not connect to host
duelysthub.com: could not connect to host
-duerls.de: did not receive HSTS header
+duerls.de: could not connect to host
duerlund-falkenberg.dk: could not connect to host
+dugnet.com: could not connect to host
+dugnet.io: could not connect to host
+dugnet.net: could not connect to host
+dugnet.org: could not connect to host
dugnet.tech: could not connect to host
dui805.com: did not receive HSTS header
dujsq.com: could not connect to host
-dujsq.top: could not connect to host
+dujsq.top: did not receive HSTS header
dukec.me: could not connect to host
dukefox.com: did not receive HSTS header
duks.com.br: could not connect to host
@@ -6722,11 +6950,14 @@ duole30.com: could not connect to host
duonganhtuan.com: did not receive HSTS header
duongpho.com: did not receive HSTS header
durangoenergyllc.com: could not connect to host
+durbanlocksmiths.co.za: could not connect to host
+durchblick-shop.de: could not connect to host
durexwinkel.nl: could not connect to host
dushu.cat: could not connect to host
duskopy.top: could not connect to host
dusnan.com: could not connect to host
dustycloth.com: could not connect to host
+dustygroove.com: did not receive HSTS header
dustyro.se: could not connect to host
dutchrank.com: did not receive HSTS header
dutyfreeinformation.com: did not receive HSTS header
@@ -6736,8 +6967,10 @@ dvotx.org: did not receive HSTS header
dw-loewe.de: could not connect to host
dwbtoftshit.com: did not receive HSTS header
dwellstudio.com: did not receive HSTS header
-dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+dwienzek.de: did not receive HSTS header
dwnld.me: could not connect to host
+dxm.no-ip.biz: could not connect to host
dycem-ns.com: did not receive HSTS header
dycontrol.de: could not connect to host
dylanboudro.com: max-age too low: 0
@@ -6746,17 +6979,30 @@ dylanwise.net: could not connect to host
dyn-nserve.net: could not connect to host
dynamic-innovations.net: could not connect to host
dynamic-networks.be: could not connect to host
+dynamicsnetwork.net: could not connect to host
dynamicyou.co.uk: could not connect to host
dynamize.solutions: did not receive HSTS header
dynamo.city: did not receive HSTS header
+dynastyarena.com: could not connect to host
+dynastybullpen.com: could not connect to host
+dynastycalculator.com: could not connect to host
+dynastycentral.com: could not connect to host
+dynastychalkboard.com: could not connect to host
+dynastyclubhouse.com: could not connect to host
+dynastycrate.com: could not connect to host
+dynastyduel.com: could not connect to host
+dynastyfan.com: could not connect to host
+dynastygoal.com: could not connect to host
+dynastylocker.com: could not connect to host
+dynastyredline.com: could not connect to host
dynastyredzone.com: could not connect to host
dz6957.com: could not connect to host
+dzi.wtf: did not receive HSTS header
dzimejl.sk: did not receive HSTS header
dzlibs.io: could not connect to host
dzndk.net: could not connect to host
dzndk.org: could not connect to host
dzyabchenko.com: could not connect to host
-dzytdl.com: did not receive HSTS header
e-apack.com.br: could not connect to host
e-aut.net: could not connect to host
e-baraxolka.ru: could not connect to host
@@ -6774,11 +7020,11 @@ e-pokupki.eu: did not receive HSTS header
e-rickroll-r.pw: could not connect to host
e-sa.com: did not receive HSTS header
e-surveillant.nl: did not receive HSTS header
-e-vau.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+e-vau.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
e-vo-linka.cz: could not connect to host
e-wishlist.net: could not connect to host
e024.org: could not connect to host
-e1488.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+e1488.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
e191.com: could not connect to host
e30gruppe.com: did not receive HSTS header
e3amn2l.com: could not connect to host
@@ -6791,18 +7037,20 @@ e3li.org: did not receive HSTS header
e3q.de: could not connect to host
e505.net: could not connect to host
e51888.com: could not connect to host
-e52888.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-e52888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-e53888.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-e53888.net: did not receive HSTS header
-e59888.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-e59888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-e6957.com: could not connect to host
+e52888.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+e52888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+e53888.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+e53888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+e59888.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+e59888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+e6957.com: did not receive HSTS header
+e6ex.com: did not receive HSTS header
e9a.at: could not connect to host
eagle-aluminum.com: did not receive HSTS header
eagle-yard.de: could not connect to host
eagleridgecampground.com: could not connect to host
eaglesecurity.com: did not receive HSTS header
+eaglexiang.org: could not connect to host
eam-gmbh.com: did not receive HSTS header
eames-clayton.us: could not connect to host
earga.sm: could not connect to host
@@ -6810,8 +7058,10 @@ earlybirdsnacks.com: could not connect to host
earn.wiki: could not connect to host
earth-people.org: could not connect to host
earthrise16.com: could not connect to host
+earvinkayonga.com: did not receive HSTS header
easelforart.com: could not connect to host
easew.com: could not connect to host
+eason-yang.com: could not connect to host
east-line.su: could not connect to host
eastcoastbubbleandbounce.co.uk: could not connect to host
eastcoastinflatables.co.uk: could not connect to host
@@ -6823,13 +7073,14 @@ eastsidecottages.co.uk: did not receive HSTS header
easy-factures.fr: could not connect to host
easychiller.org: could not connect to host
easycontentplan.com: could not connect to host
-easykonto.de: could not connect to host
+easykonto.de: did not receive HSTS header
+easymun.com: could not connect to host
easyocm.hu: did not receive HSTS header
easyoutdoor.nl: did not receive HSTS header
easyplane.it: did not receive HSTS header
easyreal.ru: could not connect to host
+easyrents.com.ng: did not receive HSTS header
easysimplecrm.com: could not connect to host
-easyssl.com.cn: did not receive HSTS header
eat-the-world.ch: could not connect to host
eat4happiness.com: did not receive HSTS header
eatfitoutlet.com.br: could not connect to host
@@ -6839,10 +7090,11 @@ eattherich.us: did not receive HSTS header
eatvisor.co.uk: could not connect to host
eauclairecommerce.com: could not connect to host
ebankcbt.com: could not connect to host
+ebanking.raiffeisen.ch: did not receive HSTS header
ebayinc.com: did not receive HSTS header
ebcs-solutions.com: did not receive HSTS header
ebecs.com: did not receive HSTS header
-ebertek.com: did not receive HSTS header
+ebertek.com: could not connect to host
ebiografias.com.br: could not connect to host
ebolsa.com.br: could not connect to host
ebolsas.com.br: did not receive HSTS header
@@ -6860,9 +7112,8 @@ ecc-kaufbeuren.de: could not connect to host
eccux.com: could not connect to host
ecelembrou.ovh: could not connect to host
ecfs.link: could not connect to host
-ecfunstalls.com: could not connect to host
ecg.fr: could not connect to host
-echipstore.com: did not receive HSTS header
+echipstore.com: could not connect to host
echo.cc: could not connect to host
echoactive.com: max-age too low: 7776000
echomall.cn: did not receive HSTS header
@@ -6878,7 +7129,7 @@ ecobrain.be: max-age too low: 0
ecole-en-danger.fr: could not connect to host
ecole-iaf.fr: could not connect to host
ecole-maternelle-saint-joseph.be: could not connect to host
-ecolesrec.ch: could not connect to host
+ecolesrec.ch: did not receive HSTS header
ecomlane.com: could not connect to host
ecommercestore.net.br: could not connect to host
ecomparemo.com: did not receive HSTS header
@@ -6897,6 +7148,7 @@ ecp.ae: did not receive HSTS header
ecrimex.net: did not receive HSTS header
ectora.com: could not connect to host
ecuinformacion.com: could not connect to host
+ecupcafe.com: could not connect to host
ed-matters.org: did not receive HSTS header
edakoe.ru: could not connect to host
edati.lv: could not connect to host
@@ -6913,6 +7165,7 @@ edenvaleplumber24-7.co.za: did not receive HSTS header
edenvalerubbleremovals.co.za: did not receive HSTS header
edge-cloud.net: could not connect to host
edgecustomersportal.com: could not connect to host
+edgedynasty.com: could not connect to host
edgereinvent.com: could not connect to host
edisonchee.com: did not receive HSTS header
edisonluiz.com: could not connect to host
@@ -6923,12 +7176,12 @@ edix.ru: could not connect to host
edk.com.tr: did not receive HSTS header
edpubs.gov: could not connect to host
edsh.de: did not receive HSTS header
+edtechwebb.com: could not connect to host
eduard-dopler.de: could not connect to host
eduardnikolenko.com: could not connect to host
eduardnikolenko.ru: could not connect to host
educaid.be: did not receive HSTS header
educatio.tech: could not connect to host
-educationalstage.com: did not receive HSTS header
educationunlimited.com: did not receive HSTS header
educator-one.com: could not connect to host
educators.co.nz: did not receive HSTS header
@@ -6936,17 +7189,18 @@ educatoys.com.br: could not connect to host
educatweb.de: did not receive HSTS header
educnum.fr: did not receive HSTS header
educourse.ga: could not connect to host
-eduif.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+eduif.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
edusantorini.com: could not connect to host
-edusitios.com: did not receive HSTS header
+edusitios.com: could not connect to host
eduvance.in: did not receive HSTS header
edv-bv.de: did not receive HSTS header
edwar.do: did not receive HSTS header
edwarddekker.nl: did not receive HSTS header
ee-terminals.com: could not connect to host
-ee6957.com: could not connect to host
+ee6957.com: did not receive HSTS header
eeb98.com: could not connect to host
eeetrust.org: could not connect to host
+eelcapone.nl: could not connect to host
eenekorea.com: did not receive HSTS header
eengezinswoning-in-alphen-aan-den-rijn-kopen.nl: could not connect to host
eengezinswoning-in-de-friese-meren-kopen.nl: could not connect to host
@@ -6976,10 +7230,11 @@ efflam.net: could not connect to host
efinity.io: could not connect to host
eftcorp.biz: did not receive HSTS header
eftelingcraft.net: could not connect to host
+egamespw.com: could not connect to host
eganassociates.com.au: did not receive HSTS header
+egbert.net: could not connect to host
egfl.org.uk: did not receive HSTS header
egge.com: max-age too low: 0
-eggplant.today: could not connect to host
egicloud.com: did not receive HSTS header
egit.co: could not connect to host
eglek.com: did not receive HSTS header
@@ -6988,13 +7243,14 @@ egumenita.ro: did not receive HSTS header
egupova.ru: did not receive HSTS header
ehdud8451.tk: could not connect to host
ehealthcounselor.com: could not connect to host
+eheliche-disziplin.schule: could not connect to host
ehipaadev.com: could not connect to host
ehito.ovh: could not connect to host
ehr.gov: could not connect to host
ehrenamt-skpfcw.de: could not connect to host
ehrlichesbier.de: could not connect to host
ehseller.com: did not receive HSTS header
-ehsellert.com: did not receive HSTS header
+ehsellert.com: could not connect to host
ehuber.info: could not connect to host
eiao.me: could not connect to host
eicfood.com: could not connect to host
@@ -7008,19 +7264,16 @@ eigo.work: did not receive HSTS header
eika.as: did not receive HSTS header
eilandprojectkeukens.nl: did not receive HSTS header
eimanavicius.lt: did not receive HSTS header
-einaros.is: could not connect to host
einfachmaldiefressehalten.de: could not connect to host
einhorn.space: could not connect to host
einmonolog.de: could not connect to host
einsatzstiefel.info: could not connect to host
einsit.com: could not connect to host
einsitapis.com: could not connect to host
-eiti.online: did not receive HSTS header
ejgconsultancy.co.uk: could not connect to host
ejuicelab.co.uk: did not receive HSTS header
ejusu.com: could not connect to host
ek.network: did not receive HSTS header
-ekawaiishop.com: could not connect to host
ekbanden.nl: did not receive HSTS header
ekeblock.com: could not connect to host
ekobudisantoso.net: could not connect to host
@@ -7038,28 +7291,45 @@ elanguest.ru: could not connect to host
elaxy-online.de: could not connect to host
elbaal.gov: did not receive HSTS header
elblein.de: did not receive HSTS header
+elchamandelaprosperidad.org: could not connect to host
elcontadorsac.com: could not connect to host
-elderoost.com: could not connect to host
eldietista.es: did not receive HSTS header
eldisagjapi.com: did not receive HSTS header
eldisagjapi.de: could not connect to host
ele-sm.com: could not connect to host
elearningpilot.com: did not receive HSTS header
eleaut.com.br: did not receive HSTS header
-electicofficial.com: could not connect to host
+electicofficial.com: did not receive HSTS header
electmikewaters.com: max-age too low: 0
electricalcontrolpanels.co.uk: could not connect to host
+electricalfencingbedfordview.co.za: could not connect to host
electricalpacificpalisades.com: could not connect to host
electricant.com: did not receive HSTS header
electricant.nl: did not receive HSTS header
+electricfencingballito.co.za: could not connect to host
+electricfencinggillitts.co.za: could not connect to host
+electricfencinghillcrest.co.za: could not connect to host
+electricfencingkloof.co.za: could not connect to host
+electricfencingpinetown.co.za: could not connect to host
+electricgatemotorsballito.co.za: could not connect to host
+electricgatemotorsberea.co.za: could not connect to host
+electricgatemotorsbluff.co.za: could not connect to host
+electricgatemotorskemptonpark.co.za: could not connect to host
+electricgatemotorsqueensburgh.co.za: could not connect to host
+electricgatemotorsroodepoort.co.za: could not connect to host
+electricgatemotorsumhlanga.co.za: could not connect to host
electrician-umhlanga.co.za: did not receive HSTS header
+electrician-umhlangaridge.co.za: could not connect to host
electricianforum.co.uk: did not receive HSTS header
+electriciankemptonpark24-7.co.za: could not connect to host
+electricianlalucia.co.za: could not connect to host
electricianpacificpalisades.com: could not connect to host
electricianumhlangarocks.co.za: did not receive HSTS header
electricoperaduo.com: did not receive HSTS header
electroinkoophardenberg.nl: did not receive HSTS header
electromc.com: could not connect to host
eled.io: could not connect to host
+elefandt.com: did not receive HSTS header
elektro-collee.de: did not receive HSTS header
elektronring.com: could not connect to host
element-43.com: did not receive HSTS header
@@ -7072,18 +7342,18 @@ elenagherta.ga: could not connect to host
elenoon.ir: did not receive HSTS header
elenorsmadness.org: could not connect to host
eleonorengland.com: did not receive HSTS header
+elettricista-roma.org: could not connect to host
elevateandprosper.com: could not connect to host
elevationfilms.net: could not connect to host
elevator.ee: could not connect to host
elexel.ru: did not receive HSTS header
elgacien.de: could not connect to host
-elguadia.faith: could not connect to host
elhall.pro: did not receive HSTS header
elhall.ru: did not receive HSTS header
elib.com: did not receive HSTS header
elielaloum.com: did not receive HSTS header
elimdengelen.com: did not receive HSTS header
-eline168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+eline168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
eliolita.com: could not connect to host
eliott.be: could not connect to host
elisechristie.com: could not connect to host
@@ -7094,10 +7364,11 @@ elitecovering.fr: did not receive HSTS header
elitefishtank.com: could not connect to host
elitehosting.de: did not receive HSTS header
elitepaintingsa.com.au: did not receive HSTS header
-elitesensual.com.br: could not connect to host
+elitesensual.com.br: did not receive HSTS header
+eliyah.co.il: did not receive HSTS header
elizabethgreenfield.com: could not connect to host
elliff.net: did not receive HSTS header
-elliotgluck.com: could not connect to host
+elliotgluck.com: did not receive HSTS header
elmar-kraamzorg.nl: did not receive HSTS header
elna-service.com.ua: did not receive HSTS header
elnan.do: could not connect to host
@@ -7113,8 +7384,10 @@ eloxt.com: could not connect to host
elpado.de: did not receive HSTS header
elpay.kz: did not receive HSTS header
elpo.xyz: could not connect to host
+elsagradocoran.org: could not connect to host
elsamakhin.com: could not connect to host
elsemanario.com: did not receive HSTS header
+elsignificadodesonar.com: did not receive HSTS header
elsitar.com: could not connect to host
elsword.moe: could not connect to host
eltagroup.co.uk: did not receive HSTS header
@@ -7134,18 +7407,16 @@ emailcontrol.nl: did not receive HSTS header
emailing.alsace: could not connect to host
emanatepixels.com: could not connect to host
emanga.su: could not connect to host
+emanuela-gabriela.co.uk: did not receive HSTS header
emavok.eu: could not connect to host
embellir-aroma.com: could not connect to host
embellir-kyujin.com: could not connect to host
embracethedarkness.co.uk: could not connect to host
embroidered-stuff.com: could not connect to host
embudospro.net: did not receive HSTS header
-emby.cloud: did not receive HSTS header
-emcspotlight.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
emeldi-commerce.com: max-age too low: 0
emeraldonion.org: did not receive HSTS header
emergeandsee.com: did not receive HSTS header
-emergencyessay.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
emergencymedicinefoundations.com: did not receive HSTS header
emergentvisiontec.com: did not receive HSTS header
emesolutions.net: did not receive HSTS header
@@ -7157,9 +7428,9 @@ emils-chemnitz.de: could not connect to host
emils1910.de: could not connect to host
emilyhorsman.com: could not connect to host
emilyshepherd.me: did not receive HSTS header
-eminententerprises.io: could not connect to host
eminhuseynov.com: could not connect to host
eminovic.me: could not connect to host
+emissary.coffee: did not receive HSTS header
emjainteractive.com: did not receive HSTS header
emjimadhu.com: could not connect to host
emkanrecords.com: did not receive HSTS header
@@ -7177,6 +7448,7 @@ emojiengine.com: did not receive HSTS header
emoticonesjaponeses.com: could not connect to host
emotuit.com: did not receive HSTS header
emperor.blog: could not connect to host
+empese.com: could not connect to host
empire24.co: could not connect to host
empireauto-2000.com: could not connect to host
empleosentorreon.mx: could not connect to host
@@ -7190,6 +7462,7 @@ emsadi.org: did not receive HSTS header
emtradingacademy.com: could not connect to host
emupedia.net: did not receive HSTS header
emyself.info: could not connect to host
+emyself.org: could not connect to host
en4u.org: could not connect to host
enaia.fr: did not receive HSTS header
encadrer-mon-enfant.com: did not receive HSTS header
@@ -7208,7 +7481,6 @@ encryptmycard.com: could not connect to host
end.pp.ua: could not connect to host
endangeredwatch.com: could not connect to host
ender.co.at: could not connect to host
-endlessdark.net: could not connect to host
endlesstone.com: did not receive HSTS header
endofinternet.goip.de: could not connect to host
endofnet.org: could not connect to host
@@ -7223,14 +7495,11 @@ enefan.jp: could not connect to host
enelacto.com: could not connect to host
energethik-tulln.at: did not receive HSTS header
energisammenslutningen.dk: did not receive HSTS header
-energy-drink-magazin.de: could not connect to host
enersec.co.uk: could not connect to host
enfield-kitchens.co.uk: did not receive HSTS header
enfoqueseguro.com: did not receive HSTS header
enfu.se: could not connect to host
-engiedev.net: could not connect to host
engineowning.com: did not receive HSTS header
-enginx.cn: did not receive HSTS header
englerts.de: did not receive HSTS header
englishclub.com: did not receive HSTS header
englishdirectory.de: could not connect to host
@@ -7267,12 +7536,14 @@ enterprisey.enterprises: could not connect to host
enterprivacy.com: did not receive HSTS header
entersynapse.com: could not connect to host
entourneebeetle.com: could not connect to host
+entravex.com: did not receive HSTS header
entrepreneur.or.id: could not connect to host
entreprise-toiture-clement.fr: did not receive HSTS header
enum.eu.org: could not connect to host
enumify.com: could not connect to host
envelope.co.nz: did not receive HSTS header
enviapresentes.com.br: could not connect to host
+enviatufoto.com: did not receive HSTS header
envide.no: did not receive HSTS header
environment.ai: could not connect to host
environmentkirklees.org: did not receive HSTS header
@@ -7281,6 +7552,7 @@ envoyglobal.com: did not receive HSTS header
envoyworld.com: could not connect to host
envygeeks.com: did not receive HSTS header
envygeeks.io: did not receive HSTS header
+enxadahost.com: could not connect to host
eol34.com: could not connect to host
eoldb.org: could not connect to host
eolme.ml: could not connect to host
@@ -7290,16 +7562,18 @@ eosol.services: could not connect to host
eosol.zone: could not connect to host
epanurse.com: could not connect to host
epasar.my: could not connect to host
+epaslaugos.lt: did not receive HSTS header
epave.paris: could not connect to host
epaygateway.net: could not connect to host
-ephe.be: could not connect to host
+ephe.be: did not receive HSTS header
ephry.com: could not connect to host
epicbouncycastlehirenorwich.co.uk: could not connect to host
-epichouse.net: could not connect to host
epicmc.games: could not connect to host
+epicsecure.de: could not connect to host
epicsoft.de: did not receive HSTS header
-epo32.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-epoch.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+epitesz.co: could not connect to host
+epo32.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+epoch.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
eposcloud.net: could not connect to host
eposmidlands.co.uk: could not connect to host
eposnewport.co.uk: could not connect to host
@@ -7311,6 +7585,7 @@ epossussex.co.uk: could not connect to host
epossystems.co.uk: did not receive HSTS header
eposwales.co.uk: could not connect to host
epoxate.com: did not receive HSTS header
+epreskripce.cz: did not receive HSTS header
eprofitacademy.com: did not receive HSTS header
epsorting.cz: did not receive HSTS header
epulsar.ru: could not connect to host
@@ -7323,7 +7598,7 @@ equallyy.com: did not receive HSTS header
equalparts.eu: did not receive HSTS header
equate.net.au: did not receive HSTS header
equatetechnologies.com.au: did not receive HSTS header
-equeim.ru: did not receive HSTS header
+equeim.ru: could not connect to host
equilibre-yoga-jennifer-will.com: could not connect to host
equipeferramentas.com.br: did not receive HSTS header
equippers.de: did not receive HSTS header
@@ -7334,11 +7609,11 @@ er-music.com: could not connect to host
erad.fr: could not connect to host
erawanarifnugroho.com: did not receive HSTS header
erclab.kr: could not connect to host
-erclaim.com: could not connect to host
erecciontotalal100.com: could not connect to host
-erectiepillenwinkel.nl: could not connect to host
+erectiepillenwinkel.nl: did not receive HSTS header
erepublik-deutschland.de: did not receive HSTS header
eressea.xyz: could not connect to host
+ergovitanet.com.br: could not connect to host
ericbond.net: could not connect to host
erichalv.com: could not connect to host
ericisaweso.me: did not receive HSTS header
@@ -7346,50 +7621,41 @@ ericloud.tk: could not connect to host
ericorporation.com: did not receive HSTS header
ericschwartzlive.com: did not receive HSTS header
ericwie.se: did not receive HSTS header
+ericyl.com: max-age too low: 2592000
eriel.com.br: could not connect to host
eriix.org: did not receive HSTS header
+erikserver2.tk: could not connect to host
erikseth.de: did not receive HSTS header
-erikwagner.de: did not receive HSTS header
+erikwagner.de: could not connect to host
erinlin.com: did not receive HSTS header
eriser.fr: could not connect to host
-erixschueler.de: did not receive HSTS header
+erixschueler.de: max-age too low: 0
ernaehrungsberatung-rapperswil.ch: did not receive HSTS header
ernaehrungsberatung-zurich.ch: could not connect to host
ernesto.at: could not connect to host
-ero.ink: could not connect to host
eroimatome.com: could not connect to host
eromixx.com: did not receive HSTS header
eromond.com: did not receive HSTS header
eroskines.com: could not connect to host
erotalia.es: could not connect to host
erotic4me.ch: did not receive HSTS header
-eroticforce.com: could not connect to host
+eroticforce.com: did not receive HSTS header
erotische-aanbiedingen.nl: could not connect to host
-erotpo.cz: could not connect to host
+erotpo.cz: did not receive HSTS header
errlytics.com: could not connect to host
errolz.com: could not connect to host
errors.zenpayroll.com: could not connect to host
erspro.net: could not connect to host
-ertir.ru: could not connect to host
-erudicia.com: could not connect to host
-erudicia.de: could not connect to host
-erudicia.es: could not connect to host
-erudicia.fr: could not connect to host
-erudicia.it: could not connect to host
-erudicia.nl: could not connect to host
-erudicia.se: could not connect to host
-erudicia.uk: could not connect to host
eruvalerts.com: did not receive HSTS header
erwanlepape.com: could not connect to host
-erwinvanlonden.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-es888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+erwinvanlonden.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+es888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
es8888.net: could not connect to host
es888999.com: could not connect to host
-es999.net: could not connect to host
-es9999.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb-top.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb-top.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+es9999.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb-top.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb-top.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb111.com: could not connect to host
esb111.net: could not connect to host
esb112.com: could not connect to host
@@ -7397,104 +7663,104 @@ esb112.net: could not connect to host
esb116.com: could not connect to host
esb1314.net: could not connect to host
esb1668.com: could not connect to host
-esb168168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb168168.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb168168.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb168168.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1688.biz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1688.com: did not receive HSTS header
-esb1688.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1688.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1688.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb168168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb168168.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb168168.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb168168.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1688.biz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1688.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1688.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1688.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1688.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb16888.com: could not connect to host
-esb1711.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1711.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1788.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1788.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1788.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb1788.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1711.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1711.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1788.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1788.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1788.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb1788.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb17888.com: could not connect to host
-esb2013.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb2013.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb2099.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb2099.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb2013.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb2013.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb2099.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb2099.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb222.net: could not connect to host
-esb258.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb325.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb325.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb333.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb336.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb369.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb433.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb518.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb553.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb555.biz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb555.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb258.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb325.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb325.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb333.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb336.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb369.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb433.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb518.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb553.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb555.biz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb555.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb555.com: could not connect to host
esb556.com: could not connect to host
-esb5889.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb5889.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb6.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb5889.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb5889.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb6.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb666.com: could not connect to host
esb666.net: could not connect to host
esb66666.com: could not connect to host
-esb677.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb677.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb688.com: could not connect to host
esb68888.com: could not connect to host
-esb775.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb777.biz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb775.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb777.biz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb777.cc: could not connect to host
esb777.com: could not connect to host
-esb777.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb777.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb777.net: could not connect to host
-esb777.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb777.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb777.us: could not connect to host
-esb886.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb886.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb888.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb8886.com: could not connect to host
-esb9527.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb9588.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb9588.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esb9588.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb9527.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb9588.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb9588.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb9588.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb999.biz: could not connect to host
esb999.com: could not connect to host
esb999.info: could not connect to host
-esb999.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esb999.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esb999.us: could not connect to host
esba11.cc: could not connect to host
-esba11.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esba11.in: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esba11.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esba11.in: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esba11.net: could not connect to host
esba11.us: could not connect to host
-esball-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball.bz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.bz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esball.in: could not connect to host
-esball.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball.mx: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball.online: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball.org: did not receive HSTS header
-esball.tv: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball.win: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball.ws: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball518.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball518.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball518.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esball518.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.mx: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.online: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.tv: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.win: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball.ws: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball518.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball518.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball518.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esball518.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esball888.com: could not connect to host
esball888.net: could not connect to host
-esballs.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbbon.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbbon.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbfun.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbfun.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbgood.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbin.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbjon.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbjon.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbm4.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esbm5.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esballs.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbbon.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbbon.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbfun.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbfun.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbgood.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbin.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbjon.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbjon.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbm4.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esbm5.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esbuilders.co.nz: did not receive HSTS header
escalate.eu: did not receive HSTS header
escalesensorielle.com: max-age too low: 604800
@@ -7507,6 +7773,7 @@ escolaengenharia.com.br: did not receive HSTS header
escort-byuro.net: did not receive HSTS header
escort-fashion.com: could not connect to host
escortdisplay.com: could not connect to host
+escortmantra.com: could not connect to host
escortshotsexy.com: could not connect to host
escotour.com: did not receive HSTS header
escueladewordpress.com: did not receive HSTS header
@@ -7521,13 +7788,13 @@ esipublications.com: did not receive HSTS header
esko.bar: could not connect to host
esln.org: did not receive HSTS header
esmincg2t1.com: could not connect to host
-esmoney.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-esmoney.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esmoney.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+esmoney.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
esn-ypci.com: did not receive HSTS header
esocweb.com: could not connect to host
esoterik.link: could not connect to host
esp-berlin.de: could not connect to host
-esp-desarrolladores.com: did not receive HSTS header
+esp-desarrolladores.com: could not connect to host
esp.community: could not connect to host
esp8285.store: could not connect to host
espacecuisine.ca: did not receive HSTS header
@@ -7563,10 +7830,12 @@ estespr.com: did not receive HSTS header
estetistarimini.it: did not receive HSTS header
estilosapeca.com: could not connect to host
estland.guide: could not connect to host
+estoic.net: could not connect to host
estoniantrade.ee: did not receive HSTS header
estudio21pattern.com: could not connect to host
estudioamazonico.com: could not connect to host
estudiserradal.com: did not receive HSTS header
+esurety.net: did not receive HSTS header
esw00.com: could not connect to host
esw06.com: could not connect to host
esw07.com: could not connect to host
@@ -7574,8 +7843,7 @@ esw08.com: could not connect to host
esw09.com: could not connect to host
eswap.cz: could not connect to host
et-buchholz.de: could not connect to host
-et180.com: did not receive HSTS header
-etajerka-spb.ru: could not connect to host
+et180.com: could not connect to host
etalent.net: did not receive HSTS header
etangs-magazine.com: could not connect to host
etaoinwu.tk: could not connect to host
@@ -7589,11 +7857,13 @@ eth9.net: could not connect to host
ethaligan.fr: could not connect to host
ethandelany.me: could not connect to host
ethanfaust.com: did not receive HSTS header
+ethanlew.is: could not connect to host
ethantskinner.com: did not receive HSTS header
ether.school: could not connect to host
+ethercalc.com: could not connect to host
etherderbies.com: could not connect to host
etheria-software.tk: did not receive HSTS header
-etherpad.fr: could not connect to host
+etherpad.fr: did not receive HSTS header
ethicalexploiting.com: did not receive HSTS header
ethicall.org.uk: did not receive HSTS header
ethicaltek.com: could not connect to host
@@ -7606,8 +7876,8 @@ etmirror.top: could not connect to host
etmirror.xyz: could not connect to host
etoto.pl: did not receive HSTS header
etproxy.tech: could not connect to host
-etrolleybizstore.com: could not connect to host
ets2mp.de: did not receive HSTS header
+etssquare.com: did not receive HSTS header
etsysecure.com: could not connect to host
ettebiz.com: max-age too low: 0
etula.ga: did not receive HSTS header
@@ -7635,6 +7905,7 @@ euro-servers.de: could not connect to host
eurocamping.se: could not connect to host
euroescortguide.com: could not connect to host
euroman.ga: could not connect to host
+europalettenkaufen.de: could not connect to host
europapier.ba: did not receive HSTS header
europapier.bg: did not receive HSTS header
europapier.com: did not receive HSTS header
@@ -7661,13 +7932,14 @@ evankurniawan.com: did not receive HSTS header
evanreev.es: could not connect to host
evansville-wy.gov: could not connect to host
evantage.org: could not connect to host
+evantageglobal.com: could not connect to host
evapp.org: could not connect to host
-evasion-energie.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+evasion-energie.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
evdenevenakliyatankara.pw: could not connect to host
evecalm.com: did not receive HSTS header
evedanjailbreak.com: could not connect to host
evegalaxy.net: could not connect to host
-evemarketer.com: did not receive HSTS header
+evemarketer.com: could not connect to host
evenstar-gaming.com: could not connect to host
evenstargames.com: could not connect to host
event64.ru: did not receive HSTS header
@@ -7675,6 +7947,7 @@ eventmake.es: could not connect to host
eventplace.me: did not receive HSTS header
events12.com: did not receive HSTS header
eventsafrica.net: did not receive HSTS header
+everitoken.io: did not receive HSTS header
evernaut.com: did not receive HSTS header
everyarti.st: could not connect to host
everybooks.com: could not connect to host
@@ -7688,21 +7961,21 @@ everything.place: could not connect to host
everytruckjob.com: did not receive HSTS header
eveseat.net: could not connect to host
eveshaiwu.com: could not connect to host
+evexia.xyz: could not connect to host
evi.be: did not receive HSTS header
evilarmy.com: did not receive HSTS header
evilbeasts.ru: could not connect to host
evilcult.me: did not receive HSTS header
-evilnerd.de: did not receive HSTS header
+evileden.com: could not connect to host
evilness.nl: could not connect to host
evilsay.com: could not connect to host
evilsite.cf: could not connect to host
evilvolcanolairs.com: did not receive HSTS header
evin.ml: could not connect to host
evio.com: did not receive HSTS header
-evitacion.com: did not receive HSTS header
evites.me: could not connect to host
evokepk.com: could not connect to host
-evoludis.net: could not connect to host
+evoludis.net: did not receive HSTS header
evolutionexpeditions.com: did not receive HSTS header
evolutionsmedicalspa.com: did not receive HSTS header
evomon.com: could not connect to host
@@ -7716,25 +7989,26 @@ ewizmo.com: did not receive HSTS header
ewok.io: could not connect to host
eworksmedia.com: could not connect to host
ewuchuan.com: could not connect to host
+ewycena.pl: could not connect to host
example.sc: did not receive HSTS header
+example4d.com: could not connect to host
examplesu.com: did not receive HSTS header
-exceed.global: could not connect to host
-excel-utbildning.nu: did not receive HSTS header
excelgum.ca: could not connect to host
exceltobarcode.com: could not connect to host
exceptionalbits.com: could not connect to host
exceptionalservices.us: could not connect to host
exchangecoordinator.com: could not connect to host
exchangeworks.co: did not receive HSTS header
-exclusivedesignz.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+exclusivedesignz.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
exebouncycastles.co.uk: did not receive HSTS header
exehack.net: could not connect to host
exembit.com: did not receive HSTS header
+exerforge.com: could not connect to host
+exerforge.net: could not connect to host
exfiles.cz: could not connect to host
exgravitus.com: could not connect to host
exhaledayspa.com.au: did not receive HSTS header
exno.co: could not connect to host
-exnovin.co: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
exoplatform.com: did not receive HSTS header
exousiakaidunamis.pw: could not connect to host
exousiakaidunamis.xyz: could not connect to host
@@ -7757,7 +8031,6 @@ expowerhps.com: did not receive HSTS header
expressfinance.co.za: did not receive HSTS header
expressglobal.org: could not connect to host
exteriorservices.io: could not connect to host
-extmatrix.com: did not receive HSTS header
extramoney.cash: could not connect to host
extrapagetab.com: could not connect to host
extrathemeshowcase.net: could not connect to host
@@ -7769,34 +8042,31 @@ extratorrents.tech: could not connect to host
extremenetworking.net: could not connect to host
extremeservicesandrestoration.com: could not connect to host
exultcosmetics.co.uk: did not receive HSTS header
-exxo.tk: did not receive HSTS header
+exxo.tk: could not connect to host
exy.pw: could not connect to host
eyasc.nl: could not connect to host
+eyeandfire.com: could not connect to host
eyedarts.com: did not receive HSTS header
eyeglassuniverse.com: did not receive HSTS header
eyejobs.com.au: did not receive HSTS header
-eyemagic.net: did not receive HSTS header
eyenote.gov: did not receive HSTS header
eyes-of-universe.eu: did not receive HSTS header
eyesoccer-didikh.rhcloud.com: could not connect to host
eyesonly.cc: did not receive HSTS header
eyrid.com: could not connect to host
eytosh.net: could not connect to host
-eyyit.com: could not connect to host
-eyyubyilmaz.com: could not connect to host
ez.fi: could not connect to host
ezgamble.com: could not connect to host
ezimoeko.net: could not connect to host
ezmod.org: could not connect to host
eznfe.com: could not connect to host
ezorgportaal.nl: could not connect to host
-ezpzdelivery.com: could not connect to host
ezrefurb.co.uk: did not receive HSTS header
eztv.ch: did not receive HSTS header
ezzhole.net: could not connect to host
f-be.com: did not receive HSTS header
f-rickroll-g.pw: could not connect to host
-f-s-u.co.uk: could not connect to host
+f-s-u.co.uk: did not receive HSTS header
f00.ca: did not receive HSTS header
f1bigpicture.com: could not connect to host
f2f.cash: could not connect to host
@@ -7804,7 +8074,7 @@ f42.net: could not connect to host
f5.hk: did not receive HSTS header
f5movies.top: could not connect to host
f5w.de: did not receive HSTS header
-f6957.com: could not connect to host
+f6957.com: did not receive HSTS header
f8842.com: could not connect to host
faber.io: could not connect to host
faberusa.com: did not receive HSTS header
@@ -7813,9 +8083,8 @@ fabian-kluge.de: could not connect to host
fabian-koeppen.de: did not receive HSTS header
fabianasantiago.com: could not connect to host
fabianfischer.de: did not receive HSTS header
-fabianmunoz.com: could not connect to host
+fabianmunoz.com: did not receive HSTS header
fabienbaker.com: could not connect to host
-fabiocicerchia.it: did not receive HSTS header
fabmart.com: max-age too low: 7889238
fabriko.fr: did not receive HSTS header
fabriziorocca.com: could not connect to host
@@ -7829,12 +8098,12 @@ facepunch.org: could not connect to host
facesnf.com: could not connect to host
fachschaft-informatik.de: did not receive HSTS header
facilitrak.com: could not connect to host
-facingbipolar.com: did not receive HSTS header
factcool.com: did not receive HSTS header
factorable.net: did not receive HSTS header
factoringsolutions.co.uk: did not receive HSTS header
factorygw.com: did not receive HSTS header
factorypartsdirect.com: could not connect to host
+factys.do: could not connect to host
fadednet.com: could not connect to host
fadeev.legal: did not receive HSTS header
fads-center.online: could not connect to host
@@ -7842,17 +8111,17 @@ faerb.it: could not connect to host
faerie-art.com: did not receive HSTS header
faeriecakes.be: could not connect to host
faesser.com: did not receive HSTS header
-fafarishoptrading.com: could not connect to host
fafatiger.com: could not connect to host
fag.wtf: could not connect to host
+fahmed.de: did not receive HSTS header
+fahnamporn.com: could not connect to host
fahnen-fanwelt.de: did not receive HSTS header
-failoverplan.it: could not connect to host
+fail4free.de: did not receive HSTS header
faircom.co.za: did not receive HSTS header
fairkey.dk: did not receive HSTS header
-fairleighcrafty.com: could not connect to host
fairlyoddtreasures.com: did not receive HSTS header
faisalshuvo.com: did not receive HSTS header
-faithmissionaries.com: did not receive HSTS header
+faithgrowth.com: did not receive HSTS header
faizan.net: did not receive HSTS header
faizan.xyz: could not connect to host
fakeapple.nl: could not connect to host
@@ -7869,6 +8138,7 @@ falldennismarketing.com: did not receive HSTS header
fallenangeldrinks.eu: could not connect to host
fallenangelspirits.uk: could not connect to host
fallingapart.de: could not connect to host
+fallofthecitadel.com: did not receive HSTS header
false.in.net: could not connect to host
faluninfo.ba: did not receive HSTS header
famdouma.nl: could not connect to host
@@ -7876,6 +8146,7 @@ fame-agency.net: could not connect to host
famep.gov: could not connect to host
famer.me: could not connect to host
fameuxhosting.co.uk: could not connect to host
+famfi.co: could not connect to host
familie-mischak.de: could not connect to host
familie-sander.rocks: max-age too low: 600
familie-sprink.de: did not receive HSTS header
@@ -7889,17 +8160,18 @@ fansmade.art: could not connect to host
fant.dk: did not receive HSTS header
fantasticgardenersmelbourne.com.au: did not receive HSTS header
fantasticpestcontrolmelbourne.com.au: did not receive HSTS header
-fantasy-judo.com: did not receive HSTS header
+fantasycdn.com: could not connect to host
+fantasydrop.com: could not connect to host
fantasyprojections.com: could not connect to host
-fantasysportsnews.org: did not receive HSTS header
fanvoice.com: could not connect to host
fanyl.cn: could not connect to host
fanzhencha.com: could not connect to host
fap.no: could not connect to host
-faq.lookout.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+faq.lookout.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
faraonplay5.com: could not connect to host
faraonplay7.com: could not connect to host
faraonplay8.com: could not connect to host
+faraslot8.com: could not connect to host
faraslot8.net: could not connect to host
faretravel.co.uk: could not connect to host
farkas.bz: did not receive HSTS header
@@ -7907,17 +8179,18 @@ farm24.co.uk: could not connect to host
farmacia.pt: did not receive HSTS header
farmaciaformula.com.br: could not connect to host
farmacialaboratorio.it: did not receive HSTS header
-farmaciamedicom.com.br: could not connect to host
-farmmaximizer.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+farmaciamedicom.com.br: did not receive HSTS header
+farmmaximizer.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
farrel-f.cf: could not connect to host
farrel-f.id: could not connect to host
farrel-f.tk: could not connect to host
farrelf.blog: could not connect to host
-farvisun.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+farvisun.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
fascia.fit: did not receive HSTS header
fashion.net: did not receive HSTS header
fashion4ever.pl: did not receive HSTS header
fashioncare.cz: did not receive HSTS header
+fashionflavorph.com: could not connect to host
fashionholic.my: did not receive HSTS header
fashionoutfits24.com: did not receive HSTS header
fasset.jp: could not connect to host
@@ -7932,17 +8205,15 @@ fastograph.com: could not connect to host
fastopen.ml: could not connect to host
fastrevision.com: could not connect to host
fastwebsites.com.br: did not receive HSTS header
-fatdoge.cn: did not receive HSTS header
+fatdoge.cn: could not connect to host
fatgeekflix.net: could not connect to host
fatlossguide.xyz: could not connect to host
fator25.com.br: could not connect to host
fatox.de: could not connect to host
fatwin.pw: could not connect to host
fatzebra.com.au: max-age too low: 0
-fau8.ml: did not receive HSTS header
-faui2k17.de: could not connect to host
+faui2k17.de: did not receive HSTS header
fauvettes.be: could not connect to host
-favorit.club: could not connect to host
fawkex.me: did not receive HSTS header
faxite.com: did not receive HSTS header
faxreader.net: could not connect to host
@@ -7950,7 +8221,6 @@ fayolle.info: did not receive HSTS header
fbcopy.com: could not connect to host
fbf.gov: did not receive HSTS header
fbi.pw: could not connect to host
-fboerman.nl: could not connect to host
fbook.top: could not connect to host
fbox.li: could not connect to host
fcapartsdb.com: could not connect to host
@@ -7961,21 +8231,21 @@ fdj.im: could not connect to host
fdm.ro: did not receive HSTS header
fdn.one: could not connect to host
fdos.me: could not connect to host
-fdsys.gov: could not connect to host
+fdsys.gov: did not receive HSTS header
fdt.name: did not receive HSTS header
+fearby.com: did not receive HSTS header
feard.space: could not connect to host
fearghus.org: could not connect to host
fearsomegaming.com: did not receive HSTS header
fecik.sk: did not receive HSTS header
-fed51.com: did not receive HSTS header
fedbizopps.gov: could not connect to host
fedemo.top: did not receive HSTS header
federalregister.gov: did not receive HSTS header
federicomigliavacca.it: could not connect to host
-federicoparty.it: could not connect to host
+federicoparty.it: did not receive HSTS header
fedn.it: could not connect to host
fedo.moe: could not connect to host
-fedrtc.org: could not connect to host
+fedvan.com: did not receive HSTS header
fee-hosting.com: did not receive HSTS header
feedstringer.com: could not connect to host
feedthebot.com: did not receive HSTS header
@@ -7997,7 +8267,6 @@ felgitscher.xyz: max-age too low: 2592000
felisslovakia.sk: did not receive HSTS header
feliwyn.fr: did not receive HSTS header
felixhefner.de: did not receive HSTS header
-felixklein.com: did not receive HSTS header
felixrr.pro: could not connect to host
femaledom.xyz: could not connect to host
femdombbw.com: could not connect to host
@@ -8005,9 +8274,8 @@ femiluna.com: could not connect to host
feminism.lgbt: could not connect to host
feminists.co: could not connect to host
femradio.es: did not receive HSTS header
-fence-stlouis.com: could not connect to host
-feng-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-feng-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+feng-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+feng-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
fengyadi.com: could not connect to host
fenixhost.com.br: could not connect to host
fenno.net: could not connect to host
@@ -8033,12 +8301,12 @@ fettbrot.tk: could not connect to host
feudaltactics.com: could not connect to host
feuerwehr-dachaufsetzer.de: could not connect to host
feuerwehrbadwurzach.de: did not receive HSTS header
-fexmen.com: did not receive HSTS header
+fexmen.com: could not connect to host
+feyermedia.de: did not receive HSTS header
ff-bg.xyz: could not connect to host
ff-getzersdorf.at: did not receive HSTS header
-ff6957.com: could not connect to host
-ffb.gov: could not connect to host
-ffbans.org: did not receive HSTS header
+ff6957.com: did not receive HSTS header
+ff763.com: could not connect to host
ffh.me: could not connect to host
ffl123.com: did not receive HSTS header
fgdc.gov: did not receive HSTS header
@@ -8070,16 +8338,19 @@ fig.ms: could not connect to host
fightr.co: could not connect to host
figura.cz: did not receive HSTS header
figura.im: did not receive HSTS header
-figuurzagers.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+figuurzagers.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
fiissh.tech: did not receive HSTS header
+fijnefeestdageneneengelukkignieuwjaar.nl: could not connect to host
fikriwildannugraha.com: did not receive HSTS header
fiksel.info: did not receive HSTS header
fikt.space: could not connect to host
filebox.moe: could not connect to host
filebox.space: could not connect to host
filedir.com: did not receive HSTS header
+filedropbox.nl: did not receive HSTS header
fileio.io: could not connect to host
fileon.com: could not connect to host
+files.from-me.org: could not connect to host
filesense.com: could not connect to host
filewall.de: did not receive HSTS header
filey.co.uk: did not receive HSTS header
@@ -8092,8 +8363,6 @@ filleritemsindia.com: could not connect to host
fillitupchallenge.eu: did not receive HSTS header
fillmysuitca.se: did not receive HSTS header
film-storyboards.com: did not receive HSTS header
-film.photography: did not receive HSTS header
-film.photos: could not connect to host
filme-online.eu.com: did not receive HSTS header
filmesonline.online: did not receive HSTS header
filmesubtitrate2017.online: could not connect to host
@@ -8105,6 +8374,7 @@ filterflasche-kaufen.de: could not connect to host
finalgear.com: could not connect to host
finalprice.net: could not connect to host
finalvpn.com: did not receive HSTS header
+financepark.ch: did not receive HSTS header
financewithcromulent.com: could not connect to host
financier.io: did not receive HSTS header
financieringsportaal.nl: did not receive HSTS header
@@ -8121,9 +8391,10 @@ findthere.net: could not connect to host
findtutorsnearme.com: did not receive HSTS header
findyour.diet: could not connect to host
fine-services.paris: could not connect to host
-finecocoin.io: did not receive HSTS header
-finer04.pw: could not connect to host
+finecraft.cc: could not connect to host
+finer04.pw: did not receive HSTS header
finfev.de: did not receive HSTS header
+finform.ch: could not connect to host
fingent.com: did not receive HSTS header
fingerscrossed.style: could not connect to host
finiteheap.com: did not receive HSTS header
@@ -8133,7 +8404,7 @@ finsterlebnis.de: did not receive HSTS header
fintechnics.com: could not connect to host
fiodental.com.br: did not receive HSTS header
fiork.com: did not receive HSTS header
-fire-wolf.com: could not connect to host
+fire-wolf.com: did not receive HSTS header
fireandelectrical.co.uk: did not receive HSTS header
firebaseio-demo.com: could not connect to host
firebaseio.com: could not connect to host (error ignored - included regardless)
@@ -8142,7 +8413,7 @@ firechip.cc: could not connect to host
firefall.rocks: could not connect to host
firefly-iii.org: did not receive HSTS header
firehost.com: did not receive HSTS header
-fireinthedeep.com: could not connect to host
+fireinthedeep.com: did not receive HSTS header
firekoi.com: did not receive HSTS header
firemail.io: could not connect to host
firepeak.ru: could not connect to host
@@ -8156,11 +8427,10 @@ first-time-offender.com: could not connect to host
firstchoicepool.com: did not receive HSTS header
firstdogonthemoon.com.au: did not receive HSTS header
firstforex.co.uk: did not receive HSTS header
-firstinnovationltd.com: could not connect to host
firstlook.org: did not receive HSTS header
fischers.it: could not connect to host
-fishbattle.io: could not connect to host
-fishbattle.net: could not connect to host
+fischers.srv.br: could not connect to host
+fishermansbend.apartments: could not connect to host
fishfinders.info: did not receive HSTS header
fiskestang.com: did not receive HSTS header
fistu.la: could not connect to host
@@ -8174,14 +8444,17 @@ fitmeat.at: did not receive HSTS header
fitnesswerk.de: could not connect to host
fitqbe.com: did not receive HSTS header
fitrate.site: could not connect to host
+fitseven.ru: did not receive HSTS header
fitshop.com.br: could not connect to host
fitsw.com: did not receive HSTS header
fiuxy.co: did not receive HSTS header
fiuxy.me: could not connect to host
+fiuxy.org: could not connect to host
five.vn: did not receive HSTS header
fiveboosts.xyz: could not connect to host
fivestarsitters.com: did not receive HSTS header
fivestepfunnels.com: could not connect to host
+fiveyearsahead.com: could not connect to host
fivezerocreative.com: did not receive HSTS header
fiws.net: did not receive HSTS header
fix-the-timeline.com: could not connect to host
@@ -8196,6 +8469,7 @@ fixmyglitch.com: could not connect to host
fixtectools.co.za: could not connect to host
fixthetimeline.com: could not connect to host
fixthetimeline.org: could not connect to host
+fjco.alsace: could not connect to host
fjharcu.com: could not connect to host
fjruiz.es: could not connect to host
fjugstad.com: could not connect to host
@@ -8210,7 +8484,7 @@ fl0777.com: did not receive HSTS header
fl0888.com: did not receive HSTS header
fl0999.com: did not receive HSTS header
flacandmp3.ml: could not connect to host
-flagfic.com: did not receive HSTS header
+flagfic.com: could not connect to host
flagriculture.gov: could not connect to host
flags.ninja: could not connect to host
flairbros.at: could not connect to host
@@ -8219,7 +8493,7 @@ flam.io: could not connect to host
flamewall.net: could not connect to host
flamingcow.tv: could not connect to host
flamingkeys.com.au: could not connect to host
-flamingogroup.vn: did not receive HSTS header
+flamingogroup.vn: could not connect to host
flareon.net: could not connect to host
flaretechnologies.io: could not connect to host
flasaki.gr: could not connect to host
@@ -8238,11 +8512,11 @@ flextribly.xyz: could not connect to host
flexve.com: could not connect to host
fliexer.com: could not connect to host
flightschoolusa.com: did not receive HSTS header
-fliio.com: did not receive HSTS header
+fliio.com: could not connect to host
flikmsg.co: could not connect to host
fling.dating: could not connect to host
flipagram.com: did not receive HSTS header
-flipbell.com: did not receive HSTS header
+flipbell.com: could not connect to host
flipkey.com: did not receive HSTS header
flirchi.com: did not receive HSTS header
flirt-norden.de: did not receive HSTS header
@@ -8252,7 +8526,7 @@ flixflex.tk: could not connect to host
flixhaven.net: did not receive HSTS header
flixports.com: could not connect to host
flixtor.net: could not connect to host
-floj.tech: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+floj.tech: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
floless.co.uk: did not receive HSTS header
flomeyer.de: could not connect to host
flood.io: did not receive HSTS header
@@ -8262,23 +8536,23 @@ florent-tatard.fr: did not receive HSTS header
florian-lillpopp.de: could not connect to host
florian-schlachter.de: did not receive HSTS header
florian2833z.de: could not connect to host
-florianbecker.it: did not receive HSTS header
florianlillpopp.de: max-age too low: 10
floridaagriculture.gov: could not connect to host
floridaconsumerhelp.gov: could not connect to host
floridaderi.ru: could not connect to host
floridaengineering.org: could not connect to host
floridaescapes.co.uk: did not receive HSTS header
+floridagulfbeachrealty.com: did not receive HSTS header
florinapp.com: did not receive HSTS header
florispoort.nl: did not receive HSTS header
+floristmou.com: could not connect to host
+florlola.com: could not connect to host
floro.me: did not receive HSTS header
-flosch.at: could not connect to host
floseed.fr: could not connect to host
flosserver.de: could not connect to host
floth.at: could not connect to host
flouartistique.ch: could not connect to host
flow.pe: could not connect to host
-flowair24.ru: could not connect to host
flowchats.me: could not connect to host
flowcount.xyz: could not connect to host
flowerandplant.org: did not receive HSTS header
@@ -8305,6 +8579,7 @@ flyawayantennas.com: did not receive HSTS header
flybunnyfly.dk: did not receive HSTS header
flygpost.com: did not receive HSTS header
flyingdoggy.net: could not connect to host
+flyingpackets.net: could not connect to host
flyingspaghettimonsterdonationsfund.nl: could not connect to host
flyingyoung.top: could not connect to host
flyshe.co.uk: did not receive HSTS header
@@ -8316,6 +8591,7 @@ flyssh.net: could not connect to host
fm83.nl: could not connect to host
fm992.com: could not connect to host
fmapplication.com: could not connect to host
+fmc.gov: could not connect to host
fmi.gov: did not receive HSTS header
fmovies.fyi: did not receive HSTS header
fmovies.life: could not connect to host
@@ -8325,13 +8601,14 @@ fnfpt.co.uk: could not connect to host
fniephaus.com: did not receive HSTS header
fnncat.com: could not connect to host
fnvsecurity.com: could not connect to host
+fnzc.co.nz: did not receive HSTS header
fobc-usa.org: did not receive HSTS header
focalforest.com: could not connect to host
foerster-kunststoff.de: did not receive HSTS header
fognini-depablo.eu: could not connect to host
fohome.ca: could not connect to host
fokos.de: did not receive HSTS header
-fol.tf: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+fol.tf: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
foliekonsulenten.dk: did not receive HSTS header
folioapp.io: could not connect to host
folkfests.org: did not receive HSTS header
@@ -8346,15 +8623,14 @@ fontawesome.com: did not receive HSTS header
foo: could not connect to host
food4health.guide: could not connect to host
foodbuddy.ch: could not connect to host
+foodcare.ml: could not connect to host
foodcowgirls.com: could not connect to host
-foodev.de: could not connect to host
foodiebox.no: could not connect to host
foodies.my: did not receive HSTS header
foodievenues.com: could not connect to host
-foodplantengineering.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+foodplantengineering.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
foodsafetyworkinggroup.gov: could not connect to host
foodserve.in: could not connect to host
-football.de: did not receive HSTS header
footballmapped.com: could not connect to host
footlegende.fr: did not receive HSTS header
footloose.co.uk: did not receive HSTS header
@@ -8363,11 +8639,12 @@ foraje-profesionale.ro: could not connect to host
forbid.life: could not connect to host
forbiddenhistory.info: could not connect to host
forbook.net: could not connect to host
+forbusiness.ca: could not connect to host
forcamp.ga: could not connect to host
force-des-maths.com: did not receive HSTS header
forces.army: could not connect to host
fordbydesign.com: could not connect to host
-fordshop.by: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+fordshop.by: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
foreignexchangeresource.com: did not receive HSTS header
foresdon.jp: did not receive HSTS header
forestfinance.fr: did not receive HSTS header
@@ -8388,7 +8665,6 @@ formforger.com: could not connect to host
formkiq.com: could not connect to host
formula.cf: could not connect to host
foro.io: could not connect to host
-foroaranda.com: did not receive HSTS header
forpc.us: did not receive HSTS header
forplanetsake.com: could not connect to host
forplayers.pl: could not connect to host
@@ -8401,7 +8677,7 @@ fortnitemagic.ga: could not connect to host
fortoglethorpega.gov: could not connect to host
fortricks.in: did not receive HSTS header
fortuna-loessnitz.de: could not connect to host
-fortuna-s.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+fortuna-s.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
fortworth.ch: did not receive HSTS header
forty2.eu: did not receive HSTS header
forum.linode.com: did not receive HSTS header
@@ -8438,16 +8714,16 @@ foxing.club: could not connect to host
foxley-farm.co.uk: did not receive HSTS header
foxley-seeds.co.uk: did not receive HSTS header
foxleyseeds.co.uk: could not connect to host
-foxmay.co.uk: could not connect to host
foxterrier.com.br: could not connect to host
foxtrot.pw: could not connect to host
+foxvisor.com: could not connect to host
foxyslut.com: could not connect to host
foyale.io: could not connect to host
foyer-laique-segre.com: did not receive HSTS header
fpki.sh: could not connect to host
fptravelling.com: did not receive HSTS header
fpvr.org: did not receive HSTS header
-fq.mk: did not receive HSTS header
+fq.mk: could not connect to host
fr0zenbits.io: could not connect to host
fr33d0m.link: could not connect to host
fr33tux.org: did not receive HSTS header
@@ -8455,13 +8731,14 @@ fragilesolar.cf: could not connect to host
fragnic.com: did not receive HSTS header
fragrances.bg: did not receive HSTS header
fralef.me: did not receive HSTS header
+framedpaws.com: could not connect to host
francesca-and-lucas.com: did not receive HSTS header
francescoservida.ch: did not receive HSTS header
francevpn.xyz: could not connect to host
+francisdelreal.com: did not receive HSTS header
francois-gaillard.fr: did not receive HSTS header
francois-vidit.com: did not receive HSTS header
frangor.info: did not receive HSTS header
-frank.fyi: did not receive HSTS header
franke-chemie.de: could not connect to host
frankedier.com: did not receive HSTS header
frankfurt-am-start.de: did not receive HSTS header
@@ -8473,9 +8750,10 @@ frankwei.xyz: did not receive HSTS header
fransallen.com: could not connect to host
franta.biz: did not receive HSTS header
franta.email: did not receive HSTS header
+frantorregrosa.me: did not receive HSTS header
franzt.de: could not connect to host
franzt.ovh: could not connect to host
-frasch-umzuege.de: max-age too low: 0
+frasch-umzuege.de: did not receive HSTS header
frasesaniversarios.com.br: did not receive HSTS header
frasesdeamizade.pt: could not connect to host
frasys.cloud: max-age too low: 2592000
@@ -8492,7 +8770,7 @@ freakyawesome.ca: could not connect to host
freakyawesome.club: could not connect to host
freakyawesome.co: could not connect to host
freakyawesome.co.uk: could not connect to host
-freakyawesome.com: could not connect to host
+freakyawesome.com: did not receive HSTS header
freakyawesome.company: could not connect to host
freakyawesome.dance: could not connect to host
freakyawesome.design: could not connect to host
@@ -8509,7 +8787,7 @@ freakyawesome.guide: could not connect to host
freakyawesome.guru: could not connect to host
freakyawesome.in: could not connect to host
freakyawesome.info: could not connect to host
-freakyawesome.io: could not connect to host
+freakyawesome.io: did not receive HSTS header
freakyawesome.lgbt: could not connect to host
freakyawesome.life: could not connect to host
freakyawesome.live: could not connect to host
@@ -8566,6 +8844,7 @@ freakyawesomethemes.com: could not connect to host
freakyawesomewp.com: could not connect to host
frebi.org: could not connect to host
frebib.me: could not connect to host
+freddieonfire.tk: could not connect to host
freddyfazbearspizzeria.com: did not receive HSTS header
freddythechick.uk: could not connect to host
frederickalcantara.com: could not connect to host
@@ -8575,12 +8854,14 @@ fredtec.ru: did not receive HSTS header
free-your-pc.com: could not connect to host
free8.xyz: could not connect to host
freeasinlliure.org: could not connect to host
-freeassangenow.org: did not receive HSTS header
+freeassangenow.org: could not connect to host
+freeasyshop.com: did not receive HSTS header
freeben666.fr: could not connect to host
-freebies.id: could not connect to host
freeblog.me: could not connect to host
freebookmakerbets.com.au: did not receive HSTS header
+freecam2cam.site: could not connect to host
freecycleusa.com: did not receive HSTS header
+freedomkiaparts.com: could not connect to host
freedomrealtyoftexas.com: did not receive HSTS header
freedomvote.nl: could not connect to host
freeflow.tv: could not connect to host
@@ -8593,11 +8874,11 @@ freelanceshipping.com: did not receive HSTS header
freelandinnovation.com: did not receive HSTS header
freelansir.com: could not connect to host
freelysurf.cf: could not connect to host
-freemanning.de: did not receive HSTS header
+freemanning.de: could not connect to host
freematthale.net: did not receive HSTS header
freepoints.us: could not connect to host
freergform.org: could not connect to host
-freeslots.guru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+freeslots.guru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
freesoftwaredriver.com: could not connect to host
freesounding.com: did not receive HSTS header
freesounding.ru: did not receive HSTS header
@@ -8605,14 +8886,15 @@ freesquare.net: could not connect to host
freethought.org.au: could not connect to host
freeutopia.org: did not receive HSTS header
freevps.us: did not receive HSTS header
+freewarez.org: did not receive HSTS header
frei.social: could not connect to host
+frejasdal.dk: could not connect to host
frenzel.dk: could not connect to host
freqlabs.com: did not receive HSTS header
freshfind.xyz: could not connect to host
freshislandfish.com: did not receive HSTS header
freshkiss.com.au: did not receive HSTS header
freshmaza.io: could not connect to host
-freshpounds.com: could not connect to host
frettboard.com: did not receive HSTS header
frezbo.com: could not connect to host
fribourgviking.net: could not connect to host
@@ -8620,11 +8902,14 @@ frickenate.com: could not connect to host
fridaperfumaria.com.br: could not connect to host
fridayfoucoud.ma: could not connect to host
friedenauer-herbstfest.de: could not connect to host
+friederloch.de: did not receive HSTS header
friedhelm-wolf.de: could not connect to host
friendica.ch: could not connect to host
friendlyfiregameshow.com: could not connect to host
+friendowment.us: did not receive HSTS header
fritteli.ch: did not receive HSTS header
frly.de: could not connect to host
+frnco.uk: did not receive HSTS header
frodriguez.xyz: could not connect to host
froehlich.it: did not receive HSTS header
froggstack.de: could not connect to host
@@ -8636,7 +8921,8 @@ fromlemaytoz.com: could not connect to host
fromthemonks.com: could not connect to host
fromthesoutherncross.com: could not connect to host
front-end.dog: could not connect to host
-frontierdiscount.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+frontier.bet: could not connect to host
+frontierdiscount.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
frontisme.nl: did not receive HSTS header
frontline6.com: did not receive HSTS header
frontmin.com: did not receive HSTS header
@@ -8644,15 +8930,20 @@ frost-ci.xyz: could not connect to host
frostbytes.net: could not connect to host
frostednetwork.com: could not connect to host
frosty-gaming.xyz: could not connect to host
+frosty.sk: could not connect to host
+froufe.com: could not connect to host
frp-roleplay.de: could not connect to host
frsis2017.com: could not connect to host
+frsnpwr.net: could not connect to host
frugal-millennial.com: did not receive HSTS header
fruitusers.com: could not connect to host
+fruityfitness.com: did not receive HSTS header
frumious.fyi: could not connect to host
frusky.net: could not connect to host
-fs-community.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+fs-community.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
fs-fitness.eu: could not connect to host
fs-gamenet.de: did not receive HSTS header
+fsck.cz: could not connect to host
fsdress.com: could not connect to host
fsf.moe: could not connect to host
fsfi.is: could not connect to host
@@ -8669,13 +8960,12 @@ fteproxy.org: did not receive HSTS header
ftf.agency: did not receive HSTS header
ftgho.com: could not connect to host
ftpi.ml: could not connect to host
-fu-li88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-fu-li88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+fu-li88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+fu-li88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
fu639.top: could not connect to host
fu898.top: could not connect to host
fuchsy.com: could not connect to host
fuck-your-false-positive.de: could not connect to host
-fuckav.ru: could not connect to host
fuckbilibili.com: could not connect to host
fuckcf.cf: could not connect to host
fuckgfw233.org: could not connect to host
@@ -8697,7 +8987,6 @@ fukuoka-cityliner.jp: did not receive HSTS header
fukushima-web.com: did not receive HSTS header
fulilingyu.info: could not connect to host
fuliydys.com: could not connect to host
-fullhost.com: did not receive HSTS header
fullnitrous.com: did not receive HSTS header
fullpackage.co.uk: did not receive HSTS header
fulltxt.ml: could not connect to host
@@ -8707,10 +8996,13 @@ fun25.tk: did not receive HSTS header
fun4tomorrow.com: could not connect to host
fun9.cc: could not connect to host
fun99.cc: could not connect to host
+funandbounce.com: could not connect to host
funarena.com.ua: could not connect to host
+funbuynet.com.br: did not receive HSTS header
fundacionhijosdelsol.org: could not connect to host
funderburg.me: did not receive HSTS header
funerariahogardecristo.cl: did not receive HSTS header
+funfunmstdn.tokyo: could not connect to host
fungame.eu: did not receive HSTS header
fungames.com: max-age too low: 0
funi4u.com: did not receive HSTS header
@@ -8722,7 +9014,7 @@ funnelweb.xyz: could not connect to host
funny-joke-pictures.com: did not receive HSTS header
funnyang.com: could not connect to host
funrun.com: did not receive HSTS header
-funtastic-event-hire.co.uk: could not connect to host
+funtastic-event-hire.co.uk: did not receive HSTS header
funtastic.ie: could not connect to host
funtimebourne.co.uk: did not receive HSTS header
fuorifuocogenova.it: could not connect to host
@@ -8732,7 +9024,7 @@ furi.ga: could not connect to host
furiffic.com: did not receive HSTS header
furnation.com: could not connect to host
furnitureconcept.co.uk: could not connect to host
-furry.agency: could not connect to host
+furry.agency: did not receive HSTS header
furry.be: did not receive HSTS header
furry.zone: did not receive HSTS header
furrybot.me: did not receive HSTS header
@@ -8744,15 +9036,17 @@ fusedrops.com: could not connect to host
fushee.com: could not connect to host
fusionmate.com: could not connect to host
fuszara.eu: could not connect to host
+fuszara.pl: could not connect to host
futa.agency: could not connect to host
futagro.com: did not receive HSTS header
futbol11.com: did not receive HSTS header
futurefire.de: could not connect to host
futurefundapp.com: could not connect to host
futurehack.io: could not connect to host
-futuresonline.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-futurestarsusa.org: did not receive HSTS header
+futuresonline.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+futurestarsusa.org: could not connect to host
futuretechnologi.es: could not connect to host
+futuretimes.io: could not connect to host
futureyouhealth.com: did not receive HSTS header
futuristarchitecture.com: did not receive HSTS header
futurope.com: did not receive HSTS header
@@ -8761,7 +9055,6 @@ fuvpn.com: could not connect to host
fuxwerk.de: could not connect to host
fuzoku-sodan.com: could not connect to host
fwei.tk: did not receive HSTS header
-fws.gov: did not receive HSTS header
fwww7.com: did not receive HSTS header
fx24.uk: could not connect to host
fxgame.online: could not connect to host
@@ -8779,21 +9072,21 @@ g-i-s.vn: could not connect to host
g-marketing.ro: could not connect to host
g-o.pl: did not receive HSTS header
g-rickroll-o.pw: could not connect to host
+g01.in.ua: could not connect to host
g1jeu.com: could not connect to host
g1s.cc: could not connect to host
g2-inc.com: max-age too low: 600
g2a.co: did not receive HSTS header
g2g.com: did not receive HSTS header
g4w.co: could not connect to host (error ignored - included regardless)
-g5.gov: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+g5.gov: could not connect to host
g5led.nl: could not connect to host
g6666g.tk: could not connect to host
-g6957.com: could not connect to host
+g6957.com: did not receive HSTS header
g77.ca: could not connect to host
gaanbaksho.com.au: did not receive HSTS header
gaasuper6.com: could not connect to host
gabber.scot: could not connect to host
-gabehoban.com: could not connect to host
gabemack.com: did not receive HSTS header
gabethebabetv.com: could not connect to host
gabi.com.es: could not connect to host
@@ -8802,12 +9095,13 @@ gabi.uno: could not connect to host
gablaxian.com: max-age too low: 2592000
gabrielkoo.com: did not receive HSTS header
gabrielsimonet.ch: could not connect to host
+gadget-tips.com: did not receive HSTS header
gadse.games: could not connect to host
gaelleetarnaud.com: did not receive HSTS header
gafachi.com: could not connect to host
gagne-enterprises.com: did not receive HSTS header
gaichanh.com: did not receive HSTS header
-gainesvillegoneaustin.org: did not receive HSTS header
+gainesvillegoneaustin.org: could not connect to host
gaite.me: could not connect to host
gakkainavi-epsilon.jp: could not connect to host
gakkainavi-epsilon.net: could not connect to host
@@ -8817,6 +9111,7 @@ gakkainavi4.com: could not connect to host
gakkainavi4.jp: did not receive HSTS header
gakkainavi4.net: did not receive HSTS header
galardi.org: could not connect to host
+galaxieblog.com.my: could not connect to host
galecia.com: did not receive HSTS header
galena.io: could not connect to host
galenskap.eu: could not connect to host
@@ -8829,6 +9124,7 @@ galgoingles.com.br: could not connect to host
galgopersa.com.br: could not connect to host
galilahiskye.com: did not receive HSTS header
galileomtz.com: did not receive HSTS header
+gallerify.eu: could not connect to host
gallery44.org: did not receive HSTS header
galoisvpn.xyz: could not connect to host
galoscoin.nl: max-age too low: 2592000
@@ -8838,6 +9134,7 @@ gambitboard.com: max-age too low: 300
gambitcloud.net: could not connect to host
gamblersgaming.eu: could not connect to host
game-gentle.com: could not connect to host
+game-topic.ru: did not receive HSTS header
game.yt: could not connect to host
gamebits.net: did not receive HSTS header
gamecave.de: could not connect to host
@@ -8857,10 +9154,12 @@ gamepad.vg: could not connect to host
gamepader.com: could not connect to host
gameparade.de: could not connect to host
gameparagon.info: could not connect to host
-gamepiece.com: did not receive HSTS header
+gamepiece.com: could not connect to host
+gamereader.de: could not connect to host
gamerpoets.com: did not receive HSTS header
gamers-life.fr: could not connect to host
gamerslair.org: did not receive HSTS header
+gamerwares.com: could not connect to host
gamerz-point.de: could not connect to host
gamerz-stream.com: did not receive HSTS header
gameserver-sponsor.de: did not receive HSTS header
@@ -8876,23 +9175,24 @@ gamingwithcromulent.com: could not connect to host
gamishijabsyari.com: could not connect to host
gamismodelbaru.com: did not receive HSTS header
gamoice.com: could not connect to host
+gamoloco.com: did not receive HSTS header
gampenhof.de: could not connect to host
gan.wtf: could not connect to host
gandc.co: could not connect to host
gangnam-club.com: could not connect to host
gangnam-karaoke.com: did not receive HSTS header
ganhonet.com.br: did not receive HSTS header
-ganzgraph.de: did not receive HSTS header
gaojianli.tk: could not connect to host
gaon.network: could not connect to host
gaptek.id: did not receive HSTS header
-gar-nich.net: could not connect to host
garage-abri-chalet.fr: did not receive HSTS header
garage-door.pro: could not connect to host
garage-meynard.com: could not connect to host
garagelink.jp: did not receive HSTS header
garageon.net: did not receive HSTS header
+garagesecond.com: did not receive HSTS header
garbage-juice.com: could not connect to host
+garbagedisposalguides.com: did not receive HSTS header
garciamartin.me: could not connect to host
garcinia--cambogia.com: could not connect to host
garciniacambogiareviewed.co: did not receive HSTS header
@@ -8900,10 +9200,13 @@ garden-life.org: could not connect to host
garden.trade: could not connect to host
gardencarezone.com: did not receive HSTS header
gardinte.com: could not connect to host
+garedtech.com: could not connect to host
garethkirkreviews.com: could not connect to host
garfieldairlines.net: did not receive HSTS header
garforthgolfclub.co.uk: did not receive HSTS header
+garriganenterprises.com: did not receive HSTS header
garriganenterprises.net: did not receive HSTS header
+garriganenterprisesinc.com: did not receive HSTS header
garriganenterprisesinc.net: did not receive HSTS header
garten-bau.ch: did not receive HSTS header
garten-diy.de: could not connect to host
@@ -8912,9 +9215,9 @@ gasbarkenora.com: could not connect to host
gasnews.net: could not connect to host
gasser-daniel.ch: did not receive HSTS header
gassouthkenticoqa.azurewebsites.net: could not connect to host
-gastritisolucion.com: did not receive HSTS header
+gastritisolucion.com: could not connect to host
gatapro.net: could not connect to host
-gatemotorsumhlanga.co.za: did not receive HSTS header
+gatemotorsumhlanga.co.za: could not connect to host
gatemoves.com: could not connect to host
gatewaybronco.com: did not receive HSTS header
gateworld.fr: did not receive HSTS header
@@ -8954,6 +9257,7 @@ geass.xyz: could not connect to host
geblitzt.de: did not receive HSTS header
gedankenbude.info: could not connect to host
gedankenworks.com: could not connect to host
+gee.is: did not receive HSTS header
geek1.de: did not receive HSTS header
geekbaba.com: could not connect to host
geekcast.co.uk: could not connect to host
@@ -8965,22 +9269,24 @@ geektimes.com: did not receive HSTS header
geeky.software: could not connect to host
geekystudios.us: could not connect to host
geemo.top: could not connect to host
-gehaowu.com: did not receive HSTS header
gehrke.nrw: could not connect to host
geigr.de: could not connect to host
geiser.io: did not receive HSTS header
+geisser-elektronikdata.de: did not receive HSTS header
gekosoft.eu: could not connect to host
geldteveel.eu: could not connect to host
-gelodosul.com.br: could not connect to host
-gem-indonesia.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+gelodosul.com.br: did not receive HSTS header
+gem-indonesia.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+gem-info.fr: could not connect to host
gemeentemolenwaard.nl: did not receive HSTS header
gemeinfreie-lieder.de: did not receive HSTS header
gemsoftheworld.org: could not connect to host
gemuplay.com: could not connect to host
+gendundrupa.ch: did not receive HSTS header
genemesservwparts.com: could not connect to host
general-insurance.tk: could not connect to host
generalpants.com.au: did not receive HSTS header
-generationnext.pl: could not connect to host
+generationgoat.com: could not connect to host
generationsweldom.com: could not connect to host
genesischangelog.com: did not receive HSTS header
genevacountyal.gov: did not receive HSTS header
@@ -9006,12 +9312,12 @@ geoffdev.com: could not connect to host
geoffmyers.com: did not receive HSTS header
geoffreyrichard.com: could not connect to host
geofox.org: did not receive HSTS header
+geoinstinct.com: could not connect to host
geopals.net: could not connect to host
georgehalachev.com: did not receive HSTS header
georgemaschke.com: did not receive HSTS header
georgeperez.me: could not connect to host
georgesonarthurs.com.au: did not receive HSTS header
-georgiatransport.com: could not connect to host
geosphereservices.com: did not receive HSTS header
gepe.ch: did not receive HSTS header
gereja.ga: could not connect to host
@@ -9023,7 +9329,7 @@ germansoldiers.net: could not connect to host
germanticz.de: did not receive HSTS header
gers-authentique.com: could not connect to host
gerum.dynv6.net: did not receive HSTS header
-geschenkly.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+geschenkly.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
geschmackspiloten.de: did not receive HSTS header
gesiwista.net: could not connect to host
gesunde-smoothies.de: did not receive HSTS header
@@ -9034,9 +9340,10 @@ get-cctv.com: could not connect to host
get-link.info: did not receive HSTS header
get.zenpayroll.com: did not receive HSTS header
get4x.com: did not receive HSTS header
-geta.pub: could not connect to host
-getable.com: could not connect to host
+geta.pub: did not receive HSTS header
+getable.com: did not receive HSTS header
getblys.com.au: did not receive HSTS header
+getbonfire.com: did not receive HSTS header
getcarefirst.com: could not connect to host
getcarina.com: could not connect to host
getcleartouch.com: did not receive HSTS header
@@ -9047,7 +9354,9 @@ getdigitized.net: could not connect to host
getenergized2018.kpn: could not connect to host
getenseguros.com.br: did not receive HSTS header
getenv.io: could not connect to host
+geteventbox.com: could not connect to host
getfestify.com: did not receive HSTS header
+getfilterlive.org: could not connect to host
getfirepress.com: could not connect to host
getfittedstore.com: did not receive HSTS header
getfoundquick.com: did not receive HSTS header
@@ -9062,6 +9371,7 @@ getgeek.no: could not connect to host
getgeek.nu: could not connect to host
getgeek.pl: could not connect to host
geti2p.com: could not connect to host
+getimgs.com: could not connect to host
getinternet.de: did not receive HSTS header
getitpeople.com: could not connect to host
getkai.co.nz: did not receive HSTS header
@@ -9088,9 +9398,8 @@ getsilknow.com: could not connect to host
getspeaker.com: did not receive HSTS header
getspire.com: could not connect to host
getsubs.net: could not connect to host
-getswadeshi.com: could not connect to host
gettodoing.com: could not connect to host
-getts.ro: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+getts.ro: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
getwarden.net: could not connect to host
getwashdaddy.com: could not connect to host
getweloop.io: could not connect to host
@@ -9101,26 +9410,25 @@ gfbouncycastles.co.uk: did not receive HSTS header
gfe.link: could not connect to host
gflclan.ru: did not receive HSTS header
gfm.tech: could not connect to host
+gfms.ru: could not connect to host
gfoss.gr: could not connect to host
gfournier.ca: could not connect to host
gfw.moe: could not connect to host
gfwno.win: could not connect to host
gfwsb.ml: could not connect to host
-gg6957.com: could not connect to host
+gg6957.com: did not receive HSTS header
gglks.com: could not connect to host
ggobbo.com: could not connect to host
ggrks-asano.com: could not connect to host
ggss.cf: could not connect to host
ggss.ml: could not connect to host
gh16.com.ar: could not connect to host
-ghaglund.se: could not connect to host
ghcif.de: could not connect to host
gheorghe-sarcov.ga: could not connect to host
gheorghesarcov.ga: could not connect to host
gheorghesarcov.tk: could not connect to host
ghi.gov: could not connect to host
ghibli.studio: could not connect to host
-ghid-pitesti.ro: did not receive HSTS header
ghkim.net: could not connect to host
ghost-legion.com: did not receive HSTS header
ghostblog.info: could not connect to host
@@ -9145,9 +9453,10 @@ gifts.best: could not connect to host
giftservices.nl: could not connect to host
gifzilla.net: could not connect to host
gigacloud.org: could not connect to host
+gigacog.com: could not connect to host
gigantar.com: did not receive HSTS header
gigawa.lt: could not connect to host
-gigawattz.com: could not connect to host
+gigawattz.com: did not receive HSTS header
gigime.com: did not receive HSTS header
gigiscloud.servebeer.com: could not connect to host
gilcloud.com: could not connect to host
@@ -9178,9 +9487,11 @@ gipsic.com: did not receive HSTS header
giraffeinflatables.co.uk: could not connect to host
girlsgenerationgoods.com: could not connect to host
girlsgonesporty.com: could not connect to host
+girlsnet.work: could not connect to host
gis3m.org: did not receive HSTS header
gisgov.be: did not receive HSTS header
gistfy.com: could not connect to host
+gistr.io: could not connect to host
git-stuff.tk: could not connect to host
git.ac.cn: did not receive HSTS header
git.co: could not connect to host
@@ -9199,13 +9510,13 @@ gixtools.uk: could not connect to host
gizzo.sk: could not connect to host
gkimanyar.org: could not connect to host
glabiatoren-kst.de: could not connect to host
-gladiatorboost.com: could not connect to host
+gladdy.uk: did not receive HSTS header
+gladiatorboost.com: did not receive HSTS header
gladystudio.com: did not receive HSTS header
glasner.photo: could not connect to host
glass-mag.eu: did not receive HSTS header
glass.google.com: did not receive HSTS header (error ignored - included regardless)
glasslikes.com: did not receive HSTS header
-glazedmag.fr: could not connect to host
glbg.eu: could not connect to host
gle: could not connect to host
glenavy.tk: could not connect to host
@@ -9217,10 +9528,10 @@ glicerina.online: could not connect to host
glittersjabloon.nl: did not receive HSTS header
glitzmirror.com: could not connect to host
glnpo.gov: could not connect to host
-glob-coin.com: could not connect to host
global-lights.ma: did not receive HSTS header
global.hr: did not receive HSTS header
globalado.com: could not connect to host
+globalcanineregistry.com: could not connect to host
globalelite.black: did not receive HSTS header
globalexpert.co.nz: could not connect to host
globalgivingtime.com: could not connect to host
@@ -9236,7 +9547,7 @@ globalsites.nl: did not receive HSTS header
globaltennis.ca: could not connect to host
globalvisions-events.ch: could not connect to host
globalvisions-events.com: could not connect to host
-globcoin.io: could not connect to host
+globcoin.io: did not receive HSTS header
globeinform.com: did not receive HSTS header
globuli-info.de: could not connect to host
gloomyspark.com: could not connect to host
@@ -9254,13 +9565,12 @@ gmail.com: did not receive HSTS header (error ignored - included regardless)
gmantra.org: max-age too low: 7776000
gmanukyan.com: could not connect to host
gmat.ovh: could not connect to host
-gmind.ovh: could not connect to host
gmoes.at: did not receive HSTS header
gmplab.com: did not receive HSTS header
-gn00.ink: could not connect to host
+gmw-hannover.de: could not connect to host
+gn00.ink: did not receive HSTS header
gnaptracker.tk: could not connect to host
gnhub.org: could not connect to host
-gnilebein.de: did not receive HSTS header
gnom.me: could not connect to host
gnosticjade.net: did not receive HSTS header
gnuand.me: could not connect to host
@@ -9275,18 +9585,19 @@ goalsetup.com: could not connect to host
goaltree.ch: did not receive HSTS header
goapunks.net: could not connect to host
goat.chat: did not receive HSTS header
-goat.xyz: did not receive HSTS header
goatbot.xyz: could not connect to host
goben.ch: could not connect to host
+gobiz.com.my: did not receive HSTS header
goblins.net: could not connect to host
goblinsatwork.com: could not connect to host
goblintears.com: could not connect to host
gobranding.com.vn: did not receive HSTS header
-god-esb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-godbo9.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-godbo9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-godbo9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-godesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+god-esb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+godaxen.tv: could not connect to host
+godbo9.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+godbo9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+godbo9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+godesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
godofnea.com: did not receive HSTS header
godrealms.com: could not connect to host
godrive.ga: could not connect to host
@@ -9295,12 +9606,13 @@ goedeke.ml: could not connect to host
goedkopelaptopshardenberg.nl: did not receive HSTS header
goerner.me: did not receive HSTS header
goesta-hallenbau.de: did not receive HSTS header
+goetic.space: could not connect to host
goge.site: could not connect to host
gogenenglish.com: could not connect to host
goggs.eu: could not connect to host
gogold-g.com: could not connect to host
gogonano.com: did not receive HSTS header
-goguel.org: could not connect to host
+goguel.org: did not receive HSTS header
goiaspropaganda.com.br: could not connect to host
gold24.in: could not connect to host
gold24.ru: did not receive HSTS header
@@ -9321,6 +9633,7 @@ gomelagromashplus.by: did not receive HSTS header
gomena.io: max-age too low: 0
gomiblog.com: did not receive HSTS header
gong8.win: could not connect to host
+gongjuhao.com: could not connect to host
gonkar.com: did not receive HSTS header
gonzalesca.gov: did not receive HSTS header
gonzalosanchez.mx: did not receive HSTS header
@@ -9345,10 +9658,14 @@ gooroosmarketplace.com: did not receive HSTS header
gootlijsten.nl: did not receive HSTS header
goozz.nl: did not receive HSTS header
gopay.cz: did not receive HSTS header
+gopayz.com.my: did not receive HSTS header
goplex.com.au: did not receive HSTS header
gopokego.cz: could not connect to host
+gopostore.com: did not receive HSTS header
gopwhip.gov: did not receive HSTS header
goranrango.ch: could not connect to host
+gorf.chat: could not connect to host
+gorf.club: could not connect to host
gorgiaxx.com: could not connect to host
gorilla-gym.site: could not connect to host
gorillow.com: could not connect to host
@@ -9362,14 +9679,14 @@ gospelofmark.ch: could not connect to host
gostest.org: did not receive HSTS header
gostream.asia: could not connect to host
goto.google.com: did not receive HSTS header (error ignored - included regardless)
-goto.world: could not connect to host
gotobrno.cz: did not receive HSTS header
gotocloud.ru: could not connect to host
+gotrek.com.au: could not connect to host
gotspot.com: could not connect to host
gottfridsberg.org: could not connect to host
gottfriedfeyen.com: did not receive HSTS header
goubi.me: did not receive HSTS header
-goufaan.com: could not connect to host
+goufaan.com: did not receive HSTS header
goujianwen.com: did not receive HSTS header
goukon.ru: could not connect to host
gourmettia.com: did not receive HSTS header
@@ -9380,13 +9697,12 @@ gov.tc: did not receive HSTS header
goverage.org: did not receive HSTS header
govillemo.ca: did not receive HSTS header
govtrack.us: did not receive HSTS header
-gowe.wang: could not connect to host
-gowin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-gowin9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+gowin9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+gowin9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
gozadentro.com: could not connect to host
gozel.com.tr: did not receive HSTS header
gparent.org: did not receive HSTS header
-gpfclan.de: could not connect to host
+gpccp.cc: could not connect to host
gpga.cf: could not connect to host
gplintegratedit.com: could not connect to host
gpo.gov: did not receive HSTS header
@@ -9395,6 +9711,7 @@ gpsarena.ro: could not connect to host
gpscamera.nl: could not connect to host
gpsfix.cz: could not connect to host
gpstuner.com: did not receive HSTS header
+gpws.ovh: did not receive HSTS header
gra2.com: could not connect to host
graavaapi.elasticbeanstalk.com: could not connect to host
grabi.ga: could not connect to host
@@ -9406,9 +9723,10 @@ graciousmay.com: did not receive HSTS header
grademymac.com: could not connect to host
grademypc.com: could not connect to host
gradenotify.com: could not connect to host
-gradingcontractornc.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+gradingcontractornc.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
grads360.org: could not connect to host
gradsm-ci.net: did not receive HSTS header
+grafcaps.com: could not connect to host
grafitec.ru: did not receive HSTS header
grafmurr.de: could not connect to host
graftworld.pw: could not connect to host
@@ -9431,12 +9749,22 @@ graphified.nl: could not connect to host
graphire.io: could not connect to host
graphite.org.uk: could not connect to host
graphsearchengine.com: could not connect to host
+grasboomamersfoort.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+grasboombinnendoor.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+grasboomclophaemer.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+grasboomderoos.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+grasboomleusden.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+grasboommax.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+grasboommeerbalans.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+grasboomveenendaal.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+grasboomvondellaan.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
gratis-app.com: did not receive HSTS header
gratis-lovecheck.de: did not receive HSTS header
gratisonlinesex.com: could not connect to host
gravitation.pro: could not connect to host
gravitechthai.com: did not receive HSTS header
gravito.nl: did not receive HSTS header
+gravity-inc.net: could not connect to host
gravity-net.de: could not connect to host
graycell.net: could not connect to host
grazetech.com: did not receive HSTS header
@@ -9464,7 +9792,6 @@ greengoblindev.com: could not connect to host
greengov.gov: could not connect to host
greenhillantiques.co.uk: could not connect to host
greenitpark.net: could not connect to host
-greenpaws.ee: did not receive HSTS header
greensad36.ru: did not receive HSTS header
greensolid.biz: could not connect to host
greenville.ag: did not receive HSTS header
@@ -9472,11 +9799,11 @@ greenvines.com.tw: did not receive HSTS header
greenvpn.ltd: could not connect to host
greenvpn.pro: did not receive HSTS header
greenwaylog.net: could not connect to host
-greer.ru: could not connect to host
greggsfoundation.org.uk: could not connect to host
gregmartyn.com: could not connect to host
gregmilton.org: could not connect to host
grego.pt: could not connect to host
+gregory-kramer.fr: could not connect to host
gregorytlee.me: did not receive HSTS header
grekland.guide: could not connect to host
gremots.com: could not connect to host
@@ -9493,16 +9820,17 @@ greyline.se: could not connect to host
grian-bam.at: did not receive HSTS header
gribani.com: could not connect to host
grid2osm.org: could not connect to host
+gridle.io: did not receive HSTS header
griecopelino.com: did not receive HSTS header
grieg.com: could not connect to host
grieg.net: could not connect to host
grieg.org: could not connect to host
+grienenberger.eu: could not connect to host
grigalanzsoftware.com: could not connect to host
grillinfools.com: did not receive HSTS header
gripnijmegen.rip: could not connect to host
gripopgriep.net: could not connect to host
-grippe-impftermin.de: did not receive HSTS header
-gritte.net: could not connect to host
+gritte.net: did not receive HSTS header
griyo.online: could not connect to host
grmp.fr: did not receive HSTS header
groben-itsolutions.de: could not connect to host
@@ -9512,7 +9840,7 @@ groenewoud.run: could not connect to host
groentefruitzeep.com: could not connect to host
groentefruitzeep.nl: could not connect to host
groetzner.net: did not receive HSTS header
-groseb.net: did not receive HSTS header
+groseb.net: could not connect to host
grossell.ru: could not connect to host
grossmann.gr: could not connect to host
grossmisconduct.news: could not connect to host
@@ -9551,9 +9879,11 @@ gtmasterclub.it: did not receive HSTS header
gtraxapp.com: could not connect to host
gts-dp.de: did not receive HSTS header
gts-schulsoftware.de: did not receive HSTS header
-guajars.cl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+guajars.cl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+guancha.org: could not connect to host
guannan.net.cn: could not connect to host
guarajubaimoveis.com.br: did not receive HSTS header
+guardianproject.info: did not receive HSTS header
guardiansoftheearth.org: could not connect to host
guava.studio: could not connect to host
guchengf.me: did not receive HSTS header
@@ -9571,8 +9901,8 @@ gugert.net: could not connect to host
gugga.dk: could not connect to host
guguke.net: did not receive HSTS header
guhei.net: could not connect to host
+guida.org: could not connect to host
guidechecking.com: could not connect to host
-guidedselling.net: could not connect to host
guides-et-admin.com: did not receive HSTS header
guides-peche64.com: could not connect to host
guidesetc.com: did not receive HSTS header
@@ -9601,10 +9931,12 @@ gunnarhafdal.com: did not receive HSTS header
gunnaro.com: did not receive HSTS header
gunsofshadowvalley.com: did not receive HSTS header
guntbert.net: could not connect to host
+guohuageng.com: could not connect to host
guoqiang.info: did not receive HSTS header
+guphi.net: did not receive HSTS header
gurochan.ch: did not receive HSTS header
gurom.lv: could not connect to host
-gurubetng.com: did not receive HSTS header
+gurubetng.com: could not connect to host
gurusupe.com: could not connect to host
gus.moe: could not connect to host
guso.gq: could not connect to host
@@ -9615,6 +9947,7 @@ gussi.is: could not connect to host
gustom.io: did not receive HSTS header
gutenbergthemes.info: did not receive HSTS header
guthabenkarten-billiger.de: could not connect to host
+gutschein-spezialist.de: could not connect to host
gutuia.blue: could not connect to host
guvernalternativa.ro: could not connect to host
guyot-tech.com: did not receive HSTS header
@@ -9639,23 +9972,25 @@ gyboche.com: could not connect to host
gyboche.science: could not connect to host
gycis.me: did not receive HSTS header
gylauto.fr: could not connect to host
-gymnasium-farmsen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-gypsycatdreams.com: could not connect to host
+gymnasium-farmsen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+gyoza.beer: could not connect to host
+gypsycatdreams.com: did not receive HSTS header
gypthecat.com: did not receive HSTS header
gyume.ir: did not receive HSTS header
gyz.io: could not connect to host
-gzitech.com: could not connect to host
gzitech.net: could not connect to host
gzitech.org: could not connect to host
gzpblog.com: could not connect to host
h-og.com: could not connect to host
h-rickroll-n.pw: could not connect to host
-h-suppo.com: did not receive HSTS header
+h-suppo.com: could not connect to host
h0r.st: could not connect to host
+h10l.com: could not connect to host
h11.moe: could not connect to host
h2cdn.cloud: could not connect to host
h2check.org: could not connect to host
h33t.xyz: did not receive HSTS header
+h3b.nl: could not connect to host
h3x.jp: could not connect to host
haancommunity.cf: could not connect to host
haarkliniek.com: did not receive HSTS header
@@ -9674,17 +10009,20 @@ hack.li: could not connect to host
hackbubble.me: could not connect to host
hackdown.me: could not connect to host
hacker.deals: could not connect to host
+hacker8.cn: could not connect to host
hackercat.ninja: max-age too low: 2592000
hackerco.com: could not connect to host
hackerforever.com: did not receive HSTS header
hackerlite.xyz: max-age too low: 0
hackerone-ext-adroll.com: could not connect to host
hackerpoints.com: did not receive HSTS header
+hackerschat.net: could not connect to host
hackerspace-ntnu.no: did not receive HSTS header
hackerstxt.org: could not connect to host
hackest.org: did not receive HSTS header
hackettrecipes.com: could not connect to host
hackingarise.com: did not receive HSTS header
+hackingdh.com: could not connect to host
hackingsafe.com: could not connect to host
hackit.im: could not connect to host
hackmeplz.com: could not connect to host
@@ -9699,12 +10037,15 @@ hadret.sh: did not receive HSTS header
hadzic.co: could not connect to host
haeckl.eu: did not receive HSTS header
haehnlein.at: could not connect to host
-haemmerle.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+haemmerle.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
haf.gr: could not connect to host
hafoda.com: did not receive HSTS header
hahayidu.org: could not connect to host
+haibara.top: could not connect to host
haidihai.ro: did not receive HSTS header
hail2u.net: did not receive HSTS header
+haim.bio: could not connect to host
+haimablog.ooo: could not connect to host
hainoni.com: did not receive HSTS header
hairbeautyartists.it: could not connect to host
hairlossstop.net: could not connect to host
@@ -9743,10 +10084,10 @@ hamish.ca: did not receive HSTS header
hamking.tk: could not connect to host
hammamsayad.com: could not connect to host
hammer-corp.com: did not receive HSTS header
-hammerpondkennels.co.uk: did not receive HSTS header
hamon.cc: did not receive HSTS header
hamsters-uk.org: did not receive HSTS header
hamu.blue: could not connect to host
+hanakatova.com: did not receive HSTS header
hanashi.eu: did not receive HSTS header
hancatemc.com: did not receive HSTS header
hancc.net: could not connect to host
@@ -9755,7 +10096,7 @@ handicapindeles.nl: did not receive HSTS header
handicaps-ensemble.org: did not receive HSTS header
handinhandfoundation.org.uk: did not receive HSTS header
handiworker.com: could not connect to host
-handmadegobelin.com: could not connect to host
+handmadegobelin.com: did not receive HSTS header
handmadeshoes.pe: could not connect to host
handmadetutorials.ro: could not connect to host
handsandall.com: did not receive HSTS header
@@ -9764,6 +10105,7 @@ handyklinik.info: did not receive HSTS header
hanfu.la: could not connect to host
hang333.pw: could not connect to host
hangar18-modelismo.com.br: could not connect to host
+hangerphant.com: could not connect to host
hangout: could not connect to host (error ignored - included regardless)
hanimalis.fr: could not connect to host
hanksservice.com: could not connect to host
@@ -9772,7 +10114,6 @@ hanoibuffet.com: could not connect to host
hans-natur.de: did not receive HSTS header
hansch.ventures: could not connect to host
hanxv.pw: did not receive HSTS header
-hanying6.com: did not receive HSTS header
hanys.xyz: could not connect to host
hanzcollection.online: could not connect to host
haobo111.com: could not connect to host
@@ -9784,15 +10125,14 @@ haobo5555.com: could not connect to host
haobo6666.com: could not connect to host
haobo7777.com: could not connect to host
haocq3.com: did not receive HSTS header
-haomwei.com: could not connect to host
haorenka.cc: max-age too low: 0
haoshen666.com: max-age too low: 0
haotown.cn: did not receive HSTS header
haoyugao.com: could not connect to host
-haozhexie.com: could not connect to host
haozi.me: did not receive HSTS header
haozijing.com: could not connect to host
hapijs.cn: could not connect to host
+hapimiennam.com: did not receive HSTS header
hapissl.com: could not connect to host
hapivm.com: could not connect to host
happix.nl: did not receive HSTS header
@@ -9808,7 +10148,7 @@ hapsfordmill.co.uk: could not connect to host
hapvm.com: could not connect to host
haqaza.com.br: could not connect to host
harambe.site: could not connect to host
-harbourweb.net: did not receive HSTS header
+harbourweb.net: could not connect to host
hardline.xyz: could not connect to host
hardloopfysio.nl: did not receive HSTS header
hardtime.ru: could not connect to host
@@ -9818,11 +10158,12 @@ haribosupermix.com: could not connect to host
hariome.com: did not receive HSTS header
haritsa.co.id: could not connect to host
harlentimberproducts.co.uk: did not receive HSTS header
+harlor.de: could not connect to host
harrisonsdirect.co.uk: did not receive HSTS header
harrisonvillenaz.org: did not receive HSTS header
harristony.com: could not connect to host
harry-baker.com: could not connect to host
-harryharrison.co: could not connect to host
+harryharrison.co: did not receive HSTS header
harryphoto.fr: did not receive HSTS header
harrypottereditor.com: could not connect to host
harrypottereditor.net: could not connect to host
@@ -9839,10 +10180,12 @@ hash-list.com: could not connect to host
hashiconf.com: did not receive HSTS header
hashiconf.eu: did not receive HSTS header
hashidays.com: did not receive HSTS header
+hashimah.ca: could not connect to host
+hashnode.com: did not receive HSTS header
hashplex.com: could not connect to host
hasinase.de: could not connect to host
haste.ch: could not connect to host
-hastherebeenamassshooting.today: could not connect to host
+hastherebeenamassshooting.today: did not receive HSTS header
hatcherlawgroupnm.com: did not receive HSTS header
hatethe.uk: could not connect to host
hatoko.net: could not connect to host
@@ -9867,7 +10210,7 @@ haxoff.com: could not connect to host
haxon.me: could not connect to host
haydenhill.us: could not connect to host
haydentomas.com: did not receive HSTS header
-hayleishop.fr: did not receive HSTS header
+hayleishop.fr: could not connect to host
hayzepvp.us: could not connect to host
hazcod.com: could not connect to host
haze-productions.com: could not connect to host
@@ -9895,21 +10238,25 @@ hcoe.fi: did not receive HSTS header
hcr.io: did not receive HSTS header
hcs-company.nl: did not receive HSTS header
hcstr.com: could not connect to host
-hd1tj.org: did not receive HSTS header
hd4138.com: could not connect to host
hd6556.com: could not connect to host
hd6957.com: could not connect to host
hda.me: did not receive HSTS header
-hdm.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+hdm.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
hdrboundless.com: could not connect to host
+hdritalyphotos.com: did not receive HSTS header
hdserver.info: did not receive HSTS header
hdsmigrationtool.com: could not connect to host
hduin.xyz: could not connect to host
+hdwalldownloads.com: could not connect to host
hdy.nz: could not connect to host
head-shop.lt: could not connect to host
head-shop.lv: could not connect to host
+head.org: could not connect to host
+headlinesclub.com: did not receive HSTS header
headmates.xyz: could not connect to host
headshopinternational.com: did not receive HSTS header
+headshotharp.de: could not connect to host
health-and-beauty-news.net: could not connect to host
health-match.com.au: could not connect to host
healthcare6.com: did not receive HSTS header
@@ -9919,6 +10266,7 @@ healthlabs.com: did not receive HSTS header
healthmatchapp.com: could not connect to host
healthyandnaturalliving.com: could not connect to host
healthycod.in: could not connect to host
+healthyrecharge.com: did not receive HSTS header
healtious.com: could not connect to host
hearinghelpexpress.com: did not receive HSTS header
hearingshofar.com: could not connect to host
@@ -9927,9 +10275,9 @@ heartbeat24.de: did not receive HSTS header
heartgames.pl: could not connect to host
heartlandrentals.com: did not receive HSTS header
heartsucker.com: could not connect to host
-hearty.blog: could not connect to host
hearty.cf: did not receive HSTS header
hearty.ink: could not connect to host
+hearty.ooo: could not connect to host
hearty.org.tw: could not connect to host
hearty.space: could not connect to host
hearty.taipei: could not connect to host
@@ -9941,6 +10289,7 @@ heathmanners.com: could not connect to host
heavenlyseals.com: could not connect to host
heavenlysmokenc.com: could not connect to host
heavystresser.com: could not connect to host
+heayao.com: could not connect to host
hebaus.com: could not connect to host
hebergeurssd.com: could not connect to host
heberut.gov: did not receive HSTS header
@@ -9948,6 +10297,7 @@ hebriff.com: could not connect to host
hechamano.es: did not receive HSTS header
heckticmedia.com: did not receive HSTS header
hectorj.net: did not receive HSTS header
+heddoun.com: did not receive HSTS header
heeler.blue: could not connect to host
heeler.red: could not connect to host
heidilein.info: did not receive HSTS header
@@ -9997,15 +10347,17 @@ helsingfors.guide: could not connect to host
helup.com: did not receive HSTS header
hemlockhillscabinrentals.com: did not receive HSTS header
hencagon.com: could not connect to host
-hendrik.li: could not connect to host
+henchman.io: could not connect to host
hendyisaac.com: could not connect to host
hengelsportdeal.com: could not connect to host
-henhenlu.com: could not connect to host
-henkbrink.com: did not receive HSTS header
-hennadesigns.org: did not receive HSTS header
-henningkerstan.org: did not receive HSTS header
+henhenlu.com: did not receive HSTS header
+henkbrink.com: could not connect to host
+hennadesigns.org: could not connect to host
+henningkerstan.de: did not receive HSTS header
+henok.eu: did not receive HSTS header
henriknoerr.com: could not connect to host
henrock.net: could not connect to host
+henryphan.com: could not connect to host
hentai.design: could not connect to host
hentaimaster.net: could not connect to host
hentaiworld.cc: could not connect to host
@@ -10024,8 +10376,7 @@ heribro.com: did not receive HSTS header
heritagedentistry.ca: could not connect to host
hermann.in: could not connect to host
hermes-servizi.it: could not connect to host
-hermes.cat: could not connect to host
-herndl.org: could not connect to host
+herndl.org: did not receive HSTS header
hernn.com: could not connect to host
heroin.org.uk: could not connect to host
herpaderp.net: could not connect to host
@@ -10034,7 +10385,9 @@ herramientasbazarot.com: did not receive HSTS header
herrenfahrt.com: did not receive HSTS header
herrtxbias.org: could not connect to host
hervespanneut.com: did not receive HSTS header
+herzbotschaft.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
hessen-liebe.de: did not receive HSTS header
+hethely.ch: could not connect to host
hetmeisjeachterpauw.nl: could not connect to host
hetzflix.stream: did not receive HSTS header
heverhagen.rocks: did not receive HSTS header
@@ -10046,8 +10399,6 @@ hexadecimal.tech: could not connect to host
hexclock.io: could not connect to host
hexe.net: did not receive HSTS header
hexhu.com: could not connect to host
-hexid.me: could not connect to host
-hexieshe.com: could not connect to host
hexobind.com: could not connect to host
heyfringe.com: could not connect to host
heyguevara.com: did not receive HSTS header
@@ -10055,28 +10406,31 @@ heyjournal.com: could not connect to host
heywoodtown.co.uk: did not receive HSTS header
hf-tekst.nl: did not receive HSTS header
hfbg.nl: did not receive HSTS header
-hfcbank.com.gh: could not connect to host
+hfcbank.com.gh: did not receive HSTS header
hfi.me: did not receive HSTS header
hflsdev.org: could not connect to host
hfsctx.gov: could not connect to host
hfu.io: could not connect to host
+hg170.cc: could not connect to host
hg525.com: did not receive HSTS header
hg71839.com: could not connect to host
hg881.com: could not connect to host
hgfa.fi: could not connect to host
+hguandl.com: could not connect to host
hh46953255.com: max-age too low: 0
-hh6957.com: could not connect to host
-hi.team: could not connect to host
+hh6957.com: did not receive HSTS header
hi808.net: did not receive HSTS header
hialatv.com: could not connect to host
hibilog.com: could not connect to host
hicn.gq: could not connect to host
+hicts.nl: could not connect to host
hiddenmail.xyz: could not connect to host
hiddenprocess.com: did not receive HSTS header
hiddenrefuge.eu.org: could not connect to host
hidedd.com: could not connect to host
hideftv.deals: could not connect to host
hidrofire.com: did not receive HSTS header
+hidupnomad.com: could not connect to host
hiexmerida-mailing.com: could not connect to host
hig.gov: could not connect to host
higgsboson.tk: did not receive HSTS header
@@ -10091,11 +10445,12 @@ hightechgadgets.net: could not connect to host
hightower.eu: could not connect to host
highvelocitydesign.com: could not connect to host
higp.de: did not receive HSTS header
+hiimodel.com: could not connect to host
hiisukun.com: could not connect to host
hiitcentre.com: did not receive HSTS header
hijackpost.com: did not receive HSTS header
hijoan.com: did not receive HSTS header
-hikagestudios.com: did not receive HSTS header
+hikagestudios.com: could not connect to host
hikariempire.com: could not connect to host
hikarukujo.com: did not receive HSTS header
hilaolu.com: could not connect to host
@@ -10103,7 +10458,6 @@ hilaolu.studio: max-age too low: 0
hilariousbeer.com.mx: could not connect to host
hilinemerchandising.com: did not receive HSTS header
hill.selfip.net: could not connect to host
-hillcity.org.nz: did not receive HSTS header
hillcountryoralsurgery.com: max-age too low: 0
hilnu.tk: could not connect to host
hiltonhyland.com: did not receive HSTS header
@@ -10114,11 +10468,11 @@ himens.com: did not receive HSTS header
hindi-movie.org: did not receive HSTS header
hindmanfuneralhomes.com: did not receive HSTS header
hingle.me: could not connect to host
-hinrich.de: did not receive HSTS header
hintergedanken.com: could not connect to host
hintermeier-rae.at: did not receive HSTS header
hiojbk.com: could not connect to host
hipercultura.com: did not receive HSTS header
+hiphop.ren: could not connect to host
hiphopconvention.nl: could not connect to host
hipi.jp: could not connect to host
hipnoseinstitute.org: did not receive HSTS header
@@ -10140,6 +10494,7 @@ hitoy.org: could not connect to host
hitrek.ml: could not connect to host
hittipps.com: could not connect to host
hivatal-info.hu: could not connect to host
+hiwiki.tk: could not connect to host
hj2999.com: could not connect to host
hj3455.com: could not connect to host
hj9379.com: could not connect to host
@@ -10158,18 +10513,17 @@ hl8999.com: did not receive HSTS header
hledejpravnika.cz: could not connect to host
hlpublicidad.com: could not connect to host
hlyue.com: did not receive HSTS header
-hm1ch.com: could not connect to host
-hm1ch.ovh: could not connect to host
hm5189.com: max-age too low: 0
hmksq.ae: max-age too low: 7776000
hmm.nyc: could not connect to host
-hnwebi.com: did not receive HSTS header
+hnwebi.com: could not connect to host
hoast.xyz: did not receive HSTS header
hobaugh.social: could not connect to host
hobby-gamerz-community.de: did not receive HSTS header
hoberg.ch: did not receive HSTS header
+hochdorf-tennis.de: did not receive HSTS header
hochzeitshelferlein.de: did not receive HSTS header
-hoctap.net: did not receive HSTS header
+hoctap.net: could not connect to host
hodamakade.com: could not connect to host
hodne.io: could not connect to host
hoekwoningverkopen.nl: could not connect to host
@@ -10188,12 +10542,12 @@ hokieprivacy.org: did not receive HSTS header
hokify.at: did not receive HSTS header
hokify.ch: did not receive HSTS header
hokify.de: did not receive HSTS header
-holad.de: did not receive HSTS header
holgerlehner.com: could not connect to host
holidayincotswolds.co.uk: could not connect to host
holifestival-freyung.de: could not connect to host
hollandguns.com: did not receive HSTS header
hollerau.de: could not connect to host
+hollo.me: could not connect to host
holmq.dk: max-age too low: 2592000
holodeck.us: could not connect to host
holowaty.me: could not connect to host
@@ -10245,6 +10599,7 @@ hoodiecrow.com: did not receive HSTS header
hoodoo.io: could not connect to host
hoodoo.tech: could not connect to host
hookandloom.com: did not receive HSTS header
+hookupndate.com: could not connect to host
hoopsacademyusa.com: could not connect to host
hootworld.net: could not connect to host
hopemeet.info: could not connect to host
@@ -10253,7 +10608,6 @@ hopewellproperties.co.uk: did not receive HSTS header
hopglass.eu: could not connect to host
hopglass.net: could not connect to host
hopo.design: could not connect to host
-hoponmedia.de: could not connect to host
hor.website: could not connect to host
horace.li: did not receive HSTS header
horisonttimedia.fi: did not receive HSTS header
@@ -10272,9 +10626,9 @@ horvatnyelvkonyv.hu: could not connect to host
host.black: could not connect to host
host97.de: could not connect to host
hostam.link: could not connect to host
-hostcoz.com: could not connect to host
hosted-oswa.org: did not receive HSTS header
hostedbgp.net: did not receive HSTS header
+hostedcomments.com: could not connect to host
hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
hostelite.com: did not receive HSTS header
hostfuture.co.in: did not receive HSTS header
@@ -10286,15 +10640,13 @@ hostingfirst.nl: could not connect to host
hostingfj.com: could not connect to host
hostisan.com: could not connect to host
hostma.ma: could not connect to host
-hostme.co.il: max-age too low: 0
hostserv.org: could not connect to host
-hostworkz.com: did not receive HSTS header
+hostworkz.com: could not connect to host
hosyaku.gr.jp: did not receive HSTS header
-hotartup.com: could not connect to host
hotcamvids.com: could not connect to host
hotchillibox.co.za: could not connect to host
hotchoc.io: could not connect to host
-hotdoc.com.au: did not receive HSTS header
+hotdoc.com.au: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
hotel-huberhof.at: did not receive HSTS header
hotelarevalo.com: max-age too low: 0
hotelaustria-wien.at: did not receive HSTS header
@@ -10304,10 +10656,10 @@ hotelromacuernavaca.com.mx: did not receive HSTS header
hotelvictoriaoax-mailing.com: could not connect to host
hotelvillahermosa-mailing.com: could not connect to host
hotelvue.nl: did not receive HSTS header
-hotesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+hotesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
hotesb.net: could not connect to host
+hothiphopmusic.com: did not receive HSTS header
hoto.us: could not connect to host
-hotplug.gr: could not connect to host
hotpoint-training.com: did not receive HSTS header
hottestwebcamgirls.org: could not connect to host
houhaoyi.com: max-age too low: 0
@@ -10315,11 +10667,13 @@ houkago-step.com: did not receive HSTS header
house-of-japan.co.jp: did not receive HSTS header
houseinvestor.com: did not receive HSTS header
housemaadiah.org: could not connect to host
+houser.lu: could not connect to host
housetalk.ru: did not receive HSTS header
housingstudents.org.uk: could not connect to host
how2fsbo.com: could not connect to host
how2play.pl: did not receive HSTS header
-howardwatts.co.uk: could not connect to host
+howardtyson.com: did not receive HSTS header
+howardwatts.co.uk: did not receive HSTS header
howfargames.com: could not connect to host
howrandom.org: could not connect to host
howtocommunicate.com.au: did not receive HSTS header
@@ -10340,15 +10694,14 @@ hqhost.net: did not receive HSTS header
hqy.moe: did not receive HSTS header
hr-intranet.com: could not connect to host
hr-tech.store: could not connect to host
+hr365.dk: did not receive HSTS header
hr98.tk: could not connect to host
hr98.xyz: could not connect to host
hrabogados.com: could not connect to host
hrackydomino.cz: did not receive HSTS header
-hrbl.lc: could not connect to host
hrfhomelottery.com: did not receive HSTS header
hrjfeedstock.com: did not receive HSTS header
hrk.io: did not receive HSTS header
-hro.to: could not connect to host
hrobert.hu: could not connect to host
hrstapps-dev.com: could not connect to host
hrtech.store: could not connect to host
@@ -10365,8 +10718,10 @@ hstspreload.me: could not connect to host
hsulei.com: could not connect to host
hszhyy120.com: could not connect to host
htcp99.com: could not connect to host
+htdcomputer.vn: could not connect to host
htlball.at: could not connect to host
html-lab.tk: could not connect to host
+htmue.net: did not receive HSTS header
htp2.top: could not connect to host
http418.xyz: could not connect to host
httphacker.com: could not connect to host
@@ -10382,11 +10737,11 @@ hu8588.com: could not connect to host
hu8777.com: could not connect to host
hu8bet.com: could not connect to host
hu8hu8.com: could not connect to host
-hua-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-hua-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-hua-li88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-hua-li88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-huabianwa.com: did not receive HSTS header
+hua-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+hua-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+hua-li88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+hua-li88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+huabianwa.com: could not connect to host
huangguancq.com: could not connect to host
huangjia71.com: could not connect to host
huangjia72.com: could not connect to host
@@ -10401,27 +10756,29 @@ huangjia79.com: could not connect to host
huangjia99.com: could not connect to host
huangliangbo.com: did not receive HSTS header
huangting.me: did not receive HSTS header
+huangzenghao.cn: could not connect to host
huangzenghao.com: could not connect to host
-huarongdao.com: did not receive HSTS header
-huaxueba.com: did not receive HSTS header
+huarongdao.com: could not connect to host
+huaxueba.com: could not connect to host
hubertmoszka.pl: could not connect to host
hubrecht.at: could not connect to host
hubrick.com: could not connect to host
hudhaifahgoga.co.za: could not connect to host
hudingyuan.cn: could not connect to host
-huffsinsurance.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-hughtodd.ink: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+huffsinsurance.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+hugh-dancy.com: could not connect to host
+hughtodd.ink: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
hugizrecords.com: did not receive HSTS header
hugo6.com: could not connect to host
hugocollignon.fr: could not connect to host
-hui-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-hui-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+hugonote.ovh: could not connect to host
+hui-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+hui-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
hui89119.com: max-age too low: 0
-huirongis.me: could not connect to host
huiser.nl: could not connect to host
-hukaloh.com: could not connect to host
+hukaloh.com: did not receive HSTS header
hukkatavara.com: could not connect to host
-hukutuu.com: did not receive HSTS header
+hukutuu.com: could not connect to host
hulsoft.co.uk: could not connect to host
humanexperiments.com: could not connect to host
humankode.com: did not receive HSTS header
@@ -10436,17 +10793,20 @@ humpchies.com: did not receive HSTS header
humpi.at: could not connect to host
humpteedumptee.in: did not receive HSTS header
hundeformel.de: could not connect to host
+hundesport-psvhalle.de: could not connect to host
+hunter-read.com: could not connect to host
hunterjohnson.io: could not connect to host
huodongweb.com: could not connect to host
huongquynh.com: could not connect to host
hup.blue: did not receive HSTS header
hupp.se: could not connect to host
+hurd.is: could not connect to host
hurricanelabs.com: did not receive HSTS header
huskybutt.dog: could not connect to host
huskyduvercors.com: did not receive HSTS header
hustle.com: did not receive HSTS header
hustle.life: did not receive HSTS header
-hustunique.com: could not connect to host
+hustunique.com: did not receive HSTS header
huto.ml: could not connect to host
huwcbjones.uk: could not connect to host
huwjones.me: could not connect to host
@@ -10459,6 +10819,7 @@ hverdagogkink.no: could not connect to host
hwaddress.com: max-age too low: 60
hwcine.com: could not connect to host
hwinfo.com: did not receive HSTS header
+hy1.com: could not connect to host
hyakumachi.com: did not receive HSTS header
hyansc.com: max-age too low: 0
hyatt.com: did not receive HSTS header
@@ -10470,7 +10831,7 @@ hydai.co: could not connect to host
hydra.ws: could not connect to host
hydrabit.nl: did not receive HSTS header
hydradigital.com.au: did not receive HSTS header
-hydrasolutions.de: could not connect to host
+hydrazin.pw: did not receive HSTS header
hydrocloud.net: could not connect to host
hydrodipcenter.nl: did not receive HSTS header
hydronium.cf: could not connect to host
@@ -10483,7 +10844,8 @@ hydrosight.com: did not receive HSTS header
hyeok.org: did not receive HSTS header
hylians.com: could not connect to host
hypa.net.au: did not receive HSTS header
-hypeitems.pl: could not connect to host
+hypeitems.pl: did not receive HSTS header
+hypemgmt.com: could not connect to host
hyper-matrix.org: could not connect to host
hyper69.com: could not connect to host
hyperporn.net: could not connect to host
@@ -10491,14 +10853,11 @@ hyperreal.info: did not receive HSTS header
hypnoresults.com.au: did not receive HSTS header
hypnos.hu: did not receive HSTS header
hypotheques24.ch: could not connect to host
-hyr.mn: could not connect to host
hysg.me: could not connect to host
hysh.jp: could not connect to host
-hysolate.com: did not receive HSTS header
hyvive.com: did not receive HSTS header
-hyyen.com: could not connect to host
hzh.pub: did not receive HSTS header
-i-0v0.in: could not connect to host
+i-aloks.ru: could not connect to host
i-jp.net: could not connect to host
i-partners.sk: could not connect to host
i-rickroll-n.pw: could not connect to host
@@ -10508,18 +10867,16 @@ i10z.com: could not connect to host
i1place.com: did not receive HSTS header
i28s.com: did not receive HSTS header
i496.eu: could not connect to host
-i4m1k0su.com: could not connect to host
-i66.me: could not connect to host
-i6957.com: could not connect to host
+i66.me: did not receive HSTS header
+i6957.com: did not receive HSTS header
i9multiequipamentos.com.br: could not connect to host
ia1000.com: could not connect to host
iacono.com.br: did not receive HSTS header
iadttaveras.com: could not connect to host
iain.tech: did not receive HSTS header
iamcarrico.com: did not receive HSTS header
-iamhealthystore.com: could not connect to host
+iamcryptoki.com: could not connect to host
iaminashittymood.today: could not connect to host
-iamlbk.com: could not connect to host
iamlizu.com: did not receive HSTS header
iamlzh.com: could not connect to host
iamokay.nl: did not receive HSTS header
@@ -10548,6 +10905,7 @@ ibron.co: could not connect to host
ibsafrica.co.za: could not connect to host
ibsglobal.co.za: could not connect to host
ibutikk.no: did not receive HSTS header
+ic-spares.com: did not receive HSTS header
icabanken.se: did not receive HSTS header
icaforsakring.se: did not receive HSTS header
icake.life: did not receive HSTS header
@@ -10561,7 +10919,7 @@ icebound.win: could not connect to host
iceiu.com: could not connect to host
iceloch.com: could not connect to host
icepink.com.br: could not connect to host
-icewoman.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+icewoman.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
icfl.com.br: could not connect to host
ich-find-den-g.net: could not connect to host
ich-mach-druck.eu: did not receive HSTS header
@@ -10572,7 +10930,6 @@ ichronos.net: did not receive HSTS header
icity.ly: did not receive HSTS header
ickerseashop.com: could not connect to host
icloud.net: could not connect to host
-icnc.ga: did not receive HSTS header
icnsoft.cf: did not receive HSTS header
icnsoft.ga: did not receive HSTS header
icnsoft.me: could not connect to host
@@ -10582,18 +10939,20 @@ icntorrent.download: could not connect to host
ico500.com: could not connect to host
icondoom.nl: could not connect to host
icpc2016.in.th: could not connect to host
+icq-project.net: could not connect to host
icreative.nl: did not receive HSTS header
icsadviseurs.nl: did not receive HSTS header
+icsfinomornasco.it: could not connect to host
ictinforensics.org: could not connect to host
ictpro.info: did not receive HSTS header
icusignature.com: could not connect to host
+icy.aq: could not connect to host
icys2017.com: did not receive HSTS header
id-co.in: could not connect to host
id-conf.com: did not receive HSTS header
id7.fr: could not connect to host
idafauziyah.com: could not connect to host
idblab.tk: could not connect to host
-idbs.com: did not receive HSTS header
idc.yn.cn: could not connect to host
idcrane.com: could not connect to host
iddconnect.com: could not connect to host
@@ -10607,30 +10966,31 @@ idealvenir.com: did not receive HSTS header
ideaman924.com: did not receive HSTS header
ideapaisajistas.es: did not receive HSTS header
ideaplus.me: could not connect to host
+ideasenfoto.com: did not receive HSTS header
ideasmeetingpoint.com: could not connect to host
ideation-inc.co.jp: could not connect to host
-idedr.com: could not connect to host
+idedr.com: did not receive HSTS header
ideiasefinancas.com.br: could not connect to host
idemo.in: could not connect to host
+identifyme.net: could not connect to host
identity-hash.online: could not connect to host
identitylabs.uk: could not connect to host
identitysandbox.gov: could not connect to host
idgsupply.com: did not receive HSTS header
-idid.tk: could not connect to host
idinby.dk: did not receive HSTS header
idiopolis.org: could not connect to host
idisplay.es: could not connect to host
idisposable.co.uk: did not receive HSTS header
idlekernel.com: could not connect to host
idol-bikes.ru: could not connect to host
-idolshop.dk: did not receive HSTS header
+idolknow.com: could not connect to host
idolshop.me: could not connect to host
idontexist.me: could not connect to host
idranktoomuch.coffee: did not receive HSTS header
idrinktoomuch.coffee: did not receive HSTS header
idsafe.co.za: could not connect to host
idsoccer.com: did not receive HSTS header
-idyl.fr: did not receive HSTS header
+iec.pe: could not connect to host
ieedes.com: did not receive HSTS header
ieffalot.me: did not receive HSTS header
iemas.azurewebsites.net: did not receive HSTS header
@@ -10643,19 +11003,18 @@ iewar.com: could not connect to host
iexpert9.com: did not receive HSTS header
if0.ru: could not connect to host
ifad.org: did not receive HSTS header
-ifamily.top: could not connect to host
+ifamily.top: did not receive HSTS header
ifan.ch: could not connect to host
+ifangpei.cn: could not connect to host
+ifangpei.com.cn: could not connect to host
ifastuniversity.com: did not receive HSTS header
ifcfg.jp: could not connect to host
ifcfg.me: could not connect to host
ifconfig.co: did not receive HSTS header
-ifixe.ch: did not receive HSTS header
ifleurs.com: could not connect to host
ifly.pw: could not connect to host
-ifreetion.cn: could not connect to host
-ifreetion.com: did not receive HSTS header
+ifreetion.com: could not connect to host
ifroheweihnachten.net: did not receive HSTS header
-iftarsaati.org: did not receive HSTS header
ifx.ee: could not connect to host
ifxnet.com: could not connect to host
ifxor.com: could not connect to host
@@ -10665,19 +11024,16 @@ igaryhe.io: did not receive HSTS header
igd.chat: could not connect to host
igforums.com: did not receive HSTS header
igi-2.com: could not connect to host
-igi.codes: could not connect to host
igm-be.ch: did not receive HSTS header
ignatisd.gr: did not receive HSTS header
ignitedmindz.in: could not connect to host
-igsmgmt.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+igsmgmt.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
igule.net: could not connect to host
igva.or.kr: could not connect to host
ihakkitekin.com: could not connect to host
ihatethissh.it: could not connect to host
ihc.im: did not receive HSTS header
ihcr.top: did not receive HSTS header
-ihls.stream: did not receive HSTS header
-ihls.world: did not receive HSTS header
ihls.xyz: could not connect to host
ihongzu.com: could not connect to host
ihrlotto.de: could not connect to host
@@ -10688,24 +11044,24 @@ ihzys.com: could not connect to host
iide.co: did not receive HSTS header
iideaz.org: could not connect to host
iilin.com: did not receive HSTS header
-iimarckus.org: could not connect to host
iirii.com: could not connect to host
iispeed.com: did not receive HSTS header
ijn-dd.nl: could not connect to host
ijoda.com: did not receive HSTS header
ijr.com: did not receive HSTS header
ik-life.com: did not receive HSTS header
-ike.io: could not connect to host
+ike.io: did not receive HSTS header
ikebuku.ro: could not connect to host
ikenmeyer.com: could not connect to host
ikenmeyer.eu: could not connect to host
+ikmx.net: could not connect to host
ikocik.sk: could not connect to host
ikon.name: could not connect to host
ikools.com: did not receive HSTS header
iktisatbank.com: did not receive HSTS header
ikudo.top: could not connect to host
ikumi.us: could not connect to host
-ikuuuu.com: did not receive HSTS header
+ikuuuu.com: could not connect to host
ikwilguidobellen.nl: could not connect to host
ikzoekeengoedkopeauto.nl: could not connect to host
ikzoekjeugdhulp.nl: did not receive HSTS header
@@ -10717,26 +11073,30 @@ ilii.me: could not connect to host
ilikerainbows.co: did not receive HSTS header
ilikerainbows.co.uk: could not connect to host
ilikfreshweedstores.com: did not receive HSTS header
+illuminatisofficial.org: could not connect to host
ilmconpm.de: could not connect to host
iloilofit.org: did not receive HSTS header
iloli.name: could not connect to host
ilona.graphics: did not receive HSTS header
+iltec-prom.ru: could not connect to host
iltisim.ch: did not receive HSTS header
iluvscotland.co.uk: did not receive HSTS header
im-design.com.ua: did not receive HSTS header
+ima-tourcoing.fr: did not receive HSTS header
imadalin.ro: could not connect to host
-image.tf: could not connect to host
imagenesdedibujosalapizfacilesdehacer.com: could not connect to host
imaginarymakings.me: could not connect to host
imakepoems.net: could not connect to host
-imanhearts.com: could not connect to host
+imanhearts.com: max-age too low: 0
imanudin.net: did not receive HSTS header
imaple.org: could not connect to host
imask.ml: could not connect to host
imbrian.org: could not connect to host
+imcsx.co: did not receive HSTS header
imedes.de: did not receive HSTS header
imedi.it: could not connect to host
-imefuniversitario.org: could not connect to host
+imefuniversitario.org: did not receive HSTS header
+imeid.de: did not receive HSTS header
imeifacil.com: did not receive HSTS header
imfromthefuture.com: did not receive HSTS header
imgencrypt.com: could not connect to host
@@ -10758,6 +11118,7 @@ immigrationdirect.com.au: did not receive HSTS header
immo-vk.de: could not connect to host
immobiliarecapitani.com: did not receive HSTS header
immobilien-wallat.de: could not connect to host
+immobilier-nice.fr: could not connect to host
immoprotect.ca: could not connect to host
immortals-co.com: did not receive HSTS header
immoverkauf24.at: did not receive HSTS header
@@ -10782,13 +11143,14 @@ imoner.com: could not connect to host
imoner.ga: could not connect to host
imoni-blog.net: could not connect to host
imoto.me: could not connect to host
+imovel5.com.br: did not receive HSTS header
imperdin.com: could not connect to host
imperdintechnologies.com: could not connect to host
imperialonlinestore.com: did not receive HSTS header
imperialwebsolutions.com: did not receive HSTS header
+imperiodigital.online: did not receive HSTS header
imperiumnova.info: could not connect to host
-impex.com.bd: did not receive HSTS header
-implicitdenial.com: could not connect to host
+implicitdenial.com: did not receive HSTS header
imprenta-es.com: did not receive HSTS header
impressivebison.eu: did not receive HSTS header
improvingwp.com: could not connect to host
@@ -10803,7 +11165,7 @@ inb4.us: could not connect to host
inbox-group.com: did not receive HSTS header
inbox.google.com: did not receive HSTS header (error ignored - included regardless)
inbox.li: did not receive HSTS header
-inboxen.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+inboxen.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
incendiary-arts.com: could not connect to host
inceptionradionetwork.com: could not connect to host
inchomatic.com: did not receive HSTS header
@@ -10826,7 +11188,7 @@ indiroyunu.com: did not receive HSTS header
indochina.io: could not connect to host
indogerman.de: could not connect to host
indogermantrade.de: could not connect to host
-indoorplantsexpert.com: did not receive HSTS header
+indoorplantsexpert.com: could not connect to host
indoorskiassen.nl: did not receive HSTS header
indostar303.com: did not receive HSTS header
indredouglas.me: could not connect to host
@@ -10856,7 +11218,7 @@ infinitusgaming.eu: could not connect to host
infinity-freedom.com: could not connect to host
infinity-freedom.de: could not connect to host
infinity-lifestyle.de: could not connect to host
-infinity.to: could not connect to host
+infinity.to: did not receive HSTS header
infinityengine.org: could not connect to host
inflatadays.co.uk: could not connect to host
inflate-a-bubbles.co.uk: did not receive HSTS header
@@ -10868,8 +11230,8 @@ info-d-74.com: did not receive HSTS header
info-sys.tk: could not connect to host
infoamin.com: could not connect to host
infobalkans.com: did not receive HSTS header
+infocon.org: could not connect to host
infopagina.es: did not receive HSTS header
-infopier.sg: could not connect to host
infopulsa.com: could not connect to host
inforaga.com: did not receive HSTS header
inforichjapan.com: did not receive HSTS header
@@ -10878,28 +11240,31 @@ informaciondeciclismo.com: could not connect to host
informaticapremium.com: did not receive HSTS header
informatik.zone: could not connect to host
infos-generation.com: did not receive HSTS header
+infosec.pizza: could not connect to host
infosec.rip: could not connect to host
infosimmo.com: did not receive HSTS header
infosoph.org: did not receive HSTS header
-infoteka.pw: max-age too low: 0
infotics.es: did not receive HSTS header
-infovae-idf.com: could not connect to host
+infovae-idf.com: did not receive HSTS header
infoweb.ee: did not receive HSTS header
infoworm.org: could not connect to host
infr.red: could not connect to host
infra.press: could not connect to host
+infradeep.com: could not connect to host
infradio.am: could not connect to host
infranix.eu: max-age too low: 7360000
+infruction.com: could not connect to host
infura.co.th: could not connect to host
infuse-mn.gov: did not receive HSTS header
-ing89.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-ing89.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ing89.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ing89.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
ingalabs.hu: could not connect to host
+ingalls.run: could not connect to host
ingatlanneked.hu: could not connect to host
ingenium.si: did not receive HSTS header
ingerhy.com: could not connect to host
ingesol.fr: did not receive HSTS header
-ingredientdaddy.ro: did not receive HSTS header
+ingredientdaddy.ro: could not connect to host
ingresscode.cn: could not connect to host
inhelix.com: could not connect to host
inhive.group: did not receive HSTS header
@@ -10915,13 +11280,13 @@ injust.ml: could not connect to host
injust.tk: could not connect to host
inked-guy.de: could not connect to host
inkedguy.de: could not connect to host
-inkeliz.com: could not connect to host
inkihost.com: did not receive HSTS header
inkstory.gr: did not receive HSTS header
inksupply.com: did not receive HSTS header
inku.ovh: did not receive HSTS header
inkvisual.tk: could not connect to host
inleaked.com: could not connect to host
+inmag.pl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
inme.ga: did not receive HSTS header
inmoodforsex.com: could not connect to host
innerform.com: could not connect to host
@@ -10929,7 +11294,7 @@ innit.be: did not receive HSTS header
innobatics.com: did not receive HSTS header
innophate-security.nl: could not connect to host
innovamag.ca: did not receive HSTS header
-innovateohio.gov: could not connect to host
+innovateohio.gov: max-age too low: 86400
innovativebuildingsolutions.co.za: could not connect to host
innovativeideaz.org: could not connect to host
innoventure.de: could not connect to host
@@ -10944,21 +11309,22 @@ inplacers.ru: did not receive HSTS header
inquisitive.io: could not connect to host
insane-bullets.com: could not connect to host
insane.zone: could not connect to host
+insblauehinein.nl: could not connect to host
inschrijfformulier.com: could not connect to host
inscript.pl: could not connect to host
-inserzioni-ticino.ch: could not connect to host
+inserzioni-ticino.ch: did not receive HSTS header
insideofgaming.de: could not connect to host
insightera.co.th: did not receive HSTS header
insite-feedback.com: could not connect to host
insofttransfer.com: could not connect to host
insolent.ch: could not connect to host
insouciant.org: could not connect to host
-insping.com: could not connect to host
+insping.com: did not receive HSTS header
inspirationalquotesuk.co.uk: did not receive HSTS header
inspirationconcepts.nl: did not receive HSTS header
inspire-av.com: did not receive HSTS header
inspiroinc.com: could not connect to host
-inst.mobi: did not receive HSTS header
+inst.mobi: could not connect to host
instacart.com: did not receive HSTS header
instalador-electrico.com: did not receive HSTS header
instant-hack.com: did not receive HSTS header
@@ -10975,7 +11341,7 @@ instasex.ch: could not connect to host
instawi.com: could not connect to host
instinctive.io: did not receive HSTS header
institutoflordelavida.com: could not connect to host
-institutulcultural.ro: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+institutulcultural.ro: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
instruktor.io: could not connect to host
insurance: could not connect to host
insurethebox.tk: could not connect to host
@@ -10984,6 +11350,7 @@ int-ext-design.fr: could not connect to host
int-ma.in: did not receive HSTS header
intae.it: did not receive HSTS header
integraelchen.de: could not connect to host
+integrateur-web-paris.com: could not connect to host
integrationinc.com: did not receive HSTS header
integraxor.com.tw: did not receive HSTS header
integrityingovernmentidaho.com: could not connect to host
@@ -10993,7 +11360,6 @@ intelbet.es: did not receive HSTS header
intelbet.ro: did not receive HSTS header
intelhost.net: max-age too low: 0
intelldynamics.com: could not connect to host
-intelliance.eu: did not receive HSTS header
intensifyrsvp.com.au: did not receive HSTS header
interabbit.co: could not connect to host
interabbit.com: did not receive HSTS header
@@ -11008,6 +11374,7 @@ intergenx.org.uk: could not connect to host
interhosts.co.za: could not connect to host
interim-cto.de: could not connect to host
interiorcheapo.com: could not connect to host
+interiorprofesional.com.ar: did not receive HSTS header
interiortradingco.com.au: could not connect to host
interleucina.org: did not receive HSTS header
interlocal.co.uk: did not receive HSTS header
@@ -11015,12 +11382,14 @@ interlun.com: could not connect to host
intermezzo-emmerich.nl: could not connect to host
internacao.com: did not receive HSTS header
internaldh.com: could not connect to host
+international-arbitration-attorney.com: did not receive HSTS header
internaut.co.za: did not receive HSTS header
+internet-aukcion.info: could not connect to host
internetbugbounty.org: did not receive HSTS header
internetcasinos.de: could not connect to host
internetcensus.org: could not connect to host
internetdentalalliance.com: did not receive HSTS header
-internetradiocharts.de: did not receive HSTS header
+internetradiocharts.de: could not connect to host
internshipandwork.com: did not receive HSTS header
internshipandwork.ru: did not receive HSTS header
intersectraven.net: did not receive HSTS header
@@ -11042,6 +11411,7 @@ intranetsec.fr: could not connect to host
intreaba.xyz: could not connect to host
introverted.ninja: did not receive HSTS header
introvertedtravel.space: max-age too low: 0
+intrp.net: could not connect to host
intune.life: could not connect to host
invenio.software: could not connect to host
inverselink.com: could not connect to host
@@ -11050,7 +11420,6 @@ investcountry.com: did not receive HSTS header
investigatore.it: could not connect to host
investingdiary.cn: could not connect to host
investingtrader.net: could not connect to host
-investorloanshub.com: could not connect to host
invictusmc.uk: could not connect to host
invinsec.cloud: did not receive HSTS header
invis.net: could not connect to host
@@ -11062,20 +11431,20 @@ invoicefinance.com: did not receive HSTS header
invoicefinance.nl: did not receive HSTS header
invuelto.com: did not receive HSTS header
inxtravel.com.br: could not connect to host
-iodev.nl: did not receive HSTS header
+inzestfreunde.de: could not connect to host
iodice.org: did not receive HSTS header
-iodine.com: did not receive HSTS header
iodu.re: could not connect to host
ioerror.us: did not receive HSTS header
ioiart.eu: could not connect to host
iolife.dk: could not connect to host
ionas-law.ro: did not receive HSTS header
ionc.ca: could not connect to host
-ionicisere.com: could not connect to host
+ionicisere.com: did not receive HSTS header
ionote.me: could not connect to host
ionovia.de: did not receive HSTS header
iora.fr: could not connect to host
iosjailbreakiphone.com: could not connect to host
+iosmods.com: did not receive HSTS header
iostips.ru: could not connect to host
iotfen.com: could not connect to host
iotsms.io: could not connect to host
@@ -11093,6 +11462,7 @@ iphonechina.net: did not receive HSTS header
iphoneportfolioapp.com: did not receive HSTS header
ipid.me: could not connect to host
iplabs.de: did not receive HSTS header
+iplantom.com: could not connect to host
iplife.cn: could not connect to host
ipmimagazine.com: did not receive HSTS header
ipmotion.ca: could not connect to host
@@ -11107,6 +11477,7 @@ iprice.vn: did not receive HSTS header
ipricethailand.com: did not receive HSTS header
iprody.com: could not connect to host
ipsilon-project.org: did not receive HSTS header
+ipslsig.org: could not connect to host
ipssl.li: could not connect to host
iptel.ro: could not connect to host
iptvmakedonija.mk: did not receive HSTS header
@@ -11124,14 +11495,13 @@ iran-poll.org: could not connect to host
irandp.net: did not receive HSTS header
iranianlawschool.com: could not connect to host
iraqidinar.org: did not receive HSTS header
-irazimina.ru: did not receive HSTS header
+irazimina.ru: could not connect to host
irccloud.com: did not receive HSTS header
ircmett.de: did not receive HSTS header
iready.ro: could not connect to host
irelandesign.com: could not connect to host
irinkeby.nu: could not connect to host
irische-segenswuensche.info: could not connect to host
-irisdesideratum.com: could not connect to host
irisdina.de: could not connect to host
irishmusic.nu: could not connect to host
irland.guide: could not connect to host
@@ -11147,8 +11517,9 @@ irukandjilabs.com: could not connect to host
irun-telecom.co.uk: could not connect to host
irvinepa.org: max-age too low: 10540800
is-a-furry.org: did not receive HSTS header
-is-sw.net: could not connect to host
+is-sw.net: did not receive HSTS header
isaac.world: did not receive HSTS header
+isaacpartnership.com: did not receive HSTS header
isarklinikum.de: did not receive HSTS header
isastylish.com: could not connect to host
isc2chapter-cny.org: could not connect to host
@@ -11164,11 +11535,12 @@ iseulde.com: could not connect to host
isfff.com: could not connect to host
isfriday.com: could not connect to host
ishadowsocks.ltd: could not connect to host
+ishangirdhar.com: could not connect to host
ishet.al: max-age too low: 0
ishillaryclintoninprisonyet.com: could not connect to host
ishome.org: could not connect to host
isidom.fr: did not receive HSTS header
-isinolsun.com: did not receive HSTS header
+isinolsun.com: could not connect to host
isipulsa.web.id: did not receive HSTS header
isisfighters.info: could not connect to host
isitamor.pm: could not connect to host
@@ -11180,21 +11552,27 @@ islandlakeil.gov: could not connect to host
islandpumpandtank.com: did not receive HSTS header
islandzero.net: could not connect to host
islazia.fr: did not receive HSTS header
+islief.com: could not connect to host
+islykaithecutest.cf: could not connect to host
+islykaithecutest.ml: could not connect to host
ismetroonfiretoday.com: could not connect to host
isntall.us: did not receive HSTS header
isoface33.fr: did not receive HSTS header
isogen5.com: could not connect to host
-isogram.nl: did not receive HSTS header
+isogram.nl: could not connect to host
isondo.com: could not connect to host
isoroc-nidzica.pl: could not connect to host
-ispringcloud.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ispo.com.tw: did not receive HSTS header
+ispringcloud.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
ispsoft.pro: could not connect to host
ispweb.es: did not receive HSTS header
+isqrl.de: could not connect to host
israkurort.com: could not connect to host
issala.org: did not receive HSTS header
isscouncil.com: could not connect to host
isslshop.com: could not connect to host
issuesofconcern.in: did not receive HSTS header
+ist-intim.de: could not connect to host
istanbultravelguide.info: could not connect to host
istaspirtslietas.lv: did not receive HSTS header
istgame.com: did not receive HSTS header
@@ -11217,28 +11595,29 @@ itblog.pp.ua: could not connect to host
itbrief.co.nz: did not receive HSTS header
itbrief.com.au: did not receive HSTS header
itchimes.com: did not receive HSTS header
+itchy.nl: could not connect to host
itcko.sk: max-age too low: 0
itds-consulting.com: could not connect to host
itds-consulting.cz: could not connect to host
itds-consulting.eu: could not connect to host
itechgeek.com: did not receive HSTS header
+iteke.ml: could not connect to host
items.lv: did not receive HSTS header
itemton.com: could not connect to host
iterasoft.de: did not receive HSTS header
itfaq.nl: did not receive HSTS header
itfensi.net: could not connect to host
-itfly.xyz: did not receive HSTS header
itforcc.com: did not receive HSTS header
itforge.nl: did not receive HSTS header
itgirls.rs: could not connect to host
ithakama.com: could not connect to host
itinsight.hu: did not receive HSTS header
-itinthebubble.com: could not connect to host
itiomassagem.com.br: did not receive HSTS header
itisjustnot.cricket: could not connect to host
itjob.ma: max-age too low: 0
itlitera.com: could not connect to host
-itnews-bg.com: could not connect to host
+itmanie.cz: could not connect to host
+itnews-bg.com: did not receive HSTS header
itogoyomi.com: did not receive HSTS header
itos.asia: did not receive HSTS header
itos.pl: did not receive HSTS header
@@ -11264,8 +11643,10 @@ itspartytimesweetinflations.com: could not connect to host
itsupport-luzern.ch: could not connect to host
ittop-gabon.com: could not connect to host
itu2015.de: could not connect to host
+itxn.cn: did not receive HSTS header
ius.io: did not receive HSTS header
iuscommunity.org: did not receive HSTS header
+iuyos.com: could not connect to host
ivanilla.org: could not connect to host
ivanpolchenko.com: could not connect to host
ivi-co.com: max-age too low: 0
@@ -11283,6 +11664,7 @@ ivitalia.it: max-age too low: 0
ivk.website: could not connect to host
ivklombard.ru: could not connect to host
ivoryonsunset.com: could not connect to host
+ivotemahdi.com: could not connect to host
ivxv.ee: could not connect to host
ivy.show: did not receive HSTS header
ivyshop.com.br: could not connect to host
@@ -11290,18 +11672,20 @@ iwannarefill.com: could not connect to host
iwebolutions.com: did not receive HSTS header
iwex.swiss: could not connect to host
iwilcox.me.uk: could not connect to host
+iworos.com: did not receive HSTS header
iwos.io: did not receive HSTS header
iwpbk.com: could not connect to host
iww.mx: could not connect to host
iwyc.cn: did not receive HSTS header
ix.mk: did not receive HSTS header
-ix8.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ix8.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
ixec2.tk: could not connect to host
ixh.me: did not receive HSTS header
ixio.cz: could not connect to host
+ixnext.de: could not connect to host
+iyn.me: could not connect to host
iyoumu.top: could not connect to host
-izaakbeekman.com: did not receive HSTS header
-izanah.com: did not receive HSTS header
+izaakbeekman.com: max-age too low: 2592000
izdiwho.com: did not receive HSTS header
izhaojie.com: could not connect to host
izolight.ch: could not connect to host
@@ -11315,7 +11699,7 @@ j-robertson.com: did not receive HSTS header
j0ng.xyz: could not connect to host
j15t98j.co.uk: did not receive HSTS header
j2ee.cz: could not connect to host
-j6957.com: could not connect to host
+j6957.com: did not receive HSTS header
j8y.de: could not connect to host
ja-dyck.de: could not connect to host
ja-publications.com: did not receive HSTS header
@@ -11340,21 +11724,25 @@ jadara.info: could not connect to host
jaduniv.cf: could not connect to host
jagido.de: did not receive HSTS header
jahliveradio.com: did not receive HSTS header
+jaideeyoga.com: could not connect to host
jaimechanaga.com: could not connect to host
jaion.ml: could not connect to host
jaion.tech: could not connect to host
jaion.xyz: could not connect to host
jakebeardsley.com: could not connect to host
-jakenbake.com: could not connect to host
+jakenbake.com: did not receive HSTS header
jakeslab.tech: could not connect to host
jakincode.army: could not connect to host
-jakobdenlinger.com: did not receive HSTS header
+jakobdenlinger.com: could not connect to host
jaksel.id: could not connect to host
jaksi.io: could not connect to host
jakubarbet.eu: could not connect to host
+jamacha.org: could not connect to host
+jamalfi.bio: did not receive HSTS header
jamanji.com.ng: could not connect to host
jamaware.org: could not connect to host
jamberry.com.mx: could not connect to host
+jamberrynails.co.uk: did not receive HSTS header
james-digital.com: did not receive HSTS header
james-parker.com: did not receive HSTS header
james.guru: could not connect to host
@@ -11376,12 +11764,14 @@ jamesevans.is: could not connect to host
jamesf.xyz: could not connect to host
jamesforman.co.nz: did not receive HSTS header
jameshale.me: could not connect to host
+jamesheald.com: could not connect to host
jamesl.ml: could not connect to host
jamesmaurer.com: did not receive HSTS header
jamesrains.com: could not connect to host
jamesrobertson.io: could not connect to host
jamesrussellward.co.uk: max-age too low: 0
jamestmart.in: could not connect to host
+jamie-read-photography.com: could not connect to host
jamiepeters.nl: did not receive HSTS header
jamjestsimon.pl: could not connect to host
jamourtney.com: could not connect to host
@@ -11395,11 +11785,12 @@ jancukers.host: did not receive HSTS header
janduchene.ch: could not connect to host
janebondsurety.com: did not receive HSTS header
jangho.me: could not connect to host
-jangocloud.tk: could not connect to host
+jangocloud.tk: did not receive HSTS header
janheidler.dynv6.net: could not connect to host
janking.de: did not receive HSTS header
+jankoepsel.com: max-age too low: 172800
janmachynka.cz: could not connect to host
-janmg.com: did not receive HSTS header
+janmg.com: could not connect to host
janoberst.com: did not receive HSTS header
janosh.com: did not receive HSTS header
jansen-schilders.nl: did not receive HSTS header
@@ -11442,7 +11833,7 @@ jasonadam.de: did not receive HSTS header
jasoncosper.com: did not receive HSTS header
jasonian-photo.com: could not connect to host
jasonradin.com: did not receive HSTS header
-jasonrobinson.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+jasonrobinson.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
jasonroe.me: did not receive HSTS header
jasonsansone.com: could not connect to host
jasonwindholz.com: could not connect to host
@@ -11454,6 +11845,7 @@ javachip.win: could not connect to host
javan.ga: could not connect to host
javascriptlab.fr: could not connect to host
javelinsms.com: could not connect to host
+javi.pro: did not receive HSTS header
javiermixdjs.com: did not receive HSTS header
javilacat.info: could not connect to host
jawn.ca: could not connect to host
@@ -11501,7 +11893,6 @@ jdsf.tk: could not connect to host
jean-remy.ch: could not connect to host
jeancafe.ddns.net: could not connect to host
jebengotai.com: did not receive HSTS header
-jedayoshi.com: could not connect to host
jedayoshi.me: did not receive HSTS header
jedayoshi.tk: could not connect to host
jeff.is: could not connect to host
@@ -11511,9 +11902,10 @@ jeffersonkyattorney.gov: did not receive HSTS header
jeffersonregan.org: could not connect to host
jeffhuxley.com: could not connect to host
jeffreymagee.com: did not receive HSTS header
-jehovahsays.net: could not connect to host
jeil-makes.co.kr: could not connect to host
+jekkt.com: max-age too low: 604800
jelewa.de: did not receive HSTS header
+jelleschneiders.com: did not receive HSTS header
jellow.nl: did not receive HSTS header
jelmer.co.uk: could not connect to host
jemoticons.com: did not receive HSTS header
@@ -11531,6 +11923,7 @@ jenssen.org: could not connect to host
jeparamedia.com: did not receive HSTS header
jeremye77.com: did not receive HSTS header
jeremymade.com: could not connect to host
+jeremyness.com: could not connect to host
jeremywagner.me: did not receive HSTS header
jeroenensanne.wedding: could not connect to host
jeroensangers.com: could not connect to host
@@ -11544,7 +11937,6 @@ jesuslucas.com: did not receive HSTS header
jet-code.com: did not receive HSTS header
jetapi.org: could not connect to host
jetbrains.pw: did not receive HSTS header
-jetfirenetworks.com: could not connect to host
jetlagphotography.com: could not connect to host
jeton.com: did not receive HSTS header
jetsetcharge.com: could not connect to host
@@ -11552,7 +11944,7 @@ jetsetpay.com: could not connect to host
jettlarue.com: could not connect to host
jettshome.org: could not connect to host
jetzt-elektromobil.de: could not connect to host
-jevisite.ca: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+jevisite.ca: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
jewellerydesignstore.com: could not connect to host
jewellerymarvels.com: did not receive HSTS header
jexler.net: could not connect to host
@@ -11569,7 +11961,6 @@ jhcommunitysports.co.uk: could not connect to host
jhejderup.me: could not connect to host
jhermsmeier.de: could not connect to host
jhf.io: did not receive HSTS header
-jhuang.me: could not connect to host
jhw-profiles.de: did not receive HSTS header
jia1hao.com: did not receive HSTS header
jiacl.com: could not connect to host
@@ -11579,7 +11970,6 @@ jiangzm.com: could not connect to host
jianjiantv.com: could not connect to host
jianyuan.pro: could not connect to host
jiaqiang.vip: could not connect to host
-jiatingtrading.com: could not connect to host
jiazhao.ga: could not connect to host
jichi.me: could not connect to host
jieac.cn: could not connect to host
@@ -11597,11 +11987,12 @@ jimmehcai.com: could not connect to host
jimmycn.com: could not connect to host
jimmynelson.com: did not receive HSTS header
jinancy.fr: could not connect to host
-jing-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-jing-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+jing-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+jing-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
jingyuesi.com: could not connect to host
jinliming.ml: could not connect to host
jinmaguoji.com: could not connect to host
+jintaiyang123.org: could not connect to host
jiosongs.biz: could not connect to host
jiosongs.com: could not connect to host
jira.com: did not receive HSTS header
@@ -11613,9 +12004,10 @@ jitsi.org: did not receive HSTS header
jiveiaktivno.bg: did not receive HSTS header
jiyusu.com: did not receive HSTS header
jiyuu-ni.com: could not connect to host
-jj6957.com: could not connect to host
+jj6957.com: did not receive HSTS header
jjf.org.au: did not receive HSTS header
-jjjconnection.com: did not receive HSTS header
+jjjconnection.com: could not connect to host
+jjjj003.com: did not receive HSTS header
jjlvk.nl: did not receive HSTS header
jjspartytime.co.uk: could not connect to host
jjsummerboatparty.co.uk: could not connect to host
@@ -11632,6 +12024,7 @@ jl-dns.eu: could not connect to host
jl-dns.nl: could not connect to host
jl-exchange.nl: could not connect to host
jl-mail.nl: could not connect to host
+jldp.org: did not receive HSTS header
jlhmedia.com: did not receive HSTS header
jlot.org: did not receive HSTS header
jlpn.eu: could not connect to host
@@ -11639,8 +12032,8 @@ jlpn.nl: could not connect to host
jm06.com: did not receive HSTS header
jm22.com: could not connect to host
jmb.lc: could not connect to host
+jmcashngold.com.au: did not receive HSTS header
jmdekker.it: could not connect to host
-jmk.hu: did not receive HSTS header
jmoreau.ddns.net: could not connect to host
jmotion.co.uk: did not receive HSTS header
jmpmotorsport.co.uk: did not receive HSTS header
@@ -11672,7 +12065,6 @@ joearodriguez.com: could not connect to host
joecod.es: could not connect to host
joedinardo.com: did not receive HSTS header
joefixit.co.uk: could not connect to host
-joehenry.co.uk: could not connect to host
joejohnson.name: did not receive HSTS header
joelgonewild.com: did not receive HSTS header
joemotherfuckingjohnson.com: did not receive HSTS header
@@ -11690,24 +12082,28 @@ johanneskonrad.de: could not connect to host
johnbrownphotography.ch: did not receive HSTS header
johncardell.com: did not receive HSTS header
johners.me: could not connect to host
+johngadenne.com.au: did not receive HSTS header
johngaltgroup.com: did not receive HSTS header
johngo.tk: did not receive HSTS header
johnmcc.net: could not connect to host
johnmorganpartnership.co.uk: did not receive HSTS header
johnno.be: could not connect to host
+johnnybegood.tk: could not connect to host
johnrom.com: did not receive HSTS header
-johnsiu.com: could not connect to host
johnsonho.net: could not connect to host
johntomasowa.com: could not connect to host
johnverkerk.com: could not connect to host
+johnyytb.be: did not receive HSTS header
joinamericacorps.gov: could not connect to host
jointoweb.com: could not connect to host
+jojosplaycentreandcafeteria.co.uk: could not connect to host
joker.menu: could not connect to host
joliet.gov: could not connect to host
jomofojo.co: did not receive HSTS header
jomofojo.com: did not receive HSTS header
jomp16.tk: did not receive HSTS header
-jonarcher.info: could not connect to host
+jonandnoraswedding.com: could not connect to host
+jonarcher.info: did not receive HSTS header
jonas-keidel.de: did not receive HSTS header
jonasgroth.se: did not receive HSTS header
jonathan-apps.com: could not connect to host
@@ -11719,7 +12115,7 @@ jonathanmassacand.ch: could not connect to host
jonathansanchez.pro: could not connect to host
jonathanschle.de: could not connect to host
jonathanselea.se: could not connect to host
-jonesopolis.xyz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+jonesopolis.xyz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
jonferwerda.net: could not connect to host
jonfor.net: could not connect to host
jongha.me: could not connect to host
@@ -11729,7 +12125,6 @@ jonsno.ws: could not connect to host
joomlant.org: could not connect to host
joostbovee.nl: did not receive HSTS header
jooto.com: did not receive HSTS header
-jopl.org: did not receive HSTS header
jordan-jungk.de: could not connect to host
jordankirby.co.uk: could not connect to host
jordanp.engineer: could not connect to host
@@ -11738,7 +12133,6 @@ jordanstrustcompany.ru: could not connect to host
jordiescudero.com: did not receive HSTS header
jordikroon.nl: could not connect to host
joretapo.fr: could not connect to host
-jorexenterprise.com: could not connect to host
jorgemesa.me: could not connect to host
jorgerosales.org: did not receive HSTS header
jornadasciberdefensa2016.es: could not connect to host
@@ -11755,7 +12149,6 @@ joshhoffer.com: could not connect to host
joshi.su: could not connect to host
joshplant.co.uk: could not connect to host
joshstroup.me: could not connect to host
-joshuajohnson.ca: did not receive HSTS header
joto.de: did not receive HSTS header
jotpics.com: could not connect to host
jottit.com: could not connect to host
@@ -11767,10 +12160,12 @@ joyjohnston.ca: did not receive HSTS header
jpaglier.com: could not connect to host
jpcrochetapparel.com: could not connect to host
jpeaches.xyz: could not connect to host
+jpoirierlavoie.ca: could not connect to host
jptun.com: could not connect to host
jr5devdoug.xyz: could not connect to host
jr5devdouglas.xyz: could not connect to host
jr5proxdoug.xyz: could not connect to host
+jrchaseify.xyz: could not connect to host
jreinert.com: could not connect to host
jrgold.me: could not connect to host
jrlopezoficial.com: could not connect to host
@@ -11780,18 +12175,14 @@ js3311.com: could not connect to host
js88.sg: could not connect to host
js93029.com: could not connect to host
jsanders.us: did not receive HSTS header
-jsbentertainment.nl: could not connect to host
jsbevents.nl: could not connect to host
jsblights.nl: could not connect to host
-jsc7776.com: did not receive HSTS header
jsdelivr.net: could not connect to host
jsg-technologies.de: did not receive HSTS header
-jsjyhzy.cc: did not receive HSTS header
-jskier.com: could not connect to host
+jsjyhzy.cc: could not connect to host
jslidong.top: could not connect to host
json-viewer.com: did not receive HSTS header
-jsproxy.tk: could not connect to host
-jss.moe: did not receive HSTS header
+jsproxy.tk: did not receive HSTS header
jstelecom.com.br: did not receive HSTS header
jsuse.xyz: could not connect to host
jsvr.tk: could not connect to host
@@ -11802,11 +12193,10 @@ jualssh.com: could not connect to host
juandesouza.com: did not receive HSTS header
juanhub.com: did not receive HSTS header
jubee.nl: could not connect to host
-juchheim-methode.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+juchheim-methode.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
judc-ge.ch: could not connect to host
judge2020.me: did not receive HSTS header
juelda.com: did not receive HSTS header
-juergen-elbert.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
juiced.gs: did not receive HSTS header
juka.pp.ua: could not connect to host
juku-info.top: did not receive HSTS header
@@ -11819,6 +12209,7 @@ julianwallmeroth.de: could not connect to host
juliaoantiguidades.com.br: could not connect to host
juliawebber.co.za: could not connect to host
julido.de: did not receive HSTS header
+julie-and-stevens-wedding.com: could not connect to host
julio.jamil.nom.br: could not connect to host
juliohernandezgt.com: could not connect to host
jumba.com.au: could not connect to host
@@ -11856,13 +12247,14 @@ justbelieverecovery.com: did not receive HSTS header
justiceforfathers.com: did not receive HSTS header
justiceo.org: did not receive HSTS header
justinellingwood.com: could not connect to host
-justinharrison.ca: could not connect to host
justinlemay.com: could not connect to host
justinrudio.com: did not receive HSTS header
justlikethat.hosting: did not receive HSTS header
justmade.com.br: did not receive HSTS header
justmy.website: could not connect to host
justnaw.co.uk: could not connect to host
+justonce.net: could not connect to host
+justsmart.io: could not connect to host
justtalk.site: could not connect to host
justudin.com: did not receive HSTS header
justwood.cz: did not receive HSTS header
@@ -11882,10 +12274,12 @@ jwilsson.me: could not connect to host
jwolt-lx.com: could not connect to host
jwsoft.nl: did not receive HSTS header
jwybk.ml: could not connect to host
+jxir.de: could not connect to host
+jxkangyifu.com: did not receive HSTS header
jydwz.com: max-age too low: 0
jyggen.com: did not receive HSTS header
-jym.fit: did not receive HSTS header
-jysperm.me: could not connect to host
+jysperm.me: did not receive HSTS header
+jz585.com: could not connect to host
jznet.org: could not connect to host
k-dev.de: could not connect to host
k-pan.com: could not connect to host
@@ -11896,12 +12290,12 @@ k1yoshi.com: could not connect to host
k33k00.com: did not receive HSTS header
k3508.com: could not connect to host
k38.cc: could not connect to host
-k6957.com: could not connect to host
+k6957.com: did not receive HSTS header
k82.org: could not connect to host
k8r.eu: did not receive HSTS header
ka-clan.com: could not connect to host
kaanduman.com: could not connect to host
-kaangenc.me: could not connect to host
+kaangenc.me: did not receive HSTS header
kaany.io: could not connect to host
kaasbijwijn.nl: did not receive HSTS header
kaashosting.nl: did not receive HSTS header
@@ -11909,6 +12303,7 @@ kabinapp.com: could not connect to host
kaboom.pw: did not receive HSTS header
kabu-abc.com: could not connect to host
kabuabc.com: could not connect to host
+kabus.org: could not connect to host
kackscharf.de: did not receive HSTS header
kadioglumakina.com.tr: did not receive HSTS header
kadmec.com: did not receive HSTS header
@@ -11925,9 +12320,9 @@ kainz.be: could not connect to host
kairion.de: did not receive HSTS header
kairostecnologia.com.br: did not receive HSTS header
kaisers.de: could not connect to host
+kaishi006.com: could not connect to host
kaitol.click: could not connect to host
kaiyuewu.com: could not connect to host
-kaizenjuku.org: did not receive HSTS header
kajlovo.cz: could not connect to host
kakaomilchkuh.de: did not receive HSTS header
kaketalk.com: did not receive HSTS header
@@ -11939,7 +12334,9 @@ kalami.nl: could not connect to host
kaleidoskop-freiburg.de: did not receive HSTS header
kalender.goip.de: could not connect to host
kalilinux.tech: could not connect to host
+kall.is: could not connect to host
kaloix.de: could not connect to host
+kaloni.info: could not connect to host
kalsbouncies.com: could not connect to host
kamalame.co: could not connect to host
kamatajisyaku.tokyo.jp: could not connect to host
@@ -11949,14 +12346,13 @@ kamikano.com: could not connect to host
kamikatse.net: could not connect to host
kamitech.ch: could not connect to host
kampunginggris-ue.com: could not connect to host
-kana.me: could not connect to host
kanada.guide: could not connect to host
kanagawachuo-hospital.jp: could not connect to host
kanal-schaefer.de: could not connect to host
kanar.nl: could not connect to host
kancolle.me: could not connect to host
+kandalife.com: could not connect to host
kandec.co.jp: did not receive HSTS header
-kandofu.com: did not receive HSTS header
kaneisdi.com: did not receive HSTS header
kaneo-gmbh.de: did not receive HSTS header
kanganer.com: could not connect to host
@@ -11964,11 +12360,12 @@ kangooroule.fr: did not receive HSTS header
kangzaber.com: could not connect to host
kaniklani.co.za: did not receive HSTS header
kanmitao.com: could not connect to host
-kanobu.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kanobu.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kanotijd.nl: could not connect to host
kanr.in: could not connect to host
kanscooking.org: could not connect to host
kantorad.io: could not connect to host
+kantorkita.net: did not receive HSTS header
kantv1.com: could not connect to host
kanzakiranko.jp: could not connect to host
kanzlei-myca.de: did not receive HSTS header
@@ -11982,7 +12379,6 @@ kaplatz.is: could not connect to host
kaplatzis.com: could not connect to host
kapo.info: did not receive HSTS header
kappit.dk: could not connect to host
-kaptamedia.com: did not receive HSTS header
kapucini.si: max-age too low: 0
kaputt.com: did not receive HSTS header
kapverde.guide: could not connect to host
@@ -11998,6 +12394,7 @@ karenledger.ca: did not receive HSTS header
karhm.com: could not connect to host
karjala-ski.ru: could not connect to host
karlis-kavacis.id.lv: did not receive HSTS header
+karlloch.de: did not receive HSTS header
karloskontana.tk: could not connect to host
karlproctor.co.uk: could not connect to host
karpanhellas.com: could not connect to host
@@ -12005,6 +12402,7 @@ kars.ooo: could not connect to host
karten-verlag.de: did not receive HSTS header
karting34.com: did not receive HSTS header
karuneshjohri.com: could not connect to host
+kashbet.net: could not connect to host
kashdash.ca: could not connect to host
kastemperaturen.ga: could not connect to host
kat.al: could not connect to host
@@ -12017,15 +12415,15 @@ kati0.com: could not connect to host
katiaetdavid.fr: could not connect to host
katja-nikolic-design.de: could not connect to host
katoju.co.jp: did not receive HSTS header
-katproxy.al: did not receive HSTS header
+katproxy.al: could not connect to host
katproxy.online: did not receive HSTS header
katproxy.site: did not receive HSTS header
katproxy.tech: could not connect to host
katproxy.top: could not connect to host
-katrinjanke.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+katrinjanke.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kattenfun.be: could not connect to host
kattenfun.nl: could not connect to host
-katthewaffle.fr: did not receive HSTS header
+katthewaffle.fr: could not connect to host
katzen.me: could not connect to host
katzenbrunnen-test.de: could not connect to host
katzspeech.com: did not receive HSTS header
@@ -12038,6 +12436,7 @@ kausta.me: could not connect to host
kaverti.com: did not receive HSTS header
kavik.no: could not connect to host
kavinvin.me: could not connect to host
+kawaii.io: could not connect to host
kawaiii.link: could not connect to host
kawaiiku.com: could not connect to host
kawaiiku.de: could not connect to host
@@ -12046,12 +12445,13 @@ kaydan.io: could not connect to host
kayipmurekkep.com: could not connect to host
kayleen.net: could not connect to host
kayon.cf: could not connect to host
-kayscs.com: could not connect to host
kazamasion.com: could not connect to host
kazanasolutions.de: could not connect to host
+kazancci.com: could not connect to host
kazenojiyu.fr: could not connect to host
kazumi.ooo: could not connect to host
-kb3.net: did not receive HSTS header
+kb3.net: could not connect to host
+kb7373.com: could not connect to host
kbfl.org: could not connect to host
kcc.sh: did not receive HSTS header
kcluster.io: could not connect to host
@@ -12063,7 +12463,6 @@ kdfans.com: did not receive HSTS header
kdm-online.de: did not receive HSTS header
keaneokelley.com: could not connect to host
kearney.io: could not connect to host
-kedibizworx.com: did not receive HSTS header
kediri.win: could not connect to host
keditor.biz: could not connect to host
keechain.io: could not connect to host
@@ -12076,29 +12475,33 @@ keepaa.com: could not connect to host
keepassa.co: could not connect to host
keepclean.me: could not connect to host
keepcoalintheground.org: could not connect to host
+keeperapp.com: could not connect to host
keepflow.io: could not connect to host
keepmanager.org: could not connect to host
keeprubyweird.com: did not receive HSTS header
+keevitaja.com: did not receive HSTS header
keezin.ga: could not connect to host
-keezyavaleri.com: could not connect to host
kefaloniatoday.com: did not receive HSTS header
keihin-chaplin.jp: did not receive HSTS header
kein-fidget-spinner-werden.de: could not connect to host
+keinanung.nl: could not connect to host
kejar.id: did not receive HSTS header
kejibot.com: could not connect to host
kekehouse.net: could not connect to host
kekgame.com: did not receive HSTS header
+kela.jp: could not connect to host
kelantanmudah.com: could not connect to host
-kellerlan.org: could not connect to host
+kelleymcchesney.us: could not connect to host
kellyandantony.com: could not connect to host
-kellyssportsbarandgrill.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kellyssportsbarandgrill.com: did not receive HSTS header
kelm.me: could not connect to host
-kelmarsafety.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kelmarsafety.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kelp.agency: did not receive HSTS header
ken-electric.com.br: could not connect to host
kenbillionsyuan.tk: could not connect to host
-kenkoelectric.com: did not receive HSTS header
+kenkoelectric.com: max-age too low: 36000
kennethferguson.com: did not receive HSTS header
+kensparkesphotography.com: did not receive HSTS header
kentacademiestrust.org.uk: could not connect to host
kenx5.eu.org: could not connect to host
kepler-seminar.de: did not receive HSTS header
@@ -12110,22 +12513,25 @@ kermadec.blog: could not connect to host
kernelmode.io: did not receive HSTS header
kernl.us: did not receive HSTS header
kersbergen.nl: did not receive HSTS header
+kerzyte.net: could not connect to host
keshausconsulting.com: could not connect to host
keskeces.com: did not receive HSTS header
kessel-runners.com: could not connect to host
kesteren.com: could not connect to host
kesteren.org: could not connect to host
+ketosecology.co.uk: could not connect to host
kevinbowers.me: could not connect to host
kevindekoninck.com: could not connect to host
kevingsky.com: could not connect to host
kevinheslinphoto.com: did not receive HSTS header
kevinroebert.de: did not receive HSTS header
kevlar.pw: did not receive HSTS header
-kewego.co.uk: could not connect to host
-keymaster.lookout.com: did not receive HSTS header
+kewego.co.uk: did not receive HSTS header
+keymach.com: could not connect to host
keypersonins.com: did not receive HSTS header
keys.jp: could not connect to host
keyserver.sexy: could not connect to host
+kf7joz.com: could not connect to host
kfbrussels.be: could not connect to host
kg-rating.com: could not connect to host
kgb.us: did not receive HSTS header
@@ -12133,13 +12539,14 @@ kgregorczyk.pl: could not connect to host
kgxtech.com: max-age too low: 2592000
khlee.net: did not receive HSTS header
khmath.com: did not receive HSTS header
+khojirdesign.ir: did not receive HSTS header
khosla.uk: could not connect to host
ki-on.net: did not receive HSTS header
kiaka.co: did not receive HSTS header
kialo.com: did not receive HSTS header
kiapartsdepartment.com: did not receive HSTS header
kiapps.ovh: could not connect to host
-kiasystems.com: did not receive HSTS header
+kiasystems.com: could not connect to host
kibbesfusion.com: did not receive HSTS header
kichy.net: max-age too low: 0
kickass-proxies.org: could not connect to host
@@ -12152,16 +12559,16 @@ kiddieschristianacademy.co.za: did not receive HSTS header
kidkat.cn: could not connect to host
kids-ok.com: could not connect to host
kiedys.net: could not connect to host
+kiehls.pt: did not receive HSTS header
kiel-kind.de: could not connect to host
kiel-media.de: did not receive HSTS header
kielderweather.org.uk: did not receive HSTS header
kielwi.gov: could not connect to host
-kienlen.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kienlen.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kieranweightman.me: could not connect to host
kiesuwcursus.nl: did not receive HSTS header
kievradio.com: could not connect to host
kiffmarks.com: could not connect to host
-kii91.com: could not connect to host
kikimilyatacado.com.br: could not connect to host
kikuzuki.org: could not connect to host
kiladera.be: did not receive HSTS header
@@ -12184,6 +12591,7 @@ kinderly.co.uk: did not receive HSTS header
kinderopvangengeltjes.nl: did not receive HSTS header
kinderopvangzevenbergen.nl: did not receive HSTS header
kinderwagen-test24.de: could not connect to host
+kinderzahn-bogenhausen.de: could not connect to host
kindleworth.com: did not receive HSTS header
kindlyfire.com: could not connect to host
kindof.ninja: could not connect to host
@@ -12197,9 +12605,9 @@ kingmanhall.org: could not connect to host
kingpincages.com: could not connect to host
kingqueen.org.uk: did not receive HSTS header
kingsley.cc: could not connect to host
+kingstclinic.com: could not connect to host
kingtecservices.com: could not connect to host
kinkdr.com: could not connect to host
-kinmunity.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kinnon.enterprises: could not connect to host
kinomoto.me: could not connect to host
kinow.com: did not receive HSTS header
@@ -12208,12 +12616,12 @@ kintoandar.com: max-age too low: 0
kintrip.com: did not receive HSTS header
kintzingerfilm.de: did not receive HSTS header
kionetworks.com: did not receive HSTS header
-kionetworks.es: could not connect to host
kipin.fr: did not receive HSTS header
kipira.com: could not connect to host
kipriakipita.gr: could not connect to host
kiraboshi.xyz: could not connect to host
kirara.eu: could not connect to host
+kirill.ws: could not connect to host
kirkforsenate.com: could not connect to host
kirkify.com: could not connect to host
kirkpatrickdavis.com: could not connect to host
@@ -12223,10 +12631,10 @@ kisa.io: could not connect to host
kisalt.im: could not connect to host
kiss-register.org: could not connect to host
kissart.net: could not connect to host
-kissesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kissesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kissesb.net: could not connect to host
kisstube.tv: could not connect to host
-kisstyle.ru: did not receive HSTS header
+kisstyle.ru: could not connect to host
kita.id: did not receive HSTS header
kitabgaul.com: did not receive HSTS header
kitakemon.com: could not connect to host
@@ -12240,9 +12648,9 @@ kitegarage.eu: did not receive HSTS header
kiteschoolamsterdam.nl: could not connect to host
kitestar.co.uk: did not receive HSTS header
kitk.at: could not connect to host
-kitsostech.com: could not connect to host
+kitsapsolutions.com: could not connect to host
+kitsostech.com: did not receive HSTS header
kitsta.com: could not connect to host
-kittyhacker101.tk: could not connect to host
kiwi.global: could not connect to host
kiwico.com: max-age too low: 0
kiwihub.org: did not receive HSTS header
@@ -12257,10 +12665,8 @@ kjaermaxi.me: did not receive HSTS header
kjarni.cc: could not connect to host
kjg-bachrain.de: could not connect to host
kjg-ummeln.de: did not receive HSTS header
-kjgmuenster.org: could not connect to host
kjoglum.me: could not connect to host
-kk.sb: could not connect to host
-kk6957.com: could not connect to host
+kk6957.com: did not receive HSTS header
kkaefer.com: did not receive HSTS header
kkomputer.net: could not connect to host
kkren.me: did not receive HSTS header
@@ -12271,7 +12677,6 @@ klantenadvies.nl: did not receive HSTS header
klasfauseweh.de: could not connect to host
klatschreime.de: did not receive HSTS header
klausimas.lt: did not receive HSTS header
-klautshop.com: could not connect to host
klauwd.com: could not connect to host
klaxn.org: could not connect to host
klean-ritekc.com: did not receive HSTS header
@@ -12281,32 +12686,34 @@ kleertjesvoordelig.nl: could not connect to host
kleidertauschpartys.de: could not connect to host
kleinerarchitekturfuehrer.de: did not receive HSTS header
kleinholding.com: could not connect to host
-kleinreich.de: could not connect to host
kleinserienproduktion.com: could not connect to host
klempnershop.eu: did not receive HSTS header
-kletterkater.com: did not receive HSTS header
+kleppe.co: could not connect to host
+kletterkater.com: could not connect to host
klicke-gemeinsames.de: did not receive HSTS header
klicktojob.de: could not connect to host
klif1.nl: did not receive HSTS header
klimchuk.by: did not receive HSTS header
+klimchuk.com: could not connect to host
klingeletest.de: could not connect to host
klingsundet.no: did not receive HSTS header
klinkerstreet.com.ua: did not receive HSTS header
klunkergarten.org: could not connect to host
klustekeningen.nl: could not connect to host
-klzwzhi.com: did not receive HSTS header
+klzwzhi.com: could not connect to host
km-net.pl: did not receive HSTS header
kmdev.me: could not connect to host
+knaake.net: could not connect to host
knccloud.com: did not receive HSTS header
+kndkv.com: could not connect to host
kneipi.de: could not connect to host
kniga.market: could not connect to host
-knigadel.com: did not receive HSTS header
-knightsblog.de: did not receive HSTS header
+knigadel.com: could not connect to host
knightsbridgegroup.org: could not connect to host
knightsweep.com: could not connect to host
kniwweler.com: could not connect to host
knockendarroch.co.uk: did not receive HSTS header
-knowdebt.org: could not connect to host
+knowdebt.org: did not receive HSTS header
knowledgesnap.com: could not connect to host
knowledgesnapsites.com: could not connect to host
knowlevillagecc.co.uk: could not connect to host
@@ -12321,7 +12728,6 @@ koddsson.com: did not receive HSTS header
kodexplorer.ml: could not connect to host
kodiaklabs.org: could not connect to host
kodokushi.fr: could not connect to host
-koehn.com: could not connect to host
koelbli.ch: could not connect to host
koenberkhout.nl: did not receive HSTS header
koenen-bau.de: did not receive HSTS header
@@ -12334,30 +12740,32 @@ kohparadise.com: could not connect to host
koi-sama.net: did not receive HSTS header
koik.io: could not connect to host
koirala.email: could not connect to host
-koirala.net: could not connect to host
+koirala.net: did not receive HSTS header
kokenmetaanbiedingen.nl: could not connect to host
koketteriet.se: could not connect to host
kokoiroworks.com: could not connect to host
kola-entertainments.de: did not receive HSTS header
kolania.com: could not connect to host
+kolas.in: could not connect to host
kolaykaydet.com: could not connect to host
kolbeck.tk: could not connect to host
koldanews.com: did not receive HSTS header
+kolizaskrap.bg: could not connect to host
kollawat.me: could not connect to host
kolonie-am-stadtpark.de: could not connect to host
kolorbon.com: did not receive HSTS header
-komandakovalchuk.com: did not receive HSTS header
kombidorango.com.br: could not connect to host
komikito.com: could not connect to host
kompetenzwerft.de: did not receive HSTS header
konata.us: could not connect to host
-kongbaofang.com: could not connect to host
+kongbaofang.com: did not receive HSTS header
kongsecuritydata.com: did not receive HSTS header
konicaprinterdriver.com: could not connect to host
koninkrijk.net: could not connect to host
konkai.store: could not connect to host
konkurs.ba: could not connect to host
konoe.studio: did not receive HSTS header
+konsertoversikt.no: could not connect to host
kontakthuman.hu: did not receive HSTS header
kontaxis.network: could not connect to host
kontorhaus-schlachte.de: could not connect to host
@@ -12375,7 +12783,6 @@ korobi.io: did not receive HSTS header
korono.de: did not receive HSTS header
korsanparti.org: did not receive HSTS header
kortic.com: did not receive HSTS header
-koscielniak-nieruchomosci.pl: could not connect to host
kosonaudioteca.com: did not receive HSTS header
kostuumstore.nl: could not connect to host
kostya.net: did not receive HSTS header
@@ -12388,7 +12795,7 @@ kotorimusic.ga: could not connect to host
kotovstyle.ru: could not connect to host
kottur.is: could not connect to host
koukni.cz: did not receive HSTS header
-kouponboket.com: could not connect to host
+kouponboket.com: did not receive HSTS header
kourpe.online: could not connect to host
kousaku.jp: could not connect to host
kovaldo.ru: did not receive HSTS header
@@ -12402,7 +12809,6 @@ kpebetka.net: did not receive HSTS header
kpmgccc.co.nz: did not receive HSTS header
kpmgpublications.ie: did not receive HSTS header
kpn-dnssec.com: could not connect to host
-kpopsource.com: did not receive HSTS header
kprog.net: could not connect to host
kpvpn.com: could not connect to host
kraigwalker.com: could not connect to host
@@ -12421,16 +12827,16 @@ kredietpaspoort.nl: could not connect to host
kredite.sale: could not connect to host
kredite24.de: did not receive HSTS header
kreditkarte-fuer-backpacker.de: could not connect to host
-krestanskydarek.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+krestanskydarek.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
krey.is: could not connect to host
kreza.de: could not connect to host
krfuli.com: could not connect to host
kriegskindernothilfe.de: could not connect to host
kriegt.es: did not receive HSTS header
+kringloopwinkelsteenwijk.nl: did not receive HSTS header
krishouse.fr: could not connect to host
krislamoureux.com: could not connect to host
krist.club: did not receive HSTS header
-kristjanrang.eu: did not receive HSTS header
kristofferkoch.com: could not connect to host
krizek.cc: could not connect to host
krizevackapajdasija.hr: could not connect to host
@@ -12438,25 +12844,24 @@ krmela.com: did not receive HSTS header
kroetenfuchs.de: could not connect to host
krokodent.de: did not receive HSTS header
krommo.pe: did not receive HSTS header
-kronaw.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-krony.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kronaw.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+krony.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kronych.cz: could not connect to host
kroodle.nl: did not receive HSTS header
kroy.io: did not receive HSTS header
kruegerrand-wert.de: did not receive HSTS header
-krugermillions.org: did not receive HSTS header
krunut.com: did not receive HSTS header
krusesec.com: could not connect to host
kruu.de: could not connect to host
krypteia.org: could not connect to host
kryptomodkingz.com: could not connect to host
+ks5660.com: could not connect to host
ksfh-mail.de: could not connect to host
-ksham.net: could not connect to host
ksk-agentur.de: did not receive HSTS header
-kstan.me: did not receive HSTS header
+kspg.tv: could not connect to host
+kstan.me: could not connect to host
kswcosmetics.com: could not connect to host
kswriter.com: could not connect to host
-ktbnetbank.com: did not receive HSTS header
kteen.info: could not connect to host
ktube.yt: could not connect to host
kuaitiyu.org: could not connect to host
@@ -12469,43 +12874,48 @@ kubusadvocaten.nl: could not connect to host
kuchenfeelisa.de: did not receive HSTS header
kuchenschock.de: did not receive HSTS header
kuchentraum.eu: did not receive HSTS header
-kucheryavenkovn.ru: could not connect to host
+kucheryavenkovn.ru: did not receive HSTS header
kucom.it: could not connect to host
-kueche-co.de: max-age too low: 624771
-kuechenplan.online: did not receive HSTS header
+kueche-co.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kuechenplan.online: could not connect to host
+kuehnel.org: max-age too low: 604800
kueulangtahunanak.net: could not connect to host
kugelblitz.co: could not connect to host
kuko-crews.org: could not connect to host
kulickovy-pojezd.cz: could not connect to host
+kulopo.com: could not connect to host
kultmobil.se: did not receive HSTS header
kumilasvegas.com: could not connect to host
kummerlaender.eu: did not receive HSTS header
-kundo.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kundo.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kunstfehler.at: did not receive HSTS header
kunstschule-krabax.de: did not receive HSTS header
kuops.com: did not receive HSTS header
kupdokuchyne.cz: could not connect to host
kupelne-ptacek.sk: did not receive HSTS header
+kuponrazzi.com: max-age too low: 0
kuppingercole.com: did not receive HSTS header
kura.io: could not connect to host
kurashino-mall.com: could not connect to host
kurehun.org: could not connect to host
-kuro.link: did not receive HSTS header
+kuro.link: could not connect to host
kuro346.moe: could not connect to host
kurrende.nrw: could not connect to host
kurrietv.nl: did not receive HSTS header
-kursprogramisty.pl: did not receive HSTS header
+kursprogramisty.pl: could not connect to host
kurszielnull.de: could not connect to host
kurtmclester.com: could not connect to host
kurumi.io: max-age too low: 0
kurz.pw: could not connect to host
kurzonline.com.br: could not connect to host
-kutny.cz: could not connect to host
+kutukupret.com: max-age too low: 0
kuwago.io: could not connect to host
kuzbass-pwl.ru: could not connect to host
kuzdrowiu24.pl: could not connect to host
+kvestmaster.ru: did not receive HSTS header
+kvhile.com: could not connect to host
kvn.tf: did not receive HSTS header
-kvt.berlin: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kvt.berlin: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kwidz.fr: did not receive HSTS header
kwikmed.eu: could not connect to host
kwiknews.com: did not receive HSTS header
@@ -12514,20 +12924,19 @@ kwmr.me: did not receive HSTS header
kwok.tv: could not connect to host
kwondratsch.com: could not connect to host
kxind.cn: did not receive HSTS header
-kxnrl.com: could not connect to host
kyberna.xyz: could not connect to host
kybqp.com: could not connect to host
kybqp.net: could not connect to host
kykoonn.net: did not receive HSTS header
kylapps.com: did not receive HSTS header
kyle.place: could not connect to host
-kylerwood.com: could not connect to host
-kylescastles.co.uk: did not receive HSTS header
+kylerwood.com: did not receive HSTS header
+kylescastles.co.uk: could not connect to host
kyliehunt.com: did not receive HSTS header
kylling.io: could not connect to host
kymo.org: did not receive HSTS header
kyobostory-events.com: could not connect to host
-kyoko.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+kyoko.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
kyonagashima.com: did not receive HSTS header
kyoto-sake.net: could not connect to host
kyoto-tomikawa.jp: did not receive HSTS header
@@ -12537,14 +12946,13 @@ kzjnet.com: could not connect to host
l-1.xyz: could not connect to host
l-2.xyz: could not connect to host
l-3.xyz: could not connect to host
-l-lab.org: could not connect to host
l-rickroll-i.pw: could not connect to host
l.me.uk: could not connect to host
l18.io: could not connect to host
l3.ee: could not connect to host
l3j.net: could not connect to host
l456852.com: max-age too low: 0
-l6957.com: could not connect to host
+l6957.com: did not receive HSTS header
l9.fr: could not connect to host
la-cave-a-nodo.fr: did not receive HSTS header
la-flora-negra.de: could not connect to host
@@ -12556,11 +12964,12 @@ labaia.info: did not receive HSTS header
labella-umbrella.com: did not receive HSTS header
labelleza.com.br: could not connect to host
labfox.de: did not receive HSTS header
+labibikids.com.br: did not receive HSTS header
labina.com.tr: did not receive HSTS header
labms.com.au: did not receive HSTS header
laboiteanem.fr: could not connect to host
laboiteapc.fr: did not receive HSTS header
-laboitebio-logique.ca: did not receive HSTS header
+laboitebio-logique.ca: could not connect to host
labordata.io: could not connect to host
laborie.io: could not connect to host
laboutiquemarocaineduconvoyeur.com: could not connect to host
@@ -12568,7 +12977,7 @@ laboutiquemarocaineduconvoyeur.ma: could not connect to host
labrador-retrievers.com.au: did not receive HSTS header
labrasaq8.com: did not receive HSTS header
labs.directory: could not connect to host
-labs.moscow: did not receive HSTS header
+labs.moscow: could not connect to host
lacarpesaintaubinoise.fr: did not receive HSTS header
lacasa.fr: could not connect to host
lacaserita.org: could not connect to host
@@ -12579,12 +12988,16 @@ lacicloud.net: could not connect to host
lacigf.org: did not receive HSTS header
lacledelareussite.com: did not receive HSTS header
lacledeslan.ninja: could not connect to host
+lacliniquefinanciere.com: could not connect to host
+lacocinadelila.com: did not receive HSTS header
lacuevadechauvet.com: did not receive HSTS header
ladybugjam.com: could not connect to host
ladylikeit.com: could not connect to host
ladylucks.co.uk: did not receive HSTS header
+laegernevedlillebaelt.dk: did not receive HSTS header
laemen.com: did not receive HSTS header
laemen.nl: could not connect to host
+laeryn.com: could not connect to host
laeso.es: did not receive HSTS header
laf.in.net: could not connect to host
lafamillemusique.fr: did not receive HSTS header
@@ -12617,25 +13030,27 @@ lakhesis.net: could not connect to host
lalajj.com: could not connect to host
lalingua.ir: did not receive HSTS header
laltroweb.it: did not receive HSTS header
-lalunecreative.com: did not receive HSTS header
lamafioso.com: could not connect to host
lamaisondelatransformationculturelle.com: did not receive HSTS header
lambda-complex.org: could not connect to host
lambdafive.co.uk: could not connect to host
lame1337.xyz: could not connect to host
lamiaposta.email: did not receive HSTS header
+lampl.info: could not connect to host
lampsh.ml: could not connect to host
lamtv.com.mx: could not connect to host
lanauzedesigns.com: did not receive HSTS header
lanboll.com: could not connect to host
-lanbyte.se: did not receive HSTS header
+lanbyte.se: could not connect to host
lancehoteis.com: did not receive HSTS header
lancehoteis.com.br: did not receive HSTS header
+lancejames.com: could not connect to host
lancork.net: could not connect to host
land-links.org: did not receive HSTS header
landell.ml: could not connect to host
landgoedverkopen.nl: could not connect to host
landhuisverkopen.nl: could not connect to host
+landofelves.net: did not receive HSTS header
landscape.canonical.com: max-age too low: 2592000
landscapelightingpacificpalisades.com: could not connect to host
landscapingmedic.com: did not receive HSTS header
@@ -12644,6 +13059,7 @@ langendorf-ernaehrung-training.de: did not receive HSTS header
langendries.eu: did not receive HSTS header
langguth.io: did not receive HSTS header
langhun.me: could not connect to host
+langkahteduh.com: could not connect to host
lanhhuyet510.tk: could not connect to host
laniakean.com: did not receive HSTS header
lansinoh.co.uk: did not receive HSTS header
@@ -12651,29 +13067,33 @@ lanyang.tk: could not connect to host
lanzainc.xyz: could not connect to host
laobox.fr: could not connect to host
laohei.org: did not receive HSTS header
+laospage.com: did not receive HSTS header
lapakus.com: could not connect to host
laparoscopia.com.mx: did not receive HSTS header
laperfumista.es: could not connect to host
lapetition.be: could not connect to host
laplaceduvillage.net: could not connect to host
laquack.com: could not connect to host
+laraigneedusoir.com: did not receive HSTS header
lared.ovh: did not receive HSTS header
laredsemanario.com: could not connect to host
-laresistencia.xyz: could not connect to host
larky.top: could not connect to host
-larotayogaming.com: did not receive HSTS header
+larptreff.de: could not connect to host
larsgujord.no: did not receive HSTS header
larsmerke.de: did not receive HSTS header
larvatoken.org: could not connect to host
lasepiataca.com: did not receive HSTS header
lasercloud.ml: could not connect to host
laserfuchs.de: did not receive HSTS header
-laserpc.net: did not receive HSTS header
lasertechsolutions.com: could not connect to host
lashstuff.com: did not receive HSTS header
+lask.in: could not connect to host
lasnaves.com: did not receive HSTS header
lasst-uns-beten.de: could not connect to host
+lastbutnotyeast.com: did not receive HSTS header
lastchancetraveler.com: did not receive HSTS header
+lastharo.com: could not connect to host
+lastrada-minden.de: could not connect to host
lastweekinaws.com: did not receive HSTS header
lat46.ch: did not receive HSTS header
latable-bowling-vire.fr: did not receive HSTS header
@@ -12699,6 +13119,7 @@ laufcampus.com: did not receive HSTS header
laufers.pl: did not receive HSTS header
laufseminare-laufreisen.com: did not receive HSTS header
lauftrainer-ausbildung.com: did not receive HSTS header
+laughinggrapepublishing.com: did not receive HSTS header
laurel4th.org: did not receive HSTS header
laurelspaandlash.com: did not receive HSTS header
laureltv.org: did not receive HSTS header
@@ -12706,15 +13127,17 @@ laurent-e-levy.com: did not receive HSTS header
lausitzer-widerstand.de: did not receive HSTS header
lavapot.com: did not receive HSTS header
lavasing.eu.org: could not connect to host
+lavenderx.org: could not connect to host
laventainnhotel-mailing.com: could not connect to host
lavine.ch: did not receive HSTS header
lavishlooksstudio.com.au: did not receive HSTS header
lavito.cz: could not connect to host
lavval.com: could not connect to host
+lawbirduk.com: did not receive HSTS header
lawformt.com: max-age too low: 2592000
-lawly.org: could not connect to host
+lawly.org: did not receive HSTS header
lawrence-institute.com: could not connect to host
-lawyerdigital.co.bw: could not connect to host
+lawyerdigital.co.bw: did not receive HSTS header
laxatus.com: could not connect to host
laxiongames.es: could not connect to host
lay1688.com: max-age too low: 0
@@ -12723,6 +13146,7 @@ layfully.me: could not connect to host
laymans911.info: could not connect to host
lazapateriahandmade.pe: did not receive HSTS header
lazerus.net: could not connect to host
+lazowik.pl: did not receive HSTS header
lazulu.com: could not connect to host
lazytux.de: did not receive HSTS header
lbarrios.es: could not connect to host
@@ -12731,6 +13155,7 @@ lbrli.tk: could not connect to host
lbrls.tk: could not connect to host
lbrt.xyz: could not connect to host
lc-promiss.de: did not receive HSTS header
+lc1818.com: could not connect to host
lcbizsolutions.com: could not connect to host
lcht.ch: could not connect to host
lclarkpdx.com: could not connect to host
@@ -12742,13 +13167,16 @@ ldcraft.pw: could not connect to host
le-blog.ch: could not connect to host
le0.me: could not connect to host
le0yn.ml: could not connect to host
+le130rb.com: could not connect to host
+le23.fr: could not connect to host
le42mars.fr: could not connect to host
+leaderoftheresistance.com: could not connect to host
+leaderoftheresistance.net: could not connect to host
leadership9.com: could not connect to host
leadgenie.me: could not connect to host
leadingsalons.com: did not receive HSTS header
-leadplan.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+leadplan.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
leadstart.org: did not receive HSTS header
-leaf-consulting.de: did not receive HSTS header
leakedminecraft.net: could not connect to host
leakreporter.net: did not receive HSTS header
leaks.directory: could not connect to host
@@ -12766,17 +13194,19 @@ learningorder.com: could not connect to host
learntale.com: could not connect to host
learntotradethemarket.com: did not receive HSTS header
learntube.cz: did not receive HSTS header
+leaseourthings.com: could not connect to host
lebal.se: could not connect to host
lebanonoregon.gov: did not receive HSTS header
lebarbatruc.com: did not receive HSTS header
lebosse.me: could not connect to host
lebrun.org: could not connect to host
lechaudrondupertuis.ch: could not connect to host
+lecheng.in: could not connect to host
leclaire.com.br: could not connect to host
lecourtier.fr: did not receive HSTS header
led-tl-wereld.nl: did not receive HSTS header
led.xyz: could not connect to host
-leddruckalarm.de: did not receive HSTS header
+leddruckalarm.de: could not connect to host
ledgerscope.net: could not connect to host
ledhouse.sk: did not receive HSTS header
ledlampor365.se: could not connect to host
@@ -12791,11 +13221,13 @@ leefindlow.com: could not connect to host
leegyuho.com: could not connect to host
leelou.wedding: could not connect to host
leen.io: could not connect to host
+leere.me: could not connect to host
leerkotte.eu: could not connect to host
leetsaber.com: did not receive HSTS header
lega-dental.com: could not connect to host
legal.farm: could not connect to host
legaleus.co.uk: could not connect to host
+legalinmotion.es: did not receive HSTS header
legalisepeacebloom.com: could not connect to host
legalrobot-uat.com: could not connect to host
legalsen.com: did not receive HSTS header
@@ -12808,6 +13240,7 @@ legitaxi.com: did not receive HSTS header
legoutcheznous.com: did not receive HSTS header
legumefederation.org: did not receive HSTS header
legymnase.eu: did not receive HSTS header
+lehighmathcircle.org: could not connect to host
lehrermarktplatz.de: did not receive HSTS header
lehtinen.xyz: did not receive HSTS header
leigh.life: did not receive HSTS header
@@ -12818,14 +13251,15 @@ leition.com: could not connect to host
leitionusercontent.com: could not connect to host
leitner.com.au: did not receive HSTS header
leiyun.me: could not connect to host
+lelambiental.com.br: did not receive HSTS header
lelehei.com: could not connect to host
lellyboi.ml: could not connect to host
lelongbank.com: did not receive HSTS header
lelubre.info: did not receive HSTS header
lemon.co: could not connect to host
lemonthy.ca: did not receive HSTS header
-lemp.io: could not connect to host
-lendahandmissionteams.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+lemp.io: did not receive HSTS header
+lendahandmissionteams.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
lenders.direct: could not connect to host
lenget.com: did not receive HSTS header
lenguajedeprogramacion.com: did not receive HSTS header
@@ -12839,6 +13273,7 @@ lennartheinrich.de: could not connect to host
lennier.info: did not receive HSTS header
lennyfaces.net: did not receive HSTS header
lenovogaming.com: could not connect to host
+lensual.space: could not connect to host
lentri.com: did not receive HSTS header
lenzw.de: did not receive HSTS header
leob.in: did not receive HSTS header
@@ -12846,7 +13281,7 @@ leochedibracchio.com: did not receive HSTS header
leodaniels.com: did not receive HSTS header
leolana.com: did not receive HSTS header
leon-jaekel.com: could not connect to host
-leon.net: could not connect to host
+leon.net: did not receive HSTS header
leonardcamacho.me: could not connect to host
leonauto.de: could not connect to host
leonax.net: could not connect to host
@@ -12861,7 +13296,7 @@ lequateur.fr: did not receive HSTS header
lerasenglish.com: max-age too low: 0
lerku.com: could not connect to host
lerlivros.online: could not connect to host
-lerner.moscow: did not receive HSTS header
+lerner.moscow: could not connect to host
lerp.me: could not connect to host
les-corsaires.net: could not connect to host
les-pingouins.com: did not receive HSTS header
@@ -12871,8 +13306,8 @@ lesbiansslaves.com: could not connect to host
lescomptoirsdepierrot.com: could not connect to host
lescourtiersbordelais.com: did not receive HSTS header
lesdouceursdeliyana.com: could not connect to host
-lesecuadors.com: did not receive HSTS header
-lesformations.net: could not connect to host
+lesformations.net: did not receive HSTS header
+lesgitesdefranca.com: did not receive HSTS header
lesh.eu: could not connect to host
lesjardinsdemathieu.net: could not connect to host
lesliekearney.com: did not receive HSTS header
@@ -12889,6 +13324,7 @@ letkidsbekids.co.uk: did not receive HSTS header
letraba.com: could not connect to host
letras.mus.br: did not receive HSTS header
letreview.ph: could not connect to host
+lets.ninja: could not connect to host
letsgetintouch.com: could not connect to host
letshome.mx: did not receive HSTS header
letskick.ru: did not receive HSTS header
@@ -12907,6 +13343,7 @@ levelum.com: did not receive HSTS header
leveredge.net: could not connect to host
levert.ch: could not connect to host
lewisjuggins.co.uk: did not receive HSTS header
+lewismcyoutube.uk: did not receive HSTS header
lexiphanic.co.uk: did not receive HSTS header
lexpartsofac.com: could not connect to host
lexxyn.nl: did not receive HSTS header
@@ -12914,7 +13351,7 @@ lez-cuties.com: could not connect to host
lezdomsm.com: could not connect to host
lfaz.org: could not connect to host
lffweb.ga: could not connect to host
-lfklzw.com: did not receive HSTS header
+lfklzw.com: could not connect to host
lfullerdesign.com: could not connect to host
lg0.site: could not connect to host
lg21.co: could not connect to host
@@ -12922,6 +13359,7 @@ lgiswa.com.au: did not receive HSTS header
lgrs.com.au: did not receive HSTS header
lgsg.us: could not connect to host
lgts.se: could not connect to host
+lhakustik.se: could not connect to host
lhalbert.xyz: could not connect to host
lhasaapso.com.br: could not connect to host
lheinrich.com: did not receive HSTS header
@@ -12934,12 +13372,11 @@ lhsj78.com: could not connect to host
li756.com: max-age too low: 0
liaillustr.at: did not receive HSTS header
liam-is-a-nig.ga: could not connect to host
-liam-w.com: could not connect to host
liamjack.fr: could not connect to host
-lian-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-lian-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-liang-li88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-liang-li88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+lian-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+lian-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+liang-li88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+liang-li88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
liangbp.com: did not receive HSTS header
liangyichen.net: did not receive HSTS header
lianwen.kim: could not connect to host
@@ -12948,7 +13385,9 @@ lianyexiuchang.in: could not connect to host
liaoshuma.com: could not connect to host
liaozheqi.cn: could not connect to host
liaronce.win: could not connect to host
+liautard.fr: could not connect to host
libanco.com: could not connect to host
+libbitcoin.org: could not connect to host
libdeer.so: could not connect to host
libertas-tech.com: could not connect to host
libertins.date: did not receive HSTS header
@@ -12958,7 +13397,7 @@ librairie-asie.com: did not receive HSTS header
library.linode.com: did not receive HSTS header
librechan.net: could not connect to host
libreduca.com: could not connect to host
-libricks.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+libricks.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
librosdescargas.club: could not connect to host
libzik.com: could not connect to host
licence-registry.com: could not connect to host
@@ -12969,12 +13408,11 @@ lichess4545.tv: did not receive HSTS header
lickmypussy.us: could not connect to host
lidl-selection.at: did not receive HSTS header
lidlovajogurteka.si: could not connect to host
-liduan.com: could not connect to host
liebach.me: did not receive HSTS header
liebestarot.at: did not receive HSTS header
lieblingsholz.de: could not connect to host
lied8.eu: could not connect to host
-liehuojun.com: did not receive HSTS header
+liehuojun.com: could not connect to host
lierrmm.space: could not connect to host
lietaer.eu: did not receive HSTS header
life-like.com: did not receive HSTS header
@@ -13014,12 +13452,12 @@ lignenet.com: did not receive HSTS header
lijero.co: could not connect to host
like.lgbt: could not connect to host
likenosis.com: could not connect to host
+likui.me: could not connect to host
lila.pink: did not receive HSTS header
lilapmedia.com: could not connect to host
-liliang13.com: could not connect to host
lilismartinis.com: could not connect to host
lilliangray.co.za: did not receive HSTS header
-lillpopp.eu: max-age too low: 10
+lillpopp.eu: did not receive HSTS header
lilpwny.com: could not connect to host
lilycms.com: could not connect to host
lilygreen.co.za: could not connect to host
@@ -13035,10 +13473,11 @@ limpens.net: did not receive HSTS header
limpido.it: could not connect to host
limunana.com: could not connect to host
lin2018168.com: max-age too low: 0
+linan.blog: did not receive HSTS header
+linasjourney.com: did not receive HSTS header
lincolncountytn.gov: could not connect to host
lincsbouncycastlehire.co.uk: could not connect to host
lindberg.io: did not receive HSTS header
-lindemann.space: could not connect to host
lindholmen.club: did not receive HSTS header
lineauniformes.com.br: could not connect to host
linernotekids.com: could not connect to host
@@ -13052,6 +13491,7 @@ lingting.vip: could not connect to host
linguamilla.com: did not receive HSTS header
linguaquote.com: did not receive HSTS header
linhaoyi.com: did not receive HSTS header
+linherest.tk: could not connect to host
link.ba: could not connect to host
linkage.ph: did not receive HSTS header
linkages.org: could not connect to host
@@ -13071,10 +13511,9 @@ linostassi.net: could not connect to host
lintellift.com: did not receive HSTS header
linusdrop.tips: could not connect to host
linux-admin-california.com: could not connect to host
-linux-mint.cz: could not connect to host
+linux-mint.cz: did not receive HSTS header
linux.army: could not connect to host
-linux.im: could not connect to host
-linux.pizza: did not receive HSTS header
+linux.im: did not receive HSTS header
linux.sb: could not connect to host
linuxandstuff.de: could not connect to host
linuxcode.net: could not connect to host
@@ -13082,11 +13521,10 @@ linuxeyecandy.com: could not connect to host
linuxfixed.it: could not connect to host
linuxforyou.com: could not connect to host
linuxgeek.ro: could not connect to host
-linuxhub.ro: did not receive HSTS header
-linuxincluded.com: did not receive HSTS header
linuxmint.cz: could not connect to host
linuxmonitoring.net: could not connect to host
linuxno.com: could not connect to host
+linuxproperties.com: could not connect to host
linvx.org: did not receive HSTS header
linxmind.eu: could not connect to host
lionhosting.nl: could not connect to host
@@ -13103,14 +13541,16 @@ lisamortimore.com: did not receive HSTS header
lisbongold.com: did not receive HSTS header
lisgade.dk: could not connect to host
lisieuxarquitetura.com.br: could not connect to host
+lisinphotography.com: could not connect to host
lisowski-photography.com: could not connect to host
lissabon.guide: could not connect to host
listafirmelor.com: could not connect to host
listage.ovh: did not receive HSTS header
listal.com: did not receive HSTS header
-lists.mayfirst.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+lists.mayfirst.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
litcc.com: could not connect to host
litcomphonors.com: could not connect to host
+litebitanalytics.eu: did not receive HSTS header
literaturpreis-bad-wurzach.de: did not receive HSTS header
litespeed.io: could not connect to host
litevault.net: did not receive HSTS header
@@ -13119,7 +13559,6 @@ littlebirds.cf: could not connect to host
littleboutiqueshop.com: could not connect to host
littleboutiqueshop.uk: could not connect to host
littlecrittersbrewery.com: did not receive HSTS header
-littledev.nl: could not connect to host
littledisney.ro: did not receive HSTS header
littlefreelibrary.org: did not receive HSTS header
littleqiu.net: could not connect to host
@@ -13129,19 +13568,20 @@ liud.im: could not connect to host
liufengyu.cn: did not receive HSTS header
liujunyang.com: did not receive HSTS header
liukang.tech: could not connect to host
+liv3ly.com: did not receive HSTS header
livadm.ml: could not connect to host
-live4k.media: could not connect to host
livechatlady.info: did not receive HSTS header
livedemo.io: could not connect to host
-liveforspeed.se: could not connect to host
livej.am: could not connect to host
+livelexi.com: could not connect to host
livepath.ch: did not receive HSTS header
-liveperformersmeeting.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+liveperformersmeeting.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
liverewrite.com: could not connect to host
livesearch-fukuoka.com: did not receive HSTS header
livetube.tv: did not receive HSTS header
livhao.com: did not receive HSTS header
liviababynet.com.br: could not connect to host
+livingforreal.com: could not connect to host
livinghealthywithchocolate.com: did not receive HSTS header
livnev.me: could not connect to host
livolett.de: did not receive HSTS header
@@ -13155,13 +13595,10 @@ lixingcong.com: could not connect to host
lizhi123.net: could not connect to host
lizhuogui.ga: could not connect to host
lizzythepooch.com: did not receive HSTS header
-ljc.ro: could not connect to host
-ljskool.com: did not receive HSTS header
ljw.me: could not connect to host
lkbk.uk: could not connect to host
lkp111138.me: did not receive HSTS header
-ll6957.com: could not connect to host
-llamasweet.tech: could not connect to host
+ll6957.com: did not receive HSTS header
ller.xyz: could not connect to host
lll.st: could not connect to host
llsv666.com: max-age too low: 0
@@ -13174,6 +13611,7 @@ lnmp.me: did not receive HSTS header
lnoldan.com: could not connect to host
lntu.org: did not receive HSTS header
lnx.li: could not connect to host
+lnyltx.cn: could not connect to host
loacg.com: did not receive HSTS header
loadingdeck.com: did not receive HSTS header
loadso.me: could not connect to host
@@ -13195,6 +13633,7 @@ localdata.us: did not receive HSTS header
localdrive.me: could not connect to host
localegroup.com: did not receive HSTS header
localnetwork.nz: could not connect to host
+localsource.eu: could not connect to host
location-fichier-email.com: could not connect to host
locationvoitureallemagne.com: could not connect to host
locationvoitureangleterre.com: could not connect to host
@@ -13214,20 +13653,23 @@ locationvoituresuede.com: could not connect to host
locchat.com: could not connect to host
locker3.com: could not connect to host
lockify.com: could not connect to host
-lockoutgroup.com: could not connect to host
lockr.io: did not receive HSTS header
locksmith-durbannorth.co.za: could not connect to host
+locksmithballito.com: could not connect to host
+locksmithbluff.co.za: could not connect to host
locksmithcarrolltontx.com: did not receive HSTS header
locksmithhillcrest.co.za: could not connect to host
+locksmithindurban.co.za: could not connect to host
locksmithrandburg24-7.co.za: could not connect to host
locksmithsbluff.com: could not connect to host
+locksmithswestville.com: could not connect to host
locksport.org.nz: could not connect to host
locktheirphone.com: could not connect to host
lockyourcomputer.pw: could not connect to host
+locomocosec.com: did not receive HSTS header
locomotive.ca: did not receive HSTS header
locvis.ru: did not receive HSTS header
lode.li: could not connect to host
-lodewijkict.nl: did not receive HSTS header
lodgesdureynou.fr: did not receive HSTS header
loeildansledoigt.fr: could not connect to host
loftboard.eu: could not connect to host
@@ -13253,6 +13695,7 @@ loginsentinel.eu: could not connect to host
logistify.com.mx: did not receive HSTS header
logitank.net: did not receive HSTS header
lognot.net: could not connect to host
+logtywardrobe.com: could not connect to host
logymedia.com: could not connect to host
lohl1kohl.de: did not receive HSTS header
loigiai.net: did not receive HSTS header
@@ -13266,31 +13709,25 @@ lojasviavento.com.br: could not connect to host
lojatema.com.br: could not connect to host
lojavalcapelli.com.br: could not connect to host
lojavirtualfc.com.br: did not receive HSTS header
-lojavirtualfct.com.br: did not receive HSTS header
+lojavirtualfct.com.br: could not connect to host
lolcorp.pl: could not connect to host
lolhax.org: did not receive HSTS header
loli.bz: could not connect to host
loli.ee: could not connect to host
loli.vip: could not connect to host
-loliblogs.cf: could not connect to host
-loliblogs.ga: could not connect to host
-loliblogs.gq: could not connect to host
-loliblogs.ml: could not connect to host
lolico.moe: did not receive HSTS header
lolicon.info: could not connect to host
lolicore.ch: could not connect to host
lolidunno.com: could not connect to host
-lolifamily.cf: could not connect to host
-lolifamily.ga: could not connect to host
-lolifamily.gq: could not connect to host
-lolifamily.ml: could not connect to host
lolis.stream: could not connect to host
lollaconcept.com.br: could not connect to host
lonal.com: could not connect to host
+lonasdigital.com: did not receive HSTS header
lonay.me: did not receive HSTS header
lonbali.com: did not receive HSTS header
londoncalling.co: did not receive HSTS header
londonindustryshop.com: did not receive HSTS header
+londonkan.jp: could not connect to host
londonlanguageexchange.com: could not connect to host
lonerwolf.com: did not receive HSTS header
long-journey.com: could not connect to host
@@ -13310,12 +13747,12 @@ looneymooney.com: could not connect to host
loongsg.xyz: could not connect to host
loony.info: could not connect to host
loopower.com: could not connect to host
+looptics.eu: did not receive HSTS header
loovto.net: could not connect to host
-loperetti.ch: could not connect to host
loqyu.co: could not connect to host
-lord.sh: did not receive HSTS header
+lord.city: did not receive HSTS header
lordgun.com: did not receive HSTS header
-lordofthebrick.com: could not connect to host
+lordofthebrick.com: did not receive HSTS header
lorientlejour.com: did not receive HSTS header
losebellyfat.pro: could not connect to host
losless.fr: did not receive HSTS header
@@ -13325,27 +13762,28 @@ lostandcash.com: did not receive HSTS header
lostarq.com: could not connect to host
lostg.com: did not receive HSTS header
lostinsecurity.com: could not connect to host
-lostinweb.eu: could not connect to host
+loteamentoabertoamparo.com.br: could not connect to host
loteks.de: did not receive HSTS header
lothai.re: did not receive HSTS header
-lothlorien.ca: could not connect to host
lothuytinhsi.com: could not connect to host
lotos-ag.ch: did not receive HSTS header
lotsencafe.de: did not receive HSTS header
lottosonline.com: did not receive HSTS header
-lotuscloud.de: did not receive HSTS header
+lotuscloud.de: could not connect to host
lotuscloud.org: could not connect to host
lotuswebsolutions.tk: did not receive HSTS header
louduniverse.net: did not receive HSTS header
louiewatch.com: could not connect to host
+louisemisellinteriors.co.uk: max-age too low: 0
louisvillevmug.info: did not receive HSTS header
love-schna.jp: could not connect to host
love4taylor.eu.org: could not connect to host
loveable.de: could not connect to host
+loveai.org: could not connect to host
loveamber.me: could not connect to host
loveandloyalty.se: could not connect to host
-lovebo9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-lovebo9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+lovebo9.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+lovebo9.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
lovecrystal.co.uk: could not connect to host
lovelens.ch: could not connect to host
lovelens.li: could not connect to host
@@ -13361,14 +13799,17 @@ lovelytimes.net: could not connect to host
lovemen.cc: did not receive HSTS header
lovemysafetynet.com: did not receive HSTS header
loveread-ec.appspot.com: did not receive HSTS header
+loverepair.co.uk: did not receive HSTS header
loveto.at: could not connect to host
lovetravel360.com: did not receive HSTS header
+lovevape.co: did not receive HSTS header
loveyounastya.com: did not receive HSTS header
lovingpenguin.com: did not receive HSTS header
lowcarblab.com: did not receive HSTS header
lowhangingfruitgrabber.com: could not connect to host
lowt.us: could not connect to host
lowtherpavilion.co.uk: did not receive HSTS header
+loxal.net: did not receive HSTS header
loxis.be: did not receive HSTS header
loyaltech.ch: could not connect to host
lpacademy.com.br: could not connect to host
@@ -13392,10 +13833,7 @@ lszj.com: could not connect to host
ltba.org: could not connect to host
ltbytes.com: could not connect to host
ltechnologygroup.com: could not connect to host
-ltlec.cn: could not connect to host
ltlec.net: could not connect to host
-ltlec.org: could not connect to host
-ltlec.services: could not connect to host
ltmw.xyz: could not connect to host
ltransferts.com: could not connect to host
ltu.social: could not connect to host
@@ -13405,10 +13843,12 @@ lubot.net: could not connect to host
luca.swiss: could not connect to host
lucakrebs.de: could not connect to host
lucas-garte.com: did not receive HSTS header
+lucasantarella.com: could not connect to host
lucascobb.com: did not receive HSTS header
lucascodes.com: could not connect to host
lucasgaland.com: could not connect to host
lucaterzini.com: could not connect to host
+lucidframeworks.com: could not connect to host
lucidlogs.com: could not connect to host
lucidoccult.com: could not connect to host
lucky28.org: did not receive HSTS header
@@ -13423,7 +13863,7 @@ ludwig.im: could not connect to host
lufu.io: could not connect to host
luganskservers.net: could not connect to host
lugimax.com: could not connect to host
-lui.pink: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+lui.pink: did not receive HSTS header
luis-checa.com: could not connect to host
luisgf.es: could not connect to host
luisv.me: could not connect to host
@@ -13449,11 +13889,14 @@ luma.pink: could not connect to host
lumd.me: could not connect to host
lumer.tech: could not connect to host
lumi.do: did not receive HSTS header
+lumiere.com: could not connect to host
+luminaires-online.fr: did not receive HSTS header
luminancy.com: did not receive HSTS header
lunafag.ru: could not connect to host
+lunarichter.de: did not receive HSTS header
lunarift.com: could not connect to host
lunarrift.net: could not connect to host
-lunastrail.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+lunastrail.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
luneta.nearbuysystems.com: could not connect to host
lungta.pro: could not connect to host
lunight.ml: could not connect to host
@@ -13469,25 +13912,28 @@ luosonghao.com: could not connect to host
luoxiao.im: could not connect to host
luoxingyu.ml: could not connect to host
luripump.se: could not connect to host
+lushan.me: did not receive HSTS header
lusis.fr: did not receive HSTS header
lusis.net: could not connect to host
lustige-zitate.com: did not receive HSTS header
lustrumxi.nl: could not connect to host
lusynth.com: could not connect to host
luther.fi: could not connect to host
-luxe-it.co.uk: could not connect to host
+luthierunatespalermo.com: did not receive HSTS header
+luxe-it.co.uk: did not receive HSTS header
luxescreenprotector.nl: did not receive HSTS header
-luxfosdecoenterprise.com: could not connect to host
luxinmo.com: did not receive HSTS header
luxofit.de: did not receive HSTS header
luxonetwork.com: could not connect to host
luxurytimepieces.net: could not connect to host
luxus-russen.de: could not connect to host
luzeshomologadas.com.br: could not connect to host
+luzfaltex.com: did not receive HSTS header
lv5.top: could not connect to host
-lvtrafficticketguy.com: did not receive HSTS header
lwhate.com: could not connect to host
lxd.pm: could not connect to host
+lxx77.com: could not connect to host
+lycetre.com: did not receive HSTS header
lychankiet.name.vn: could not connect to host
lyclive.com: max-age too low: 0
lycly.top: could not connect to host
@@ -13510,20 +13956,21 @@ lzkill.com: did not receive HSTS header
lzqii.cn: could not connect to host
lzzr.me: could not connect to host
m-ali.xyz: did not receive HSTS header
-m-cont.cz: did not receive HSTS header
m-edmondson.co.uk: did not receive HSTS header
m-generator.com: could not connect to host
m-rickroll-v.pw: could not connect to host
m-warrior.tk: could not connect to host
m.gparent.org: could not connect to host
m.nu: did not receive HSTS header
+m0v0.com: could not connect to host
m0wef.uk: could not connect to host
-m12uno.com: could not connect to host
+m12uno.com: did not receive HSTS header
m132.eu: did not receive HSTS header
+m2epro.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
m2tc.fr: could not connect to host
m3-gmbh.de: did not receive HSTS header
m4570.xyz: could not connect to host
-m6957.com: could not connect to host
+m6957.com: did not receive HSTS header
m82labs.com: did not receive HSTS header
ma-musique.fr: could not connect to host
ma-plancha.ch: did not receive HSTS header
@@ -13543,13 +13990,13 @@ machcz.eu: did not receive HSTS header
machijun.net: did not receive HSTS header
machinelearningjavascript.com: could not connect to host
maciespartyhire.co.uk: did not receive HSTS header
+macinyasha.net: could not connect to host
mack.space: could not connect to host
-macker.io: could not connect to host
mackey7.net: could not connect to host
macleodnc.com: did not receive HSTS header
+macosxfilerecovery.com: did not receive HSTS header
macoun.de: max-age too low: 2592000
macsandcheesedreams.com: could not connect to host
-macstore.pe: did not receive HSTS header
macustar.eu: did not receive HSTS header
madae.nl: did not receive HSTS header
madandpissedoff.com: did not receive HSTS header
@@ -13576,7 +14023,7 @@ madusecurity.com: could not connect to host
mae-berlinistanbul.com: could not connect to host
maerzpa.de: did not receive HSTS header
mafamane.com: could not connect to host
-maff.scot: could not connect to host
+maff.scot: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mafiareturns.com: max-age too low: 2592000
magazinedabeleza.net: could not connect to host
magebankin.com: did not receive HSTS header
@@ -13584,11 +14031,14 @@ magenx.com: did not receive HSTS header
maggie-shaw.co.uk: did not receive HSTS header
magi.systems: could not connect to host
magia360.com: did not receive HSTS header
+magicalcircuslv.com: could not connect to host
magicalshuttle.fr: did not receive HSTS header
-magickmoments.co.uk: did not receive HSTS header
+magicball.co: could not connect to host
+magickmoments.co.uk: could not connect to host
magieamour.com: did not receive HSTS header
magieblanche.fr: did not receive HSTS header
magnacumlaude.co: could not connect to host
+magneticanvil.com: could not connect to host
magnettracker.com: could not connect to host
magnoliadoulas.com: could not connect to host
magosmedellin.com: could not connect to host
@@ -13596,6 +14046,7 @@ magyarokegyhelyen.hu: did not receive HSTS header
mahai.me: did not receive HSTS header
mahamed91.pw: could not connect to host
mahansexcavating.com: did not receive HSTS header
+mahefa.co.uk: could not connect to host
mahfouzadedimeji.com: did not receive HSTS header
maik-mahlow.de: could not connect to host
mail-settings.google.com: did not receive HSTS header (error ignored - included regardless)
@@ -13606,7 +14057,7 @@ maildragon.com: could not connect to host
mailer-dot.de: did not receive HSTS header
mailgarant.nl: could not connect to host
mailhost.it: could not connect to host
-mailing-femprendedores.com: could not connect to host
+mailing-femprendedores.com: did not receive HSTS header
mailing-jbgg.com: could not connect to host
maillink.store: could not connect to host
mailon.ga: could not connect to host
@@ -13619,7 +14070,6 @@ maintainerheaven.ch: could not connect to host
maisalto.ind.br: could not connect to host
maitrechaton.fr: did not receive HSTS header
maitriser-son-stress.com: could not connect to host
-majahoidja.ee: could not connect to host
majesticcolorado.com: did not receive HSTS header
majncloud.tk: could not connect to host
make-pizza.info: could not connect to host
@@ -13627,9 +14077,7 @@ makedonien.guide: could not connect to host
makedonija.net.mk: did not receive HSTS header
makeit-so.de: could not connect to host
makeitdynamic.com: could not connect to host
-makejusticework.org.uk: could not connect to host
makemejob.com: could not connect to host
-makera.ga: could not connect to host
makerstuff.net: did not receive HSTS header
makeshiftco.de: could not connect to host
makeuplove.nl: could not connect to host
@@ -13638,7 +14086,6 @@ makino.games: could not connect to host
makogaming.com: did not receive HSTS header
makropa.com: did not receive HSTS header
malamutedoalasca.com.br: could not connect to host
-malasuk.com: could not connect to host
maldiverna.guide: could not connect to host
maleexcel.com: did not receive HSTS header
malena.com.ua: could not connect to host
@@ -13647,9 +14094,11 @@ malesbdsm.com: did not receive HSTS header
malfait.nl: could not connect to host
malgraph.net: could not connect to host
malibubeachrecoverycenter.com: could not connect to host
+malinator.net: did not receive HSTS header
maljaars-fotografie.nl: did not receive HSTS header
maljaars-media.nl: could not connect to host
malkaso.com.ua: could not connect to host
+malkoun.com: could not connect to host
malmoesport.se: did not receive HSTS header
malmstroms-co.se: could not connect to host
malone.link: could not connect to host
@@ -13668,13 +14117,12 @@ mamadoma.com.ua: could not connect to host
mamafit.club: did not receive HSTS header
mamaison.io: could not connect to host
mamastore.eu: could not connect to host
-mammeitalianeavienna.com: max-age too low: 86400
-mammooc.org: did not receive HSTS header
+mammeitalianeavienna.com: could not connect to host
mammothmail.com: could not connect to host
mammothmail.net: could not connect to host
mammothmail.org: could not connect to host
mammut.space: could not connect to host
-mamochka.org.ua: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mamochka.org.ua: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mamout.xyz: could not connect to host
manaboutahor.se: could not connect to host
manage.zenpayroll.com: did not receive HSTS header
@@ -13686,7 +14134,7 @@ manageforall.de: could not connect to host
management-ethics.com: did not receive HSTS header
managemynetsuite.com: did not receive HSTS header
manalu.cz: could not connect to host
-manantial.mx: did not receive HSTS header
+manantial.mx: could not connect to host
manaonetrading.com: could not connect to host
manav-it.de: could not connect to host
mandala-ausmalbilder.de: did not receive HSTS header
@@ -13695,13 +14143,15 @@ mandm.servebeer.com: could not connect to host
mandpress.com: did not receive HSTS header
mangapoi.com: could not connect to host
mangazuki.co: did not receive HSTS header
+mangnhuapvc.com.vn: did not receive HSTS header
manhassetparkdistrictny.gov: did not receive HSTS header
maniacoland.com: could not connect to host
maniadeprazer.com.br: could not connect to host
+maniaiti.nz: could not connect to host
manifestbin.com: could not connect to host
manipulatedtme.com: could not connect to host
manitasicily.com: did not receive HSTS header
-maniw.com: did not receive HSTS header
+maniw.com: could not connect to host
mann-und-maeuse.de: could not connect to host
mannford.com: could not connect to host
manningbrothers.com: did not receive HSTS header
@@ -13710,14 +14160,15 @@ manns-solutions.com: did not receive HSTS header
manns-solutions.ru: did not receive HSTS header
mannsolutions.co.uk: did not receive HSTS header
manojsharan.me: could not connect to host
-manonamission.de: did not receive HSTS header
manova.cz: could not connect to host
+manowarus.com: could not connect to host
mansfieldplacevt.com: did not receive HSTS header
manshop24.com: could not connect to host
mansion-note.com: did not receive HSTS header
mansiontech.cn: did not receive HSTS header
mantra.pictures: could not connect to host
-mantuo.com: could not connect to host
+mantuo.com: did not receive HSTS header
+mantuo.vip: could not connect to host
mantuo.xyz: could not connect to host
manududu.com.br: could not connect to host
manuel7espejo.com: did not receive HSTS header
@@ -13726,6 +14177,7 @@ manueldopheide.com: did not receive HSTS header
manuelrueger.de: could not connect to host
manuscript.com: did not receive HSTS header
manutrol.com.br: did not receive HSTS header
+manyetikboya.com: could not connect to host
maomao.blog: could not connect to host
maomaobt.com: did not receive HSTS header
maomaofuli.vip: could not connect to host
@@ -13739,6 +14191,7 @@ mapservices.nl: did not receive HSTS header
maquena.org: could not connect to host
maquettage.com: did not receive HSTS header
maquillage-permanent-tatoo.com: did not receive HSTS header
+maquininhamercadopoint.com.br: did not receive HSTS header
mara-martinez.de: could not connect to host
maranatha.pl: did not receive HSTS header
marbinvest.com: did not receive HSTS header
@@ -13751,6 +14204,7 @@ marcelparra.com: could not connect to host
marchagen.nl: did not receive HSTS header
marche-nordic-jorat.ch: could not connect to host
marchwj.pl: did not receive HSTS header
+marciaimportados.com.br: did not receive HSTS header
marco-kretz.de: did not receive HSTS header
marco01809.net: could not connect to host
marcoececilia.it: could not connect to host
@@ -13767,7 +14221,7 @@ mare92.cz: could not connect to host
mareklecian.cz: did not receive HSTS header
margan.ch: could not connect to host
margaretrosefashions.co.uk: could not connect to host
-margo.ml: could not connect to host
+margo.ml: did not receive HSTS header
margots.biz: could not connect to host
margots.life: could not connect to host
margots.tech: could not connect to host
@@ -13781,9 +14235,11 @@ marie-curie.fr: could not connect to host
marie-en-provence.com: could not connect to host
marie.club: could not connect to host
marienschule-sundern.de: did not receive HSTS header
-marinecadastre.gov: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-mario.party: could not connect to host
-marioberluchi.by: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+marikafranke.de: could not connect to host
+marinecadastre.gov: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mario.party: did not receive HSTS header
+marioberluchi.by: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mariposah.ch: could not connect to host
mariusschulte.de: did not receive HSTS header
marix.ro: could not connect to host
mark-a-hydrant.com: did not receive HSTS header
@@ -13794,11 +14250,11 @@ markepps.com: could not connect to host
market.android.com: did not receive HSTS header (error ignored - included regardless)
marketgot.com: could not connect to host
marketing-advertising.eu: could not connect to host
+marketingbrandingnews.net: could not connect to host
marketingdesignu.cz: could not connect to host
marketingeinnovacion.com: did not receive HSTS header
marketingromania.ro: did not receive HSTS header
marketio.co: could not connect to host
-marketizare.ro: did not receive HSTS header
marketlinks.org: did not receive HSTS header
markf.io: could not connect to host
markhenrick.site: did not receive HSTS header
@@ -13807,6 +14263,7 @@ markllego.com: could not connect to host
marko-fenster24.de: could not connect to host
markorszulak.com: did not receive HSTS header
markow.io: max-age too low: 7776000
+markprof.ru: could not connect to host
markrego.com: could not connect to host
markrobin.de: did not receive HSTS header
marksill.com: could not connect to host
@@ -13816,9 +14273,7 @@ marktboten.de: could not connect to host
marktplaatshelper.nl: did not receive HSTS header
markus.design: did not receive HSTS header
markusabraham.com: did not receive HSTS header
-markusgran.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-markusueberallassetmanagement.de: could not connect to host
-markusueberallconsulting.de: could not connect to host
+markusgran.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
markusweimar.de: did not receive HSTS header
marlen.cz: did not receive HSTS header
marleyresort.com: could not connect to host
@@ -13831,14 +14286,13 @@ marqperso.ch: could not connect to host
marquepersonnelle.ch: could not connect to host
marriottvetcareers.com: could not connect to host
marsatapp.com: could not connect to host
-marshallford.me: did not receive HSTS header
+marshallford.me: could not connect to host
marshut.net: could not connect to host
marshyplay.live: could not connect to host
-marthasvillemo.gov: did not receive HSTS header
+marthasvillemo.gov: could not connect to host
martialc.be: could not connect to host
martiert.com: could not connect to host
martiestrimsalon.nl: could not connect to host
-martijnhielema.nl: did not receive HSTS header
martijnvhoof.nl: could not connect to host
martin-arend.de: did not receive HSTS header
martin-mattel.com: could not connect to host
@@ -13869,18 +14323,19 @@ mashek.net: could not connect to host
mashnew.com: could not connect to host
masjidtawheed.net: did not receive HSTS header
maskice.hr: did not receive HSTS header
-maskinkultur.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+maskinkultur.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
maskt.pw: could not connect to host
maslife365.com: max-age too low: 7776000
massageishealthy.com: did not receive HSTS header
massagelimaperu.com: did not receive HSTS header
massagetherapyschoolsinformation.com: did not receive HSTS header
massar.family: could not connect to host
+massdrop.com: did not receive HSTS header
massive.tk: could not connect to host
massivum.de: did not receive HSTS header
massot.eu: did not receive HSTS header
massvow.com: could not connect to host
-mastafu.info: did not receive HSTS header
+mastafu.info: could not connect to host
mastd.fr: could not connect to host
mastd.me: could not connect to host
mastd.onl: could not connect to host
@@ -13911,12 +14366,11 @@ masumreza.tk: could not connect to host
mat99.dk: could not connect to host
matarrosabierzo.com: could not connect to host
matbad.de: did not receive HSTS header
-matchlessdentist.com: could not connect to host
matchneedle.com: did not receive HSTS header
-maternum.com: could not connect to host
mateusmeyer.com.br: could not connect to host
mateuszchyla.pl: did not receive HSTS header
mateuszpilszek.pl: could not connect to host
+mathalexservice.info: could not connect to host
mathematris.com: could not connect to host
mathembedded.com: did not receive HSTS header
mathers.ovh: did not receive HSTS header
@@ -13928,8 +14382,7 @@ mathsource.ga: could not connect to host
mathsweek.nz: did not receive HSTS header
mathsweek.org.nz: did not receive HSTS header
mathsweek.school.nz: did not receive HSTS header
-mathys.io: could not connect to host
-matillat.ovh: could not connect to host
+matillat.ovh: did not receive HSTS header
matlabjo.ir: could not connect to host
matmessages.com: did not receive HSTS header
matomeplus.co: could not connect to host
@@ -13938,30 +14391,34 @@ matrip.de: could not connect to host
matrix.ac: did not receive HSTS header
matrixcheats.net: could not connect to host
matsu-walk.com: could not connect to host
-matsuz.com: did not receive HSTS header
+matsuz.com: could not connect to host
matt.tf: did not receive HSTS header
mattandreko.com: did not receive HSTS header
mattbagley.me: did not receive HSTS header
mattdbarton.com: could not connect to host
matterconcern.com: could not connect to host
+mattessons.co.uk: could not connect to host
matthew-carson.info: could not connect to host
matthewchapman.co.uk: did not receive HSTS header
matthewemes.com: did not receive HSTS header
+matthewgallagher.co.uk: could not connect to host
+matthewgrow.com: did not receive HSTS header
matthewprenger.com: could not connect to host
matthewtester.com: did not receive HSTS header
matthiasadler.info: did not receive HSTS header
+matthiasheil.de: did not receive HSTS header
matthiassteen.be: could not connect to host
-matthiasweiler.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+matthiasweiler.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mattia98.org: did not receive HSTS header
mattisam.com: did not receive HSTS header
mattressinsider.com: max-age too low: 3153600
mattwb65.com: could not connect to host
matty.digital: did not receive HSTS header
-matze.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+matze.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
maultrom.ml: could not connect to host
maupiknik.com: did not receive HSTS header
maur.cz: did not receive HSTS header
-maurice-walker.com: could not connect to host
+mauricioquadradofotografia.com.br: did not receive HSTS header
maurus-automation.de: did not receive HSTS header
mausi.co: did not receive HSTS header
mavisang.cf: could not connect to host
@@ -13984,7 +14441,6 @@ maxkeller.io: did not receive HSTS header
maxmachine.ind.br: could not connect to host
maxserver.com: did not receive HSTS header
maxwellflynn.com: did not receive HSTS header
-may24.tw: could not connect to host
maya-ro.com: could not connect to host
maya.mg: could not connect to host
maybeul.com: could not connect to host
@@ -13994,6 +14450,7 @@ maynardnetworks.com: could not connect to host
mayoimobiliare.ro: could not connect to host
mayoristassexshop.com: did not receive HSTS header
mazternet.ru: could not connect to host
+mazurlabs.tk: did not receive HSTS header
mazyun.com: did not receive HSTS header
mazz-tech.com: could not connect to host
mbconsultancy.nu: could not connect to host
@@ -14002,7 +14459,6 @@ mbilker.us: did not receive HSTS header
mbits.solutions: did not receive HSTS header
mbmcatering.com: did not receive HSTS header
mbp.banking.co.at: could not connect to host
-mburns.duckdns.org: could not connect to host
mbweir.com: could not connect to host
mbwemmel-usedcars.be: could not connect to host
mc4free.cc: could not connect to host
@@ -14018,7 +14474,8 @@ mcdonalds.ru: did not receive HSTS header
mcga.media: could not connect to host
mcgarderen.nl: max-age too low: 0
mcgavocknissanwichitaparts.com: could not connect to host
-mchan.us: did not receive HSTS header
+mchan.us: could not connect to host
+mchopkins.net: could not connect to host
mchuiji.com: could not connect to host
mcideas.tk: could not connect to host
mcit.gov.ws: did not receive HSTS header
@@ -14040,33 +14497,117 @@ mctherealm.net: could not connect to host
mcuong.tk: could not connect to host
md-student.com: did not receive HSTS header
mdazo.net: could not connect to host
-mdbouncycastlehirelondon.co.uk: did not receive HSTS header
+mdbouncycastlehirelondon.co.uk: could not connect to host
mdcloudpracticesolutions.com: could not connect to host
-mdcloudps.com: could not connect to host
mdfnet.se: did not receive HSTS header
mdg-online.de: did not receive HSTS header
mdoering.de: did not receive HSTS header
mdscomp.net: could not connect to host
mdwftw.com: could not connect to host
+me-center.com: could not connect to host
me-dc.com: could not connect to host
+me-groups.com: could not connect to host
meadowviewfarms.org: could not connect to host
meanevo.com: did not receive HSTS header
measuretwice.com: did not receive HSTS header
meat-education.com: could not connect to host
meathealth.com: could not connect to host
-mebanesteakhouse.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mebio.us: could not connect to host
-mecanicadom.com: could not connect to host
+mec0516.com: could not connect to host
+mec0517.com: could not connect to host
+mec0518.com: could not connect to host
+mec0519.com: could not connect to host
+mec0523.com: could not connect to host
+mec0530.com: could not connect to host
+mec0531.com: could not connect to host
+mec0532.com: could not connect to host
+mec0533.com: could not connect to host
+mec0534.com: could not connect to host
+mec0535.com: could not connect to host
+mec0536.com: could not connect to host
+mec0537.com: could not connect to host
+mec0538.com: could not connect to host
+mec0539.com: could not connect to host
+mec0550.com: could not connect to host
+mec0551.com: could not connect to host
+mec0552.com: could not connect to host
+mec0553.com: could not connect to host
+mec0554.com: could not connect to host
+mec0555.com: could not connect to host
+mec0556.com: could not connect to host
+mec0557.com: could not connect to host
+mec0558.com: could not connect to host
+mec0559.com: could not connect to host
+mec0561.com: could not connect to host
+mec0562.com: could not connect to host
+mec0563.com: could not connect to host
+mec0564.com: could not connect to host
+mec0565.com: could not connect to host
+mec0566.com: could not connect to host
+mec0570.com: could not connect to host
+mec0571.com: could not connect to host
+mec0572.com: could not connect to host
+mec0573.com: could not connect to host
+mec0574.com: could not connect to host
+mec0575.com: could not connect to host
+mec0576.com: could not connect to host
+mec0577.com: could not connect to host
+mec0578.com: could not connect to host
+mec0579.com: could not connect to host
+mec0580.com: could not connect to host
+mec0591.com: could not connect to host
+mec0592.com: could not connect to host
+mec0593.com: could not connect to host
+mec0594.com: could not connect to host
+mec0595.com: could not connect to host
+mec0596.com: could not connect to host
+mec0597.com: could not connect to host
+mec0598.com: could not connect to host
+mec0599.com: could not connect to host
+mec0660.com: could not connect to host
+mec0661.com: could not connect to host
+mec0662.com: could not connect to host
+mec0663.com: could not connect to host
+mec0691.com: could not connect to host
+mec0692.com: could not connect to host
+mec0701.com: could not connect to host
+mec0710.com: could not connect to host
+mec0711.com: could not connect to host
+mec0712.com: could not connect to host
+mec0713.com: could not connect to host
+mec0714.com: could not connect to host
+mec0715.com: could not connect to host
+mec0716.com: could not connect to host
+mec0717.com: could not connect to host
+mec0718.com: could not connect to host
+mec0719.com: could not connect to host
+mec0722.com: could not connect to host
+mec0724.com: could not connect to host
+mec0728.com: could not connect to host
+mec0730.com: could not connect to host
+mec0731.com: could not connect to host
+mec0732.com: could not connect to host
+mec0733.com: could not connect to host
+mec0734.com: could not connect to host
+mec0735.com: could not connect to host
+mec0736.com: could not connect to host
+mec0737.com: could not connect to host
+mec0738.com: could not connect to host
+mec0739.com: could not connect to host
+mec0743.com: could not connect to host
+mec0744.com: could not connect to host
+mecanicadom.com: did not receive HSTS header
mecenat-cassous.com: did not receive HSTS header
medallia.io: could not connect to host
meddatix.com: could not connect to host
mede-handover.azurewebsites.net: could not connect to host
medeurope.info: did not receive HSTS header
+medhy.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
medi-link.co.il: did not receive HSTS header
media-access.online: did not receive HSTS header
media-courses.com: could not connect to host
media-service.fr: did not receive HSTS header
-media101.xyz: did not receive HSTS header
+media-soft-pro.ru: did not receive HSTS header
mediabm.jp: did not receive HSTS header
mediacru.sh: could not connect to host
mediadandy.com: could not connect to host
@@ -14078,7 +14619,6 @@ mediawikicn.org: could not connect to host
medicinskavranje.edu.rs: could not connect to host
medienservice-fritz.de: did not receive HSTS header
medifab.online: did not receive HSTS header
-medik8.com.cy: did not receive HSTS header
medireport.fr: max-age too low: 0
medirich.co: could not connect to host
meditek-dv.ru: did not receive HSTS header
@@ -14095,16 +14635,16 @@ medtankers.management: did not receive HSTS header
medy-me.com: could not connect to host
meedoennoordkop.nl: could not connect to host
meedoenzaanstad.nl: did not receive HSTS header
+meehle.com: did not receive HSTS header
meeko.cc: could not connect to host
meet: could not connect to host
meetfinch.com: could not connect to host
-meetmibaby.co.uk: could not connect to host
mega-aukcion.ru: could not connect to host
mega-feeling.de: could not connect to host
mega-key.eu: could not connect to host
+mega1.me: did not receive HSTS header
megablogging.org: could not connect to host
megadrol.com: could not connect to host
-megafilmesplay.net: did not receive HSTS header
megaflix.nl: could not connect to host
megakiste.de: could not connect to host
megam.host: could not connect to host
@@ -14113,14 +14653,17 @@ megaplonk.com: could not connect to host
megashur.se: could not connect to host
megasslstore.com: did not receive HSTS header
megasystem.cl: did not receive HSTS header
+megauction.tk: could not connect to host
megaxhost.com.br: could not connect to host
meghudson.com: could not connect to host
+mego.cloud: could not connect to host
megustariasaber.com: did not receive HSTS header
+mehhh.xyz: could not connect to host
mehmetakif.edu.tr: did not receive HSTS header
meidens.com: did not receive HSTS header
meifrench.com: could not connect to host
meilleur.xyz: could not connect to host
-meimeistartup.com: could not connect to host
+mein-gehalt.at: could not connect to host
meincloudspeicher.de: did not receive HSTS header
meine-plancha.ch: did not receive HSTS header
meine-reise-gut-versichert.de: did not receive HSTS header
@@ -14128,8 +14671,6 @@ meinebo.it: could not connect to host
meinstartinsleben.com: could not connect to host
meinstartinsleben.de: could not connect to host
meizufans.eu: could not connect to host
-mekatro.tech: could not connect to host
-mekatrotekno.com: could not connect to host
mekongmontessori.com: could not connect to host
melakaltenegger.at: did not receive HSTS header
melangebrasil.com: could not connect to host
@@ -14162,6 +14703,7 @@ memeblast.ninja: could not connect to host
memepasmal.net: could not connect to host
memepasmal.org: could not connect to host
memetrash.co.uk: could not connect to host
+memfrob.org: max-age too low: 0
memind.net: could not connect to host
memory-plus-180.com: could not connect to host
memorygame.io: did not receive HSTS header
@@ -14169,11 +14711,13 @@ memorytrace.space: did not receive HSTS header
menaraannonces.com: could not connect to host
menchez.me: could not connect to host
mengliangyun.xyz: could not connect to host
+mengxin.life: could not connect to host
menhadendefenders.org: did not receive HSTS header
-menhera.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+menhera.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+menkyo-blog.com: did not receive HSTS header
menntagatt.is: did not receive HSTS header
-menotag.com: could not connect to host
-mensagensperfeitas.com.br: did not receive HSTS header
+menotag.com: did not receive HSTS header
+mensagensperfeitas.com.br: could not connect to host
mensmaximus.de: did not receive HSTS header
mentalhealth.gov: did not receive HSTS header
mentax.net: did not receive HSTS header
@@ -14182,10 +14726,11 @@ menthix.net: could not connect to host
mentorithm.com: could not connect to host
mentz.info: did not receive HSTS header
menu.fyi: could not connect to host
+menudieta.com: could not connect to host
menudrivetest.com: could not connect to host
menuel.me: could not connect to host
menuiserie-berard.com: did not receive HSTS header
-menzaijia.com: could not connect to host
+menzaijia.com: did not receive HSTS header
menzel-motors.com: did not receive HSTS header
meow.cloud: could not connect to host
meozcraft.com: could not connect to host
@@ -14201,17 +14746,18 @@ mergozzo.com: did not receive HSTS header
meridianstore.com.br: could not connect to host
merimatka.fi: could not connect to host
meritz.rocks: could not connect to host
-merloat.club: did not receive HSTS header
-merloat.com: did not receive HSTS header
+merloat.club: could not connect to host
+merloat.com: could not connect to host
+mers.one: could not connect to host
mersinunivercity.com: could not connect to host
merson.me: could not connect to host
+merson.org: could not connect to host
mertak.cz: did not receive HSTS header
meshlab.co: could not connect to host
meshotes.com: max-age too low: 8640000
meskdeals.com: could not connect to host
mesmoque.com: could not connect to host
messagescelestes.ca: did not receive HSTS header
-messenger.co.tz: could not connect to host
mestr.es: did not receive HSTS header
meta.sc: did not receive HSTS header
metadatawiki.com: did not receive HSTS header
@@ -14219,6 +14765,7 @@ metadistribution.com: could not connect to host
metagrader.com: could not connect to host
metanic.org: did not receive HSTS header
metavetted.com: could not connect to host
+meteo-r.ovh: could not connect to host
meteosherbrooke.com: could not connect to host
meteosky.net: did not receive HSTS header
metikam.pl: did not receive HSTS header
@@ -14240,8 +14787,8 @@ meupedido.online: did not receive HSTS header
meusigno.com: could not connect to host
mexbt.com: could not connect to host
mexicanbusinessweb.mx: could not connect to host
-mexicansbook.ru: could not connect to host
-mexicodental.co: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mexicansbook.ru: did not receive HSTS header
+mexicodental.co: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mexior.nl: could not connect to host
meyeraviation.com: could not connect to host
meyerburger.com: did not receive HSTS header
@@ -14252,39 +14799,39 @@ mfcatalin.com: could not connect to host
mfedderke.com: could not connect to host
mfgod.com: did not receive HSTS header
mfgusa.com: could not connect to host
-mfiles.pl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mfiles.pl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mfpccprod.com: could not connect to host
mfrsgb45.org: did not receive HSTS header
mft.global: could not connect to host
mfxer.com: could not connect to host
mfxxx.cn: could not connect to host
mfz.mk: did not receive HSTS header
-mgcraft.net: could not connect to host
mgdigital.fr: did not receive HSTS header
mgiay.com: did not receive HSTS header
mgknet.com: did not receive HSTS header
-mgoessel.de: could not connect to host
+mgoessel.de: did not receive HSTS header
mh-bloemen.co.jp: could not connect to host
mhdsyarif.com: did not receive HSTS header
mhealthdemocamp.com: could not connect to host
-mhertel.com: did not receive HSTS header
+mhertel.com: could not connect to host
mhict.nl: could not connect to host
mhmfoundationrepair.com: could not connect to host
mht-travel.com: could not connect to host
mhx.pw: could not connect to host
+miamaibaum.com: did not receive HSTS header
miamicityballet.org: did not receive HSTS header
mianfei-vpn.com: could not connect to host
+miaonagemi.com: could not connect to host
miaoubox.com: did not receive HSTS header
miasarafina.de: could not connect to host
miboulot.com: could not connect to host
micaiahparker.com: could not connect to host
micasamgmt.com: did not receive HSTS header
micelius.com: could not connect to host
-michael-schilling.de: did not receive HSTS header
michaeldemuth.com: could not connect to host
michaeleichorn.com: could not connect to host
michaelfitzpatrickruth.com: could not connect to host
-michaeliscorp.com: could not connect to host
+michaelklos.nl: could not connect to host
michaelmorpurgo.com: did not receive HSTS header
michaeln.net: did not receive HSTS header
michaels-homepage-service.de: could not connect to host
@@ -14298,8 +14845,7 @@ michal-kral.cz: could not connect to host
michalborka.cz: could not connect to host
michalinastrzyz.xyz: could not connect to host
michalkral.tk: could not connect to host
-michalp.pl: could not connect to host
-michalpodraza.pl: could not connect to host
+michalp.pl: did not receive HSTS header
michalvasicek.cz: could not connect to host
michasfahrschule.com: could not connect to host
michel.pt: did not receive HSTS header
@@ -14311,14 +14857,15 @@ micro-dv.ru: could not connect to host
micro-rain-systems.com: did not receive HSTS header
microblading.pe: could not connect to host
microdesic.com: could not connect to host
-microlinks.org: could not connect to host
+microlinks.org: did not receive HSTS header
microlz.com: did not receive HSTS header
microme.ga: could not connect to host
micropple.net: could not connect to host
microtalk.org: could not connect to host
-middletowndelcopa.gov: could not connect to host
+middletowndelcopa.gov: did not receive HSTS header
midirs.org: did not receive HSTS header
midonet.org: did not receive HSTS header
+midrandplumber24-7.co.za: could not connect to host
midriversmotorsllc.com: did not receive HSTS header
midweststructuralrepair.com: could not connect to host
midwestwomenworkers.org: could not connect to host
@@ -14361,6 +14908,7 @@ mikhlevich.ru: could not connect to host
miki-boras.de: did not receive HSTS header
mikii.club: could not connect to host
mikk.cz: could not connect to host
+mikkelvej.dk: could not connect to host
mikori.sk: did not receive HSTS header
mikro-inwestycje.co.uk: could not connect to host
miku.be: could not connect to host
@@ -14368,7 +14916,6 @@ miku.cloud: could not connect to host
miku.hatsune.my: could not connect to host
miku.party: could not connect to host
mikumiku.stream: could not connect to host
-mikupic.com: could not connect to host
mikusa.xyz: could not connect to host
mikusinec.com: could not connect to host
mikywow.eu: did not receive HSTS header
@@ -14441,7 +14988,7 @@ millions80.com: could not connect to host
millions81.com: could not connect to host
millions82.com: could not connect to host
millions88.com: did not receive HSTS header
-millions9.com: did not receive HSTS header
+millions9.com: could not connect to host
millions99.com: did not receive HSTS header
milnes.org: did not receive HSTS header
milonga.tips: could not connect to host
@@ -14461,6 +15008,8 @@ mindbodytherapymn.com: did not receive HSTS header
mindcell.no: could not connect to host
mindcraft.ga: could not connect to host
mindercasso.nl: could not connect to host
+mindfactory.de: could not connect to host
+mindofmedia.dk: did not receive HSTS header
mindsetatx.com: did not receive HSTS header
mindwork.space: could not connect to host
mine.world: could not connect to host
@@ -14477,13 +15026,14 @@ minecraftforums.gq: could not connect to host
minecraftforums.ml: could not connect to host
minecraftserverz.com: could not connect to host
minecraftvoter.com: could not connect to host
+minenash.com: could not connect to host
mineover.es: could not connect to host
+minepod.fr: did not receive HSTS header
minetude.com: could not connect to host
minf3-games.de: did not receive HSTS header
mingy.ddns.net: could not connect to host
-mingyueli.com: did not receive HSTS header
+mingyueli.com: could not connect to host
minhanossasenhora.com.br: could not connect to host
-mini-piraten.de: did not receive HSTS header
minikneet.nl: did not receive HSTS header
minimaliston.com: could not connect to host
minimoo.se: could not connect to host
@@ -14497,7 +15047,7 @@ minnesotadata.com: could not connect to host
minnesotakinkyyouth.org: could not connect to host
minnesotamathcorps.org: did not receive HSTS header
minobar.com: could not connect to host
-minor.news: could not connect to host
+minor.news: did not receive HSTS header
minora.io: could not connect to host
minoris.se: did not receive HSTS header
minoritywhip.gov: did not receive HSTS header
@@ -14507,10 +15057,12 @@ minttang.cn: could not connect to host
mipiaci.co.nz: did not receive HSTS header
mipiaci.com.au: did not receive HSTS header
mipla.ch: did not receive HSTS header
+mipueblohoy.com: did not receive HSTS header
miragrow.com: did not receive HSTS header
miraste.com.br: did not receive HSTS header
mirazonline.tk: could not connect to host
mirazperu.tk: could not connect to host
+mirco-grams.de: max-age too low: 0
mireillewendling.com.br: could not connect to host
mirete.info: did not receive HSTS header
mirgleich.dnshome.de: could not connect to host
@@ -14530,6 +15082,7 @@ misiondelosangeles-mailing.com: could not connect to host
misiru.jp: could not connect to host
misrv.com: did not receive HSTS header
misskey.site: could not connect to host
+misskey.xyz: could not connect to host
missrain.tw: could not connect to host
missycosmeticos.com.br: could not connect to host
mist.ink: could not connect to host
@@ -14537,8 +15090,9 @@ mister-cooks.fr: could not connect to host
mister.hosting: did not receive HSTS header
misterl.net: did not receive HSTS header
mistine.com.cn: could not connect to host
-mistine.net: could not connect to host
-mita.me: could not connect to host
+mistinecn.com: could not connect to host
+misura.re: could not connect to host
+mit-uns.org: could not connect to host
mitabu.net: did not receive HSTS header
mitarbeiter-pc.de: did not receive HSTS header
mitchellrenouf.ca: could not connect to host
@@ -14551,19 +15105,21 @@ mittenofficesystems.com: could not connect to host
mityinc.com: did not receive HSTS header
miukimodafeminina.com: could not connect to host
mivcon.net: could not connect to host
+mivestuariolaboral.com: did not receive HSTS header
mivzaklive.co.il: did not receive HSTS header
mixer.cash: could not connect to host
mixnshake.com: did not receive HSTS header
-mixtape.moe: could not connect to host
+mixtape.moe: did not receive HSTS header
miya.io: could not connect to host
miyako-kyoto.jp: could not connect to host
miyoshi-kikaku.co.jp: could not connect to host
+miyoshi-kikaku.com: could not connect to host
mizd.at: could not connect to host
mizi.name: could not connect to host
mizumax.me: could not connect to host
mjcaffarattilaw.com: did not receive HSTS header
mjhsc.nl: did not receive HSTS header
-mjlaurindo.pt: could not connect to host
+mjlaurindo.pt: did not receive HSTS header
mk-dizajn.com: could not connect to host
mkacg.com: could not connect to host
mkakh.xyz: could not connect to host
@@ -14577,6 +15133,7 @@ mkplay.io: could not connect to host
mlarte.com: could not connect to host
mlcambiental.com.br: did not receive HSTS header
mlcdn.co: could not connect to host
+mlemay.com: did not receive HSTS header
mlfaw.com: could not connect to host
mlii.net: could not connect to host
mlm-worldwide.de: did not receive HSTS header
@@ -14584,16 +15141,17 @@ mlpchan.net: could not connect to host
mlpepilepsy.org: could not connect to host
mlpvc-rr.ml: did not receive HSTS header
mlrslateroofing.com.au: did not receive HSTS header
+mlsha.cn: did not receive HSTS header
mlsrv.de: could not connect to host
-mm404.com: could not connect to host
+mlvbphotography.com: did not receive HSTS header
mm4447761.com: max-age too low: 0
-mm6957.com: could not connect to host
+mm6957.com: did not receive HSTS header
mma-acareporting.com: did not receive HSTS header
mmaps.ddns.net: could not connect to host
mmarnitz.de: could not connect to host
-mmcc.pe: did not receive HSTS header
mmgazhomeloans.com: could not connect to host
mmilog.hu: could not connect to host
+mmin.us: could not connect to host
mmmaximaliselmeny.hu: could not connect to host
mmmm.com: could not connect to host
mmstick.tk: could not connect to host
@@ -14612,6 +15170,7 @@ mo3.club: could not connect to host
moar.so: did not receive HSTS header
moas.design: did not receive HSTS header
moas.photos: could not connect to host
+mobag.ru: did not receive HSTS header
mobaircon.com: could not connect to host
mobi4.tk: could not connect to host
mobidea.com: did not receive HSTS header
@@ -14635,19 +15194,20 @@ mobmp4.com: could not connect to host
mobmp4.info: could not connect to host
mobot.sg: did not receive HSTS header
mocarps.hk: did not receive HSTS header
+mochanstore.com: did not receive HSTS header
mochiyuki.net: could not connect to host
mochoko.com: could not connect to host
mockmyapp.com: could not connect to host
mocloud.eu: could not connect to host
mocloud.win: could not connect to host
mocsuite.club: could not connect to host
-mocurio.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mocurio.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
modafinil.com: did not receive HSTS header
modafinil.wiki: did not receive HSTS header
modalrakyat.com: could not connect to host
modalrakyat.id: did not receive HSTS header
modaperuimport.com: could not connect to host
-modav.org: did not receive HSTS header
+modav.org: could not connect to host
modded-minecraft-server-list.com: could not connect to host
moddedark.com: could not connect to host
mode-marine.com: could not connect to host
@@ -14660,7 +15220,6 @@ modelsclub.org.ua: could not connect to host
modemagazines.co.uk: could not connect to host
moderatorenpool.org: did not receive HSTS header
moderatortv.de: did not receive HSTS header
-modernapprenticeships.org: did not receive HSTS header
modernibytovytextil.cz: could not connect to host
moderntld.net: could not connect to host
modistryusercontent.com: could not connect to host
@@ -14668,9 +15227,12 @@ modnitsa.info: did not receive HSTS header
mododo.de: could not connect to host
mods-community.de: could not connect to host
mods-pic.de: could not connect to host
+modul21.com: did not receive HSTS header
+moduloseltaladro.com: could not connect to host
modx.by: max-age too low: 31536
modx.io: could not connect to host
modydev.club: could not connect to host
+moe.best: did not receive HSTS header
moe.pe: could not connect to host
moe.wtf: did not receive HSTS header
moe4sale.in: did not receive HSTS header
@@ -14688,25 +15250,28 @@ moen.io: did not receive HSTS header
moenew.top: could not connect to host
moepass.com: could not connect to host
moevenpick-cafe.com: did not receive HSTS header
-moeyoo.net: did not receive HSTS header
-mogooin.com: could not connect to host
+moeyoo.net: could not connect to host
+mogooin.com: did not receive HSTS header
mogry.net: did not receive HSTS header
mohio.co.nz: did not receive HSTS header
moho.kr: could not connect to host
mohs.es: could not connect to host
-moitur.com: did not receive HSTS header
+moitur.com: could not connect to host
mojapraca.sk: could not connect to host
mojefilmy.xyz: could not connect to host
mojnet.eu: did not receive HSTS header
mojnet.net: did not receive HSTS header
+mojomusic.org: could not connect to host
mokadev.com: did not receive HSTS header
-mokeedev.review: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mokeedev.review: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mokken-fabriek.nl: did not receive HSTS header
mokote.com: did not receive HSTS header
mokum-organics.com: could not connect to host
+mold.world: could not connect to host
mols.me: could not connect to host
momento.co.id: did not receive HSTS header
momfulfilled.com: could not connect to host
+momjoyas.com: did not receive HSTS header
mommel.com: did not receive HSTS header
mommelonline.de: could not connect to host
momoka.moe: could not connect to host
@@ -14721,12 +15286,13 @@ mondar.io: could not connect to host
mondedesnovels.com: did not receive HSTS header
mondopoint.com: did not receive HSTS header
mondwandler.de: could not connect to host
+monelephantapois.com: could not connect to host
moneoci.com.br: could not connect to host
moneromerchant.com: could not connect to host
moneseglobal.com: could not connect to host
moneycrownmedia.com: could not connect to host
moneyfactory.gov: did not receive HSTS header
-moneylance.ru: did not receive HSTS header
+moneylance.ru: could not connect to host
mongla168.net: could not connect to host
mongla88.net: could not connect to host
monicabeckstrom.no: did not receive HSTS header
@@ -14750,22 +15316,23 @@ monsecretariat.pro: did not receive HSTS header
montanacures.org: could not connect to host
montanana.com: did not receive HSTS header
montand.com: did not receive HSTS header
+montazer.net: could not connect to host
montenero.pl: did not receive HSTS header
monteurzimmerfrei.de: could not connect to host
+montgomerysoccer.net: could not connect to host
montonicms.com: could not connect to host
moo.pet: did not receive HSTS header
moobo.co.jp: could not connect to host
-moobo.xyz: could not connect to host
+moobo.xyz: did not receive HSTS header
moodforsex.com: could not connect to host
moodifiers.com: could not connect to host
-moodzshop.com: did not receive HSTS header
+moodzshop.com: could not connect to host
moojp.co.jp: could not connect to host
moonagic.io: could not connect to host
moonless.net: could not connect to host
moonlightcapital.ml: could not connect to host
moonloupe.com: could not connect to host
moonrhythm.info: could not connect to host
-moonrhythm.io: did not receive HSTS header
moonysbouncycastles.co.uk: could not connect to host
mooretownrancheria-nsn.gov: did not receive HSTS header
moosemanstudios.com: could not connect to host
@@ -14776,6 +15343,7 @@ moparcraft.org: could not connect to host
moparisthebest.biz: could not connect to host
moparisthebest.info: could not connect to host
moparscape.org: did not receive HSTS header
+mopedpress.com: could not connect to host
moppy.org: could not connect to host
mopsuite.club: could not connect to host
mor.cloud: could not connect to host
@@ -14799,7 +15367,7 @@ mornings.com: did not receive HSTS header
morotech.com.br: did not receive HSTS header
morpheusx.at: could not connect to host
morpheusxaut.net: could not connect to host
-morphy2k.io: max-age too low: 0
+morphy2k.io: did not receive HSTS header
morpork.xyz: could not connect to host
morrodafumacanoticias.com.br: did not receive HSTS header
mortalincarnation.com: did not receive HSTS header
@@ -14811,13 +15379,13 @@ moso.io: did not receive HSTS header
mosos.de: did not receive HSTS header
mosshi.be: could not connect to host
mosstier.com: did not receive HSTS header
+mostcomfortableworkboots.net: did not receive HSTS header
mostholynameofjesus.org: max-age too low: 604800
mostlikelyto.fail: did not receive HSTS header
mostlyharmless.at: could not connect to host
mostlyinfinite.com: did not receive HSTS header
mostlyoverhead.com: could not connect to host
mostwuat.com: could not connect to host
-motekrysen.com: did not receive HSTS header
motherbase.io: could not connect to host
motherboard.services: could not connect to host
motionfreight.com: could not connect to host
@@ -14828,10 +15396,9 @@ motorbiketourhanoi.com: could not connect to host
motorcheck.ie: did not receive HSTS header
motornomaslo.bg: did not receive HSTS header
motoroilinfo.com: did not receive HSTS header
-motovated.co.nz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mottvd.com: could not connect to host
moube.fr: could not connect to host
-moudicat.com: could not connect to host
+moudicat.com: max-age too low: 6307200
moula.com.au: did not receive HSTS header
moumaobuchiyu.com: could not connect to host
mountainadventureseminars.com: did not receive HSTS header
@@ -14847,8 +15414,9 @@ movestub.com: did not receive HSTS header
movie-cross.net: did not receive HSTS header
movie4k.fyi: could not connect to host
movie4k.life: could not connect to host
+movie4kto.site: could not connect to host
movieboost.nl: could not connect to host
-moviedeposit.com: could not connect to host
+moviedeposit.com: did not receive HSTS header
moviedollars.com: did not receive HSTS header
movienang.com: max-age too low: 0
movienized.de: did not receive HSTS header
@@ -14857,6 +15425,7 @@ moviesabout.net: could not connect to host
moviespur.info: did not receive HSTS header
moving-pixtures.de: could not connect to host
movingoklahoma.org: could not connect to host
+movingtojapan.life: could not connect to host
movio.ga: could not connect to host
mowalls.net: could not connect to host
moyer.pub: did not receive HSTS header
@@ -14869,7 +15438,7 @@ mozgb.ru: could not connect to host
mozillians.org: did not receive HSTS header
mozoa.net: could not connect to host
mozzilla.cz: could not connect to host
-mp3donusturucu.com: did not receive HSTS header
+mp3donusturucu.com: could not connect to host
mp3donusturucu.net: did not receive HSTS header
mp3juices.is: could not connect to host
mpe.org: did not receive HSTS header
@@ -14884,7 +15453,8 @@ mpnpokertour.com: did not receive HSTS header
mpodraza.pl: could not connect to host
mpreserver.com: could not connect to host
mpserver12.org: could not connect to host
-mpu-giessen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mpu-giessen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mpublicidad.com: did not receive HSTS header
mpy.ovh: could not connect to host
mqas.net: could not connect to host
mr-coffee.net: could not connect to host
@@ -14896,14 +15466,13 @@ mr3.io: could not connect to host
mrafrohead.com: could not connect to host
mrawe.com: could not connect to host
mrazek.biz: did not receive HSTS header
-mrbmafrica.com: did not receive HSTS header
mrburtbox.com: could not connect to host
mrdani.net: could not connect to host
mrdleisure.co.uk: could not connect to host
-mredsanders.net: did not receive HSTS header
mrettich.org: did not receive HSTS header
mrgasfires.co.uk: did not receive HSTS header
mrgiveaways.com: did not receive HSTS header
+mrhc.ru: could not connect to host
mrizzio.com: could not connect to host
mrksk.com: could not connect to host
mrliu.me: could not connect to host
@@ -14913,18 +15482,21 @@ mrnonz.com: max-age too low: 0
mrpopat.in: did not receive HSTS header
mrpropop.com: did not receive HSTS header
mruganiepodspacja.pl: could not connect to host
+ms-a.at: max-age too low: 0
ms-alternativ.de: did not receive HSTS header
msc-seereisen.net: could not connect to host
mscenter.cf: could not connect to host
msgallery.tk: could not connect to host
mshemailmarketer.com.au: could not connect to host
msno.no: max-age too low: 7889238
-msopopop.cn: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+msopopop.cn: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
msp66.de: could not connect to host
mstd.tokyo: did not receive HSTS header
mstdn-tech.jp: could not connect to host
+mstdn.club: did not receive HSTS header
mstdn.fr: did not receive HSTS header
mstdn.nl: could not connect to host
+mstdn.vodka: could not connect to host
mstiles92.com: could not connect to host
msv-limpezas.pt: could not connect to host
msz-fotografie.de: could not connect to host
@@ -14932,19 +15504,19 @@ mszaki.com: did not receive HSTS header
mt.me.uk: could not connect to host
mtamaki.com: could not connect to host
mtau.com: max-age too low: 2592000
-mtcq.jp: could not connect to host
+mtb.wtf: could not connect to host
mtd.ovh: could not connect to host
mtdn.jp: could not connect to host
mtfgnettoyage.fr: could not connect to host
mtg-esport.de: did not receive HSTS header
mtg-tutor.de: did not receive HSTS header
-mtinz.com: could not connect to host
mtirc.co: could not connect to host
mtn.cc: could not connect to host
mtnz.co.za: could not connect to host
mtr.md: could not connect to host
-mu3on.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mu3on.com: could not connect to host
muahahahaha.co.uk: could not connect to host
+muctool.de: did not receive HSTS header
mud-status.de: did not receive HSTS header
mudgezero.one: could not connect to host
muel.io: could not connect to host
@@ -14956,7 +15528,6 @@ mujadin.se: did not receive HSTS header
mujemail.ml: could not connect to host
mukyu.moe: could not connect to host
mulenvo.com: did not receive HSTS header
-mullen.net.au: did not receive HSTS header
multiplexcy.com: could not connect to host
multivpn.cn.com: could not connect to host
multivpn.com.de: could not connect to host
@@ -14966,10 +15537,9 @@ multiworldsoftware.com: did not receive HSTS header
multizone.games: could not connect to host
mumei.space: did not receive HSTS header
mundoadulto.com.br: did not receive HSTS header
-mundoalpha.com.br: did not receive HSTS header
+mundoalpha.com.br: could not connect to host
mundodoscarbonos.com.br: did not receive HSTS header
mundogamers.top: could not connect to host
-mundoperfecto.net: did not receive HSTS header
munecoscabezones.com: did not receive HSTS header
munich-rage.de: did not receive HSTS header
munirajiwa.com: could not connect to host
@@ -14982,7 +15552,7 @@ muoivancauhoivisao.com: could not connect to host
muonium.ch: could not connect to host
murdercube.com: could not connect to host
murfy.kiwi: could not connect to host
-murgi.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+murgi.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
muriburi.land: could not connect to host
muriburiland.com: could not connect to host
murodese.org: could not connect to host
@@ -15002,22 +15572,21 @@ mushman.tk: could not connect to host
mushroomandfern.com: could not connect to host
musi.cx: could not connect to host
musicaconleali.it: did not receive HSTS header
-musiccitycats.com: did not receive HSTS header
+musicalsoulfood.com: did not receive HSTS header
musikkfondene.no: did not receive HSTS header
musikzug-bookholzberg.de: did not receive HSTS header
-musique2nuit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
muslimbanter.co.za: could not connect to host
musselsblog.com: could not connect to host
mustafa.space: did not receive HSTS header
-mustika.cf: did not receive HSTS header
+mustardking.me: did not receive HSTS header
+mustika.cf: could not connect to host
mutamatic.com: could not connect to host
-mutantmonkey.in: could not connect to host
-mutantmonkey.info: could not connect to host
mutantmonkey.sexy: could not connect to host
mutuals.cool: could not connect to host
mutuelle-obligatoire-pme.fr: did not receive HSTS header
muusika.fun: could not connect to host
muusikoiden.net: did not receive HSTS header
+muy.ooo: could not connect to host
muzgra.in: did not receive HSTS header
muzi.cz: could not connect to host
muzykaprzeszladoplay.pl: could not connect to host
@@ -15029,13 +15598,12 @@ mvsecurity.nl: could not connect to host
mwalz.com: could not connect to host
mwohlfarth.de: did not receive HSTS header
mxawei.cn: could not connect to host
-mxdanggui.org: did not receive HSTS header
mxn8.com: could not connect to host
mxp.tw: did not receive HSTS header
my-cdn.de: could not connect to host
my-co.ir: did not receive HSTS header
my-demo.co: could not connect to host
-my-dns.co.il: max-age too low: 2592000
+my-news-portal.ru: did not receive HSTS header
my-owncloud.com: could not connect to host
my-pawnshop.com.ua: could not connect to host
my-plancha.ch: could not connect to host
@@ -15054,26 +15622,32 @@ myaspenheights.com: did not receive HSTS header
mybboard.pl: did not receive HSTS header
mybeautyjobs.de: could not connect to host
myblockchain.cloud: could not connect to host
+mybonfire.com: did not receive HSTS header
mybreastcancerjourney.com: could not connect to host
mybudget.xyz: could not connect to host
mybuilderinlondon.co.uk: did not receive HSTS header
mybusiness.cm: did not receive HSTS header
mycamda.com: could not connect to host
+mycard.moe: could not connect to host
mycarwashers.com: could not connect to host
+mychancekorte.com: did not receive HSTS header
mychocolateweightloss.com: could not connect to host
+myclasscam.com: could not connect to host
+myclasscam.org: could not connect to host
myclientsplus.com: did not receive HSTS header
mycollab.net: could not connect to host
mycolorado.gov: could not connect to host
mycompanion.cz: could not connect to host
+myconnect.cn: did not receive HSTS header
mycontrolmonitor.com: could not connect to host
mycoted.com: did not receive HSTS header
mycreativeartsconsulting.com: could not connect to host
mycuco.it: did not receive HSTS header
-myday.eu.com: could not connect to host
+myday.eu.com: did not receive HSTS header
mydeos.com: could not connect to host
mydigipass.com: did not receive HSTS header
mydjsongbook.com: max-age too low: 3600
-mydmdi.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+mydmdi.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mydnaresults.com: could not connect to host
mydnatest.com: did not receive HSTS header
mydreamlifelab.com: could not connect to host
@@ -15081,13 +15655,14 @@ mydreamshaadi.in: could not connect to host
mydriversedge.com: did not receive HSTS header
mydrone.services: did not receive HSTS header
myeffect.today: did not receive HSTS header
-myeml.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+myeml.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
myepass.bg: could not connect to host
myepass.de: could not connect to host
myfappening.org: could not connect to host
myfdic.gov: could not connect to host
myfishpalace.at: could not connect to host
myfloridacfo.gov: could not connect to host
+myfloridadeferredcomp.com: did not receive HSTS header
myfunworld.de: could not connect to host
mygalgame.com: did not receive HSTS header
mygaysitges.com: could not connect to host
@@ -15097,15 +15672,16 @@ mygov.scot: did not receive HSTS header
mygpsite.com: did not receive HSTS header
mygreatjob.eu: could not connect to host
mygreatjobs.de: could not connect to host
-mygreenrecipes.com: could not connect to host
myhair.asia: did not receive HSTS header
+myhealthreviews.com: did not receive HSTS header
myhloli.com: did not receive HSTS header
myhostvm.com: did not receive HSTS header
-myicare.org: could not connect to host
-myiocc.org: did not receive HSTS header
+myicare.org: did not receive HSTS header
+myiocc.org: could not connect to host
myip.tech: max-age too low: 2592000
mykolab.com: did not receive HSTS header
mykreuzfahrt.de: could not connect to host
+mylife360mag.com: could not connect to host
mylighthost.com: did not receive HSTS header
mylocalsearch.co.uk: did not receive HSTS header
mymed.de: did not receive HSTS header
@@ -15127,17 +15703,16 @@ mynortherngarden.com: did not receive HSTS header
myon.info: did not receive HSTS header
myonlinedating.club: could not connect to host
myonlinevehicleinsurance.com: could not connect to host
+myownconference.net: did not receive HSTS header
mypagella.com: could not connect to host
mypagella.eu: could not connect to host
mypagella.it: could not connect to host
-myparfumerie.at: did not receive HSTS header
+myparfumerie.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
mypcqq.cc: did not receive HSTS header
mypension.ca: could not connect to host
myperfumecollection.com: did not receive HSTS header
myphonebox.de: could not connect to host
myproxy.eu.org: could not connect to host
-mypt3.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-myptsite.com: could not connect to host
mypup.nl: did not receive HSTS header
myqdu.cn: could not connect to host
myqdu.com: could not connect to host
@@ -15148,6 +15723,7 @@ myrig.ru: did not receive HSTS header
myrsa.in: did not receive HSTS header
myruststats.com: could not connect to host
mysa.is: could not connect to host
+mysecretcase.com: did not receive HSTS header
mysecretrewards.com: could not connect to host
mysectools.org: did not receive HSTS header
myseo.ga: could not connect to host
@@ -15162,7 +15738,6 @@ myspa.asia: did not receive HSTS header
mystatus24.com: did not receive HSTS header
mystery-science-theater-3000.de: did not receive HSTS header
mysteryblog.de: did not receive HSTS header
-mysterysear.ch: could not connect to host
mysticplumes.com: did not receive HSTS header
mystown.org: could not connect to host
mysupboard.de: did not receive HSTS header
@@ -15171,7 +15746,6 @@ mythengay.ch: did not receive HSTS header
mythlogic.com: could not connect to host
mythslegendscollection.com: did not receive HSTS header
mytravelblog.de: could not connect to host
-myvpl.com: could not connect to host
mywallets.io: could not connect to host
myweb360.de: did not receive HSTS header
mywebinar.io: could not connect to host
@@ -15183,13 +15757,16 @@ n-x.info: could not connect to host
n0099.cf: did not receive HSTS header
n0rm.ru: could not connect to host
n0s.de: did not receive HSTS header
+n26.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
n2host.eu: could not connect to host
n2x.in: could not connect to host
n3twork.net: could not connect to host
n4l.pw: could not connect to host
n5118.com: could not connect to host
n64chan.me: did not receive HSTS header
-n6957.com: could not connect to host
+n6957.com: did not receive HSTS header
+n8mgt.com: could not connect to host
+n8nvi.com: could not connect to host
na.hn: could not connect to host
naam.me: could not connect to host
naano.org: could not connect to host
@@ -15197,15 +15774,15 @@ naarakah.fr: did not receive HSTS header
nabru.co.uk: did not receive HSTS header
nabu-bad-nauheim.de: did not receive HSTS header
nabytko.cz: could not connect to host
+nac-6.fr: did not receive HSTS header
nacktwanderfreunde.de: did not receive HSTS header
nadia.pt: could not connect to host
+naga.im: could not connect to host
nagajanroshiya.info: could not connect to host
nagaragem.com.br: did not receive HSTS header
nagata.info: did not receive HSTS header
-nagb.gov: could not connect to host
-nagb.org: could not connect to host
naggie.net: could not connect to host
-nagios.by: did not receive HSTS header
+nagios.by: could not connect to host
nagoya-kyuyo.com: could not connect to host
nagrad.tk: could not connect to host
nahura.com: could not connect to host
@@ -15228,6 +15805,7 @@ nallon.com.br: could not connect to host
nalukfitness.com.br: could not connect to host
namacindia.com: did not receive HSTS header
namaho.com: could not connect to host
+namaleaks.com: could not connect to host
namazon.org: could not connect to host
named.ga: could not connect to host
nameme.xyz: could not connect to host
@@ -15237,7 +15815,7 @@ namethissymbol.com: could not connect to host
nami.bo: could not connect to host
nami.exchange: did not receive HSTS header
namikawatetsuji.jp: could not connect to host
-namorico.me: could not connect to host
+namorico.me: did not receive HSTS header
namuwikiusercontent.com: could not connect to host
nan.zone: could not connect to host
nanami.moe: could not connect to host
@@ -15251,6 +15829,7 @@ nanogeneinc.com: could not connect to host
nanokamo.com: did not receive HSTS header
nanollet.org: could not connect to host
nanosingularity.com: could not connect to host
+nanotechtorsion.com: could not connect to host
nanovolt.nl: could not connect to host
nanrenba.net: could not connect to host
nanto.eu: could not connect to host
@@ -15262,17 +15841,16 @@ napolinissanctparts.com: could not connect to host
narach.com: did not receive HSTS header
narada.com.ua: could not connect to host
narduin.xyz: did not receive HSTS header
-narenderchopra.com: could not connect to host
narko.space: could not connect to host
narmos.ch: did not receive HSTS header
-narodsovety.ru: did not receive HSTS header
+narodniki.com: could not connect to host
narviz.com: did not receive HSTS header
nasarawanewsonline.com: could not connect to host
nascio.org: did not receive HSTS header
naseco.se: did not receive HSTS header
nasme.tk: could not connect to host
nasmocopati.com: could not connect to host
-nasosvdom.com.ua: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+nasosvdom.com.ua: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
naspro.ru: could not connect to host
nasralmabrooka.com: did not receive HSTS header
nassi.me: could not connect to host
@@ -15286,8 +15864,8 @@ nataniel-perissier.fr: could not connect to host
natatorium.org: did not receive HSTS header
nate.sh: could not connect to host
nathan.io: could not connect to host
-nathan.ovh: could not connect to host
nathankonopinski.com: could not connect to host
+nathanmfarrugia.com: did not receive HSTS header
nathumarket.com.br: could not connect to host
nationalmall.gov: could not connect to host
nationaltaxprep.com: did not receive HSTS header
@@ -15297,6 +15875,7 @@ natur-udvar.hu: could not connect to host
natural-progesterone.net: could not connect to host
naturalcommission.com: could not connect to host
naturblogg.no: did not receive HSTS header
+nature-et-bio.fr: could not connect to host
nature-shots.net: did not receive HSTS header
naturecoaster.com: did not receive HSTS header
natuterra.com.br: could not connect to host
@@ -15304,12 +15883,11 @@ natuurbehangnederland.nl: could not connect to host
nauck.org: did not receive HSTS header
naudles.me: could not connect to host
naughtytoy.co.uk: could not connect to host
+naut.ca: could not connect to host
nav.jobs: could not connect to host
naval.tf: could not connect to host
-navegos.net: could not connect to host
navenlle.com: could not connect to host
naviaddress.io: did not receive HSTS header
-navigate-it-services.de: did not receive HSTS header
naviteq.eu: could not connect to host
navjobs.com: could not connect to host
navstivime.cz: did not receive HSTS header
@@ -15319,8 +15897,8 @@ nay.moe: could not connect to host
nazigol.com: did not receive HSTS header
nb10000.vip: max-age too low: 0
nba2kqq.com: could not connect to host
-nba669.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-nba686.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+nba669.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+nba686.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
nbb.io: did not receive HSTS header
nbg-ha.de: could not connect to host
nbgrooves.de: could not connect to host
@@ -15329,14 +15907,14 @@ nbl.org.tw: could not connect to host
nbp.com.pk: did not receive HSTS header
nbrain.de: could not connect to host
nbrown.us: could not connect to host
-nbtparse.org: could not connect to host
+nbtparse.org: did not receive HSTS header
nc-network.io: could not connect to host
nc2c.com: could not connect to host
-nc99.co: could not connect to host
+nc99.co: did not receive HSTS header
+nca.ink: could not connect to host
ncaq.net: did not receive HSTS header
ncc60205.info: could not connect to host
ncdesigns-studio.com: did not receive HSTS header
-ncgt.se: could not connect to host
nchristo.com: could not connect to host
ncic.gg: could not connect to host
nclvle.co.uk: did not receive HSTS header
@@ -15352,6 +15930,7 @@ ndatc.com: did not receive HSTS header
ndmath.club: could not connect to host
ndtblog.com: could not connect to host
ndtmarket.place: could not connect to host
+ndum.ch: could not connect to host
ne1home.dyndns.org: did not receive HSTS header
neap.io: could not connect to host
near.st: did not receive HSTS header
@@ -15361,11 +15940,10 @@ nearon.nl: could not connect to host
neat-patch.de: could not connect to host
neavision.de: did not receive HSTS header
nebracy.com: could not connect to host
-nebras.ga: did not receive HSTS header
nebulousenhanced.com: could not connect to host
nebuluxcapital.com: could not connect to host
necesitodinero.org: could not connect to host
-nechiactua.com: could not connect to host
+nechiactua.com: did not receive HSTS header
necio.ca: could not connect to host
nedcf.org.uk: could not connect to host
nediyor.com: did not receive HSTS header
@@ -15376,8 +15954,10 @@ needle.nz: could not connect to host
neels.ch: did not receive HSTS header
neer.io: could not connect to host
neet-investor.biz: could not connect to host
+neffat.si: did not receive HSTS header
neftaly.com: did not receive HSTS header
neftebitum-kngk.ru: did not receive HSTS header
+negativecurvature.net: could not connect to host
negativzinsen.info: did not receive HSTS header
negraelinda.com: did not receive HSTS header
neilgreen.net: did not receive HSTS header
@@ -15386,7 +15966,6 @@ neio.uk: could not connect to host
nejkasy.cz: did not receive HSTS header
nejnamc.org: did not receive HSTS header
neko-life.com: could not connect to host
-neko-nyan.org: could not connect to host
neko.li: could not connect to host
neko.ml: did not receive HSTS header
nekoku.io: could not connect to host
@@ -15398,11 +15977,11 @@ nellacms.org: could not connect to host
nellafw.org: could not connect to host
nellen.it: did not receive HSTS header
nemanja.top: could not connect to host
-nemausus.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+nemausus.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
nemecl.eu: could not connect to host
-nemez.net: did not receive HSTS header
nemno.de: could not connect to host
nemovement.org: could not connect to host
+nengzhen.com.cn: did not receive HSTS header
neoani.me: could not connect to host
neocoding.com: could not connect to host
neocyd.com: could not connect to host
@@ -15414,7 +15993,7 @@ neokobe.city: could not connect to host
neolink.dk: could not connect to host
neonisi.com: could not connect to host
neonnuke.tech: did not receive HSTS header
-neotist.com: did not receive HSTS header
+neotist.com: could not connect to host
neowa.tk: could not connect to host
nephos.xyz: could not connect to host
neppglobal.top: could not connect to host
@@ -15437,7 +16016,7 @@ net-rencontre.com: did not receive HSTS header
net2o.com: did not receive HSTS header
net2o.de: did not receive HSTS header
net2o.net: did not receive HSTS header
-net4it.de: could not connect to host
+net4it.de: did not receive HSTS header
netba.net: could not connect to host
netbox.cc: could not connect to host
netbrief.ml: could not connect to host
@@ -15446,17 +16025,15 @@ netdego.jp: could not connect to host
netducks.space: could not connect to host
netexem.com: did not receive HSTS header
netfs.pl: did not receive HSTS header
-netfxharmonics.com: could not connect to host
+netfxharmonics.com: did not receive HSTS header
netguide.co.nz: did not receive HSTS header
netherwind.eu: did not receive HSTS header
-nethruster.com: did not receive HSTS header
netlilo.com: could not connect to host
netloanusa.com: could not connect to host
netmagik.com: did not receive HSTS header
netresourcedesign.com: could not connect to host
netsafeid.biz: did not receive HSTS header
netscaler.expert: could not connect to host
-netsec.cloud: could not connect to host
netsecma.com: could not connect to host
netsight.org: could not connect to host
netsparkercloud.com: did not receive HSTS header
@@ -15465,9 +16042,11 @@ nettefoundation.com: did not receive HSTS header
nettopower.dk: did not receive HSTS header
nettoyage.email: could not connect to host
nettplusultra-rhone.fr: did not receive HSTS header
+netube.org: could not connect to host
netulo.com: could not connect to host
+netvpn.ml: could not connect to host
+netwaf.com: could not connect to host
networking-groups.co.uk: could not connect to host
-networth.at: did not receive HSTS header
networx-online.de: could not connect to host
netz0.com: could not connect to host
netzbit.de: could not connect to host
@@ -15482,15 +16061,17 @@ neuro-plus-100.com: could not connect to host
neuroethics.com: did not receive HSTS header
neurogroove.info: did not receive HSTS header
neuronasdigitales.com: did not receive HSTS header
-neuronfactor.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+neuronfactor.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
neutralvehicle.com: did not receive HSTS header
nevadafiber.net: could not connect to host
nevalogic.com: could not connect to host
never-afk.de: did not receive HSTS header
neveta.com: could not connect to host
new: could not connect to host
+new.travel.pl: did not receive HSTS header
newantiagingcreams.com: could not connect to host
newbieboss.com: did not receive HSTS header
+newbietech.cn: could not connect to host
newbownerton.xyz: could not connect to host
newburghhistoryblog.com: did not receive HSTS header
newchance.store: could not connect to host
@@ -15501,6 +16082,7 @@ newdeveloper.download: could not connect to host
newedivideo.it: could not connect to host
newfacialbeautycream.com: could not connect to host
newgenerationplus.org: could not connect to host
+newgraphics.by: did not receive HSTS header
newhdmovies.io: could not connect to host
newhoperailroad.com: did not receive HSTS header
newjianzhi.com: could not connect to host
@@ -15512,7 +16094,7 @@ newpoke.net: could not connect to host
newportpropertygroup.com: could not connect to host
news4c.com: did not receive HSTS header
newsa2.com: could not connect to host
-newsaboutgames.de: did not receive HSTS header
+newsaboutgames.de: could not connect to host
newserumforskin.com: could not connect to host
newsquantified.com: max-age too low: 0
newstarnootropics.com: could not connect to host
@@ -15520,7 +16102,6 @@ newtnote.com: could not connect to host
newtonhaus.com: could not connect to host
newtonwarp.com: could not connect to host
nexlab.org: did not receive HSTS header
-nexril.net: max-age too low: 7776000
next-server.eu: could not connect to host
next47.com: did not receive HSTS header
nextads.ch: could not connect to host
@@ -15537,18 +16118,12 @@ nexthop.jp: did not receive HSTS header
nextpages.de: could not connect to host
nextproject.us: could not connect to host
nextshutter.com: did not receive HSTS header
-nexttv.co.il: did not receive HSTS header
nexus-vienna.at: could not connect to host
nexusbyte.de: could not connect to host
nexuscorporation.in: could not connect to host
nezvestice.cz: did not receive HSTS header
nf4.net: did not receive HSTS header
nfhome.be: did not receive HSTS header
-nfl.dedyn.io: could not connect to host
-nfl.duckdns.org: could not connect to host
-nfls.io: did not receive HSTS header
-nflsic.org: could not connect to host
-nfluence.org: could not connect to host
nfo.so: could not connect to host
nfrost.me: could not connect to host
ng-firewall.com: did not receive HSTS header
@@ -15564,17 +16139,18 @@ ngocuong.net: could not connect to host
ngt-service.ru: could not connect to host
ngtoys.com.br: could not connect to host
nhccnews.org: could not connect to host
+nhgteam.hu: could not connect to host
nhliberty.org: did not receive HSTS header
nhsuites.com: did not receive HSTS header
niallator.com: could not connect to host
nibiisclaim.com: could not connect to host
+nibouw.nl: could not connect to host
nice.im: did not receive HSTS header
nicestresser.fr: could not connect to host
nickcleans.co.uk: could not connect to host
-nickdekruijk.nl: could not connect to host
nicklord.com: could not connect to host
nickmertin.ca: did not receive HSTS header
-nickscomputers.nl: could not connect to host
+nickx.cn: did not receive HSTS header
nicky.io: did not receive HSTS header
nico.one: did not receive HSTS header
nico.today: could not connect to host
@@ -15583,10 +16159,12 @@ nicolaeiotcu.ro: could not connect to host
nicolaelmer.ch: did not receive HSTS header
nicolasbettag.me: did not receive HSTS header
nicolasdutour.com: did not receive HSTS header
-nicolashess.de: could not connect to host
-nicolasklotz.de: could not connect to host
+nicolashess.de: did not receive HSTS header
+nicolasklotz.de: did not receive HSTS header
nicoleoquendo.com: max-age too low: 2592000
+niconico.ooo: could not connect to host
niconiconi.xyz: could not connect to host
+niconode.com: could not connect to host
nicoobook.net: did not receive HSTS header
nicorevin.ru: could not connect to host
nidux.com: did not receive HSTS header
@@ -15606,6 +16184,7 @@ niffler.software: could not connect to host
nifpnet.nl: could not connect to host
nifume.com: could not connect to host
nigger.racing: could not connect to host
+night2stay.com: did not receive HSTS header
nightbutterflies.com: did not receive HSTS header
nightfirecat.com: could not connect to host
nightmoose.org: did not receive HSTS header
@@ -15614,10 +16193,12 @@ nightwinds.tk: could not connect to host
nigt.cf: could not connect to host
nihilistan.tk: could not connect to host
niho.jp: did not receive HSTS header
+nihon-no-sake.net: did not receive HSTS header
nii2.org: could not connect to host
nikavandenbos.nl: did not receive HSTS header
nikcub.com: did not receive HSTS header
niki.ai: did not receive HSTS header
+nikitashevchenko.com: did not receive HSTS header
nikksno.io: could not connect to host
niklas.host: could not connect to host
niklasanderson.com: did not receive HSTS header
@@ -15627,13 +16208,14 @@ nikolaichik.photo: did not receive HSTS header
nikolasbradshaw.com: could not connect to host
nikz.in: did not receive HSTS header
nilianwo.com: could not connect to host
+niloxy.com: could not connect to host
ninchisho-online.com: did not receive HSTS header
ninebytes.xyz: could not connect to host
-ninetailed.ninja: could not connect to host
+ninetailed.ninja: did not receive HSTS header
ning.so: did not receive HSTS header
ninhs.org: could not connect to host
ninjaspiders.com: could not connect to host
-ninofink.com: could not connect to host
+ninreiei.jp: could not connect to host
niouininon.eu: could not connect to host
nippler.org: could not connect to host
nippombashi.net: did not receive HSTS header
@@ -15642,11 +16224,12 @@ nipponcareers.com: could not connect to host
nirada.info: could not connect to host
nirjharstudio.com: did not receive HSTS header
nirna.io: did not receive HSTS header
+nirudo.me: could not connect to host
nishaswonderland.be: did not receive HSTS header
nishaswonderland.nl: did not receive HSTS header
nishikino-maki.com: could not connect to host
nishisbma.com: could not connect to host
-nitaonline.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+nitaonline.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
nitix.games: could not connect to host
niva.synology.me: could not connect to host
niveldron.com: could not connect to host
@@ -15672,8 +16255,9 @@ nmgb.ml: could not connect to host
nmsinusdoc.com: did not receive HSTS header
nmsnj.com: did not receive HSTS header
nmueller.at: could not connect to host
-nn6957.com: could not connect to host
-nn78.com: did not receive HSTS header
+nn6957.com: did not receive HSTS header
+nn78.com: could not connect to host
+nnkkserver02.ddns.net: could not connect to host
nnote.net: did not receive HSTS header
nnqc.nl: max-age too low: 0
nnya.cat: could not connect to host
@@ -15691,7 +16275,6 @@ nodechate.xyz: could not connect to host
nodecompat.com: did not receive HSTS header
nodefiles.com: did not receive HSTS header
nodefoo.com: could not connect to host
-nodelia.com: could not connect to host
nodepanel.net: did not receive HSTS header
nodeselect.com: did not receive HSTS header
nodesonic.com: could not connect to host
@@ -15711,21 +16294,22 @@ noisetor.net: could not connect to host
nojestorget.se: did not receive HSTS header
nojobook.com: could not connect to host
nojok.es: could not connect to host
-nokia.la: could not connect to host
nolag.host: could not connect to host
-nolatepayments.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+nolatepayments.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
nolberg.net: could not connect to host
nolimits.net.nz: could not connect to host
nolimitsbook.de: did not receive HSTS header
nolte.work: could not connect to host
-nomoondev.azurewebsites.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+nomoondev.azurewebsites.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
nomorebytes.de: could not connect to host
+nonametheme.com: could not connect to host
nonemu.ninja: could not connect to host
-noob-rp.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+noob-rp.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
noobswhatelse.net: could not connect to host
noodlecrave.com: did not receive HSTS header
noodlesandwich.com: did not receive HSTS header
noodleyum.com: could not connect to host
+nook.my: could not connect to host
nootroic.com: did not receive HSTS header
nootropicpedia.com: could not connect to host
nootropicsource.com: did not receive HSTS header
@@ -15746,18 +16330,18 @@ normalady.com: could not connect to host
normanschwaneberg.de: did not receive HSTS header
norrkemi.se: could not connect to host
north.supply: could not connect to host
+northcountykiaparts.com: could not connect to host
northcutt.com: did not receive HSTS header
northernmuscle.ca: could not connect to host
northernpage.com: did not receive HSTS header
northwest-events.co.uk: could not connect to host
northwoodsfish.com: could not connect to host
-norys-escape.de: could not connect to host
nosbenevolesontdutalent.com: could not connect to host
nosecretshop.com: could not connect to host
nosfermiers.com: could not connect to host
nospoint.cz: could not connect to host
nosproduitsdequalite.fr: did not receive HSTS header
-nossasenhoradaconceicao.com.br: could not connect to host
+nossasenhoradaconceicao.com.br: did not receive HSTS header
nostosh.eu.org: could not connect to host
nostraspace.com: could not connect to host
nosuch.blog: did not receive HSTS header
@@ -15811,16 +16395,16 @@ nowall.online: could not connect to host
nowcost.com: could not connect to host
nowitzki.me: could not connect to host
noworrywp.com: could not connect to host
-nowprotein.com: could not connect to host
+nowprotein.com: did not receive HSTS header
nowremindme.com: could not connect to host
noxi.ga: could not connect to host
-noydeen.com: did not receive HSTS header
nozoe.jp: could not connect to host
npm.li: did not receive HSTS header
npol.de: could not connect to host
npool.org: could not connect to host
-nq7.pl: did not receive HSTS header
+nq7.pl: could not connect to host
nqesh.com: could not connect to host
+nqeshreviewer.com: could not connect to host
nrc-gateway.gov: could not connect to host
nrdstd.io: could not connect to host
nrechn.de: could not connect to host
@@ -15839,12 +16423,11 @@ nshost.ro: did not receive HSTS header
nsmail.cn: could not connect to host
nspeaks.com: did not receive HSTS header
nstatic.xyz: could not connect to host
-nstyleintl.ca: did not receive HSTS header
nsure.us: could not connect to host
nsweb.solutions: could not connect to host
ntbs.pro: could not connect to host
ntcoss.org.au: did not receive HSTS header
-nth.sh: could not connect to host
+nth.sh: did not receive HSTS header
ntse.xyz: could not connect to host
ntut.net: could not connect to host
nu-pogodi.net: could not connect to host
@@ -15868,6 +16451,7 @@ nuclearcrimes.com: did not receive HSTS header
nuclearcrimes1.com: did not receive HSTS header
nucleuscore.org: could not connect to host
nudel.ninja: could not connect to host
+nudes.ovh: could not connect to host
nudestpics.com: did not receive HSTS header
nuevaimagenpublicidad.es: did not receive HSTS header
nufla.de: could not connect to host
@@ -15905,14 +16489,15 @@ nutrieduca.com: could not connect to host
nutrienti.eu: did not receive HSTS header
nutrifyyourself.com: could not connect to host
nutritionculture.com: could not connect to host
-nutrivisa.com.br: could not connect to host
nutsandboltsmedia.com: did not receive HSTS header
nuwaterglobal.com: did not receive HSTS header
nvcogct.gov: did not receive HSTS header
nve-qatar.com: did not receive HSTS header
nvlop.xyz: did not receive HSTS header
nwa.xyz: could not connect to host
+nwapproval.com: did not receive HSTS header
nweb.co.nz: could not connect to host
+nwimports.com: did not receive HSTS header
nwork.media: could not connect to host
nwr-waffenbuch.de: did not receive HSTS header
nwshell.com: could not connect to host
@@ -15921,14 +16506,12 @@ nx42.pw: could not connect to host
nxt.sh: did not receive HSTS header
nyanco.space: could not connect to host
nyanpasu.tv: could not connect to host
-nyansparkle.com: did not receive HSTS header
nyatane.com: could not connect to host
nyazeeland.guide: could not connect to host
nycroth.com: could not connect to host
nyesider.org: could not connect to host
nyffo.com: did not receive HSTS header
nyghtus.net: could not connect to host
-nynex.net: could not connect to host
nyored.com: did not receive HSTS header
nyphox.net: could not connect to host
nys-hk.com: could not connect to host
@@ -15947,11 +16530,11 @@ o-rickroll-y.pw: could not connect to host
o0c.cc: could not connect to host
o0o.one: did not receive HSTS header
o0o.st: could not connect to host
-o6957.com: could not connect to host
+o6957.com: did not receive HSTS header
o8b.club: could not connect to host
oaklands.co.za: did not receive HSTS header
oaksbloom.com: could not connect to host
-oanalista.com.br: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+oanalista.com.br: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
oasis-conference.org.nz: could not connect to host
oasis.mobi: could not connect to host
obdolbacca.ru: could not connect to host
@@ -15959,26 +16542,25 @@ oben.pl: did not receive HSTS header
oberam.de: could not connect to host
oberhof.co: could not connect to host
oberhofjuice.com: could not connect to host
-obioncountytn.gov: could not connect to host
objectif-leger.com: did not receive HSTS header
-objetperso.fr: could not connect to host
oblikdom.pro: did not receive HSTS header
oblikdom.ru: did not receive HSTS header
oblondata.io: did not receive HSTS header
obrienlab.com: did not receive HSTS header
obrobka-zdjec.pl: could not connect to host
+obscur.us: could not connect to host
obscuredfiles.com: could not connect to host
obscureware.xyz: could not connect to host
observatory.se: could not connect to host
observer.name: did not receive HSTS header
-obsessharness.com: could not connect to host
obsidianirc.net: could not connect to host
obsydian.org: could not connect to host
+obzoroff.info: did not receive HSTS header
oc-minecraft.com: could not connect to host
-ocad.com.au: did not receive HSTS header
ocapic.com: could not connect to host
-occasion-impro.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+occasion-impro.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
occupymedia.org: could not connect to host
+ocdadmin.com: could not connect to host
ocelot.help: did not receive HSTS header
ochaken.cf: could not connect to host
ochrebridge.com: could not connect to host
@@ -15986,14 +16568,16 @@ ocloudhost.com: could not connect to host
ocmeulebeke.be: did not receive HSTS header
ocponj.gov: could not connect to host
ocrami.us: did not receive HSTS header
-octal.es: could not connect to host
+ocsr.nl: could not connect to host
+octal.es: did not receive HSTS header
octanio.com: did not receive HSTS header
octo.im: could not connect to host
+octocat.ninja: could not connect to host
octod.tk: could not connect to host
octohost.net: did not receive HSTS header
octomist.com: did not receive HSTS header
+octothorpe.ninja: could not connect to host
ocwr.gov: did not receive HSTS header
-oddtime.net: could not connect to host
odeonentertainment.co.uk: could not connect to host
odifi.com: could not connect to host
odin.xxx: could not connect to host
@@ -16004,43 +16588,44 @@ odosblog.de: could not connect to host
odysseyandco.com: could not connect to host
odysseyconservationtrust.com: did not receive HSTS header
oe8.bet: could not connect to host
-of2m.fr: did not receive HSTS header
+oenings.eu: could not connect to host
+oessi.eu: could not connect to host
ofcourselanguages.com: could not connect to host
ofcss.com: did not receive HSTS header
ofer.site: could not connect to host
off-the-clock.us: could not connect to host
-offenedialoge.de: max-age too low: 2592000
+offenedialoge.de: did not receive HSTS header
offersgame.com: could not connect to host
offerstone.cl: could not connect to host
offfbynight.be: could not connect to host
+offgames.io: could not connect to host
offgames.pro: could not connect to host
office-ruru.com: could not connect to host
officeclub.com.mx: did not receive HSTS header
officeprint.co.th: could not connect to host
+offshoot.ie: did not receive HSTS header
offshore-firma.org: could not connect to host
offshore-unternehmen.com: could not connect to host
offshorefirma-gruenden.com: could not connect to host
offtherails.ie: could not connect to host
-offtopic.io: could not connect to host
oficinadocelular.com.br: could not connect to host
ofo2.com: did not receive HSTS header
oganek.ie: could not connect to host
-oganime.com: could not connect to host
+oganime.com: did not receive HSTS header
oggw.us: could not connect to host
ogis.gov: could not connect to host
-ogkw.de: could not connect to host
oglen.ca: could not connect to host
ogogoshop.com: could not connect to host
ogrodywstudniach.pl: did not receive HSTS header
+oh14.de: did not receive HSTS header
ohartl.de: could not connect to host
ohayosoro.me: could not connect to host
ohhdeertrade.com: did not receive HSTS header
ohioag.gov: could not connect to host
-ohiosos.gov: could not connect to host
+ohiosos.gov: did not receive HSTS header
ohling.org: could not connect to host
ohma.ga: did not receive HSTS header
ohnemusik.com: did not receive HSTS header
-ohnonotme.com: could not connect to host
ohohrazi.com: could not connect to host
ohreally.de: could not connect to host
ohyooo.com: could not connect to host
@@ -16058,21 +16643,22 @@ ojls.co: could not connect to host
ojomovies.com: did not receive HSTS header
okanaganrailtrail.ca: max-age too low: 0
okane.love: did not receive HSTS header
+okashi.me: did not receive HSTS header
okchicas.com: did not receive HSTS header
oklahomamoversassociation.org: could not connect to host
oklahomanotepro.com: could not connect to host
-okmx.cloud: did not receive HSTS header
-okmx.de: did not receive HSTS header
okok-rent.com: could not connect to host
okok.rent: could not connect to host
+oktomus.com: did not receive HSTS header
okuscapital.com: did not receive HSTS header
okutama.in.th: could not connect to host
olandiz.com: did not receive HSTS header
olcso-vps-szerver.hu: could not connect to host
oldandyounglesbians.us: did not receive HSTS header
oldenglishsheepdog.com.br: could not connect to host
-oldnoob.de: could not connect to host
+oldnews.news: could not connect to host
oldtimer-trifft-flugplatz.de: did not receive HSTS header
+oleam.org: did not receive HSTS header
oleron.fr: did not receive HSTS header
olgui.net: could not connect to host
olifant.fr: could not connect to host
@@ -16081,10 +16667,9 @@ oliode.tk: could not connect to host
olivlabs.com: could not connect to host
ollehbizev.co.kr: could not connect to host
ollieowlsblog.com: could not connect to host
-ollies.cloud: could not connect to host
+olmmcc.tk: could not connect to host
ols.io: did not receive HSTS header
olswangtrainees.com: could not connect to host
-olygazoo.com: could not connect to host
olympe-transport.fr: did not receive HSTS header
omacostudio.com: could not connect to host
omar.yt: did not receive HSTS header
@@ -16096,29 +16681,31 @@ omifind.com: did not receive HSTS header
ominto.com: max-age too low: 0
omise.co: did not receive HSTS header
ommahpost.com: did not receive HSTS header
+omniasl.com: could not connect to host
omnilab.tech: could not connect to host
omnisafira.com: did not receive HSTS header
omniscimus.net: could not connect to host
omnisky.dk: did not receive HSTS header
omniti.com: did not receive HSTS header
omquote.gq: could not connect to host
-omranic.com: could not connect to host
omskit.ru: could not connect to host
omyogarishikesh.com: did not receive HSTS header
on-te.ch: did not receive HSTS header
+on.tax: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
onazikgu.com: could not connect to host
ondrejhoralek.cz: did not receive HSTS header
+one---line.com: could not connect to host
one-pe.com: did not receive HSTS header
onearth.one: did not receive HSTS header
oneb4nk.com: could not connect to host
oneclickonejob.com: did not receive HSTS header
onecycling.my: could not connect to host
onecycling.world: could not connect to host
-onedot.nl: max-age too low: 10368000
+onedot.nl: could not connect to host
onefour.co: could not connect to host
onefour.ga: could not connect to host
onegoodthingbyjillee.com: did not receive HSTS header
-onehost.blue: could not connect to host
+onehost.blue: did not receive HSTS header
onehourloan.com: could not connect to host
onehourloan.sg: did not receive HSTS header
oneidentity.me: could not connect to host
@@ -16133,6 +16720,7 @@ onepluscamps.com: did not receive HSTS header
onepopstore.com: could not connect to host
onesearay.com: did not receive HSTS header
onespiritinc.com: did not receive HSTS header
+onestepfootcare.com: did not receive HSTS header
onet.space: could not connect to host
onetech.it: could not connect to host
onetly.com: could not connect to host
@@ -16140,28 +16728,28 @@ onewebdev.info: could not connect to host
oneworldbank.com: did not receive HSTS header
onewpst.com: did not receive HSTS header
onguardonline.gov: did not receive HSTS header
-oniichan.us: did not receive HSTS header
+oniichan.us: could not connect to host
onionbot.ga: could not connect to host
onioncloud.org: could not connect to host
-onionplay.live: could not connect to host
+onionplay.live: did not receive HSTS header
onionplay.org: did not receive HSTS header
onionsburg.com: could not connect to host
-onkfaktor.de: could not connect to host
online-bouwmaterialen.nl: did not receive HSTS header
online-casino.eu: did not receive HSTS header
online-consulting-corp.com: could not connect to host
+online-consulting-corp.fr: could not connect to host
online-horoskop.ch: did not receive HSTS header
online-results.dk: did not receive HSTS header
online-scene.com: did not receive HSTS header
online-wetten.de: could not connect to host
online.net.gr: could not connect to host
-onlinebiller.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+onlinebiller.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
onlinebillingform.com: could not connect to host
onlinebizdirect.com: did not receive HSTS header
-onlinecasinoselite.org: did not receive HSTS header
onlinecompliance.org: did not receive HSTS header
-onlinecorners.com: could not connect to host
+onlinecorners.com: did not receive HSTS header
onlinedeposit.us: could not connect to host
+onlinefashion.it: could not connect to host
onlineinfographic.com: could not connect to host
onlinekasino.de: did not receive HSTS header
onlinelighting.com.au: did not receive HSTS header
@@ -16172,7 +16760,7 @@ onlinestoreninjas.com: did not receive HSTS header
onlinewetten.de: could not connect to host
only-roses.co.uk: did not receive HSTS header
only-roses.com: max-age too low: 2592000
-onlyesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+onlyesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
onlyesb.net: could not connect to host
onlylebanon.net: did not receive HSTS header
onlyshopstation.com: did not receive HSTS header
@@ -16180,19 +16768,17 @@ onlyzero.net: could not connect to host
onmuvo.com: could not connect to host
onmyoji.biz: could not connect to host
onnee.ch: could not connect to host
-onnext.cc: did not receive HSTS header
ononpay.com: did not receive HSTS header
onoranze-funebri.biz: could not connect to host
onovlena.dn.ua: could not connect to host
onpatient.com: did not receive HSTS header
onpermit.net: could not connect to host
onsennuie.fr: did not receive HSTS header
-onshuistrust.co.za: did not receive HSTS header
onsite4u.de: could not connect to host
onsitemassageco.com: did not receive HSTS header
onstud.com: could not connect to host
onthe.network: could not connect to host
-ontheboard.com: did not receive HSTS header
+ontheboard.com: could not connect to host
onthecheap.store: could not connect to host
ontheten.org: did not receive HSTS header
ontimestamp.com: did not receive HSTS header
@@ -16213,14 +16799,13 @@ oopsis.com: could not connect to host
oopsmycase.com: could not connect to host
oopsorup.com: could not connect to host
oosoo.org: could not connect to host
-oost.io: could not connect to host
op11.co.uk: could not connect to host
opadaily.com: could not connect to host
opatut.de: did not receive HSTS header
opcaobolsas.com.br: could not connect to host
open-domotics.info: could not connect to host
open-mx.de: could not connect to host
-open-to-repair.fr: could not connect to host
+open-to-repair.fr: max-age too low: 86400
openacademies.com: did not receive HSTS header
openas.org: could not connect to host
openbankproject.com: did not receive HSTS header
@@ -16239,8 +16824,7 @@ openiocdb.com: could not connect to host
openmetals.com: could not connect to host
openmind-shop.de: did not receive HSTS header
openmirrors.cf: could not connect to host
-opennippon.com: could not connect to host
-opennippon.ru: could not connect to host
+openmirrors.ml: could not connect to host
openpresentes.com.br: could not connect to host
openpriv.pw: could not connect to host
openprovider.nl: did not receive HSTS header
@@ -16253,7 +16837,6 @@ openspace.xxx: did not receive HSTS header
opensrd.com: could not connect to host
openssf.org: could not connect to host
opentexon.com: could not connect to host
-opentrash.org: could not connect to host
openxmpp.com: could not connect to host
operad.fr: could not connect to host
operationforever.com: could not connect to host
@@ -16262,13 +16845,13 @@ opim.ca: did not receive HSTS header
opinion8td.com: did not receive HSTS header
opinionicentrifuga.it: could not connect to host
opinionipannolini.it: could not connect to host
-opoleo.com: did not receive HSTS header
oportho.com.br: did not receive HSTS header
oportunidadesemfoco.com.br: could not connect to host
opp.ag: did not receive HSTS header
oppag.com.br: did not receive HSTS header
opperwall.net: could not connect to host
opposer.me: could not connect to host
+oppress.life: did not receive HSTS header
oprbox.com: could not connect to host
opsafewinter.net: could not connect to host
opsbears.com: did not receive HSTS header
@@ -16298,6 +16881,7 @@ optumrxhealthstore.com: could not connect to host
opunch.org: did not receive HSTS header
opure.ml: did not receive HSTS header
opure.ru: did not receive HSTS header
+opus-consulting.no: did not receive HSTS header
oracaodocredo.com.br: could not connect to host
oraculum.cz: did not receive HSTS header
orangefinanse.com.pl: could not connect to host
@@ -16305,7 +16889,7 @@ orangehattech.com: did not receive HSTS header
orangekey.tk: could not connect to host
orangenuts.in: could not connect to host
oranges.tokyo: did not receive HSTS header
-orangetravel.eu: could not connect to host
+orangetravel.eu: did not receive HSTS header
oranic.com: could not connect to host
orbiosales.com: could not connect to host
orbitcom.de: did not receive HSTS header
@@ -16314,27 +16898,28 @@ orbograph-hrcm.com: could not connect to host
ordekho.com: did not receive HSTS header
order.one: could not connect to host
ordereat.fr: could not connect to host
-orderessay.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
orderlounge.de: did not receive HSTS header
+ordoh.com: could not connect to host
ordr.mobi: could not connect to host
ore.cool: could not connect to host
-oref-idf.com: could not connect to host
-oref-idf.net: could not connect to host
-oref-idf.org: could not connect to host
+oref-idf.com: did not receive HSTS header
+oref-idf.net: did not receive HSTS header
+oref-idf.org: did not receive HSTS header
oregonmu.org: could not connect to host
oreka.online: could not connect to host
orelavtomaster.ru: could not connect to host
orfeo-engineering.ch: could not connect to host
organic-superfood.net: could not connect to host
organicae.com: did not receive HSTS header
+organicnature.dk: did not receive HSTS header
organicskincare.com: did not receive HSTS header
organix.ma: did not receive HSTS header
orgatech-gmbh.de: did not receive HSTS header
oricejoc.com: could not connect to host
originalmockups.com: did not receive HSTS header
originalsport.com.br: could not connect to host
-origincoffee.com: did not receive HSTS header
-origincoffee.nz: did not receive HSTS header
+origincoffee.com: could not connect to host
+origincoffee.nz: could not connect to host
orioncustompcs.com: could not connect to host
oriondynamic.be: did not receive HSTS header
orionfcu.com: did not receive HSTS header
@@ -16344,7 +16929,7 @@ orleika.ml: could not connect to host
orovillelaw.com: could not connect to host
oroweatorganic.com: could not connect to host
orro.ro: did not receive HSTS header
-ortho-graz.at: max-age too low: 86400
+orthocop.cz: could not connect to host
orthodoxy.lt: did not receive HSTS header
ortizmario.com: could not connect to host
ortodonciaian.com: did not receive HSTS header
@@ -16355,9 +16940,9 @@ os-chrome.ru: did not receive HSTS header
osaiyuwu.com: could not connect to host
osaka-onakura.com: did not receive HSTS header
oscamp.eu: did not receive HSTS header
-oscarmashauri.com: did not receive HSTS header
+oscarmashauri.com: could not connect to host
oscarproductions.no: did not receive HSTS header
-oscillation-services.fr: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+oscillation-services.fr: could not connect to host
oscloud.com: could not connect to host
oscloud.com.ua: could not connect to host
oscreen.me: could not connect to host
@@ -16367,10 +16952,9 @@ osdls.gov: did not receive HSTS header
osereso.tn: could not connect to host
osha-kimi.com: did not receive HSTS header
oshanko.de: could not connect to host
-oshershalom.com: did not receive HSTS header
oshinagaki.jp: did not receive HSTS header
+osirisrp.online: could not connect to host
oslfoundation.org: did not receive HSTS header
-osmestres.com: did not receive HSTS header
osp.cx: could not connect to host
osprecos.com.br: did not receive HSTS header
osprecos.pt: did not receive HSTS header
@@ -16383,31 +16967,34 @@ osusume-houhou.com: did not receive HSTS header
oswaldmattgroup.com: did not receive HSTS header
osxentwicklerforum.de: max-age too low: 2592000
otako.pl: did not receive HSTS header
-otakucloud.net: did not receive HSTS header
+otakucloud.net: could not connect to host
otakuworld.de: could not connect to host
otakuyun.com: did not receive HSTS header
otchecker.com: could not connect to host
-othercode.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+othercode.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
otherkinforum.com: could not connect to host
-othermedia.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-otherstuff.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+othermedia.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+otherstuff.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
otichi.com: did not receive HSTS header
otinane.eu: could not connect to host
otmns.net: did not receive HSTS header
otmo7.com: did not receive HSTS header
otoblok.com: did not receive HSTS header
-otokonna.com: did not receive HSTS header
+otokonna.com: could not connect to host
otrsdemo.hu: did not receive HSTS header
otsu.beer: could not connect to host
ottospora.nl: could not connect to host
-otus-magnum.com: could not connect to host
+ouac.cn: did not receive HSTS header
+ouaibe.qc.ca: could not connect to host
ouimoove.com: could not connect to host
+ouin.land: did not receive HSTS header
ourbank.com: did not receive HSTS header
ourchoice2016.com: could not connect to host
ourls.win: could not connect to host
ouruglyfood.com: could not connect to host
outdooradventures.pro: could not connect to host
-outdoorhole.com: max-age too low: 6000000
+outdoorchoose.com: did not receive HSTS header
+outdoorhole.com: did not receive HSTS header
outfit-weimar.eu: could not connect to host
outlines.xyz: did not receive HSTS header
outreachbuddy.com: could not connect to host
@@ -16417,11 +17004,11 @@ ouvirmusica.com.br: did not receive HSTS header
ovabag.com: did not receive HSTS header
ovenapp.io: did not receive HSTS header
overceny.cz: did not receive HSTS header
+overmark.net: did not receive HSTS header
override.io: could not connect to host
-overrustle.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+overrustle.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
oversight.io: could not connect to host
overstappen.nl: did not receive HSTS header
-overthecloud.it: could not connect to host
overture.london: did not receive HSTS header
overwall.org: could not connect to host
ovuscloud.de: could not connect to host
@@ -16429,24 +17016,26 @@ ovwane.com: could not connect to host
owall.ml: did not receive HSTS header
owensmith.website: could not connect to host
owl-hakkei.com: did not receive HSTS header
-owlandrabbitgallery.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+owlandrabbitgallery.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
owlscrap.ru: could not connect to host
-owncloud.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+owncloud.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
owncloud.help: did not receive HSTS header
owngeek.com: did not receive HSTS header
ownmovies.fr: could not connect to host
-ownspec.com: could not connect to host
owothisdiz.pw: could not connect to host
+oximo.lviv.ua: did not receive HSTS header
oxro.co: could not connect to host
oxro.io: did not receive HSTS header
-oxt.co: did not receive HSTS header
+oxt.co: could not connect to host
oxygaming.com: did not receive HSTS header
oxygenabsorbers.com: did not receive HSTS header
oxymc.com: did not receive HSTS header
oxynux.fr: could not connect to host
oxynux.xyz: could not connect to host
+oyashirosama.tokyo: could not connect to host
oyesunn.com: could not connect to host
oyste.in: could not connect to host
+ozarktrailcooler.com: could not connect to host
ozonitron.com: did not receive HSTS header
ozonitron.de: did not receive HSTS header
ozonitron.eu: did not receive HSTS header
@@ -16493,29 +17082,30 @@ pacnetwork.io: could not connect to host
pacoda.de: could not connect to host
pactf-flag-4boxdpa21ogonzkcrs9p.com: could not connect to host
pactocore.org: could not connect to host
-pader-deko.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pader-deko.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
padovani.de: did not receive HSTS header
+padrepio.in: did not receive HSTS header
paducaheic.com: could not connect to host
paestbin.com: could not connect to host
pagamentosonline.pt: did not receive HSTS header
page: could not connect to host
pagedesignshop.com: did not receive HSTS header
-pageperform.com: did not receive HSTS header
+pageperform.com: could not connect to host
pagerate.io: could not connect to host
pages-tocaven.com: could not connect to host
pagetoimage.com: could not connect to host
pagina.com.mx: did not receive HSTS header
paginapolitica.ro: did not receive HSTS header
-pagure.org: could not connect to host
pahnid.com: could not connect to host
pahub.io: did not receive HSTS header
paigeglass.com: did not receive HSTS header
-paigejulianne.com: did not receive HSTS header
+paigejulianne.com: could not connect to host
painlessproperty.co.uk: did not receive HSTS header
paino.cloud: could not connect to host
painosso.org: could not connect to host
paint-it.pink: could not connect to host
paintingat.com: could not connect to host
+paintingindurban.co.za: could not connect to host
paintsealdirect.com: did not receive HSTS header
paio2-rec.com: could not connect to host
paio2.com: could not connect to host
@@ -16534,10 +17124,9 @@ palationtrade.com: could not connect to host
palawan.jp: could not connect to host
palazzo.work: could not connect to host
palazzotalamo.it: did not receive HSTS header
-paleolowcarb.de: did not receive HSTS header
paleoself.com: could not connect to host
paleosquawk.com: could not connect to host
-paleotraining.com: did not receive HSTS header
+paleotraining.com: max-age too low: 0
pallas.in: did not receive HSTS header
pallet.io: could not connect to host
palmer.im: could not connect to host
@@ -16553,10 +17142,11 @@ pandapsy.com: could not connect to host
panelomix.net: did not receive HSTS header
pangci.xyz: could not connect to host
panicparts.com: max-age too low: 10540800
+panj.ws: could not connect to host
panjee.com: max-age too low: 0
panjee.fr: could not connect to host
panlex.org: did not receive HSTS header
-panni.me: could not connect to host
+panni.me: did not receive HSTS header
panoma.de: did not receive HSTS header
panomizer.de: did not receive HSTS header
panoranordic.net: could not connect to host
@@ -16565,6 +17155,7 @@ panoti.com: could not connect to host
panoxadrez.com.br: did not receive HSTS header
pansu.space: could not connect to host
pantsu.cat: did not receive HSTS header
+panzerscreen.dk: did not receive HSTS header
pao.ge: could not connect to host
paolo565.org: did not receive HSTS header
papalytics.com: could not connect to host
@@ -16578,12 +17169,12 @@ papercrunch.io: could not connect to host
papermasters.com: did not receive HSTS header
paperwallets.io: could not connect to host
paperwork.co.za: could not connect to host
-paperworld.online: could not connect to host
papierniak.net: could not connect to host
+papiweb.ca: did not receive HSTS header
papotage.net: could not connect to host
papygeek.com: could not connect to host
par-allel.ru: did not receive HSTS header
-parabhairavayoga.com: could not connect to host
+parabhairavayoga.com: did not receive HSTS header
paradiesgirls.ch: could not connect to host
paradigi.com.br: did not receive HSTS header
paradise-engineers.com: could not connect to host
@@ -16596,13 +17187,12 @@ paranoxer.hu: could not connect to host
parav.xyz: did not receive HSTS header
pardnoy.com: could not connect to host
parent5446.us: could not connect to host
-parentmail.co.uk: did not receive HSTS header
parfum-baza.ru: could not connect to host
pariga.co.uk: could not connect to host
paris-cyber.fr: did not receive HSTS header
+paris-store.com: did not receive HSTS header
parisdimanche.com: did not receive HSTS header
parishome.jp: could not connect to host
-parisprovincedemenagements.fr: did not receive HSTS header
parisvox.info: did not receive HSTS header
parithy.net: could not connect to host
parkfans.net: did not receive HSTS header
@@ -16625,6 +17215,7 @@ partiwatch.com: did not receive HSTS header
partner.sh: did not receive HSTS header
partnerbeam.com: could not connect to host
partnerwerk.de: did not receive HSTS header
+party-calendar.net: did not receive HSTS header
partycentrumdebinnenhof.nl: did not receive HSTS header
partyhaus.ovh: could not connect to host
partyhireformby.co.uk: did not receive HSTS header
@@ -16638,6 +17229,7 @@ partyvan.se: could not connect to host
pasadenasandwich.co: did not receive HSTS header
pasadenasandwich.com: did not receive HSTS header
pascal-kannchen.de: did not receive HSTS header
+pascalspoerri.ch: did not receive HSTS header
pasportaservo.org: did not receive HSTS header
passfoto-deinfoto.ch: could not connect to host
passionbyd.com: did not receive HSTS header
@@ -16665,6 +17257,7 @@ pastordocaucaso.com.br: could not connect to host
pastormaremanoabruzes.com.br: could not connect to host
pastorsuico.com.br: could not connect to host
pat-edu.org: could not connect to host
+pataterosviajeros.com: did not receive HSTS header
pataua.kiwi: did not receive HSTS header
paternitydnatest.com: could not connect to host
patfs.com: did not receive HSTS header
@@ -16673,30 +17266,31 @@ patientinsight.net: could not connect to host
patouille-et-gribouille.fr: could not connect to host
patriaco.net: did not receive HSTS header
patrick.dark.name: could not connect to host
-patrick21.ch: could not connect to host
patrickbusch.net: could not connect to host
patrickmcnamara.xyz: did not receive HSTS header
patrickneuro.de: could not connect to host
patrickquinn.ca: did not receive HSTS header
-patrol-x.com: did not receive HSTS header
patt.us: could not connect to host
patterson.mp: could not connect to host
paul-bronski.de: did not receive HSTS header
paul-kerebel.pro: could not connect to host
+paulbakaus.com: could not connect to host
paulbunyanmls.com: did not receive HSTS header
pauldev.co: max-age too low: 0
-paulewen.ca: could not connect to host
+paulewen.ca: did not receive HSTS header
paulomonteiro.pt: could not connect to host
paulpetersen.dk: did not receive HSTS header
paulproell.at: did not receive HSTS header
paulrudge.codes: could not connect to host
paulshir.com: could not connect to host
paulshir.is: could not connect to host
+pauly-stahlhandel.de: could not connect to host
paulyang.cn: did not receive HSTS header
pause-canap.com: did not receive HSTS header
pauspam.net: could not connect to host
-paveljanda.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+paveljanda.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pavelkahouseforcisco.com: did not receive HSTS header
+pavelstriz.cz: could not connect to host
pavio.org: did not receive HSTS header
pawsomebox.co.uk: did not receive HSTS header
paxdei.com.br: could not connect to host
@@ -16704,7 +17298,6 @@ paxwinkel.nl: did not receive HSTS header
pay.gigahost.dk: did not receive HSTS header
pay.ubuntu.com: could not connect to host
pay8522.com: could not connect to host
-paybook.co.tz: could not connect to host
payclixpayments.com: did not receive HSTS header
paydigital.pt: did not receive HSTS header
payfreez.com: could not connect to host
@@ -16712,6 +17305,8 @@ paykings.com: did not receive HSTS header
payload.tech: could not connect to host
payments-reference.org: could not connect to host
payments.google.com: did not receive HSTS header (error ignored - included regardless)
+paymill.com: did not receive HSTS header
+paymill.de: could not connect to host
paymon.tj: could not connect to host
paypod.org: could not connect to host
payroll.ch: could not connect to host
@@ -16732,6 +17327,7 @@ pbscreens.com: could not connect to host
pbytes.com: could not connect to host
pbz.pw: did not receive HSTS header
pc-nf.de: did not receive HSTS header
+pc-servis-brno.com: could not connect to host
pc-tweak.de: did not receive HSTS header
pc9865.com: max-age too low: 0
pcat.io: could not connect to host
@@ -16740,26 +17336,31 @@ pcforum.sk: did not receive HSTS header
pcfun.net: did not receive HSTS header
pchax.net: could not connect to host
pchospital.cc: could not connect to host
-pci-dss.hu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-pcidss.hu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pci-dss.hu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pcidss.hu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pcipac.com: did not receive HSTS header
+pcmobile.tech: could not connect to host
pcreparatiehardenberg.nl: did not receive HSTS header
pcvirusclear.com: could not connect to host
-pcw.gov.ph: could not connect to host
+pd2bans.org: could not connect to host
pdamsidoarjo.co.id: could not connect to host
pdevio.com: could not connect to host
pdf.yt: could not connect to host
pdfsearch.org: could not connect to host
pdomo.me: did not receive HSTS header
+pdragt.com: could not connect to host
pdthings.net: could not connect to host
pe-bank.co.jp: max-age too low: 604800
pe-kyousai.jp: did not receive HSTS header
peaceandwool.com: did not receive HSTS header
+peak-careers.com: did not receive HSTS header
peakapp.nl: could not connect to host
pebblesdemo.com: could not connect to host
peckcloths.com: did not receive HSTS header
pecot.fr: did not receive HSTS header
pedidosfarma.com.br: could not connect to host
+pedrosluiter.nl: did not receive HSTS header
+pedroventura.com: could not connect to host
peekops.com: could not connect to host
peen.ch: could not connect to host
peerherrmann.de: could not connect to host
@@ -16769,17 +17370,17 @@ pehapkari.cz: did not receive HSTS header
peinard.net: could not connect to host
peintrenomade.com: did not receive HSTS header
peirong.me: could not connect to host
-peissen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-peka.pw: could not connect to host
+peissen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+peka.pw: did not receive HSTS header
pekkapikkarainen.fi: did not receive HSTS header
pekkarik.ru: could not connect to host
peliculasaudiolatinoonline.com: could not connect to host
peliculator.com: max-age too low: 0
peliseries24.com: could not connect to host
-pelletizermill.com: did not receive HSTS header
pemagrid.org: could not connect to host
pemberton.at: did not receive HSTS header
penablog.com: did not receive HSTS header
+pengepung.com: did not receive HSTS header
pengisatelier.net: could not connect to host
pengui.uk: could not connect to host
penguinclientsystem.com: did not receive HSTS header
@@ -16791,9 +17392,10 @@ penser-electronique.com: did not receive HSTS header
pension-veldzigt.nl: did not receive HSTS header
pension-waldesruh.de: did not receive HSTS header
pentagram.me: max-age too low: 2592000
-pentano.net: did not receive HSTS header
+pentandra.com: could not connect to host
+pentano.net: could not connect to host
people-mozilla.org: could not connect to host
-peoplerange.com: could not connect to host
+peoplerange.com: did not receive HSTS header
peoplesbankal.com: did not receive HSTS header
peperiot.com: did not receive HSTS header
peppelmedi.fi: could not connect to host
@@ -16818,21 +17420,21 @@ performaterm.ro: could not connect to host
performous.org: did not receive HSTS header
perfumeaz.com: did not receive HSTS header
perfumista.vn: did not receive HSTS header
-periodismoactual.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+perge.com.br: max-age too low: 7889238
+periodismoactual.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
periscopeliveweb.com: could not connect to host
-perlwork.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+perlwork.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
perm-jur.ch: could not connect to host
perm-juridique.ch: could not connect to host
permanence-juridique.com: could not connect to host
permanencejuridique-ge.ch: could not connect to host
permanencejuridique.com: could not connect to host
-permiscoderoute.fr: did not receive HSTS header
pernatie.ru: could not connect to host
peromsik.com: did not receive HSTS header
perplex.nl: did not receive HSTS header
perrau.lt: could not connect to host
perrone.co: could not connect to host
-perroud.pro: could not connect to host
+perroud.pro: max-age too low: 0
persiart.shop: could not connect to host
persjrp.ca: could not connect to host
persoform.ch: could not connect to host
@@ -16852,6 +17454,7 @@ pestkill.info: could not connect to host
pesto.video: could not connect to host
pet-life.top: did not receive HSTS header
pet-nsk.ru: could not connect to host
+pet-tekk.co.uk: could not connect to host
petangen.se: could not connect to host
petchart.net: could not connect to host
peteboc.com: max-age too low: 0
@@ -16866,11 +17469,11 @@ pethub.com: did not receive HSTS header
petit.site: could not connect to host
petlife.od.ua: could not connect to host
petplum.com: could not connect to host
-petrachuk.ru: could not connect to host
petrkrapek.cz: could not connect to host
petrostathis.com: could not connect to host
petrovsky.pro: could not connect to host
petrpikora.com: did not receive HSTS header
+pets4life.com.au: did not receive HSTS header
petsittersservices.com: could not connect to host
pettsy.com: did not receive HSTS header
peuf.shop: could not connect to host
@@ -16885,7 +17488,6 @@ pferdeeinstreu-kaufen.com: did not receive HSTS header
pferdekauf.de: did not receive HSTS header
pfgshop.com.br: could not connect to host
pflegedienst-gratia.de: could not connect to host
-pflegesalon-siebke.de: could not connect to host
pfo.io: could not connect to host
pfolta.net: could not connect to host
pfssales.com: did not receive HSTS header
@@ -16899,8 +17501,8 @@ pgtb.be: could not connect to host
phalconist.com: did not receive HSTS header
phantasie.cc: could not connect to host
pharmacyglobalrx.net: could not connect to host
-pharmafoto.ch: max-age too low: 0
-pharmaphoto.ch: max-age too low: 0
+pharmafoto.ch: did not receive HSTS header
+pharmaphoto.ch: did not receive HSTS header
pharmaquality.com: did not receive HSTS header
phasersec.com: did not receive HSTS header
phattea.tk: could not connect to host
@@ -16908,11 +17510,13 @@ phcmembers.com: could not connect to host
phdhub.it: could not connect to host
phdsupply.com: could not connect to host
phdwuda.com: could not connect to host
+phen-garcinia.info: could not connect to host
phenomeno-porto.com: did not receive HSTS header
phenomeno.nl: did not receive HSTS header
-phenomenoporto.com: did not receive HSTS header
-phenomenoporto.nl: did not receive HSTS header
+phenomenoporto.com: could not connect to host
+phenomenoporto.nl: could not connect to host
phialo.de: did not receive HSTS header
+phil-phillies.com: could not connect to host
philadelphiacandies.com: did not receive HSTS header
philadelphiadancefoundation.org: could not connect to host
philipkohn.com: did not receive HSTS header
@@ -16921,7 +17525,7 @@ philippa.cool: could not connect to host
philippbirkholz.com: could not connect to host
phillippi.me: could not connect to host
phillmoore.com: did not receive HSTS header
-phillprice.com: could not connect to host
+phillprice.com: did not receive HSTS header
phillyinjurylawyer.com: did not receive HSTS header
philonas.net: did not receive HSTS header
philpropertygroup.com: could not connect to host
@@ -16932,6 +17536,7 @@ phligence.com: could not connect to host
phocean.net: did not receive HSTS header
phoebe.co.nz: did not receive HSTS header
phoenicis.com.ua: did not receive HSTS header
+phoenics.de: did not receive HSTS header
phoenix.dj: did not receive HSTS header
phonenumberinfo.co.uk: could not connect to host
phongmay24h.com: could not connect to host
@@ -16943,6 +17548,7 @@ photoboothpartyhire.co.uk: did not receive HSTS header
photographersdaydream.com: could not connect to host
photographyforchange.com: could not connect to host
photographyforchange.org: could not connect to host
+photolium.net: did not receive HSTS header
photon.sh: could not connect to host
photops.fr: could not connect to host
photosoftware.nl: could not connect to host
@@ -16951,9 +17557,10 @@ phototag.org: did not receive HSTS header
php-bach.org: could not connect to host
phpdistribution.com: did not receive HSTS header
phperformances.fr: did not receive HSTS header
-phpfashion.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+phpfashion.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
phpinfo.in.th: could not connect to host
phpkari.cz: could not connect to host
+phpower.com: could not connect to host
phpunit.de: did not receive HSTS header
phr34kz.pw: could not connect to host
phra.gs: could not connect to host
@@ -16964,23 +17571,26 @@ phryanjr.com: could not connect to host
phumin.in.th: did not receive HSTS header
phunehehe.net: did not receive HSTS header
phuong.faith: could not connect to host
+phus.lu: did not receive HSTS header
physicaltherapist.com: did not receive HSTS header
-physicpezeshki.com: did not receive HSTS header
+physicentrix.ca: did not receive HSTS header
pi-box.ml: could not connect to host
pi-eng.fr: did not receive HSTS header
pianetaottica.eu: could not connect to host
pianetaottica.info: could not connect to host
+pianetaottica.it: could not connect to host
pianetaottica.net: could not connect to host
pianetaottica.org: could not connect to host
pias-button.net: could not connect to host
piasto.com.cy: could not connect to host
piatanoua.md: did not receive HSTS header
+pic.sr: could not connect to host
picallo.es: could not connect to host
picardiascr.com: could not connect to host
pickr.co: did not receive HSTS header
-picoauto.com: did not receive HSTS header
+picoauto.com: max-age too low: 0
picone.com.au: could not connect to host
-picotech.com: did not receive HSTS header
+picotech.com: max-age too low: 0
picotronic.biz: could not connect to host
picotronic.de: did not receive HSTS header
picsandtours.com: could not connect to host
@@ -16991,11 +17601,12 @@ pidomex.com: did not receive HSTS header
piedfeed.com: did not receive HSTS header
pieinsurance.com: did not receive HSTS header
piekacz.co.uk: could not connect to host
-pieland.eu: did not receive HSTS header
pieperhome.de: did not receive HSTS header
piercing-store.com: did not receive HSTS header
pierrejeansuau.fr: could not connect to host
+pietechsf.com: did not receive HSTS header
pieterjangeeroms.me: could not connect to host
+pig.name: could not connect to host
piggott.me.uk: did not receive HSTS header
pigritia.de: could not connect to host
piils.fr: did not receive HSTS header
@@ -17007,7 +17618,8 @@ piligrimname.com: could not connect to host
piliszek.net: could not connect to host
pill.id: did not receive HSTS header
pillowandpepper.com: did not receive HSTS header
-pilotcrowd.nl: did not receive HSTS header
+pilot.co: did not receive HSTS header
+pilotcrowd.nl: could not connect to host
pimg136.com: could not connect to host
pimpmymac.ru: did not receive HSTS header
pims.global: did not receive HSTS header
@@ -17021,13 +17633,17 @@ pinkfis.ch: did not receive HSTS header
pinkhq.com: could not connect to host
pinkinked.com: could not connect to host
pinkyf.com: could not connect to host
-pinnacle-tex.com: could not connect to host
+pinnacleallergy.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pinnaclelife.nz: could not connect to host
pinnacles.com: max-age too low: 0
pinner.io: could not connect to host
pinoylinux.org: did not receive HSTS header
pinscher.com.br: could not connect to host
-pintoselectrician.co.za: did not receive HSTS header
+pintosbeeremovals.co.za: could not connect to host
+pintoselectricfencing.co.za: could not connect to host
+pintoselectrician.co.za: could not connect to host
+pintosplumbing.co.za: could not connect to host
+pinup-app.com: could not connect to host
pioche.ovh: did not receive HSTS header
pipocao.com: did not receive HSTS header
pippen.io: could not connect to host
@@ -17044,31 +17660,32 @@ piratelist.online: could not connect to host
piratenlogin.de: could not connect to host
piratepay.io: could not connect to host
piratepay.ir: could not connect to host
+pirateproxy.cc: could not connect to host
pirateproxy.pe: could not connect to host
pirateproxy.sx: did not receive HSTS header
pirateproxy.vip: could not connect to host
pirates.click: did not receive HSTS header
-pirati.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pirati.cz: did not receive HSTS header
piratte.net: did not receive HSTS header
pirganj24.com: did not receive HSTS header
pirlitu.com: did not receive HSTS header
-pirman.es: could not connect to host
pisexy.me: did not receive HSTS header
pisidia.de: could not connect to host
pitchpinecapital.com: could not connect to host
+pitchup.com: did not receive HSTS header
pitonarms.com: could not connect to host
pitsstop.nu: could not connect to host
pittaya.com: did not receive HSTS header
pittmancentertn.gov: could not connect to host
pittmantraffic.co.uk: did not receive HSTS header
pittonpreschool.com: did not receive HSTS header
+piwko.co: could not connect to host
pix-geeks.com: max-age too low: 2592000
pixabay.com: did not receive HSTS header
pixdigital.net: did not receive HSTS header
pixeame.com: could not connect to host
pixel.google.com: did not receive HSTS header (error ignored - included regardless)
pixelcode.com.au: could not connect to host
-pixelcubed.com: could not connect to host
pixelesque.uk: could not connect to host
pixelfou.com: could not connect to host
pixelgliders.de: could not connect to host
@@ -17083,28 +17700,29 @@ pizzabottle.com: did not receive HSTS header
pizzacook.ch: did not receive HSTS header
pizzadoc.ch: could not connect to host
pizzafunny.com.br: could not connect to host
+pizzamc.eu: could not connect to host
pj00100.com: could not connect to host
-pj00200.com: did not receive HSTS header
+pj00200.com: could not connect to host
pj00300.com: did not receive HSTS header
-pj00400.com: did not receive HSTS header
+pj00400.com: could not connect to host
pj00600.com: did not receive HSTS header
-pj00700.com: did not receive HSTS header
-pj00800.com: did not receive HSTS header
+pj00700.com: could not connect to host
+pj00800.com: could not connect to host
pj009.com: could not connect to host
pj00900.com: did not receive HSTS header
pj539999.com: could not connect to host
-pj83.duckdns.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pj83.duckdns.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pj881988.com: could not connect to host
pjbet.mg: could not connect to host
pjili.com: did not receive HSTS header
-pjo.no: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pjo.no: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pjsec.tk: could not connect to host
pkautodesign.com: did not receive HSTS header
pkbjateng.com: could not connect to host
pkbjateng.or.id: could not connect to host
pkschat.com: could not connect to host
plaasprodukte.com: could not connect to host
-placassinal.com.br: did not receive HSTS header
+placassinal.com.br: could not connect to host
placefade.com: could not connect to host
placehold.co: did not receive HSTS header
placollection.org: could not connect to host
@@ -17113,7 +17731,9 @@ plaintray.com: could not connect to host
plakbak.nl: could not connect to host
planbox.info: could not connect to host
planeexplanation.com: could not connect to host
+planer.me: could not connect to host
planet-laas.de: did not receive HSTS header
+planetarian.moe: could not connect to host
planetbeauty.com: did not receive HSTS header
planete-cocoon.com: did not receive HSTS header
planete-secu.com: could not connect to host
@@ -17124,8 +17744,8 @@ planningexcellence.com.au: max-age too low: 86400
planolowcarb.com: could not connect to host
planpharmacy.com: could not connect to host
plant.ml: could not connect to host
-plantdaddie.com: did not receive HSTS header
-plaros.ml: could not connect to host
+plantdaddie.com: could not connect to host
+plantezcheznous.com: did not receive HSTS header
plass.hamburg: could not connect to host
plasti-pac.ch: did not receive HSTS header
plastiflex.it: could not connect to host
@@ -17140,16 +17760,16 @@ play: could not connect to host
play.google.com: did not receive HSTS header (error ignored - included regardless)
playdreamcraft.com.br: did not receive HSTS header
playerhunter.com: did not receive HSTS header
-playerscout.net: could not connect to host
-playflick.com: did not receive HSTS header
+playerscout.net: did not receive HSTS header
+playflick.com: could not connect to host
playhappywheelsunblocked.com: could not connect to host
playkh.com: did not receive HSTS header
playkinder.com: did not receive HSTS header
playmaker.io: could not connect to host
-playmaza.live: could not connect to host
+playmaza.live: did not receive HSTS header
playmei.com: did not receive HSTS header
playmfe.com: could not connect to host
-playpirates.com: could not connect to host
+playpirates.com: did not receive HSTS header
playsoundevents.be: did not receive HSTS header
playsource.co: could not connect to host
playwhyyza.com: could not connect to host
@@ -17160,6 +17780,7 @@ pleasure.forsale: could not connect to host
pleiades.com.tr: did not receive HSTS header
plen.io: could not connect to host
plexi.dyndns.tv: did not receive HSTS header
+plexnet.cz: could not connect to host
plexpy13.ddns.net: could not connect to host
plexusmd.com: did not receive HSTS header
plfgr.eu.org: could not connect to host
@@ -17168,20 +17789,29 @@ plinc.co: did not receive HSTS header
plirt.ru: did not receive HSTS header
plogable.co: could not connect to host
plombirator.kz: did not receive HSTS header
+ploofer.com: did not receive HSTS header
plothost.com: did not receive HSTS header
ploup.net: could not connect to host
+plu-pro.ru: did not receive HSTS header
pluff.nl: did not receive HSTS header
plugboard.xyz: could not connect to host
pluggedhead.com: did not receive HSTS header
-plumbingboksburg.co.za: did not receive HSTS header
+plumbermountedgecombe.co.za: could not connect to host
+plumberumhlangarocks.co.za: could not connect to host
+plumbingboksburg.co.za: could not connect to host
+plumbingglenvista.co.za: could not connect to host
plumbingman.com.au: did not receive HSTS header
+plumnet.ch: could not connect to host
plumplat.com: could not connect to host
+plurr.me: could not connect to host
+plurr.us: could not connect to host
plus-digital.net: could not connect to host
plus-u.com.au: did not receive HSTS header
plus.sandbox.google.com: did not receive HSTS header (error ignored - included regardless)
plus1s.site: could not connect to host
plus1s.tk: could not connect to host
plushev.com: did not receive HSTS header
+plusminus30.si: could not connect to host
plussizereviews.com: could not connect to host
plut.org: did not receive HSTS header
plutonx.com: did not receive HSTS header
@@ -17189,7 +17819,6 @@ plymouthglassgallery.com: did not receive HSTS header
plymouthsoftplay.co.uk: did not receive HSTS header
plzenskybarcamp.cz: did not receive HSTS header
pm13-media.cz: could not connect to host
-pma-iss.com: could not connect to host
pmac.pt: could not connect to host
pmbremer.de: could not connect to host
pmbtf.com: could not connect to host
@@ -17200,7 +17829,7 @@ pmessage.ch: could not connect to host
pmheart.site: could not connect to host
pmnts.io: could not connect to host
pmponline.de: did not receive HSTS header
-pmsacorp.com: did not receive HSTS header
+pms.myiphost.com: could not connect to host
pmsfdev.com: could not connect to host
pnakosoft.com: could not connect to host
pnakosoft.com.au: could not connect to host
@@ -17329,19 +17958,21 @@ pocloud.homelinux.net: could not connect to host
pocobelli.ch: did not receive HSTS header
pocpok.com: could not connect to host
pocqipai.com: could not connect to host
-pocze.ch: did not receive HSTS header
podcast.style: could not connect to host
podiumsdiskussion.org: did not receive HSTS header
podo-podo.com: could not connect to host
poedgirl.com: did not receive HSTS header
poeg.cz: did not receive HSTS header
poezjagala.pl: could not connect to host
-pogetback.pl: could not connect to host
pogs.us: could not connect to host
poinsot.beer: could not connect to host
+pointcab.vn: could not connect to host
+pointclickcare.com: did not receive HSTS header
pointeringles.com: could not connect to host
+pointhost.de: could not connect to host
pointpro.de: did not receive HSTS header
points4unitedway.com: could not connect to host
+pointsgame.net: could not connect to host
pointworksacademy.com: could not connect to host
pokalsocial.de: could not connect to host
pokeduel.me: did not receive HSTS header
@@ -17350,6 +17981,7 @@ pokomichi.com: did not receive HSTS header
pol-expo.ru: could not connect to host
pol.in.th: could not connect to host
polandb2b.directory: could not connect to host
+polar-baer.com: could not connect to host
polar.uk.com: did not receive HSTS header
polarityschule.com: did not receive HSTS header
pole.net.nz: did not receive HSTS header
@@ -17360,13 +17992,13 @@ polimat.org: could not connect to host
polish.directory: could not connect to host
polit-it.pro: could not connect to host
politeiaudesa.org: max-age too low: 2592000
+politicachubut.com.ar: did not receive HSTS header
politically-incorrect.xyz: could not connect to host
politiewervingshop.nl: did not receive HSTS header
politologos.org: could not connect to host
pollet-ghijs.be: could not connect to host
pollet-ghys.be: could not connect to host
pollpodium.nl: could not connect to host
-polly.spdns.org: could not connect to host
poloniex.co.za: did not receive HSTS header
polsport.live: did not receive HSTS header
polycrypt.us: could not connect to host
@@ -17374,8 +18006,10 @@ polyfill.io: did not receive HSTS header
polymorph.rs: could not connect to host
polypho.nyc: could not connect to host
polysage.org: did not receive HSTS header
+polytarian.com: could not connect to host
polytechecosystem.vc: could not connect to host
pomardaserra.com: did not receive HSTS header
+pommetelecom.fr: could not connect to host
pomozmruczkom.pl: could not connect to host
pompefunebrilariviera.it: could not connect to host
pompompoes.com: could not connect to host
@@ -17388,6 +18022,7 @@ pontodogame.com.br: could not connect to host
pontokay.com.br: could not connect to host
pontualcomp.com: could not connect to host
pony.today: could not connect to host
+ponycyclepals.co.uk: could not connect to host
ponythread.com: did not receive HSTS header
ponzi.life: could not connect to host
poochingaround.co.uk: did not receive HSTS header
@@ -17401,6 +18036,7 @@ popkins.ga: could not connect to host
popkins.gq: could not connect to host
popkins.ml: did not receive HSTS header
popkins.tk: could not connect to host
+poppetsphere.de: could not connect to host
popupsoftplay.com: could not connect to host
poris.web.id: did not receive HSTS header
pormat.cl: did not receive HSTS header
@@ -17409,7 +18045,9 @@ porncandi.com: could not connect to host
porniwi.com: could not connect to host
pornofilme.top: could not connect to host
pornskyhub.com: could not connect to host
+pornspider.to: could not connect to host
pornstars.me: did not receive HSTS header
+porondam.lk: did not receive HSTS header
porschen.fr: could not connect to host
port.im: did not receive HSTS header
port.social: could not connect to host
@@ -17427,9 +18065,11 @@ portalplatform.net: could not connect to host
portaluniversalista.org: could not connect to host
portalveneza.com.br: did not receive HSTS header
portalzine.de: did not receive HSTS header
+portofacil.com: did not receive HSTS header
portraitsystem.biz: did not receive HSTS header
portsmoutheic.com: could not connect to host
portvincentcaravanpark.com.au: did not receive HSTS header
+posalji.me: could not connect to host
poshbeyond.com: did not receive HSTS header
poshpak.com: max-age too low: 86400
posijson.stream: could not connect to host
@@ -17441,6 +18081,7 @@ postback.io: could not connect to host
postcardpayment.com: could not connect to host
postcodegarant.nl: could not connect to host
posters.win: could not connect to host
+postn.eu: could not connect to host
postscheduler.org: could not connect to host
postura-corretta.it: did not receive HSTS header
posylka.de: did not receive HSTS header
@@ -17453,7 +18094,7 @@ potomania.cz: could not connect to host
potpourrifestival.de: did not receive HSTS header
potsky.com: did not receive HSTS header
pottreid.com: could not connect to host
-pouet.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pouet.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pouets.ovh: could not connect to host
poupatempo.org: did not receive HSTS header
pour-la-culture-aulnay.fr: did not receive HSTS header
@@ -17477,7 +18118,7 @@ powermatic7.com: max-age too low: 7889238
poweroff.win: could not connect to host
powerplannerapp.com: could not connect to host
powerplaywashers.com: could not connect to host
-powerserg.org: could not connect to host
+powerserg.org: did not receive HSTS header
powersergdatasystems.tk: could not connect to host
powersergthisisthewebsitefuckyouchris.com: could not connect to host
powersergunited.com: could not connect to host
@@ -17486,11 +18127,12 @@ powersergusercontent.com: could not connect to host
powershellmagic.com: could not connect to host
powershift.ne.jp: did not receive HSTS header
powertothebuilder.com: could not connect to host
+powerwashingproslosangeles.com: did not receive HSTS header
powerxequality.com: did not receive HSTS header
poy-tech.com: could not connect to host
pozniak.at: did not receive HSTS header
pozyczka-bez-zaswiadczen.pl: did not receive HSTS header
-pozytywnyplan.pl: did not receive HSTS header
+pozytywnyplan.pl: could not connect to host
pozzitiv.ro: could not connect to host
pozzo-balbi.com: could not connect to host
pp6957.com: could not connect to host
@@ -17499,23 +18141,21 @@ ppiproperties.com: did not receive HSTS header
pppo.gov: could not connect to host
ppr-truby.ru: could not connect to host
ppsvcs2.com: did not receive HSTS header
-ppuu.org: could not connect to host
ppwancai.com: max-age too low: 0
ppy3.com: could not connect to host
pqscript.com: could not connect to host
pr3-space-staging.ga: could not connect to host
-pr3.space: could not connect to host
+practixdevelopment.com: did not receive HSTS header
practodev.com: could not connect to host
-prajwalkoirala.com: could not connect to host
pratinav.xyz: could not connect to host
prattpokemon.com: could not connect to host
-praxis-research.info: could not connect to host
+praxis-research.info: did not receive HSTS header
+prayum.com: could not connect to host
prazeresdavida.com.br: could not connect to host
prazynka.pl: did not receive HSTS header
pre-lean-consulting.de: did not receive HSTS header
precedecaritas.com.br: could not connect to host
preciosde.es: did not receive HSTS header
-precision.st: could not connect to host
precisionaeroimaging.com: did not receive HSTS header
prediksisydney.com: could not connect to host
preexport.com: did not receive HSTS header
@@ -17523,15 +18163,14 @@ preezzie.com: could not connect to host
prefis.com: did not receive HSTS header
prefontaine.name: could not connect to host
prego-shop.de: could not connect to host
-pregono.com: did not receive HSTS header
+pregono.com: could not connect to host
preio.cn: could not connect to host
prekladysanca.cz: could not connect to host
prelist.org: did not receive HSTS header
prelogica.com.br: could not connect to host
+preludes.org: could not connect to host
premaritalsex.info: did not receive HSTS header
prematureacceleration.club: could not connect to host
-premieravenue.net: did not receive HSTS header
-premiumwebdesign.it: could not connect to host
prepandgo-euro.com: could not connect to host
preposted.com: could not connect to host
preppertactics.com: could not connect to host
@@ -17572,22 +18211,24 @@ princepessa.de: did not receive HSTS header
princesparktouch.com: did not receive HSTS header
princessbackpack.de: could not connect to host
princessmargaretlotto.com: did not receive HSTS header
+principalsexam.com: could not connect to host
principalship.net: could not connect to host
-principalstest.ph: could not connect to host
-principalstest.review: could not connect to host
+principalstest.ph: did not receive HSTS header
printerest.io: could not connect to host
printersonline.be: could not connect to host
printery.be: could not connect to host
printexpress.cloud: could not connect to host
printf.de: did not receive HSTS header
+printler.com: did not receive HSTS header
priolkar.com: could not connect to host
prior-it.be: could not connect to host
prism-communication.com: could not connect to host
+prismacloud.green: could not connect to host
prismacloud.xyz: could not connect to host
pristineevents.co.uk: could not connect to host
pritalk.com: could not connect to host
pritchett.xyz: could not connect to host
-privacybydesign.foundation: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+privacybydesign.foundation: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
privacylabs.io: could not connect to host
privacymanatee.com: could not connect to host
privacyrup.net: could not connect to host
@@ -17603,7 +18244,7 @@ prknje.com: did not receive HSTS header
prmte.com: could not connect to host
prnt.li: did not receive HSTS header
pro-ben.sk: did not receive HSTS header
-pro-esb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pro-esb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pro-esb.net: could not connect to host
pro-image.de: did not receive HSTS header
pro-link.eu: did not receive HSTS header
@@ -17611,7 +18252,6 @@ pro-zone.com: could not connect to host
proact-it.co.uk: could not connect to host
proactive.run: could not connect to host
procens.us: could not connect to host
-proclubs.news: did not receive HSTS header
procode.gq: could not connect to host
procrastinatingengineer.co.uk: could not connect to host
prodegree.com: could not connect to host
@@ -17620,7 +18260,7 @@ prodpad.com: did not receive HSTS header
productgap.com: did not receive HSTS header
producto8.com: did not receive HSTS header
productoinnovador.com: did not receive HSTS header
-proesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+proesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
proesb.net: could not connect to host
professional.cleaning: could not connect to host
professionalboundaries.com: did not receive HSTS header
@@ -17628,13 +18268,17 @@ profhome-shop.com: did not receive HSTS header
profi-durchgangsmelder.de: did not receive HSTS header
profinetz.de: could not connect to host
profivps.com: could not connect to host
+proformer.io: could not connect to host
profpay.com: could not connect to host
profundr.com: could not connect to host
profusion.io: could not connect to host
+progenitor.space: did not receive HSTS header
+progg.no: could not connect to host
progolfjourney.com: could not connect to host
program-and.work: could not connect to host
programlama.tk: could not connect to host
programmingstudent.com: could not connect to host
+programyburian.cz: could not connect to host
progress-technologies.com: could not connect to host
progressivecfo.co.nz: could not connect to host
prohostonline.fi: could not connect to host
@@ -17642,14 +18286,12 @@ proitconsulting.com.au: could not connect to host
proj.org.cn: could not connect to host
project-rune.tech: could not connect to host
project-sparks.eu: did not receive HSTS header
-project-splash.com: did not receive HSTS header
+project-splash.com: could not connect to host
project-stats.com: could not connect to host
-projectascension.io: could not connect to host
projectasterk.com: could not connect to host
-projectblackbook.us: could not connect to host
+projectblackbook.us: did not receive HSTS header
projectcastle.tech: did not receive HSTS header
projectdp.net: could not connect to host
-projectgrimoire.com: did not receive HSTS header
projectherogames.xyz: could not connect to host
projectl1b1t1na.tk: could not connect to host
projectmercury.space: did not receive HSTS header
@@ -17668,19 +18310,22 @@ promesa.net: did not receive HSTS header
promhadan.com: could not connect to host
promocao.email: could not connect to host
promohunt.ru: did not receive HSTS header
+promorder.ru: could not connect to host
pronostic-king.fr: could not connect to host
+pronto-intervento.net: could not connect to host
prontolight.com: did not receive HSTS header
prontomovers.co.uk: could not connect to host
proobec.cz: did not receive HSTS header
propactrading.com: could not connect to host
propagandism.org: did not receive HSTS header
-propepper.net: did not receive HSTS header
+propepper.net: could not connect to host
properchels.com: did not receive HSTS header
propershave.com: could not connect to host
prophiler.de: did not receive HSTS header
proplan.co.il: did not receive HSTS header
propmag.co: could not connect to host
prosenseit.com: did not receive HSTS header
+proservices.vip: could not connect to host
prosharp.com.au: could not connect to host
proslimdiets.com: could not connect to host
prosocialmachines.com: could not connect to host
@@ -17692,16 +18337,16 @@ prostoporno.vip: did not receive HSTS header
proteapower.co.za: could not connect to host
protecciondelconsumidor.gov: did not receive HSTS header
protech.ge: did not receive HSTS header
-proteinnuts.cz: could not connect to host
-proteinnuts.sk: could not connect to host
+proteinnuts.cz: did not receive HSTS header
+proteinnuts.sk: did not receive HSTS header
proto-online.ru: did not receive HSTS header
protonmail.ch: did not receive HSTS header
provectus.de: did not receive HSTS header
-providencecmc.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-providerlijst.ml: did not receive HSTS header
+proveits.me: could not connect to host
+providencecmc.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
provisionaldriving.com: could not connect to host
provisionircd.tk: could not connect to host
-provitacare.com: did not receive HSTS header
+provitacare.com: could not connect to host
provokator.co.il: did not receive HSTS header
proweser.de: did not receive HSTS header
prowhisky.de: did not receive HSTS header
@@ -17710,7 +18355,7 @@ proxi.cf: could not connect to host
proximato.com: could not connect to host
proxybay.al: could not connect to host
proxybay.club: could not connect to host
-proxybay.info: did not receive HSTS header
+proxybay.eu.org: did not receive HSTS header
proxybay.top: could not connect to host
proxydesk.eu: could not connect to host
proxydesk.net: could not connect to host
@@ -17721,11 +18366,9 @@ proxyrox.com: could not connect to host
proxyweb.us: did not receive HSTS header
proymaganadera.com: did not receive HSTS header
prplz.io: did not receive HSTS header
-prpr.cloud: could not connect to host
prpsss.com: did not receive HSTS header
prstatic.com: could not connect to host
pruikshop.nl: could not connect to host
-pruma.com.br: could not connect to host
prxio.date: could not connect to host
prxio.site: could not connect to host
ps-qa.com: did not receive HSTS header
@@ -17735,6 +18378,7 @@ ps4all.nl: could not connect to host
psa.gov: did not receive HSTS header
psb.cloud: could not connect to host
pscleaningsolutions.co.uk: could not connect to host
+pself.net: could not connect to host
psicoexpansao.com.br: could not connect to host
psicologia.co.ve: could not connect to host
psicologoforensebarcelona.com: did not receive HSTS header
@@ -17755,10 +18399,7 @@ psychiatrie-betreuung.ch: could not connect to host
psycho-lobby.fr: could not connect to host
psycho.space: could not connect to host
psychologie-hofner.at: could not connect to host
-psydix.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-psylab.cc: did not receive HSTS header
-psylab.re: did not receive HSTS header
-psylab.vip: did not receive HSTS header
+psydix.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
psynapse.net.au: could not connect to host
pthsec.com: could not connect to host
ptn.moscow: could not connect to host
@@ -17775,6 +18416,7 @@ publicspeakingcamps.com: could not connect to host
publimepa.it: could not connect to host
publiq.space: could not connect to host
publishingshack.com: did not receive HSTS header
+pubreviews.com: could not connect to host
puchunguis.com: did not receive HSTS header
puentes.info: could not connect to host
puertasautomaticasgi.com: did not receive HSTS header
@@ -17793,6 +18435,7 @@ pult.co: could not connect to host
pumpgames.net: could not connect to host
punchkickinteractive.com: did not receive HSTS header
punchr-kamikazee.rhcloud.com: could not connect to host
+punitsheth.com: could not connect to host
punkdns.top: could not connect to host
puntacanalink.com: could not connect to host
puppydns.com: did not receive HSTS header
@@ -17809,6 +18452,10 @@ purplez.pw: could not connect to host
purpoz.com.br: could not connect to host
purpspc.com: could not connect to host
purrfect-box.co.uk: did not receive HSTS header
+purrfectboudoir.com: could not connect to host
+purrfectcams.com: could not connect to host
+purrfectmembersclub.com: could not connect to host
+purrfectswingers.com: could not connect to host
pusatinkubatorbayi.com: did not receive HSTS header
push.world: did not receive HSTS header
pushapp.org: did not receive HSTS header
@@ -17829,17 +18476,20 @@ pwnsdx.pw: did not receive HSTS header
pwntr.com: did not receive HSTS header
pwt.pw: could not connect to host
pxio.de: did not receive HSTS header
-pycycle.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+pycycle.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
pyjiaoyi.cf: could not connect to host
pyol.org: could not connect to host
+pyopenssl.org: did not receive HSTS header
pypi-mirrors.org: could not connect to host
pypi-status.org: could not connect to host
pyplo.org: did not receive HSTS header
pypt.lt: did not receive HSTS header
+pyramidsofchi.com: max-age too low: 7889238
pyrrhonism.org: did not receive HSTS header
pythia.nz: could not connect to host
pythonic.guru: could not connect to host
pythonic.training: could not connect to host
+pyxo.net: could not connect to host
pzgreni.ch: did not receive HSTS header
pzme.me: could not connect to host
q-rickroll-u.pw: could not connect to host
@@ -17851,7 +18501,9 @@ q4profiles-france.com: did not receive HSTS header
q5118.com: could not connect to host
q6957.com: could not connect to host
q8mp3.me: did not receive HSTS header
+qa-team.xyz: could not connect to host
qabalah.jp: could not connect to host
+qadmium.com: could not connect to host
qadmium.tk: could not connect to host
qamrulhaque.com: did not receive HSTS header
qapital.com: did not receive HSTS header
@@ -17865,25 +18517,27 @@ qccqld.org.au: did not receive HSTS header
qe2homelottery.com: did not receive HSTS header
qensio.com: did not receive HSTS header
qforum.org: did not receive HSTS header
+qgblog.org: could not connect to host
qi0.de: did not receive HSTS header
qiannews.net: did not receive HSTS header
+qiaohong.org: could not connect to host
qicomidadeverdade.com.br: could not connect to host
qifu.org.cn: could not connect to host
-qimiao.io: could not connect to host
+qimiao.io: did not receive HSTS header
qingcao.org: could not connect to host
qingpat.com: could not connect to host
qingxuan.info: did not receive HSTS header
qinxi1992.com: could not connect to host
-qionglu.pw: could not connect to host
+qionglu.pw: did not receive HSTS header
qipp.com: did not receive HSTS header
qirinus.com: did not receive HSTS header
qiu521119.host: did not receive HSTS header
qiukong.com: did not receive HSTS header
qiuxian.ddns.net: could not connect to host
-qiwi.be: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+qiwi.be: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
qixxit.de: did not receive HSTS header
qklshequ.com: could not connect to host
-qkzy.net: did not receive HSTS header
+qkzy.net: could not connect to host
qldconservation.org: could not connect to host
qledtech.com: did not receive HSTS header
qnatek.org: could not connect to host
@@ -17904,19 +18558,19 @@ qrforex.com: did not receive HSTS header
qrlending.com: could not connect to host
qrlfinancial.com: could not connect to host
qswoo.org: could not connect to host
-qtacairsoft.com: did not receive HSTS header
qtap.me: could not connect to host
qto.org: could not connect to host
+quaedam.org: could not connect to host
quail.solutions: could not connect to host
-quakerlens.com: did not receive HSTS header
+quakerlens.com: could not connect to host
quality1.com.br: did not receive HSTS header
qualityedgarsolutions.com: did not receive HSTS header
qualityology.com: did not receive HSTS header
+qualpay.biz: did not receive HSTS header
quanglepro.com: could not connect to host
-quangngaimedia.com: could not connect to host
+quangngaimedia.com: did not receive HSTS header
quanjinlong.cn: could not connect to host
quantacloud.ch: could not connect to host
-quantaloupe.tech: could not connect to host
quantenteranik.eu: could not connect to host
quantor.dk: did not receive HSTS header
quantum-cloud.xyz: could not connect to host
@@ -17934,11 +18588,11 @@ queenbrownie.com.br: could not connect to host
queens.lgbt: could not connect to host
queenshaflo.com: could not connect to host
queercinema.ch: could not connect to host
+quehacerencusco.com: did not receive HSTS header
quelmandataire.fr: did not receive HSTS header
quemeloquitan.com: did not receive HSTS header
queminventou.com.br: could not connect to host
querkommentar.de: did not receive HSTS header
-queroreceitasoberana.com.br: did not receive HSTS header
queryplayground.com: could not connect to host
questionable.host: could not connect to host
questions-admin.com: did not receive HSTS header
@@ -17946,13 +18600,14 @@ questoj.cn: could not connect to host
questsandrewards.com: could not connect to host
quic.fr: did not receive HSTS header
quickandroid.tools: could not connect to host
+quickbookssupportphonenumber.us: did not receive HSTS header
quickboysvrouwen2.nl: could not connect to host
quickpayservice.com: could not connect to host
quickrelations.de: did not receive HSTS header
quietus.gq: could not connect to host
quikrmovies.to: could not connect to host
quilmo.com: could not connect to host
-quimsertek.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+quimsertek.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
quisido.com: did not receive HSTS header
quizionic.com: could not connect to host
quizl.io: did not receive HSTS header
@@ -17964,12 +18619,13 @@ quocdesign.ch: could not connect to host
quotehex.com: could not connect to host
quotemaster.co.za: could not connect to host
quranserver.net: could not connect to host
+qvitoo.com: could not connect to host
qwallet.ca: could not connect to host
qwertyatom100.me: could not connect to host
qwilink.me: did not receive HSTS header
qxy.ch: could not connect to host
qxzg.org: could not connect to host
-qybot.cc: did not receive HSTS header
+qxzgssr.xyz: could not connect to host
r-ay.club: could not connect to host
r-core.org: could not connect to host
r-core.ru: could not connect to host
@@ -17980,19 +18636,22 @@ r0uzic.net: did not receive HSTS header
r10n.com: did not receive HSTS header
r15.me: did not receive HSTS header
r18.moe: did not receive HSTS header
+r33.space: could not connect to host
r3nt3r.com: did not receive HSTS header
r6957.com: could not connect to host
r811.de: could not connect to host
raajheshkannaa.com: could not connect to host
rabbit.wales: could not connect to host
rabbitvcactus.eu: did not receive HSTS header
-rabota-x.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+rabota-x.ru: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rabynska.eu: could not connect to host
racasdecachorro.org: could not connect to host
-racdek.net: max-age too low: 604800
-racdek.nl: max-age too low: 604800
-rachaelrussell.com: could not connect to host
+racdek.net: did not receive HSTS header
+racdek.nl: did not receive HSTS header
+raceviewequestrian.com: could not connect to host
+rachaelrussell.com: did not receive HSTS header
rachelchen.me: could not connect to host
+rachelsbouncycastles.co.uk: could not connect to host
rackblue.com: could not connect to host
racktear.com: did not receive HSTS header
raconteur.net: did not receive HSTS header
@@ -18006,20 +18665,23 @@ radioactivenetwork.xyz: could not connect to host
radioafibra.com.br: could not connect to host
radiopolarniki.spb.ru: could not connect to host
radior9.it: could not connect to host
-radiormi.com: did not receive HSTS header
-radom-pack.pl: did not receive HSTS header
+radiosendungen.com: did not receive HSTS header
+radom-pack.pl: could not connect to host
radtke.bayern: did not receive HSTS header
rafaelcz.de: could not connect to host
rafsis.com: did not receive HSTS header
raft.pub: could not connect to host
+rage-overload.ch: could not connect to host
+rage.rip: could not connect to host
raghavdua.in: did not receive HSTS header
ragnaroktop.com.br: could not connect to host
rahadiana.com: could not connect to host
rahamasin.eu: could not connect to host
rai-co.net: could not connect to host
-raiblockscommunity.net: could not connect to host
+raiblockscommunity.net: did not receive HSTS header
raidstone.com: could not connect to host
raidstone.rocks: could not connect to host
+raiffeisen-kosovo.com: could not connect to host
railjob.cn: could not connect to host
railyardurgentcare.com: did not receive HSTS header
raimixmotoparts.com.br: did not receive HSTS header
@@ -18028,14 +18690,14 @@ rainbowbarracuda.com: could not connect to host
raito.ooo: could not connect to host
raito.win: could not connect to host
raitza.de: could not connect to host
+rajivshah.co.uk: did not receive HSTS header
rajkapoordas.com: could not connect to host
rakett.org: did not receive HSTS header
rakugaki.cn: could not connect to host
-rallycycling.com: could not connect to host
ralph.bike: did not receive HSTS header
ralphwoessner.com: did not receive HSTS header
ramblingrf.tech: could not connect to host
-ramezanloo.com: did not receive HSTS header
+ramezanloo.com: could not connect to host
ramitmittal.com: could not connect to host
ramon-c.nl: could not connect to host
ramonj.nl: could not connect to host
@@ -18047,7 +18709,6 @@ randomwinpicker.de: could not connect to host
randy.pw: could not connect to host
ranegroup.hosting: could not connect to host
rankthespot.com: could not connect to host
-rannamoisaaiasalong.ee: did not receive HSTS header
rannseier.org: did not receive HSTS header
ranobe.club: could not connect to host
rantanda.com: could not connect to host
@@ -18059,6 +18720,7 @@ ranyeh.co: could not connect to host
rapdogg.com: could not connect to host
raphaelmoura.ddns.net: could not connect to host
raphaelschmid.eu: did not receive HSTS header
+raphrfg.com: could not connect to host
rapidemobile.com: did not receive HSTS header
rapidflow.io: could not connect to host
rapidhubs.com: could not connect to host
@@ -18071,14 +18733,14 @@ rareative.com: could not connect to host
rasing.me: did not receive HSTS header
raspass.me: did not receive HSTS header
raspberry.us: could not connect to host
-raspberryultradrops.com: could not connect to host
+raspberryultradrops.com: did not receive HSTS header
raspitec.ddns.net: could not connect to host
rastreador.com.es: did not receive HSTS header
rastreie.net: did not receive HSTS header
ratajczak.fr: could not connect to host
rate-esport.de: could not connect to host
ratelsec.com: could not connect to host
-rathorian.fr: did not receive HSTS header
+rathorian.fr: could not connect to host
rationem.nl: did not receive HSTS header
ratuseks.com: could not connect to host
ratuseks.net: could not connect to host
@@ -18091,6 +18753,7 @@ ravage.fm: could not connect to host
raven.lipetsk.ru: could not connect to host
ravengergaming.ga: could not connect to host
ravengergaming.net: could not connect to host
+ravenrockrp.com: did not receive HSTS header
ravenx.me: could not connect to host
raviparekh.co.uk: could not connect to host
ravse.dk: could not connect to host
@@ -18108,16 +18771,16 @@ raydobe.me: could not connect to host
raymii.org: did not receive HSTS header
raymondelooff.nl: did not receive HSTS header
raytron.org: could not connect to host
-raywin168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-raywin168.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-raywin88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+raywin168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+raywin168.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+raywin88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
razberry.kr: could not connect to host
razeen.me: max-age too low: 0
razlaw.name: did not receive HSTS header
razvodguru.ru: did not receive HSTS header
razzolini.com.br: could not connect to host
rb-china.net: could not connect to host
-rbcservicehub-uat.azurewebsites.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+rbcservicehub-uat.azurewebsites.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rbhighinc.org: could not connect to host
rbmafrica.co.za: could not connect to host
rbose.org: could not connect to host
@@ -18126,24 +18789,25 @@ rbti.me: could not connect to host
rbtvshitstorm.is: did not receive HSTS header
rburchell.com: did not receive HSTS header
rbxcatalog.com: could not connect to host
+rc-rp.com: did not receive HSTS header
rc4.io: could not connect to host
rc7.ch: could not connect to host
rcafox.com: could not connect to host
-rchavez.site: could not connect to host
-rchrdsn.uk: could not connect to host
rclsm.net: could not connect to host
-rcmlinx.com: could not connect to host
rcmpsplib.com: could not connect to host
rcoliveira.com: could not connect to host
rcorporation.be: did not receive HSTS header
rcpcbd.com: could not connect to host
rcraigmurphy.net: could not connect to host
-rcx.io: did not receive HSTS header
+rcx.io: could not connect to host
+rdactive.de: could not connect to host
+rdactive.net: could not connect to host
rdfz.tech: could not connect to host
rdns.im: did not receive HSTS header
rdplumbingsolutions.com.au: did not receive HSTS header
rdxsattamatka.mobi: could not connect to host
rdyrda.fr: could not connect to host
+re-curi.com: did not receive HSTS header
re-customer.net: could not connect to host
re-wilding.com: could not connect to host
reachr.com: could not connect to host
@@ -18159,7 +18823,9 @@ readism.io: could not connect to host
readmeeatmedrinkme.com: did not receive HSTS header
readr.pw: could not connect to host
readtldr.com: could not connect to host
+readybetwin.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
readydok.com: did not receive HSTS header
+readytobattle.net: could not connect to host
readytowear.es: could not connect to host
readywithresourcestn.gov: could not connect to host
reagir43.fr: did not receive HSTS header
@@ -18167,13 +18833,15 @@ reakyaweso.me: could not connect to host
real-bits.com: could not connect to host
real-compare.com: did not receive HSTS header
realcli.com: could not connect to host
-realestateradioshow.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+realcolors.net: did not receive HSTS header
+realestateradioshow.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
realfreedom.city: could not connect to host
realgarant-shop.de: did not receive HSTS header
realhorsegirls.net: could not connect to host
realhost.name: could not connect to host
realincest.tv: could not connect to host
realitea.co.uk: could not connect to host
+really.ai: could not connect to host
really.io: did not receive HSTS header
reallyreally.io: did not receive HSTS header
realmic.net: could not connect to host
@@ -18187,7 +18855,6 @@ reaper.rip: could not connect to host
reardenporn.com: could not connect to host
rebekaesgabor.online: could not connect to host
rebootmc.com: did not receive HSTS header
-recapp.ch: did not receive HSTS header
recard.vn: did not receive HSTS header
receitas-de-bolos.pt: could not connect to host
receitasdebacalhau.pt: could not connect to host
@@ -18210,25 +18877,24 @@ red2fred2.com: could not connect to host
redair.es: could not connect to host
redar.xyz: could not connect to host
redburn.com: did not receive HSTS header
+redcarpets.in: did not receive HSTS header
redcomet.org: did not receive HSTS header
redcone.net: could not connect to host
-reddingo.at: could not connect to host
-reddiseals.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+reddiseals.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rede.ca: did not receive HSTS header
-redeemingbeautyminerals.com: did not receive HSTS header
redelectrical.co.uk: did not receive HSTS header
+redespaulista.com: did not receive HSTS header
redessantaluzia.com.br: did not receive HSTS header
redheeler.com.br: could not connect to host
redhorsemountainranch.com: did not receive HSTS header
redicabo.de: could not connect to host
-redicals.com: could not connect to host
-redigest.it: max-age too low: 0
+redigest.it: could not connect to host
redirectman.com: could not connect to host
+redit.com: did not receive HSTS header
rediverge.com: did not receive HSTS header
redizoo.com: did not receive HSTS header
redlatam.org: did not receive HSTS header
redletter.link: could not connect to host
-redmbk.com: did not receive HSTS header
redmondoregon.gov: could not connect to host
redneck-gaming.de: could not connect to host
redner.cc: did not receive HSTS header
@@ -18236,6 +18902,7 @@ rednertv.de: did not receive HSTS header
rednoseday.com: did not receive HSTS header
redoakmedia.net: did not receive HSTS header
redperegrine.com: did not receive HSTS header
+redphi.dedyn.io: could not connect to host
redports.org: could not connect to host
redprice.by: could not connect to host
redra.ws: could not connect to host
@@ -18244,14 +18911,12 @@ redshield.co: did not receive HSTS header
redsquarelasvegas.com: could not connect to host
redsquirrelcampsite.co.uk: did not receive HSTS header
redstarsurf.com: did not receive HSTS header
-redstoner.com: did not receive HSTS header
reducerin.ro: did not receive HSTS header
-redwhey.com: could not connect to host
redwoodpaddle.es: did not receive HSTS header
redwoodpaddle.pt: did not receive HSTS header
redy.host: did not receive HSTS header
redzonedaily.com: could not connect to host
-reensshop.com: could not connect to host
+redzurl.com: could not connect to host
reeson.at: could not connect to host
reeson.de: could not connect to host
reeson.info: could not connect to host
@@ -18262,9 +18927,9 @@ refill-roboter.de: did not receive HSTS header
refitplanner.com: did not receive HSTS header
reflecton.io: could not connect to host
reflexive-engineering.com: could not connect to host
-reforesttheplanet.com: could not connect to host
reformatreality.com: could not connect to host
refreshingserum.com: could not connect to host
+refuelcollective.com: did not receive HSTS header
reg.ru: did not receive HSTS header
regain.us: did not receive HSTS header
regaloaks.com: could not connect to host
@@ -18282,6 +18947,7 @@ register.gov.uk: did not receive HSTS header
registertovoteflorida.gov: did not receive HSTS header
regoul.com: did not receive HSTS header
regsec.com: could not connect to host
+regularizaeudora.com.br: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rehabilitation.network: could not connect to host
rehabmail.com: did not receive HSTS header
rehabphilippines.com: could not connect to host
@@ -18294,6 +18960,7 @@ reignsphere.net: could not connect to host
reikiqueen.uk: could not connect to host
reinaertvandecruys.me: could not connect to host
reineberthe.ch: could not connect to host
+reinhard.codes: did not receive HSTS header
reinierjonker.nl: could not connect to host
reinoldus.ddns.net: could not connect to host
reisekosten-gorilla.com: did not receive HSTS header
@@ -18301,7 +18968,7 @@ reismil.ch: could not connect to host
reisslittle.com: could not connect to host
reisyukaku.org: did not receive HSTS header
reithguard-it.de: did not receive HSTS header
-rejo.in: did not receive HSTS header
+rejo.in: could not connect to host
rejushiiplotter.ru: could not connect to host
rejuvemedspa.com: did not receive HSTS header
rekonstrukcestatu.cz: did not receive HSTS header
@@ -18313,13 +18980,13 @@ reliable-mail.de: could not connect to host
reliant3sixty.com: could not connect to host
religiousforums.com: did not receive HSTS header
relisten.nl: did not receive HSTS header
-relocatefeds.gov: could not connect to host
relojesseiko.es: did not receive HSTS header
relvan.tech: could not connect to host
rem.pe: could not connect to host
rema.site: could not connect to host
remain.london: could not connect to host
remedica.fr: could not connect to host
+remedioparaherpes.com: did not receive HSTS header
remedios-caserospara.com: did not receive HSTS header
remedioscaserosparalacistitis.com: did not receive HSTS header
remedium.de: could not connect to host
@@ -18327,17 +18994,19 @@ remedyrehab.com: could not connect to host
remejeanne.com: could not connect to host
remembermidi.sytes.net: could not connect to host
rememberthis.co.za: could not connect to host
+remitatm.com: could not connect to host
remodela.com.ve: could not connect to host
remodelwithlegacy.com: did not receive HSTS header
-remonttitekniikka.fi: did not receive HSTS header
+remonttitekniikka.fi: could not connect to host
remote.so: max-age too low: 0
remotestance.com: did not receive HSTS header
remszeitung.de: did not receive HSTS header
+renascentia.asia: could not connect to host
rencaijia.com: did not receive HSTS header
rencontres-erotiques.com: did not receive HSTS header
rene-guitton.fr: did not receive HSTS header
-renedekoeijer.com: max-age too low: 604800
-renedekoeijer.nl: max-age too low: 604800
+renedekoeijer.com: max-age too low: 2628000
+renedekoeijer.nl: did not receive HSTS header
renee.today: could not connect to host
renesauerwein.com: could not connect to host
renesauerwein.de: could not connect to host
@@ -18352,26 +19021,26 @@ renrenss.com: could not connect to host
renscreations.com: did not receive HSTS header
rentacarcluj.xyz: could not connect to host
rentalmed.com.br: did not receive HSTS header
+rentayventadecarpas.com: did not receive HSTS header
rentbrowser.com: could not connect to host
rentbrowsertrain.me: could not connect to host
rentcarassist.com: could not connect to host
renteater.com: could not connect to host
rentex.com: did not receive HSTS header
renxinge.cn: could not connect to host
-repaik.com: could not connect to host
reparo.pe: did not receive HSTS header
repex.co.il: could not connect to host
repkord.com: max-age too low: 7889238
replaceits.me: could not connect to host
replacemychina.com: could not connect to host
replicaswiss.nl: could not connect to host
-repo.ml: did not receive HSTS header
report-incident.de: could not connect to host
report-to.com: did not receive HSTS header
report-to.io: did not receive HSTS header
report-uri.io: did not receive HSTS header
report-url.com: did not receive HSTS header
report-url.io: did not receive HSTS header
+reportband.gov: did not receive HSTS header
reported.ly: did not receive HSTS header
reporturi.com: did not receive HSTS header
reporturi.io: did not receive HSTS header
@@ -18381,7 +19050,7 @@ reposaarenkuva.fi: could not connect to host
reprolife.co.uk: could not connect to host
reptilauksjonen.no: could not connect to host
republicmo.gov: did not receive HSTS header
-repustate.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+repustate.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
reqognize.com: could not connect to host
reqrut.net: did not receive HSTS header
request-trent.com: could not connect to host
@@ -18394,11 +19063,12 @@ reserve-online.net: did not receive HSTS header
reservetonshift.com: could not connect to host
reservoirtp.fr: did not receive HSTS header
resfriatech.com.br: did not receive HSTS header
-residentialmortgageholdings.com: could not connect to host
+residentiallocksmithsanantoniotx.com: did not receive HSTS header
residentsinsurance.co.uk: did not receive HSTS header
resl20.servehttp.com: could not connect to host
resoundpro.ca: could not connect to host
respice.xyz: could not connect to host
+ressl.ch: did not receive HSTS header
ressos.com: did not receive HSTS header
restaurace-klokocka.cz: did not receive HSTS header
restaurant-mangal.ch: could not connect to host
@@ -18416,16 +19086,21 @@ retcor.net: could not connect to host
retefrati.it: could not connect to host
retetop95.it: did not receive HSTS header
reth.ch: could not connect to host
+reticket.me: could not connect to host
retireyourpassword.org: did not receive HSTS header
retogroup.com: could not connect to host
+retro.rocks: could not connect to host
+retrojar.top: could not connect to host
retronet.nl: could not connect to host
retropack.org: did not receive HSTS header
retropage.co: did not receive HSTS header
retrowave.eu: could not connect to host
rets.org.br: did not receive HSTS header
+rettig.xyz: could not connect to host
retube.ga: did not receive HSTS header
returnofwar.com: could not connect to host
reussir-ma-fete.fr: could not connect to host
+reuter-profishop.de: did not receive HSTS header
revapost.ch: could not connect to host
revelaciones.tv: could not connect to host
revello.org: did not receive HSTS header
@@ -18444,7 +19119,7 @@ revolta-hosting.fr: did not receive HSTS header
revolutionhive.com: could not connect to host
revthefox.co.uk: did not receive HSTS header
revtut.net: could not connect to host
-rewardingexcellence.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+rewardingexcellence.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rewopit.net: could not connect to host
rewrite3.com: could not connect to host
rex.st: could not connect to host
@@ -18452,8 +19127,6 @@ rexhockingkelpies.com.au: did not receive HSTS header
reyesfernando.com: max-age too low: 0
reykjavik.guide: could not connect to host
rezexpert.com: did not receive HSTS header
-rezosup.net: could not connect to host
-rezosup.org: could not connect to host
rf.tn: could not connect to host
rfeif.org: could not connect to host
rfitness.dk: did not receive HSTS header
@@ -18461,26 +19134,34 @@ rgavmf.ru: did not receive HSTS header
rgservers.com: did not receive HSTS header
rhapsodhy.hu: could not connect to host
rhdigital.pro: could not connect to host
+rheijmans.com: could not connect to host
rheijmans.nl: could not connect to host
rhein-liebe.de: did not receive HSTS header
rheinturm.nrw: could not connect to host
rheocube.com: did not receive HSTS header
rhering.de: could not connect to host
+rhese.net: did not receive HSTS header
rheuma-online.de: could not connect to host
+rhiskiapril.com: could not connect to host
rhnet.at: could not connect to host
rhodes.ml: could not connect to host
rhodesianridgeback.com.br: could not connect to host
rhodosdreef.nl: could not connect to host
+ribeirostore.com.br: did not receive HSTS header
ribopierre.fr: could not connect to host
ribs.com: did not receive HSTS header
riceglue.com: could not connect to host
richamorindonesia.com: did not receive HSTS header
richardb.me: could not connect to host
-richeza.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+richeza.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+richie.cloud: could not connect to host
richie.link: did not receive HSTS header
+richieheijmans.cloud: could not connect to host
+richieheijmans.com: could not connect to host
richieheijmans.nl: could not connect to host
richiemail.net: could not connect to host
richlj.com: did not receive HSTS header
+richlj.net: could not connect to host
richmondsunlight.com: could not connect to host
richmtdriver.com: could not connect to host
richonrails.com: did not receive HSTS header
@@ -18488,7 +19169,7 @@ richsiciliano.com: did not receive HSTS header
richterphilipp.com: could not connect to host
richtoinfinity.com: did not receive HSTS header
rickmartensen.nl: could not connect to host
-ricknox.com: did not receive HSTS header
+ricknox.com: could not connect to host
ricky.capital: could not connect to host
rico.ovh: could not connect to host
rid-wan.com: could not connect to host
@@ -18504,6 +19185,7 @@ ridingoklahoma.com: could not connect to host
ridwan.co: could not connect to host
riechsteiner.tech: could not connect to host
riemer.ml: could not connect to host
+riemzac.com: could not connect to host
rienasemettre.fr: did not receive HSTS header
riesenmagnete.de: could not connect to host
riester.pl: did not receive HSTS header
@@ -18518,19 +19200,20 @@ rigsalesaustralia.com: did not receive HSTS header
rijndael.xyz: could not connect to host
rijnmondeg.nl: did not receive HSTS header
rika.me: could not connect to host
+rileyevans.co.uk: could not connect to host
rimediogiusto.com: did not receive HSTS header
rincon-nsn.gov: did not receive HSTS header
-ring.com: did not receive HSTS header
+rincondenoticas.com: could not connect to host
ring0.xyz: did not receive HSTS header
ringh.am: could not connect to host
rinj.se: did not receive HSTS header
-rinprom.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-rinvex.com: could not connect to host
+rinprom.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rionewyork.com.br: could not connect to host
rioxmarketing.pt: could not connect to host
ripa.io: could not connect to host
ripple.com: did not receive HSTS header
rippleunion.com: could not connect to host
+riqy86.nl: could not connect to host
ris-bad-wurzach.de: did not receive HSTS header
risi-china.com: could not connect to host
risingsun.red: could not connect to host
@@ -18549,6 +19232,7 @@ riversideauto.net: did not receive HSTS header
riverstyxgame.com: could not connect to host
rivlo.com: could not connect to host
rixzz.ovh: could not connect to host
+rizonrice.club: did not receive HSTS header
rj.gg: could not connect to host
rjnutrition.consulting: did not receive HSTS header
rk6.cz: could not connect to host
@@ -18557,6 +19241,7 @@ rkkhok.hu: did not receive HSTS header
rkmantpur.org: did not receive HSTS header
rkmedia.no: could not connect to host
rle.me: did not receive HSTS header
+rlnunez.com: could not connect to host
rmaqequipamentos.com.br: could not connect to host
rmdlingerie.com.br: did not receive HSTS header
rme.li: did not receive HSTS header
@@ -18568,6 +19253,7 @@ rms-digicert.ne.jp: did not receive HSTS header
rmsides.com: did not receive HSTS header
rn29.me: could not connect to host
rnb-storenbau.ch: max-age too low: 0
+rnt.cl: did not receive HSTS header
roadfeast.com: could not connect to host
roadtopgm.com: could not connect to host
roan24.pl: did not receive HSTS header
@@ -18587,8 +19273,10 @@ robinevandenbos.nl: did not receive HSTS header
robinsonstrategy.com: could not connect to host
roboex.net: could not connect to host
robomonkey.org: could not connect to host
+robot.works: did not receive HSTS header
roboth.am: could not connect to host
robotics.plus: did not receive HSTS header
+robspeed.rocks: could not connect to host
robteix.com: did not receive HSTS header
robtex.net: did not receive HSTS header
robtex.org: did not receive HSTS header
@@ -18600,12 +19288,15 @@ rocket-wars.de: did not receive HSTS header
rocketgnomes.com: could not connect to host
rocketnet.ml: could not connect to host
rockeyscrivo.com: did not receive HSTS header
-rockhounds.co.za: did not receive HSTS header
+rockfax.com: did not receive HSTS header
rocksberg.net: could not connect to host
rockuse.com.br: did not receive HSTS header
rockz.io: did not receive HSTS header
rodarion.pl: could not connect to host
+roddis.net: did not receive HSTS header
rodehutskors.net: could not connect to host
+rodest.net: did not receive HSTS header
+rodinneodpoledne2018.cz: could not connect to host
rodney.id.au: did not receive HSTS header
rodneybrooksjr.com: did not receive HSTS header
rodosto.com: did not receive HSTS header
@@ -18621,7 +19312,6 @@ rogeiro.net: could not connect to host
roger101.com: did not receive HSTS header
rogerdat.ovh: could not connect to host
rogue-e.xyz: could not connect to host
-roguenetworks.me: could not connect to host
roguetechhub.org: could not connect to host
rohanbassett.com: could not connect to host
rohlik.cz: did not receive HSTS header
@@ -18631,20 +19321,23 @@ roksolana.be: could not connect to host
rolandinsh.com: did not receive HSTS header
rolandlips.com: could not connect to host
rolandslate.com: did not receive HSTS header
-rolemaster.net: could not connect to host
+rolemaster.net: did not receive HSTS header
roleplayhome.com: could not connect to host
rolfsbuss.se: did not receive HSTS header
rollatorweb.nl: did not receive HSTS header
rollercoasteritalia.it: did not receive HSTS header
+rollforadventure.com.au: could not connect to host
rolroer.co.za: could not connect to host
+romail.ml: could not connect to host
romaimperator.com: did not receive HSTS header
romainmuller.xyz: did not receive HSTS header
romancloud.com: could not connect to host
romans-place.me.uk: could not connect to host
romantic-quotes.co.uk: did not receive HSTS header
+romanticfirstdance.com: did not receive HSTS header
romanticschemermovie.com: could not connect to host
-romapa.com: could not connect to host
romar-bos.nl: could not connect to host
+romastantra.com: could not connect to host
romeoferraris.com: did not receive HSTS header
romleg.cf: could not connect to host
roms.fun: could not connect to host
@@ -18659,12 +19352,14 @@ ronwo.de: max-age too low: 1
ronzertnert.xyz: could not connect to host
rool.me: did not receive HSTS header
roolevoi.ru: could not connect to host
-room-checkin24.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+room-checkin24.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
room2d.com: did not receive HSTS header
roomongo.com: did not receive HSTS header
-roosterpgplus.nl: could not connect to host
+roosteroriginals.com: could not connect to host
+roosterpgplus.nl: did not receive HSTS header
rootbsd.at: could not connect to host
rootforum.org: did not receive HSTS header
+rootkit.es: did not receive HSTS header
rootrelativity.com: could not connect to host
rootservice.org: did not receive HSTS header
rootwpn.com: could not connect to host
@@ -18683,6 +19378,8 @@ rospa100.com: did not receive HSTS header
rossclark.com: did not receive HSTS header
rossen.be: did not receive HSTS header
rossfrancis.co.uk: did not receive HSTS header
+rostros.eu: did not receive HSTS header
+roten.email: could not connect to host
rotex1840.de: did not receive HSTS header
rotter-dam.nl: did not receive HSTS header
rotterdamjazz.info: could not connect to host
@@ -18691,10 +19388,11 @@ rotzonline.com: did not receive HSTS header
rough.nu: could not connect to host
roundaboutweb.info: did not receive HSTS header
rous.se: could not connect to host
+routeragency.com: did not receive HSTS header
routercncperu.com: did not receive HSTS header
rouvray.org: did not receive HSTS header
rove3d.com: could not connect to host
-rows.io: could not connect to host
+rows.io: did not receive HSTS header
royal-forest.org: max-age too low: 0
royal-mangal.ch: could not connect to host
royal806.com: did not receive HSTS header
@@ -18757,6 +19455,7 @@ rozeapp.nl: could not connect to host
rp2018.co.uk: could not connect to host
rpasafrica.com: could not connect to host
rpgchan.cf: could not connect to host
+rprevost.fr: could not connect to host
rr.in.th: did not receive HSTS header
rr105.de: did not receive HSTS header
rring.me: could not connect to host
@@ -18772,19 +19471,17 @@ rsf.io: could not connect to host
rsgcard.com: could not connect to host
rsi.im: could not connect to host
rskuipers.com: did not receive HSTS header
-rsldb.com: could not connect to host
rsm-intern.de: could not connect to host
rsmaps.org: could not connect to host
+rsmith.io: could not connect to host
rsmmail.com: did not receive HSTS header
rsships.com: did not receive HSTS header
rssr.ddns.net: could not connect to host
rstraining.co.uk: did not receive HSTS header
rstsecuritygroup.co.uk: could not connect to host
rtc.fun: could not connect to host
-rtd.uk.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+rtd.uk.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rtek.se: could not connect to host
-rtenews.eu: could not connect to host
-rtesport.eu: could not connect to host
rtfpessoa.xyz: did not receive HSTS header
rtho.me: did not receive HSTS header
rths.tk: could not connect to host
@@ -18793,16 +19490,20 @@ rtrinflatables.co.uk: did not receive HSTS header
rttss.com: could not connect to host
rtvi.com: did not receive HSTS header
rtzoeller.com: could not connect to host
-ru-music.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ru-music.com: did not receive HSTS header
rua.cx: could not connect to host
ruarua.ml: could not connect to host
rubbereggs.ca: could not connect to host
rubbix.net: could not connect to host
+rubbleremovalhillcrest.co.za: could not connect to host
rubecodeberg.com: could not connect to host
rubendv.be: did not receive HSTS header
rubenschulz.nl: did not receive HSTS header
-rubi-ka.net: max-age too low: 0
+rubi-ka.net: could not connect to host
ruborr.se: did not receive HSTS header
+rubyist.im: could not connect to host
+rubyquincunx.com: could not connect to host
+rubyquincunx.org: could not connect to host
rubysecurity.org: did not receive HSTS header
rubyshop.nl: could not connect to host
rudel-wot.de: did not receive HSTS header
@@ -18811,6 +19512,7 @@ rudeotter.com: did not receive HSTS header
ruderverein-gelsenkirchen.de: did not receive HSTS header
rudhaulidirectory.com: did not receive HSTS header
rue-de-la-vieille.fr: did not receive HSTS header
+rueduparticulier.tk: could not connect to host
ruequincampoix.com: did not receive HSTS header
ruflay.ru: could not connect to host
rugby.video: could not connect to host
@@ -18831,6 +19533,7 @@ runawebinar.nl: could not connect to host
runcarina.com: could not connect to host
rundumcolumn.xyz: could not connect to host
runhardt.eu: could not connect to host
+runtimepanic.xyz: did not receive HSTS header
runtl.com: did not receive HSTS header
runtondev.com: did not receive HSTS header
ruqu.nl: could not connect to host
@@ -18842,6 +19545,7 @@ rust.mn: could not connect to host
rustbyexample.com: did not receive HSTS header
rustfanatic.com: did not receive HSTS header
ruthmontenegro.com: did not receive HSTS header
+ruurdboomsma.nl: could not connect to host
ruxit.com: did not receive HSTS header
rva.gov: could not connect to host
rvc-france.com: did not receive HSTS header
@@ -18854,16 +19558,17 @@ rwanderlust.com: could not connect to host
rwgamernl.ml: could not connect to host
rws-cc.com: did not receive HSTS header
rx-contact.com: did not receive HSTS header
-rxcheck.com: did not receive HSTS header
+rxcheck.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rxprep.com: did not receive HSTS header
rxt.social: could not connect to host
rxv.cc: could not connect to host
+ryan-design.com: did not receive HSTS header
ryancarter.co.uk: did not receive HSTS header
ryanroberts.co.uk: could not connect to host
ryanteck.uk: could not connect to host
-rybox.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+rybox.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
rychlikoderi.cz: could not connect to host
-rydermais.tk: could not connect to host
+rydermais.tk: did not receive HSTS header
ryejuice.sytes.net: could not connect to host
rylin.net: did not receive HSTS header
rylore.com: could not connect to host
@@ -18878,17 +19583,21 @@ s-on.li: could not connect to host
s-rickroll-p.pw: could not connect to host
s.how: could not connect to host
s0923.com: could not connect to host
+s10y.eu: could not connect to host
+s16e.no: did not receive HSTS header
s1mplescripts.de: could not connect to host
s2p.moe: could not connect to host
s3cases.com: did not receive HSTS header
s3gfault.com: could not connect to host
s3n.se: could not connect to host
s5118.com: could not connect to host
+saabpartsdistribution.com: could not connect to host
saabwa.org: could not connect to host
sabatek.pl: did not receive HSTS header
+sabe.cz: could not connect to host
sabtunes.com: could not connect to host
sac-shop.com: did not receive HSTS header
-saccounty.gov: could not connect to host
+saccounty.gov: did not receive HSTS header
sacharidovejednotky.eu: could not connect to host
sackers.com: did not receive HSTS header
saco-ceso.com: could not connect to host
@@ -18898,7 +19607,6 @@ saenforcement.agency: could not connect to host
safari-afrique.com: did not receive HSTS header
safe.moe: did not receive HSTS header
safe.space: did not receive HSTS header
-safebuyerscheme.co.uk: did not receive HSTS header
safedevice.net: could not connect to host
safeex.com: did not receive HSTS header
safelist.eu: did not receive HSTS header
@@ -18914,6 +19622,7 @@ safetext.me: could not connect to host
safewings-nh.nl: could not connect to host
safing.me: could not connect to host
safnah.com: did not receive HSTS header
+safungerar.se: could not connect to host
sagarhandicraft.com: did not receive HSTS header
sagemontchurch.org: did not receive HSTS header
sageth.com: could not connect to host
@@ -18924,7 +19633,6 @@ saint-astier-triathlon.com: did not receive HSTS header
saintefoy-tarentaise.com: did not receive HSTS header
saintjohnlutheran.church: did not receive HSTS header
saintmichelqud.com: did not receive HSTS header
-saintsrobotics.com: could not connect to host
saintw.com: could not connect to host
sairai.bid: could not connect to host
saitoh-atsuko.com: did not receive HSTS header
@@ -18937,16 +19645,17 @@ sakuracdn.com: could not connect to host
salaervergleich.com: did not receive HSTS header
sale.sh: did not receive HSTS header
saleaks.org: could not connect to host
-salearnership.co.za: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+salearnership.co.za: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
saleslift.pl: could not connect to host
salishseawhalewatching.ca: did not receive HSTS header
salixcode.com: could not connect to host
sallysubs.com: could not connect to host
salmo23.com.br: could not connect to host
-salmos91.com: could not connect to host
+salmos91.com: did not receive HSTS header
salonestella.it: could not connect to host
salserocafe.com: did not receive HSTS header
salserototal.com: could not connect to host
+salt-documentary.blog: could not connect to host
saltedskies.com: could not connect to host
saltireconservation.com: did not receive HSTS header
saltra.online: could not connect to host
@@ -18968,13 +19677,14 @@ samin.tk: could not connect to host
samitechnic.com: did not receive HSTS header
saml2.com: could not connect to host
samlamac.com: could not connect to host
+samlivogarv.dk: did not receive HSTS header
sammenlignakasser.dk: did not receive HSTS header
-sammyslimos.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+sammyslimos.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
samp.im: could not connect to host
sampcup.com: could not connect to host
sampoznay.ru: could not connect to host
samraskauskas.com: could not connect to host
-samrobertson.co.uk: could not connect to host
+samrobertson.co.uk: did not receive HSTS header
samsen.club: could not connect to host
samsonova.de: could not connect to host
samsungmobile.it: did not receive HSTS header
@@ -18983,7 +19693,7 @@ samsungxoa.com: could not connect to host
samuel-dumont.be: did not receive HSTS header
samuirehabcenter.com: could not connect to host
samvanderkris.com: could not connect to host
-samwu.tw: could not connect to host
+samwilberforce.com: could not connect to host
samyerkes.com: did not receive HSTS header
san-mian-ka.ml: could not connect to host
sanalbayrak.com: could not connect to host
@@ -18991,9 +19701,8 @@ sanandreasstories.com: did not receive HSTS header
sanasalud.org: did not receive HSTS header
sanatfilan.com: could not connect to host
sanatrans.com: could not connect to host
-sandburner.net: could not connect to host
+sandbagexpress.com: did not receive HSTS header
sanderknape.com: did not receive HSTS header
-sandhaufen.tk: could not connect to host
sandtonvipcompanions.com: did not receive HSTS header
sandviks.com: did not receive HSTS header
sanguoxiu.com: could not connect to host
@@ -19001,6 +19710,7 @@ sanhei.ch: did not receive HSTS header
sanik.my: did not receive HSTS header
sanilodge.com: did not receive HSTS header
sanitrak.cz: could not connect to host
+sanjotech.space: did not receive HSTS header
sanmuding.com: could not connect to host
sannesfotklinikk.no: did not receive HSTS header
sanook69.com: did not receive HSTS header
@@ -19010,6 +19720,7 @@ sansage.com.br: did not receive HSTS header
sansdev.com: could not connect to host
sansemea.com: did not receive HSTS header
santafemacas.com.br: did not receive HSTS header
+santanderibc.com: did not receive HSTS header
santanderideas.com: did not receive HSTS header
santenatureetcie.com: did not receive HSTS header
santi.eu: did not receive HSTS header
@@ -19026,8 +19737,10 @@ santorinibbs.com: did not receive HSTS header
santouri.be: could not connect to host
saotn.org: did not receive HSTS header
sapereaude.com.pl: did not receive HSTS header
+sapk.fr: did not receive HSTS header
+saposute-s.jp: could not connect to host
sapphireblue.me: could not connect to host
-sapuncheta.com: could not connect to host
+sapuncheta.com: did not receive HSTS header
sarabara.com: did not receive HSTS header
sarah-beckett-harpist.com: did not receive HSTS header
sarahcheyette.com: did not receive HSTS header
@@ -19036,9 +19749,7 @@ sarahdoyley.com: could not connect to host
sarahlouisesearle.com: could not connect to host
sarahsweetlife.com: could not connect to host
sarahsweger.com: could not connect to host
-sarakas.com: did not receive HSTS header
sarangsemutbandung.com: could not connect to host
-sargeson.it: could not connect to host
sarindia.com: could not connect to host
sarindia.de: could not connect to host
sarisonproductions.com: did not receive HSTS header
@@ -19048,11 +19759,10 @@ sarkisozleri.us: could not connect to host
sarndipity.com: could not connect to host
saronno5stelle.it: did not receive HSTS header
saruwebshop.co.za: could not connect to host
-sasanika.org: could not connect to host
+sasanika.org: did not receive HSTS header
sat.rent: did not receive HSTS header
sat7a-riyadh.com: did not receive HSTS header
satanichia.moe: could not connect to host
-satisperfectacollections.com: could not connect to host
sativatunja.com: could not connect to host
satmep.com: did not receive HSTS header
satoshicrypt.com: could not connect to host
@@ -19061,6 +19771,7 @@ satrent.com: did not receive HSTS header
satrent.se: did not receive HSTS header
satriyowibowo.my.id: could not connect to host
satsang-uwe.de: did not receive HSTS header
+sattamatka.market: could not connect to host
sattamatkadpboss.mobi: could not connect to host
saturne.tk: could not connect to host
saucyfox.net: did not receive HSTS header
@@ -19070,8 +19781,6 @@ saudeintimadamulher.com.br: could not connect to host
sauenytt.no: could not connect to host
sauer-systems.net: did not receive HSTS header
saumon.xyz: could not connect to host
-saumondefrance.fr: could not connect to host
-saunahats.eu: could not connect to host
saunasandstuff.ca: did not receive HSTS header
saunasandstuff.com: did not receive HSTS header
saurel.me: could not connect to host
@@ -19081,7 +19790,6 @@ savantic.io: could not connect to host
save-me-koeln.de: did not receive HSTS header
save.gov: could not connect to host
saveaward.gov: could not connect to host
-savebt.net: could not connect to host
savecashindia.com: did not receive HSTS header
savekorea.net: max-age too low: 0
savemoneyonenergy.com: did not receive HSTS header
@@ -19091,14 +19799,13 @@ saveyour.biz: could not connect to host
savingbytes.com: could not connect to host
savinggoliath.com: could not connect to host
savingsstoreonline.ca: did not receive HSTS header
-savisasolutions.co.za: did not receive HSTS header
savvysuit.com: did not receive HSTS header
savvytime.com: did not receive HSTS header
saxol-group.com: could not connect to host
say-hanabi.com: could not connect to host
sayhanabi.com: could not connect to host
sayori.pw: could not connect to host
-sbiewald.de: could not connect to host
+saytu.co: did not receive HSTS header
sbit.com.br: could not connect to host
sblum.de: did not receive HSTS header
sbm.cloud: could not connect to host
@@ -19106,14 +19813,20 @@ sbobetfun.com: did not receive HSTS header
sbox-archives.com: could not connect to host
sbsrv.ml: did not receive HSTS header
sby.de: did not receive HSTS header
-sc4le.com: did not receive HSTS header
+sc4le.com: could not connect to host
+scaffoldhireeastrand.co.za: could not connect to host
+scaffoldhirefourways.co.za: could not connect to host
+scaffoldhiremidrand.co.za: could not connect to host
+scaffoldhirerandburg.co.za: could not connect to host
+scaffoldhiresandton.co.za: could not connect to host
scala.click: did not receive HSTS header
scannabi.com: could not connect to host
scarvespalace.com: could not connect to host
+sccwf.com: did not receive HSTS header
scenester.tv: did not receive HSTS header
scentofwine.com: did not receive HSTS header
sceptique.eu: did not receive HSTS header
-sch44r0n.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+sch44r0n.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
schaafenstrasse.koeln: could not connect to host
schachburg.de: did not receive HSTS header
schadegarant.net: could not connect to host
@@ -19123,22 +19836,27 @@ schatmeester.be: did not receive HSTS header
schau-rein.co.at: did not receive HSTS header
schauer.so: could not connect to host
schd.io: did not receive HSTS header
+scheduleme.io: could not connect to host
scheidtweiler.de: did not receive HSTS header
-schellevis.net: did not receive HSTS header
schermreparatierotterdam.nl: did not receive HSTS header
schimmel-test.info: could not connect to host
schippers-it.nl: did not receive HSTS header
schlabbi.com: did not receive HSTS header
schlafguru.com: could not connect to host
+schlarb.eu: could not connect to host
+schlossfuchs.de: could not connect to host
+schluesseldienst-hannover24.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
schmelzle.io: could not connect to host
-schmidttulskie.de: could not connect to host
+schmidttulskie.de: did not receive HSTS header
schmitt.ovh: could not connect to host
-schmitt.ws: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+schmitt.ws: did not receive HSTS header
schmitz.link: could not connect to host
schneider-electric.tg: did not receive HSTS header
schnell-abnehmen.tips: could not connect to host
schnell-gold.com: could not connect to host
schnellsuche.de: did not receive HSTS header
+schoeck-elektro.de: did not receive HSTS header
+schokofoto.de: did not receive HSTS header
scholarly.com.ph: could not connect to host
scholarly.ph: could not connect to host
scholierenvervoerzeeland.nl: did not receive HSTS header
@@ -19150,7 +19868,7 @@ schooli.io: could not connect to host
schoolsonice.nl: could not connect to host
schooltrends.co.uk: did not receive HSTS header
schoolze.com: did not receive HSTS header
-schoop.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+schoop.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
schopenhauer-institut.de: could not connect to host
schorel.ovh: could not connect to host
schraebanowicz.net: did not receive HSTS header
@@ -19169,6 +19887,7 @@ schwarzkopfforyou.de: did not receive HSTS header
schwarzwald-flirt.de: did not receive HSTS header
schwarzwaldcon.de: did not receive HSTS header
schwedenhaus.ag: did not receive HSTS header
+schweingehabt.expert: did not receive HSTS header
schweiz.guide: could not connect to host
schweizerbolzonello.net: could not connect to host
schwetz.net: could not connect to host
@@ -19187,12 +19906,11 @@ scitopia.me: could not connect to host
scivillage.com: did not receive HSTS header
sckc.stream: could not connect to host
sclgroup.cc: could not connect to host
-sclns.co: did not receive HSTS header
+sclns.co: could not connect to host
scm-2017.org: could not connect to host
scontogiusto.com: could not connect to host
scoolcode.com: did not receive HSTS header
scooshonline.co.uk: did not receive HSTS header
-scootfleet.com: could not connect to host
scopea.fr: max-age too low: 0
score-savers.com: max-age too low: 10540800
scores4schools.com: could not connect to host
@@ -19201,7 +19919,7 @@ scorocode.ru: did not receive HSTS header
scotbirchfield.com: did not receive HSTS header
scottainslie.me.uk: could not connect to host
scottdial.com: did not receive HSTS header
-scottferguson.com.au: could not connect to host
+scottferguson.com.au: did not receive HSTS header
scottgruber.me: did not receive HSTS header
scotthel.me: did not receive HSTS header
scotthelme.com: did not receive HSTS header
@@ -19212,8 +19930,9 @@ scourt.info: could not connect to host
scourt.org.ua: could not connect to host
scoutdb.ch: did not receive HSTS header
scpartyentertainment.co.uk: could not connect to host
+scqpw.com: did not receive HSTS header
scrambl.is: could not connect to host
-scramble.io: could not connect to host
+scramble.io: did not receive HSTS header
scrambler.in: could not connect to host
scrapings.net: could not connect to host
scratchandscuffs.co.uk: could not connect to host
@@ -19263,9 +19982,9 @@ search: could not connect to host
searchgov.gov.il: did not receive HSTS header
seareytraining.com: did not receive HSTS header
searx.pw: could not connect to host
-seattleprivacy.org: could not connect to host
-seavancouver.com: did not receive HSTS header
+seats2meet.com: did not receive HSTS header
sebastian-bair.de: could not connect to host
+sebastian-lutsch.de: could not connect to host
sebastian-schmidt.me: did not receive HSTS header
sebastian-tobie.de: could not connect to host
sebastianhampl.de: could not connect to host
@@ -19275,6 +19994,7 @@ sec4share.me: did not receive HSTS header
sec555.com: did not receive HSTS header
secandtech.com: could not connect to host
secanje.nl: did not receive HSTS header
+secbone.com: did not receive HSTS header
secboom.com: could not connect to host
seccomp.ru: did not receive HSTS header
seceye.cn: could not connect to host
@@ -19291,19 +20011,20 @@ secondarysurvivorportal.com: could not connect to host
secondarysurvivorportal.help: could not connect to host
secondbike.co.uk: did not receive HSTS header
secondbyte.nl: could not connect to host
-secondnature.bio: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-secondpay.nl: did not receive HSTS header
+secondnature.bio: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+secondpay.nl: could not connect to host
secondspace.ca: could not connect to host
secpoc.online: could not connect to host
secretar.is: could not connect to host
secretnation.net: did not receive HSTS header
secretofanah.com: could not connect to host
secretpigeon.com: could not connect to host
+secretsanta.fr: could not connect to host
sectest.ml: could not connect to host
sectia22.ro: could not connect to host
section508.gov: did not receive HSTS header
sectionw2s.org: did not receive HSTS header
-secur3.us: did not receive HSTS header
+secur3.us: could not connect to host
secure-automotive-cloud.com: could not connect to host
secure-automotive-cloud.org: could not connect to host
secure-games.us: could not connect to host
@@ -19311,6 +20032,7 @@ secure.chat: could not connect to host
secure.link: did not receive HSTS header
securechat4.me: could not connect to host
securedevelop.net: could not connect to host
+securedns.zone: could not connect to host
securefuture.nl: did not receive HSTS header
secureideas.com: did not receive HSTS header
secureindia.co: could not connect to host
@@ -19319,11 +20041,11 @@ securemy.website: could not connect to host
secureradio.net: could not connect to host
securesuisse.ch: could not connect to host
securetasks.net: did not receive HSTS header
-securi-tay.co.uk: could not connect to host
securita.eu: did not receive HSTS header
security-carpet.com: could not connect to host
security-thoughts.org: could not connect to host
security.google.com: did not receive HSTS header (error ignored - included regardless)
+security.love: could not connect to host
security.xn--q9jyb4c: could not connect to host
securityarena.com: could not connect to host
securitybrief.asia: did not receive HSTS header
@@ -19332,9 +20054,10 @@ securitybrief.com.au: did not receive HSTS header
securitybrief.eu: did not receive HSTS header
securitycamerasaustin.net: did not receive HSTS header
securitycamerasjohnsoncity.com: did not receive HSTS header
+securitygladiators.com: did not receive HSTS header
securityglance.com: could not connect to host
securityinet.biz: could not connect to host
-securityinet.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+securityinet.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
securityinet.net: could not connect to host
securityinet.org.il: could not connect to host
securitysoapbox.com: could not connect to host
@@ -19348,7 +20071,7 @@ securocloud.com: could not connect to host
securon.io: could not connect to host
securoswiss.ch: could not connect to host
secwise.nl: could not connect to host
-sedeusquiser.net: did not receive HSTS header
+sedeusquiser.net: could not connect to host
sedoexpert.nl: could not connect to host
sedoexperts.nl: could not connect to host
sedrubal.de: could not connect to host
@@ -19363,12 +20086,13 @@ seehimnude.com: could not connect to host
seehisnudes.com: could not connect to host
seekersmart.com: could not connect to host
seeks.ru: could not connect to host
-seekthe.net: did not receive HSTS header
+seekthe.net: could not connect to host
seele.ca: could not connect to host
seemeasaperson.com: did not receive HSTS header
seen.life: could not connect to host
seeonce.co: could not connect to host
seesuite.com: could not connect to host
+seguridadysaludeneltrabajo.com.co: could not connect to host
sehenderson.com: did not receive HSTS header
seida.at: could not connect to host
seiko-dojo.com: could not connect to host
@@ -19387,6 +20111,7 @@ self.nu: did not receive HSTS header
selfdefenserx.com: could not connect to host
selfhosters.com: could not connect to host
selfie-france.fr: could not connect to host
+selfmade4u.de: did not receive HSTS header
selfoutlet.com: did not receive HSTS header
selfserverx.com: could not connect to host
selitysvideot.fi: did not receive HSTS header
@@ -19401,12 +20126,15 @@ semen3325.xyz: could not connect to host
semenkovich.com: did not receive HSTS header
semianalog.com: could not connect to host
semmlers.com: did not receive HSTS header
+semplicementelight.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
semps-servers.de: could not connect to host
semrush.com: did not receive HSTS header
semyonov.su: could not connect to host
semyonov.us: could not connect to host
send4x.com: did not receive HSTS header
sendash.com: did not receive HSTS header
+sendc.at: could not connect to host
+sendcat.com: could not connect to host
senedirect.com: could not connect to host
senemusique.com: did not receive HSTS header
seniorhomepurchaseprogram.com: could not connect to host
@@ -19415,14 +20143,12 @@ sennase.net: did not receive HSTS header
senorcontento.com: did not receive HSTS header
sensavi.ua: did not receive HSTS header
sensebridge.com: did not receive HSTS header
-senseict.com.au: did not receive HSTS header
senseofnumber.co.uk: did not receive HSTS header
senseye.io: did not receive HSTS header
sensiblemn.org: could not connect to host
sensibus.com: did not receive HSTS header
sensoft-int.com: could not connect to host
sensoft-int.net: could not connect to host
-sensoft-int.org: could not connect to host
sensound.ml: could not connect to host
sentic.info: did not receive HSTS header
sentinelsmotorcycleclub.com: could not connect to host
@@ -19440,7 +20166,7 @@ seolib.org: could not connect to host
seomarketingdeals.com: did not receive HSTS header
seomen.biz: could not connect to host
seomobo.com: could not connect to host
-seoprovider.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+seoprovider.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
seosanantonioinc.com: did not receive HSTS header
seoscribe.net: could not connect to host
seotronix.net: did not receive HSTS header
@@ -19451,6 +20177,8 @@ sepakbola.win: could not connect to host
sephr.com: did not receive HSTS header
sepie.gob.es: did not receive HSTS header
seppelec.com: did not receive HSTS header
+septillion.cn: could not connect to host
+seputarpengertian.com: could not connect to host
seq.tf: could not connect to host
sequatchiecountytn.gov: did not receive HSTS header
ser-it.pl: could not connect to host
@@ -19459,7 +20187,7 @@ serathius.ovh: could not connect to host
serbien.guide: could not connect to host
serenitycreams.com: did not receive HSTS header
serfdom.io: did not receive HSTS header
-sergiojimenezequestrian.com: could not connect to host
+sergiojimenezequestrian.com: did not receive HSTS header
sergivb01.me: could not connect to host
sergos.de: could not connect to host
serized.pw: could not connect to host
@@ -19479,14 +20207,17 @@ servergno.me: did not receive HSTS header
serverlauget.no: could not connect to host
servermonkey.nl: could not connect to host
serverping.io: did not receive HSTS header
+serversuit.com: could not connect to host
servfefe.com: could not connect to host
service-wueste-vodafone.tk: could not connect to host
servicevie.com: did not receive HSTS header
servidoresadmin.com: did not receive HSTS header
-servidoresweb.online: could not connect to host
+servidoresweb.online: did not receive HSTS header
+servmaslt.com: could not connect to host
servpanel.de: did not receive HSTS header
servu.de: did not receive HSTS header
servx.ru: did not receive HSTS header
+serwusik.pl: did not receive HSTS header
seryo.moe: could not connect to host
seryo.net: could not connect to host
seryovpn.com: could not connect to host
@@ -19494,14 +20225,15 @@ sesha.co.za: could not connect to host
setfix.de: could not connect to host
sethoedjo.com: could not connect to host
setkit.net: could not connect to host
-setphaserstostun.org: did not receive HSTS header
setterirlandes.com.br: could not connect to host
setuid.de: could not connect to host
+seulean.gq: did not receive HSTS header
sevenet.pl: did not receive HSTS header
sevenhearts.online: could not connect to host
sevenmatches.com: could not connect to host
severine-trousselard.com: could not connect to host
sevinci.ch: could not connect to host
+sevsey.ru: could not connect to host
sevsopr.ru: could not connect to host
sexaki.com: did not receive HSTS header
sexara.co: could not connect to host
@@ -19525,12 +20257,13 @@ sgtsnookums.net: could not connect to host
sh4y.com: could not connect to host
shaaaaaaaaaaaaa.com: did not receive HSTS header
shaamrelief.org: could not connect to host
+shachang.com: did not receive HSTS header
shadiku.com: could not connect to host
shadow-socks.net: could not connect to host
shadow-socks.org: did not receive HSTS header
shadow-socks.pro: could not connect to host
shadowguardian507-irl.tk: did not receive HSTS header
-shadowguardian507.tk: did not receive HSTS header
+shadowguardian507.tk: could not connect to host
shadowict.net: could not connect to host
shadowmorph.info: did not receive HSTS header
shadowping.com: could not connect to host
@@ -19556,6 +20289,7 @@ shagi29.ru: did not receive HSTS header
shahbeat.com: could not connect to host
shainessim.com: could not connect to host
shaitan.eu: could not connect to host
+shaken-kyoto.jp: could not connect to host
shakes4u.com: did not receive HSTS header
shandonsg.co.uk: could not connect to host
shanekoster.net: did not receive HSTS header
@@ -19563,23 +20297,25 @@ shanesage.com: could not connect to host
shang-yu.cn: could not connect to host
shangzhen.site: could not connect to host
shankangke.com: could not connect to host
-shannoneichorn.com: could not connect to host
+shannoneichorn.com: did not receive HSTS header
shanxiapark.com: could not connect to host
shanyhs.com: could not connect to host
-shaobin.wang: could not connect to host
+shaobin.wang: did not receive HSTS header
shapesedinburgh.co.uk: did not receive HSTS header
shardsoft.com: could not connect to host
sharecc.co: could not connect to host
sharecrypted.com: did not receive HSTS header
shareeri.com: could not connect to host
+shareeri.xyz: could not connect to host
shareimg.xyz: could not connect to host
sharemessage.net: could not connect to host
shareoine.com: could not connect to host
sharepass.pw: could not connect to host
-sharepic.xyz: could not connect to host
+sharepic.xyz: did not receive HSTS header
sharesplitter.com: could not connect to host
sharevari.com: could not connect to host
shareworx.net: could not connect to host
+sharezen.de: could not connect to host
shariahlawcenter.com: could not connect to host
shariahlawcenter.org: could not connect to host
sharialawcenter.com: could not connect to host
@@ -19588,12 +20324,11 @@ sharingcode.com: did not receive HSTS header
sharkie.org.za: did not receive HSTS header
sharks.football: did not receive HSTS header
sharpe-practice.co.uk: could not connect to host
-sharperedge.pw: could not connect to host
-sharperedgecomputers.com: could not connect to host
shasso.com: did not receive HSTS header
shatorin.com: did not receive HSTS header
+shaunandamyswedding.com: could not connect to host
shauncrowley.co.uk: could not connect to host
-shaunharker.com: did not receive HSTS header
+shaunharker.com: could not connect to host
shaunwheelhou.se: could not connect to host
shavingks.com: could not connect to host
shawnbsmith.me: did not receive HSTS header
@@ -19622,6 +20357,7 @@ shervik.ga: could not connect to host
shethbox.com: could not connect to host
shevronpatriot.ru: did not receive HSTS header
sheying.tm: could not connect to host
+shh-listen.com: could not connect to host
shiatsu-institut.ch: did not receive HSTS header
shibainu.com.br: could not connect to host
shibe.club: could not connect to host
@@ -19632,7 +20368,7 @@ shift.ooo: did not receive HSTS header
shiftins.com: could not connect to host
shiftnrg.org: did not receive HSTS header
shiftplanning.com: did not receive HSTS header
-shiftpsych.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+shiftpsych.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
shiinko.com: could not connect to host
shiji456.com: max-age too low: 0
shikinobi.com: did not receive HSTS header
@@ -19648,6 +20384,7 @@ shipinsight.com: did not receive HSTS header
shipmile.com: did not receive HSTS header
shippingbo.com: did not receive HSTS header
shirakaba-cc.com: did not receive HSTS header
+shirao.jp: could not connect to host
shiroki-k.net: could not connect to host
shirosaki.org: could not connect to host
shiseki.top: did not receive HSTS header
@@ -19668,8 +20405,8 @@ shoemuse.com: did not receive HSTS header
sholtowu.com: could not connect to host
shome.de: could not connect to host
shooshosha.com: could not connect to host
+shootingstarmedium.com: did not receive HSTS header
shootpooloklahoma.com: could not connect to host
-shop4d.com: could not connect to host
shopcord.co.uk: did not receive HSTS header
shopdongho.com: did not receive HSTS header
shopdopastor.com.br: could not connect to host
@@ -19684,7 +20421,6 @@ shoppingreview.org: did not receive HSTS header
shoprose.ru: could not connect to host
shoprsc.com: could not connect to host
shops.neonisi.com: could not connect to host
-shopsouthafrican.com: did not receive HSTS header
shortpath.com: could not connect to host
shortr.li: could not connect to host
shota.party: could not connect to host
@@ -19698,7 +20434,6 @@ shower.im: did not receive HSTS header
showkeeper.tv: did not receive HSTS header
showroom.de: did not receive HSTS header
showroom113.ru: could not connect to host
-shoxmusic.net: did not receive HSTS header
shreyansh26.me: could not connect to host
shtorku.com: could not connect to host
shu-kin.net: did not receive HSTS header
@@ -19721,7 +20456,7 @@ siamega.com: could not connect to host
siammedia.co: could not connect to host
siamojo.com: could not connect to host
sianimacion.com: could not connect to host
-sianjhon.com: could not connect to host
+sianjhon.com: did not receive HSTS header
siao-mei.com: did not receive HSTS header
sichere-kartenakzeptanz.de: could not connect to host
siciliadigitale.pro: could not connect to host
@@ -19730,12 +20465,12 @@ sicklepod.com: could not connect to host
siconnect.us: did not receive HSTS header
sictame-tigf.org: did not receive HSTS header
sideropolisnoticias.com.br: did not receive HSTS header
-sidpod.ru: did not receive HSTS header
+sidpod.ru: could not connect to host
siebens.net: could not connect to host
sieh.es: did not receive HSTS header
siemencaes.tk: could not connect to host
+sierpinska.eu: could not connect to host
sieulog.com: could not connect to host
-sieuthigomviet.com: did not receive HSTS header
siewert-kau.de: did not receive HSTS header
sifls.com: could not connect to host
sifreuret.com: could not connect to host
@@ -19751,17 +20486,17 @@ siikarantacamping.fi: did not receive HSTS header
sijimi.cn: did not receive HSTS header
sijmenschoon.nl: did not receive HSTS header
sikatehtaat.fi: did not receive HSTS header
+sikecikcomel.com: could not connect to host
siku.pro: could not connect to host
silent.live: did not receive HSTS header
silentcircle.com: did not receive HSTS header
silentcircle.org: could not connect to host
silentlink.io: could not connect to host
silicagelpackets.ca: did not receive HSTS header
-silicon-north.com: could not connect to host
-silicon-vision.com: could not connect to host
siliconchip.me: could not connect to host
silke-hunde.de: did not receive HSTS header
silkebeckmann.de: did not receive HSTS header
+sillypoohbear.gq: did not receive HSTS header
silqueskineyeserum.com: could not connect to host
silvacor-ziegel.de: max-age too low: 604800
silver-drachenkrieger.de: did not receive HSTS header
@@ -19770,8 +20505,13 @@ silverback.is: did not receive HSTS header
silvergoldbull.ba: could not connect to host
silvergoldbull.bg: could not connect to host
silvergoldbull.bj: could not connect to host
+silvergoldbull.co.ao: could not connect to host
silvergoldbull.co.tz: could not connect to host
+silvergoldbull.com.eg: could not connect to host
silvergoldbull.com.gh: could not connect to host
+silvergoldbull.com.mt: could not connect to host
+silvergoldbull.dj: could not connect to host
+silvergoldbull.ge: could not connect to host
silvergoldbull.hr: could not connect to host
silvergoldbull.id: could not connect to host
silvergoldbull.kg: could not connect to host
@@ -19781,11 +20521,14 @@ silvergoldbull.lt: could not connect to host
silvergoldbull.md: could not connect to host
silvergoldbull.mk: could not connect to host
silvergoldbull.ml: could not connect to host
+silvergoldbull.mw: could not connect to host
silvergoldbull.my: could not connect to host
silvergoldbull.ph: could not connect to host
+silvergoldbull.ru: could not connect to host
silvergoldbull.sn: could not connect to host
silvergoldbull.tg: could not connect to host
silvergoldbull.tj: could not connect to host
+silvergoldbull.tn: could not connect to host
silverhome.ninja: could not connect to host
silverpvp.com: could not connect to host
silverstartup.sk: could not connect to host
@@ -19804,7 +20547,6 @@ simod.org: could not connect to host
simon-pokorny.com: did not receive HSTS header
simon.butcher.name: max-age too low: 2629743
simon.lc: did not receive HSTS header
-simon3k.moe: could not connect to host
simongong.net: did not receive HSTS header
simonsaxon.com: did not receive HSTS header
simonschmitt.ch: could not connect to host
@@ -19815,11 +20557,15 @@ simpleclassiclife.com: could not connect to host
simplecrypt.io: could not connect to host
simplelearner.com: could not connect to host
simplepractice.com: did not receive HSTS header
+simplepress.uk: did not receive HSTS header
simplerses.com: could not connect to host
simplesamlphp.org: did not receive HSTS header
simplexsupport.com: did not receive HSTS header
simplifyengineering.co.uk: did not receive HSTS header
simplixos.org: could not connect to host
+simply.black: could not connect to host
+simplylovejesus.com: max-age too low: 7889238
+simplymozzo.se: could not connect to host
simplyrara.com: did not receive HSTS header
simplystudio.com: could not connect to host
sims4hub.ga: could not connect to host
@@ -19865,13 +20611,10 @@ sistemasespecializados.com: did not receive HSTS header
sistemlash.com: did not receive HSTS header
sistemos.net: could not connect to host
sistersurprise.de: did not receive HSTS header
-sisver.host: could not connect to host
-sisver.mx: could not connect to host
siteage.net: did not receive HSTS header
sitecloudify.com: could not connect to host
-sitecuatui.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-sitedebelezaemoda.com.br: could not connect to host
-sitehome.eu: could not connect to host
+sitecuatui.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+sitehome.eu: did not receive HSTS header
sitehost.io: could not connect to host
sitehoster.org: did not receive HSTS header
sitemaxiphilippe.ch: could not connect to host
@@ -19889,10 +20632,13 @@ sixcorners.info: could not connect to host
sixcorners.net: could not connect to host
sixtwentyten.com: did not receive HSTS header
sizingservers.be: did not receive HSTS header
+sizuvip.com: did not receive HSTS header
sizzle.co.uk: did not receive HSTS header
sja-se-training.com: could not connect to host
+sjatsh.com: could not connect to host
sjdtaxi.com: did not receive HSTS header
sjhyl11.com: could not connect to host
+sjis.me: could not connect to host
sjsc.fr: did not receive HSTS header
sjsmith.id.au: did not receive HSTS header
sjv4u.ch: did not receive HSTS header
@@ -19909,14 +20655,13 @@ skarox.eu: could not connect to host
skarox.net: could not connect to host
skarox.ru: could not connect to host
skates.guru: max-age too low: 2592000
-skday.com: did not receive HSTS header
sketchywebsite.net: did not receive HSTS header
ski-insurance.com.au: did not receive HSTS header
skidstresser.com: could not connect to host
skilldetector.com: could not connect to host
skilletfood.com: did not receive HSTS header
skillout.org: did not receive HSTS header
-skillproxy.com: did not receive HSTS header
+skillproxy.com: could not connect to host
skillproxy.net: could not connect to host
skillproxy.org: could not connect to host
skills2serve.org: could not connect to host
@@ -19938,10 +20683,11 @@ skoda-nurdiebesten.de: did not receive HSTS header
skoda-service-team-cup.de: did not receive HSTS header
skoilly.cn: did not receive HSTS header
skolnieks.lv: could not connect to host
-skomski.org: did not receive HSTS header
+skomski.org: could not connect to host
+skontorp-enterprise.no: did not receive HSTS header
skou.dk: could not connect to host
skpdev.net: could not connect to host
-skram.de: did not receive HSTS header
+skram.de: could not connect to host
skrimix.tk: could not connect to host
skrivande.co: could not connect to host
skullhouse.nyc: could not connect to host
@@ -19972,11 +20718,12 @@ skywalkers.cz: did not receive HSTS header
skyway.capital: did not receive HSTS header
skyworldserver.ddns.net: could not connect to host
sl-informatique.ovh: could not connect to host
-sl1pkn07.wtf: could not connect to host
+sl0.us: did not receive HSTS header
+sl1pkn07.wtf: max-age too low: 2592000
sl899.com: did not receive HSTS header
sl998.com: did not receive HSTS header
slaps.be: could not connect to host
-slash-dev.de: could not connect to host
+slash-dev.de: did not receive HSTS header
slash64.co.uk: could not connect to host
slash64.com: did not receive HSTS header
slash64.uk: could not connect to host
@@ -19994,6 +20741,7 @@ sld08.com: did not receive HSTS header
sleeklounge.com: did not receive HSTS header
sleep10.com: could not connect to host
sleeping.town: did not receive HSTS header
+sleepingbaghub.com: did not receive HSTS header
sleepstar.com.mt: did not receive HSTS header
sliceone.com: could not connect to host
slicketl.com: did not receive HSTS header
@@ -20011,7 +20759,7 @@ slo-net.net: did not receive HSTS header
slope.haus: could not connect to host
slotboss.co.uk: did not receive HSTS header
slovakiana.sk: did not receive HSTS header
-slovenskycestovatel.sk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+slovenskycestovatel.sk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
slovoice.org: could not connect to host
slowfood.es: did not receive HSTS header
slowsociety.org: could not connect to host
@@ -20023,8 +20771,10 @@ sm2016.ch: could not connect to host
smaaker.com: did not receive HSTS header
smablo.com: could not connect to host
smadav.ml: could not connect to host
+smallbytedesign.co: could not connect to host
smallcdn.rocks: could not connect to host
smallchat.nl: could not connect to host
+smallpath.me: could not connect to host
smallplanet.ch: did not receive HSTS header
smallshopit.com: did not receive HSTS header
smarntrading.com: did not receive HSTS header
@@ -20035,29 +20785,33 @@ smartbiz.vn: could not connect to host
smartboleta.com: did not receive HSTS header
smartbuyelectric.com: could not connect to host
smartcoin.com.br: could not connect to host
+smartedg.io: could not connect to host
smarterskies.gov: could not connect to host
smartest-trading.com: could not connect to host
smarthomedna.com: did not receive HSTS header
smartietop.com: could not connect to host
smartit.pro: could not connect to host
-smartlend.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+smartlend.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+smartmessages.net: could not connect to host
smartmompicks.com: did not receive HSTS header
smartofficesandsmarthomes.com: did not receive HSTS header
-smartofficeusa.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+smartofficeusa.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
smartphone.continental.com: could not connect to host
smartrade.tech: did not receive HSTS header
smartrak.co.nz: did not receive HSTS header
smartviewing.com: did not receive HSTS header
-smartwelve.com: could not connect to host
+smartwank.com: could not connect to host
smash-gg.club: could not connect to host
smcbox.com: could not connect to host
smdev.fr: could not connect to host
+smeetsengraas.com: could not connect to host
smet.us: could not connect to host
smi-a.me: could not connect to host
smileawei.com: could not connect to host
-smilenwa.com: did not receive HSTS header
+smilesondemand.com: did not receive HSTS header
smimea.com: could not connect to host
smirkingwhorefromhighgarden.pro: could not connect to host
+smit.ee: did not receive HSTS header
smith.is: could not connect to host
smithcountytxtaxrates.gov: could not connect to host
smithfieldbaptist.org: did not receive HSTS header
@@ -20067,11 +20821,15 @@ smkn1lengkong.sch.id: did not receive HSTS header
smksi2.com: could not connect to host
smksultanismail2.com: could not connect to host
sml.lc: could not connect to host
+smm.im: could not connect to host
smmcab.ru: could not connect to host
smmcab.website: could not connect to host
smmlaba.io: could not connect to host
smol.cat: could not connect to host
+smoothics.at: could not connect to host
+smoothics.eu: could not connect to host
smoothics.mobi: could not connect to host
+smoothics.net: could not connect to host
smove.sg: did not receive HSTS header
smow.com: did not receive HSTS header
smow.de: did not receive HSTS header
@@ -20086,6 +20844,7 @@ smskeywords.co.uk: could not connect to host
smspodmena.ru: could not connect to host
smtp.bz: did not receive HSTS header
smtpdev.com: could not connect to host
+smtvonline.com: did not receive HSTS header
smuhelper.cn: could not connect to host
smusg.com: did not receive HSTS header
smutba.se: did not receive HSTS header
@@ -20095,12 +20854,12 @@ snailing.org: could not connect to host
snake.dog: could not connect to host
snakehosting.dk: did not receive HSTS header
snapappts.com: could not connect to host
-snapfinance.com: did not receive HSTS header
snapnudes.co: could not connect to host
snaptier.co: did not receive HSTS header
snapworks.net: did not receive HSTS header
snarf.in: could not connect to host
sneaker.date: could not connect to host
+sneakers88.it: could not connect to host
sneed.company: could not connect to host
sneeuwhoogtes.eu: did not receive HSTS header
sneezry.com: did not receive HSTS header
@@ -20120,6 +20879,7 @@ snoqualmiefiber.org: could not connect to host
snoringhq.com: did not receive HSTS header
snovey.com: could not connect to host
snow-online.de: could not connect to host
+snowalerts.eu: could not connect to host
snowdy.eu: could not connect to host
snowdy.link: could not connect to host
so-healthy.co.uk: did not receive HSTS header
@@ -20127,8 +20887,8 @@ sobabox.ru: could not connect to host
sobelift.com: could not connect to host
sobinski.pl: did not receive HSTS header
soboleva-pr.com.ua: could not connect to host
-soc.net: could not connect to host
soccergif.com: could not connect to host
+soccorso-stradale.org: could not connect to host
soci.ml: could not connect to host
social-journey.com: could not connect to host
social-media-strategy.org.uk: could not connect to host
@@ -20139,7 +20899,8 @@ socialfacecook.com: did not receive HSTS header
socialgrowing.cl: did not receive HSTS header
socialhead.io: could not connect to host
socialhub.com: did not receive HSTS header
-socialprize.com: did not receive HSTS header
+socialmedia.ro: did not receive HSTS header
+socialprize.com: could not connect to host
socialspirit.com.br: did not receive HSTS header
socialstrata.com: did not receive HSTS header
socialtraderpartner.com: did not receive HSTS header
@@ -20148,35 +20909,38 @@ socialworkout.com: could not connect to host
socialworkout.net: could not connect to host
socialworkout.org: could not connect to host
socialworkout.tv: could not connect to host
-socketize.com: did not receive HSTS header
+socioambiental.org: did not receive HSTS header
+socketize.com: could not connect to host
sockeye.cc: could not connect to host
socomponents.co.uk: could not connect to host
sodacore.com: could not connect to host
sodamakerclub.com: did not receive HSTS header
sofort.com: did not receive HSTS header
+softart.club: could not connect to host
softballsavings.com: did not receive HSTS header
softbebe.com: did not receive HSTS header
softclean.pt: did not receive HSTS header
softlan.com.py: could not connect to host
+softonic.com.br: did not receive HSTS header
softplaynation.co.uk: did not receive HSTS header
software.rocks: could not connect to host
+softwarebetrieb.de: did not receive HSTS header
softwarehardenberg.nl: did not receive HSTS header
sogeek.me: could not connect to host
sogravatas.net.br: could not connect to host
-sohncloud.my-router.de: did not receive HSTS header
+sohncloud.my-router.de: could not connect to host
+soia.ca: could not connect to host
sojingle.net: could not connect to host
soju.fi: did not receive HSTS header
sokche.com: did not receive HSTS header
sokolka.tv: did not receive HSTS header
sol-3.de: did not receive HSTS header
-sol.works: did not receive HSTS header
solarcom.com.br: could not connect to host
solariiknight.org: did not receive HSTS header
solartrackerapp.com: could not connect to host
soldbygold.net: did not receive HSTS header
soldecom.com: did not receive HSTS header
solentes.com.br: could not connect to host
-solepurposetest.com: did not receive HSTS header
solidfuelappliancespares.co.uk: did not receive HSTS header
solidimage.com.br: could not connect to host
solidtuesday.com: could not connect to host
@@ -20191,29 +20955,33 @@ soloshu.co: could not connect to host
solosmusic.xyz: could not connect to host
solsystems.ru: did not receive HSTS header
soltekla.com: did not receive HSTS header
-soluphant.de: max-age too low: 10368000
+soluphant.de: did not receive HSTS header
solus-project.com: could not connect to host
solutive.fi: did not receive HSTS header
solve-it.se: did not receive HSTS header
solve.co.uk: did not receive HSTS header
solved.tips: could not connect to host
+solvingproblems.com.au: could not connect to host
solymar.co: could not connect to host
+somali-derp.com: could not connect to host
somcase.com.br: did not receive HSTS header
some.rip: did not receive HSTS header
somebodycares.org: did not receive HSTS header
someshit.xyz: could not connect to host
something-else.cf: could not connect to host
somethingnew.xyz: could not connect to host
-somethingsimilar.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-somewherein.jp: did not receive HSTS header
+somethingsimilar.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
somosnoticia.com.br: max-age too low: 0
-somoyorkies.com: could not connect to host
+somp-rp.su: could not connect to host
sonafe.info: could not connect to host
sonerezh.bzh: did not receive HSTS header
songluck.com: could not connect to host
songshuzuoxi.com: could not connect to host
-songsmp3.io: did not receive HSTS header
+songsmp3.co: could not connect to host
+songsmp3.info: could not connect to host
+songsmp3.io: could not connect to host
songsmp3.net: did not receive HSTS header
+songsthatsavedyourlife.com: could not connect to host
sonialive.com: did not receive HSTS header
sonic.network: could not connect to host
sonicrainboom.rocks: could not connect to host
@@ -20227,7 +20995,6 @@ soondy.com: could not connect to host
soontm.de: could not connect to host
soothemobilemassage.com.au: did not receive HSTS header
soph.us: could not connect to host
-sophieandtrey.com: did not receive HSTS header
soply.com: could not connect to host
soporte.cc: did not receive HSTS header
soquee.net: could not connect to host
@@ -20247,12 +21014,13 @@ sosecu.red: could not connect to host
sosesh.shop: could not connect to host
sosiolog.com: did not receive HSTS header
sospromotions.com.au: did not receive HSTS header
-sotai.tk: did not receive HSTS header
+sotai.tk: could not connect to host
sotavasara.net: did not receive HSTS header
sotayhoctap.com: did not receive HSTS header
sotiran.com: did not receive HSTS header
sotor.de: did not receive HSTS header
sotthewes.nl: did not receive HSTS header
+sou-co.jp: did not receive HSTS header
soucorneteiro.com.br: could not connect to host
sougi-review.top: did not receive HSTS header
soulcraft.bz: could not connect to host
@@ -20262,8 +21030,9 @@ souly.cc: could not connect to host
soundedj.com.br: could not connect to host
soundforsound.co.uk: did not receive HSTS header
soundhunter.xyz: could not connect to host
+soundonsound.com: did not receive HSTS header
soundsecurity.io: could not connect to host
-souqtajmeel.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+souqtajmeel.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
souravsaha.com: could not connect to host
sourcecode.love: could not connect to host
sourcelair.com: did not receive HSTS header
@@ -20275,8 +21044,9 @@ southernjamusa.com: did not receive HSTS header
southernlights.xyz: could not connect to host
southernstructuralsolutions.com: did not receive HSTS header
southgale.condos: could not connect to host
+southmelbourne.apartments: could not connect to host
southside-crew.club: could not connect to host
-southsidebargaincenter.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+southsidebargaincenter.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
southwesteventhire.co.uk: did not receive HSTS header
southwindsor-ct.gov: could not connect to host
southworcestershiregpservices.co.uk: could not connect to host
@@ -20294,14 +21064,14 @@ soz6.com: did not receive HSTS header
sp.rw: could not connect to host
spacecafe.org: did not receive HSTS header
spacedust.xyz: could not connect to host
-spacefish.biz: could not connect to host
+spacefish.biz: did not receive HSTS header
spacehq.org: could not connect to host
spacelabs.io: could not connect to host
spacemo.com: did not receive HSTS header
spacountryexplorer.org.au: did not receive HSTS header
spaggel.nl: did not receive HSTS header
spam.lol: could not connect to host
-spamloco.net: could not connect to host
+spamloco.net: did not receive HSTS header
spanda.io: could not connect to host
spangehlassociates.com: did not receive HSTS header
spanien.guide: could not connect to host
@@ -20338,6 +21108,7 @@ spedplus.com.br: did not receive HSTS header
speed-mailer.com: could not connect to host
speedcounter.net: could not connect to host
speeder.cf: could not connect to host
+speeders.cf: could not connect to host
speeds.vip: could not connect to host
speedway.com.pl: did not receive HSTS header
speedyprep.com: did not receive HSTS header
@@ -20347,10 +21118,12 @@ spendwise.com.au: could not connect to host
sperohub.com: could not connect to host
sperohub.io: could not connect to host
sperohub.lt: could not connect to host
+spha.info: did not receive HSTS header
sphereblur.com: could not connect to host
sphinx.network: could not connect to host
spicydog.tk: could not connect to host
spicywombat.com: could not connect to host
+spiegel21.de: did not receive HSTS header
spiegels.nl: did not receive HSTS header
spiel-teppich.de: could not connect to host
spielcasinos.com: did not receive HSTS header
@@ -20372,10 +21145,11 @@ spitfireuav.com: could not connect to host
spititout.it: could not connect to host
split.is: could not connect to host
splunk.zone: could not connect to host
+spmswiss.com: did not receive HSTS header
spoketwist.com: did not receive HSTS header
spokonline.com: could not connect to host
spon.cz: did not receive HSTS header
-sponsorowani.pl: did not receive HSTS header
+sponsorowani.pl: could not connect to host
sponsortobias.com: could not connect to host
spontex.org: did not receive HSTS header
spookyinternet.com: could not connect to host
@@ -20388,6 +21162,8 @@ sportingoods.com.br: could not connect to host
sportressofblogitude.com: did not receive HSTS header
sportscollection.com.br: could not connect to host
sportsmanadvisor.com: could not connect to host
+sportwette.eu: did not receive HSTS header
+sportwetten-anbieter.de: did not receive HSTS header
spot-events.com: could not connect to host
spotifyripper.tk: could not connect to host
spotlightsrule.com: could not connect to host
@@ -20399,7 +21175,7 @@ spreadthenews.eu: could not connect to host
spree.co.za: did not receive HSTS header
spresso.me: did not receive HSTS header
sprigings.com: did not receive HSTS header
-springfieldbricks.com: could not connect to host
+springfieldbricks.com: did not receive HSTS header
springreizen.nl: did not receive HSTS header
springsoffthegrid.com: could not connect to host
sprinklermanohio.com: did not receive HSTS header
@@ -20412,22 +21188,24 @@ sprueche-zur-geburt.info: could not connect to host
sprueche-zur-hochzeit.de: did not receive HSTS header
sprueche-zur-konfirmation.de: did not receive HSTS header
sprutech.de: could not connect to host
+sptr.blog: did not receive HSTS header
spunkt.fr: did not receive HSTS header
spykedigital.com: could not connect to host
+spyroszarzonis.com: could not connect to host
sqetsa.com: did not receive HSTS header
sqkaccountancy.co.uk: did not receive HSTS header
sqshq.de: could not connect to host
squaddraft.com: did not receive HSTS header
-squadlinx.com: could not connect to host
square.gs: could not connect to host
squarelab.it: could not connect to host
squareonebgc.com.ph: could not connect to host
squatldf.org: could not connect to host
squawk.cc: could not connect to host
-squeakql.online: could not connect to host
+squeakie.club: could not connect to host
+squeakql.online: did not receive HSTS header
squids.space: could not connect to host
squirtlesbians.net: could not connect to host
-sqzryang.com: could not connect to host
+sqzryang.com: did not receive HSTS header
sr-cs.net: did not receive HSTS header
srcc.fr: could not connect to host
sreeharis.tk: could not connect to host
@@ -20442,19 +21220,21 @@ srun.in: did not receive HSTS header
srv.solutions: did not receive HSTS header
srvonfire.com: could not connect to host
ss-free.net: could not connect to host
-ss-x.ru: could not connect to host
+ss-x.ru: did not receive HSTS header
ss.wtf: could not connect to host
ss6957.com: could not connect to host
-ssc8689.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-ssc8689.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ssc8689.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+ssc8689.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
ssc8809.com: max-age too low: 0
+sscd.no: could not connect to host
ssco.xyz: could not connect to host
ssconn.com: could not connect to host
ssdservers.co.uk: did not receive HSTS header
ssh-keys.online: did not receive HSTS header
ssh.nu: did not receive HSTS header
sshool.at: could not connect to host
-ssl.panoramio.com: could not connect to host
+ssl.doctor: could not connect to host
+ssl.panoramio.com: did not receive HSTS header
ssl.rip: could not connect to host
sslcertificateshop.com: did not receive HSTS header
ssld.de: could not connect to host
@@ -20468,6 +21248,7 @@ ssrvpn.tech: could not connect to host
sss3s.com: could not connect to host
ssuc.net: could not connect to host
ssworld.ga: could not connect to host
+st-antonius-kuenzell.de: max-age too low: 0
st-li.com: could not connect to host
staack.com: could not connect to host
stabletoken.com: could not connect to host
@@ -20485,8 +21266,7 @@ staffjoystaging.com: could not connect to host
stagend.com: did not receive HSTS header
stagingjobshq.com: could not connect to host
stahl.xyz: could not connect to host
-stahlfors.com: could not connect to host
-stakeshare.org: did not receive HSTS header
+stakeshare.org: could not connect to host
stakestrategy.com: could not connect to host
stalkerhispano.com: max-age too low: 0
stalkthe.net: could not connect to host
@@ -20494,7 +21274,6 @@ stall-zur-linde.de: did not receive HSTS header
stalschermer.nl: could not connect to host
stamboommuller.nl: did not receive HSTS header
stamboomvanderwal.nl: did not receive HSTS header
-stameystreet.com: could not connect to host
stamonicatourandtravel.com: could not connect to host
stampederadon.com: could not connect to host
stampsbar.co.uk: did not receive HSTS header
@@ -20505,7 +21284,6 @@ standuppaddlesports.com.au: did not receive HSTS header
stang.moe: did not receive HSTS header
stannahtrapliften.nl: did not receive HSTS header
star-citizen.wiki: did not receive HSTS header
-star-one.co.uk: could not connect to host
star-stuff.de: did not receive HSTS header
star.do: did not receive HSTS header
star.garden: did not receive HSTS header
@@ -20516,11 +21294,12 @@ stardeeps.net: max-age too low: 0
starease.com: could not connect to host
starease.net: could not connect to host
starfeeling.net: could not connect to host
+starfixreparaciones.com: did not receive HSTS header
stargarder-jungs.de: did not receive HSTS header
stargatepartners.com: did not receive HSTS header
-starinvestors.in: did not receive HSTS header
+starinvestors.in: could not connect to host
starking.net.cn: could not connect to host
-starlightentertainmentdevon.co.uk: did not receive HSTS header
+starlightentertainmentdevon.co.uk: could not connect to host
starmusic.ga: could not connect to host
starphotoboothsni.co.uk: could not connect to host
starplatinum.jp: could not connect to host
@@ -20528,7 +21307,8 @@ starport.com.au: did not receive HSTS header
starquake.nl: did not receive HSTS header
starsbattle.net: could not connect to host
starskim.cn: could not connect to host
-starteesforsale.co.za: did not receive HSTS header
+starteesforsale.co.za: could not connect to host
+startergen.com: could not connect to host
startsamenvitaal.nu: could not connect to host
startup.melbourne: could not connect to host
startupgenius.org: did not receive HSTS header
@@ -20549,7 +21329,6 @@ static.hosting: could not connect to host
static.or.at: did not receive HSTS header
static.today: could not connect to host
staticisnoise.com: could not connect to host
-stationary-traveller.eu: could not connect to host
stationaryjourney.com: did not receive HSTS header
stationatwillowgrove.com: did not receive HSTS header
stationcharlie.com: did not receive HSTS header
@@ -20561,17 +21340,17 @@ statuschecks.net: could not connect to host
stavebnice.net: could not connect to host
staxflax.tk: could not connect to host
stayokhotelscdc-mailing.com: could not connect to host
+stb-strzyzewski.de: did not receive HSTS header
stcable.net: did not receive HSTS header
stcomex.com: could not connect to host
stcu.org: did not receive HSTS header
-stdemianabookstore.org: did not receive HSTS header
stdev.org: could not connect to host
stdev.top: could not connect to host
steakhaus-zumdorfbrunnen.de: did not receive HSTS header
-steamhours.com: could not connect to host
steampunkrobot.com: did not receive HSTS header
steamscore.info: could not connect to host
-steckel.cc: could not connect to host
+steborio.pw: could not connect to host
+steckel.cc: did not receive HSTS header
steelbea.ms: could not connect to host
steelrhino.co: could not connect to host
steem.io: did not receive HSTS header
@@ -20591,14 +21370,14 @@ steph3n.me: could not connect to host
stephanierxo.com: did not receive HSTS header
stephanos.me: could not connect to host
stephenandburns.com: did not receive HSTS header
-stephencreilly.com: could not connect to host
stephensolis.net: could not connect to host
stephensolisrey.es: could not connect to host
steplogictalent.com: could not connect to host
sterjoski.com: did not receive HSTS header
sterlingheights.gov: could not connect to host
+sterlingleads.co.uk: did not receive HSTS header
+sternenbund.info: could not connect to host
stetspa.it: could not connect to host
-steuer-voss.de: could not connect to host
steuerberater-essen-steele.com: could not connect to host
steuerkanzlei-und-wirtschaftsberater-manke.de: could not connect to host
steuerseminare-graf.de: did not receive HSTS header
@@ -20609,10 +21388,12 @@ stevengoodpaster.com: could not connect to host
stevenhumphrey.uk: did not receive HSTS header
stevenkwan.me: did not receive HSTS header
stevenlepen.fr: did not receive HSTS header
+stevenroddis.com: did not receive HSTS header
stevensheffey.me: could not connect to host
stevensononthe.net: did not receive HSTS header
steventruesdell.com: could not connect to host
stewartremodelingadvantage.com: could not connect to host
+stforex.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
stge.uk: could not connect to host
stichtingscholierenvervoerzeeland.nl: could not connect to host
stickerparadise.me: could not connect to host
@@ -20635,7 +21416,7 @@ stinkytrashhound.com: could not connect to host
stirlingpoon.net: could not connect to host
stirlingpoon.xyz: could not connect to host
stisaac.org: did not receive HSTS header
-stitthappens.com: could not connect to host
+stitthappens.com: did not receive HSTS header
stjohnmiami.org: did not receive HSTS header
stjohnsc.com: could not connect to host
stkbn.com: could not connect to host
@@ -20643,8 +21424,10 @@ stkeverneparishcouncil.org.uk: did not receive HSTS header
stl.news: max-age too low: 2592000
stlucasmuseum.org: did not receive HSTS header
stmarkcharlotte.org: did not receive HSTS header
+stmaryextra.uk: could not connect to host
stmbgr.com: could not connect to host
stn.me.uk: did not receive HSTS header
+stnevis.ru: could not connect to host
stnl.de: could not connect to host
stockseyeserum.com: could not connect to host
stocktrade.de: could not connect to host
@@ -20664,6 +21447,7 @@ stonemain.eu: could not connect to host
stonemanbrasil.com.br: could not connect to host
stopakwardhandshakes.org: could not connect to host
stopbreakupnow.org: could not connect to host
+stopmodacruel.org: could not connect to host
stopwoodfin.org: could not connect to host
storbritannien.guide: could not connect to host
store-host.com: did not receive HSTS header
@@ -20676,17 +21460,17 @@ storeprijs.nl: did not receive HSTS header
storiesofhealth.org: did not receive HSTS header
stormhub.org: could not connect to host
stormwatcher.org: could not connect to host
-stormyyd.com: could not connect to host
-storytea.top: could not connect to host
+stormyyd.com: max-age too low: 0
stpatricksguild.com: did not receive HSTS header
-stqry.com: did not receive HSTS header
+stqry.com: could not connect to host
str0.at: did not receive HSTS header
straightedgebarbers.ca: did not receive HSTS header
-strajnar.si: could not connect to host
+straka.name: could not connect to host
stralingsonzin.com: could not connect to host
strangeplace.net: did not receive HSTS header
strangescout.me: could not connect to host
strasweb.fr: did not receive HSTS header
+strategos.co: could not connect to host
stratuscloudconsulting.cn: did not receive HSTS header
stratuscloudconsulting.co.uk: did not receive HSTS header
stratuscloudconsulting.co.za: did not receive HSTS header
@@ -20705,6 +21489,7 @@ streamingeverywhere.com: could not connect to host
streamingmagazin.de: could not connect to host
streamlineautogroup.com: could not connect to host
streampanel.net: did not receive HSTS header
+streampleasure.xyz: could not connect to host
streams.dyndns.org: could not connect to host
streamthemeeting.com: did not receive HSTS header
streamzilla.com: did not receive HSTS header
@@ -20721,10 +21506,12 @@ stringbeanstudio.com: did not receive HSTS header
striptizer.tk: could not connect to host
strming.com: could not connect to host
stroeercrm.de: could not connect to host
+stroke-of-luck.com: did not receive HSTS header
strom.family: could not connect to host
stromberger.org: max-age too low: 172800
strongest-privacy.com: could not connect to host
strongtowerpc.com: could not connect to host
+structure.systems: could not connect to host
strutta.me: max-age too low: 2592000
struxureon.com: did not receive HSTS header
stuartbaxter.co: could not connect to host
@@ -20738,7 +21525,6 @@ studentskydenik.cz: could not connect to host
studenttravel.cz: could not connect to host
studer.su: could not connect to host
studiemeter.nl: did not receive HSTS header
-studienportal.eu: could not connect to host
studienservice.de: did not receive HSTS header
studiereader.nl: did not receive HSTS header
studinf.xyz: could not connect to host
@@ -20748,7 +21534,7 @@ studio44.fit: did not receive HSTS header
studiocn.cn: could not connect to host
studiodentisticosanmarco.it: could not connect to host
studiodoprazer.com.br: could not connect to host
-studiotrece.com: did not receive HSTS header
+studiotrece.com: could not connect to host
studiozelden.com: did not receive HSTS header
studport.rv.ua: could not connect to host
studyabroadstation.com: could not connect to host
@@ -20762,36 +21548,34 @@ stuffie.org: did not receive HSTS header
stuffiwouldbuy.com: could not connect to host
stugb.de: did not receive HSTS header
stumeta2018.de: could not connect to host
-stumf.si: could not connect to host
stupidstatetricks.com: could not connect to host
sturbi.de: did not receive HSTS header
sturbock.me: did not receive HSTS header
sturdio.com.br: could not connect to host
sturge.co.uk: did not receive HSTS header
stutsmancounty.gov: could not connect to host
-stuttgart-gablenberg.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+stuttgart-gablenberg.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
stuudium.cloud: could not connect to host
stuudium.life: could not connect to host
-stylaq.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+stylaq.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
stylenda.com: could not connect to host
-styles.pm: could not connect to host
+styles.pm: did not receive HSTS header
stylle.me: could not connect to host
styloeart.com: could not connect to host
-stytt.com: could not connect to host
+stytt.com: did not receive HSTS header
suaraangin.com: could not connect to host
suareforma.com: could not connect to host
suave.io: did not receive HSTS header
subbing.work: could not connect to host
subeesu.com: could not connect to host
subhacker.net: could not connect to host
-subjektzentrisch.de: could not connect to host
sublevel.net: did not receive HSTS header
subrain.com: did not receive HSTS header
subrosa.io: could not connect to host
subrosr.com: could not connect to host
-subsys.no: did not receive HSTS header
subterfuge.io: did not receive HSTS header
subtitle.rip: could not connect to host
+subtlelonging.com: did not receive HSTS header
subwayz.de: did not receive HSTS header
subzerolosangeles.com: did not receive HSTS header
subzerotech.co.uk: could not connect to host
@@ -20799,10 +21583,10 @@ successwithflora.com: could not connect to host
succubus.network: could not connect to host
succubus.xxx: could not connect to host
suchprogrammer.net: did not receive HSTS header
-sud66.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+sud66.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
sudo.im: could not connect to host
sudo.org.au: did not receive HSTS header
-sudokian.io: could not connect to host
+sudokian.io: did not receive HSTS header
sudosu.fr: could not connect to host
sudya-dredd.ru: did not receive HSTS header
suempresa.cloud: could not connect to host
@@ -20816,10 +21600,9 @@ suite73.org: could not connect to host
suited21.com: could not connect to host
suitocracy.com: could not connect to host
sujatadev.in: could not connect to host
-suki.moe: could not connect to host
sukoyakapp.com: could not connect to host
sulian.me: could not connect to host
-summa-prefis.com: did not receive HSTS header
+summa-prefis.com: could not connect to host
summer.ga: could not connect to host
summermc.cc: could not connect to host
summitbankofkc.com: did not receive HSTS header
@@ -20828,28 +21611,24 @@ sumoscout.de: did not receive HSTS header
sumthing.com: could not connect to host
sun-leo.co.jp: did not receive HSTS header
sun-wellness-online.com.vn: did not receive HSTS header
-sun.re: did not receive HSTS header
+sun.re: could not connect to host
sunboxstore.jp: did not receive HSTS header
suncountrymarine.com: did not receive HSTS header
sundaycooks.com: max-age too low: 2592000
-sundayrest.com: max-age too low: 7889238
+sundayrest.com: did not receive HSTS header
suneilpatel.com: could not connect to host
sunfeathers.net: could not connect to host
sunfireshop.com.br: could not connect to host
-sunjaydhama.com: could not connect to host
sunlandsg.vn: did not receive HSTS header
sunnyfruit.ru: could not connect to host
-sunnylyx.com: could not connect to host
-sunnysidechurchofchrist.org: did not receive HSTS header
sunriseafricarelief.com: could not connect to host
sunset.im: did not receive HSTS header
-sunshinepress.org: could not connect to host
+sunshinepress.org: did not receive HSTS header
sunxchina.com: could not connect to host
sunyanzi.tk: could not connect to host
sunyataherb.com: could not connect to host
suool.net: did not receive HSTS header
suos.io: could not connect to host
-suourl.com: did not receive HSTS header
supcoronado.com: did not receive HSTS header
supcro.com: could not connect to host
super-demarche.com: did not receive HSTS header
@@ -20869,7 +21648,6 @@ superklima.ro: did not receive HSTS header
superlentes.com.br: could not connect to host
supernovabrasil.com.br: did not receive HSTS header
superpase.com: could not connect to host
-supersahnetorten.de: could not connect to host
supersalescontest.nl: did not receive HSTS header
superschnappchen.de: could not connect to host
supersec.es: could not connect to host
@@ -20886,13 +21664,14 @@ supportfan.gov: could not connect to host
supportme123.com: did not receive HSTS header
suppwatch.com: could not connect to host
suprlink.net: could not connect to host
-supweb.ovh: could not connect to host
+supweb.ovh: did not receive HSTS header
surao.cz: max-age too low: 60
surasak.io: could not connect to host
surasak.net: could not connect to host
surasak.org: could not connect to host
surasak.xyz: could not connect to host
suraya.online: could not connect to host
+surdam.casa: could not connect to host
surfeasy.com: did not receive HSTS header
surfone-leucate.com: did not receive HSTS header
surfpacific.com: max-age too low: 300
@@ -20905,7 +21684,7 @@ survivalistplanet.com: could not connect to host
survivalmonkey.com: did not receive HSTS header
susanbpilates.co: could not connect to host
susanvelez.com: did not receive HSTS header
-susastudentenjobs.de: could not connect to host
+susastudentenjobs.de: did not receive HSTS header
susconam.org: could not connect to host
suseasky.com: could not connect to host
sushifrick.de: could not connect to host
@@ -20925,7 +21704,7 @@ svatba-frantovi.cz: could not connect to host
svdreamcatcher.com: did not receive HSTS header
sve-hosting.nl: could not connect to host
svenbacia.me: could not connect to host
-svenrath.de: could not connect to host
+svenrath.de: did not receive HSTS header
svenskacasino.com: could not connect to host
svenskaservern.se: could not connect to host
svetdrzaku.cz: did not receive HSTS header
@@ -20940,6 +21719,7 @@ swagsocial.net: could not connect to host
swaleacademiestrust.org.uk: did not receive HSTS header
swallsoft.co.uk: could not connect to host
swallsoft.com: could not connect to host
+swankism.com: could not connect to host
swanseapartyhire.co.uk: could not connect to host
swarovski-lov.cz: max-age too low: 0
sway.com: did not receive HSTS header
@@ -20951,8 +21731,8 @@ sweetenedcondensed.com: did not receive HSTS header
sweetlegs.jp: could not connect to host
sweetstreats.ca: could not connect to host
sweetvanilla.jp: could not connect to host
+sweetydecor.ru: could not connect to host
swehack.org: could not connect to host
-swey.net: could not connect to host
swfloshatraining.com: could not connect to host
swift-devedge.de: could not connect to host
swiftconf.com: did not receive HSTS header
@@ -20973,9 +21753,9 @@ swisstranslate.ch: did not receive HSTS header
swisstranslate.fr: did not receive HSTS header
swisswebhelp.ch: could not connect to host
swissxperts.ch: could not connect to host
-switch.moe: did not receive HSTS header
swite.com: did not receive HSTS header
switzerland-family-office.com: did not receive HSTS header
+swj.red: could not connect to host
swmd5c.org: could not connect to host
swordfighting.net: could not connect to host
swqa.hu: could not connect to host
@@ -20983,7 +21763,7 @@ swu.party: could not connect to host
swuosa.org: did not receive HSTS header
sx3.no: could not connect to host
sx6957.com: could not connect to host
-sxbk.pw: could not connect to host
+sxbk.pw: did not receive HSTS header
sxwancai18.com: max-age too low: 0
syam.cc: could not connect to host
syamutodon.xyz: could not connect to host
@@ -20994,8 +21774,10 @@ syhost.ch: did not receive HSTS header
syhost.de: did not receive HSTS header
sykl.us: could not connect to host
sylvaincombe.net: did not receive HSTS header
+sylvan.me: could not connect to host
+sylvangarden.net: could not connect to host
sylvangarden.org: could not connect to host
-sylvanorder.com: did not receive HSTS header
+sylvanorder.com: could not connect to host
symbiose-bien-etre.ch: did not receive HSTS header
symetria.io: could not connect to host
synackr.com: could not connect to host
@@ -21007,10 +21789,9 @@ syncclinicalstudy.com: could not connect to host
syncer.jp: did not receive HSTS header
synchronicity.cz: could not connect to host
syncmylife.net: could not connect to host
-syncserve.net: could not connect to host
+syncserve.net: did not receive HSTS header
syneic.com: did not receive HSTS header
synergisticsoccer.com: could not connect to host
-synfin.org: could not connect to host
syno.gq: could not connect to host
syntaxnightmare.com: could not connect to host
syntaxoff.com: could not connect to host
@@ -21019,11 +21800,11 @@ syntheticurinereview.com: did not receive HSTS header
syobon.org: could not connect to host
syoier.com: could not connect to host
syracuseut.gov: did not receive HSTS header
-syriatalk.biz: could not connect to host
+syriatalk.biz: did not receive HSTS header
syriatalk.org: did not receive HSTS header
syrocon.ch: could not connect to host
sys.tf: could not connect to host
-sysadmin.xyz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+sysadmin.xyz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
sysadminstory.com: could not connect to host
sysdot.blog: did not receive HSTS header
sysert.tv: could not connect to host
@@ -21034,17 +21815,16 @@ sysrq.tech: could not connect to host
syss.de: did not receive HSTS header
systea.net: could not connect to host
system-online.cz: could not connect to host
-systemchile.com: could not connect to host
systemd.me: could not connect to host
+systemonthego.com: could not connect to host
systemreboot.net: did not receive HSTS header
systemzeit.info: could not connect to host
sytk.me: could not connect to host
syukatsu-net.jp: did not receive HSTS header
-syunpay.cn: could not connect to host
syy.hk: did not receive HSTS header
szagun.net: did not receive HSTS header
szaszm.tk: could not connect to host
-szc.me: could not connect to host
+szaydon.me: did not receive HSTS header
szczot3k.pl: did not receive HSTS header
szepsegbennedrejlik.hu: could not connect to host
szerbnyelvkonyv.hu: could not connect to host
@@ -21054,7 +21834,6 @@ szetowah.org.hk: could not connect to host
szlovaknyelv.hu: could not connect to host
szlovennyelv.hu: could not connect to host
szongott.net: did not receive HSTS header
-szymczak.at: did not receive HSTS header
t-complex.space: could not connect to host
t-ken.xyz: could not connect to host
t-point.eu: did not receive HSTS header
@@ -21066,7 +21845,6 @@ t23m-navi.jp: did not receive HSTS header
t4c-rebirth.com: could not connect to host
t4x.org: could not connect to host
t5118.com: could not connect to host
-t9i.in: did not receive HSTS header
ta-sports.net: did not receive HSTS header
taabe.xyz: could not connect to host
taartenfeesies.nl: did not receive HSTS header
@@ -21077,6 +21855,7 @@ tabino.top: did not receive HSTS header
tabitatsu.jp: did not receive HSTS header
tabla-periodica.com: could not connect to host
tachyonapp.com: could not connect to host
+tacklinglife.com: did not receive HSTS header
tacklog.com: could not connect to host
tacoma-games.com: could not connect to host
tacostea.net: could not connect to host
@@ -21089,14 +21868,14 @@ tafoma.com: did not receive HSTS header
tageau.com: could not connect to host
tagesmutter-in-bilm.de: did not receive HSTS header
tagesmutter-zwitscherlinge.de: did not receive HSTS header
-tagpay.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tagpay.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tahakomat.cz: could not connect to host
-taherian.me: did not receive HSTS header
tahf.net: could not connect to host
+tahmintr.com: could not connect to host
tahosalodge.org: did not receive HSTS header
-tai-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-tai-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-taichi-jade.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tai-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tai-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+taichi-jade.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
taidu.news: could not connect to host
tailandfur.com: did not receive HSTS header
tailify.com: did not receive HSTS header
@@ -21106,13 +21885,15 @@ taiphanmem.net: did not receive HSTS header
takebackyourstate.com: could not connect to host
takebackyourstate.net: could not connect to host
takebackyourstate.org: could not connect to host
-takebonus.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+takebonus.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
taki.sh: could not connect to host
taki.to: could not connect to host
takinet.kr: could not connect to host
tako-miyabi.xyz: could not connect to host
takusan.ru: could not connect to host
+talado.gr: could not connect to host
talenthero.io: did not receive HSTS header
+talenthub.co.nz: could not connect to host
talentuar.com: could not connect to host
tales-of-interia.de: could not connect to host
talheim-records.ca: could not connect to host
@@ -21127,6 +21908,7 @@ talktobot.com: could not connect to host
talktwincities.com: could not connect to host
tallr.se: could not connect to host
tallshoe.com: could not connect to host
+talon.rip: could not connect to host
talsi.eu: could not connect to host
tam-moon.com: could not connect to host
tam7t.com: did not receive HSTS header
@@ -21138,7 +21920,7 @@ tandblekningidag.com: could not connect to host
tandem-trade.ru: could not connect to host
tandilmap.com.ar: did not receive HSTS header
tangerine.ga: could not connect to host
-tangibilizing.com: could not connect to host
+tangibilizing.com: did not receive HSTS header
tangiblesecurity.com: did not receive HSTS header
tango-cats.de: could not connect to host
tangsisi.com: could not connect to host
@@ -21146,6 +21928,7 @@ tangzhao.net: could not connect to host
taniesianie.pl: did not receive HSTS header
tankfreunde.de: did not receive HSTS header
tanner.sh: could not connect to host
+tanshin.xyz: max-age too low: 2592000
tante-bugil.net: could not connect to host
tantotiempo.de: did not receive HSTS header
tanze-jetzt.de: could not connect to host
@@ -21153,6 +21936,7 @@ taotuba.net: did not receive HSTS header
taozj.org: did not receive HSTS header
tapakgram.com: did not receive HSTS header
tapestries.tk: could not connect to host
+tapety-na-pulpit.net: did not receive HSTS header
tapfinder.ca: could not connect to host
tapka.cz: did not receive HSTS header
taplamvan.net: did not receive HSTS header
@@ -21179,14 +21963,14 @@ tasticfilm.com: could not connect to host
tastyyy.co: could not connect to host
tasyacherry-anal.com: could not connect to host
tateesq.com: did not receive HSTS header
-tatilbus.com: could not connect to host
+tatilbus.com: did not receive HSTS header
tatildukkani.com: did not receive HSTS header
tatilmix.com: could not connect to host
tatiloley.com: did not receive HSTS header
tatort-fanpage.de: could not connect to host
tatt.io: could not connect to host
tauchkater.de: could not connect to host
-tauschen.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tauschen.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tavoittaja.fi: did not receive HSTS header
tavopica.lt: did not receive HSTS header
taxbench.com: could not connect to host
@@ -21196,12 +21980,13 @@ taxisafmatosinhos.pt: could not connect to host
taxmadras.com: could not connect to host
taxsnaps.co.nz: did not receive HSTS header
taxspeaker.com: did not receive HSTS header
+tayanamina.com: could not connect to host
taylorreaume.com: did not receive HSTS header
tazemama.biz: could not connect to host
tazj.in: did not receive HSTS header
tazz.in: could not connect to host
tbarter.com: did not receive HSTS header
-tbpixel.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tbpixel.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tbrss.com: did not receive HSTS header
tbys.us: could not connect to host
tc-bonito.de: did not receive HSTS header
@@ -21212,11 +21997,11 @@ tcby45.xyz: could not connect to host
tcdww.cn: could not connect to host
tcg-digital.com: did not receive HSTS header
tchaka.top: could not connect to host
-tchnics.de: could not connect to host
tcl.ath.cx: did not receive HSTS header
tcp.expert: did not receive HSTS header
tcptun.com: could not connect to host
tcwebvn.com: could not connect to host
+tda602-secure-login.tk: could not connect to host
tdelmas.eu: could not connect to host
tdelmas.ovh: could not connect to host
tdpblog.site: could not connect to host
@@ -21235,11 +22020,13 @@ teabagdesign.co.uk: could not connect to host
teacherph.net: could not connect to host
teachertool.io: could not connect to host
teachforcanada.ca: did not receive HSTS header
+teachmeplease.com: did not receive HSTS header
tealdrones.com: did not receive HSTS header
+team-bbd.com: could not connect to host
team-pancake.eu: could not connect to host
team-teasers.com: could not connect to host
team.house: did not receive HSTS header
-team2fou.cf: did not receive HSTS header
+team2fou.cf: could not connect to host
teamassists.com: did not receive HSTS header
teambeoplay.co.uk: did not receive HSTS header
teamblueridge.org: could not connect to host
@@ -21250,12 +22037,11 @@ teamnetsol.com: did not receive HSTS header
teampoint.cz: could not connect to host
teamsocial.co: did not receive HSTS header
teamtmgb.fr: did not receive HSTS header
-teamtravel.co: did not receive HSTS header
+teamtravel.co: could not connect to host
teamusec.de: could not connect to host
teamzeus.cz: could not connect to host
teaparty.id: could not connect to host
tearoy.faith: did not receive HSTS header
-teb-akademia.pl: could not connect to host
tebieer.com: could not connect to host
tech-blog.fr: could not connect to host
tech-finder.fr: could not connect to host
@@ -21272,6 +22058,7 @@ techday.com.au: did not receive HSTS header
techday.eu: did not receive HSTS header
techelements.co: did not receive HSTS header
techfactslive.com: did not receive HSTS header
+techgadgetry.in: did not receive HSTS header
techhipster.net: could not connect to host
techhub.ml: could not connect to host
techiehall.com: could not connect to host
@@ -21282,7 +22069,7 @@ techmatehq.com: could not connect to host
technicalbrothers.cf: could not connect to host
technicalforensic.com: could not connect to host
technicalpenguins.com: did not receive HSTS header
-techniclab.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+techniclab.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
technifocal.com: could not connect to host
technikrom.org: did not receive HSTS header
technogroup.cz: did not receive HSTS header
@@ -21303,18 +22090,20 @@ techtrackerpro.com: could not connect to host
techtraveller.com.au: did not receive HSTS header
techtuts.info: could not connect to host
techunit.org: could not connect to host
+techvhow.com: could not connect to host
techwithcromulent.com: could not connect to host
-techzjc.com: could not connect to host
tecit.ch: could not connect to host
tecmarkdig.com: could not connect to host
+tecnidev.com: did not receive HSTS header
tecnimotos.com: did not receive HSTS header
tecnologino.com: did not receive HSTS header
tecture.de: did not receive HSTS header
+tecyt.com: could not connect to host
tedovo.com: could not connect to host
tedxkmitl.com: could not connect to host
tedxodense.com: did not receive HSTS header
tee-idf.net: could not connect to host
-teehaus-shila.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+teehaus-shila.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
teencounseling.com: did not receive HSTS header
teeplelaw.com: did not receive HSTS header
teesypeesy.com: max-age too low: 2592000
@@ -21329,6 +22118,7 @@ tekiro.com: did not receive HSTS header
teknogeek.id: could not connect to host
teknolit.com: could not connect to host
teknologi.or.id: max-age too low: 36000
+teknoroit.com: could not connect to host
teknotes.co.uk: could not connect to host
tekshrek.com: did not receive HSTS header
teksuperior.com: could not connect to host
@@ -21346,7 +22136,7 @@ telecharger-winrar.com: could not connect to host
telefisk.org: did not receive HSTS header
telefonnummer.online: could not connect to host
telefonogratuito.com: did not receive HSTS header
-telefoonnummerinfo.nl: could not connect to host
+telefoonnummerinfo.nl: did not receive HSTS header
telegramdr.com: did not receive HSTS header
telekollektiv.org: could not connect to host
telepons.com: could not connect to host
@@ -21355,6 +22145,7 @@ teleshop.be: could not connect to host
telesto.online: could not connect to host
teletra.ru: could not connect to host
telfordwhitehouse.co.uk: did not receive HSTS header
+telibee.com: did not receive HSTS header
tellcorpassessoria.com.br: did not receive HSTS header
telugu4u.net: could not connect to host
temehu.com: did not receive HSTS header
@@ -21375,32 +22166,36 @@ tenma.pro: could not connect to host
tenni.xyz: could not connect to host
tennisadmin.com: could not connect to host
tennisapp.org: did not receive HSTS header
+tenniscourtsjoburg.com: could not connect to host
tennispensacola.com: could not connect to host
tensei-slime.com: did not receive HSTS header
tensionup.com: could not connect to host
tent.io: could not connect to host
tentabrowser.com: could not connect to host
-tenthousandbottoms.com: did not receive HSTS header
+tenthousandbottoms.com: could not connect to host
tenthpin.com: did not receive HSTS header
tentins.com: could not connect to host
teodio.cl: could not connect to host
teos.online: could not connect to host
teoskanta.fi: could not connect to host
-teplomash24.ru: could not connect to host
terabyteharddrive.net: could not connect to host
tercerapuertoaysen.cl: could not connect to host
-teriiphotography.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+teriiphotography.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
termax.me: did not receive HSTS header
terpotiz.net: did not receive HSTS header
terra-x.net: could not connect to host
terra.by: did not receive HSTS header
terrace.co.jp: did not receive HSTS header
+terralimno.com: did not receive HSTS header
+terralimno.eu: did not receive HSTS header
terranova-nutrition.dk: did not receive HSTS header
terrax.berlin: could not connect to host
terrax.info: did not receive HSTS header
terrax.net: could not connect to host
-terrazoo.de: did not receive HSTS header
+terrazoo.de: could not connect to host
teru.com.br: could not connect to host
+tesoro.pr: did not receive HSTS header
+tessierashpool.de: could not connect to host
test-aankoop.be: did not receive HSTS header
test-achats.be: did not receive HSTS header
test-dns.eu: could not connect to host
@@ -21447,17 +22242,18 @@ th-bl.de: did not receive HSTS header
th3nd.com: did not receive HSTS header
thackert.myfirewall.org: could not connect to host
thagki9.com: did not receive HSTS header
+thai.land: could not connect to host
thaianthro.com: did not receive HSTS header
thaigirls.xyz: did not receive HSTS header
-thaihostcool.com: did not receive HSTS header
+thaihostcool.com: could not connect to host
thailandpropertylistings.com: did not receive HSTS header
thairehabassociation.com: could not connect to host
thala.fr: max-age too low: 157690
thallinger.me: could not connect to host
-thalmann.fr: did not receive HSTS header
thalskarth.com: did not receive HSTS header
thanabh.at: could not connect to host
thatgudstuff.com: did not receive HSTS header
+thatguyalex.com: could not connect to host
thatpodcast.io: did not receive HSTS header
thatvizsla.life: could not connect to host
the-construct.com: could not connect to host
@@ -21467,15 +22263,17 @@ the-finance-blog.com: could not connect to host
the-gdn.net: did not receive HSTS header
the-gist.io: could not connect to host
the-paddies.de: did not receive HSTS header
+the-pcca.org: did not receive HSTS header
the-sky-of-valkyries.com: could not connect to host
-the.ie: could not connect to host
+the.ie: max-age too low: 0
the420vape.org: could not connect to host
theafleo.gq: could not connect to host
theamateurs.net: did not receive HSTS header
theamp.com: did not receive HSTS header
theankhlife.com: could not connect to host
+theaps.net: did not receive HSTS header
thearcheryguide.com: did not receive HSTS header
-theasianshooters.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+theasianshooters.com: could not connect to host
theater.cf: could not connect to host
theavenuegallery.com: did not receive HSTS header
thebakingclass.com: max-age too low: 60
@@ -21487,9 +22285,13 @@ thebeginningisnye.com: could not connect to host
theberkshirescompany.com: could not connect to host
thebest.ch: could not connect to host
thebestofthesprings.com: did not receive HSTS header
+thebestpersonin.ml: could not connect to host
thebestsavingsplan.com: did not receive HSTS header
thebigfail.net: did not receive HSTS header
+thebiggive.org.uk: did not receive HSTS header
+theblackknightsings.com: could not connect to host
thebluub.com: could not connect to host
+theboss.ch: did not receive HSTS header
thebreakhotel.com: did not receive HSTS header
thebrotherswarde.com: could not connect to host
thebte.com: could not connect to host
@@ -21506,18 +22308,20 @@ theclubjersey.com: did not receive HSTS header
thecodeninja.net: did not receive HSTS header
thecoffeehouse.xyz: could not connect to host
thecoffeepod.co.uk: did not receive HSTS header
-thecolumnist.net: did not receive HSTS header
+thecolumnist.net: could not connect to host
+thecompany.pl: did not receive HSTS header
theconcordbridge.azurewebsites.net: could not connect to host
-thecookiejar.me: did not receive HSTS header
+thecookiejar.me: could not connect to host
thecozycastle.com: did not receive HSTS header
thecrochetcottage.net: could not connect to host
-thecstick.com: could not connect to host
thecsw.com: did not receive HSTS header
thecuppacakery.co.uk: did not receive HSTS header
thecuriouscat.net: could not connect to host
+thecyberaid.com: did not receive HSTS header
thedailyupvote.com: could not connect to host
thedarkartsandcrafts.com: could not connect to host
thedebug.life: could not connect to host
+thedermreport.com: could not connect to host
thedevilwearswibra.nl: did not receive HSTS header
thedoctorsorders.pub: did not receive HSTS header
thedominatorsclan.com: could not connect to host
@@ -21527,7 +22331,6 @@ thedrop.pw: did not receive HSTS header
thedrunkencabbage.com: could not connect to host
thedutchmarketers.com: did not receive HSTS header
thedystance.com: could not connect to host
-theebookkeepers.co.za: did not receive HSTS header
theelitebuzz.com: could not connect to host
theendofzion.com: could not connect to host
theepankar.com: could not connect to host
@@ -21537,8 +22340,9 @@ theexpatriate.de: could not connect to host
thefarbeyond.com: could not connect to host
thefashionpolos.com: could not connect to host
thefbstalker.com: could not connect to host
-thefilmcolor.com: could not connect to host
+thefilmcolor.com: did not receive HSTS header
thefootballanalyst.com: did not receive HSTS header
+theforexvalley.com: max-age too low: 0
thefourthmoira.com: did not receive HSTS header
thefox.co: did not receive HSTS header
thefox.com.fr: could not connect to host
@@ -21573,12 +22377,15 @@ thehotness.tech: could not connect to host
thehouseofgod.org.nz: could not connect to host
thehowtohome.com: did not receive HSTS header
theinvisibletrailer.com: could not connect to host
-thej0lt.com: did not receive HSTS header
+theissue.com.au: did not receive HSTS header
+thej0lt.com: could not connect to host
thejobauction.com: did not receive HSTS header
thejserver.de: could not connect to host
thekrewserver.com: did not receive HSTS header
thelapine.ca: did not receive HSTS header
+thelastbeach.top: did not receive HSTS header
thelastsurprise.com: could not connect to host
+thelatedcult.com: did not receive HSTS header
thelefthand.org: could not connect to host
thelinuxspace.com: could not connect to host
thelostyankee.com: could not connect to host
@@ -21589,7 +22396,6 @@ themanufacturingmarketingagency.com: could not connect to host
themarble.co: could not connect to host
themathbehindthe.science: could not connect to host
themeaudit.com: could not connect to host
-themenzentrisch.de: could not connect to host
themerchandiser.net: did not receive HSTS header
themesurgeons.net: could not connect to host
themicrocapital.com: could not connect to host
@@ -21606,7 +22412,6 @@ theo.me: could not connect to host
theodorejones.info: could not connect to host
theojones.name: could not connect to host
theokonst.tk: could not connect to host
-theokouzelis.com: could not connect to host
theoldbrewhouse.info: could not connect to host
theosblog.de: could not connect to host
theosophie-afrique.org: could not connect to host
@@ -21618,6 +22423,7 @@ thepiabo.ovh: could not connect to host
thepiratebay.al: did not receive HSTS header
thepiratebay.poker: could not connect to host
thepiratebay.tech: could not connect to host
+thepiratesociety.org: could not connect to host
theplaidpoodle.com: did not receive HSTS header
theplaydaysbus.co.uk: could not connect to host
theploughharborne.co.uk: did not receive HSTS header
@@ -21634,9 +22440,10 @@ thermo-recetas.com: did not receive HSTS header
theroamingnotary.com: did not receive HSTS header
therockawaysny.com: did not receive HSTS header
theropes.nyc: could not connect to host
-thesassynut.com: did not receive HSTS header
+thesage.cf: could not connect to host
thesearchnerds.co.uk: did not receive HSTS header
thesecurityteam.net: could not connect to host
+theseedbox.xyz: could not connect to host
thesehighsandlows.com: could not connect to host
theseoplatform.co.uk: did not receive HSTS header
theserver201.tk: could not connect to host
@@ -21656,7 +22463,6 @@ thestyle.city: did not receive HSTS header
thetapirsmouth.com: could not connect to host
theteacherscorner.net: max-age too low: 0
thetechnical.me: did not receive HSTS header
-thetenscrolls.com: did not receive HSTS header
thethirdroad.com: did not receive HSTS header
thetorlock.com: could not connect to host
thetorrentfunk.com: could not connect to host
@@ -21665,14 +22471,14 @@ thetruthhurvitz.com: could not connect to host
theunitedstates.io: did not receive HSTS header
theurbanyoga.com: did not receive HSTS header
theuucc.org: did not receive HSTS header
-thevgg.com: could not connect to host
-theviewat55th.com: could not connect to host
thevintagenews.com: did not receive HSTS header
thevoid.one: could not connect to host
thevyra.com: did not receive HSTS header
thewallset.com: could not connect to host
thewarrencenter.org: did not receive HSTS header
-thewaxhouse.shop: did not receive HSTS header
+thewaxhouse.academy: could not connect to host
+thewaxhouse.de: did not receive HSTS header
+thewaxhouse.shop: could not connect to host
theway2u.com: could not connect to host
thewebdexter.com: could not connect to host
thewebfellas.com: did not receive HSTS header
@@ -21684,7 +22490,6 @@ thewoolroom.com.au: did not receive HSTS header
theworld.tk: could not connect to host
thewp.pro: max-age too low: 0
theyachtteam.com: could not connect to host
-theyarnhookup.com: could not connect to host
theyourbittorrent.com: could not connect to host
thezonders.com: did not receive HSTS header
thgros.fr: could not connect to host
@@ -21692,11 +22497,11 @@ thibaultwalle.com: could not connect to host
thibautcharles.net: did not receive HSTS header
thierfreund.de: did not receive HSTS header
thierryhayoz.ch: could not connect to host
+thingsof.org: could not connect to host
thinkcash.nl: could not connect to host
thinkcoding.de: could not connect to host
thinkcoding.org: could not connect to host
thinkdo.jp: could not connect to host
-thinkingplanet.net: could not connect to host
thinklikeanentrepreneur.com: did not receive HSTS header
thinkswap.com: did not receive HSTS header
thinlyveiledcontempt.com: could not connect to host
@@ -21709,22 +22514,24 @@ thisisforager.com: could not connect to host
thisisthefinalact.com: did not receive HSTS header
thisistranquility.life: did not receive HSTS header
thismumdoesntknowbest.com: could not connect to host
-thisserver.dontexist.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+thisserver.dontexist.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
thiswasalreadymyusername.tk: could not connect to host
thkb.net: could not connect to host
thm.vn: did not receive HSTS header
-thomas-bertran.com: could not connect to host
+thmpartners.com: did not receive HSTS header
+thomas-bertran.com: did not receive HSTS header
thomas-ferney.fr: did not receive HSTS header
thomas-gibertie.fr: did not receive HSTS header
thomas-grobelny.de: could not connect to host
thomas-prior.com: could not connect to host
thomascloud.ddns.net: could not connect to host
-thomasgriffin.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+thomasgriffin.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
thomasharvey.me: did not receive HSTS header
thomaskliszowski.fr: did not receive HSTS header
thomasnet.fr: could not connect to host
thomasscholz.com: max-age too low: 2592000
thomasschweizer.net: could not connect to host
+thomaswoo.com: did not receive HSTS header
thorbis.com: could not connect to host
thorbiswebsitedesign.com: could not connect to host
thorgames.nl: did not receive HSTS header
@@ -21736,11 +22543,13 @@ thorshammare.se: did not receive HSTS header
thosci.com: could not connect to host
thot.space: could not connect to host
thoughtlessleaders.online: could not connect to host
+thoughtsynth.com: could not connect to host
+thoughtsynth.net: could not connect to host
+thoughtsynth.org: could not connect to host
thousandgreens.com: did not receive HSTS header
threatcentral.io: could not connect to host
threebrothersbrewing.com: could not connect to host
threebulls.be: did not receive HSTS header
-threefantasy.com: could not connect to host
thriveapproach.co.uk: did not receive HSTS header
thrivesummit.com: max-age too low: 0
thrivewellnesshub.co.za: did not receive HSTS header
@@ -21751,22 +22560,24 @@ thumbtack.com: did not receive HSTS header
thundercampaign.com: could not connect to host
thuviensoft.net: could not connect to host
thynx.io: could not connect to host
-thyrex.fr: could not connect to host
thzone.net: could not connect to host
ti-js.com: could not connect to host
ti.blog.br: did not receive HSTS header
+ti780.com: could not connect to host
tiacollection.com: did not receive HSTS header
tiantangbt.com: could not connect to host
tianxicaipiao.com: could not connect to host
tianxicaipiao.win: could not connect to host
tianxicp.com: could not connect to host
-tianxing.pro: did not receive HSTS header
+tianxing.pro: could not connect to host
tianxingvpn.pro: could not connect to host
tibbitshall.ca: could not connect to host
tibovanheule.site: could not connect to host
+tibovanheule.space: did not receive HSTS header
tichieru.pw: could not connect to host
ticketluck.com: did not receive HSTS header
ticketmates.com.au: did not receive HSTS header
+ticketmaze.com: could not connect to host
ticketoplichting.nl: did not receive HSTS header
tickopa.co.uk: could not connect to host
tickreport.com: did not receive HSTS header
@@ -21779,11 +22590,9 @@ tiendavertigo.com: did not receive HSTS header
tiendschuurstraat.nl: could not connect to host
tiensnet.com: could not connect to host
tier-1-entrepreneur.com: could not connect to host
-tiernanx.com: could not connect to host
tierrarp.com: could not connect to host
-tiffanytravels.com: did not receive HSTS header
-tiggi.pw: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-tightlineproductions.com: could not connect to host
+tiggi.pw: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tightlineproductions.com: did not receive HSTS header
tigit.co.nz: could not connect to host
tijo.ch: could not connect to host
tiki-god.co.uk: could not connect to host
@@ -21795,12 +22604,14 @@ tiliaze.biz: did not receive HSTS header
tiliaze.eu: could not connect to host
tiliaze.info: did not receive HSTS header
tiliaze.net: did not receive HSTS header
-tilient.eu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tilient.eu: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tilkah.com.au: could not connect to host
tillcraft.com: could not connect to host
+tilosp.de: did not receive HSTS header
+tiltedwindmillcrafts.com: could not connect to host
timbeilby.com: could not connect to host
timbuktutimber.com: did not receive HSTS header
-timcamara.com: did not receive HSTS header
+timcamara.com: could not connect to host
timchanhxe.com: did not receive HSTS header
timdebruijn.nl: did not receive HSTS header
time-river.xyz: could not connect to host
@@ -21820,10 +22631,12 @@ timhieubenh.net: did not receive HSTS header
timhieuthuoc.com: could not connect to host
timhjalpen.se: could not connect to host
timklefisch.de: did not receive HSTS header
+timmy.im: could not connect to host
timmy.ws: could not connect to host
timothybjacobs.com: did not receive HSTS header
-timotrans.de: could not connect to host
-timotrans.eu: could not connect to host
+timotrans.de: did not receive HSTS header
+timotrans.eu: did not receive HSTS header
+timowi.de: could not connect to host
timowi.net: could not connect to host
timvandekamp.nl: did not receive HSTS header
timwhite.io: did not receive HSTS header
@@ -21833,7 +22646,6 @@ tindewen.net: could not connect to host
tinf15b4.de: could not connect to host
tink.network: could not connect to host
tinker.career: could not connect to host
-tinkerboard.org: could not connect to host
tinyvpn.net: could not connect to host
tioat.net: could not connect to host
tipbox.is: could not connect to host
@@ -21842,12 +22654,15 @@ tipocloud.cf: could not connect to host
tipps-fuer-den-haushalt.de: could not connect to host
tippspiel.cc: could not connect to host
tipsyk.ru: could not connect to host
+tir-pistolet-chexbres.ch: max-age too low: 86400
tiredofeating.com: could not connect to host
tiremoni.ch: could not connect to host
tirex.media: did not receive HSTS header
+tism.in: could not connect to host
tiste.org: did not receive HSTS header
titanlab.de: could not connect to host
titanleaf.com: did not receive HSTS header
+titanous.com: did not receive HSTS header
titli.fr: could not connect to host
tittarpuls.se: could not connect to host
titties.ml: could not connect to host
@@ -21857,20 +22672,18 @@ tjc.wiki: could not connect to host
tjeckien.guide: could not connect to host
tjkcastles.uk: did not receive HSTS header
tjs.me: could not connect to host
-tjsbouncycastles.co.uk: did not receive HSTS header
+tjsbouncycastles.co.uk: could not connect to host
tju.me: could not connect to host
tjxxzy.com: did not receive HSTS header
tkappertjedemetamorfose.nl: did not receive HSTS header
tkarstens.de: did not receive HSTS header
tkeycoin.com: did not receive HSTS header
tkhw.tk: could not connect to host
-tkn.me: could not connect to host
-tkn.tokyo: did not receive HSTS header
+tkjg.fi: could not connect to host
tkonstantopoulos.tk: could not connect to host
tkts.cl: could not connect to host
tlach.cz: could not connect to host
tlcdn.net: could not connect to host
-tlcnet.info: could not connect to host
tlo.hosting: could not connect to host
tlo.link: could not connect to host
tlo.network: could not connect to host
@@ -21883,7 +22696,7 @@ tm-solutions.eu: could not connect to host
tm.id.au: did not receive HSTS header
tmaward.net: could not connect to host
tmconnects.com: could not connect to host
-tmcpromotions.co.uk: did not receive HSTS header
+tmcpromotions.co.uk: could not connect to host
tmd.cool: could not connect to host
tmdc.ddns.net: did not receive HSTS header
tmhlive.com: could not connect to host
@@ -21895,9 +22708,10 @@ tmprod.com: did not receive HSTS header
tmtradingmorocco.ma: did not receive HSTS header
tnb-plattform.de: could not connect to host
tncnanet.com.br: could not connect to host
+tnd.net.in: max-age too low: 0
tno.io: could not connect to host
-tnosha.gov: could not connect to host
-tnrealid.gov: could not connect to host
+tnosha.gov: did not receive HSTS header
+tnrealid.gov: did not receive HSTS header
tnwioa.gov: could not connect to host
tny.link: could not connect to host
to2mbn.org: could not connect to host
@@ -21913,8 +22727,8 @@ tobiasmathes.com: could not connect to host
tobiasmathes.name: could not connect to host
tobiasofficial.at: could not connect to host
tobiassachs.cf: could not connect to host
-tobiassachs.de: did not receive HSTS header
tobiassachs.tk: could not connect to host
+tobiaswiese.work: could not connect to host
tobis-webservice.de: could not connect to host
toddmissiontx.gov: did not receive HSTS header
todesschaf.org: could not connect to host
@@ -21926,10 +22740,10 @@ todosrv.com: could not connect to host
toerclub-ing-arnhem.nl: did not receive HSTS header
tofa-koeln.de: could not connect to host
tofilmhub.com: could not connect to host
+tofu.cf: could not connect to host
tofu.im: could not connect to host
togelonlinecommunity.com: could not connect to host
tohokufd.com: could not connect to host
-toihoctiengtrung.com: max-age too low: 0
tojeto.eu: did not receive HSTS header
toka.sg: could not connect to host
tokage.me: could not connect to host
@@ -21948,9 +22762,8 @@ tokotamz.net: could not connect to host
tokotimbangandigitalmurah.web.id: max-age too low: 36000
tokoyo.biz: could not connect to host
tokumei.co: did not receive HSTS header
-toldositajuba.com: could not connect to host
tollfreeproxy.com: could not connect to host
-tollsjekk.no: could not connect to host
+tollsjekk.no: did not receive HSTS header
tolud.com: could not connect to host
tom-maxwell.com: did not receive HSTS header
tom.run: did not receive HSTS header
@@ -21958,7 +22771,7 @@ tomandshirley.com: could not connect to host
tomarns.nl: did not receive HSTS header
tomaspialek.cz: did not receive HSTS header
tomaw.net: did not receive HSTS header
-tomaz.eu: could not connect to host
+tomaz.eu: did not receive HSTS header
tombroker.org: did not receive HSTS header
tomcort.com: did not receive HSTS header
tomdudfield.com: did not receive HSTS header
@@ -21985,13 +22798,15 @@ tomyork.net: could not connect to host
tonburi.jp: could not connect to host
tongmu.me: could not connect to host
tonguetechnology.com: could not connect to host
-toni-dis.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+toni-dis.ch: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tonifarres.net: could not connect to host
toniharant.de: could not connect to host
+tonytan.cn: could not connect to host
toomanypillows.com: could not connect to host
toomy.ddns.net: could not connect to host
toontown.team: could not connect to host
-top-esb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tooolroc.org: did not receive HSTS header
+top-esb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
top-solar-info.de: could not connect to host
top-stage.net: could not connect to host
top10mountainbikes.info: could not connect to host
@@ -22004,7 +22819,7 @@ topbrakes.com: could not connect to host
topdeskdev.net: could not connect to host
topdetoxcleanse.com: could not connect to host
topdevbox.net: could not connect to host
-topesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+topesb.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
topkek.ml: could not connect to host
topmarine.se: did not receive HSTS header
topnewstoday.org: could not connect to host
@@ -22014,7 +22829,6 @@ toppik.com.br: could not connect to host
toppointrea.com: could not connect to host
topsailtechnologies.com: could not connect to host
topservercccam.com: did not receive HSTS header
-topservercccam.tv: did not receive HSTS header
topshelfguild.com: could not connect to host
topshoptools.com: could not connect to host
toptenthebest.com: did not receive HSTS header
@@ -22022,7 +22836,7 @@ toptranslation.com: did not receive HSTS header
topvertimai.lt: could not connect to host
topwin.la: could not connect to host
topworktops.co.uk: did not receive HSTS header
-topyachts.com.ua: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+topyachts.com.ua: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
topyx.com: did not receive HSTS header
tor.us: did not receive HSTS header
tor2web.org: could not connect to host
@@ -22035,11 +22849,13 @@ torg-room.ru: could not connect to host
torlock.download: could not connect to host
torproject.org.uk: could not connect to host
torproject.ovh: could not connect to host
+torquato.de: did not receive HSTS header
torrentdownloads.bid: could not connect to host
torrentgamesps2.info: did not receive HSTS header
torrentpier.me: could not connect to host
torrentz.website: could not connect to host
torrentz2.al: could not connect to host
+torrentz2.eu: did not receive HSTS header
torsquad.com: could not connect to host
tortocan.com: could not connect to host
tortugalife.de: could not connect to host
@@ -22053,7 +22869,6 @@ toskana-appartement.de: did not receive HSTS header
totalaccess.com.ua: could not connect to host
totalbeauty.co.uk: did not receive HSTS header
totaldragonshop.com.br: could not connect to host
-totalhomecareinc.com: could not connect to host
totalle.com.br: could not connect to host
totallynotaserver.com: could not connect to host
totalpackers.com: did not receive HSTS header
@@ -22068,20 +22883,21 @@ totot.net: could not connect to host
toucedo.de: could not connect to host
touch-up-net.com: could not connect to host
touchbasemail.com: did not receive HSTS header
+touchinformatica.com: did not receive HSTS header
touchpointidg.us: could not connect to host
touchscreen-handy.de: did not receive HSTS header
touchstonefms.co.uk: did not receive HSTS header
touchsupport.com: did not receive HSTS header
tougetu.com: could not connect to host
-touhou.ac.cn: could not connect to host
touhou.cc: did not receive HSTS header
touhou.tw: did not receive HSTS header
-tounyou-raku.com: did not receive HSTS header
+tounyou-raku.com: could not connect to host
touray-enterprise.ch: could not connect to host
tourify.me: did not receive HSTS header
tourispo.com: could not connect to host
+tournamentmgr.com: did not receive HSTS header
tourpeer.com: did not receive HSTS header
-toursandtransfers.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+toursandtransfers.it: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
toursthatmatter.com: did not receive HSTS header
tousproducteurs.fr: could not connect to host
toutenmusic.fr: could not connect to host
@@ -22104,6 +22920,7 @@ tpe-edu.com: could not connect to host
tpms4u.at: could not connect to host
tppdebate.org: did not receive HSTS header
tql.plus: could not connect to host
+tr0n.net: could not connect to host
trabajarenperu.com: did not receive HSTS header
tracalada.cl: did not receive HSTS header
trace.guru: could not connect to host
@@ -22116,9 +22933,9 @@ traces.ml: could not connect to host
tracetracker.com: did not receive HSTS header
track.plus: could not connect to host
trackdays4fun.com: did not receive HSTS header
+trackdomains.com: could not connect to host
tracker-gps.ch: could not connect to host
trackfeed.tokyo: could not connect to host
-trackingstream.com: could not connect to host
trackmeet.io: did not receive HSTS header
tracktivity.com.au: could not connect to host
trade-smart.ru: could not connect to host
@@ -22159,7 +22976,7 @@ tranceheal.de: did not receive HSTS header
tranceheal.me: could not connect to host
trancendances.fr: could not connect to host
trangcongnghe.com: max-age too low: 5184000
-tranglenull.xyz: did not receive HSTS header
+tranglenull.xyz: could not connect to host
tranos.de: did not receive HSTS header
tranquillapp.com: could not connect to host
transbike.es: did not receive HSTS header
@@ -22176,17 +22993,16 @@ translate.googleapis.com: did not receive HSTS header (error ignored - included
translateblender.ru: could not connect to host
translatoruk.co.uk: did not receive HSTS header
transmithe.net: could not connect to host
+transparent.cf: could not connect to host
transportal.sk: did not receive HSTS header
transsexualpantyhose.com: could not connect to host
-trastornoevitacion.com: did not receive HSTS header
-trastornolimite.com: did not receive HSTS header
tratamentoparacelulite.biz: could not connect to host
trauertexte.info: could not connect to host
traumhuetten.de: did not receive HSTS header
travality.ru: could not connect to host
travel-kuban.ru: did not receive HSTS header
travel-to-nature.ch: did not receive HSTS header
-travel.co.za: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+travel.co.za: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
travel1x1.com: did not receive HSTS header
traveling-thailand.info: could not connect to host
travelinsightswriter.com: could not connect to host
@@ -22197,13 +23013,13 @@ travelpricecheck.com: max-age too low: 0
travisec.com: could not connect to host
travotion.com: could not connect to host
trazosdearte.com: did not receive HSTS header
-treasuredinheritanceministry.com: did not receive HSTS header
treatment.org: could not connect to host
treatprostatewithhifu.com: could not connect to host
treeby.net: could not connect to host
+treefelling-durban.co.za: could not connect to host
treehousebydesign.com: did not receive HSTS header
treeremovaljohannesburg.co.za: could not connect to host
-treeremovalsboksburg.co.za: did not receive HSTS header
+treeremovalsboksburg.co.za: could not connect to host
treino.blog.br: could not connect to host
treker.us: could not connect to host
trell.co.in: did not receive HSTS header
@@ -22216,10 +23032,11 @@ trendkraft.de: did not receive HSTS header
trendydips.com: could not connect to host
trentmaydew.com: could not connect to host
trenztec.ml: could not connect to host
+treussart.com: could not connect to host
trewe.eu: did not receive HSTS header
triadwars.com: did not receive HSTS header
triageo.com.au: could not connect to host
-trialmock.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+trialmock.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
trianon.xyz: could not connect to host
tributh.cf: could not connect to host
tributh.ga: could not connect to host
@@ -22236,6 +23053,7 @@ trileg.net: could not connect to host
trilithsolutions.com: did not receive HSTS header
trim21.cn: could not connect to host
trimarchimanuele.it: did not receive HSTS header
+tringavillasyala.com: could not connect to host
trinity.fr.eu.org: could not connect to host
trinityaffirmations.com: max-age too low: 0
trinitycore.org: max-age too low: 2592000
@@ -22247,19 +23065,21 @@ tripdelta.com: did not receive HSTS header
tripinsider.club: did not receive HSTS header
triple-mmm.de: max-age too low: 0
tripout.tech: did not receive HSTS header
+trish-mcevoy.ru: could not connect to host
trisportas.lt: did not receive HSTS header
+tristanberger.io: could not connect to host
tristanfarkas.one: could not connect to host
triticeaetoolbox.org: did not receive HSTS header
trixies-wish.nz: could not connect to host
trixy.com.br: could not connect to host
triz.co.uk: could not connect to host
trizone.com.au: did not receive HSTS header
+troedel-trolle.de: could not connect to host
troisdorf-gestalten.de: did not receive HSTS header
trollme.me: could not connect to host
-trollscave.xyz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+trollscave.xyz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tronflix.com: did not receive HSTS header
troo.ly: could not connect to host
-troplo.com: did not receive HSTS header
trosell.net: did not receive HSTS header
trouter.io: could not connect to host
trouver-son-chemin.com: could not connect to host
@@ -22267,14 +23087,17 @@ troykelly.com: did not receive HSTS header
trpg.wiki: could not connect to host
trtltravel.com: max-age too low: 7889238
trucchibellezza.com: could not connect to host
+truckers-auction.jp: did not receive HSTS header
truckgpsreviews.com: did not receive HSTS header
truckstop-magazin.de: could not connect to host
true-itk.de: could not connect to host
true.ink: did not receive HSTS header
truebred-labradors.com: could not connect to host
trueessayhelp.co.uk: did not receive HSTS header
+trueinstincts.ca: max-age too low: 0
truejob.com: did not receive HSTS header
truessl.shop: could not connect to host
+truhlarstvi-fise.cz: could not connect to host
trulance.com: did not receive HSTS header
trumeet.top: did not receive HSTS header
truncus-encephali.co.uk: could not connect to host
@@ -22284,7 +23107,7 @@ trustedbody.com: did not receive HSTS header
trustedinnovators.com: could not connect to host
trustednewssites.com: could not connect to host
trusteecar.com: did not receive HSTS header
-trustees.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+trustees.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
trustmeimfancy.com: could not connect to host
trustocean.com: did not receive HSTS header
trybabyschoice.com: could not connect to host
@@ -22304,6 +23127,7 @@ ts2.se: could not connect to host
ts3-dns.me: could not connect to host
ts3-legenda.tech: could not connect to host
ts3.consulting: could not connect to host
+tsai.com.de: did not receive HSTS header
tsaro.io: could not connect to host
tscqmalawi.info: could not connect to host
tsdom.net: could not connect to host
@@ -22320,6 +23144,7 @@ tsumi.moe: could not connect to host
tsura.org: could not connect to host
tsurezurematome.ga: could not connect to host
tsurimap.com: could not connect to host
+tsuyuzakihiroyuki.com: could not connect to host
tt6957.com: could not connect to host
ttackmedical.com.br: could not connect to host
ttchan.org: could not connect to host
@@ -22329,7 +23154,6 @@ tts.co.nz: did not receive HSTS header
ttspttsp.com: could not connect to host
tty.space: could not connect to host
ttz.im: could not connect to host
-tu6.pm: could not connect to host
tuamoronline.com: could not connect to host
tuang-tuang.com: could not connect to host
tubeju.com: could not connect to host
@@ -22364,18 +23188,19 @@ turtlementors.com: could not connect to host
turtles.ga: could not connect to host
tusb.ml: did not receive HSTS header
tusi.co: did not receive HSTS header
+tusksol.com: could not connect to host
tussengelegenwoningverkopen.nl: could not connect to host
tuthowto.com: could not connect to host
tutiendaroja.com: could not connect to host
tutiendarosa.com: could not connect to host
tutoref.com: did not receive HSTS header
tutorio.ga: could not connect to host
-tuttoandroid.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+tuttoandroid.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
tutu.ro: could not connect to host
tuturulianda.com: could not connect to host
tuvalie.com: could not connect to host
+tuxgeo.com: could not connect to host
tuxhound.org: could not connect to host
-tuxone.ch: did not receive HSTS header
tuxpeliculas.com: could not connect to host
tuxrtfm.com: could not connect to host
tv.search.yahoo.com: could not connect to host
@@ -22386,7 +23211,7 @@ tverskaya-outlet.ru: could not connect to host
tvoru.com.ua: did not receive HSTS header
tvqc.com: did not receive HSTS header
tvsheerenhoek.nl: did not receive HSTS header
-tvtubeflix.com: did not receive HSTS header
+tvtubeflix.com: could not connect to host
tvz-materijali.com: could not connect to host
tw-hosting.de: did not receive HSTS header
tw2-tools.ga: could not connect to host
@@ -22412,8 +23237,10 @@ tweetify.io: could not connect to host
twelve.rocks: could not connect to host
twelve.today: could not connect to host
twelverocks.com: could not connect to host
+twem.ddns.net: could not connect to host
twilightcookies.ca: could not connect to host
twillionmas.com: could not connect to host
+twin-tails.xyz: did not receive HSTS header
twinkieman.com: could not connect to host
twinkseason.ca: could not connect to host
twinkseason.co: could not connect to host
@@ -22427,7 +23254,7 @@ twistapp.com: did not receive HSTS header
twistopay.com: did not receive HSTS header
twittelzie.nl: could not connect to host
twitter.ax: could not connect to host
-twocornertiming.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+twocornertiming.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
twogo.com: did not receive HSTS header
twojfaktum.pl: could not connect to host
twolanedesign.com: could not connect to host
@@ -22446,8 +23273,8 @@ txf.pw: could not connect to host
txpi.nsupdate.info: could not connect to host
ty2u.com: did not receive HSTS header
tycjt.vip: could not connect to host
-tyil.nl: did not receive HSTS header
-tyil.work: did not receive HSTS header
+tyil.nl: could not connect to host
+tyil.work: could not connect to host
tykoon.com: could not connect to host
tyl.io: did not receive HSTS header
tyler.coach: could not connect to host
@@ -22462,6 +23289,7 @@ tylyjj.com: max-age too low: 0
type1joe.com: could not connect to host
type1joe.net: could not connect to host
type1joe.org: could not connect to host
+typeblog.net: could not connect to host
typehub.net: could not connect to host
typeofweb.com: did not receive HSTS header
typeonejoe.net: could not connect to host
@@ -22472,6 +23300,7 @@ tyreis.com: could not connect to host
tyrelius.com: could not connect to host
tyroproducts.eu: did not receive HSTS header
tyskland.guide: could not connect to host
+tysox.de: could not connect to host
tz56789.com: did not receive HSTS header
tzappa.net: could not connect to host
tzifas.com: could not connect to host
@@ -22490,9 +23319,10 @@ u175.com: could not connect to host
u17go.com: max-age too low: 2592000
u6957.com: could not connect to host
uachemlabs.com: could not connect to host
+uaci.edu.mx: could not connect to host
uadp.pw: could not connect to host
uahs.org.uk: did not receive HSTS header
-ubalert.com: could not connect to host
+ubalert.com: did not receive HSTS header
uber.com.au: could not connect to host
uberactivist.com: could not connect to host
uberbkk.com: did not receive HSTS header
@@ -22501,11 +23331,12 @@ uberfunction.com: did not receive HSTS header
uberifix.ca: could not connect to host
ubertt.org: could not connect to host
ubi.gg: could not connect to host
-ubicloud.de: could not connect to host
+ubicloud.de: did not receive HSTS header
ubicv.com: could not connect to host
ubis.group: could not connect to host
ubiurbe.com: did not receive HSTS header
ublox.com: did not receive HSTS header
+ubntleaks.com: could not connect to host
ubtce.com: could not connect to host
ubun.net: could not connect to host
ubuntuhot.com: did not receive HSTS header
@@ -22513,6 +23344,7 @@ uc.ac.id: did not receive HSTS header
uchiha.ml: could not connect to host
uclanmasterplan.co.uk: did not receive HSTS header
uclip.club: could not connect to host
+uddate-linthdcp-567app.com: could not connect to host
uddhabhaldar.com: did not receive HSTS header
udsocial.com: could not connect to host
ueba1085.jp: could not connect to host
@@ -22523,6 +23355,7 @@ uerdingen.info: did not receive HSTS header
uesociedadlimitada.com: could not connect to host
ueu.me: did not receive HSTS header
uex.im: could not connect to host
+ufanisi.mx: did not receive HSTS header
ufgaming.com: did not receive HSTS header
uflixit.com: did not receive HSTS header
ufotable.uk: could not connect to host
@@ -22590,6 +23423,7 @@ uhuru-market.com: did not receive HSTS header
uicchy.com: could not connect to host
uitslagensoftware.nl: did not receive HSTS header
ukbc.london: did not receive HSTS header
+ukclimbing.com: did not receive HSTS header
ukdropshipment.co.uk: did not receive HSTS header
ukdropshipment.com: did not receive HSTS header
ukk.dk: did not receive HSTS header
@@ -22610,8 +23444,9 @@ ultimate-memoryplus.com: could not connect to host
ultimate-neuroplus.com: could not connect to host
ultrasite.tk: could not connect to host
ultrasteam.net: could not connect to host
-ultratech.software: could not connect to host
+ultratech.software: did not receive HSTS header
ultros.io: did not receive HSTS header
+uma.vn: did not receive HSTS header
umaimise.info: did not receive HSTS header
umassfive.coop: did not receive HSTS header
umbrellaye.online: could not connect to host
@@ -22623,7 +23458,6 @@ umkmjogja.com: did not receive HSTS header
ump45.moe: could not connect to host
umsapi.com: could not connect to host
umsolugar.com.br: could not connect to host
-umwandeln-online.de: could not connect to host
umzug-berlin24.de: did not receive HSTS header
unapolegetic.co: did not receive HSTS header
unart.info: could not connect to host
@@ -22659,7 +23493,6 @@ undeadbrains.de: could not connect to host
under30stravelinsurance.com.au: did not receive HSTS header
undercovercondoms.co.uk: could not connect to host
underkin.com: could not connect to host
-underskatten.tk: could not connect to host
undo.co.il: could not connect to host
undone.me: did not receive HSTS header
unfiltered.nyc: could not connect to host
@@ -22667,14 +23500,13 @@ unfuddle.cn: could not connect to host
ungeek.eu: did not receive HSTS header
ungeek.fr: max-age too low: 2592000
ungern.guide: could not connect to host
-unhu.fr: could not connect to host
+unhu.fr: did not receive HSTS header
uni-games.com: could not connect to host
uni2share.com: could not connect to host
unicefcards.at: did not receive HSTS header
unicefcards.gr: could not connect to host
unicefkaarten.be: did not receive HSTS header
unicefkort.dk: did not receive HSTS header
-unicioushop.com: could not connect to host
unicmotos.com: did not receive HSTS header
unicooo.com: could not connect to host
unicorn.li: could not connect to host
@@ -22690,12 +23522,11 @@ unikitty-on-tour.com: could not connect to host
uninet.cf: could not connect to host
uniojeda.ml: could not connect to host
unionstationapp.com: could not connect to host
-unique-bouncy-castles.co.uk: did not receive HSTS header
-unirenter.ru: could not connect to host
+unique-bouncy-castles.co.uk: could not connect to host
+unirenter.ru: did not receive HSTS header
unison.com: did not receive HSTS header
unisyssecurity.com: did not receive HSTS header
unitedcyberdevelopment.com: could not connect to host
-unitedprovinces.nl: did not receive HSTS header
unitlabs.net: could not connect to host
unitrade-425.co.za: did not receive HSTS header
univerpack.net: could not connect to host
@@ -22717,7 +23548,9 @@ unplugg3r.dk: could not connect to host
unravel.ie: could not connect to host
unripple.com: could not connect to host
unruh.fr: did not receive HSTS header
+uns.ac.id: did not receive HSTS header
unschoolrules.com: did not receive HSTS header
+unsereins.me: did not receive HSTS header
unstable.network: could not connect to host
unstockd.org: could not connect to host
unsupervised.ca: did not receive HSTS header
@@ -22725,6 +23558,7 @@ unsystem.net: could not connect to host
unterkunft.guru: did not receive HSTS header
unterschicht.tv: could not connect to host
untoldstory.eu: did not receive HSTS header
+unun.fi: did not receive HSTS header
unwiredbrain.com: could not connect to host
unwomen.is: did not receive HSTS header
unworthy.ml: could not connect to host
@@ -22738,8 +23572,8 @@ upboard.jp: could not connect to host
updatehub.io: did not receive HSTS header
upldr.pw: could not connect to host
uploadbro.com: could not connect to host
-uplr.it: could not connect to host
upmchealthsecurity.us: could not connect to host
+upnext.io: could not connect to host
upnorthproperty.com: did not receive HSTS header
uporoops.com: could not connect to host
upr-info.org: did not receive HSTS header
@@ -22753,31 +23587,30 @@ uptimenotguaranteed.com: could not connect to host
uptogood.org: could not connect to host
upupming.site: did not receive HSTS header
ur-lauber.de: did not receive HSTS header
-urban-culture.fr: could not connect to host
urban-garden.lt: could not connect to host
urban-garden.lv: could not connect to host
+urbandance.club: could not connect to host
+urbanmelbourne.info: could not connect to host
urbanmic.com: could not connect to host
urbanstylestaging.com: could not connect to host
-urbansurvival.com: max-age too low: 2592000
+urbansurvival.com: did not receive HSTS header
urbanxhome.com: did not receive HSTS header
-urbexdk.nl: could not connect to host
urbpic.com: could not connect to host
-urcentral.org: could not connect to host
urgences-valais.ch: could not connect to host
urinedrugtesthq.com: did not receive HSTS header
uriport.com: could not connect to host
url.cab: did not receive HSTS header
urlachershop.com.br: did not receive HSTS header
urlchomp.com: did not receive HSTS header
-urlsimple.tk: could not connect to host
-urology.wiki: did not receive HSTS header
+urmom.lol: could not connect to host
uronlinestreams.ga: did not receive HSTS header
urphp.com: could not connect to host
us-immigration.com: did not receive HSTS header
usa-10.com: could not connect to host
-usa250.gov: could not connect to host
+usa250.gov: did not receive HSTS header
usaab.org: could not connect to host
usacitygames.org: did not receive HSTS header
+usadba.net.ru: could not connect to host
usafuelservice.com: did not receive HSTS header
usatomotori.com: did not receive HSTS header
usbirthcertificate.com: could not connect to host
@@ -22804,7 +23637,8 @@ usparklodging.com: did not receive HSTS header
usportsgo.com: could not connect to host
uspsoig.gov: did not receive HSTS header
usr.nz: did not receive HSTS header
-ussemiquincentennial.gov: could not connect to host
+ussemiquincentennial.gov: did not receive HSTS header
+ustensiles-cuisine.boutique: did not receive HSTS header
usu.org.ua: could not connect to host
usuluddin.ga: did not receive HSTS header
ut-addicted.com: did not receive HSTS header
@@ -22823,16 +23657,15 @@ utopianconcept.com: did not receive HSTS header
utopianhomespa.com: did not receive HSTS header
utopianrealms.org: did not receive HSTS header
utopians.dk: could not connect to host
-uttnetgroup.fr: did not receive HSTS header
utube.tw: could not connect to host
utumno.ch: could not connect to host
-utvbloggen.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
uu6957.com: could not connect to host
uuid.cf: did not receive HSTS header
uvarov.pw: could not connect to host
uvolejniku.cz: did not receive HSTS header
+uw2333.com: could not connect to host
uwekoetter.com: did not receive HSTS header
-uwesander.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+uwesander.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
uwfreelanceopticien.nl: could not connect to host
uwimonacs.org.jm: did not receive HSTS header
uwstartups.com: could not connect to host
@@ -22840,7 +23673,7 @@ uxtechnologist.com: did not receive HSTS header
uxux.pl: could not connect to host
uygindir.ml: could not connect to host
uyku-apnesi.com: did not receive HSTS header
-uyym.com: could not connect to host
+uyym.com: did not receive HSTS header
uzmandroid.com: did not receive HSTS header
uzmandroid.net: could not connect to host
uzmandroid.top: could not connect to host
@@ -22877,8 +23710,6 @@ vaibhavchatarkar.com: could not connect to host
val-sec.com: could not connect to host
valaeris.de: could not connect to host
valbonne-consulting.com: could not connect to host
-valcano-krd.ru: could not connect to host
-valcano.ru: could not connect to host
valecnatechnika.cz: could not connect to host
valenhub.com: could not connect to host
valenhub.es: could not connect to host
@@ -22886,13 +23717,16 @@ valenscaelum.com: could not connect to host
valentin-dederer.de: could not connect to host
valentin-ochs.de: could not connect to host
valentin-sundermann.de: did not receive HSTS header
+valentin.ml: could not connect to host
+valentineapparel.com: could not connect to host
valentinera.in: did not receive HSTS header
-vales.io: did not receive HSTS header
-valesdigital.com: did not receive HSTS header
+vales.io: could not connect to host
+valesdigital.com: could not connect to host
valethound.com: could not connect to host
valhallacostarica.com: could not connect to host
valhallamovement.com: did not receive HSTS header
validatis.com: could not connect to host
+valis.sx: could not connect to host
valitron.se: did not receive HSTS header
valkor.pro: could not connect to host
valkyrja.xyz: could not connect to host
@@ -22905,37 +23739,37 @@ valopv.be: could not connect to host
valorizofficial.com: did not receive HSTS header
valshamar.is: could not connect to host
valtoaho.com: could not connect to host
+valtool.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
valuechain.me: could not connect to host
valueofblog.com: could not connect to host
vamoaeturismo.com.br: could not connect to host
vamosfalardesaude.pt: could not connect to host
vampirism.eu: did not receive HSTS header
-vanacht.co.za: could not connect to host
+vanacht.co.za: did not receive HSTS header
vanajahosting.com: did not receive HSTS header
vanderkley.it: could not connect to host
+vanderkroon.nl: could not connect to host
vanderstraeten.dynv6.net: could not connect to host
vanessabalibridal.com: could not connect to host
vanestack.com: could not connect to host
vanetv.com: could not connect to host
vangeluwedeberlaere.be: did not receive HSTS header
+vanhaos.com: could not connect to host
vanitas.xyz: could not connect to host
vanitynailworkz.com: could not connect to host
vansieleghem.com: could not connect to host
-vantaio.com: did not receive HSTS header
+vantru.is: could not connect to host
vanvoro.us: did not receive HSTS header
-vanwoensel.xyz: could not connect to host
vapecom-shop.com: could not connect to host
vapecraftinc.com: did not receive HSTS header
vapehour.com: could not connect to host
-vapeking.co.za: could not connect to host
vapemania.eu: could not connect to host
vapesense.co.uk: could not connect to host
vapordepot.jp: could not connect to host
vaporpunk.space: did not receive HSTS header
varela-electricite.fr: could not connect to host
-variable.agency: could not connect to host
variablyconstant.com: could not connect to host
-varicoseveinssolution.com: did not receive HSTS header
+varicoseveinssolution.com: could not connect to host
varshasookt.com: did not receive HSTS header
varta.io: could not connect to host
vasa-webstranka.sk: did not receive HSTS header
@@ -22954,11 +23788,10 @@ vayaport.com: could not connect to host
vb-oa.co.uk: did not receive HSTS header
vbest.net: could not connect to host
vbestreviews.com: did not receive HSTS header
-vbh2o.com: did not receive HSTS header
vbhelp.org: did not receive HSTS header
+vbql.me: could not connect to host
vbulletin-russia.com: could not connect to host
vbulletinrussia.com: could not connect to host
-vc.gg: did not receive HSTS header
vcdn.xyz: could not connect to host
vcdove.com: could not connect to host
vconcept.ch: could not connect to host
@@ -22988,6 +23821,7 @@ vegetabio.com: max-age too low: 300
veggie-treff.de: did not receive HSTS header
veggiefasting.com: could not connect to host
veggiesbourg.fr: did not receive HSTS header
+veggiesecret.com: did not receive HSTS header
vegis.ro: did not receive HSTS header
veglog.com: could not connect to host
vehent.org: did not receive HSTS header
@@ -23009,21 +23843,20 @@ venmos.com: could not connect to host
venninvestorplatform.com: could not connect to host
venoom.eu: did not receive HSTS header
vensl.org: could not connect to host
-venturebanners.co.uk: did not receive HSTS header
+venturavwparts.com: could not connect to host
venturepro.com: did not receive HSTS header
ventzke.com: did not receive HSTS header
venusbymariatash.com: did not receive HSTS header
venzocrm.com: did not receive HSTS header
+ver.ma: could not connect to host
veraandsteve.date: could not connect to host
veracix.ca: max-age too low: 86400
verdeandco.co.uk: could not connect to host
-verein-zur-pflege-der-geselligkeit.de: could not connect to host
vergeaccessories.com: could not connect to host
vergessen.cn: could not connect to host
verificaprezzi.it: did not receive HSTS header
verifiedinvesting.com: could not connect to host
verifikatorindonesia.com: could not connect to host
-veriomed.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
verios.com.br: did not receive HSTS header
veristor.com: did not receive HSTS header
verliebt-in-bw.de: did not receive HSTS header
@@ -23036,16 +23869,17 @@ vernonhouseofhope.com: did not receive HSTS header
versfin.net: could not connect to host
versia.ru: did not receive HSTS header
versicherungskontor.net: did not receive HSTS header
-versolslapeyre.fr: did not receive HSTS header
vertigo.com.br: did not receive HSTS header
veryhax.de: could not connect to host
veryimportantusers.com: could not connect to host
-veryyounglesbians.com: could not connect to host
+veryyounglesbians.com: did not receive HSTS header
+verzick.com: could not connect to host
vestacp.top: could not connect to host
+vet-planet.com: did not receive HSTS header
vetdnacenter.com: did not receive HSTS header
veteransonline.us: did not receive HSTS header
veterinaire-cazeres-foucault.fr: could not connect to host
-veterinarian-hospital.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+veterinarian-hospital.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
vethouse.com.ua: did not receive HSTS header
vetmgmt.com: could not connect to host
veto.fish: could not connect to host
@@ -23061,10 +23895,12 @@ vhost.co.id: could not connect to host
vhs-bad-wurzach.de: did not receive HSTS header
viabemestar.com.br: could not connect to host
viadeux.com: did not receive HSTS header
+vialorran.com: could not connect to host
viato.fr: could not connect to host
vibrashop.com.br: did not receive HSTS header
vicenage.com: could not connect to host
viceversa.xyz: did not receive HSTS header
+vicgenesis.me: did not receive HSTS header
viciousflora.com: could not connect to host
viciousviscosity.xyz: did not receive HSTS header
vickshomes.com: did not receive HSTS header
@@ -23073,6 +23909,7 @@ victorenxovais.com.br: could not connect to host
victoreriksson.ch: could not connect to host
victoriaville.ca: did not receive HSTS header
victornilsson.pw: did not receive HSTS header
+vida-it.com: did not receive HSTS header
vida.es: could not connect to host
vidarity.com: did not receive HSTS header
vidb.me: could not connect to host
@@ -23089,27 +23926,34 @@ videoueberwachung-set.de: did not receive HSTS header
vider.ga: could not connect to host
vidid.net: could not connect to host
vidiproject.com: did not receive HSTS header
-vidister.de: could not connect to host
viditut.com: could not connect to host
vidkovaomara.si: could not connect to host
vidlyoficial.com: could not connect to host
vidz.ga: could not connect to host
viennan.net: did not receive HSTS header
+vientos.coop: could not connect to host
vierdaagsehotel.nl: could not connect to host
+vieref.eu: could not connect to host
+vierna.ga: could not connect to host
vietnam-lifer.com: could not connect to host
vietnamchevrolet.net: did not receive HSTS header
vietnamguide.co.kr: did not receive HSTS header
-vietnamhost.vn: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+vietnamhost.vn: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
vietnamphotographytours.com: could not connect to host
vietplan.vn: could not connect to host
vieux.pro: could not connect to host
+viewflix.win: could not connect to host
viewmyrecords.com: did not receive HSTS header
viewsea.com: max-age too low: 0
viga.me: could not connect to host
vigilo.cf: could not connect to host
vigilo.ga: could not connect to host
vigour.us: could not connect to host
+viikko.cf: could not connect to host
viikko.eu: could not connect to host
+viikko.ga: could not connect to host
+viikko.gq: could not connect to host
+viikko.ml: could not connect to host
vijos.org: did not receive HSTS header
vikasbabyworld.de: did not receive HSTS header
vikodek.com: did not receive HSTS header
@@ -23126,7 +23970,6 @@ villainsclothing.com.au: could not connect to host
villalaskowa.pl: did not receive HSTS header
villasenor.online: could not connect to host
vilog.me: could not connect to host
-vim.ge: did not receive HSTS header
vimeosucks.nyc: could not connect to host
vinasec.se: could not connect to host
vinbet.org: could not connect to host
@@ -23147,61 +23990,63 @@ vineright.com: did not receive HSTS header
vinesauce.info: could not connect to host
vinetalk.net: could not connect to host
viniferawineclub.com: did not receive HSTS header
-vinihk.com: did not receive HSTS header
+vinigas.com: could not connect to host
+vinihk.com: could not connect to host
vinilosdecorativos.net: could not connect to host
vinnie.gq: could not connect to host
vinogradovka.com: could not connect to host
+vinosalmundo.com: could not connect to host
vintazh.net: could not connect to host
vintock.com: did not receive HSTS header
vinyculture.com: did not receive HSTS header
vio.no: did not receive HSTS header
violenceinterrupted.org: did not receive HSTS header
violet-letter.delivery: could not connect to host
-violetraven.co.uk: could not connect to host
+violetraven.co.uk: did not receive HSTS header
viosey.com: could not connect to host
vioye.com: could not connect to host
vip-9649.com: could not connect to host
vip380.vip: max-age too low: 0
vip4553.com: could not connect to host
vip9649.com: could not connect to host
-vipam8.com: could not connect to host
viperdns.com: could not connect to host
-vipesball.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-vipesball.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-vipesball.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+vipesball.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+vipesball.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+vipesball.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
vipesball.net: could not connect to host
viphospitality.se: did not receive HSTS header
vipi.es: could not connect to host
viplentes.com.br: did not receive HSTS header
vipmusic.ga: could not connect to host
vipnettikasinoklubi.com: did not receive HSTS header
-viqo.pl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+viqo.pl: did not receive HSTS header
viral32111.com: max-age too low: 0
viral8.jp: could not connect to host
viralboombox.xyz: could not connect to host
viralsouls.in: did not receive HSTS header
viralsv.com: could not connect to host
-virgiliocervantes.co.uk: max-age too low: 300
+virgiliocervantes.co.uk: did not receive HSTS header
virginiacrimeanalysisnetwork.org: did not receive HSTS header
virial.de: did not receive HSTS header
-viris.si: max-age too low: 536000
virtual.hk: did not receive HSTS header
-virtualcloud.ddns.net: could not connect to host
virtualhealth.com: did not receive HSTS header
virtualizy.de: did not receive HSTS header
virtualstrongbox.ca: could not connect to host
+virus.pm: could not connect to host
visa-shinsei.com: did not receive HSTS header
visadaifu.com: could not connect to host
visaexpert.co.za: did not receive HSTS header
visanhigia.com: could not connect to host
visaop.com: could not connect to host
viserproject.com: did not receive HSTS header
+visibleone.com: did not receive HSTS header
visioflux-premium.com: could not connect to host
vision-painting.com: did not receive HSTS header
visionarymedia.nl: could not connect to host
visiondigitalsog.com: could not connect to host
-visiondirectionaldrilling.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+visiondirectionaldrilling.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
visiongamestudios.com: could not connect to host
+visionless.me: could not connect to host
visionthroughknowledge.com: could not connect to host
visiontree-beta.eu: could not connect to host
visiontree.eu: could not connect to host
@@ -23211,11 +24056,10 @@ vispaleistexel.nl: did not receive HSTS header
vissanum.com: did not receive HSTS header
vissersgrootboek.nl: did not receive HSTS header
vistarait.com: could not connect to host
-visualdrone.co: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+visualdrone.co: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
visualgrafix.com.mx: could not connect to host
visualvotes.co.uk: could not connect to host
vitagenda.nl: could not connect to host
-vital-tel.co.uk: did not receive HSTS header
vitalamin.at: could not connect to host
vitalamin.ch: could not connect to host
vitalamin.com: could not connect to host
@@ -23230,26 +24074,26 @@ vitamina.com: could not connect to host
vitamineproteine.com: did not receive HSTS header
vitapingu.de: could not connect to host
vitavie.nl: did not receive HSTS header
-vitkutny.cz: could not connect to host
vitta.me: did not receive HSTS header
vitzro.kr: could not connect to host
viva-french.com: did not receive HSTS header
vivasports.com.br: could not connect to host
viveconsalud.club: could not connect to host
+vivianmaier.cn: did not receive HSTS header
viviendy.com: did not receive HSTS header
viviennevandenbos.nl: did not receive HSTS header
vivocloud.com: could not connect to host
vivoseg.com: could not connect to host
-vivremoinscher.fr: could not connect to host
+vivremoinscher.fr: did not receive HSTS header
viza.io: could not connect to host
vizards.cc: could not connect to host
vizeat.com: did not receive HSTS header
vizional.com: could not connect to host
vk4wip.org.au: did not receive HSTS header
vkb-remont.ru: could not connect to host
-vkikaku.com: did not receive HSTS header
vkirichenko.name: could not connect to host
vkulagin.ru: could not connect to host
+vkwebsite.ru: did not receive HSTS header
vlakjebak.nl: did not receive HSTS header
vlastimilburian.cz: did not receive HSTS header
vldkn.net: could not connect to host
@@ -23264,18 +24108,22 @@ vmrdev.com: could not connect to host
vmstan.com: did not receive HSTS header
vmzone.de: could not connect to host
vncg.org: did not receive HSTS header
+vnd.cloud: could not connect to host
vnfs-team.com: did not receive HSTS header
vnpem.org: did not receive HSTS header
+vns1780.com: could not connect to host
+vns3780.com: could not connect to host
vocab.guru: could not connect to host
vocalik.com: could not connect to host
vocalsynth.space: did not receive HSTS header
voceinveste.com: did not receive HSTS header
+vochuys.nl: did not receive HSTS header
vodpay.com: could not connect to host
vodpay.net: could not connect to host
vodpay.org: could not connect to host
vogt.tech: could not connect to host
voicesuk.co.uk: did not receive HSTS header
-void-it.nl: could not connect to host
+void-it.nl: did not receive HSTS header
voidark.com: could not connect to host
voidbot.tk: could not connect to host
voidi.ca: could not connect to host
@@ -23283,6 +24131,7 @@ voidpay.net: could not connect to host
voidpay.org: could not connect to host
voids.org: could not connect to host
voidserv.net: could not connect to host
+voidshift.com: did not receive HSTS header
voidzehn.com: did not receive HSTS header
voilo.club: could not connect to host
voilodaisuki.club: could not connect to host
@@ -23292,25 +24141,20 @@ voirodaisuki.club: could not connect to host
vojtekpince.hu: did not receive HSTS header
vokalsystem.com: did not receive HSTS header
vokurka.net: did not receive HSTS header
-volatimer.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+volatimer.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
volbyzive.cz: could not connect to host
volcain.io: could not connect to host
volcanconcretos.com: could not connect to host
-volcano-kazan.ru: could not connect to host
-volcano-spb.ru: could not connect to host
-volcano-vts.ru: could not connect to host
-volcano24.ru: could not connect to host
-volcanov.ru: could not connect to host
volcrado.com: could not connect to host
volkden.com: could not connect to host
volkerwesselswave.nl: did not receive HSTS header
+volksvorschlagpmar.ch: could not connect to host
volkswurst.de: did not receive HSTS header
vollmondstollen.de: could not connect to host
-volta.io: could not connect to host
+volta.io: did not receive HSTS header
voltimax.com: could not connect to host
voltotc.com: could not connect to host
voluptueuse.com: did not receive HSTS header
-volvipress.gr: did not receive HSTS header
von-lien-aluprofile.de: did not receive HSTS header
von-lien-dachrinnen.de: did not receive HSTS header
von-lien-lichtplatten.de: did not receive HSTS header
@@ -23323,7 +24167,6 @@ vorangerie.com: could not connect to host
vorderklier.de: could not connect to host
vorkbaard.nl: did not receive HSTS header
vorlif.org: did not receive HSTS header
-vorm2.com: did not receive HSTS header
vorte.ga: could not connect to host
vortexhobbies.com: did not receive HSTS header
vos-fleurs.com: could not connect to host
@@ -23334,7 +24177,6 @@ votewa.gov: max-age too low: 2592000
votocek.cz: could not connect to host
votockova.cz: could not connect to host
votre-site-internet.ch: did not receive HSTS header
-votresiteweb.ch: could not connect to host
vow.vn: could not connect to host
vowsy.club: could not connect to host
vox.vg: could not connect to host
@@ -23351,6 +24193,7 @@ vpsvz.cloud: could not connect to host
vqporn.com: did not receive HSTS header
vranjske.co.rs: could not connect to host
vratny.space: could not connect to host
+vreaulafacultate.ro: max-age too low: 86400
vriendenvoordeel.com: did not receive HSTS header
vrijstaandhuis-in-alphen-aan-den-rijn-kopen.nl: could not connect to host
vrijstaandhuis-in-brielle-kopen.nl: could not connect to host
@@ -23371,8 +24214,6 @@ vrzl.pro: could not connect to host
vsamsonov.com: could not connect to host
vsc-don-stocksport.de: did not receive HSTS header
vsestiralnie.com: did not receive HSTS header
-vsund.de: did not receive HSTS header
-vsx.ch: did not receive HSTS header
vtuber-schedule.info: could not connect to host
vuatruyen.com: could not connect to host
vucdn.com: could not connect to host
@@ -23380,6 +24221,7 @@ vulndetect.org: did not receive HSTS header
vulnerabilities.io: could not connect to host
vumetric.com: did not receive HSTS header
vuosaarenmontessoritalo.fi: did not receive HSTS header
+vv1234.cn: could not connect to host
vvw-8522.com: could not connect to host
vw-touranclub.cz: could not connect to host
vwhcare.com: did not receive HSTS header
@@ -23389,8 +24231,7 @@ vxapps.com: could not connect to host
vxml.club: could not connect to host
vxst.org: max-age too low: 2592000
vxstream-sandbox.com: did not receive HSTS header
-vxz.me: could not connect to host
-vykup-car.ru: did not receive HSTS header
+vykup-car.ru: could not connect to host
vynedmusic.com: could not connect to host
vyshivanochka.in.ua: could not connect to host
vysvetluju.cz: could not connect to host
@@ -23401,11 +24242,12 @@ vzce.cn: could not connect to host
vzk.io: could not connect to host
vztekloun.cz: could not connect to host
w10club.com: could not connect to host
-w1221.com: could not connect to host
+w1221.com: did not receive HSTS header
w2gshop.com.br: could not connect to host
w3n.org: could not connect to host
w4a.fr: could not connect to host
w4b.in: could not connect to host
+w4solutions.de: could not connect to host
w4xzr.top: could not connect to host
w4xzr.xyz: could not connect to host
w84.it: could not connect to host
@@ -23418,24 +24260,25 @@ wafni.com: could not connect to host
wage-feeg.gc.ca: could not connect to host
waggs.link: could not connect to host
wahhoi.net: did not receive HSTS header
+wahidhasan.com: did not receive HSTS header
wahlen-bad-wurzach.de: did not receive HSTS header
wahlman.org: did not receive HSTS header
wai-in.com: could not connect to host
-wai-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+wai-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
waidu.de: could not connect to host
wains.be: did not receive HSTS header
wait.jp: could not connect to host
wait.moe: could not connect to host
waiterwheels.com: did not receive HSTS header
waixingrenfuli7.vip: could not connect to host
-waka168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-waka168.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-waka88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-waka88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+wajtc.com: could not connect to host
+waka168.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+waka168.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+waka88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+waka88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
wakandasun.com: could not connect to host
wakapp.de: could not connect to host
wakened.net: did not receive HSTS header
-waldkinder-ilmenau.de: could not connect to host
walentin.co: could not connect to host
waligorska.pl: could not connect to host
walkeryoung.ca: could not connect to host
@@ -23444,7 +24287,6 @@ wallabag.it: did not receive HSTS header
wallabag.org: did not receive HSTS header
wallacequinn.co.uk: did not receive HSTS header
wallet.google.com: did not receive HSTS header (error ignored - included regardless)
-wallethub.com: did not receive HSTS header
wallis-inside.ch: could not connect to host
wallpapers.pub: could not connect to host
wallsblog.dk: could not connect to host
@@ -23477,7 +24319,7 @@ wangqiliang.org: could not connect to host
wangqiliang.xn--fiqs8s: could not connect to host
wangql.cn: could not connect to host
wangql.net: could not connect to host
-wangwenbo.cn: did not receive HSTS header
+wangwenbo.cn: could not connect to host
wangyubao.cn: could not connect to host
wantshow.com.br: did not receive HSTS header
wapgu.cc: could not connect to host
@@ -23495,20 +24337,18 @@ warlions.info: could not connect to host
warmestwishes.ca: could not connect to host
warmservers.com: could not connect to host
warnings.xyz: could not connect to host
-warp-radio.tv: could not connect to host
-warped.com: did not receive HSTS header
warren.sh: could not connect to host
warrencreative.com: did not receive HSTS header
warsentech.com: could not connect to host
warsonco.com: did not receive HSTS header
warumsuchen.at: did not receive HSTS header
-warung.host: did not receive HSTS header
+warung.host: could not connect to host
wasatchconstables.com: did not receive HSTS header
wasatchcrest.com: did not receive HSTS header
-wasfuereintheater.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+wasfuereintheater.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
wasgehtheute.in: could not connect to host
washandfun.com: did not receive HSTS header
-wassim.is: did not receive HSTS header
+wassim.is: could not connect to host
watashi.bid: could not connect to host
watchinventory.com: did not receive HSTS header
watchium.com: could not connect to host
@@ -23516,14 +24356,14 @@ watchonline.al: could not connect to host
watchpci.com: did not receive HSTS header
watchtv-online.pw: could not connect to host
watchweasel.com: could not connect to host
-waterfedpole.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+waterfedpole.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
waterforlife.net.au: could not connect to host
waterpoint.com.br: could not connect to host
watersportmarkt.net: did not receive HSTS header
-watertrails.io: could not connect to host
watsonhall.uk: could not connect to host
-watsonwork.me: did not receive HSTS header
+watsonwork.me: could not connect to host
wattechweb.com: did not receive HSTS header
+wattmaedchen.de: did not receive HSTS header
waukeect.com: could not connect to host
wave-ola.es: could not connect to host
wavefloatrooms.com: did not receive HSTS header
@@ -23534,7 +24374,6 @@ waylandss.com: could not connect to host
waylaydesign.com: did not receive HSTS header
waylee.net: did not receive HSTS header
wayuanma.com: could not connect to host
-waze.com: did not receive HSTS header
wbit.co.il: did not receive HSTS header
wbut.ml: could not connect to host
wby.gd: could not connect to host
@@ -23556,31 +24395,33 @@ wd976.com: could not connect to host
wdj1023.com: max-age too low: 0
wdrl.info: did not receive HSTS header
wdt.io: could not connect to host
+we-run-linux.de: could not connect to host
+we-use-linux.de: could not connect to host
we.serveftp.net: could not connect to host
+we9988.net: could not connect to host
wealthcentral.com.au: did not receive HSTS header
wealthformyhealth.com: did not receive HSTS header
-wear2work.nl: could not connect to host
+wear2work.nl: did not receive HSTS header
wearedisneyland.com: could not connect to host
wearehackerone.com: could not connect to host
weareincognito.org: could not connect to host
-wearesouthafricans.com: did not receive HSTS header
wearewithyou.org: could not connect to host
-weaspireusa.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+weaspireusa.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
weather-and-climate.com: did not receive HSTS header
weaverhairextensions.nl: could not connect to host
web-adminy.co.uk: did not receive HSTS header
web-advisor.co.uk: could not connect to host
web-apps.tech: could not connect to host
web-demarche.com: could not connect to host
-web-dl.cc: did not receive HSTS header
+web-dl.cc: could not connect to host
web-industry.fr: could not connect to host
web-insider.net: did not receive HSTS header
-web-jive.com: did not receive HSTS header
web-thinker.ru: could not connect to host
web-vision.de: did not receive HSTS header
-web1n.com: did not receive HSTS header
+web1n.com: could not connect to host
web4all.fr: did not receive HSTS header
web4pro.fr: could not connect to host
+webalert.cz: did not receive HSTS header
webambacht.nl: could not connect to host
webandwords.com.au: could not connect to host
webanker.sh: did not receive HSTS header
@@ -23597,6 +24438,7 @@ webchat.domains: could not connect to host
webcreation.rocks: could not connect to host
webdeflect.com: did not receive HSTS header
webdesign-kronberg.de: did not receive HSTS header
+webdesigngc.com: did not receive HSTS header
webdesignplay.com: could not connect to host
webdesignssussex.co.uk: could not connect to host
webdev-cw.me: could not connect to host
@@ -23609,11 +24451,12 @@ webeconomia.it: did not receive HSTS header
webeditors.com: did not receive HSTS header
webelement.sk: did not receive HSTS header
weberjulia.com: did not receive HSTS header
-webfox.com.br: did not receive HSTS header
+webetnet.fr: did not receive HSTS header
+webev.ru: did not receive HSTS header
+webfilings-eu-mirror.appspot.com: did not receive HSTS header (error ignored - included regardless)
webfronten.dk: did not receive HSTS header
webgaff.com: could not connect to host
webgap.me: did not receive HSTS header
-webgears.com: could not connect to host
webgreat.de: did not receive HSTS header
webhackspro.com: could not connect to host
webhopp.com: could not connect to host
@@ -23641,17 +24484,20 @@ webnoob.net: could not connect to host
webnosql.com: could not connect to host
webogram.org: did not receive HSTS header
webperformance.ru: did not receive HSTS header
+webproject.rocks: could not connect to host
webproshosting.tk: could not connect to host
webproxy.pw: could not connect to host
webpublica.pt: could not connect to host
webpulser.com: did not receive HSTS header
webreslist.com: did not receive HSTS header
websandbox.uk: could not connect to host
+websec.nl: max-age too low: 0
websectools.com: could not connect to host
webseo.de: did not receive HSTS header
websitedesign.bg: did not receive HSTS header
websiteforlease.ca: could not connect to host
websiterent.ca: could not connect to host
+websites4business.ca: could not connect to host
websitesabq.com: did not receive HSTS header
websitesolutionsmedia.com: could not connect to host
webspotter.nl: could not connect to host
@@ -23662,6 +24508,7 @@ webtar.info: could not connect to host
webtech.com.br: could not connect to host
webtechgadgetry.com: did not receive HSTS header
webtek.nu: could not connect to host
+webtex.limited: could not connect to host
webthings.com.br: could not connect to host
webtiles.co.uk: could not connect to host
webtobesocial.de: could not connect to host
@@ -23670,17 +24517,17 @@ webveloper.com: did not receive HSTS header
webvisum.de: did not receive HSTS header
webwolf.co.za: did not receive HSTS header
webwork.pw: did not receive HSTS header
-webypass.xyz: did not receive HSTS header
+webypass.xyz: could not connect to host
webz.one: could not connect to host
webzanem.com: could not connect to host
wecanfindit.co.za: could not connect to host
-wecanvisit.com: could not connect to host
wedding-m.jp: did not receive HSTS header
weddingalbumsdesign.com: max-age too low: 2592000
weddingfantasy.ru: could not connect to host
weddingibiza.nl: could not connect to host
weddingofficiantwilmington.com: did not receive HSTS header
wedestock.com: did not receive HSTS header
+wedos.com: did not receive HSTS header
wedotrains.club: could not connect to host
weebsr.us: could not connect to host
weed.ren: could not connect to host
@@ -23696,15 +24543,16 @@ wegenaer.nl: could not connect to host
wegethitched.co.uk: could not connect to host
weggeweest.nl: could not connect to host
wegner.no: could not connect to host
+wegvielfalt.de: could not connect to host
weicn.org: did not receive HSTS header
-weidehelp.com: could not connect to host
+weidehelp.com: did not receive HSTS header
weightreviews.com: could not connect to host
weiji.ga: did not receive HSTS header
weiler.xyz: could not connect to host
weimaraner.com.br: could not connect to host
weinhandel-preissler.de: could not connect to host
weirdserver.com: could not connect to host
-weixiaojun.org: did not receive HSTS header
+weixiaojun.org: could not connect to host
weizenke.im: could not connect to host
wejumall.com: did not receive HSTS header
wekibe.de: could not connect to host
@@ -23712,9 +24560,9 @@ welby.cat: did not receive HSTS header
welches-kinderfahrrad.de: could not connect to host
welcome-tahiti.com: did not receive HSTS header
welcomehelp.de: could not connect to host
-weldwp.com: could not connect to host
welkers.org: could not connect to host
wellastore.ru: could not connect to host
+wellcareliving.net: did not receive HSTS header
wellcomp.com.br: did not receive HSTS header
welldrake.com: did not receive HSTS header
wellmarts.com: did not receive HSTS header
@@ -23723,17 +24571,19 @@ wellopp.com: did not receive HSTS header
wellproducedwines.com: could not connect to host
wellsplasticsurgery.com: did not receive HSTS header
wellspringcamps.com: did not receive HSTS header
-welovejobs.com: did not receive HSTS header
+welovejobs.com: could not connect to host
+welovejudo.com: could not connect to host
welovemail.com: could not connect to host
welpo.me: could not connect to host
welpy.com: could not connect to host
welsh.com.br: could not connect to host
weltentreff.com: could not connect to host
+weltmeister.de: did not receive HSTS header
weltmeisterschaft.net: could not connect to host
wemakebookkeepingeasy.com: could not connect to host
weme.eu: did not receive HSTS header
-wen-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-wen-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+wen-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+wen-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
wenchieh.com: could not connect to host
wendabisheng.com: max-age too low: 0
wendalyncheng.com: did not receive HSTS header
@@ -23747,6 +24597,7 @@ wer.sh: did not receive HSTS header
werdeeintimo.de: could not connect to host
wereldplanner.nl: could not connect to host
werhatunsverraten.eu: could not connect to host
+werkaanonderwijs.nl: did not receive HSTS header
werken-bij-inwork.nl: could not connect to host
werkenbijkfc.nl: did not receive HSTS header
werkinholland.com: did not receive HSTS header
@@ -23757,14 +24608,14 @@ werner-schaeffer.de: did not receive HSTS header
wernerschaeffer.de: did not receive HSTS header
wertpapiertreuhand.de: did not receive HSTS header
wes-dev.com: could not connect to host
-wesayyesprogram.com: did not receive HSTS header
+wesayyesprogram.com: could not connect to host
wesleyharris.ca: did not receive HSTS header
wespeakgeek.co.za: could not connect to host
-wessner.co: could not connect to host
westcoastaggregate.com: could not connect to host
westendzone.com: max-age too low: 0
westerhoud.nl: did not receive HSTS header
westhighlandwhiteterrier.com.br: could not connect to host
+westlahair.com: did not receive HSTS header
westlaketire.pt: did not receive HSTS header
westlights.net: could not connect to host
westlinwinds.com: could not connect to host
@@ -23791,13 +24642,14 @@ weyland.tech: could not connect to host
weymouthslowik.com: max-age too low: 0
weynaphotography.com: did not receive HSTS header
wf-demo-eu.appspot.com: did not receive HSTS header (error ignored - included regardless)
-wf-training-master.appspot.com: did not receive HSTS header (error ignored - included regardless)
+wf-training-master.appspot.com: could not connect to host (error ignored - included regardless)
+wfcom-98-wf-www.pantheonsite.io: did not receive HSTS header
wfsystem.net: did not receive HSTS header
wftda.com: did not receive HSTS header
wg-tools.de: could not connect to host
wg1907.com: max-age too low: 0
wge-feg.gc.ca: could not connect to host
-whanau.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+whanau.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
whanwhy.com: max-age too low: 0
whatanime.ga: could not connect to host
whateveraspidercan.com: did not receive HSTS header
@@ -23806,10 +24658,11 @@ whats.io: could not connect to host
whatsstalk.me: could not connect to host
whatsupdeco.com: did not receive HSTS header
whatsyouroffer.co.uk: did not receive HSTS header
-wheatgra.in: could not connect to host
wheeler.kiwi.nz: could not connect to host
wheelwide.co.uk: could not connect to host
wheelwright.org: did not receive HSTS header
+when-release.com: did not receive HSTS header
+when-release.ru: did not receive HSTS header
whereisjason.com: could not connect to host
whereismyorigin.cf: could not connect to host
wherephoto.com: could not connect to host
@@ -23818,6 +24671,7 @@ whexit.nl: could not connect to host
whilsttraveling.com: could not connect to host
whimtrip.fr: could not connect to host
whisker.network: could not connect to host
+whiskey.town: could not connect to host
whistler-transfers.com: did not receive HSTS header
whitehat.id: could not connect to host
whiterabbit.org: did not receive HSTS header
@@ -23835,14 +24689,17 @@ whoisapi.online: could not connect to host
whoiscuter.ml: could not connect to host
whoiscutest.ml: could not connect to host
whoisdhh.com: could not connect to host
-wholelotofbounce.co.uk: did not receive HSTS header
+wholelotofbounce.co.uk: could not connect to host
+wholesalecbd.com: could not connect to host
wholikes.us: did not receive HSTS header
whoneedstobeprimaried.today: could not connect to host
-whoownsmyavailability.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+whoownsmyavailability.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
whoshotya.de: did not receive HSTS header
whosyourdaddy.ml: could not connect to host
+whqqq.com: could not connect to host
whtcsj.com: could not connect to host
whysuck.com: could not connect to host
+whythisguy.com: did not receive HSTS header
wiapply.com: could not connect to host
wibruje.pl: did not receive HSTS header
wibuw.com: could not connect to host
@@ -23853,7 +24710,6 @@ wienerwichtelchallenge.at: did not receive HSTS header
wieninternational.at: could not connect to host
wificafehosting.com: did not receive HSTS header
wifimapa.cz: could not connect to host
-wigelsworth.io: could not connect to host
wiiaam.com: could not connect to host
wiiforum.no: did not receive HSTS header
wiire.me: could not connect to host
@@ -23861,14 +24717,17 @@ wikiclash.info: could not connect to host
wikilivres.ca: could not connect to host
wikipeter.nl: did not receive HSTS header
wikisports.eu: did not receive HSTS header
+wikiwp.org: could not connect to host
wild-emotion-events.de: could not connect to host
wildbee.org: could not connect to host
wildboaratvparts.com: did not receive HSTS header
wildcard.hu: could not connect to host
+wildcatdiesel.com.au: did not receive HSTS header
wilddog.com: did not receive HSTS header
+wildercerron.com: could not connect to host
wildzoopark.com: could not connect to host
wilf1rst.com: could not connect to host
-willberg.bayern: could not connect to host
+wilfrid-calixte.fr: could not connect to host
willcipriano.com: could not connect to host
willeminfo.ch: did not receive HSTS header
willemsjort.be: did not receive HSTS header
@@ -23897,11 +24756,10 @@ windwoodweb.com: could not connect to host
wine-importer.ru: could not connect to host
winecodeavocado.com: could not connect to host
wineonthewall.com: max-age too low: 300
-winfield.me.uk: could not connect to host
+winfield.me.uk: did not receive HSTS header
winfographics.com: did not receive HSTS header
winged.io: could not connect to host
wingos.net: could not connect to host
-wingspatagonia.com: could not connect to host
wingumd.net: could not connect to host
winner.ua: did not receive HSTS header
winnersports.co: could not connect to host
@@ -23914,18 +24772,17 @@ winsufi.biz: could not connect to host
wintercircle.co: max-age too low: 60
wipc.net: did not receive HSTS header
wipply.com: could not connect to host
-wirbatz.org: did not receive HSTS header
wirc.gr: could not connect to host
+wircon-int.net: could not connect to host
wiredcut.com: did not receive HSTS header
wireframesoftware.com: could not connect to host
wirelesswatch.com.au: could not connect to host
wiretrip.io: could not connect to host
wirkaufendeinau.to: could not connect to host
-wirsberg-studios.de: could not connect to host
wisak.eu: could not connect to host
-wisal.org: did not receive HSTS header
wisdomize.me: could not connect to host
wisecountytx.gov: could not connect to host
+wisedog.eu: did not receive HSTS header
wiseflat.com: did not receive HSTS header
wiseloan.com: did not receive HSTS header
wishcert.com: could not connect to host
@@ -23934,13 +24791,11 @@ wissl.org: could not connect to host
witae.com: could not connect to host
with.de: did not receive HSTS header
withgoogle.com: did not receive HSTS header (error ignored - included regardless)
-withlocals.com: did not receive HSTS header
withmy.beer: could not connect to host
withoutacrystalball.com: could not connect to host
withustrading.com: did not receive HSTS header
withyoutube.com: did not receive HSTS header (error ignored - included regardless)
wittcher.com: could not connect to host
-wittepapaver.nl: did not receive HSTS header
witting.co: could not connect to host
wittydonut.com: could not connect to host
witzemaschine.com: max-age too low: 0
@@ -23949,9 +24804,9 @@ wiz.farm: could not connect to host
wizardmeow.xin: could not connect to host
wizardspire.com: could not connect to host
wizznab.tk: could not connect to host
+wjwieland.dvrdns.org: could not connect to host
wk-cpm.com: could not connect to host
wk577.com: could not connect to host
-wkz.io: could not connect to host
wlsme.org: did not receive HSTS header
wlwlwx.com: could not connect to host
wlzhiyin.cn: could not connect to host
@@ -23967,7 +24822,6 @@ wo211997.com: max-age too low: 0
woah.how: could not connect to host
woaiuhd.com: could not connect to host
wobblylang.org: could not connect to host
-wobker.co: could not connect to host
wochenentwicklung.com: did not receive HSTS header
wod-stavby.cz: could not connect to host
wodboss.com: could not connect to host
@@ -23982,12 +24836,14 @@ woktoss.com: could not connect to host
wolfemg.com: could not connect to host
wolfenland.net: did not receive HSTS header
wolfesden.com: could not connect to host
+wolfgang-kerschbaumer.com: could not connect to host
wolfgang-kerschbaumer.net: could not connect to host
wolfram.io: could not connect to host
wolfvideoproductions.com: did not receive HSTS header
wolkenspeicher.org: could not connect to host
wolkjehosting.nl: could not connect to host
wollekorb.de: could not connect to host
+womb.city: could not connect to host
womf.org: did not receive HSTS header
womosale.de: could not connect to host
wonabo.com: did not receive HSTS header
@@ -24017,9 +24873,9 @@ workemy.com: could not connect to host
workfone.io: could not connect to host
workingmachine.info: could not connect to host
workissime.com: did not receive HSTS header
-workmart.mx: could not connect to host
workpermit.com.vn: could not connect to host
workplaces.online: did not receive HSTS header
+workray.com: did not receive HSTS header
worksofwyoming.org: could not connect to host
workwithgo.com: could not connect to host
world-education-association.org: could not connect to host
@@ -24042,7 +24898,6 @@ wow202y5.com: could not connect to host
wowapi.org: could not connect to host
wowhelp.it: could not connect to host
wowinvasion.com: did not receive HSTS header
-wozalapha.com: did not receive HSTS header
wp-bullet.com: did not receive HSTS header
wp-fastsearch.de: could not connect to host
wp-rescue.com.au: could not connect to host
@@ -24057,7 +24912,7 @@ wpcheck.io: could not connect to host
wpcontrol.se: could not connect to host
wpdesigner.ir: did not receive HSTS header
wpdirecto.com: did not receive HSTS header
-wpdivitheme.nl: did not receive HSTS header
+wpdivitheme.nl: could not connect to host
wpdublin.com: could not connect to host
wpexplainer.com: did not receive HSTS header
wpfast.net: could not connect to host
@@ -24077,27 +24932,31 @@ wpsec.nl: did not receive HSTS header
wpsono.com: could not connect to host
wpspeed.nl: did not receive HSTS header
wptomatic.de: did not receive HSTS header
-wpturnedup.com: did not receive HSTS header
wpunpacked.com: could not connect to host
wpyecom.es: did not receive HSTS header
wpzhiku.com: did not receive HSTS header
+wq.ro: could not connect to host
wql.zj.cn: could not connect to host
wrapit.hu: could not connect to host
wrapitup.co.uk: did not receive HSTS header
wrbunderwriting.com: did not receive HSTS header
+wrd48.net: could not connect to host
wrfu.co.nz: did not receive HSTS header
wriedts.de: did not receive HSTS header
wrightdoumawedding.com: could not connect to host
wrightselfstorageandremovals.com: did not receive HSTS header
writeapp.me: did not receive HSTS header
writeenglishright.com: did not receive HSTS header
-writemyessay.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-writepride.com: could not connect to host
+writepride.com: max-age too low: 0
writing-job-online.com: did not receive HSTS header
+wrksheet.com: did not receive HSTS header
wrldevelopment.com: did not receive HSTS header
+wrn.sh: could not connect to host
wroffle.com: did not receive HSTS header
wromeapp.com: could not connect to host
+wrongware.cz: could not connect to host
wrwg.ca: could not connect to host
+ws-meca.com: could not connect to host
wsb-immo.at: could not connect to host
wsdcap.com: could not connect to host
wsor.group: did not receive HSTS header
@@ -24109,14 +24968,12 @@ wsup.social: could not connect to host
wsv-grafenau.de: did not receive HSTS header
wtf.ninja: could not connect to host
wtfsec.org: did not receive HSTS header
-wth.in: could not connect to host
wuav.net: could not connect to host
wubify.com: did not receive HSTS header
wubocong.com: did not receive HSTS header
wubthecaptain.eu: could not connect to host
wucanyao.com: max-age too low: 0
wuchipc.com: could not connect to host
-wucke13.de: did not receive HSTS header
wufu.org: did not receive HSTS header
wufupay.com: could not connect to host
wugniu.com: did not receive HSTS header
@@ -24132,14 +24989,12 @@ wusx.club: could not connect to host
wutianxian.com: could not connect to host
wuwuwu.me: could not connect to host
wuyue.photo: could not connect to host
-wv-n.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
wvr-law.de: did not receive HSTS header
wvv-8522.com: could not connect to host
wvw-8522.com: could not connect to host
wvw698.com: max-age too low: 2592000
ww6957.com: could not connect to host
wwbsb.xyz: could not connect to host
-wwjd.dynu.net: did not receive HSTS header
wwv-8522.com: could not connect to host
www-001133.com: could not connect to host
www-0385.com: could not connect to host
@@ -24154,7 +25009,9 @@ www-746.com: could not connect to host
www-7570.com: could not connect to host
www-771122.com: did not receive HSTS header
www-8003.com: did not receive HSTS header
+www-80036.com: did not receive HSTS header
www-86499.com: did not receive HSTS header
+www-8722.com: could not connect to host
www-88599.com: did not receive HSTS header
www-8887999.com: could not connect to host
www-9649.com: could not connect to host
@@ -24210,7 +25067,6 @@ x-pertservice.com: did not receive HSTS header
x-power-detox.com: could not connect to host
x-ripped-hd.com: could not connect to host
x00.me: could not connect to host
-x13.com: could not connect to host
x1616.tk: could not connect to host
x1be.win: did not receive HSTS header
x23.eu: did not receive HSTS header
@@ -24220,7 +25076,7 @@ x3led.com: could not connect to host
x509.io: could not connect to host
x509.pub: could not connect to host
x509.pw: could not connect to host
-xanderbron.tech: could not connect to host
+x6r3p2yjg1g6x7iu.myfritz.net: did not receive HSTS header
xanderweaver.com: did not receive HSTS header
xandocs.com: could not connect to host
xat.re: did not receive HSTS header
@@ -24369,7 +25225,7 @@ xehoivn.vn: could not connect to host
xellos.ga: could not connect to host
xellos.ml: could not connect to host
xenesisziarovky.sk: could not connect to host
-xenolith.eu: did not receive HSTS header
+xenolith.eu: could not connect to host
xenosphere.tk: could not connect to host
xeonlab.com: could not connect to host
xeonlab.de: could not connect to host
@@ -24381,18 +25237,20 @@ xg3n1us.de: did not receive HSTS header
xgusto.com: could not connect to host
xhadius.de: could not connect to host
xhily.com: could not connect to host
-xhotlips.date: did not receive HSTS header
+xhotlips.date: could not connect to host
xia100.xyz: could not connect to host
xiang111.com: max-age too low: 0
xiangfajia.cn: did not receive HSTS header
xiangqiushi.com: could not connect to host
xianguocy.com: could not connect to host
xianjianruishiyouyiyuan.com: could not connect to host
-xiaobude.cn: did not receive HSTS header
+xiaobaiwancai.com: max-age too low: 0
+xiaobude.cn: could not connect to host
xiaody.me: could not connect to host
xiaofengsky.com: did not receive HSTS header
xiaohui.love: could not connect to host
xiaolan.me: could not connect to host
+xiaolong.link: could not connect to host
xiaolvmu.com: could not connect to host
xiaolvmu.me: could not connect to host
xiaomi.express: did not receive HSTS header
@@ -24402,16 +25260,14 @@ xiaxuejin.cn: could not connect to host
xiazhanjian.com: did not receive HSTS header
xiazhaobing.com: max-age too low: 0
xice.cf: could not connect to host
-xie38.com: could not connect to host
-xie91.com: could not connect to host
xiecongan.org: could not connect to host
xilegames.com: could not connect to host
xilkoi.net: did not receive HSTS header
xilou.org: could not connect to host
ximage.me: could not connect to host
ximens.me: could not connect to host
-xin-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-xin-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xin-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xin-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
xinbiji.cn: did not receive HSTS header
xinbo010.com: could not connect to host
xinbo016.com: could not connect to host
@@ -24530,7 +25386,7 @@ xinbo610.com: could not connect to host
xinbo676.com: could not connect to host
xinboyule.com: could not connect to host
xinex.cz: could not connect to host
-xing-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xing-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
xing.ml: could not connect to host
xinghuokeji.xin: could not connect to host
xingiahanvisa.net: did not receive HSTS header
@@ -24539,15 +25395,15 @@ xinnixwebshop.be: did not receive HSTS header
xinplay.net: max-age too low: 0
xiongx.cn: could not connect to host
xiqi.us: could not connect to host
-xirion.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xirion.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
xisa.it: could not connect to host
xivpn.com: could not connect to host
xiwu.li: could not connect to host
-xjoi.net: could not connect to host
-xjoin.de: did not receive HSTS header
+xjoin.de: could not connect to host
xlaff.com: did not receive HSTS header
xlboo.com: did not receive HSTS header
xlfblog.com: could not connect to host
+xliang.co: did not receive HSTS header
xlinar.com: could not connect to host
xlui.me: did not receive HSTS header
xmedius.com: did not receive HSTS header
@@ -24559,12 +25415,11 @@ xmonk.org: did not receive HSTS header
xmr.my: could not connect to host
xms66.top: could not connect to host
xn-----8kcgbo2bmdgkdacthvjf.xn--p1ai: could not connect to host
-xn----7sbfl2alf8a.xn--p1ai: could not connect to host
xn----7sbmucgqdbgwwc5e9b.xn--p1ai: could not connect to host
xn----8sbjfacqfqshbh7afyeg.xn--80asehdb: did not receive HSTS header
xn----zmcaltpp1mdh16i.com: did not receive HSTS header
-xn--24-6kch4bfqee.xn--p1ai: could not connect to host
-xn--24-glcia8dc.xn--p1ai: could not connect to host
+xn--1yst51avkr.ga: could not connect to host
+xn--1yst51avkr.xn--6qq986b3xl: could not connect to host
xn--3lqp21gwna.cn: could not connect to host
xn--3lqp21gwna.xn--fiqs8s: could not connect to host
xn--3lqp21gwna.xn--fiqz9s: could not connect to host
@@ -24580,12 +25435,14 @@ xn--4dbjwf8c.tk: could not connect to host
xn--68jub.pw: could not connect to host
xn--6cv66l79sp0n0ibo7s9ne.xyz: did not receive HSTS header
xn--6oqx6c301allufxcm23a7sm.com: could not connect to host
+xn--6qq52xuogcjfw8pwqp.ga: could not connect to host
+xn--6qq62xsogfjfs8p1qp.ga: could not connect to host
+xn--6x6a.life: could not connect to host
xn--7rvz7ku3ppnr.jp: could not connect to host
xn--7v8h.cf: could not connect to host
xn--80aaagmgvmvmcuoq7r.xn--p1ai: did not receive HSTS header
xn--80ablh1c.online: could not connect to host
xn--80ac0aqlt.xn--p1ai: could not connect to host
-xn--80adb4aeode.xn--p1ai: could not connect to host
xn--80aocgsfei.xn--p1ai: could not connect to host
xn--88j2fy28hbxmnnf9zlw5buzd.com: did not receive HSTS header
xn--8dry00a7se89ay98epsgxxq.com: could not connect to host
@@ -24600,14 +25457,13 @@ xn--datenrettung-mnchen-jbc.com: did not receive HSTS header
xn--dckya4a0bya6x.com: could not connect to host
xn--dckya4a0bya6x.jp: could not connect to host
xn--dej-3oa.lv: could not connect to host
+xn--die-hrercharts-zpb.de: did not receive HSTS header
xn--die-zahnrzte-ncb.de: did not receive HSTS header
xn--dk8haaa.ws: could not connect to host
-xn--dmontaa-9za.com: did not receive HSTS header
xn--e--0g4aiy1b8rmfg3o.jp: could not connect to host
xn--e--4h4axau6ld4lna0g.com: could not connect to host
xn--e--ig4a4c3f6bvc5et632i.com: could not connect to host
xn--e--k83a5h244w54gttk.xyz: could not connect to host
-xn--e1aoahhqgn.xn--p1ai: could not connect to host
xn--ecki0cd0bu9a4nsjb.com: could not connect to host
xn--eckle6c0exa0b0modc7054g7h8ajw6f.com: did not receive HSTS header
xn--ehq13kgw4e.ml: could not connect to host
@@ -24622,10 +25478,10 @@ xn--internetlnen-1cb.com: could not connect to host
xn--jbs-tna.de: could not connect to host
xn--jp-6l5cs1yf3ivjsglphyv.net: could not connect to host
xn--jywq5uqwqxhd2onsij.jp: did not receive HSTS header
+xn--kckd0bd4a8tp27yee2e.com: could not connect to host
xn--keditr-0xa.biz: could not connect to host
xn--krpto-lva.de: could not connect to host
xn--l8j9d2b.jp: could not connect to host
-xn--l8jydta9i239uzq6aqz9a.com: did not receive HSTS header
xn--lgb3a8bcpn.cf: could not connect to host
xn--lgb3a8bcpn.ga: could not connect to host
xn--lgb3a8bcpn.gq: could not connect to host
@@ -24644,21 +25500,22 @@ xn--n8jubz39q0g0afpa985c.com: could not connect to host
xn--neb-tma3u8u.xyz: could not connect to host
xn--nf1a578axkh.xn--fiqs8s: did not receive HSTS header
xn--o77hka.ga: could not connect to host
+xn--p3t555glxhnwa.com: could not connect to host
xn--p8jskj.jp: could not connect to host
xn--pck4e3a2ex597b4ml.xyz: could not connect to host
xn--pckqk6xk43lunk.net: could not connect to host
xn--q9ji3c6d.xn--q9jyb4c: did not receive HSTS header
-xn--qckqc0nxbyc4cdb4527err7c.biz: did not receive HSTS header
+xn--qckqc0nxbyc4cdb4527err7c.biz: could not connect to host
xn--qckss0j.tk: could not connect to host
xn--qckyd1cu698a35zarib.xyz: could not connect to host
xn--qfun83b.ga: could not connect to host
xn--r77hya.ga: could not connect to host
xn--rt-cja.eu: could not connect to host
-xn--rtter-kva.eu: could not connect to host
xn--sdkwa9azd389v01ya.com: could not connect to host
-xn--seelenwchter-mcb.eu: could not connect to host
+xn--seelenwchter-mcb.eu: did not receive HSTS header
xn--srenpind-54a.dk: could not connect to host
xn--t8j2a3042d.xyz: could not connect to host
+xn--t8j4aa4nkg1h9bwcvud.com: could not connect to host
xn--t8j4aa4nyhxa7duezbl49aqg5546e264d.net: did not receive HSTS header
xn--tda.ml: could not connect to host
xn--thorme-6uaf.ca: could not connect to host
@@ -24675,6 +25532,7 @@ xn--werner-schffer-fib.de: could not connect to host
xn--wmq.jp: did not receive HSTS header
xn--woistdermlleimer-rzb.de: could not connect to host
xn--xdtx3pfzbiw3ar8e7yedqrhui.com: could not connect to host
+xn--xft85up3jca.ga: could not connect to host
xn--xz1a.jp: could not connect to host
xn--y8j2eb5631a4qf5n0h.com: could not connect to host
xn--y8j5gq14rbdd.net: did not receive HSTS header
@@ -24682,7 +25540,7 @@ xn--yj8h0m.ws: could not connect to host
xn--ykrp42k.com: could not connect to host
xn--yoamomisuasbcn-ynb.com: could not connect to host
xn--yrvp1ac68c.xn--6qq986b3xl: could not connect to host
-xn--zck9a4b352yuua.jp: did not receive HSTS header
+xn--zck9a4b352yuua.jp: could not connect to host
xn--zr9h.cf: could not connect to host
xn--zr9h.ga: could not connect to host
xn--zr9h.ml: could not connect to host
@@ -24692,14 +25550,13 @@ xobox.me: could not connect to host
xoda.pw: could not connect to host
xoffy.com: could not connect to host
xom.party: could not connect to host
-xombra.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xombra.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
xoonth.net: did not receive HSTS header
xor-a.net: could not connect to host
xotika.tv: could not connect to host
xpenology-fr.net: could not connect to host
xperiacodes.com: could not connect to host
xpi.fr: could not connect to host
-xpiuat.global: did not receive HSTS header
xpj.bet: did not receive HSTS header
xpj.sx: could not connect to host
xpjcunkuan.com: could not connect to host
@@ -24711,6 +25568,7 @@ xps2pdf.info: could not connect to host
xq55.com: did not receive HSTS header
xqin.net: could not connect to host
xrbox.me: could not connect to host
+xrippedhd.com: could not connect to host
xroot.org: did not receive HSTS header
xrp.pw: could not connect to host
xscancun.com: could not connect to host
@@ -24729,24 +25587,21 @@ xtremegaming.it: could not connect to host
xtremeperformance.co.in: did not receive HSTS header
xtrim.ru: did not receive HSTS header
xtzone.be: could not connect to host
-xuan-li88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-xuan-li88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xuan-li88.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xuan-li88.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+xuanmeishe.net: did not receive HSTS header
xuanmeishe.top: could not connect to host
xuehao.net.cn: could not connect to host
xuexb.com: did not receive HSTS header
xuntaosms.com: could not connect to host
xupeng.me: did not receive HSTS header
-xx6957.com: could not connect to host
+xuyh0120.win: could not connect to host
+xx6957.com: did not receive HSTS header
xxbase.com: could not connect to host
+xxx020625.com: max-age too low: 0
xxx3dbdsm.com: could not connect to host
xy1919.com: could not connect to host
-xy6161.com: could not connect to host
-xy6262.com: could not connect to host
-xy6363.com: could not connect to host
xy6957.com: could not connect to host
-xy7171.com: could not connect to host
-xy7272.com: could not connect to host
-xy7373.com: could not connect to host
xynex.us: could not connect to host
xyngular-health.com: could not connect to host
xynta.ch: could not connect to host
@@ -24759,34 +25614,33 @@ y3451.com: could not connect to host
yaay.com.br: could not connect to host
yabrt.cn: could not connect to host
yaccin.com: could not connect to host
+yachigoya.com: could not connect to host
yachts-magazine.com: did not receive HSTS header
yado-furu.com: did not receive HSTS header
yafull.com: could not connect to host
yagi2.com: could not connect to host
yagihiro.tech: could not connect to host
yahoo.ax: could not connect to host
-yalecleaners.com: could not connect to host
yalla.jp: did not receive HSTS header
yamaken.jp: could not connect to host
yamamo10.com: could not connect to host
+yamei9911.com: could not connect to host
yameveo.com: did not receive HSTS header
yan.lt: could not connect to host
-yangjingwen.com: could not connect to host
-yangmaodang.org: did not receive HSTS header
+yanbao.xyz: could not connect to host
yangmi.blog: could not connect to host
yangshangzhen.com: did not receive HSTS header
yannis.codes: did not receive HSTS header
yanqiyu.info: could not connect to host
yanwh.xyz: did not receive HSTS header
-yao-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
-yao-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+yao-in.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+yao-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
yaoidreams.com: did not receive HSTS header
yaporn.tv: did not receive HSTS header
yarchives.jp: could not connect to host
yard-fu.com: could not connect to host
yardbird.us: could not connect to host
-yarnhookup.com: could not connect to host
-yarogneva.ru: could not connect to host
+yarnhookup.com: did not receive HSTS header
yasinaydin.net: did not receive HSTS header
yasutomonodokoiko.com: did not receive HSTS header
yateshomesales.com: did not receive HSTS header
@@ -24804,29 +25658,32 @@ ychong.com: did not receive HSTS header
ycm2.wtf: could not connect to host
yd.io: could not connect to host
ydy.jp: could not connect to host
+yell.ml: could not connect to host
yello.website: could not connect to host
yellotalk.co: did not receive HSTS header
yellowcar.website: could not connect to host
-yellowfish.top: could not connect to host
yellowfly.co.uk: did not receive HSTS header
yellowpages.ee: did not receive HSTS header
+yellowstone.nsupdate.info: could not connect to host
yemalu.com: could not connect to host
yemekbaz.az: could not connect to host
yenibilgi.net: did not receive HSTS header
yennhi.co: could not connect to host
yenniferallulli.com: could not connect to host
yenniferallulli.de: could not connect to host
-yenniferallulli.es: did not receive HSTS header
+yenniferallulli.es: could not connect to host
yenniferallulli.moda: could not connect to host
yenniferallulli.nl: could not connect to host
yenpape.com: could not connect to host
yepbitcoin.com: could not connect to host
+yephy.com: could not connect to host
yesdevnull.net: did not receive HSTS header
yesfone.com.br: could not connect to host
yeshu.org: could not connect to host
-yeswecan.co.bw: could not connect to host
+yesiammaisey.me: could not connect to host
yetcore.io: could not connect to host
yetishirt.com: could not connect to host
+yetzt.me: could not connect to host
yex.nz: could not connect to host
yffengshi.ml: could not connect to host
ygcdyf.com: could not connect to host
@@ -24846,6 +25703,7 @@ yicknam.my: could not connect to host
yiffed.me: did not receive HSTS header
yiffy.tips: did not receive HSTS header
yiffy.zone: did not receive HSTS header
+yii2.cc: did not receive HSTS header
yikzu.cn: could not connect to host
yin.roma.it: did not receive HSTS header
yin8888.tv: did not receive HSTS header
@@ -24854,18 +25712,13 @@ ying299.net: could not connect to host
yinga.ga: could not connect to host
yingsuo.ltd: could not connect to host
yinhe12.net: did not receive HSTS header
-yipingguo.com: could not connect to host
yippie.nl: did not receive HSTS header
yisin.net: did not receive HSTS header
yizhu.com: could not connect to host
yjsw.sh.cn: could not connect to host
ylk.io: could not connect to host
ylwz.cc: did not receive HSTS header
-ym3311.com: could not connect to host
-ym3322.com: could not connect to host
-ym6699.com: could not connect to host
ymblaw.com: did not receive HSTS header
-ymvip8.com: could not connect to host
ynnovasport.be: could not connect to host
ynode.co: did not receive HSTS header
ynsn.nl: could not connect to host
@@ -24877,14 +25730,14 @@ yobst.tk: could not connect to host
yocchan1513.net: did not receive HSTS header
yoga-sky.de: did not receive HSTS header
yoga.is-an-engineer.com: could not connect to host
-yogabhawnamission.com: could not connect to host
-yogamayanine.com: did not receive HSTS header
+yogabhawnamission.com: did not receive HSTS header
+yogamayanine.com: could not connect to host
yogatrainingrishikesh.com: could not connect to host
yogoeasy.com: did not receive HSTS header
yoibyoin.info: did not receive HSTS header
yoimise.net: did not receive HSTS header
yoiyado.info: did not receive HSTS header
-yokeepo.com: did not receive HSTS header
+yokeepo.com: could not connect to host
yolo-csgo.com: could not connect to host
yolocelebs.com: did not receive HSTS header
yoloprod.fr: could not connect to host
@@ -24894,6 +25747,8 @@ yomepre.com: could not connect to host
yooguo123.com: did not receive HSTS header
yopers.com: did not receive HSTS header
yoplate.com: did not receive HSTS header
+yopuedo.co: did not receive HSTS header
+yorgosbos.nl: did not receive HSTS header
yorkshireterrier.com.br: could not connect to host
yoru.me: could not connect to host
yosheenetwork.fr: could not connect to host
@@ -24906,7 +25761,9 @@ youdowell.com: did not receive HSTS header
youfencun.com: did not receive HSTS header
youftp.tk: could not connect to host
yougot.pw: could not connect to host
+youhabitat.es: did not receive HSTS header
youhacked.me: could not connect to host
+youhs.top: did not receive HSTS header
youjizz.bz: could not connect to host
youlend.com: did not receive HSTS header
youlog.net: did not receive HSTS header
@@ -24916,7 +25773,6 @@ youngandunited.nl: did not receive HSTS header
younl.net: could not connect to host
youon.tokyo: could not connect to host
your-idc.tk: could not connect to host
-your-out.com: could not connect to host
yourbapp.ch: could not connect to host
yourbittorrent.com: did not receive HSTS header
yourcomputer.expert: did not receive HSTS header
@@ -24931,21 +25787,23 @@ yourself.today: could not connect to host
yourstrongbox.com: could not connect to host
yourtrainer.com: did not receive HSTS header
yourtrainingsolutions.com: did not receive HSTS header
-youruseragent.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+youruseragent.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
yourznc.com: could not connect to host
yousite.by: could not connect to host
-youth2009.org: max-age too low: 2592000
+youth2009.org: could not connect to host
youthovation.org: did not receive HSTS header
youtsuu-raku.com: could not connect to host
youtube: could not connect to host
youtubeviews.ml: could not connect to host
+yp518518.com: max-age too low: 0
ypcs.fi: did not receive HSTS header
ypiresia.fr: could not connect to host
-yryz.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+yqjf68.com: could not connect to host
+yryz.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
ys-shop.biz: did not receive HSTS header
yspeo.biz: did not receive HSTS header
ysun.xyz: could not connect to host
-ysx.me.uk: did not receive HSTS header
+ysx.me.uk: could not connect to host
yt668899.com: did not receive HSTS header
ytb.zone: did not receive HSTS header
ytbmp3.com: did not receive HSTS header
@@ -24962,6 +25820,7 @@ yudan.com.br: could not connect to host
yude.ml: could not connect to host
yuema.net.cn: could not connect to host
yufan.me: did not receive HSTS header
+yugasun.com: could not connect to host
yugege.cf: could not connect to host
yuhen.ru: did not receive HSTS header
yui.cat: did not receive HSTS header
@@ -24971,6 +25830,7 @@ yukijinji.moe: could not connect to host
yukiminami.net: could not connect to host
yuko.moe: could not connect to host
yukonrefugees.com: could not connect to host
+yulaiz.com: did not receive HSTS header
yum.beer: could not connect to host
yum0.cn: could not connect to host
yumli.net: could not connect to host
@@ -24989,6 +25849,7 @@ yutang.vn: did not receive HSTS header
yutaron.tokyo: could not connect to host
yutuo.net: did not receive HSTS header
yuushou.com: could not connect to host
+yuweiyang.xyz: could not connect to host
yux.fr: could not connect to host
yux.io: did not receive HSTS header
yuxingxin.com: did not receive HSTS header
@@ -24997,7 +25858,8 @@ yveshield.com: could not connect to host
yvesx.com: could not connect to host
ywei.org: could not connect to host
yxs.me: did not receive HSTS header
-yya.bid: did not receive HSTS header
+yya.bid: could not connect to host
+yya.me: could not connect to host
yya.men: could not connect to host
yyrss.com: could not connect to host
yyy116.com: could not connect to host
@@ -25012,7 +25874,7 @@ z33.co: did not receive HSTS header
z3liff.com: could not connect to host
z3liff.net: could not connect to host
z4k.de: did not receive HSTS header
-z6957.com: could not connect to host
+z6957.com: did not receive HSTS header
z8022.com: did not receive HSTS header
zaalleatherwear.nl: did not receive HSTS header
zabavno.mk: did not receive HSTS header
@@ -25024,12 +25886,13 @@ zachpeters.org: did not receive HSTS header
zadania.wiki: could not connect to host
zadieheimlich.com: did not receive HSTS header
zaem.tv: could not connect to host
-zaffit.com: could not connect to host
-zafirus.name: did not receive HSTS header
+zaffit.com: did not receive HSTS header
+zafirus.name: could not connect to host
zahnarzt-muenich.de: did not receive HSTS header
zahnrechner-staging.azurewebsites.net: could not connect to host
zahyantechnologies.com: did not receive HSTS header
zalan.do: could not connect to host
+zalohovaniburian.cz: could not connect to host
zalzalac.com: did not receive HSTS header
zamis.net: could not connect to host
zamocosmeticos.com.br: could not connect to host
@@ -25048,7 +25911,6 @@ zaptan.net: did not receive HSTS header
zaptan.org: did not receive HSTS header
zaptan.us: did not receive HSTS header
zargaripour.com: did not receive HSTS header
-zarmarket.org: did not receive HSTS header
zarooba.com: could not connect to host
zarpo.com.br: did not receive HSTS header
zavca.com: did not receive HSTS header
@@ -25060,7 +25922,7 @@ zbigniewgalucki.eu: did not receive HSTS header
zbp.at: did not receive HSTS header
zby.io: could not connect to host
zcgram.com: could not connect to host
-zcryp.to: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+zcryp.to: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
zdravesteny.cz: could not connect to host
zdravotnickasluzba.eu: could not connect to host
zdravystul.cz: did not receive HSTS header
@@ -25089,8 +25951,8 @@ zellari.ru: did not receive HSTS header
zeloz.xyz: could not connect to host
zemlova.cz: could not connect to host
zen-ume.com: could not connect to host
-zenfusion.fr: could not connect to host
-zenghx.tk: max-age too low: 0
+zenfusion.fr: did not receive HSTS header
+zengdong.ren: could not connect to host
zenhaiku.com: did not receive HSTS header
zenics.co.uk: did not receive HSTS header
zenmate.com.tr: could not connect to host
@@ -25103,6 +25965,7 @@ zentience.org: could not connect to host
zentiweb.nl: did not receive HSTS header
zentralwolke.de: did not receive HSTS header
zenus-biometrics.com: did not receive HSTS header
+zenways.io: did not receive HSTS header
zenwears.com: could not connect to host
zenycosta.com: could not connect to host
zeparadox.com: did not receive HSTS header
@@ -25138,12 +26001,15 @@ zhanglizhi.ml: could not connect to host
zhanglu.xyz: did not receive HSTS header
zhangruilin.com: did not receive HSTS header
zhangsir.net: could not connect to host
+zhangyuhao.com: could not connect to host
zhaochen.xyz: could not connect to host
zhaoeq.com: could not connect to host
zhaojin97.cn: could not connect to host
-zhattyt.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+zhaotongjun.com: max-age too low: 0
zhendingresources.com: did not receive HSTS header
+zhenggangzhao.org: did not receive HSTS header
zhengouwu.com: could not connect to host
+zhenic.ir: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
zhenmeish.com: could not connect to host
zhenyan.org: could not connect to host
zhh.in: could not connect to host
@@ -25165,6 +26031,7 @@ zigcore.com.br: could not connect to host
zikirakhirzaman.com: could not connect to host
zilon.com.co: could not connect to host
zinenapse.info: could not connect to host
+zingpetfood.com: could not connect to host
zings.eu: could not connect to host
zippy-download.com: could not connect to host
zippy-download.de: could not connect to host
@@ -25177,7 +26044,6 @@ zivy-ruzenec.cz: could not connect to host
zixo.sk: could not connect to host
ziyuanabc.xyz: could not connect to host
ziz.exchange: could not connect to host
-zizcollections.com: could not connect to host
zizoo.com: did not receive HSTS header
zjc3.com: could not connect to host
zjh6888.com: max-age too low: 0
@@ -25185,10 +26051,12 @@ zju.tv: could not connect to host
zjubtv.com: could not connect to host
zjuqsc.com: could not connect to host
zjutv.com: could not connect to host
+zjv.me: could not connect to host
zjyifa.cn: could not connect to host
zk.com.co: did not receive HSTS header
zkillboard.com: did not receive HSTS header
zking.ga: could not connect to host
+zl0101.com: could not connect to host
zlc1994.com: did not receive HSTS header
zlcp.com: could not connect to host
zlotonews.com: did not receive HSTS header
@@ -25199,11 +26067,11 @@ zmscable.com: did not receive HSTS header
zmy.im: could not connect to host
znacite.com: did not receive HSTS header
znd.jp: could not connect to host
-znhglobalresources.com: could not connect to host
zning.net.cn: could not connect to host
zny.pw: could not connect to host
zocken.com: did not receive HSTS header
zoe.vc: could not connect to host
+zofrex.com: could not connect to host
zohair.xyz: did not receive HSTS header
zohar.link: could not connect to host
zohar.shop: could not connect to host
@@ -25211,17 +26079,18 @@ zoi.jp: could not connect to host
zokster.net: did not receive HSTS header
zolokar.xyz: could not connect to host
zonadebolsa.es: did not receive HSTS header
+zone-produkte.de: max-age too low: 600000
zone403.net: could not connect to host
zoneminder.com: did not receive HSTS header
zoners.si: did not receive HSTS header
zonky.io: could not connect to host
+zontractors.com: could not connect to host
zoo.city: could not connect to host
zoo24.de: did not receive HSTS header
zoofaeth.de: did not receive HSTS header
zoofit.com.au: could not connect to host
zookids.uy: did not receive HSTS header
zoological-gardens.eu: could not connect to host
-zoomcar.pro: did not receive HSTS header
zoomingin.net: max-age too low: 5184000
zoommailing.com: did not receive HSTS header
zooom2.azurewebsites.net: could not connect to host
@@ -25231,22 +26100,23 @@ zopy.com.br: could not connect to host
zorki.nl: did not receive HSTS header
zortium.report: could not connect to host
zoznamrealit.sk: did not receive HSTS header
+zp.do: could not connect to host
zpy.fun: could not connect to host
zq789.com: could not connect to host
zqhong.com: could not connect to host
zqjs.tk: could not connect to host
zqstudio.top: could not connect to host
zqwqz.com: did not receive HSTS header
-zrhdwz.cn: could not connect to host
zrn.in: did not receive HSTS header
zrt.io: did not receive HSTS header
-zstu.eu: did not receive HSTS header
+zstu.eu: could not connect to host
ztan.tk: could not connect to host
ztcaoll222.cn: did not receive HSTS header
ztjuh.tk: max-age too low: 0
ztytian.com: could not connect to host
zuan-in.com: could not connect to host
-zuan-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: .\getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+zuan-in.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /home/trava90/REPO/UXP/security/manager/tools/getHSTSPreloadList.js :: processStsHeader :: line 131" data: no]
+zuanqianni.com: max-age too low: 0
zubora.co: could not connect to host
zuckerfloh.de: did not receive HSTS header
zudomc.me: could not connect to host
@@ -25261,16 +26131,16 @@ zunftmarke.de: did not receive HSTS header
zurickrelogios.com.br: did not receive HSTS header
zurret.de: did not receive HSTS header
zusjesvandenbos.nl: did not receive HSTS header
-zutsu-raku.com: did not receive HSTS header
+zutsu-raku.com: could not connect to host
zuviel.space: could not connect to host
zvncloud.com: did not receive HSTS header
zvz.im: could not connect to host
zwalcz-cellulit.com: did not receive HSTS header
zwb3.de: did not receive HSTS header
-zwembadheeten.nl: did not receive HSTS header
zx1168.com: could not connect to host
zx2268.com: could not connect to host
-zxc.science: did not receive HSTS header
+zxavier.com: did not receive HSTS header
+zxc.science: could not connect to host
zxe.com.br: could not connect to host
zxity.co.uk: could not connect to host
zxity.ltd: could not connect to host
@@ -25286,8 +26156,8 @@ zypr.pw: could not connect to host
zyrillezuno.com: could not connect to host
zyso.org: could not connect to host
zz0036.com: max-age too low: 0
-zz295.com: could not connect to host
-zz6957.com: could not connect to host
+zz295.com: did not receive HSTS header
+zz6957.com: did not receive HSTS header
zzb510.com: could not connect to host
zzb6688.com: could not connect to host
zzb8899.com: could not connect to host
diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc
index f6ed64b3e..be153461a 100644
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -8,7 +8,7 @@
/*****************************************************************************/
#include <stdint.h>
-const PRTime gPreloadListExpirationTime = INT64_C(1569913558186000);
+const PRTime gPreloadListExpirationTime = INT64_C(1572461180080000);
class nsSTSPreload
{
@@ -18,7 +18,11 @@ class nsSTSPreload
};
static const nsSTSPreload kSTSPreloadList[] = {
+ { "0--1.de", true },
+ { "0-24.com", true },
+ { "0-24.net", true },
{ "000321365.com", true },
+ { "000btt.net", true },
{ "00321365.com", true },
{ "003971.com", true },
{ "005555.xyz", true },
@@ -26,13 +30,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "008251.com", true },
{ "008253.com", true },
{ "008271.com", true },
+ { "0086286.com", true },
{ "009p.com", true },
{ "00dani.me", true },
{ "00f.net", true },
{ "0100dev.com", false },
{ "0100dev.nl", false },
{ "01011970.xyz", true },
+ { "010777a.com", false },
+ { "010kb.com", true },
+ { "010ks.com", true },
{ "01110000011100110111001001100111.com", true },
+ { "015kb.com", true },
+ { "016kb.com", true },
{ "01918.net", true },
{ "021002.com", true },
{ "022367.com", true },
@@ -51,6 +61,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "025ks.com", true },
{ "026122.com", true },
{ "02638.net", true },
+ { "026kb.com", true },
{ "02am8.com", true },
{ "03012.net", true },
{ "03018.net", true },
@@ -64,6 +75,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "050media.nl", true },
{ "0511315.net", true },
{ "0513c.com", true },
+ { "055kb.com", true },
{ "056657.com", true },
{ "056675.com", true },
{ "056679.com", true },
@@ -77,12 +89,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "056950.com", true },
{ "056976.com", true },
{ "056985.com", true },
+ { "056kb.com", true },
{ "0573wk.com", true },
{ "057587.com", true },
{ "057596.com", true },
{ "058509.com", true },
{ "058596.com", true },
{ "058679.com", true },
+ { "058kb.com", true },
{ "059957.com", true },
{ "05am8.com", true },
{ "060258.com", true },
@@ -107,20 +121,36 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "066709.com", true },
{ "066790.com", true },
{ "066816.com", true },
+ { "066kb.com", true },
+ { "067310.com", true },
+ { "067313.com", true },
+ { "067360.com", true },
+ { "067361.com", true },
{ "06804.com", true },
{ "068697.com", true },
{ "068756.com", true },
{ "068957.com", true },
+ { "068kb.com", true },
{ "06918.net", true },
{ "069657.com", true },
{ "069676.com", true },
{ "06se.com", true },
+ { "070136.com", true },
+ { "070167.com", true },
+ { "070183.com", true },
{ "0708p.com", true },
{ "070968.com", true },
{ "070986.com", true },
+ { "071k8.com", true },
{ "0720p.com", true },
- { "0736ks.com", true },
+ { "0760ks.com", true },
+ { "0763ks.com", true },
+ { "076k8.com", true },
{ "077768.net", true },
+ { "077810.com", true },
+ { "077863.com", true },
+ { "077k8.com", true },
+ { "078kb.com", true },
{ "0792112.com", true },
{ "079606.com", true },
{ "079607.com", true },
@@ -157,7 +187,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "083967.com", true },
{ "085806.com", true },
{ "085905.com", true },
- { "085950.com", true },
{ "086807.com", true },
{ "086907.com", true },
{ "087010.com", true },
@@ -166,11 +195,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "087540.com", true },
{ "087569.com", true },
{ "087580.com", true },
+ { "08817a.com", true },
+ { "08817c.com", true },
+ { "08817d.com", true },
+ { "08817e.com", true },
+ { "08817f.com", true },
+ { "08817g.com", true },
+ { "08817h.com", true },
+ { "08817j.com", true },
+ { "08817k.com", true },
+ { "08817m.com", true },
+ { "08817w.com", true },
+ { "08817y.com", true },
+ { "08817z.com", true },
{ "08845.cc", true },
{ "08918.net", true },
{ "089818.com", true },
{ "08am8.com", true },
- { "08detaxe.fr", true },
{ "0916app.com", true },
{ "095598.cc", true },
{ "09892.net", true },
@@ -184,6 +225,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "0des.com", true },
{ "0ii0.cf", true },
{ "0ik.de", true },
+ { "0iz.net", true },
{ "0knowledge.de", false },
{ "0paste.com", true },
{ "0wx.cat", true },
@@ -194,7 +236,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "0x.sk", true },
{ "0x0.cloud", true },
{ "0x0.li", true },
- { "0x0000.ml", true },
{ "0x00c.de", true },
{ "0x00ff00ff.com", true },
{ "0x17.de", true },
@@ -202,6 +243,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "0x41.us", true },
{ "0x48.pw", true },
{ "0x52.net", true },
+ { "0x52.org", true },
{ "0x7d.com", true },
{ "0x7fffffff.net", true },
{ "0x80.org", true },
@@ -212,7 +254,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "0xda.de", true },
{ "0xdc.io", false },
{ "0xdefaced.de", true },
- { "0xf00.ch", true },
{ "0xfc.de", true },
{ "0xff.se", true },
{ "0xn.de", true },
@@ -243,12 +284,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "10495.net", true },
{ "10774.net", true },
{ "10840.net", true },
+ { "109k8.com", true },
{ "10hz.de", true },
{ "10og.de", true },
{ "10ppm.com", true },
{ "110320.com", true },
{ "110692.com", true },
- { "111.one", true },
{ "1111k8.com", true },
{ "111321365.com", true },
{ "111zlong.com", true },
@@ -258,6 +299,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "112it.ro", true },
{ "1130p.com", true },
{ "11321365.com", true },
+ { "113k8.com", true },
{ "114514ss.com", true },
{ "1177107.com", true },
{ "118btt.com", true },
@@ -267,7 +309,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "120323.com", true },
{ "1212873467.rsc.cdn77.org", true },
{ "1218641649.rsc.cdn77.org", true },
- { "123123qq.com", true },
{ "1236.be", true },
{ "123apps.net", true },
{ "123bearing.co.uk", true },
@@ -293,15 +334,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "127663.com", true },
{ "127665.com", true },
{ "12autoankauf-berlin.de", true },
- { "12gotovo.com", true },
{ "12thmanrising.com", true },
{ "12train.com", true },
{ "12vpn.net", true },
+ { "13-th.com", true },
{ "130.ua", true },
{ "130032.com", true },
{ "130212.com", true },
{ "130232.com", true },
{ "130497.xyz", true },
+ { "130ks.com", true },
{ "131934.com", true },
{ "131954.com", true },
{ "13214.cc", true },
@@ -311,18 +353,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "133294.com", true },
{ "133492.com", true },
{ "133846.xyz", true },
+ { "133ks.com", true },
+ { "135374.com", true },
+ { "135416.com", true },
+ { "1359826938.rsc.cdn77.org", true },
{ "136774.com", true },
{ "136814.com", true },
{ "136824.com", true },
{ "136924.com", true },
{ "137724.com", true },
+ { "137kb.com", true },
{ "1391kj.com", true },
{ "1395kj.com", true },
- { "1406304513.com", true },
+ { "13th-dover.uk", true },
{ "141145.com", true },
+ { "14159.gb.net", true },
{ "143533.com", true },
{ "143633.com", true },
{ "143733.com", true },
+ { "143918.com", true },
{ "143933.com", true },
{ "1453914078.rsc.cdn77.org", true },
{ "145433.com", true },
@@ -345,12 +394,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "154633.com", true },
{ "154933.com", true },
{ "155175.com", true },
+ { "155ks.com", true },
{ "156433.com", true },
- { "158306.com", true },
{ "1590284872.rsc.cdn77.org", true },
{ "15918.net", true },
{ "159cp.com", true },
+ { "159ks.net", true },
{ "1600esplanade.com", true },
+ { "160763.com", true },
{ "160887.com", true },
{ "161233.com", true },
{ "161263.com", true },
@@ -363,22 +414,31 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "163132.com", true },
{ "1644091933.rsc.cdn77.org", true },
{ "1661237.com", true },
+ { "1661618.com", true },
{ "168btt.com", true },
{ "168btt.net", true },
+ { "170376.com", true },
+ { "170386.com", true },
{ "170686.com", true },
{ "171083.com", true },
+ { "17187q.com", true },
{ "1750studios.com", false },
{ "1768calc.com.au", true },
{ "176f88.com", true },
{ "177603.com", true },
+ { "177ks.net", true },
+ { "178kb.com", true },
+ { "178ks.net", true },
{ "17kpw.cc", true },
{ "17kpw.com", true },
{ "17xile.com", true },
{ "180btt.com", true },
{ "1811559.com", true },
+ { "181k8.com", true },
{ "182162.com", true },
- { "182wh.com", true },
+ { "182ks.net", true },
{ "1844329061.rsc.cdn77.org", true },
+ { "185k8.com", true },
{ "1876996.com", true },
{ "188198.net", true },
{ "188da.com", true },
@@ -388,6 +448,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "191090.com", true },
{ "1911trust.com", true },
{ "192433.com", true },
+ { "192569.com", true },
{ "1972969867.rsc.cdn77.org", true },
{ "1981612088.rsc.cdn77.org", true },
{ "1994.io", true },
@@ -397,13 +458,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1a-diamantscheiben.de", true },
{ "1a-werkstattgeraete.de", true },
{ "1ab-machinery.com", true },
+ { "1ag777.com", true },
+ { "1ag88.com", true },
{ "1android.de", true },
{ "1c-power.ru", true },
{ "1chan.pl", true },
+ { "1cool.vip", true },
{ "1cover.co.nz", true },
- { "1cover.com.au", true },
{ "1cswd.com", true },
{ "1e9.nl", true },
+ { "1europlan.nl", true },
{ "1f123.net", true },
{ "1fach-digital.de", true },
{ "1gp.us", true },
@@ -416,7 +480,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1ki174.com", true },
{ "1kmi.co", true },
{ "1ll.uk", true },
- { "1lord1faith.com", true },
{ "1m.duckdns.org", true },
{ "1montre.fr", true },
{ "1morebounce.co.uk", true },
@@ -443,7 +506,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1stclassbouncycastles.co.uk", true },
{ "1stforfun.co.uk", true },
{ "1stpeninsulabouncers.co.uk", true },
+ { "1ticks.com", true },
{ "1v9.im", true },
+ { "1volcano.ru", true },
{ "1way.faith", true },
{ "1whw.co.uk", true },
{ "1wirelog.de", true },
@@ -452,38 +517,48 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "2.wtf", true },
{ "200.network", true },
{ "2001y.me", true },
+ { "200201.xyz", true },
{ "2012.ovh", true },
+ { "2030411.com", true },
{ "204504byse.info", true },
{ "2083236893.com", true },
{ "208garfield.com", true },
{ "20at.com", true },
{ "20denier.com", true },
+ { "210k8.com", true },
+ { "213k8.com", true },
{ "215dy.net", true },
{ "218btt.com", true },
{ "21sthammersmith.org.uk", true },
{ "21stnc.us", true },
{ "21x9.org", true },
{ "2206p.com", true },
+ { "2222k8.com", true },
+ { "222k8.com", true },
{ "22321365.com", true },
{ "224918.com", true },
+ { "2264707.ru", true },
{ "22918.net", true },
{ "22delta.com", true },
{ "22txc.com", true },
{ "22vetter.st", true },
{ "230beats.com", true },
{ "233.be", true },
- { "2333666.xyz", true },
+ { "23333.link", true },
{ "2333blog.com", true },
{ "233blog.com", true },
{ "233boy.com", true },
{ "233bwg.com", true },
{ "233hub.com", true },
+ { "233hub.net", true },
+ { "233hub.org", true },
{ "233now.com", true },
{ "233v2.com", true },
{ "233vps.com", true },
{ "233yes.com", true },
{ "23436565.com", true },
{ "238212.com", true },
+ { "23lhb.com", true },
{ "24-7.jp", true },
{ "24.ie", true },
{ "245meadowvistaway.com", true },
@@ -491,7 +566,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "247exchange.com", true },
{ "247healthshop.com", true },
{ "247medplan.com", true },
- { "2495dentalimplants.com", true },
{ "249722.com", true },
{ "24dian30.com", true },
{ "24hour-locksmithsanantonio.com", true },
@@ -505,9 +579,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "24ip.com", true },
{ "24ip.de", true },
{ "24ip.fr", true },
- { "24seven.pk", true },
+ { "24onlinereview.com", true },
+ { "24timeravis.dk", true },
{ "24zpravy.cz", true },
{ "2502.net", true },
+ { "250708.com", true },
{ "2525admin.nl", true },
{ "256pages.com", false },
{ "2586p.com", true },
@@ -532,10 +608,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "288game.net", true },
{ "28peaks.com", true },
{ "28spots.net", true },
+ { "291.com", true },
{ "291167.xyz", true },
{ "2912.nl", true },
+ { "293921.com", true },
{ "2948.ca", true },
{ "2991236.com", true },
+ { "2ag88.com", true },
{ "2au.ru", true },
{ "2bas.nl", true },
{ "2bcompany.ch", true },
@@ -558,6 +637,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "2h-nagoya.org", true },
{ "2heartsbookings.co.uk", true },
{ "2hypeenterprises.com", true },
+ { "2isk.in", true },
{ "2kgwf.fi", true },
{ "2krueger.de", true },
{ "2li.ch", true },
@@ -583,12 +663,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "303112.com", true },
{ "303312.com", true },
{ "303422.com", true },
+ { "3040519.com", true },
{ "304122.com", true },
{ "304322.com", true },
{ "304622.com", true },
{ "3056999.com", true },
{ "309422.com", true },
- { "30hzcollective.com", true },
{ "310422.com", true },
{ "311186.com", true },
{ "311191.com", true },
@@ -601,12 +681,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "314622.com", true },
{ "314633.com", true },
{ "314922.com", true },
- { "315422.com", true },
{ "316433.com", true },
{ "319422.com", true },
{ "31klabs.com", true },
{ "320281.net", true },
{ "321132.com", true },
+ { "321666365.com", true },
{ "321live.nl", true },
{ "324022.com", true },
{ "324122.com", true },
@@ -622,12 +702,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "33-km.ru", true },
{ "33321365.com", true },
{ "333321365.com", true },
+ { "3333k8.com", true },
{ "33445111.com", true },
{ "33445222.com", true },
{ "33445333.com", true },
{ "33445444.com", true },
{ "3345.com", true },
- { "3351p.com", true },
{ "3361p.com", true },
{ "338393.com", true },
{ "338sa.com", true },
@@ -684,10 +764,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "354933.com", true },
{ "356433.com", true },
{ "357maelai.co", true },
+ { "35898a.com", true },
+ { "35898b.com", true },
+ { "35898c.com", true },
+ { "35898d.com", true },
+ { "35898e.com", true },
+ { "35898f.com", true },
+ { "35898g.com", true },
+ { "35898h.com", true },
+ { "35898j.com", true },
+ { "35898k.com", true },
+ { "35898m.com", true },
+ { "35898s.com", true },
+ { "35898w.com", true },
+ { "35898x.com", true },
+ { "35898y.com", true },
+ { "35898z.com", true },
{ "360-staffing.com", true },
- { "360008888.com", true },
{ "360hosting.com.au", true },
{ "360live.fr", true },
+ { "360marketlaunch.com", true },
{ "360rail.nl", true },
{ "360vrs.com", true },
{ "361116.com", true },
@@ -698,10 +794,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "36554ll.com", true },
{ "36554mm.com", true },
{ "365654321.com", true },
- { "36565b.com", true },
{ "36565f.com", true },
{ "3657654321.com", true },
{ "36587654321.com", true },
+ { "36594.com", true },
{ "365beautyworld.com", true },
{ "365daysreview.com", true },
{ "365electricalvn.com", true },
@@ -709,6 +805,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "365iosapp.com", true },
{ "365propertybuyer.co.uk", false },
{ "365skulls.com", true },
+ { "365zg.com", true },
{ "367553.com", true },
{ "367556.com", true },
{ "370422.com", true },
@@ -726,15 +823,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "377813.com", true },
{ "377817.com", true },
{ "378553.com", true },
+ { "378901.com", true },
+ { "378902.com", true },
{ "379700.com", true },
{ "380422.com", true },
- { "38138938.com", true },
{ "382225.com", true },
{ "3838onndo.tk", true },
{ "387763.com", true },
{ "3886aa.com", true },
- { "388da.com", true },
- { "38sihu.com", false },
{ "390422.com", true },
{ "392422.com", true },
{ "393422.com", true },
@@ -747,10 +843,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "394922.com", true },
{ "396422.com", true },
{ "398.info", true },
+ { "398kb.com", true },
+ { "39w66.com", true },
{ "3aandl.com", true },
{ "3ags.de", true },
{ "3amtoolbox.se", true },
- { "3ank.in", false },
{ "3b.pm", true },
{ "3bakayottu.com", true },
{ "3bigking.com", true },
@@ -776,7 +873,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "3james.com", true },
{ "3logic.ru", true },
{ "3n5b.com", true },
- { "3niu168.com", true },
{ "3niu6.com", true },
{ "3niuurl.com", false },
{ "3oneseven.com", true },
@@ -801,6 +897,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "3tribes.co.uk", true },
{ "3typen.tv", true },
{ "3v4l.org", true },
+ { "3ve.com", true },
{ "3vlnaeet.cz", true },
{ "3xbit.com.br", true },
{ "3xm.at", true },
@@ -826,10 +923,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "42ch.com", true },
{ "42day.info", true },
{ "42l.fr", true },
+ { "432666365.com", true },
{ "439050.com", true },
{ "43klive.com", true },
+ { "44-k.com", true },
{ "440887.com", true },
- { "440hz.radio", true },
{ "441jj.com", false },
{ "441jz.com", false },
{ "442887.com", true },
@@ -840,8 +938,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "444887.com", true },
{ "445887.com", true },
{ "44sec.com", true },
- { "451.ooo", true },
- { "4553.com", true },
{ "455327.com", true },
{ "4553s.com", true },
{ "46fa.com", true },
@@ -879,21 +975,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "4x4-27mc.nl", true },
{ "4x4.lk", true },
{ "4x4coatingen.nl", true },
- { "4x4tt.com", true },
{ "4xlabs.co", true },
{ "50.gd", true },
{ "50.pe", true },
- { "500k.nl", true },
{ "500p.xyz", true },
+ { "501117.com", true },
{ "502312.com", true },
{ "504122.com", true },
{ "504322.com", true },
{ "504622.com", true },
{ "504922.com", true },
+ { "5060711.com", true },
+ { "5060715.com", true },
{ "506422.com", true },
+ { "508kb.com", true },
{ "50lakeshore.com", true },
{ "50north.de", true },
{ "513maximus.site", true },
+ { "513x.cc", true },
{ "514122.com", true },
{ "514522.com", true },
{ "514922.com", true },
@@ -903,8 +1002,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "516btt.net", true },
{ "518.com.tw", true },
{ "51877.net", true },
+ { "518k8.com", true },
{ "519422.com", true },
- { "5197.co", false },
{ "5197.com", true },
{ "5197a.co", true },
{ "5197aa.co", true },
@@ -914,10 +1013,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "5197cc.co", true },
{ "5197d.co", true },
{ "5197dd.co", true },
- { "5197dh.co", true },
- { "5197dh.com", false },
- { "5197dns.com", false },
- { "5197dz.com", false },
{ "5197e.co", true },
{ "5197ee.co", true },
{ "5197f.co", true },
@@ -949,7 +1044,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "5197rr.co", true },
{ "5197s.co", true },
{ "5197ss.co", true },
- { "5197sx.com", false },
{ "5197t.co", true },
{ "5197tt.co", true },
{ "5197u.co", true },
@@ -965,7 +1059,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "5197z.co", true },
{ "5197zz.co", true },
{ "51acg.eu.org", true },
- { "51chiyu.com", true },
{ "51guaq.com", true },
{ "51tiaojiu.com", true },
{ "52051.com", true },
@@ -1032,23 +1125,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "52ncp.net", true },
{ "52sykb.com", true },
{ "531422.com", true },
+ { "532441.com", true },
{ "532445.com", true },
{ "534122.com", true },
{ "534622.com", true },
{ "534922.com", true },
- { "5364.com", true },
{ "536422.com", true },
{ "5364b.com", true },
{ "5364c.com", true },
{ "5364d.com", true },
{ "5364jc.com", true },
{ "53ningen.com", true },
- { "54.sb", true },
{ "540922.com", true },
{ "541022.com", true },
{ "541622.com", true },
{ "541722.com", true },
{ "541922.com", true },
+ { "543666365.com", true },
{ "545922.com", true },
{ "546802.com", true },
{ "54below.com", true },
@@ -1061,16 +1154,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "556021.com", true },
{ "556185.com", true },
{ "558btt.net", true },
+ { "55d88.com", true },
+ { "565kb.com", true },
{ "56736565.com", true },
+ { "567666365.com", true },
{ "576422.com", true },
{ "578637.com", true },
{ "579422.com", true },
- { "57wilkie.net", true },
{ "581018.com", true },
{ "583422.com", true },
{ "585422.com", true },
+ { "585kb.com", true },
{ "586422.com", true },
{ "588l.com", true },
+ { "58d88.com", true },
{ "58nav.com", true },
{ "591422.com", true },
{ "592227.com", true },
@@ -1109,11 +1206,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "614022.com", true },
{ "614322.com", true },
{ "614922.com", true },
+ { "616btt.com", true },
{ "616f88.com", true },
{ "617020.com", true },
{ "61730123.com", true },
{ "618btt.com", true },
- { "618btt.net", true },
{ "620881.com", true },
{ "621422.com", true },
{ "622812.com", true },
@@ -1132,7 +1229,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "634922.com", true },
{ "635422.com", true },
{ "636422.com", true },
- { "638566.com", true },
{ "639422.com", true },
{ "640622.com", true },
{ "640722.com", true },
@@ -1170,7 +1266,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "649822.com", true },
{ "651422.com", true },
{ "652422.com", true },
- { "6541166.com", true },
{ "6542277.com", true },
{ "6543399.com", true },
{ "65477.com", true },
@@ -1186,21 +1281,31 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "659422.com", true },
{ "65d88.com", true },
{ "6602p.com", true },
+ { "660887.com", true },
{ "662607.xyz", true },
{ "66321365.com", true },
{ "6633445.com", true },
{ "6652566.com", true },
{ "6660111.ru", true },
+ { "66619991.com", true },
+ { "666365app.com", true },
+ { "666365ios.com", true },
+ { "666365iosapp.com", true },
{ "6664553.com", true },
{ "666618.cc", true },
{ "666668722.com", true },
{ "666am8.com", true },
+ { "666k8.com", true },
+ { "666omg.com", true },
{ "668825.vip", true },
{ "668am8.com", true },
- { "66b.com", true },
+ { "668k8.com", true },
+ { "668k8.net", true },
+ { "670102.com", true },
{ "670422.com", true },
{ "671422.com", true },
{ "672422.com", true },
+ { "6729a.co", true },
{ "6729a.com", true },
{ "6729aa.co", true },
{ "6729aa.com", true },
@@ -1232,9 +1337,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6729gg.com", true },
{ "6729h.co", true },
{ "6729h.com", true },
- { "6729hb.com", false },
- { "6729hd.com", false },
{ "6729hh.co", true },
+ { "6729hh.com", true },
{ "6729i.co", true },
{ "6729i.com", true },
{ "6729ii.co", true },
@@ -1247,18 +1351,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6729k.co", true },
{ "6729k.com", true },
{ "6729kk.co", true },
+ { "6729kk.com", true },
{ "6729l.co", true },
{ "6729l.com", true },
{ "6729ll.co", true },
{ "6729ll.com", true },
{ "6729m.co", true },
{ "6729m.com", true },
+ { "6729mm.co", true },
+ { "6729mm.com", true },
+ { "6729n.co", true },
+ { "6729n.com", true },
+ { "6729nn.co", true },
{ "6729nn.com", true },
{ "6729o.co", true },
{ "6729o.com", true },
{ "6729oo.co", true },
{ "6729oo.com", true },
{ "6729p.co", true },
+ { "6729p.com", true },
{ "6729pp.co", true },
{ "6729pp.com", true },
{ "6729q.co", true },
@@ -1273,13 +1384,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6729s.com", true },
{ "6729ss.co", true },
{ "6729ss.com", true },
- { "6729sx.com", false },
{ "6729t.co", true },
{ "6729t.com", true },
{ "6729tt.co", true },
{ "6729tt.com", true },
+ { "6729u.co", true },
{ "6729u.com", true },
+ { "6729uu.co", true },
{ "6729uu.com", true },
+ { "6729v.co", true },
{ "6729v.com", true },
{ "6729vv.co", true },
{ "6729vv.com", true },
@@ -1291,22 +1404,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6729x.com", true },
{ "6729xx.co", true },
{ "6729xx.com", true },
- { "6729xy.com", false },
{ "6729y.co", true },
{ "6729y.com", true },
{ "6729yy.co", true },
+ { "6729yy.com", true },
{ "6729z.co", true },
{ "6729z.com", true },
{ "6729zz.co", true },
{ "6729zz.com", true },
{ "673422.com", true },
+ { "673569.com", true },
{ "676422.com", true },
{ "676812.com", true },
+ { "67836565.com", true },
{ "679422.com", true },
{ "680422.com", true },
{ "68277.me", true },
{ "6848.com", true },
{ "686848.com", true },
+ { "688libo.com", true },
{ "68hvip.com", true },
{ "690422.com", true },
{ "691422.com", true },
@@ -1320,15 +1436,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6957b.co", true },
{ "6957bb.co", true },
{ "6957c.co", true },
+ { "6957cc.co", true },
{ "6957d.co", true },
{ "6957dd.co", true },
- { "6957dz.com", false },
+ { "6957e.co", true },
{ "6957ee.co", true },
{ "6957f.co", true },
+ { "6957ff.co", true },
{ "6957g.co", true },
{ "6957gg.co", true },
{ "6957h.co", true },
- { "6957hd.com", false },
{ "6957hh.co", true },
{ "6957i.co", true },
{ "6957ii.co", true },
@@ -1345,8 +1462,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6957o.co", true },
{ "6957oo.co", true },
{ "6957p.co", true },
+ { "6957pp.co", true },
+ { "6957q.co", true },
{ "6957qq.co", true },
{ "6957r.co", true },
+ { "6957rr.co", true },
{ "6957s.co", true },
{ "6957ss.co", true },
{ "6957t.co", true },
@@ -1359,12 +1479,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6957ww.co", true },
{ "6957x.co", true },
{ "6957xx.co", true },
- { "6957xy.com", false },
{ "6957y.co", true },
{ "6957yy.co", true },
{ "6957z.co", true },
{ "6957zz.co", true },
- { "6969.us", true },
{ "698da.com", true },
{ "6997896.com", true },
{ "69butterfly.com", true },
@@ -1376,7 +1494,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "6hzx.com", true },
{ "6ird.com", true },
{ "6lo.zgora.pl", true },
- { "6z0.cn", true },
{ "700.az", true },
{ "701135.com", true },
{ "701605.com", true },
@@ -1398,6 +1515,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "716176.com", true },
{ "716227.com", true },
{ "716331.com", true },
+ { "71787q.com", true },
+ { "71787r.com", true },
+ { "71787s.com", true },
+ { "71787u.com", true },
+ { "71787v.com", true },
{ "718113.com", true },
{ "718227.com", true },
{ "718337.com", true },
@@ -1437,6 +1559,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "762.ch", true },
{ "762116.com", true },
{ "763137.com", true },
+ { "76668.com", true },
+ { "7666898.com", true },
+ { "76669.com", true },
+ { "77177.de", true },
{ "77321365.com", true },
{ "7733445.com", true },
{ "7770b.com", true },
@@ -1444,7 +1570,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "7777k8.com", true },
{ "777coin.com", true },
{ "7787p.com", true },
- { "780aa.com", true },
{ "781371.com", true },
{ "781376.com", true },
{ "781671.com", true },
@@ -1453,9 +1578,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "783631.com", true },
{ "783lab.com", true },
{ "787637.com", true },
+ { "787kb.com", true },
{ "7885765.com", true },
{ "7891553.com", true },
{ "7891997.com", true },
+ { "7894.net", true },
{ "7898666.com", true },
{ "790security.co.za", true },
{ "797715.com", true },
@@ -1463,42 +1590,47 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "7careconnect.com", true },
{ "7delights.com", true },
{ "7delights.in", true },
- { "7f.is", true },
{ "7geese.com", true },
{ "7graus.pt", true },
{ "7ka.co", true },
{ "7kicks.com", true },
{ "7kovrikov.ru", true },
+ { "7l00p.com", true },
{ "7milesglobal.com", true },
{ "7pb.ru", true },
{ "7plus.com.au", true },
{ "7proxies.com", true },
+ { "7sdre.am", true },
{ "7sons.de", true },
{ "7thcircledesigns.com", true },
- { "7x24servis.com", true },
{ "803001.com", true },
{ "804322.com", true },
+ { "806kb.com", true },
{ "80780780.com", true },
{ "8080883.com", true },
{ "8080889.com", true },
{ "8086.cf", true },
{ "80883.cc", true },
- { "80887.cc", true },
{ "809088.cc", true },
{ "809422.com", true },
{ "80993.net", true },
+ { "809kb.com", true },
{ "80bin.com", true },
{ "814022.com", true },
{ "815jz.com", true },
{ "816jz.com", true },
{ "81818app.com", true },
{ "8189196.com", true },
- { "818da.com", true },
+ { "819kb.com", true },
{ "8203d88.com", true },
- { "8214p.com", true },
- { "8216p.com", true },
+ { "8208d88.com", true },
+ { "8211p.com", true },
+ { "8212p.com", true },
+ { "8213p.com", true },
+ { "8215p.com", true },
{ "8228d88.com", true },
{ "8230d88.com", true },
+ { "82ag88.com", true },
{ "833792.com", true },
{ "8349822.com", true },
{ "8363p.com", true },
@@ -1520,7 +1652,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "8522ph.com", true },
{ "8522tw.com", true },
{ "8522usa.com", true },
+ { "856kb.com", true },
+ { "861kb.com", true },
+ { "869kb.com", true },
{ "86btt.com", true },
+ { "86metro.ru", true },
{ "8722.am", true },
{ "8722am.com", true },
{ "8722cn.com", true },
@@ -1528,48 +1664,45 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "8722ph.com", true },
{ "8722tw.com", true },
{ "8722usa.com", true },
+ { "876666365.com", true },
{ "877791.com", true },
{ "88-line.com", true },
{ "88-line.net", true },
+ { "8801ks.com", true },
+ { "8802p.com", true },
{ "8809d88.com", true },
{ "881-line.com", true },
{ "881-line.net", true },
+ { "8812ks.com", true },
+ { "8818ks.com", true },
+ { "8819ks.com", true },
{ "8826ks.com", true },
{ "88321365.com", true },
{ "8833445.com", true },
+ { "8839ks.com", true },
{ "88522am.com", true },
{ "885287.com", true },
{ "8858ks.com", true },
+ { "8859ks.com", true },
+ { "885kb.com", true },
{ "8868ks.com", true },
+ { "886k8.com", true },
{ "886k8.net", true },
{ "887.ag", true },
- { "8876007.com", true },
- { "8876008.com", true },
- { "8876009.com", true },
- { "8876205.com", true },
- { "8876278.com", true },
- { "8876289.com", true },
- { "8876290.com", true },
- { "8876353.com", true },
- { "8876389.com", true },
- { "8876764.com", true },
- { "8876808.com", true },
- { "8876832.com", true },
- { "8876835.com", true },
- { "8876859.com", true },
- { "8876878.com", true },
- { "8876955.com", true },
- { "8876979.com", true },
- { "8876987.com", true },
- { "8876989.com", true },
+ { "88851333.com", true },
{ "88851777.com", true },
- { "888666pj.com", true },
+ { "8885ks.com", true },
+ { "8886ks.com", true },
{ "88881.pw", true },
{ "888888722.com", true },
{ "88889822.com", true },
{ "888funcity.com", true },
{ "888funcity.net", true },
+ { "8890ks.com", true },
+ { "8892ks.com", true },
{ "88btt.net", true },
+ { "88kash.com", true },
+ { "88kb88.com", true },
{ "88yule11.com", true },
{ "88yule112.com", true },
{ "88yule113.com", true },
@@ -1581,12 +1714,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "88yule7.com", true },
{ "88yule9.com", true },
{ "890238.com", true },
+ { "89386.com", true },
+ { "89386a.com", true },
+ { "89386b.com", true },
+ { "89386c.com", true },
+ { "89386d.com", true },
+ { "89386e.com", true },
{ "89btt.com", true },
+ { "8ag88.com", true },
{ "8balls.nl", true },
- { "8da188.com", true },
- { "8da222.com", true },
- { "8da999.com", true },
- { "8dabet.com", true },
{ "8maerz.at", true },
{ "8pc.ru", true },
{ "8t8.eu", true },
@@ -1602,6 +1738,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "905422.com", true },
{ "9090819.com", true },
{ "90r.jp", true },
+ { "9108.fun", true },
{ "910kj.com", true },
{ "911.gov", true },
{ "911216.xyz", true },
@@ -1624,30 +1761,39 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "91891854.com", true },
{ "91891856.com", true },
{ "91891878.com", true },
+ { "918aac.com", true },
{ "918aak.com", true },
+ { "918ac.com", true },
{ "918ajj.com", true },
{ "918akk.com", true },
{ "918amj.co", true },
{ "918att.com", true },
+ { "918axx.com", true },
+ { "918ayy.com", true },
{ "918bbm.co", true },
+ { "918bbt.com", true },
+ { "918bby.co", true },
{ "918bby.com", true },
{ "918bcf.co", true },
{ "918bcw.co", true },
+ { "918bhh.com", true },
{ "918btt.com", true },
{ "918btt.net", true },
{ "918btty.com", true },
{ "918bttz.com", true },
+ { "918byy.com", true },
{ "918ca.com", true },
- { "918caa.com", true },
- { "918cch.com", true },
+ { "918cca.com", true },
{ "918ch.com", true },
{ "918cr.com", true },
{ "918cx.com", true },
{ "918dc04.com", true },
{ "918dc16.com", true },
- { "918dc20.com", true },
- { "918dp.com", true },
+ { "918dc19.com", true },
+ { "918dda.com", true },
+ { "918dxx.com", true },
{ "918ee.com", true },
+ { "918eej.com", true },
{ "918ej.com", true },
{ "918ev.com", true },
{ "918fq.com", true },
@@ -1656,8 +1802,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "918gd.com", true },
{ "918hr.com", true },
{ "918hu.com", true },
+ { "918ia.com", true },
{ "918iz.com", true },
{ "918kx.com", true },
+ { "918ma.com", true },
{ "918mc.com", true },
{ "918md10.com", true },
{ "918md16.com", true },
@@ -1668,9 +1816,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "918nu.com", true },
{ "918ny.com", true },
{ "918qa.com", true },
+ { "918qs.com", true },
+ { "918qz.com", true },
{ "918rw.com", true },
+ { "918sa.com", true },
{ "918sn.com", true },
{ "918ta.com", true },
+ { "918te.com", true },
{ "918tj.com", true },
{ "918tr.com", true },
{ "918tw.com", true },
@@ -1685,12 +1837,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "918wo.com", true },
{ "918wq.com", true },
{ "918ww.com", true },
+ { "918xe.com", true },
{ "918xn.com", true },
+ { "918yy.net", true },
{ "918zm.com", true },
{ "918zv.com", true },
{ "918zw.com", true },
{ "919422.com", true },
- { "91d27.com", true },
+ { "91d27.com", false },
{ "91d52.com", true },
{ "91d58.com", true },
{ "91d89.com", true },
@@ -1700,8 +1854,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "924622.com", true },
{ "926422.com", true },
{ "929349.com", true },
- { "9297.co", false },
- { "9297.com", true },
{ "9297a.co", true },
{ "9297aa.co", true },
{ "9297b.co", true },
@@ -1710,7 +1862,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9297cc.co", true },
{ "9297d.co", true },
{ "9297dd.co", true },
- { "9297dns.com", false },
{ "9297e.co", true },
{ "9297ee.co", true },
{ "9297f.co", true },
@@ -1718,8 +1869,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9297g.co", true },
{ "9297gg.co", true },
{ "9297h.co", true },
- { "9297hb.com", false },
- { "9297hd.com", false },
{ "9297hh.co", true },
{ "9297i.co", true },
{ "9297ii.co", true },
@@ -1828,6 +1977,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "961621.com", true },
{ "962312.com", true },
{ "963cq.com", true },
+ { "966ks.com", true },
{ "967606.com", true },
{ "9679693.com", true },
{ "9681909.com", true },
@@ -1886,18 +2036,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9721z.com", true },
{ "9721zz.com", true },
{ "972422.com", true },
- { "9728.co", false },
+ { "9728.com", true },
{ "9728a.co", true },
{ "9728aa.co", true },
{ "9728b.co", true },
- { "9728bb.co", false },
{ "9728c.co", true },
{ "9728cc.co", true },
{ "9728d.co", true },
{ "9728dd.co", true },
- { "9728dh.com", false },
- { "9728dns.com", false },
- { "9728dz.com", false },
{ "9728e.co", true },
{ "9728ee.co", true },
{ "9728f.co", true },
@@ -1905,8 +2051,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9728g.co", true },
{ "9728gg.co", true },
{ "9728h.co", true },
- { "9728hb.com", false },
- { "9728hd.com", false },
{ "9728hh.co", true },
{ "9728i.co", true },
{ "9728ii.co", true },
@@ -1930,7 +2074,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9728rr.co", true },
{ "9728s.co", true },
{ "9728ss.co", true },
- { "9728sx.com", false },
{ "9728t.co", true },
{ "9728tt.co", true },
{ "9728u.co", true },
@@ -1945,8 +2088,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9728yy.co", true },
{ "9728z.co", true },
{ "9728zz.co", true },
+ { "97735.com", true },
{ "977hghg.com", true },
+ { "977kb.com", true },
{ "9788876.com", true },
+ { "9800.cc", true },
{ "9822.am", true },
{ "9822am.com", true },
{ "9822cn.com", true },
@@ -1955,7 +2101,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9822tw.com", true },
{ "9822usa.com", true },
{ "984.ch", true },
+ { "985kb.com", true },
{ "9867666.com", true },
+ { "987666365.com", true },
+ { "98d88.com", true },
{ "9918883.com", true },
{ "99321365.com", true },
{ "9933445.com", true },
@@ -1964,21 +2113,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "9988ty.com", true },
{ "998sa.com", true },
{ "9994553.com", true },
- { "9998722.com", true },
+ { "99989796.com", true },
+ { "99989796.net", true },
+ { "9998k8.com", true },
{ "99998522.com", true },
{ "99999822.com", true },
{ "999998722.com", true },
+ { "9999k8.com", true },
+ { "9999k8.net", true },
+ { "999btt.net", true },
{ "999salon.co", true },
{ "999salon.com", true },
+ { "99d88.com", true },
{ "99lib.net", true },
{ "99rst.org", true },
{ "99spokes.com", true },
+ { "9ag88.com", true },
{ "9box.jp", true },
{ "9farm.com", true },
{ "9fvip.net", true },
+ { "9h.pl", true },
{ "9iwan.net", true },
{ "9k886.com", true },
{ "9pkfz.com", true },
+ { "9to5notes.in", true },
{ "9uelle.jp", true },
{ "9vx.org", true },
{ "9yw.me", true },
@@ -1988,29 +2146,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "a-care.net", true },
{ "a-classinflatables.co.uk", true },
{ "a-invest.de", true },
- { "a-little-linux-box.at", true },
{ "a-msystems.com", true },
{ "a-oben.org", true },
{ "a-players.team", true },
{ "a-wife.net", true },
{ "a-ztransmission.com", true },
{ "a0print.nl", true },
- { "a122.cc", true },
{ "a1autotransport.com", true },
{ "a1bouncycastlehire.com", true },
{ "a1jumpandbounce.co.uk", true },
- { "a1moldsolutions.com", true },
+ { "a1post.bg", true },
{ "a1scuba.com", true },
{ "a22z.xyz", true },
{ "a291.cc", true },
{ "a2a.me", true },
{ "a2a.net", true },
{ "a2nutrition.com.au", true },
- { "a2os.club", true },
{ "a30.tokyo", true },
{ "a4sound.com", true },
{ "a5197.co", true },
- { "a632079.me", true },
+ { "a6729.co", true },
{ "a6729.com", true },
{ "a6957.co", true },
{ "a7la-chat.com", true },
@@ -2030,7 +2185,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aa9397.com", true },
{ "aa9721.com", true },
{ "aa9728.co", true },
- { "aaa-racing.com", true },
{ "aaa-racing.net", true },
{ "aaa-racing.uk", true },
{ "aaapl.com", true },
@@ -2043,7 +2197,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aalalbayt.net", true },
{ "aalstmotors-usedcars.be", true },
{ "aaltocapital.com", true },
- { "aaminntourtravel.com", false },
{ "aamwa.com", true },
{ "aandkevents.co.uk", true },
{ "aanmpc.com", true },
@@ -2054,11 +2207,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aarklendoia.com", true },
{ "aarkue.eu", true },
{ "aaron-russell.co.uk", true },
- { "aaronfurtado.com", true },
+ { "aaronburt.co.uk", true },
{ "aaronhorler.com", true },
{ "aaronhorler.com.au", true },
{ "aaronkimmig.de", true },
{ "aaronroyle.com", true },
+ { "aaronsilber.me", true },
+ { "aartsplastics.nl", true },
{ "aatf.us", true },
{ "aati.be", true },
{ "aati.info", true },
@@ -2072,7 +2227,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "abaaustin.com", true },
{ "ababyco.com.hr", true },
{ "abacusbouncycastle.co.uk", true },
- { "abaev.uk", true },
+ { "abacustech.co.jp", true },
{ "abandonedmines.gov", true },
{ "abateroad66.it", true },
{ "abbadabbabouncycastles.co.uk", true },
@@ -2102,7 +2257,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "abeus.com", true },
{ "abg.ninja", true },
{ "abhisharma.me", true },
- { "abi-2017.tk", true },
{ "abiapp.net", true },
{ "abibruce.co.uk", true },
{ "abidinginhesed.com", true },
@@ -2129,6 +2283,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "abobuch.de", true },
{ "aboces.org", true },
{ "aboderenovation.co.uk", true },
+ { "abogadoperu.com", true },
+ { "abogadoscav.com", true },
{ "abogadosescobarysanchez.es", true },
{ "abolicionistas.com", true },
{ "abolition.net", true },
@@ -2172,7 +2328,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "abpis.hr", true },
{ "abracadabra.co.jp", false },
{ "abrakidabra.com.br", true },
- { "abrilect.com", true },
{ "abristolgeek.co.uk", true },
{ "abseits.org", true },
{ "absolem.cc", false },
@@ -2185,13 +2340,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "absolutewebdesigns.com", true },
{ "absolutviajes.com", true },
{ "abstractbarista.net", true },
- { "abstraction21.com", true },
- { "abstudio.de", true },
{ "absturztau.be", true },
{ "absturztaube.ch", true },
{ "absynthe-inquisition.fr", true },
{ "abthorpe.org", true },
- { "abublog.com", true },
{ "abulanov.com", true },
{ "abundanteconomy.com", true },
{ "abundent.com", true },
@@ -2205,6 +2357,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ac-cosmetics.nl", true },
{ "ac-elektro.com.ua", true },
{ "ac-epmservices.com", true },
+ { "ac-town.com", true },
{ "ac.milan.it", true },
{ "ac0g.dyndns.org", true },
{ "aca-creative.co.uk", true },
@@ -2224,6 +2377,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "acareer.in", true },
{ "acarreosvillavicencio.com", true },
{ "acat.io", true },
+ { "acatec.de", true },
{ "acbrussels-used.be", true },
{ "accelaway.com", true },
{ "acceleratenetworks.com", true },
@@ -2231,13 +2385,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "accelerator.net", true },
{ "accelsnow.com", true },
{ "accentthailand.com", true },
+ { "acceptancerecoverycenter.com", true },
{ "accesloges.com", true },
{ "accessacab.co.uk", true },
{ "accessauto-occasions.be", true },
{ "accessgaragedoors.com", true },
{ "accessibletravelclub.com", true },
{ "accesskeycloning.com", true },
- { "accessmy.net", true },
{ "accessoirescheveuxchic.com", true },
{ "accessoripersmartphone.it", true },
{ "acchicocchi.com", true },
@@ -2252,7 +2406,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "accounts.google.com", true },
{ "accpl.co", true },
{ "accpodcast.com", true },
- { "accredit.ly", true },
{ "accreditamento.net", true },
{ "accrosoft.com", true },
{ "accudraftpaintbooths.com", true },
@@ -2261,6 +2414,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ace.one", true },
{ "acealters.com", true },
{ "aceanswering.com", true },
+ { "acecerts.co.uk", true },
{ "acecolleges.edu.au", true },
{ "acefreightco.com", true },
{ "aceinflatables.com", true },
@@ -2269,13 +2423,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "acem.org.au", true },
{ "acemobileforce.com", true },
{ "acemypaper.com", true },
- { "acen.eu", true },
{ "acendealuz.com.br", true },
{ "acerentalandsales.com", true },
- { "acerislaw.com", true },
{ "acessoeducacao.com", true },
{ "acfun.eu.org", true },
{ "acg.social", true },
+ { "acg.vc", true },
{ "acgmoon.com", true },
{ "acgmoon.org", true },
{ "acgtalktw.com", true },
@@ -2298,8 +2451,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "acinq.co", true },
{ "ackermann.ch", true },
{ "ackis.duckdns.org", false },
- { "acklandstainless.com.au", true },
{ "acl.gov", true },
+ { "acl.ink", true },
{ "aclu.org", false },
{ "acluva.org", false },
{ "acme.beer", true },
@@ -2310,8 +2463,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "acordes.online", true },
{ "acorncastles.co.uk", true },
{ "acorncredentialing.com", true },
- { "acoshift.com", true },
- { "acoshift.me", true },
+ { "acorntreecare.com", true },
{ "acourse.io", true },
{ "acousti-tech.com", true },
{ "acousticalsolutions.com", true },
@@ -2322,6 +2474,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "acp-integrative.fr", true },
{ "acpcoils.com", true },
{ "acperu.ch", true },
+ { "acquaparrucchieri.it", true },
+ { "acquire.media", true },
{ "acquisition.gov", true },
{ "acquistareviagragenericoitalia.net", false },
{ "acrepairgeorgetown.com", true },
@@ -2357,9 +2511,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "active-tluszcz.pl", true },
{ "active.hu", false },
{ "activecare-monitor.com", false },
+ { "activeclearweb.com", true },
{ "activeexcavator.com", true },
+ { "activefootandankle.com", true },
{ "activehire.co.uk", true },
{ "activeleisure.ie", true },
+ { "activephoto.se", true },
{ "activiteithardenberg.nl", true },
{ "activityeventhire.co.uk", true },
{ "actom.cc", true },
@@ -2377,6 +2534,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "actualidadmotor.com", true },
{ "actualidadviajes.com", true },
{ "actualsolutions.am", true },
+ { "actuatemedia.com", true },
{ "acudire.es", true },
{ "acuica.co.uk", false },
{ "acul.me", true },
@@ -2384,14 +2542,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "acupuntura.coach", true },
{ "acupuntura.doctor", true },
{ "acupuntura.institute", true },
- { "acupunturamadrid.xyz", true },
{ "acupunturavalencia.xyz", true },
{ "acus.gov", true },
{ "acutewealthadvisors.com", true },
+ { "acwcerts.co.uk", true },
{ "acwi.gov", true },
{ "acy.com", true },
{ "acyfxasia.com", true },
- { "acyume.com", true },
{ "ad-notam.asia", true },
{ "ad-notam.ch", true },
{ "ad-notam.co.uk", true },
@@ -2417,6 +2574,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adamgibbins.com", true },
{ "adamh.us", true },
{ "adamkostecki.de", true },
+ { "adamlee.com", true },
{ "adamoutler.com", true },
{ "adamradocz.com", true },
{ "adams.dk", true },
@@ -2430,6 +2588,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adaptablesecurity.org", true },
{ "adaptergonomics.com", true },
{ "adapti.de", true },
+ { "adaptiveicons.com", true },
{ "adaptivemechanics.edu.au", true },
{ "adarshcloud.in", true },
{ "adarshthapa.in", true },
@@ -2461,6 +2620,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adelightfulglow.com", true },
{ "adeline.mobi", true },
{ "adentalsolution.com", true },
+ { "adeon.ml", true },
{ "adept-elearning.com", true },
{ "adept.org.pl", true },
{ "adesa.co.uk", true },
@@ -2483,6 +2643,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adlerosn.com.br", true },
{ "adlershop.ch", true },
{ "adlignum.se", true },
+ { "adm-sarov.ru", true },
{ "adme.co.il", true },
{ "admin-serv.net", true },
{ "admin.casa", true },
@@ -2499,7 +2660,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adminless.ovh", true },
{ "adminlinux.pl", true },
{ "admino.cz", true },
- { "admins.tech", true },
{ "adminwerk.net", true },
{ "admirable.one", true },
{ "admirable.pro", true },
@@ -2519,6 +2679,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adorewe.com", true },
{ "adorno-gymnasium.de", true },
{ "adoucisseur.shop", true },
+ { "adpkdsim.org", true },
{ "adquisitio.co.uk", true },
{ "adquisitio.es", true },
{ "adquisitio.fr", true },
@@ -2528,9 +2689,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adrafinil.wiki", true },
{ "adrenalin.od.ua", true },
{ "adrenalin.travel", true },
- { "adresults.com", true },
- { "adresults.nl", true },
{ "adrian.web.id", true },
+ { "adrian2023.com", true },
{ "adrianbechtold.de", true },
{ "adriancitu.com", true },
{ "adriancostin.ro", true },
@@ -2560,6 +2720,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "advanceddisposables.co.uk", false },
{ "advancedelectricalservicesqld.com.au", true },
{ "advancedendoscopycenter.net", true },
+ { "advancedoneroofing.com", true },
{ "advancedprotectionkey.com", true },
{ "advancedprotectionsecuritykey.com", true },
{ "advancedsurgicalconsultantsllc.com", true },
@@ -2573,6 +2734,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "advara.com", true },
{ "advenacs.com", true },
{ "advenacs.com.au", true },
+ { "advenapay.com", true },
{ "advento.bg", true },
{ "adventure-inn.com", true },
{ "adventurecreators.com", true },
@@ -2583,7 +2745,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adventuregamers.com", true },
{ "adventurenow.nl", true },
{ "adventureswithlillie.ca", true },
+ { "adventureworldtour.com", true },
{ "adventurousway.com", true },
+ { "adversus-test.tk", false },
+ { "adversus-web-staging.tk", false },
{ "advertis.biz", true },
{ "adviserplus.com", true },
{ "advocate-europe.eu", true },
@@ -2595,7 +2760,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "adware.pl", false },
{ "adwokatkosterka.pl", true },
{ "adwokatzdunek.pl", true },
- { "adws.io", true },
{ "adxperience.com", true },
{ "adzuna.at", true },
{ "adzuna.ca", true },
@@ -2615,8 +2779,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ae-construction.co.uk", true },
{ "ae-dir.com", true },
{ "ae-dir.org", true },
- { "ae86sb.com", true },
- { "ae86x.com", true },
+ { "ae86nb.com", true },
{ "aebian.org", true },
{ "aecexpert.fr", true },
{ "aedollon.com", true },
@@ -2630,6 +2793,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aegrel.ee", true },
{ "aehe.us", true },
{ "aei.co.uk", true },
+ { "aeksistem.com", true },
{ "aelurus.com", true },
{ "aenterprise.info", true },
{ "aeon.co", true },
@@ -2654,19 +2818,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aertel.ie", true },
{ "aessencia.com.br", true },
{ "aestheticsplus.xyz", true },
+ { "aesthetikpiercing.de", true },
{ "aesthetx.com", true },
{ "aestore.by", true },
{ "aeternus.tech", true },
{ "aetherc0r3.eu", true },
+ { "aetherlink.de", true },
{ "aetoscg.com", true },
{ "aetoscg.com.au", true },
{ "aextron.com", true },
{ "aextron.de", true },
{ "aextron.org", true },
+ { "af-tech.cz", true },
{ "afavre.io", true },
- { "afb24.de", true },
{ "afcmrs.org", false },
{ "afcompany.it", true },
+ { "afcurgentcarelyndhurst.com", true },
{ "aff.moe", true },
{ "affairefacile.net", true },
{ "affarsnatverk.nu", true },
@@ -2696,7 +2863,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "afinaudio.com", true },
{ "aflam4you.tv", true },
{ "aflfreebets.com", true },
- { "aflowershop.ca", true },
{ "afmtevents.com", true },
{ "afp548.com", true },
{ "afri.cc", true },
@@ -2704,7 +2870,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "african-bay.de", true },
{ "africanexponent.com", true },
{ "africanimpact.com", true },
- { "africankitchen.gallery", true },
{ "africantourer.com", true },
{ "afrikarl.de", true },
{ "afrodigital.uk", true },
@@ -2714,10 +2879,100 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "after.digital", true },
{ "afterdwi.info", true },
{ "afterhate.fr", true },
+ { "afterpay.com", true },
{ "afva.net", true },
{ "afwd.international", true },
+ { "ag-2.net", true },
+ { "ag-3.net", true },
+ { "ag-33.net", true },
+ { "ag-55.net", true },
+ { "ag-777.com", true },
+ { "ag0101g.com", true },
+ { "ag0202a.com", true },
+ { "ag0707a.com", true },
+ { "ag1515a.com", true },
+ { "ag1588.com", true },
+ { "ag18ks.com", true },
+ { "ag2020a.com", true },
+ { "ag3232g.com", true },
+ { "ag4141a.com", true },
+ { "ag4848g.com", true },
+ { "ag4949g.com", true },
+ { "ag5688.com", true },
+ { "ag600.com", true },
+ { "ag6005.com", true },
+ { "ag6016.com", true },
+ { "ag6033.com", true },
+ { "ag6037.com", true },
+ { "ag6072.com", true },
+ { "ag6086.com", true },
+ { "ag6215.com", true },
+ { "ag6225.com", true },
+ { "ag6262g.com", true },
+ { "ag6306.com", true },
+ { "ag660.com", true },
+ { "ag686.com", true },
+ { "ag698.com", true },
+ { "ag700.com", true },
{ "ag8-game.com", true },
+ { "ag800.com", true },
+ { "ag80808.com", true },
+ { "ag80880.com", true },
+ { "ag8181g.com", true },
+ { "ag855.net", true },
+ { "ag87777.com", true },
+ { "ag88-guide.com", true },
{ "ag88.com", true },
+ { "ag880.com", true },
+ { "ag88001.com", true },
+ { "ag88008.com", true },
+ { "ag88018.com", true },
+ { "ag88028.com", true },
+ { "ag88056.com", true },
+ { "ag88058.com", true },
+ { "ag88068.com", true },
+ { "ag8808.com", true },
+ { "ag88080.com", true },
+ { "ag88081.com", true },
+ { "ag88086.com", true },
+ { "ag88089.com", true },
+ { "ag88090.com", true },
+ { "ag88094.com", true },
+ { "ag88098.com", true },
+ { "ag88110.com", true },
+ { "ag88158.com", true },
+ { "ag88220.com", true },
+ { "ag8829.com", true },
+ { "ag88309.com", true },
+ { "ag8850.com", true },
+ { "ag88518.com", true },
+ { "ag88550.com", true },
+ { "ag8856.com", true },
+ { "ag8859.com", true },
+ { "ag88618.com", true },
+ { "ag887.com", true },
+ { "ag8876.com", true },
+ { "ag88777.com", true },
+ { "ag88777.net", true },
+ { "ag8879.com", true },
+ { "ag88798.com", true },
+ { "ag88799.com", true },
+ { "ag88801.com", true },
+ { "ag88818.com", true },
+ { "ag888818.com", true },
+ { "ag889.com", true },
+ { "ag8890.com", true },
+ { "ag88905.com", true },
+ { "ag88906.com", true },
+ { "ag8891.com", true },
+ { "ag88910.com", true },
+ { "ag88988.com", true },
+ { "ag88dc22.com", true },
+ { "ag89000.com", true },
+ { "ag978.com", true },
+ { "ag998.com", true },
+ { "agaa35.com", true },
+ { "agaa41.com", true },
{ "agalliasis.ch", true },
{ "agamsecurity.ch", true },
{ "agatajanik.de", true },
@@ -2727,6 +2982,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "agemfis.com", true },
{ "agenciadeempregosdourados.com.br", true },
{ "agenciafiscal.pe", true },
+ { "agenciamdg.com.br", true },
{ "agenciamseo.com.br", true },
{ "agencyinmotion.com", true },
{ "agenda-loto.net", false },
@@ -2738,8 +2994,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "agenziaimmobiliarezeta.it", true },
{ "agenziapubblicitaria.milano.it", true },
{ "agenziapubblicitaria.roma.it", true },
- { "ageragrosirdistro.com", true },
{ "agfmedia.com", true },
+ { "agh6p.com", true },
+ { "aghayeva-edler.de", true },
{ "agia.ad", true },
{ "agiapelagia.com", true },
{ "agibank.com.br", true },
@@ -2756,13 +3013,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aging.gov", true },
{ "agingstats.gov", true },
{ "aginion.net", true },
+ { "agks008.com", true },
+ { "agks08.com", true },
+ { "agks11.com", true },
+ { "agks133.com", true },
+ { "agks19.com", true },
+ { "aglc8.com", true },
+ { "aglh.com", true },
{ "agliamici.it", true },
+ { "aglucky.com", true },
+ { "agm2525.com", true },
+ { "agm4545.com", true },
+ { "agm8383.com", true },
{ "agnesk.blog", true },
{ "agoodmind.com", true },
{ "agoravox.fr", true },
{ "agoravox.it", true },
{ "agoravox.tv", true },
- { "agotnes.com", true },
{ "agouraelectrical.com", true },
{ "agouraelectrician.com", true },
{ "agourahillselectric.com", true },
@@ -2775,34 +3042,48 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "agouralandscapelighting.com", true },
{ "agouralighting.com", true },
{ "agouraoutdoorlighting.com", true },
+ { "agowa338.de", true },
{ "agpideas.com", true },
{ "agr.asia", true },
- { "agrajag.nl", true },
{ "agrarking.com", true },
{ "agrarking.de", true },
{ "agrarshop4u.de", true },
{ "agrekov.ru", true },
{ "agreor.com", true },
{ "agrichamber.com.ua", true },
+ { "agricolo.ch", true },
{ "agriculture-schools.com", true },
{ "agridir.site", true },
{ "agrios.de", true },
- { "agro-forestry.net", true },
- { "agroline.by", true },
{ "agroxxi.ru", false },
{ "agroyard.com.ua", true },
{ "agsb.ch", true },
{ "agscinemas.com", true },
{ "agscinemasapp.com", true },
+ { "agslot.com", true },
+ { "agslot.net", true },
+ { "agslot777.com", true },
{ "aguarani.com.br", true },
{ "aguijara.com", true },
{ "agung-furniture.com", true },
+ { "agvip168.com", true },
+ { "agvip88.com", true },
+ { "agvip8800.com", true },
{ "agwa.name", true },
+ { "agwin1.com", true },
+ { "agwin2.com", true },
+ { "agwin7.com", true },
+ { "agwin777.com", true },
+ { "agwin8.com", true },
+ { "agwin9.com", true },
+ { "agworkers.com", true },
{ "agy.cl", true },
+ { "agyacht.club", true },
{ "ahawkesrealtors.com", true },
{ "ahd.com", false },
{ "ahegao.ca", true },
{ "ahero4all.org", true },
+ { "ahj.no", true },
{ "ahkubiak.ovh", false },
{ "ahlaejaba.com", true },
{ "ahlz.sk", true },
@@ -2810,7 +3091,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ahmd.io", true },
{ "ahmedabadflowermall.com", true },
{ "ahmedcharles.com", true },
- { "ahmedknowmadic.com", true },
{ "ahmerjamilkhan.org", true },
{ "ahmetozer.org", true },
{ "ahosi.com", true },
@@ -2820,15 +3100,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ahughes03.com", true },
{ "ahxxm.com", false },
{ "ai-english.jp", true },
+ { "ai-media.tv", true },
{ "ai-soft.co.jp", true },
{ "ai.gov", true },
- { "aia.de", true },
{ "aianipid.ee", true },
{ "aiasesoriainmobiliaria.com", true },
+ { "aiat.net", true },
{ "aibenzi.com", true },
{ "aibiying.com", true },
{ "aicial.co.uk", true },
- { "aicv.club", true },
{ "aid-web.ch", true },
{ "aidanapple.com", true },
{ "aidanmitchell.co.uk", true },
@@ -2839,8 +3119,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aiden.link", true },
{ "aidhan.net", true },
{ "aidi-ahmi.com", true },
+ { "aidmycomputer.com", true },
{ "aids.gov", true },
{ "aie.de", true },
+ { "aiforsocialmedia.com", true },
{ "aifriccampbell.com", true },
{ "aigcev.org", true },
{ "aigenpul.se", true },
@@ -2848,7 +3130,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aignermunich.de", true },
{ "aignermunich.jp", true },
{ "aiho.stream", true },
- { "aiicy.org", true },
{ "aiida.se", true },
{ "aiinsurance.io", true },
{ "aiinsurance.xyz", true },
@@ -2954,7 +3235,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "airclass.com", true },
{ "aircomms.com", true },
{ "airductclean.com", false },
- { "airductcleaning-fresno.com", true },
{ "airductcleaninggrandprairie.com", true },
{ "airductcleaningirving.com", true },
{ "airdur.eu", true },
@@ -2969,7 +3249,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "airikai.com", true },
{ "airlectrical-airconditioning.com.au", true },
{ "airlibre-parachutisme.com", true },
- { "airmail.cc", true },
+ { "airmail.cc", false },
{ "airmaxinflatables.com", true },
{ "airnow.gov", true },
{ "airpbx.com", true },
@@ -2977,6 +3257,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "airplayradio.nl", true },
{ "airport-charlotte.com", true },
{ "airportal.cn", true },
+ { "airportlimototoronto.com", true },
{ "airrestoration.ch", true },
{ "airship.com", true },
{ "airslate.com", true },
@@ -2988,12 +3269,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "airtoolaccessoryo.com", true },
{ "airvpn.org", true },
{ "airvuz.com", true },
- { "airware.com", true },
{ "airwaystorage.net", true },
{ "airweb.top", true },
{ "airwegobouncycastles.co.uk", true },
{ "airwolfthemes.com", true },
{ "airwrenchei.com", true },
+ { "airy.host", true },
{ "ais.fashion", true },
{ "aisance-co.com", true },
{ "aisi316l.net", true },
@@ -3003,6 +3284,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ait.com.ar", true },
{ "aiticon.com", true },
{ "aitosoftware.com", true },
+ { "aitrust.ro", true },
{ "aiutodomestico.ch", true },
{ "aivan.ai", true },
{ "aiwdirect.com", true },
@@ -3010,6 +3292,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aixvox.com", false },
{ "aizxxs.com", true },
{ "aizxxs.net", true },
+ { "aj-foster.com", true },
{ "ajarope.com", true },
{ "ajaxed.net", true },
{ "ajbouncycastles.co.uk", true },
@@ -3027,6 +3310,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ajwebsolutions.com", true },
{ "ak-varazdin.hr", true },
{ "ak-webit.de", true },
+ { "ak47-miyamoto.spdns.org", true },
{ "aka.ms", true },
{ "akachanikuji.com", true },
{ "akademeia.moe", true },
@@ -3036,19 +3320,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "akaoma.com", true },
{ "akasha.world", true },
{ "akdusekbudil.cz", true },
- { "akelius.de", false },
{ "akfoundationindia.com", true },
{ "akhealthconnection.com", true },
{ "akhomesforyou.com", true },
{ "akihito.com", true },
{ "akijo.de", true },
+ { "akinix.com", true },
{ "akiym.com", true },
{ "akj.io", true },
{ "akkbouncycastles.co.uk", true },
{ "akkeylab.com", true },
- { "akoofs.com", true },
{ "akostecki.de", true },
- { "akovana.com", true },
+ { "akoww.de", false },
{ "akoya.fi", true },
{ "akplates.org", true },
{ "akpwebdesign.com", true },
@@ -3060,8 +3343,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "akropolis-ravensburg.de", true },
{ "aksehir.bel.tr", true },
{ "akselinurmio.fi", true },
- { "akshay.in.eu.org", true },
{ "akshi.in", true },
+ { "aktca.org", true },
{ "aktin.cz", true },
{ "aktin.sk", true },
{ "aktion-vielfalt.ch", true },
@@ -3073,8 +3356,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aktuelle-uhrzeit.at", true },
{ "akuislam.com", true },
{ "akukas.com", true },
- { "akupunktur-akupunktoer.dk", true },
- { "akuseorangtraveler.com", true },
{ "akuston.eu", true },
{ "akutun.cl", true },
{ "akvorrat.at", true },
@@ -3092,13 +3373,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alainfrancois.eu", true },
{ "alainfrancois.nl", true },
{ "alainmargot.ch", true },
- { "alainodea.com", true },
{ "alainwolf.ch", true },
{ "alainwolf.net", true },
{ "alair.cn", false },
- { "alamgir.works", true },
{ "alamowellnessalliance.com", true },
{ "alanberger.me.uk", true },
+ { "alandoyle.com", true },
{ "alanhua.ng", true },
{ "alaninkenya.org", true },
{ "alaricfavier.eu", false },
@@ -3106,10 +3386,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alarmcomplete.co.uk", true },
{ "alarna.de", true },
{ "alasdelalma.com.co", true },
+ { "alaskabuylocal.org", true },
{ "alaskafishinglodges.net", true },
{ "alaskajewelry.com", true },
{ "alastairs-place.net", true },
- { "albanboye.info", true },
{ "albanesi.it", true },
{ "albaniareiser.no", true },
{ "albareport.com", true },
@@ -3124,8 +3404,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "albrocar.com", true },
{ "alca31.com", true },
{ "alcatelonetouch.us", true },
+ { "alchemy.gr", true },
{ "alchimic.ch", true },
- { "alcnutrition.com", true },
{ "alco-united.com", true },
{ "alcoholapi.com", true },
{ "alcolecapital.com", true },
@@ -3135,7 +3415,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aldomedia.com", true },
{ "aldorr.net", false },
{ "aldous-huxley.com", true },
- { "alecel.de", true },
{ "alecpap.com", true },
{ "alecpapierniak.com", true },
{ "alecrust.com", true },
@@ -3158,12 +3437,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alex97000.de", true },
{ "alexander-beck.eu", true },
{ "alexanderb.info", true },
- { "alexandercanton.com", true },
{ "alexanderneng.de", true },
{ "alexanderschimpf.de", true },
{ "alexandra-schulze.de", true },
{ "alexandrastorm.com", true },
{ "alexandre-blond.fr", true },
+ { "alexandreguarita.com.br", true },
{ "alexbaker.org", true },
{ "alexberts.ch", true },
{ "alexbogovich.com", true },
@@ -3195,22 +3474,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alexsergeyev.com", true },
{ "alexsexton.com", true },
{ "alextaffe.com", true },
- { "alexthayne.co.uk", true },
{ "alextjam.es", true },
{ "alextsang.net", true },
- { "alexvdveen.nl", true },
{ "alexvetter.de", true },
{ "alexwardweb.com", true },
{ "alexyang.me", true },
{ "alfa-tech.su", true },
+ { "alfacharlie.co", true },
{ "alfaproweb.fr", true },
+ { "alforto.nl", true },
{ "alfred-figge.de", true },
{ "alfredapp.com", true },
{ "alftrain.com", true },
- { "algawell.com", true },
{ "algeriepart.com", true },
{ "alghanimcatering.com", true },
- { "algoaware.eu", true },
{ "algoentremanos.com", true },
{ "algolia.com", true },
{ "algorithmic.ml", true },
@@ -3226,13 +3503,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alicemaywebdesign.com.au", true },
{ "alicestudio.it", true },
{ "alicetone.net", true },
+ { "aliefirfany.com", true },
{ "alieke.design", true },
{ "alien6.com", true },
{ "alienation.biz", true },
{ "alienflight.com", true },
{ "alienslab.net", true },
{ "alienstat.com", true },
- { "alienvision.com.br", true },
{ "alighierirescaldina.it", true },
{ "alignrs.com", true },
{ "alijammusic.com", false },
@@ -3248,13 +3525,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alize-theatre.ch", true },
{ "aljaspod.com", true },
{ "aljaspod.hu", true },
+ { "aljaspod.net", true },
{ "aljoschairmer.de", true },
{ "aljweb.com", true },
{ "alkacoin.net", true },
+ { "alkusin.net", true },
{ "all-connect.net", false },
{ "all-fashion-schools.com", true },
{ "all-markup-news.com", true },
{ "all4hardware4u.de", true },
+ { "all4nursesksa.net", true },
{ "all878.com", true },
{ "allaboutfunuk.com", true },
{ "allaboutswing.co.uk", true },
@@ -3279,11 +3559,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "allcapa.org", true },
{ "allcarecorrectionalpharmacy.com", true },
{ "allcarepharmacy.com", true },
+ { "allcarespecialty.pharmacy", true },
{ "allcinema.jp", true },
{ "allcleaningservice.org", true },
{ "allcleanservices.ca", true },
{ "allcloud.com", true },
{ "allcovered.nl", true },
+ { "allcoveredbyac.com", true },
{ "alldewall.de", true },
{ "alldolledupstore.com", true },
{ "alle-zonvakanties.nl", true },
@@ -3295,7 +3577,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "allerstorfer.at", true },
{ "allesisonline.nl", true },
{ "alleskomtgoed.org", true },
- { "allesovertech.nl", true },
{ "allesrocknroll.de", true },
{ "allforyou.at", true },
{ "allfundsconnect.com", true },
@@ -3304,6 +3585,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "allhard.org", true },
{ "alliance-psychiatry.com", true },
{ "alliances-globalsolutions.com", true },
+ { "allied.sh", true },
{ "alliedfrozenstorage.com", true },
{ "allinagency.com", true },
{ "allincoin.shop", true },
@@ -3329,6 +3611,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "allproptonline.com", true },
{ "allpussynow.com", true },
{ "allrad-buck.de", true },
+ { "allram.info", true },
{ "allroundpvp.net", true },
{ "allroundtechnology.com", true },
{ "allroundtechnology.nl", true },
@@ -3362,13 +3645,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "almavios.com", false },
{ "almayadeen.education", true },
{ "almenrausch-pirkhof.de", true },
+ { "almisnedrm.com", true },
{ "almorafestival.com", true },
+ { "almostobjective.com", true },
{ "almut-zielonka.de", true },
{ "aloesoluciones.com.ar", true },
{ "alohapartyevents.co.uk", true },
{ "alonas.ml", true },
{ "alonas.ovh", true },
{ "alonetone.com", true },
+ { "aloralabs.com", true },
{ "alov.blog", true },
{ "alp.od.ua", true },
{ "alpca.org", true },
@@ -3378,6 +3664,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alpengreis.ch", true },
{ "alpertron.com.ar", true },
{ "alpes-deis-tools.com", true },
+ { "alpha-ag.ru", true },
{ "alpha-force.net", false },
{ "alpha.ch", true },
{ "alpha88uat.com", true },
@@ -3394,6 +3681,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alphanodes.com", true },
{ "alphapengu.in", true },
{ "alphapoker.ru", true },
+ { "alpharail.se", true },
{ "alpharotary.com", true },
{ "alphasall.com", true },
{ "alphassl.de", true },
@@ -3430,6 +3718,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "altedirect.com", true },
{ "alteiria.fr", true },
{ "alter-news.fr", true },
+ { "alteraro.com", true },
+ { "alteraro.org", true },
{ "alterbaum.net", true },
{ "alteria.xyz", true },
{ "alternador.com.br", true },
@@ -3453,6 +3743,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "altmann-systems.de", true },
{ "altoa.cz", true },
{ "altonblom.com", true },
+ { "altonkey.com", true },
{ "altopartners.com", true },
{ "altopia.com", true },
{ "altphotos.com", true },
@@ -3467,7 +3758,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aluroof.eu", true },
{ "alvcs.com", true },
{ "alvicom.hu", true },
- { "alvin.cool", true },
{ "alvosec.com", true },
{ "alwaysdry.com.au", true },
{ "alwayslookingyourbest.com", true },
@@ -3476,7 +3766,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "alxu.ca", true },
{ "alyoung.com", true },
{ "alza.at", true },
- { "alza.co.uk", true },
{ "alza.cz", true },
{ "alza.de", true },
{ "alza.hu", true },
@@ -3490,11 +3779,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "am156.com", true },
{ "am22i6xaf1m2a5m9k.xyz", true },
{ "am2s.fr", true },
- { "am5039.com", true },
- { "am5199.com", true },
- { "am5566m.com", true },
+ { "am3.se", true },
+ { "am6118.com", true },
{ "am8213.com", true },
- { "am9588.com", true },
{ "am9d104.com", true },
{ "ama.ne.jp", true },
{ "amaderelectronics.com", true },
@@ -3533,6 +3820,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "amazingraymond.com", true },
{ "amazingraymond.com.au", true },
{ "amb.tf", true },
+ { "ambacoin.io", true },
{ "amberalert.gov", true },
{ "amberglowleisure.co.uk", true },
{ "amberlightleisure.com", true },
@@ -3591,12 +3879,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "amiciidogrescue.org.uk", true },
{ "amiciperlatesta.it", true },
{ "amifoundation.net", true },
+ { "amigucrochet.com", true },
{ "amikootours.com", true },
{ "amineptine.com", true },
{ "aminorth.com", true },
{ "aminullrouted.com", true },
{ "amionvpn.com", true },
{ "amir-heinisch.de", true },
+ { "amirasyraf.com", true },
{ "amirautos.com", false },
{ "amirmahdy.com", true },
{ "amisderodin.fr", true },
@@ -3615,7 +3905,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "amnesty.org.au", true },
{ "amnesy.fr", true },
{ "amobileway.co.uk", true },
- { "amok8.am", true },
{ "amokinio.com", true },
{ "amoozesh98.com", true },
{ "amoozesh98.ir", true },
@@ -3633,15 +3922,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "amruta.org", true },
{ "ams-web-qa.azurewebsites.net", true },
{ "ams.co.rs", true },
+ { "amsfoodhk.com", true },
{ "amsportuk.com", true },
{ "amstelland.com", true },
{ "amstelveentje.nl", true },
{ "amsterdamian.com", true },
{ "amuq.net", true },
{ "amuraimpianti.it", true },
+ { "amusa.cl", true },
{ "amvip9.com", true },
{ "amyfoundhermann.com", true },
- { "amyharrisonline.com", true },
{ "amyria.jp", true },
{ "amyyeung.com", true },
{ "amzn.rocks", true },
@@ -3672,9 +3962,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ananyoo.com", true },
{ "anarajaoui.ma", true },
{ "anarchistischegroepnijmegen.nl", false },
+ { "anarkhe.net", true },
{ "anastasia-shamara.ru", true },
{ "anatoray.com", true },
- { "ance.lv", true },
+ { "ance.lv", false },
{ "ancel.io", true },
{ "ancestramil.fr", true },
{ "anchev.net", true },
@@ -3694,10 +3985,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andel.info", false },
{ "anders.hamburg", true },
{ "andersonshatch.com", true },
+ { "andicui.net", true },
+ { "andicui.xyz", true },
{ "andiplusben.com", true },
{ "andisadhdspot.com", true },
{ "anditi.com", true },
- { "andoms.fi", true },
{ "andre-lategan.com", true },
{ "andre-otto.com", true },
{ "andrea-kiaora.de", true },
@@ -3713,7 +4005,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andreas-kluge.eu", true },
{ "andreaseracleous.com", true },
{ "andreasfeusi.ch", true },
- { "andreashecht-blog.de", true },
{ "andreasjanker.de", true },
{ "andreaskrasa.com", true },
{ "andreaslicht.nl", true },
@@ -3734,6 +4025,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andrewimeson.com", true },
{ "andrewin.ru", true },
{ "andrewlarson.org", true },
+ { "andrewmichaud.com", true },
+ { "andrewmichaud.me", true },
{ "andrewpeng.net", true },
{ "andrewprokos.com", true },
{ "andrewpucci.com", true },
@@ -3743,6 +4036,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andrewtasso.com", true },
{ "andrewtchin.com", true },
{ "andrewx.net", true },
+ { "andreypopp.com", true },
{ "andrisilberschmidt.ch", true },
{ "andro2id.com", true },
{ "andro4all.com", true },
@@ -3760,7 +4054,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "andromedacenter.com", true },
{ "androtech.xyz", true },
{ "androticsdirect.com", true },
- { "androzoom.com", true },
{ "andruvision.cz", true },
{ "andsat.org", true },
{ "andschwa.com", true },
@@ -3768,9 +4061,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anduril.eu", true },
{ "andybrett.com", true },
{ "andyc.cc", true },
- { "andycraftz.eu", true },
{ "andycrockett.io", true },
{ "andys-place.co.uk", true },
+ { "andysroom.dynu.net", true },
{ "andyt.eu", true },
{ "andzia.art.pl", true },
{ "anedot-sandbox.com", true },
@@ -3806,7 +4099,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "angristan.fr", true },
{ "angristan.xyz", true },
{ "angrut.com", true },
- { "angry.im", true },
{ "angrysnarl.com", true },
{ "angryteeth.net", true },
{ "angularjs.org", false },
@@ -3828,14 +4120,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anime1.moe", true },
{ "anime1.pw", true },
{ "animeai.com", true },
+ { "animebits.moe", true },
{ "animeclub.in.ua", true },
{ "animefever.tv", true },
{ "animefire.net", true },
{ "animefluxxx.com", true },
+ { "animehf.com", true },
{ "animeinsights.net", true },
{ "animeone.me", true },
{ "animes-portal.info", true },
- { "animesharp.com", true },
{ "animetriad.com", true },
{ "animojis.es", true },
{ "animorphsfanforum.com", true },
@@ -3843,6 +4136,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anitaalbersen.nl", true },
{ "anitaxcph.dk", true },
{ "anitube.ch", true },
+ { "anivar.net", true },
{ "aniwhen.com", true },
{ "anjocerdena.com", true },
{ "anjoola.com", true },
@@ -3863,7 +4157,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anleitung-zum-schreiben.de", true },
{ "anleitung-zum-schweissen.de", true },
{ "anleitung-zum-toepfern.de", true },
- { "anlovegeek.net", true },
{ "anna.info", true },
{ "annaenemma.nl", true },
{ "annalitvinova.pro", true },
@@ -3892,16 +4185,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anohana.org", true },
{ "anojan.com", true },
{ "anon-next.de", true },
- { "anoncom.net", true },
+ { "anoncom.net", false },
{ "anoncrypto.org", true },
{ "anoneko.com", true },
{ "anongoth.pl", true },
- { "anonoriviera.com", true },
{ "anons.fr", true },
{ "anonym-surfen.de", true },
{ "anonyme-spieler.at", true },
- { "anopan.tk", true },
- { "another.ch", true },
+ { "anora.ai", true },
{ "anotherchef.com", true },
{ "anotherfatgeek.net", true },
{ "anothervps.com", true },
@@ -3937,12 +4228,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "antennisti.milano.it", true },
{ "antennisti.roma.it", true },
{ "antfie.com", true },
+ { "anthedesign.fr", true },
{ "anthisis.tv", true },
{ "anthony-bardon.eu", true },
{ "anthony.codes", true },
{ "anthonyellis.com", true },
{ "anthonyfontanez.com", true },
{ "anthonygaidot.fr", true },
+ { "anthonyloop.com", true },
{ "anthonyvadala.me", true },
{ "anthropoid.ca", true },
{ "anti-bible.com", true },
@@ -3953,10 +4246,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "antifilter.network", true },
{ "antihype.space", true },
{ "antik-trodelmarkt.de", true },
- { "antikvariat.ru", false },
+ { "antikvariat.ru", true },
{ "antikvarius.ro", true },
{ "antilaserpriority.com", true },
{ "antimine.me", true },
+ { "antincendio.it", true },
{ "antincendio.roma.it", true },
{ "antipolygraph.org", true },
{ "antique-pedalcars.ch", true },
@@ -3973,8 +4267,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "antonellabb.eu", true },
{ "antonin.one", true },
{ "antonio-gartenbau.de", true },
+ { "antoniogatti.ro", true },
{ "antonjuulnaber.dk", true },
- { "antonok.com", true },
{ "antonuotila.fi", true },
{ "antota.lt", true },
{ "antragsgruen.de", true },
@@ -3983,6 +4277,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "antvklik.com", true },
{ "antyblokada.pl", true },
{ "anulowano.pl", true },
+ { "anunturitv.ro", true },
{ "anvartay.com", false },
{ "anvorte.com", false },
{ "anwalt.us", true },
@@ -3996,8 +4291,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "anypeer.net", true },
{ "anyquestions.govt.nz", true },
{ "anystack.xyz", true },
+ { "anyways.at", true },
{ "anzeiger.ag", true },
- { "ao-dev.com", true },
{ "ao2.it", true },
{ "aoa.gov", true },
{ "aoadatacommunity.us", true },
@@ -4029,9 +4324,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "apartment-in-rijeka.com", true },
{ "apartmentkroatien.at", true },
{ "apartmentregister.com.au", true },
+ { "apasaja.tech", true },
{ "apbank.ch", true },
{ "apbox.de", true },
- { "apc.ec", true },
{ "apcemporium.co.uk", true },
{ "apcube.com", true },
{ "apdfawl.com", true },
@@ -4089,6 +4384,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aporia.io", true },
{ "aposke.net", true },
{ "aposke.org", true },
+ { "apotheke55.de", true },
{ "apothes.is", true },
{ "app-at.work", true },
{ "app.lookout.com", true },
@@ -4096,6 +4392,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "app.simpletax.ca", true },
{ "app.yinxiang.com", false },
{ "app2get.de", true },
+ { "app666365.com", true },
{ "appagility.co.nz", true },
{ "appapi.link", true },
{ "apparelfashionwiki.com", true },
@@ -4114,6 +4411,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "appharbor.com", true },
{ "appify.org", true },
{ "appinn.com", true },
+ { "appizia.com", true },
+ { "applegun.com", true },
{ "applelife.ru", true },
{ "applemon.com", true },
{ "appleoosa.com", true },
@@ -4126,11 +4425,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "appninjas.com", true },
{ "apponic.com", true },
{ "apponline.com", true },
+ { "appraf.com", true },
{ "apprank.in", true },
{ "apprendre-le-russe-avec-ania.fr", true },
{ "apprenticeship.gov", true },
{ "apprenticeships.gov", true },
{ "approbo.com", true },
+ { "approval-workflow.com", true },
{ "approvedtreecare.com", true },
{ "apps.co", true },
{ "apps.facebook.com", false },
@@ -4152,7 +4453,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "appveyor.com", true },
{ "appzoojoo.be", true },
{ "apratimsaha.com", true },
- { "aprefix.com", true },
{ "apretatuercas.es", true },
{ "aprikaner.de", true },
{ "aprogend.com.br", true },
@@ -4167,6 +4467,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aptumseguros.mx", true },
{ "apu-board.de", true },
{ "apunkt.dk", true },
+ { "apuyou.io", true },
{ "apv-ollon.ch", true },
{ "apviz.io", true },
{ "aqarategypt.com", true },
@@ -4209,7 +4510,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aramloebmd.com", true },
{ "aranchhomes.com", true },
{ "aranycsillag.net", true },
- { "araraexpress.com.br", true },
{ "araratour.com", true },
{ "araro.ch", true },
{ "araseifudousan.com", true },
@@ -4226,8 +4526,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arcenergy.co.uk", true },
{ "archaeoadventures.com", true },
{ "archeologicatoscana.it", true },
- { "archerygearonline.com", true },
{ "archimedicx.com", true },
+ { "archina.ir", true },
{ "archined.nl", true },
{ "archit.in", true },
{ "architectryan.com", true },
@@ -4242,6 +4542,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "archlinux.org", true },
{ "arclandholdings.com.au", true },
{ "arcobalabs.ca", true },
+ { "arcovix.com", true },
{ "arcridge.ca", true },
{ "arctic.ca", true },
{ "arctic.gov", true },
@@ -4258,7 +4559,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "areaclienti.net", true },
{ "areafiftylan.nl", true },
{ "areatrend.com", true },
- { "arefidgetspinnersgay.com", true },
{ "arekatieandchrisgettingmarried.com", true },
{ "arekatieandchrisgettingmarried.today", true },
{ "arekatieandchrismarriedyet.com", true },
@@ -4269,6 +4569,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arenns.com", true },
{ "areqgaming.com", true },
{ "ares-trading.de", true },
+ { "aresanel.com", true },
{ "arethsu.se", true },
{ "arfad.ch", true },
{ "arganaderm.ch", true },
@@ -4296,9 +4597,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arise19.com", true },
{ "arisechurch.com", true },
{ "ariseconference.org.nz", true },
+ { "arisevendor.net", true },
{ "aristocrates.co", true },
{ "aritec-la.com", true },
{ "arivo.com.br", true },
+ { "ariyaoil.ir", true },
+ { "arizana.com", true },
{ "arizonabondedtitle.com", true },
{ "arjan.nl", true },
{ "arjandejong.eu", true },
@@ -4317,7 +4621,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arletalibrary.com", true },
{ "arlingtonelectric.com", true },
{ "arlingtonwine.net", true },
- { "arm-host.com", true },
{ "arm.gov", true },
{ "armadale.wa.gov.au", true },
{ "armadaquadrat.com", true },
@@ -4371,7 +4674,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arrakis.se", true },
{ "arraudi.be", true },
{ "arrazane.com.br", true },
- { "arresttracker.com", true },
{ "arrive.by", true },
{ "arrmaforum.com", true },
{ "arroba.digital", true },
@@ -4379,13 +4681,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arrow-api.nl", true },
{ "arrowfastener.com", true },
{ "arrowheadaddict.com", true },
+ { "arrowit.net", true },
{ "arrowwebprojects.nl", true },
{ "ars-online.pl", true },
{ "arschkrebs.org", true },
{ "arshell.me", true },
{ "arslankaynakmetal.com", true },
{ "arsplus.ru", false },
- { "arswb.men", true },
{ "art-auction.jp", true },
{ "art-et-culture.ch", true },
{ "art-et-tonneaux.fr", true },
@@ -4408,7 +4710,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "artecat.ch", true },
{ "artedellavetrina.it", true },
{ "artedona.com", true },
- { "arteequipamientos.com.uy", true },
{ "artefakt.es", true },
{ "artefeita.com.br", true },
{ "arteinstudio.it", true },
@@ -4423,10 +4724,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arthan.me", true },
{ "arthermitage.org", true },
{ "arthritisrheumaticdiseases.com", true },
+ { "arthur.cn", true },
{ "arthurlaw.ca", true },
{ "arthuryidi.com", true },
{ "articu.no", true },
- { "artificial.army", true },
{ "artificialgrassandlandscaping.com", true },
{ "artigianociao.jp", true },
{ "artik.cloud", true },
@@ -4463,15 +4764,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "artroscopiaperlosport.it", true },
{ "arts.gov", true },
{ "artschmidtoptical.com", true },
+ { "artsmarket.ca", true },
{ "artspac.es", true },
{ "arttel-media.ru", true },
{ "arturopinto.com.mx", true },
- { "arturrossa.de", true },
{ "arturszalak.com", true },
{ "artweby.cz", true },
{ "artworxbathrooms.com.au", true },
{ "arty.name", true },
+ { "artyengine.com", true },
{ "arubasunsetbeach.com", true },
+ { "arufu.dk", true },
{ "arunjoshua.com", true },
{ "arveron.ch", true },
{ "arvid.io", true },
@@ -4490,12 +4793,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "as200753.com", true },
{ "as200753.net", true },
{ "as44222.net", true },
+ { "as5158.com", true },
{ "as8423.net", true },
+ { "asaabforever.com", true },
{ "asadatec.de", true },
{ "asafaweb.com", true },
{ "asafilm.co", true },
+ { "asananutrition.co.uk", true },
{ "asandu.eu", true },
{ "asanger.biz", true },
+ { "asart.bg", true },
{ "asato-jewelry.com", true },
{ "asbestosthedarkarts.com", true },
{ "asbito.de", true },
@@ -4504,14 +4811,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ascensori.biz", true },
{ "ascgathering.com", true },
{ "aschismatic.com", true },
- { "ascii.moe", true },
{ "asciitable.tips", true },
{ "asciiwwdc.com", true },
{ "ascpaphilatelie.eu", true },
{ "asd.gov.au", true },
+ { "asdyx.de", true },
{ "asec01.net", true },
{ "asegem.es", true },
- { "asemanhotel.com", true },
{ "asenno.com", true },
{ "aserver.co", true },
{ "asexualitat.cat", true },
@@ -4547,7 +4853,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "asilo.roma.it", true },
{ "asinetasima.com", true },
{ "asirigbakaute.com", true },
- { "asisee.photography", true },
{ "ask.fi", true },
{ "ask.pe", true },
{ "ask1.org", true },
@@ -4563,6 +4868,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "asmdz.com", true },
{ "asmeets.nl", true },
{ "asmood.net", true },
+ { "asociacionbienestarinmobiliariobogota.com", true },
+ { "asoul.tw", true },
{ "aspargesgaarden.no", true },
{ "aspatrimoine.com", true },
{ "aspcl.ch", true },
@@ -4574,13 +4881,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aspiradorasbaratas.net", true },
{ "aspirateur-anti-pollution.fr", true },
{ "aspires.co.jp", true },
+ { "aspisdata.com", true },
{ "asprion.org", true },
{ "asproni.it", true },
- { "asr.cloud", true },
- { "asr.li", true },
- { "asr.rocks", true },
- { "asr.solar", true },
{ "asra.gr", true },
+ { "assaabloygaragedoors.ca", true },
{ "asseenfromthesidecar.org", true },
{ "assemble-together.org", true },
{ "assempsaibiza.com", true },
@@ -4588,6 +4893,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "assessoriati.com.br", true },
{ "assetbacked.capital", true },
{ "assetsec.io", true },
+ { "assetvault.co.za", true },
{ "assguidesporrentruy.ch", true },
{ "assign-it.co.uk", false },
{ "assistel.com", true },
@@ -4608,29 +4914,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "astec-informatica.com", true },
{ "astengox.com", true },
{ "astenotarili.online", true },
+ { "asticon.de", true },
{ "astral-imperium.com", true },
{ "astral.org.pl", true },
- { "astrath.net", true },
{ "astroalloys.com.au", true },
{ "astrology42.com", true },
- { "astropaykasa.org", true },
{ "astroscopy.ch", true },
+ { "astrosnail.pt.eu.org", true },
+ { "astrovandalistas.cc", true },
{ "astural.org", true },
{ "astutikhonda.com", true },
- { "asu.moe", true },
{ "asuclassfinder.com", true },
+ { "asuka.io", true },
{ "asun.co", true },
{ "asurbernardo.com", true },
{ "asurepay.cc", false },
{ "asustreiber.de", true },
{ "asvsa.ch", true },
{ "asws.nl", true },
+ { "asyikbelanja.com", true },
{ "asylbarn.no", true },
{ "asystent-dzierzawy.pl", true },
{ "at.search.yahoo.com", false },
{ "at5.nl", true },
{ "at7s.me", true },
- { "ataber.pw", true },
{ "atac.no", true },
{ "atacadocervejeiro.com.br", true },
{ "atacadodesandalias.com.br", true },
@@ -4659,10 +4966,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atelierfantazie.sk", true },
{ "atelierhsn.com", true },
{ "ateliernaruby.cz", true },
- { "ateliers-veronese-nantes.fr", true },
{ "atelierssud.ch", true },
{ "atencionbimbo.com", false },
- { "atendimentodelta.com.br", true },
{ "aterlectric.com", true },
{ "aterskapa-data.se", true },
{ "atf.gov", true },
@@ -4670,17 +4975,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atgseed.co.uk", true },
{ "atgseed.uk", true },
{ "ath0.org", false },
+ { "atheist-faq.com", true },
{ "atheist-refugees.com", true },
{ "atheistfrontier.com", true },
{ "athekiu.com", true },
{ "athena-bartholdi.com", true },
+ { "athena-garage.co.uk", true },
{ "athenacle.xyz", true },
{ "athenadynamics.com", true },
{ "athenaneuro.com", true },
{ "athlin.de", true },
{ "atigerseye.com", true },
{ "atimbertownservices.com", true },
- { "atinylittle.space", true },
{ "atishchenko.com", true },
{ "atisoft.biz", true },
{ "atisoft.com.tr", true },
@@ -4707,7 +5013,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atlascultural.com", true },
{ "atlasdev.nl", true },
{ "atlasone.us", true },
- { "atlassian.io", true },
{ "atlassignsandplaques.com", true },
{ "atletika.hu", true },
{ "atmalta.com", true },
@@ -4716,6 +5021,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atnis.com", true },
{ "ato4sound.com", true },
{ "atolm.net", true },
+ { "atom-china.org", true },
{ "atom.solutions", true },
{ "atom86.net", true },
{ "atombase.org", true },
@@ -4737,7 +5043,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "attendu.cz", true },
{ "attentigroup.com", true },
{ "attention.horse", true },
- { "attilagyorffy.com", true },
{ "attilavandervelde.nl", true },
{ "attinderdhillon.com", true },
{ "attitudes-bureaux.fr", true },
@@ -4767,6 +5072,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aubonmanger.fr", true },
{ "aubreysnider.com", true },
{ "auburnmedicalservices.com", true },
+ { "auburnperio.com", true },
{ "aucarresainteloi.com", true },
{ "aucielrose.com", true },
{ "aucklandcastles.co.uk", true },
@@ -4813,10 +5119,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aulica-conseil.com", true },
{ "aulo.in", false },
{ "aumilieudumonde.gf", true },
+ { "aunali1.com", true },
{ "auntie-eileens.com.au", true },
{ "auntmia.com", true },
{ "auplidespages.fr", true },
{ "aura7chakr.com", true },
+ { "aurbrowser.tk", true },
{ "aurelieburn.fr", true },
{ "aurelienaltarriba.fr", true },
{ "auri.ga", true },
@@ -4834,13 +5142,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ausmwoid.de", true },
{ "auspicacious.org", true },
{ "ausrecord.com", true },
- { "ausschreibungen-suedtirol.it", true },
{ "aussiefunadvisor.com", true },
{ "aussieservicedown.com", true },
+ { "aussiestoresonline.com", true },
{ "austenplumbing.com", true },
{ "austin-pearce.com", true },
{ "austin-security-cameras.com", true },
{ "austincardiac.com", true },
+ { "austinchase.com", true },
{ "austinheap.com", false },
{ "austinlockout.com", true },
{ "austintxacrepairtoday.com", true },
@@ -4849,7 +5158,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "australian.dating", true },
{ "australianairbrushedtattoos.com.au", true },
{ "australianattractions.com.au", true },
- { "australianimmigrationadvisors.com.au", true },
+ { "australianstrongmanalliance.com.au", true },
{ "australiantemporarytattoos.com", true },
{ "australiantemporarytattoos.com.au", true },
{ "australien-tipps.info", true },
@@ -4877,7 +5186,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "auto-plus.tn", true },
{ "auto-res.ru", true },
{ "auto-spurgo.com", true },
- { "auto.nl", true },
{ "auto1.fi", true },
{ "autoauctionsohio.com", true },
{ "autoauctionsvirginia.com", true },
@@ -4888,7 +5196,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "autobelle.it", true },
{ "autobourcier.com", true },
{ "autocartruck.com", true },
- { "autocobot.com", true },
{ "autocontrol.online", true },
{ "autocorner.com", true },
{ "autocrypt.org", true },
@@ -4912,15 +5219,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "automatethis.com.au", true },
{ "automatic.com", true },
{ "automationpro.me", true },
- { "automationsmarthome.com", true },
{ "automotivegroup-usedcars.be", true },
{ "automotivemechanic.org", true },
- { "automoto-tom.net", true },
{ "automy.de", true },
{ "autonewssite.com", true },
{ "autonoleggio.milano.it", true },
{ "autoosijek.com", true },
{ "autopapo.com.br", true },
+ { "autopark-ost-fichtner.de", true },
{ "autoparts.im", true },
{ "autoparts.sh", true },
{ "autoparts.wf", true },
@@ -4943,9 +5249,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "autoskolaplzen.cz", true },
{ "autoskole.hr", true },
{ "autospurghi.milano.it", true },
+ { "autospurgo.com", true },
{ "autospurgo.it", true },
{ "autospurgo.milano.it", true },
{ "autostodulky.cz", true },
+ { "autostramites.com", true },
{ "autotechschool.com", true },
{ "autoteplo.org", true },
{ "autoterminus-used.be", true },
@@ -4986,6 +5294,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "avaeon.com", true },
{ "available.direct", true },
{ "availablecastles.com", true },
+ { "avalon-island.ru", true },
{ "avalon-rpg.com", true },
{ "avanet.ch", true },
{ "avanet.com", true },
@@ -5012,6 +5321,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "averen.co.uk", true },
{ "avernis.de", true },
{ "avexon.com", true },
+ { "avi12.com", true },
{ "avia-krasnoyarsk.ru", true },
{ "avia-ufa.ru", true },
{ "aviapoisk.kz", true },
@@ -5036,9 +5346,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "avpres.net", true },
{ "avptp.org", true },
{ "avqueen.cn", false },
- { "avs-building-services.co.uk", true },
- { "avselectrical.co.uk", true },
{ "avsox.com", true },
+ { "avtecmedia.com", true },
{ "avtek.pl", true },
{ "avticket.ru", false },
{ "avtobania.pro", true },
@@ -5051,7 +5360,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "avvcorda.com", true },
{ "avvocato.bologna.it", true },
{ "aw.gov.pl", true },
- { "awakenedmind.com", true },
{ "awardplatform.com", true },
{ "awardsplatform.com", true },
{ "awaremi-tai.com", true },
@@ -5070,25 +5378,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "awksolutions.com", true },
{ "awningcanopyus.com", true },
{ "awningsaboveus.com", true },
+ { "awningsatlantaga.com", true },
{ "awomansplacenj.com", true },
{ "awplasticsurgery.com", true },
+ { "awsbs.de", true },
{ "awscloudrecipes.com", true },
{ "awsmdev.de", true },
{ "awsome-books.co.uk", true },
{ "awsumchan.org", true },
{ "awxg.com", true },
{ "ax25.org", true },
+ { "axa.de", true },
{ "axel-fischer.net", true },
{ "axel-voss.eu", true },
{ "axelname.ru", true },
{ "axelteichmann.net", true },
{ "axelvoss.eu", true },
{ "axiatancell.com", true },
- { "axiomer.com", true },
+ { "axin888.vip", true },
+ { "axiodl.com", true },
{ "axishw.com", true },
- { "axispara-bg.com", true },
{ "axolotlfarm.org", false },
+ { "axom.online", true },
{ "axon-toumpa.gr", true },
+ { "axone-computers.fr", true },
{ "axonholdingse.eu", true },
{ "axre.de", true },
{ "axrec.de", true },
@@ -5110,6 +5423,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ayumindev.net", true },
{ "ayumix3.xyz", true },
{ "ayurveda-mantry.com", true },
+ { "ayvalikgezgini.com", true },
{ "az-moga.bg", true },
{ "az.net.au", true },
{ "az.search.yahoo.com", false },
@@ -5117,12 +5431,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "azadliq.info", true },
{ "azarus.ch", true },
{ "azazy.net", false },
- { "azgfd.com", true },
{ "azh-kunden.de", true },
{ "aziende.com.ar", true },
{ "azimut.fr", true },
{ "azizvicdan.com", false },
{ "azlk-team.ru", true },
+ { "azlocalbusiness.com", true },
{ "aznews.site", true },
{ "azort.com", true },
{ "azotobacter.nl", true },
@@ -5133,7 +5447,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "aztraslochi.it", true },
{ "aztrix.me", true },
{ "aztummytuck.com", true },
- { "azu-l.com", true },
{ "azu-l.jp", true },
{ "azuki.cloud", true },
{ "azukie.com", true },
@@ -5141,17 +5454,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "azuriasky.com", true },
{ "azuriasky.net", true },
{ "azurlane.cool", true },
- { "azuxul.fr", true },
{ "azzorti.com", true },
{ "azzurrapelletterie.it", true },
{ "b-b-law.com", true },
{ "b-boom.nl", true },
{ "b-cyclesshop.ch", true },
{ "b-f-s.pl", true },
- { "b-freerobux.ga", true },
{ "b-performance.de", true },
{ "b-root-force.de", true },
{ "b-services.net", true },
+ { "b-tree.be", true },
{ "b00de.ga", true },
{ "b0k.org", true },
{ "b0rk.com", true },
@@ -5162,7 +5474,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "b2families.com.au", true },
{ "b303.me", true },
{ "b4bouncycastles.co.uk", true },
- { "b4ckbone.de", true },
{ "b4z.eu", true },
{ "b5197.co", true },
{ "b6729.co", true },
@@ -5190,6 +5501,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "b9999yy.com", true },
{ "b9999zz.com", true },
{ "b99iosapp.com", true },
+ { "ba47.net", true },
{ "baalsworld.de", true },
{ "baas-becking.biology.utah.edu", true },
{ "baazee.de", true },
@@ -5197,6 +5509,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "babai.ru", true },
{ "babeleo.com", true },
{ "babineaux.zone", true },
+ { "bablodel.biz", true },
+ { "bablodel.com", true },
{ "babsbibs.com", true },
{ "baby-bath-tub.com", true },
{ "baby-digne.com", true },
@@ -5210,10 +5524,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "babypibu.com", true },
{ "babyshoprimini.com", true },
{ "bachata.info", true },
+ { "baches-piscines.com", true },
{ "bachkhoa.net.vn", true },
{ "baciu.ch", true },
{ "backeby.eu", true },
{ "backgroundchecks.online", true },
+ { "backmitra.com", true },
+ { "backmitra.mx", true },
+ { "backmitra.nl", true },
{ "backmountaingas.com", true },
{ "backpacker.dating", true },
{ "backscattering.de", false },
@@ -5255,12 +5573,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "badoo.eu", true },
{ "badoo.us", true },
{ "badrequest.me", true },
+ { "badseacoffee.com", true },
+ { "baeckerei-wohlgemuth.de", true },
{ "baeder-luboss.de", true },
{ "baer.im", false },
{ "baer.one", false },
{ "baer.space", true },
{ "bag.bg", true },
- { "bageez.us", true },
{ "bagelcraft.net", true },
{ "bageluncle.com", true },
{ "baggy.me.uk", true },
@@ -5291,11 +5610,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "baileybae.com", true },
{ "bailonga.com", true },
{ "baitcon.com", true },
+ { "baiyu.blog", true },
+ { "baiyu.me", true },
{ "bajic.ch", true },
{ "baka-gamer.net", true },
{ "baka.org.cn", true },
{ "bakermen.com", true },
{ "bakersafari.co", true },
+ { "bakersfieldhomeoffer.com", true },
{ "bakerviewdentalcentre.com", true },
{ "bakeup.be", true },
{ "bakibal.com", true },
@@ -5303,8 +5625,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bakingstone.com", true },
{ "bakkerinjebuurt.be", true },
{ "bakongcondo.com", true },
+ { "bakxnet.com", true },
{ "balade-commune.ch", true },
{ "baladecommune.ch", true },
+ { "balafon.cloud", true },
{ "balancascia.com.br", true },
{ "balance7.jp", true },
{ "balancedbrawl.net", true },
@@ -5323,7 +5647,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "balicekzdravi.cz", true },
{ "balikonos.cz", true },
{ "balinese.dating", true },
+ { "balist.es", true },
{ "balivillassanur.com", true },
+ { "balkancrystals.com", true },
{ "balkenbushmechanical.com", true },
{ "balkonien.org", true },
{ "ball-bizarr.de", true },
@@ -5348,8 +5674,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bamahammer.com", true },
{ "bamboorelay.com", true },
{ "bamily.rocks", true },
- { "ban.moe", true },
- { "bananabandy.com", true },
{ "bananice.moe", true },
{ "bancacrs.it", true },
{ "bancobai.ao", true },
@@ -5363,24 +5687,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bandiga.it", true },
{ "bandito.re", true },
{ "banes.ch", true },
+ { "banfor.fun", true },
{ "bangdream.ga", true },
{ "bangkok-dark-night.com", true },
{ "bangkok.dating", true },
{ "bangkokcity.de", true },
+ { "banglets.com", true },
{ "bangorfederal.com", false },
{ "bangridho.com", true },
+ { "banguilacoquette.com", true },
{ "bangumi.co", true },
{ "bangyu.wang", true },
{ "banham.co.uk", false },
{ "banham.com", true },
{ "bani99.com", true },
{ "banjostringiz.com", true },
+ { "bank-tour.ru", true },
{ "bank.barclays.co.uk", true },
{ "bank.simple.com", false },
{ "banka.space", true },
{ "bankanswers.gov", true },
{ "bankbranchlocator.com", true },
- { "bankcardoffer.com", true },
{ "bankee.us", true },
{ "bankerscaddy.com", true },
{ "banketbesteld.nl", true },
@@ -5395,7 +5722,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "banksiaparkcottages.com.au", true },
{ "bankstownapartments.com.au", true },
{ "bankvanbreda.be", true },
- { "banland.net", true },
{ "banned-bitches.tk", true },
{ "bannermarquees.ie", true },
{ "bannsecurity.com", true },
@@ -5408,7 +5734,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bar-harcourt.com", true },
{ "bar.pl", true },
{ "barabrume.fr", true },
- { "baranhotel.ir", true },
{ "barankababra.hu", true },
{ "barans2239.com", true },
{ "baravalle.com", true },
@@ -5419,9 +5744,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "barbarafeldman.com", true },
{ "barbarians.com", false },
{ "barbate.fr", true },
- { "barbershop-lasvillas.com", true },
+ { "barbe-n-blues.fr", true },
+ { "barbiere.it", true },
{ "barbu.family", true },
{ "barburas.com", true },
+ { "barca-movie.jp", true },
{ "barcamp.koeln", true },
{ "barcel.com.mx", true },
{ "barcelonabagels.cat", true },
@@ -5447,14 +5774,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "barneveldcentrum.nl", true },
{ "barneydavey.com", true },
{ "barnfotografistockholm.se", true },
+ { "baroloboys.de", true },
{ "baron14.be", true },
+ { "barpodsosnami.pl", true },
{ "barracuda.com.tr", true },
{ "barrera.io", true },
{ "barriofut.com", true },
{ "barrydenicola.com", true },
{ "bars.kh.ua", true },
{ "barsashop.com.br", true },
- { "barsgroup.com", true },
{ "bart-f.com", true },
{ "bartbania.com", true },
{ "bartel.ws", true },
@@ -5464,16 +5792,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "barthonia-showroom.de", true },
{ "bartkramer.nl", true },
{ "bartlamboo.nl", true },
- { "bartolomebellido.com", true },
{ "bartula.de", true },
{ "bartzutow.xyz", true },
{ "baruch.me", true },
{ "barwave.com", true },
{ "bas.co.jp", true },
+ { "bascht.com", true },
{ "base-autonome-durable.com", true },
{ "baseballrampage.com", true },
{ "baseballsavings.com", true },
{ "baseballwarehouse.com", true },
+ { "basebyte.nl", true },
{ "baseconvert.com", true },
{ "basedonline.nl", true },
{ "baselang.com", true },
@@ -5497,6 +5826,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bassment.ph", true },
{ "bassresource.com", true },
{ "bassrider.eu", true },
+ { "bassys.com.co", true },
{ "bastelzauberwelt.de", true },
{ "bastiv.com", true },
{ "bastolino.de", true },
@@ -5556,7 +5886,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bayly.eu", true },
{ "baymard.com", true },
{ "bayportbotswana.com", true },
- { "bayportfinance.com", true },
{ "bayportghana.com", true },
{ "bayporttanzania.com", true },
{ "bayportuganda.com", true },
@@ -5579,13 +5908,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bazziergraphik.com", true },
{ "bb1718.net", true },
{ "bb5197.co", true },
+ { "bb6729.co", true },
{ "bb6729.com", true },
{ "bb6957.co", true },
{ "bb9297.co", true },
{ "bb9721.com", true },
{ "bb9728.co", true },
{ "bbalposticino.it", true },
+ { "bbc67.fr", true },
{ "bbcastles.com", true },
+ { "bbcomcdn.com", true },
{ "bbgeschenke.ch", true },
{ "bbimarketing.com", true },
{ "bbinsure.com", true },
@@ -5593,6 +5925,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bbkaforum.co.uk", true },
{ "bbkworldwide.jp", true },
{ "bbld.de", true },
+ { "bblove.me", true },
{ "bblsa.ch", true },
{ "bbnx.net", true },
{ "bbsec.xyz", true },
@@ -5602,7 +5935,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bbyouthco.com", true },
{ "bc-bd.org", false },
{ "bc-diffusion.com", true },
- { "bc-reloaded.net", true },
{ "bcansw.com.au", true },
{ "bcbulle.ch", true },
{ "bcdiesel.ca", true },
@@ -5639,6 +5971,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "be-webdesign.com", true },
{ "be.search.yahoo.com", false },
{ "be2cloud.de", true },
+ { "bea.expert", true },
{ "beacham.online", true },
{ "beachcitycastles.com", true },
{ "beachmarketing.co.uk", true },
@@ -5653,7 +5986,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beansgalore.com.au", true },
{ "bearcms.com", true },
{ "bearcosports.com.br", true },
- { "beardboys.co.za", true },
{ "bearded.sexy", true },
{ "beardic.cn", true },
{ "bearingworks.com", true },
@@ -5666,6 +5998,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beaumelcosmetiques.fr", true },
{ "beaute-eternelle.ch", true },
{ "beauty-italy.ru", true },
+ { "beauty-yan-enterprise.com", true },
{ "beauty24.de", true },
{ "beautybear.dk", true },
{ "beautybh.com", true },
@@ -5675,6 +6008,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beautykat.ru", true },
{ "beaverdamautos.com", true },
{ "beavertales.ca", true },
+ { "bebe2luxe.es", true },
+ { "bebe2luxe.fr", true },
{ "bebef.de", true },
{ "bebefofuxo.com.br", true },
{ "bebes.uno", true },
@@ -5685,6 +6020,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beckenhamcastles.co.uk", true },
{ "beckerantiques.com", true },
{ "beckyhirstconsulting.com.au", true },
+ { "becomeabricklayer.com.au", true },
+ { "becquerelgroup.com", true },
{ "becs.ch", true },
{ "becydog.cz", true },
{ "bedamedia.com", true },
@@ -5692,7 +6029,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bedandbreakfasteuropa.com", true },
{ "bedandbreakfasthoekvanholland.com", true },
{ "bedels.nl", true },
- { "bedfordnissanparts.com", true },
+ { "bednar.co", true },
{ "bedrijfsfotoreportages.nl", true },
{ "bedrocklinux.org", true },
{ "bedste10.dk", true },
@@ -5709,7 +6046,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beehive42.nl", true },
{ "beehive42.org", true },
{ "beehosting.pro", true },
- { "beekbier.nl", true },
{ "beekeeper.blog", true },
{ "beekeeper.clothing", true },
{ "beekeeper.supplies", true },
@@ -5736,6 +6072,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beeswarmrehoming.com.au", true },
{ "beeswax-orgone.com", true },
{ "beethoveninlove.com", true },
+ { "beetman.net", true },
{ "beeutifulparties.co.uk", true },
{ "beexfit.com", true },
{ "beezkneezcastles.co.uk", true },
@@ -5749,6 +6086,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "begabungsfoerderung.info", true },
{ "begbie.com", true },
{ "beginner.nl", true },
+ { "beginwp.top", true },
+ { "begravningsbyranhumana.se", true },
{ "behamepresrdce.sk", true },
{ "behamzdarma.cz", true },
{ "behead.de", true },
@@ -5764,6 +6103,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "beinad.com", true },
{ "beinad.ru", true },
{ "beisance.com", true },
+ { "beizsley.com", true },
+ { "beizsoft.co.uk", true },
+ { "beizsoft.com", true },
{ "bejarano.io", true },
{ "belacapa.com.br", true },
{ "belanglos.de", true },
@@ -5789,6 +6131,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "belge.rs", true },
{ "belgers.com", true },
{ "belgicaservices.be", true },
+ { "belgraver.eu", true },
{ "belhopro.be", true },
{ "belics.com", true },
{ "belien-tweedehandswagens.be", true },
@@ -5798,6 +6141,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bella.network", true },
{ "bellaklein.de", true },
{ "bellamodeling.com", true },
+ { "bellamy.cloud", true },
{ "bellezzasenzalimiti.it", true },
{ "bellinghamdetailandglass.com", true },
{ "belloy.ch", true },
@@ -5820,11 +6164,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ben-jarvis.co.uk", true },
{ "ben-stock.de", true },
{ "ben.ninja", true },
+ { "ben2.co.il", true },
{ "benabrams.it", true },
- { "benandsarah.life", true },
{ "benary.org", true },
{ "benbalter.com", true },
{ "benbozsa.ca", true },
+ { "benburwell.com", true },
{ "benc.io", true },
{ "benceskorka.com", true },
{ "benchling.com", true },
@@ -5859,6 +6204,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "benjamindietrich.de", true },
{ "benjaminjurke.com", true },
{ "benjaminkopelke.com", true },
+ { "benjaminmarket.com.ar", true },
{ "benjaminpiquet.fr", true },
{ "benjamins.com", true },
{ "benjaminvasel.de", true },
@@ -5870,7 +6216,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bennettshire.co.uk", true },
{ "benni1.eu", true },
{ "bennierobinson.com", true },
- { "bennink.me", true },
{ "benno.frl", true },
{ "bennygommers.nl", true },
{ "benriya.shiga.jp", true },
@@ -5880,8 +6225,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "benshoof.org", true },
{ "bensinflatables.co.uk", true },
{ "bensokol.com", true },
+ { "bensoy.com", true },
{ "benstevinson.com", true },
{ "bentertain.de", true },
+ { "bentinata.com", true },
{ "bentley.blog", true },
{ "bentley.link", true },
{ "bentongroup.co.uk", true },
@@ -5902,7 +6249,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "berati.tv", true },
{ "beratungswelt.dvag", true },
{ "berdu.id", true },
- { "bereaplumber.co.za", true },
{ "bereginy.com.ua", true },
{ "berend.tk", true },
{ "bergenhave.nl", true },
@@ -5922,14 +6268,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bergstoneware.com", true },
{ "berichtsheft-vorlage.de", true },
{ "berikod.ru", true },
- { "beringsoegaard.dk", true },
{ "berkat-luqs.ddns.net", true },
{ "berlin.dating", true },
{ "bermeitinger.eu", true },
{ "bermytraq.bm", true },
{ "berna.fr", true },
{ "bernadetteanderes.ch", true },
- { "bernama.com.my", true },
{ "bernar.do", true },
{ "bernardcontainers.be", true },
{ "bernarddickens.com", true },
@@ -5950,11 +6294,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bernhardluginbuehl.com", true },
{ "bernieware.de", true },
{ "bernyweb.net", true },
- { "berr.yt", true },
{ "berra.se", true },
- { "berruezoabogados.com", true },
{ "berrus.com", true },
- { "berry.cat", true },
{ "berrypay.com", true },
{ "bersierservices.ch", true },
{ "bersotavocats.fr", true },
@@ -6007,9 +6348,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bestbrakes.com", true },
{ "bestbrokerindia.com", true },
{ "bestbyte.com.br", true },
+ { "bestcarscyprus.com", true },
{ "bestdating.today", true },
{ "bestdownloadscenter.com", true },
- { "bestelectricnd.com", true },
{ "bestessaycheap.com", true },
{ "bestessayhelp.com", true },
{ "bestfotostudio.com", true },
@@ -6021,7 +6362,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bestjumptrampolines.be", true },
{ "bestkenmoredentists.com", true },
{ "bestladyshaver.co.uk", true },
- { "bestlooperpedalsguide.com", true },
{ "bestmotherfucking.website", true },
{ "bestoffert.club", true },
{ "bestoliveoils.com", true },
@@ -6029,13 +6369,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bestpig.fr", true },
{ "bestplumbing.com", true },
{ "bestpractice.domains", true },
+ { "bestproductsaudit.com", true },
{ "bestschools.io", true },
- { "bestseries.tv", true },
{ "bestshoesmix.com", true },
+ { "bestsingingbowls.com", true },
{ "bestwarezone.com", true },
{ "bestwebsite.gallery", true },
{ "betaal.my", true },
- { "betacavi.com", true },
{ "betaclouds.net", true },
{ "betaprofiles.com", true },
{ "betaworx.de", true },
@@ -6054,6 +6394,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "betseybuckheit.com", true },
{ "betsharpangles.com", true },
{ "betshoot.com", true },
+ { "betsyshilling.com", true },
{ "bett1.de", true },
{ "bettaline.com.au", true },
{ "better-bounce.co.uk", true },
@@ -6065,6 +6406,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "betterna.me", true },
{ "betterscience.org", true },
{ "bettersecurity.co", true },
+ { "bettersocialmedia.co.uk", true },
{ "bettertechinterviews.com", true },
{ "bettertest.it", true },
{ "bettertime.de", true },
@@ -6076,6 +6418,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bettingsider.dk", true },
{ "bettolinokitchen.com", true },
{ "bettrlifeapp.com", true },
+ { "bettyweber.com", true },
{ "betulashop.ch", true },
{ "betwalker.com", true },
{ "beulen.email", true },
@@ -6091,7 +6434,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bevinco2020.com", true },
{ "bevinsco.org", true },
{ "bevnut.com", true },
- { "bewegigsruum.ch", true },
{ "bewegungsfluss.com", false },
{ "bewerbungsfibel.de", true },
{ "bewertet.de", true },
@@ -6116,14 +6458,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bezemkast.nl", true },
{ "bezlampowe.pl", true },
{ "bezlepkovamatka.cz", true },
- { "bezmlska.cz", false },
{ "bezpecnostsiti.cf", true },
{ "bezposrednio.net.pl", true },
{ "bezzia.com", true },
{ "bf5.ru", true },
- { "bf7088.com", true },
- { "bf7877.com", true },
{ "bfam.tv", true },
+ { "bfas237blog.com", true },
{ "bfcgermania88.de", true },
{ "bfem.gov", true },
{ "bfh.science", true },
@@ -6154,8 +6494,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bhtelecom.ba", true },
{ "bhuntr.com", true },
{ "bhxch.moe", true },
+ { "bhyn.ca", true },
{ "bi.search.yahoo.com", false },
- { "bi1gif.radio", true },
{ "bi8cku.club", true },
{ "bi8cku.tech", true },
{ "biaggeo.com", true },
@@ -6165,6 +6505,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biathloncup.ru", true },
{ "bibica.net", true },
{ "bible-maroc.com", true },
+ { "biblesignposts.com", true },
{ "bibleversesfordailyliving.com", true },
{ "bibliaon.com", true },
{ "biblioblog.fr", true },
@@ -6172,6 +6513,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biblionaut.net", true },
{ "biblioporn.com", true },
{ "bibliotecadeseguranca.com.br", true },
+ { "bibliotekarien.se", true },
{ "bibliotherapie-existentiale.com", true },
{ "biboumail.fr", true },
{ "bibuch.com", true },
@@ -6189,6 +6531,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bidu.com.br", true },
{ "bie.edu", false },
{ "bie08.com", true },
+ { "bie35.com", true },
{ "bie79.com", true },
{ "biec.moe", true },
{ "biegal.ski", true },
@@ -6201,7 +6544,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bienoubien.org", true },
{ "bienstar.tv", true },
{ "bierbaumer.net", true },
- { "biergaizi.info", true },
{ "bierwebshop.be", true },
{ "bieser.ch", true },
{ "biester.pro", true },
@@ -6209,7 +6551,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "big-andy.co.uk", true },
{ "big-bounce.co.uk", true },
{ "big-fluglaerm-hamburg.de", true },
+ { "big-tits-video.ru", true },
{ "bigadcompany.com", true },
+ { "bigbank.ee", true },
{ "bigbendguide.com", true },
{ "bigbluedoor.net", true },
{ "bigboris.tk", true },
@@ -6236,7 +6580,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biilo.com", true },
{ "bijancompany.com", true },
{ "bijouxcherie.com", true },
- { "biju-neko.jp", true },
{ "bijuteriicualint.ro", true },
{ "bike-kurse.ch", true },
{ "bike-shack.com", true },
@@ -6248,6 +6591,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bikiniseli.com", true },
{ "bikkelbroeders.com", false },
{ "bikkelbroeders.nl", false },
+ { "bilalic.com", true },
{ "bilalkilic.de", true },
{ "bilbayt.com", true },
{ "bilder-designs.de", true },
@@ -6260,7 +6604,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bilibili.link", true },
{ "bilibili.red", true },
{ "bilibili.sh", true },
- { "bilimoe.com", true },
{ "bilke.org", true },
{ "billaud.eu.org", true },
{ "billfazz.com", true },
@@ -6320,6 +6663,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bimibrocoli.fr", true },
{ "bimibrokkoli.de", true },
{ "bimmerlabs.com", true },
+ { "bin92.com", true },
{ "bin95.com", true },
{ "bina.az", true },
{ "binans.com", true },
@@ -6338,11 +6682,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bing.com", true },
{ "bingobank.org", true },
{ "binhex.net", true },
- { "binhp.com", true },
{ "biniou.net", true },
{ "binkconsulting.be", true },
{ "binnenmeer.de", true },
{ "binsp.net", true },
+ { "bintach.com", true },
{ "binti.com", true },
{ "bintooshoots.com", true },
{ "bio-disinfestazione.it", true },
@@ -6371,6 +6715,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biohappiness.com", true },
{ "bioharmony.ca", true },
{ "biointelligence-explosion.com", true },
+ { "bioknowme.com", true },
{ "bioleev.sklep.pl", true },
{ "bioligo.ch", true },
{ "biologis.ch", true },
@@ -6387,6 +6732,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biopsychiatry.com", true },
{ "bioresonanz-ibiza.com", true },
{ "biosafe.ch", true },
+ { "biosalts.it", true },
{ "biosbits.org", true },
{ "bioshine.com.sg", true },
{ "biosignalanalytics.com", true },
@@ -6394,7 +6740,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biospw.com", true },
{ "biotechware.com", true },
{ "biotin.ch", true },
- { "bipyo.com", true },
{ "birbaumer.li", true },
{ "birchbarkfurniture.com", true },
{ "birchbarkfurniture.fr", true },
@@ -6412,11 +6757,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "birthright.website", true },
{ "birzan.org", true },
{ "bisa-sis.net", true },
- { "bischoff-mathey.family", true },
{ "biscuitcute.com.br", true },
{ "biser-borisov.eu", true },
{ "biser.online", true },
{ "bishopscourt-hawarden.co.uk", true },
+ { "bishoptx.com", true },
{ "bismarck-tb.de", true },
{ "biso.ga", true },
{ "bison.co", true },
@@ -6444,6 +6789,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bitchigo.com", true },
{ "bitcoin-india.net", true },
{ "bitcoin-india.org", true },
+ { "bitcoin-wizards.com", true },
{ "bitcoin.asia", true },
{ "bitcoin.ch", true },
{ "bitcoin.co.nz", true },
@@ -6455,12 +6801,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bitcoinbitcoin.com", true },
{ "bitcoincasinos.pro", true },
{ "bitcoincore.org", true },
+ { "bitcoiner-or-shitcoiner.com", true },
{ "bitcoinfees.net", true },
{ "bitcoinindia.com", true },
{ "bitcoinkarlsruhe.de", true },
{ "bitcoinrealestate.com.au", true },
{ "bitcointhefts.com", true },
- { "bitcointrade.com.br", true },
{ "bitcoinx.ro", true },
{ "bitcork.io", true },
{ "bitcqr.io", true },
@@ -6487,6 +6833,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bitmessage.ch", true },
{ "bitmidi.com", true },
{ "bitminter.com", true },
+ { "bitmoe.com", true },
{ "bitok.com", true },
{ "bitpoll.de", true },
{ "bitpoll.org", true },
@@ -6511,7 +6858,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bitvest.io", true },
{ "bitwarden.com", true },
{ "bitwolk.nl", true },
- { "bitxel.com.co", true },
+ { "bitxel.com.co", false },
{ "biupay.com.br", true },
{ "biurokarier.edu.pl", true },
{ "bixbydevelopers.com", true },
@@ -6521,6 +6868,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "biz4x.com", true },
{ "bizbudding.com", true },
{ "bizcash.co.za", true },
+ { "bizeau.ch", true },
{ "biznesonline.info", true },
{ "bizniskatalog.mk", true },
{ "biznpro.ru", true },
@@ -6533,7 +6881,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bizzdesign.com", true },
{ "bjarnerest.de", true },
{ "bjmgeek.science", true },
- { "bjmun.cn", true },
{ "bjoe2k4.de", true },
{ "bjoernengel.de", true },
{ "bjoernengel.eu", true },
@@ -6560,6 +6907,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bl4ckb0x.net", true },
{ "bl4ckb0x.org", true },
{ "blaauwgeers.pro", true },
+ { "blaauwgeers.travel", true },
{ "blabber.im", true },
{ "blablacar.co.uk", true },
{ "blablacar.com", true },
@@ -6615,14 +6963,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blackmonday.gr", true },
{ "blacknetwork.eu", true },
{ "blacknova.io", true },
- { "blackonion.com", true },
{ "blackpapermoon.de", true },
- { "blackpayment.ru", true },
{ "blackphoenix.de", true },
{ "blackroadphotography.de", true },
{ "blackroot.eu", true },
+ { "blackrose-garden.herokuapp.com", true },
{ "blackscytheconsulting.com", true },
{ "blackseals.net", true },
+ { "blackstrapsecurity.com", true },
{ "blacktown.eu", true },
{ "blackyau.cc", true },
{ "blackys-chamber.de", true },
@@ -6638,8 +6986,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blastair.fr", true },
{ "blastentertainment.com.au", true },
{ "blastersklan.com", true },
- { "blastzoneentertainments.co.uk", true },
{ "blaudev.es", true },
+ { "blauerhunger.de", true },
+ { "blaumedia.com", true },
+ { "blauwwit.be", true },
{ "blayne.me", true },
{ "blayneallan.com", true },
{ "blazing.cz", true },
@@ -6652,8 +7002,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blechinger.io", true },
{ "blechschmidt.saarland", true },
{ "blenderinsider.com", true },
+ { "blenderman.org", true },
{ "blenderrecipereviews.com", true },
- { "blending.kr", true },
{ "blendle.com", true },
{ "blendle.nl", true },
{ "blendr.com", true },
@@ -6667,6 +7017,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blidz.com", true },
{ "blieque.co.uk", true },
{ "bliesekow.net", true },
+ { "blijfbij.com", true },
+ { "blijfbij.eu", true },
{ "blikk.no", true },
{ "blikund.swedbank.se", true },
{ "blinder.com.co", true },
@@ -6705,9 +7057,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blockedyourcar.com", true },
{ "blockedyourcar.net", true },
{ "blockedyourcar.org", true },
- { "blockified.io", true },
{ "blockmetry.com", true },
- { "blocknodes.live", true },
{ "blockstream.com", true },
{ "blockxit.de", true },
{ "bloemenbesteld.nl", true },
@@ -6721,7 +7071,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blogarts.net", true },
{ "blogbooker.com", true },
{ "blogcast.com", true },
- { "blogconcours.net", true },
+ { "blogdefarmacia.com", true },
{ "blogdelosjuguetes.com", true },
{ "blogdieconomia.it", true },
{ "blogdimoda.com", true },
@@ -6729,20 +7079,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blogexpert.ca", true },
{ "bloggermumofthreeboys.com", true },
{ "blogging-life.com", true },
+ { "bloggytalky.com", true },
{ "bloginbeeld.nl", true },
{ "blogit.fi", true },
+ { "blogkuliah.com", true },
{ "bloglines.co.za", true },
{ "bloglogistics.com", true },
{ "bloglyric.com", true },
{ "blognr.com", true },
{ "blogom.at", true },
- { "blogpentrusuflet.ro", true },
+ { "blogpentrusuflet.ro", false },
{ "blogreen.org", true },
{ "blogsdna.com", true },
{ "blogthedayaway.com", true },
{ "blogtroterzy.pl", true },
{ "blok56.nl", true },
- { "blokmy.com", true },
+ { "blomberg.name", true },
{ "bloodhunt.pl", true },
{ "bloodsports.org", true },
{ "bloody.pw", true },
@@ -6793,6 +7145,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "blueskycoverage.com", true },
{ "blueskydigitalstrategy.com", true },
{ "bluestardiabetes.com", true },
+ { "bluestarroofing.com", true },
{ "bluesuncamping.com", true },
{ "bluesunhotels.com", true },
{ "blueswandaily.com", true },
@@ -6804,8 +7157,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bluex.net", true },
{ "bluex.org", true },
{ "blueyed.eu", true },
- { "bluffplumber.co.za", true },
- { "blui.cf", true },
{ "blui.xyz", true },
{ "bluiandaj.ml", true },
{ "bluicraft.tk", true },
@@ -6840,7 +7191,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bnin.org", true },
{ "bnjscastles.co.uk", true },
{ "bnstree.com", true },
- { "bnty.net", true },
{ "bnusd.cn", true },
{ "bnzblowermotors.com", true },
{ "bo4tracker.com", true },
@@ -6856,17 +7206,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bobazar.com", true },
{ "bobbyhensley.com", true },
{ "bobcopeland.com", true },
- { "bobep.ru", true },
{ "bobkidbob.com", true },
{ "bobkoetsier.nl", true },
{ "bobnbouncedublin.ie", true },
{ "bobobox.net", true },
+ { "boboolo.com", false },
{ "bobstronomie.fr", true },
{ "bocamo.it", true },
{ "boccabell.com", true },
{ "bochantinobgyn.com", true },
{ "bochs.info", true },
{ "bockenauer.at", true },
+ { "bocloud.eu", true },
{ "bocreation.fr", true },
{ "bodemplaten4x4.nl", true },
{ "bodhi.fedoraproject.org", true },
@@ -6881,7 +7232,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bodyshopnews.net", true },
{ "bodyworksautorebuild.com", true },
{ "boeddhashop.nl", true },
- { "boekenlegger.nl", true },
{ "boem.gov", true },
{ "boernecancerfonden.dk", true },
{ "bogdancornianu.com", true },
@@ -6926,7 +7276,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bonami.ro", true },
{ "bonami.sk", true },
{ "bonawehouse.co.uk", true },
- { "bonbonmania.com", true },
+ { "bonbonmania.com", false },
{ "bondagefetishstore.com", true },
{ "bondarenko.dn.ua", true },
{ "bondingwithbaby.ca", true },
@@ -6936,6 +7286,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "boneko.de", true },
{ "bonesserver.com", true },
{ "bonfi.net", true },
+ { "bongbabyhouse.com", true },
{ "bongbabyhouse.vn", true },
{ "bongloy.com", true },
{ "bongo.cat", true },
@@ -6997,7 +7348,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "boosinflatablegames.co.uk", true },
{ "boosman.nu", true },
{ "boosmanpoolservice.com", true },
- { "boost.fyi", true },
{ "boost.ink", true },
{ "boothlabs.me", true },
{ "bootjp.me", false },
@@ -7010,9 +7360,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bordadoenpedreria.com", true },
{ "bordes.me", true },
{ "boredhackers.com", true },
+ { "boren.shop", true },
{ "boreo.si", true },
+ { "boresmail.ru", true },
{ "borg.cloud", true },
- { "borgodigatteraia.it", true },
{ "boringsmith.com", true },
{ "borisenko.by", true },
{ "borja.io", true },
@@ -7029,7 +7380,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "boscoyacht.ch", true },
{ "boskeopolis-stories.com", true },
{ "boss.az", true },
- { "bostadsportal.se", true },
{ "bostonadvisors.com", true },
{ "bostonaoii.com", true },
{ "bosufitness.cz", true },
@@ -7040,13 +7390,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "botguard.net", true },
{ "bothellwaygarage.net", true },
{ "botmastery.com", true },
+ { "botnam.com", true },
{ "botoes-primor.pt", true },
{ "botox.bz", true },
{ "botserver.de", true },
{ "bottaerisposta.net", true },
{ "bottineauneighborhood.org", true },
{ "bottinquebec.com", true },
- { "bottke.berlin", true },
{ "bottledstories.de", true },
{ "bou.cloud", true },
{ "bou.ke", true },
@@ -7110,14 +7460,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bouncingbuddiesleicester.co.uk", true },
{ "bouncinghigher.co.uk", true },
{ "bouncingscotland.com", true },
- { "bouncourseplanner.net", true },
{ "bouncy-castles-surrey.co.uk", true },
{ "bouncybaileys.co.uk", true },
{ "bouncyball.eu", true },
{ "bouncyballs.org", true },
- { "bouncyballscastles.co.uk", true },
{ "bouncybouncyboocastlehire.co.uk", true },
- { "bouncycastle.net.au", true },
{ "bouncycastlehire-norwich.com", true },
{ "bouncycastlehire-sheffield.co.uk", true },
{ "bouncycastlehire.co.uk", true },
@@ -7162,15 +7509,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "boundarybrighton.com", true },
{ "bountyfactory.io", true },
{ "bourasse.fr", true },
- { "bourdon.fr.eu.org", true },
{ "bourgeoisdoorco.com", true },
{ "bournefun.co.uk", true },
- { "bourqu.in", true },
{ "bourseauxservices.com", true },
{ "boutiquedecanetas.com.br", true },
{ "boutiqueguenaelleverdin.com", true },
{ "boutoncoupdepoing.fr", true },
{ "bouw.live", true },
+ { "bouwplaatscheckin.nl", true },
{ "bouzouada.com", true },
{ "bouzouks.net", true },
{ "bovenwebdesign.nl", true },
@@ -7192,15 +7538,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bowtie.com.hk", true },
{ "boxcritters.wiki", true },
{ "boxcryptor.com", false },
+ { "boxlink.de", true },
{ "boxpeg.com", true },
{ "boxpirates.to", true },
{ "boxspringbett-160x200.de", true },
{ "boxvergelijker.nl", true },
+ { "boyerassoc.com", true },
{ "boyfriendcookbook.com", true },
{ "boyhost.cn", true },
{ "boyinglanguage.com", true },
{ "boypoint.de", true },
{ "boysontech.com", true },
+ { "boz.nl", false },
{ "bozdoz.com", true },
{ "bozit.com.au", true },
{ "bozosbouncycastles.co.uk", true },
@@ -7212,7 +7561,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bpreguica.com.br", true },
{ "bps.vc", true },
{ "bpvboekje.nl", true },
- { "bqp.io", true },
+ { "bpvr.ddns.net", true },
+ { "bqp.io", false },
{ "bqr.ch", true },
{ "bqtoolbox.com", true },
{ "br.search.yahoo.com", false },
@@ -7232,13 +7582,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "braeunlich-gmbh.com", true },
{ "brage.info", true },
{ "brahmins.com", true },
- { "brahmstaedt.de", true },
{ "braiampeguero.xyz", true },
{ "brailsford.xyz", true },
{ "brain-force.ch", true },
{ "brainball.fr", true },
{ "brainfork.org", true },
- { "brainhub.nl", true },
{ "brainserve.ch", true },
{ "brainserve.com", true },
{ "brainserve.swiss", true },
@@ -7251,7 +7599,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brainyapp.net", true },
{ "braithwaites.ltd", true },
{ "brakemanpro.com", true },
- { "brakpanplumber24-7.co.za", true },
+ { "brakstad.org", true },
{ "bralnik.com", true },
{ "brambogaerts.nl", true },
{ "bramhallsamusements.com", true },
@@ -7282,12 +7630,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brandweeruitgeest.nl", true },
{ "brank.as", true },
{ "branno.org", true },
+ { "bransive.com.au", true },
{ "branw.xyz", false },
{ "brasal.ma", true },
{ "brasalcosmetics.com", true },
{ "brashear.me", true },
{ "brasilbombas.com.br", true },
- { "brasildxn.com.br", true },
{ "brasileiro.ca", true },
{ "brasserie-mino.fr", true },
{ "brasspipedreams.org", true },
@@ -7336,16 +7684,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bredvid.no", true },
{ "breest.net", true },
{ "breeyn.com", true },
+ { "breezeairportparking.com.au", true },
{ "brefy.com", true },
{ "brege.org", true },
- { "breitband.bz.it", true },
{ "breizh.me", true },
{ "brejoc.com", true },
{ "brelahotelberulia.com", true },
{ "bremen-restaurants.de", true },
+ { "bremensaki.com", true },
{ "bremerfriedensforum.de", true },
- { "brenbarnes.com", true },
- { "brenbarnes.com.au", true },
{ "brendanbatliner.com", true },
{ "brentacampbell.com", true },
{ "brentnewbury.com", true },
@@ -7354,6 +7701,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brettabel.com", true },
{ "brettcornwall.com", true },
{ "brettlawyer.com", true },
+ { "brettpostin.com", true },
{ "bretzner.fr", true },
{ "brevboxar.se", true },
{ "brewercollinsleadership.com", true },
@@ -7367,8 +7715,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brianalawayconsulting.com", true },
{ "briandwells.com", true },
{ "brianfoshee.com", true },
+ { "briangosnell.com", true },
{ "brianjohnson.co.za", true },
{ "brianlanders.us", true },
+ { "brianpagan.net", true },
{ "brianroadifer.com", true },
{ "briansemrau.com", true },
{ "briansmith.org", true },
@@ -7387,6 +7737,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bridgeglobalmarketing.com", true },
{ "bridgehomeloans.com", true },
{ "bridgement.com", true },
+ { "bridgevest.com", false },
{ "bridgingdirectory.com", true },
{ "bridholm.se", true },
{ "bridltaceng.com", true },
@@ -7440,6 +7791,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "broadbandnd.com", true },
{ "broadleft.org", true },
{ "broadsheet.com.au", true },
+ { "broadyexpress.com.au", true },
{ "brockmeyer.net", true },
{ "brockmeyer.org", true },
{ "brodowski.cc", true },
@@ -7461,7 +7813,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brookworth.com", true },
{ "brossmanit.com", true },
{ "brouillard.ch", true },
- { "brouskat.be", true },
{ "brouwerijdeblauweijsbeer.nl", true },
{ "brovelton.com", true },
{ "brownfieldstsc.org", true },
@@ -7487,7 +7838,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "brudkistan.nu", true },
{ "brudkistan.se", true },
{ "brueser-gmbh.de", true },
- { "brunetderochebrune.com", true },
{ "brunick.de", false },
{ "brunn.email", true },
{ "brunner.ninja", true },
@@ -7529,11 +7879,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bserved.de", true },
{ "bsg.ro", true },
{ "bsgamanet.ro", true },
- { "bsgcredit.ro", true },
{ "bsidesf.com", true },
{ "bsidesf.org", true },
{ "bsidessf.com", true },
{ "bsimerch.com", true },
+ { "bsimyanmar.com", true },
{ "bslim-e-boutique.com", true },
{ "bsmn.ga", true },
{ "bsmomo-api.com", true },
@@ -7550,7 +7900,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "btcarmory.com", true },
{ "btcbolsa.com", true },
{ "btcpop.co", true },
- { "btine.tk", true },
{ "btio.pw", false },
{ "btmstore.com.br", true },
{ "btnissanparts.com", true },
@@ -7562,31 +7911,70 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "btt-39.com", true },
{ "btt-59.com", true },
{ "btt0303.com", true },
+ { "btt0707.com", true },
+ { "btt0707a.com", true },
+ { "btt1111.com", true },
{ "btt1212.com", true },
+ { "btt1313.com", true },
{ "btt138g.com", true },
{ "btt2020.com", true },
{ "btt2121.com", true },
{ "btt213.com", true },
- { "btt217.com", true },
{ "btt219.com", true },
{ "btt225.com", true },
{ "btt256.com", true },
+ { "btt263.com", true },
+ { "btt268.com", true },
+ { "btt269g.com", true },
+ { "btt301.com", true },
+ { "btt302.com", true },
+ { "btt303.com", true },
+ { "btt305.com", true },
+ { "btt306.com", true },
+ { "btt307.com", true },
+ { "btt308.com", true },
+ { "btt309.com", true },
+ { "btt312.com", true },
+ { "btt317.com", true },
+ { "btt319.com", true },
+ { "btt3311.com", true },
+ { "btt332.com", true },
+ { "btt350.com", true },
+ { "btt351.com", true },
+ { "btt352.com", true },
+ { "btt353.com", true },
{ "btt3535.com", true },
+ { "btt355.com", true },
+ { "btt358.com", true },
+ { "btt359.com", true },
+ { "btt361.com", true },
+ { "btt362.com", true },
+ { "btt368.com", true },
+ { "btt371.com", true },
+ { "btt372.com", true },
+ { "btt373.com", true },
+ { "btt375.com", true },
+ { "btt376.com", true },
+ { "btt378.com", true },
+ { "btt379.com", true },
+ { "btt381.com", true },
{ "btt381g.com", true },
{ "btt529g.com", true },
+ { "btt645g.com", true },
{ "btt686.com", true },
- { "btt776.com", true },
+ { "btt775.com", true },
{ "btt8.me", true },
+ { "btt818g.com", true },
{ "btt88.net", true },
{ "btt88818.com", true },
{ "btt891.com", true },
{ "btt8989a.com", true },
{ "btt907.com", true },
{ "btt9090.com", true },
- { "btt918.cn", true },
+ { "btt932g.com", true },
{ "btt945g.com", true },
- { "btt9797.com", true },
{ "btt9898.com", true },
+ { "btt996.com", true },
{ "btta13.com", true },
{ "btta15.com", true },
{ "btta27.com", true },
@@ -7596,6 +7984,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "btth.tv", true },
{ "bttna.com", true },
{ "bttorj45.com", true },
+ { "bttt111.com", true },
{ "bttt222.com", true },
{ "bttt333.com", true },
{ "bttt999.com", true },
@@ -7608,7 +7997,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bubblinghottubs.co.uk", true },
{ "bubblybouncers.co.uk", true },
{ "bubulazi.com", false },
- { "bubulazy.com", false },
+ { "bubulazy.com", true },
{ "bucek.cz", true },
{ "buch-angucken.de", true },
{ "buchhandlungkilgus.de", true },
@@ -7621,7 +8010,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "buddhismus.net", true },
{ "buddie5.com", true },
{ "buddlycrafts.com", true },
+ { "buddy-acceptance-authentication-frontend.azurewebsites.net", true },
+ { "buddy-acceptance-backoffice-frontend.azurewebsites.net", true },
+ { "buddy-acceptance-web-frontend.azurewebsites.net", true },
+ { "buddy-development-backoffice-webapp.azurewebsites.net", true },
{ "buddycompany.net", true },
+ { "buddytop.com", true },
{ "buddyworks.net", true },
{ "budeanu.com", true },
{ "budger.nl", true },
@@ -7646,12 +8040,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "buettgens.net", true },
{ "buffaloautomation.com", true },
{ "buffaloturf.com.au", true },
+ { "buffashe.com", false },
{ "bug.blue", true },
{ "bug.ee", true },
{ "bugcrowd.com", true },
{ "bugginslab.co.uk", true },
+ { "buggmedia.com", true },
+ { "buggshop.com", true },
{ "bugs.chromium.org", true },
{ "bugsmashed.com", true },
+ { "bugu.org", true },
{ "bugwie.com", true },
{ "bugzil.la", true },
{ "bugzilla.mozilla.org", true },
@@ -7659,8 +8057,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "buildbox.io", true },
{ "buildbytes.com", true },
{ "buildhoscaletraingi.com", true },
- { "buildiffuse.com", true },
- { "building-cost-estimators.com", true },
+ { "buildingclouds.de", true },
{ "buildingcostestimators.co.uk", true },
{ "builditfl.com", false },
{ "builditsolutions.net", true },
@@ -7682,7 +8079,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bulgarianwine.com", true },
{ "bulk-pagerank-checker.com", true },
{ "bulkcandystore.com", true },
- { "bulkowespacerkowo.nl", true },
{ "bulktrade.de", true },
{ "bulktshirtsjohannesburg.co.za", true },
{ "bulkwholesalesweets.co.uk", true },
@@ -7690,13 +8086,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bulldoghire.co.uk", true },
{ "bulledair-savons.ch", true },
{ "bullettags.com", true },
- { "bullpendaily.com", true },
{ "bullshitmail.nl", true },
{ "bullterrier.nu", true },
{ "bulwarkcrypto.com", true },
{ "bulwarkhost.com", true },
{ "bund-von-theramore.de", true },
{ "bundespolizei-forum.de", true },
+ { "bundito.com", true },
{ "bungee.pw", true },
{ "bungee.systems", true },
{ "bungeetaco.com", true },
@@ -7711,6 +8107,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bunzy.ca", true },
{ "buonventosbt.eu", true },
{ "bupropion.com", true },
+ { "buradangonder.com", true },
{ "burakogun.com", true },
{ "burakogun.com.tr", true },
{ "burakogun.net", true },
@@ -7748,7 +8145,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "burzcast.ro", true },
{ "burzmali.com", true },
{ "burzmedia.com", true },
- { "burzstudios.com", true },
{ "burzum.ch", true },
{ "buscandolosmejores.com", true },
{ "buscasimple.com", true },
@@ -7759,7 +8155,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "business.facebook.com", false },
{ "business.gov", true },
{ "businesscentermarin.ch", true },
- { "businesscircle.com.my", true },
{ "businessesdirectory.eu", true },
{ "businessfactors.de", true },
{ "businessloanconnection.org", false },
@@ -7776,15 +8171,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bustup-tips.com", true },
{ "busuttil.org.uk", true },
{ "butarque.es", true },
- { "buthowdoyoubuygroceries.com", true },
{ "butikvip.ru", true },
- { "butlercountyhistory.org", true },
{ "butlerfm.dk", true },
{ "butter.horse", true },
{ "butteramotors.com", true },
+ { "butterflycare.co", true },
+ { "buttgun-tattoo.de", true },
{ "buttonline.ch", true },
- { "buttonrun.com", true },
{ "butts-are.cool", true },
+ { "butz.cloud", true },
{ "butzies.ddnss.org", true },
{ "buurtgenotencollectief.nl", true },
{ "buurtpreventiefraneker.nl", true },
@@ -7792,36 +8187,33 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "buy-out.jp", true },
{ "buy2dollars.com", true },
{ "buyamerican.gov", true },
- { "buybike.shop", true },
- { "buycarpet.shop", true },
+ { "buybutton.store", true },
{ "buycbd.store", true },
+ { "buycccam.tv", true },
{ "buycoins.top", true },
- { "buycook.shop", true },
{ "buydissertations.com", true },
{ "buyerdocs.com", true },
{ "buyessay.org", true },
{ "buyessays.net", true },
- { "buyhealth.shop", true },
{ "buyinginvestmentproperty.com", true },
- { "buyjewel.shop", true },
{ "buymindhack.com", true },
{ "buypapercheap.net", true },
- { "buyplussize.shop", true },
- { "buyprofessional.shop", true },
{ "buyritefairview.com", true },
{ "buyseo.store", true },
{ "buysuisse.shop", true },
{ "buytermpaper.com", true },
- { "buywine.shop", true },
+ { "buyusa.gov", true },
{ "buziaczki.pl", true },
{ "buzz.tools", true },
{ "buzzconf.io", true },
{ "buzzcontent.com", true },
{ "buzzprint.it", true },
+ { "bvalle.com", true },
{ "bvbmedia.nl", true },
{ "bvionline.eu", true },
{ "bvisible.be", true },
{ "bvl.aero", true },
+ { "bvsa.co.za", true },
{ "bvv-europe.eu", true },
{ "bw.codes", true },
{ "bwanglab.com", true },
@@ -7834,21 +8226,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bwh1.net", false },
{ "bwhbwh.com", true },
{ "bwhbwh.net", true },
+ { "bwilkinson.co.uk", true },
+ { "bwin2288.com", true },
{ "bwl-earth.club", true },
{ "bws16.de", true },
{ "bwserhoscaletrainaz.com", true },
{ "bx-n.de", true },
{ "bx49.cc", true },
{ "bxp40.at", true },
- { "by777.com", true },
{ "byange.pro", true },
{ "byatte.com", true },
+ { "bye-bye.us", true },
{ "byeskille.no", true },
{ "bygningsregistrering.dk", true },
{ "byhe.me", true },
{ "byiu.info", false },
{ "byjuschennai.com", true },
- { "byken.cn", true },
{ "bymark.co", true },
{ "bymike.co", true },
{ "bynder.com", true },
@@ -7856,11 +8249,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bynumlaw.net", true },
{ "bypass.sh", true },
{ "bypetula.cz", true },
- { "byr.moe", true },
+ { "byraje.com", true },
{ "byrko.cz", true },
{ "byronkg.us", true },
{ "byrtz.de", true },
{ "bytanchan.com", true },
+ { "byte-time.com", true },
{ "byte.nl", true },
{ "byte128.com", true },
{ "bytearts.net", false },
@@ -7887,16 +8281,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bytesunlimited.com", true },
{ "bytesystems.com", true },
{ "byteterrace.com", true },
- { "bythen.cn", true },
+ { "bytheglass.gr", true },
{ "bythisverse.com", true },
{ "bytrain.net", true },
{ "bzh.tf", true },
{ "bziaks.xyz", true },
{ "bzsparks.com", false },
{ "bztech.com.br", true },
- { "bztraveler.com", true },
- { "bztraveler.net", true },
{ "bzv-fr.eu", true },
+ { "c-3.moe", true },
{ "c-aeroconsult.com", true },
{ "c-ma-copro.com", true },
{ "c-path.org", true },
@@ -7906,7 +8299,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "c-webdesign.net", true },
{ "c-world.co.uk", true },
{ "c.cc", true },
- { "c00ke.com", true },
+ { "c0o.cc", true },
{ "c0rporation.com", true },
{ "c2design.it", true },
{ "c2lab.net", true },
@@ -7919,7 +8312,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "c4539.com", true },
{ "c4k3.net", true },
{ "c5197.co", true },
- { "c5h8no4na.net", true },
{ "c6729.co", true },
{ "c6729.com", true },
{ "c6957.co", true },
@@ -7932,7 +8324,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ca-key.de", true },
{ "ca.gparent.org", true },
{ "ca.search.yahoo.com", false },
- { "ca5.de", true },
{ "caarecord.org", true },
{ "caasd.org", true },
{ "cabaladada.org", true },
@@ -7949,13 +8340,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cacao.supply", true },
{ "cacaolalina.com", true },
{ "cacaumidade.com.br", true },
- { "cacd.eu", true },
{ "caceis.bank", true },
{ "cachacacha.com", true },
{ "cachedview.nl", true },
{ "cachetur.no", true },
{ "cackette.com", true },
- { "cacr.pw", true },
{ "cad-noerdlingen.de", true },
{ "cadams.io", true },
{ "cadetsge.ch", true },
@@ -7972,10 +8361,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cadusilva.com", true },
{ "caerus.ws", true },
{ "caesarkabalan.com", true },
+ { "caetanobenet.es", true },
+ { "caetanoflotas.es", true },
+ { "caetanoformula.es", true },
+ { "caetanoformulacadiz.es", true },
+ { "caetanoformulagalicia.es", true },
+ { "caetanomotorsmalaga.es", true },
+ { "caetanoreicomsa.es", true },
+ { "cafedelahalle.com", true },
{ "cafedupont.be", true },
{ "cafedupont.co.uk", true },
{ "cafedupont.de", true },
{ "cafedupont.nl", true },
+ { "cafefresco.pe", true },
{ "cafeimsueden.de", true },
{ "cafejulian.com", true },
{ "cafelandia.net", true },
@@ -7988,10 +8386,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "caffeinefiend.org", true },
{ "cafled.org", true },
{ "cagalogluyayinevi.com", false },
- { "caglarcakici.com", true },
- { "caiben.org", true },
{ "caijunyi.net", false },
{ "cainhosting.com", false },
+ { "cais.de", true },
{ "caitcs.com", true },
{ "caizx.com", false },
{ "caja-pdf.es", true },
@@ -8027,7 +8424,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "calculator.tf", true },
{ "calcworkshop.com", true },
{ "caldoletto.com", true },
- { "caleb.cx", true },
{ "calebthompson.io", true },
{ "calehoo.com", true },
{ "calendar.cf", true },
@@ -8038,6 +8434,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "calenfil.com", true },
{ "caletka.cz", true },
{ "calgoty.com", true },
+ { "calibra.com", true },
{ "calibreapp.com", true },
{ "calibso.net", true },
{ "caliderumba.com", true },
@@ -8063,6 +8460,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "calomel.org", true },
{ "calotte-academy.com", true },
{ "calrotaract.org", true },
+ { "calverleyparish.church", true },
{ "calvin.my", true },
{ "calvinallen.net", false },
{ "calyxengineers.com", true },
@@ -8092,7 +8490,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "camconn.cc", true },
{ "camdenboneandjoint.com", true },
{ "camdesign.pl", true },
- { "camelforensics.com", true },
{ "camelservers.com", true },
{ "cameo-membership.uk", true },
{ "cameraviva.com.br", true },
@@ -8100,13 +8497,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "camerweb.es", true },
{ "camilomodzz.net", true },
{ "camisetasmalwee.com.br", true },
- { "camolist.com", true },
{ "camp-pleinsoleil.ch", true },
{ "camp.co.uk", true },
{ "campaign-ad.com", true },
{ "campaign.gov.uk", true },
{ "campaignagent.com.au", true },
{ "campaignhelpdesk.org", true },
+ { "campaignlake.com", true },
{ "campaignwiki.org", true },
{ "campamentos.info", true },
{ "campbellapplianceheatingandair.com", true },
@@ -8180,17 +8577,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "candinya.me", true },
{ "cando.eu", true },
{ "cangku.in", true },
- { "cangku.moe", true },
+ { "cangku.moe", false },
{ "canglong.net", true },
{ "canhazip.com", true },
{ "canicaprice.com", true },
{ "canihavesome.coffee", true },
+ { "canine-mobility.com", true },
{ "caniuse.email", true },
{ "canker.org", true },
{ "canlidoviz.com", true },
{ "canmipai.com", true },
{ "cannabis-marijuana.com", true },
{ "cannabiscare.ca", true },
+ { "cannabislegality.info", true },
{ "cannabismd.com", true },
{ "cannacards.ca", true },
{ "cannaffiliate.com", true },
@@ -8235,6 +8634,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "capitalonecardservice.com", true },
{ "capitalp.jp", true },
{ "capitalquadatv.org.nz", true },
+ { "capitaoalden.com", true },
{ "capitolpathways.org", true },
{ "caplinbouncycastles.co.uk", true },
{ "capper.de", true },
@@ -8250,12 +8650,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "captainsfarm.in", true },
{ "captainsinn.com", true },
{ "captivationtheory.com", true },
- { "capturapp.com", false },
{ "capture-app.com", true },
{ "capuchinox.com", true },
{ "caputo.com", true },
{ "caputodesign.com", true },
- { "car-insurance-quotes.biz", true },
{ "car.info", true },
{ "car24.de", true },
{ "car24portal.de", true },
@@ -8272,6 +8670,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "carbon.coop", true },
{ "carbon12.org", true },
{ "carbon12.software", true },
+ { "carbonating.com", true },
{ "carboneselectricosnettosl.info", false },
{ "carbonmade.com", false },
{ "carbono.uy", true },
@@ -8308,6 +8707,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "careeroptionscoach.com", true },
{ "careers.plus", true },
{ "carefour.nl", true },
+ { "carefulcolor.com", true },
{ "caremad.io", true },
{ "carepassport.com", true },
{ "carespot.biz", true },
@@ -8350,10 +8750,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "carlili.fr", true },
{ "carlingfordapartments.com.au", true },
{ "carlinmack.com", true },
- { "carlislepassionplay.org", true },
{ "carlitoxxpro.com", true },
{ "carlmjohnson.net", false },
- { "carlo.mx", false },
{ "carlobiagi.de", true },
{ "carlocksmith--dallas.com", true },
{ "carlocksmithbaltimore.com", true },
@@ -8368,9 +8766,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "carlosfelic.io", true },
{ "carlosjeurissen.com", true },
{ "carlosjeurissen.nl", true },
+ { "carlosvelezmarketing.com", true },
{ "carlot-j.com", true },
{ "carls-fallout-4-guide.com", true },
{ "carmelglenane.com", true },
+ { "carmelon-digital.com", true },
{ "carmelrise.co.uk", true },
{ "carnaticalifornia.com", true },
{ "carnet-du-voyageur.com", true },
@@ -8389,6 +8789,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "carolineeball.com", true },
{ "carolinehanania.com", true },
{ "carolynjoyce.com.au", true },
+ { "carontetouristisoleminori.it", true },
{ "carpetandhardwoodflooringpros.com", true },
{ "carpetcleaningtomball.com", true },
{ "carplus.net", true },
@@ -8398,13 +8799,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "carrierplatform.com", true },
{ "carringtonrealtygroup.com", true },
{ "carroattrezzimilanodaluiso.it", true },
- { "carroceriascarluis.com", true },
{ "cars4salecy.com", true },
{ "carshippingcarriers.com", true },
{ "carson-aviation-adventures.com", true },
{ "carson-matthews.co.uk", true },
{ "carsoug.com", true },
{ "carspneu.cz", true },
+ { "cartaodigi.com", true },
{ "carteirasedistintivos.com.br", true },
{ "cartelloni.roma.it", true },
{ "carterdan.net", true },
@@ -8431,7 +8832,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "casa-lunchbreak.de", true },
{ "casa-mea-inteligenta.ro", true },
{ "casaamor.ph", true },
- { "casaanastasia.ro", true },
{ "casabouquet.com", true },
{ "casacameo.com", false },
{ "casacazoleiro.com", true },
@@ -8440,7 +8840,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "casadasportasejanelas.com", true },
{ "casadoarbitro.com.br", true },
{ "casadopulpo.com", true },
- { "casadowifi.com.br", true },
{ "casaessencias.com.br", true },
{ "casalborgo.it", true },
{ "casalindamex.com", true },
@@ -8465,20 +8864,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "caseycapitalpartners.com", true },
{ "cash-4x4.com", true },
{ "cashati.com", true },
- { "cashbackcow.us", true },
{ "cashbook.co.tz", true },
{ "cashbot.cz", true },
{ "cashfazz.com", true },
+ { "cashflowstrategist.com", true },
{ "cashlogic.ch", true },
{ "cashmaxtexas.com", true },
+ { "cashontime.com", true },
{ "cashplk.com", true },
{ "casian.ir", true },
+ { "casino-cash-flow.com", true },
+ { "casino-cash-flow.com.ru", true },
+ { "casino-cash-flow.info", true },
+ { "casino-cash-flow.pro", true },
+ { "casino-cash-flow.ru", true },
{ "casino-cash-flow.su", true },
{ "casino-cashflow.ru", true },
- { "casino-online.info", true },
{ "casino-trio.com", true },
- { "casinobonuscodes.online", true },
+ { "casinocash-flow.ru", true },
+ { "casinocashflow.pro", true },
{ "casinocashflow.ru", true },
+ { "casinocashflow.su", true },
+ { "casinocashflow.xyz", true },
{ "casinochecking.com", true },
{ "casinolegal.pt", true },
{ "casinolistings.com", true },
@@ -8499,7 +8906,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cassimo.com", true },
{ "castbulletassoc.org", false },
{ "castelannenberg.com", true },
- { "casteloinformatica.com.br", true },
{ "castible.de", true },
{ "castle-engine.io", true },
{ "castlecapers.com.au", true },
@@ -8516,9 +8922,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "castlesrus-kent.com", true },
{ "castleswa.com.au", true },
{ "casualgaming.no", true },
- { "casusgrillcaribbean.com", true },
{ "cat.net", true },
- { "cat73.org", true },
+ { "cat93.com", true },
{ "catalog.beer", true },
{ "catalogobiblioteca.com", true },
{ "catalogoreina.com", true },
@@ -8536,12 +8941,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "catchkol.com", true },
{ "catcoxx.de", true },
{ "catenacondos.com", true },
- { "catenariadiscos.com", true },
{ "catering-xanadu.cz", true },
{ "catfooddispensersreviews.com", true },
+ { "catgirl.science", true },
{ "catharinesomerville.com", true },
{ "catharisme.eu", true },
{ "catherinejf.com", true },
+ { "catherinesofpartick.co.uk", true },
{ "cathiebrousse.com", true },
{ "catholic8964.org", true },
{ "catholics.dating", true },
@@ -8561,6 +8967,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "catlovingcare.com", true },
{ "catmoose.ca", true },
{ "catmoz.fr", true },
+ { "catram.org", true },
{ "cattivo.nl", false },
{ "catuniverse.org", true },
{ "catus.moe", true },
@@ -8569,6 +8976,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "caulfieldeastapartments.com.au", true },
{ "caulfieldracecourseapartments.com.au", true },
{ "causae-fincas.es", true },
+ { "causae.es", true },
{ "cav.ac", true },
{ "cavac.at", true },
{ "cavern.tv", true },
@@ -8592,7 +9000,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cbhq.net", true },
{ "cbin168.com", true },
{ "cbintermountainrealty.com", true },
- { "cbk-connect.com", true },
+ { "cbr-rcb.ca", true },
{ "cbr-xml-daily.ru", true },
{ "cbsdeheidevlinder.nl", true },
{ "cbw.sh", true },
@@ -8630,6 +9038,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cdburnerxp.se", true },
{ "cdda.ch", true },
{ "cdepot.eu", true },
+ { "cdireland.com", true },
{ "cdkeykopen.com", true },
{ "cdkeyprices.com", true },
{ "cdkeyworld.de", true },
@@ -8641,9 +9050,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cdnsys.net", true },
{ "cdom.de", true },
{ "cdsdigital.de", true },
- { "cdshh.club", true },
{ "cdshining.com", true },
{ "cdu-gebhardshain.de", true },
+ { "cduckett.net", true },
{ "cdvl.org", true },
{ "ce-agentur.de", false },
{ "ce-pimkie.fr", true },
@@ -8670,6 +9079,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "celebrityscope.net", true },
{ "celectro-pro.com", true },
{ "celestebonito.pt", true },
+ { "celiac.com", true },
{ "celiendev.ch", true },
{ "celine-patisserie.fr", true },
{ "cell-lookup.com", true },
@@ -8721,6 +9131,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "centredaccueil.fr", true },
{ "centreoeil.ch", true },
{ "centrepointorguk-dev.azurewebsites.net", true },
+ { "centricagency.co.uk", true },
{ "centrobill.com", true },
{ "centrodeesteticarecife.com", true },
{ "centroecuestrecastellar.com", true },
@@ -8732,6 +9143,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "centruvechisv.ro", true },
{ "centsi.io", true },
{ "centum.no", true },
+ { "centumail.com", true },
{ "centura.de", true },
{ "centurialeonina.com", true },
{ "centurioninfosec.com", true },
@@ -8768,6 +9180,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "certificatedetails.com", true },
{ "certificatespending.com", true },
{ "certificatetools.com", false },
+ { "certificato-prevenzione-incendi.it", true },
{ "certificazioni-energetiche.it", true },
{ "certifiedfieldassociate.com", true },
{ "certifiednurses.org", true },
@@ -8778,7 +9191,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "certspotter.org", true },
{ "cervejista.com", true },
{ "ces-ltd.co.uk", true },
- { "cesboard.com", true },
+ { "cesarparedespacora.com", true },
{ "cesdb.com", true },
{ "cesipagano.com", true },
{ "ceskepivnesety.sk", true },
@@ -8792,6 +9205,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cevo.com.hr", true },
{ "cezdent.com", true },
{ "cf-ide.de", true },
+ { "cfan.space", true },
{ "cfc-swc.gc.ca", true },
{ "cfda.gov", true },
{ "cfdcre5.org", true },
@@ -8805,18 +9219,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cfsh.tk", true },
{ "cftc.gov", true },
{ "cftcarouge.com", true },
+ { "cfttt.com", true },
{ "cfurl.cf", true },
- { "cfxdesign.com", true },
{ "cg-goerlitz.de", true },
{ "cg-systems.hu", true },
{ "cg.al", true },
{ "cg.search.yahoo.com", false },
+ { "cga.best", true },
{ "cgal.org", true },
{ "cgan.de", true },
{ "cgbassurances.ch", true },
- { "cgbilling.com", true },
{ "cgcookiemarkets.com", true },
+ { "cgeceia.cf", true },
{ "cgf-charcuterie.com", true },
+ { "cgminc.net", true },
{ "cgnparts.com", true },
{ "cgpe.com", true },
{ "cgsmart.com", true },
@@ -8829,6 +9245,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chabaudparfum.com", true },
{ "chabert-provence.fr", true },
{ "chabik.com", true },
+ { "chaboisseau.net", true },
{ "chad.ch", true },
{ "chadpugsley.com", true },
{ "chadstoneapartments.com.au", true },
@@ -8843,7 +9260,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chaletmanager.com", true },
{ "chaletpierrot.ch", true },
{ "chaleur.com", true },
- { "chalker.io", true },
{ "challengeblog.org", true },
{ "challengeclothing.com.br", true },
{ "chambion.ch", true },
@@ -8863,6 +9279,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "champonthis.de", true },
{ "chamsochoa.com", true },
{ "chancekorte.com", true },
+ { "chancekorte.net", true },
{ "chanddriving.co.uk", true },
{ "chandr1000.ga", true },
{ "changecopyright.ru", true },
@@ -8883,7 +9300,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chaospott.de", true },
{ "chaosriftgames.com", true },
{ "chaoswars.ddns.net", true },
- { "chaotichive.com", true },
{ "chaoticlaw.com", true },
{ "chapelfordbouncers.co.uk", true },
{ "chapiteauxduleman.fr", true },
@@ -8896,11 +9312,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "charisma.ai", true },
{ "charissadescande.com", true },
{ "charitylog.co.uk", true },
+ { "charlenew.xyz", true },
{ "charles-darwin.com", true },
{ "charlesbwise.com", true },
{ "charlespitonltd.com", true },
{ "charlesrogers.co.uk", true },
- { "charlesstover.com", true },
{ "charlestonfacialplastic.com", true },
{ "charlie4change.com", true },
{ "charliedillon.com", true },
@@ -8911,11 +9327,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "charlotteomnes.com", true },
{ "charlottesvillegolfcommunities.com", true },
{ "charlottesvillehorsefarms.com", true },
+ { "charlotteswimmingpoolbuilder.com", true },
{ "charlylou.de", true },
{ "charmander.me", true },
{ "charmanterelefant.at", true },
{ "charmingsaul.com", true },
- { "charmyadesara.com", true },
{ "charr.xyz", true },
{ "charset.org", true },
{ "charta-digitale-vernetzung.de", true },
@@ -8934,6 +9350,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chat-senza-registrazione.net", true },
{ "chat.cz", true },
{ "chat40.net", true },
+ { "chataberan.cz", true },
{ "chatbelgie.eu", true },
{ "chatbots.systems", true },
{ "chatear.social", true },
@@ -8953,9 +9370,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chattergalerie.eu", true },
{ "chattergallery.com", true },
{ "chattersworld.nl", true },
+ { "chattingorcheating.com", true },
{ "chatu.io", true },
{ "chatu.me", true },
{ "chatucomputers.com", true },
+ { "chaturbate.com.tw", true },
+ { "chaturbates.org", true },
{ "chatxp.com", true },
{ "chatxsingle.net", true },
{ "chatxtutti.com", true },
@@ -8974,6 +9394,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chcsct.com", true },
{ "chd-expert.fr", true },
{ "cheap-colleges.com", true },
+ { "cheapautoinsuranceblog.com", true },
{ "cheapcaribbean.com", true },
{ "cheapessay.net", true },
{ "cheapestgamecards.at", true },
@@ -8989,20 +9410,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cheapgeekts.com", false },
{ "cheapgoa.com", true },
{ "cheapiesystems.com", true },
+ { "cheapssl.com.tr", true },
{ "cheapticket.in", true },
{ "cheapwritinghelp.com", true },
{ "cheapwritingservice.com", true },
{ "cheatengine.pro", true },
{ "cheatsupreme.com", false },
+ { "checalaweb.com", true },
{ "check.torproject.org", false },
{ "checkandreportlive.com", true },
{ "checkblau.de", true },
{ "checkecert.nl", true },
{ "checkjelinkje.nl", true },
+ { "checkmatewebsolutions.com", true },
{ "checkmyessay.com", true },
{ "checkmyessays.com", true },
{ "checkmyhttps.net", true },
- { "checkmyip.com", true },
{ "checkmypsoriasis.com", true },
{ "checkout.google.com", true },
{ "checkpoint-tshirt.com", true },
@@ -9015,6 +9438,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "checkyourmath.com", true },
{ "checkyourprivilege.org", true },
{ "checkyourreps.org", true },
+ { "checookies.com", true },
{ "checos.co.uk", true },
{ "cheddarpayments.com", true },
{ "cheekycharliessoftplay.co.uk", true },
@@ -9022,6 +9446,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cheela.org", true },
{ "cheem.co.uk", true },
{ "cheeseemergency.co.uk", true },
+ { "cheesefusion.com", true },
{ "cheetahwerx.com", true },
{ "cheez.systems", true },
{ "cheezflix.uk", true },
@@ -9035,7 +9460,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cheltik.ru", true },
{ "chemco.mu", true },
{ "chemicalcrux.org", true },
- { "chemiphys.com", true },
+ { "chemiphys.com", false },
{ "chemistry-schools.com", true },
{ "chenapartment.com", true },
{ "chengfayun.com", true },
@@ -9046,15 +9471,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chennien.com", true },
{ "chenpei.org", true },
{ "chenqinghua.com", true },
+ { "chenx221.ml", true },
+ { "chenx221.xyz", true },
+ { "chenx2210.xyz", true },
{ "chenzhekl.me", true },
{ "chenzhipeng.com.cn", true },
{ "cheque-transitionactive.fr", true },
{ "cherevoiture.com", true },
{ "cherie-belle.com", true },
{ "chernevclima.bg", true },
- { "cherrett.digital", true },
{ "cherry-green.ch", true },
{ "cherrybread.net", true },
+ { "cherryonit.com", false },
{ "cherrywoodtech.com", true },
{ "chertseybouncycastles.co.uk", true },
{ "chesapeakebaychristmas.com", true },
@@ -9066,6 +9494,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chestercountyroboticsurgery.com", true },
{ "chesterfieldplaceapartmentsstl.com", true },
{ "chesterlestreetasc.co.uk", false },
+ { "chestnut.cf", true },
{ "chetwood.se", true },
{ "chevy37.com", true },
{ "chevymotor-occasions.be", true },
@@ -9085,8 +9514,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chic-leather.com", true },
{ "chicagoemergencyclosings.com", true },
{ "chicagolug.org", true },
- { "chicagostudentactivists.org", true },
{ "chicback.com", true },
+ { "chicguay.com", true },
{ "chicisimo.com", true },
{ "chicolawfirm.com", true },
{ "chicurrichi.com", true },
@@ -9142,12 +9571,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chit.search.yahoo.com", false },
{ "chitoku.jp", false },
{ "chksite.com", true },
- { "chl.la", true },
{ "chliine.ch", true },
{ "chlo-products.biz", true },
{ "chlo-products.net", true },
{ "chloescastles.co.uk", true },
- { "chlth.com", true },
{ "chmielarz.it", true },
{ "chmsoft.com.ua", true },
{ "chmsoft.ru", true },
@@ -9161,7 +9588,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chocolytech.info", true },
{ "chokladfantasi.net", true },
{ "chomp.life", true },
- { "chonghe.org", true },
{ "chook.as", true },
{ "choootto.net", true },
{ "choosemypc.net", true },
@@ -9172,7 +9598,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chourishi-shigoto.com", true },
{ "chovancova.sk", true },
{ "choyri.com", true },
- { "chris-edwards.net", true },
{ "chrisahrweileryoga.com", true },
{ "chrisaitch.com", true },
{ "chrisb.me", true },
@@ -9180,7 +9605,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chrisbryant.me.uk", true },
{ "chrisburnell.com", true },
{ "chriscarey.com", true },
- { "chriscowley.me.uk", true },
{ "chriscutts.uk", true },
{ "chrisdecairos.ca", true },
{ "chrisgieger.com", true },
@@ -9205,7 +9629,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "christec.net", true },
{ "christensenplace.us", true },
{ "christiaanconover.com", true },
- { "christian-fischer.pictures", true },
{ "christian-folini.ch", true },
{ "christian-gredig.de", true },
{ "christian-host.com", true },
@@ -9229,6 +9652,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "christianrasch.de", true },
{ "christians.dating", true },
{ "christianscholz.de", false },
+ { "christianwitts.tech", true },
{ "christiehawkes.com", true },
{ "christielepage.com", true },
{ "christiesantiques.com", true },
@@ -9251,7 +9675,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chriswarrick.com", true },
{ "chriswbarry.com", true },
{ "chriswells.io", true },
- { "chromaxa.com", true },
+ { "chrisx.xyz", true },
{ "chromcraft-revington.com", true },
{ "chrome-devtools-frontend.appspot.com", true },
{ "chrome.com", false },
@@ -9270,6 +9694,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chrstn.eu", true },
{ "chrysanthos.net", true },
{ "chrystajewelry.com", true },
+ { "chrystus.pl", true },
{ "chs.us", false },
{ "chshealthcare.co.uk", true },
{ "chshouyu.com", true },
@@ -9278,6 +9703,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "chuchote-moi.fr", true },
{ "chuill.com", true },
{ "chun.pro", true },
+ { "chun.si", true },
{ "chunche.net", true },
{ "chunk.science", true },
{ "chupadelfrasco.com", true },
@@ -9311,8 +9737,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cielbleu.org", true },
{ "cielly.com", true },
{ "cierreperimetral.com", true },
+ { "cifapme.net", true },
{ "cifop-numerique.fr", true },
- { "ciftlikesintisi.com", true },
{ "cig-dem.com", false },
{ "cigar-cartel.com", true },
{ "cigarterminal.com", false },
@@ -9326,7 +9752,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cimfax.com", true },
{ "cinafilm.com", true },
{ "cine-music.de", true },
- { "cine.to", true },
{ "cinefilzonen.se", true },
{ "cinefun.net", true },
{ "cinema.paris", true },
@@ -9351,12 +9776,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cipher.team", true },
{ "cipherboy.com", true },
{ "ciphersuite.info", true },
+ { "ciphrex.com", true },
{ "cipri.com", true },
{ "cipri.net", true },
{ "cipri.nl", true },
{ "cipri.org", true },
{ "cipria.no", true },
- { "cipriano.nl", true },
{ "cipy.com", true },
{ "cir.is", true },
{ "circady.com", true },
@@ -9390,6 +9815,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "citizenscience.org", true },
{ "citizensgbr.org", true },
{ "citizensleague.org", true },
+ { "citizenspact.eu", true },
{ "citizing.org", true },
{ "citrusui.me", true },
{ "cittadesign.com", false },
@@ -9400,7 +9826,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "citybeat.de", true },
{ "citycreek.studio", true },
{ "citydance.ee", true },
- { "cityextra.com.au", false },
{ "cityfloorsupply.com", true },
{ "citylights.eu", true },
{ "citymoobel.ee", true },
@@ -9410,6 +9835,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "citywidealarms.com", true },
{ "cityworksonline.com", true },
{ "ciubotaru.tk", true },
+ { "ciudadanosbo.com", true },
{ "ciurcasdan.eu", true },
{ "civey.com", true },
{ "civicamente.cl", true },
@@ -9437,7 +9863,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ckennelley.com", true },
{ "ckennelly.com", true },
{ "ckennely.com", true },
- { "ckleemann.de", true },
{ "cklie.de", true },
{ "ckliemann.com", true },
{ "ckliemann.net", true },
@@ -9455,10 +9880,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "clairescastles.co.uk", true },
{ "claitec.com", true },
{ "clamofon.com", true },
- { "clan-ww.com", true },
{ "clanebouncycastles.com", true },
{ "clanrose.org.uk", true },
{ "clanwarz.com", true },
+ { "clare3dx.com", true },
+ { "clarkelectricalservices.com.au", true },
{ "clarkwinkelmann.com", true },
{ "clase3.tk", true },
{ "clash.lol", true },
@@ -9477,6 +9903,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "classteaching.com.au", true },
{ "claster.it", true },
{ "claudia-urio.com", true },
+ { "claudiney.eti.br", true },
{ "claudiney.id", true },
{ "claudiney.info", true },
{ "claudiolemos.com", true },
@@ -9489,7 +9916,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "clayandcottonkirkwood.com", true },
{ "claygregory.com", true },
{ "clayprints.com", true },
- { "claytonstowing.com.au", true },
{ "clazzrooms.com", true },
{ "cldinc.com", true },
{ "cldly.com", true },
@@ -9498,7 +9924,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cleandetroit.org", true },
{ "cleandogsnederland.nl", true },
{ "cleanhouse2000.us", true },
- { "cleaningbyrosie.com", true },
{ "cleaningservicejulai.com", true },
{ "cleanplanet.co.jp", true },
{ "clearance365.co.uk", true },
@@ -9508,6 +9933,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "clearchaos.net", true },
{ "clearip.com", true },
{ "clearpay.co.uk", true },
+ { "clearspringhealthcare.com", true },
{ "clearview-creative.com", true },
{ "clearvoice.com", true },
{ "clearwaterbidets.com", true },
@@ -9525,6 +9951,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cleysense.com", true },
{ "clica.net", true },
{ "clicandfioul.com", true },
+ { "clich.cn", true },
{ "clicheshishalounge.co.uk", true },
{ "click-licht.de", true },
{ "click2order.co.uk", true },
@@ -9546,22 +9973,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "climatestew.com", true },
{ "clindoeilmontagne.com", true },
{ "clinicalrehabilitation.info", true },
+ { "clinicaltrialpodcast.com", true },
{ "clinicaltrials.gov", true },
{ "clinicasmedicas.com.br", true },
{ "clinicminds.com", true },
{ "cliniquevethuy.be", true },
{ "clintonlibrary.gov", true },
- { "clip.ovh", true },
{ "clipclip.com", true },
{ "clippings.com", true },
+ { "cliqz.com", true },
{ "clive.io", true },
{ "clmde.de", true },
{ "clnc.to", true },
{ "clnnet.ch", true },
{ "clo.me", true },
{ "clockcaster.com", true },
+ { "clocklab.design", true },
{ "clockworksms.com", true },
- { "clod-hacking.com", true },
{ "cloneuniverse.com", true },
{ "clorophilla.net", true },
{ "closeli.cn", true },
@@ -9578,7 +10006,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cloud42.ch", false },
{ "cloud9bouncycastlehire.com", true },
{ "cloud9vets.co.uk", true },
- { "cloudalice.com", true },
+ { "cloudalice.net", true },
{ "cloudapps.digital", true },
{ "cloudbolin.es", true },
{ "cloudbrothers.info", true },
@@ -9588,6 +10016,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cloudchart.site", true },
{ "cloudcite.net", true },
{ "cloudcloudcloud.cloud", true },
+ { "cloudclouds.com", true },
{ "cloudcrux.net", true },
{ "clouddog.com.br", true },
{ "cloudeezy.com", true },
@@ -9599,12 +10028,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cloudhoreca.com", true },
{ "cloudia.org", true },
{ "cloudily.com", true },
+ { "cloudimproved.com", true },
{ "cloudimprovedtest.com", true },
{ "cloudkeep.nl", true },
{ "cloudlessdreams.com", true },
{ "cloudlight.biz", true },
+ { "cloudnote.cc", true },
{ "cloudns.net", true },
{ "cloudofertas.com.br", true },
+ { "cloudoptimizedsmb.com", true },
{ "cloudoptimus.com", true },
{ "cloudpipes.com", true },
{ "cloudse.co.uk", true },
@@ -9622,10 +10054,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cloudspace-analytics.com", true },
{ "cloudspire.net", true },
{ "cloudteam.de", true },
- { "cloudtocloud.tk", true },
{ "cloudtropia.de", true },
{ "cloudup.com", true },
- { "cloudwallce.com", true },
+ { "cloudwellmarketing.com", true },
{ "cloudwise.nl", true },
{ "clouz.de", true },
{ "cloveros.ga", true },
@@ -9673,7 +10104,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cmcressy.ch", true },
{ "cmdline.org", true },
{ "cme-colleg.de", true },
+ { "cmf.qc.ca", true },
{ "cmfaccounting.com", false },
+ { "cmftech.com", true },
{ "cmgacheatcontrol.com", true },
{ "cmillrehab.com", true },
{ "cmlachapelle.ch", true },
@@ -9683,11 +10116,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cmn-groupe.com", true },
{ "cmngroup.com", true },
{ "cmngroupe.com", true },
- { "cmov-plongeurs.fr", true },
- { "cmoycontracts.com", true },
{ "cmplainpalais.ch", true },
{ "cms-weble.jp", true },
{ "cmserviscz.cz", true },
+ { "cmshangu.com", true },
{ "cmskeyholding.co.uk", true },
{ "cmskeyholding.com", true },
{ "cmv.gr", true },
@@ -9699,6 +10131,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cna5.net", true },
{ "cna5.org", true },
{ "cnam-idf.fr", true },
+ { "cnbibo.com", true },
{ "cnbs.ch", true },
{ "cnc-lehrgang.de", true },
{ "cncado.net", true },
@@ -9709,13 +10142,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cni-certing.it", true },
{ "cnitdog.com", false },
{ "cnre.eu", true },
+ { "cnss.io", true },
{ "cnvt.fr", true },
+ { "cnymenshealth.com", true },
{ "co-founder-stuttgart.de", true },
{ "co.search.yahoo.com", false },
- { "co2eco.cn", false },
{ "co50.com", true },
{ "coa.one", true },
{ "coachezmoi.ch", true },
+ { "coachfederation.ro", true },
{ "coaching-harmonique.fr", true },
{ "coaching-impulse.ch", true },
{ "coaching-park.fr", true },
@@ -9726,7 +10161,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coathangastrangler.com", true },
{ "coathangerstrangla.com", true },
{ "coathangerstrangler.com", true },
- { "coatl-industries.com", false },
+ { "coatl-industries.com", true },
{ "coatsandcocktails.org", true },
{ "cobalt.io", true },
{ "cobaltgp.com", true },
@@ -9738,7 +10173,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cocareonline.com", true },
{ "coccolebenessere.it", true },
{ "cocinoyo.com", true },
- { "cock.li", true },
+ { "cock.li", false },
{ "cockedey.in", true },
{ "cockfile.com", true },
{ "cockybot.com", true },
@@ -9768,15 +10203,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "codeandpeace.com", true },
{ "codeandsupply.co", true },
{ "codebrahma.com", false },
- { "codecommunity.io", true },
{ "codedelarouteenligne.fr", true },
- { "codedo.info", true },
{ "codedump.net", true },
{ "codeeclipse.com", true },
- { "codeferm.com", true },
{ "codefordus.nrw", true },
{ "codehz.one", true },
- { "codein.ca", true },
+ { "codein.ca", false },
{ "codeine.co.uk", true },
{ "codeit.guru", true },
{ "codeit.us", true },
@@ -9790,17 +10222,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "codepoints.net", true },
{ "codepref.com", true },
{ "codepult.com", true },
- { "codera.co.uk", true },
{ "codereview.appspot.com", false },
{ "codereview.chromium.org", false },
{ "codersatlas.co", true },
+ { "codersatlas.com", true },
{ "codersatlas.xyz", true },
{ "coderware.co.uk", true },
{ "codes.pk", true },
{ "codesport.io", true },
{ "codespromo.be", true },
{ "codestudies.net", true },
- { "codesyncro.com", true },
{ "codetheworld.com", true },
{ "codetipi.com", true },
{ "codetripping.net", true },
@@ -9814,6 +10245,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "codexpo.net", true },
{ "codeyellow.nl", true },
{ "codific.com", true },
+ { "codigodelbonusbet365.com", true },
{ "codigosddd.com.br", true },
{ "codimaker.com", true },
{ "coding-minds.com", true },
@@ -9822,6 +10254,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "codingfromhell.net", true },
{ "codinginfinity.me", true },
{ "codingrobots.com", true },
+ { "cododigital.co.uk", true },
{ "codxg.org", true },
{ "codyevanscomputer.com", true },
{ "codymoniz.com", true },
@@ -9835,9 +10268,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coffee-up.it", true },
{ "coffeeandteabrothers.com", true },
{ "coffeetime.fun", true },
+ { "coffeist.com", true },
{ "cogala.eu", true },
{ "cogeneration-energy.com", true },
- { "cogent.cc", true },
{ "cogilog.com", true },
{ "cogitoltd.com", true },
{ "cognicom-gaming.com", true },
@@ -9864,16 +10297,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coinloan.io", true },
{ "coinmewallet.com", true },
{ "coinpit.io", true },
- { "coins2001.ru", true },
+ { "coinroom.com", true },
{ "coinsmat.com", true },
{ "coinsz.co", true },
{ "coinx.pro", true },
- { "coisabakana.com.br", true },
{ "coisasdemulher.org", true },
{ "cojam.ru", true },
{ "cojo.eu", true },
{ "cokebar.info", true },
{ "coker.com.au", true },
+ { "col-head.com", true },
{ "col.la", true },
{ "colaborativa.tv", true },
{ "coladv.com", true },
@@ -9894,8 +10327,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "colengo.com", true },
{ "colf.online", true },
{ "colibris.xyz", true },
+ { "colinchartier.com", true },
{ "colincogle.name", true },
{ "colinsnaith.co.uk", true },
+ { "collab.ddnss.org", true },
{ "collabora-office.com", true },
{ "collabora.ca", true },
{ "collabora.co.kr", true },
@@ -9912,6 +10347,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "collabornation.net", true },
{ "collaction.hk", true },
{ "collada.org", true },
+ { "collage.me", true },
{ "collare.com.mx", true },
{ "collectdocs.com", true },
{ "collectfood.com", true },
@@ -9933,6 +10369,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "colloquy.mobi", true },
{ "colo-tech.com", true },
{ "cololi.moe", true },
+ { "colombiajeans.co", true },
{ "colombian.dating", true },
{ "color01.net", true },
{ "coloraid.net", true },
@@ -9943,6 +10380,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "colorfuldots.com", true },
{ "colorhexa.com", true },
{ "coloristcafe.com", true },
+ { "colorlib.com", false },
{ "colorpicker.fr", true },
{ "colors3d.com", true },
{ "colorsbycarin.com", true },
@@ -9980,20 +10418,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "comestoarra.com", true },
{ "cometcache.com", true },
{ "cometonovascotia.ca", true },
+ { "comeyegroup.com", true },
{ "comff.net", true },
{ "comfintouch.com", true },
{ "comflores.com.br", true },
{ "comfortmastersinsulation.com", true },
{ "comfun.net", true },
{ "comhack.com", true },
+ { "comicsans.tk", true },
{ "comicspornos.com", true },
- { "comicspornow.com", true },
{ "comicspornoxxx.com", true },
{ "comicwiki.dk", true },
{ "comidina.com", true },
{ "comiteaintriathlon.fr", true },
{ "comiteexpertes.gc.ca", true },
{ "comm.cx", true },
+ { "commania.co.kr", true },
{ "commco.nl", true },
{ "commechezvous.ch", true },
{ "commerce.gov", true },
@@ -10009,6 +10449,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "commoncode.com.au", true },
{ "commoncode.io", true },
{ "commoncore4kids.com", true },
+ { "commonsenseamericanpolitics.com", true },
{ "commonspace.la", true },
{ "communalconsulting.org", true },
{ "communiques.info", true },
@@ -10020,9 +10461,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "como-se-escribe.com", true },
{ "comoaliviareldolor.de", true },
{ "comoculosdesol.pt", true },
- { "comocurarlagastritis24.online", true },
{ "comocurarlagastritistratamientonatural.com", true },
- { "comodesinflamarlashemorroides.org", true },
{ "comodo.nl", true },
{ "comodormirmasrapido.com", true },
{ "comodosslstore.com", true },
@@ -10031,11 +10470,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "comohacerpara.com", true },
{ "comoimportar.net", true },
{ "comopuededejardefumar.net", true },
- { "comoquitarlacaspa24.com", true },
- { "comoquitarlasestriasrapidamente.com", true },
{ "comosecarabarriga.net", true },
{ "comoseduzir.net", true },
{ "comosefazisto.com.br", true },
+ { "comp.kiev.ua", true },
{ "comp2go.com.au", true },
{ "compactchess.cc", true },
{ "compagnia-buffo.de", false },
@@ -10044,6 +10482,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "comparatif-moto.fr", true },
{ "compareandrecycle.co.uk", true },
{ "compareinsurance.com.au", true },
+ { "comparemymobile.com", true },
{ "comparesoft.com", true },
{ "comparewatch.com", true },
{ "comparexcloudcenter.com", true },
@@ -10057,7 +10496,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "competencyassessment.ca", true },
{ "comphare.nl", true },
{ "compibus.fr", true },
- { "compilenix.org", true },
{ "compleetondernemen.nl", true },
{ "completefloorcoverings.com", true },
{ "completesecurityessex.co.uk", true },
@@ -10065,6 +10503,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "completionist.me", true },
{ "complexart.ro", true },
{ "complexorganization.com", true },
+ { "complexorganizations.com", true },
{ "compliance-management.ch", true },
{ "compliance-systeme.de", true },
{ "compliancedictionary.com", true },
@@ -10076,6 +10515,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "compraneta.com", false },
{ "compraporinternet.online", true },
{ "comprarimpresoras-3d.com", true },
+ { "comprasegura.ml", true },
{ "compreair.com", true },
{ "compreautomacao.com.br", true },
{ "compree.com", true },
@@ -10091,7 +10531,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "computec.ch", true },
{ "computehealth.com", true },
{ "computer-acquisti.com", true },
- { "computer-menschen.de", true },
{ "computer-science-schools.com", true },
{ "computerassistance.co.uk", true },
{ "computerbas.nl", true },
@@ -10148,7 +10587,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "confiancefoundation.org", true },
{ "config.schokokeks.org", false },
{ "confiwall.de", true },
+ { "conforama.es", true },
+ { "conforama.pt", true },
{ "conformax.com.br", true },
+ { "confrerie-rp.fr", true },
{ "conftree.com", true },
{ "congafasdesol.com", true },
{ "congineer.com", true },
@@ -10164,6 +10606,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "connect.facebook.net", true },
{ "connecta.store", true },
{ "connectedcare.md", true },
+ { "connectfss.com", true },
{ "connectivia.it", true },
{ "connectmath.com", true },
{ "connectmy.car", true },
@@ -10171,6 +10614,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "connectum.eu", true },
{ "conner.work", true },
{ "connexas.eu", true },
+ { "connexfilter.com", true },
{ "connext.de", true },
{ "connictro.de", true },
{ "connorhatch.com", true },
@@ -10196,6 +10640,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "consegne.it", true },
{ "consejosdenutricion.com", true },
{ "consensoprivacy.it", true },
+ { "consertodecelulares.com.br", true },
{ "conservatoriesincornwall.com", true },
{ "consideredgifts.com", true },
{ "consilium-vitae.ch", true },
@@ -10216,7 +10661,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "constructive.men", true },
{ "consul.io", true },
{ "consulenza.pro", true },
- { "consultasdigitales.com", true },
{ "consultation.biz.tr", true },
{ "consultimator.com", true },
{ "consultimedia.de", true },
@@ -10229,6 +10673,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "consumerfiles.com", true },
{ "consumersentinel.gov", true },
{ "consuwijzer.nl", true },
+ { "contabilidadebrooklin.com.br", true },
+ { "contact.xyz", true },
+ { "contactaffix.com", true },
{ "contactsingapore.sg", true },
{ "containerspace.com.au", true },
{ "contaquanto.com.br", true },
@@ -10240,13 +10687,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "contessa32experience.com", true },
{ "contextplatform.com", true },
{ "conti-profitlink.co.uk", true },
- { "continental-zermatt.ch", true },
{ "continuum.memorial", true },
{ "continuumrecoverycenter.com", true },
+ { "contouring.fr", true },
{ "contrabass.net", true },
{ "contractormountain.com", true },
{ "contractwriters.com", true },
- { "contrasentido.net", true },
{ "contraspin.co.nz", true },
{ "contratatupoliza.com", true },
{ "contributor.google.com", false },
@@ -10276,7 +10722,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cookie4.com", true },
{ "cookieandkate.com", true },
{ "cookiecrook.com", true },
- { "cookiesoft.de", true },
{ "cooking-sun.com", true },
{ "cookingcrusade.com", true },
{ "cookinglife.nl", false },
@@ -10295,24 +10740,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coolcamping.com", true },
{ "cooldan.com", true },
{ "coole-fete.de", true },
- { "coolerssr.space", true },
{ "coolgifs.de", true },
{ "coolprylar.se", true },
- { "cooltang.ooo", true },
- { "coolvibe.org", true },
{ "coon.fr", true },
{ "coonawarrawines.com.au", true },
{ "coonelnel.net", true },
- { "coop.se", true },
{ "cooperativa-je.net", true },
{ "coore.jp", true },
{ "coorpacademy.com", true },
{ "coorpintr.com", true },
+ { "copan.com.br", true },
{ "copdfoundation.org", true },
{ "copperandtileroofing.com", true },
{ "copperheados.com", true },
{ "copplaw.com", true },
{ "copta-imagefilme-und-drohnenvideos.de", true },
+ { "copticexchange.com", true },
{ "coptkm.cz", true },
{ "copycaught.com", true },
{ "copycaught.net", true },
@@ -10335,6 +10778,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "core.mx", true },
{ "core.org.pt", true },
{ "coreapm.org", true },
+ { "corecodec.com", true },
{ "coreless-stretchfilm.com", true },
{ "corelia.net", true },
{ "corepartners.com.ua", true },
@@ -10384,14 +10828,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "corpusslayer.com", true },
{ "corrbee.com", true },
{ "correct.cf", true },
+ { "correct.horse", true },
{ "correcthorse.cf", true },
{ "correctiv.org", true },
+ { "correctlydesign.com", true },
{ "correctpaardbatterijnietje.nl", true },
{ "corrick.io", true },
+ { "corriel.com", true },
{ "corrupted.io", true },
{ "corsa-b.uk", true },
{ "corscanplus.com", true },
- { "corsectra.com", true },
{ "corsicalaw.com", true },
{ "corsihaccpsicurezzalavoro.it", true },
{ "corso-antincendio.org", true },
@@ -10403,28 +10849,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coryadum.com", true },
{ "cosasque.com", true },
{ "cosciamoos.com", true },
+ { "cosentus.com", true },
{ "cosirex.com", true },
{ "cosmechic.fr", true },
{ "cosmekaitori.jp", true },
{ "cosmeticappraisal.com", true },
- { "cosmeticasimple.com", true },
- { "cosmeticos-naturales.com", true },
{ "cosmetify.com", true },
{ "cosmicnavigator.com", true },
{ "cosmicworlds.com", true },
{ "cosmicworlds.mobi", true },
{ "cosmodacollection.com", true },
{ "cosmofunnel.com", true },
+ { "cosmohit.ua", true },
{ "cosmundi.de", true },
{ "cosplayer.com", true },
{ "cospol.ch", true },
{ "costablanca.villas", true },
{ "costablancavoorjou.com", true },
+ { "costarellos.com", true },
{ "costcoinsider.com", true },
- { "costinstefan.eu", true },
{ "costreportdata.com", false },
- { "costruzioni.milano.it", true },
{ "costulessdirect.com", true },
+ { "coteetciel.com", true },
{ "coteries.com", true },
{ "cotoacc.com", true },
{ "cotonmusic.ch", true },
@@ -10459,8 +10905,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "courseworkbank.info", true },
{ "courtlistener.com", true },
{ "couscous.recipes", true },
+ { "coussinsky.net", true },
{ "couvreur-hinault.fr", true },
{ "covbounce.co.uk", true },
+ { "covenantoftheriver.org", true },
+ { "coveredinspiders.com", true },
{ "covermytrip.com.au", true },
{ "covershousing.nl", true },
{ "covery.ai", true },
@@ -10474,10 +10923,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "coxcapitalmanagement.com", true },
{ "coxxs.me", true },
{ "coya.tw", true },
- { "cozmoapp.com", true },
{ "cozo.me", true },
{ "cozyeggdesigns.com", true },
- { "cozywebsite.com", true },
{ "cp-st-martin.be", true },
{ "cpap.com", true },
{ "cpasperdu.com", true },
@@ -10516,11 +10963,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crabrave.space", true },
{ "crackcat.de", true },
{ "cracker.in.th", true },
+ { "crackheros.site", true },
{ "crackle.io", true },
{ "crackorsquad.in", true },
{ "crackslut.eu", true },
{ "crackstation.net", true },
- { "cradle.ph", true },
{ "cradlepointecm.com", true },
{ "craft-me-in.com", true },
{ "craft-verlag.de", true },
@@ -10553,6 +11000,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crawl.report", true },
{ "crawler.ninja", true },
{ "crawleybouncycastles.co.uk", true },
+ { "crawlspaceandbasementsolutions.com", true },
{ "crazy-bulks.com", true },
{ "crazy-cat.net", true },
{ "crazy-coders.com", true },
@@ -10590,8 +11038,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "createcpanama.com", true },
{ "createme.com.pl", true },
{ "createursdefilms.com", true },
+ { "creatic.co", true },
{ "creatieven.com", true },
{ "creation-contemporaine.com", true },
+ { "creationsgate.com", true },
{ "creativ-impuls-dekorateurin-muenchen.de", true },
{ "creative-wave.fr", true },
{ "creativeangles.in", true },
@@ -10607,7 +11057,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "creativeink.de", true },
{ "creativekkids.com", true },
{ "creativelaw.eu", true },
- { "creativeliquid.com", true },
+ { "creativeliquid.com", false },
{ "creativesprite.com", true },
{ "creativesurvey.com", true },
{ "creativeweb.biz", true },
@@ -10618,6 +11068,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "creators.direct", true },
{ "creatorswave.com", true },
{ "creatujoya.com", true },
+ { "crebita.de", true },
{ "crecman.fr", true },
{ "credential.eu", true },
{ "credex.bg", true },
@@ -10633,6 +11084,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "creepypastas.com", true },
{ "creepypastas.net", true },
{ "creer-une-boutique-en-ligne.com", true },
+ { "creermonsite-wp.com", true },
{ "creerunsitepro.com", true },
{ "crefelder.com", true },
{ "crem.in", false },
@@ -10650,7 +11102,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cricklewood.condos", true },
{ "criena.com", true },
{ "criena.net", true },
- { "crimbotrees.co.uk", true },
{ "crime-lawyers.com", true },
{ "crimefreeliving.com", true },
{ "crimesolutions.gov", true },
@@ -10675,7 +11126,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cristarta.com", true },
{ "cristau.org", true },
{ "cristianrasch.com", true },
- { "cristoraciones.com", true },
{ "critical.today", false },
{ "criticalsurveys.co.uk", true },
{ "critterguard.org", true },
@@ -10688,6 +11138,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crocuscoaching.co.uk", true },
{ "croisedanslemetro.com", true },
{ "croixblanche-haguenau.fr", true },
+ { "cromefire.myds.me", true },
{ "cromosomax.com", true },
{ "cronberg.ch", true },
{ "cronenberg.cc", true },
@@ -10706,9 +11157,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crossborderreturns.com", true },
{ "crossedwires.net", true },
{ "crossfitblackwater.com", true },
- { "crosslifenutrition.co.uk", true },
+ { "crosslifenutrition.co.uk", false },
+ { "crossnet.io", true },
{ "crossoverit.com", true },
+ { "crossroads-gmbh.ch", true },
{ "crossway.nl", true },
+ { "crosswords123.com", true },
{ "crowd.supply", true },
{ "crowdbox.net", true },
{ "crowdcloud.be", true },
@@ -10718,6 +11172,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crowdsupply.com", true },
{ "crowleymarine.com", true },
{ "crownaffairs.ch", true },
+ { "crownbouncycastlehire.co.uk", true },
{ "crowncastles.co.uk", true },
{ "crownmarqueehire.co.uk", true },
{ "crownpoint.com", true },
@@ -10728,11 +11183,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crsmsodry.cz", true },
{ "crsoresina.it", true },
{ "crstat.ru", true },
- { "crt2014-2024review.gov", true },
+ { "cruicky.uk", true },
{ "cruisemoab.com", true },
{ "crumbcontrol.com", true },
{ "crunchrapps.com", true },
- { "crunchy.rocks", true },
{ "crustytoothpaste.net", true },
{ "crute.me", true },
{ "crux.camp", true },
@@ -10746,10 +11200,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "crypted.chat", true },
{ "crypteianetworks.com", true },
{ "cryptizy.com", true },
+ { "crypto-clix.xyz", true },
{ "crypto.cat", false },
{ "crypto.graphics", true },
{ "crypto.is", false },
{ "cryptobin.co", true },
+ { "cryptoclix.website", true },
{ "cryptocon.org", true },
{ "cryptoegg.ca", true },
{ "cryptofan.org", true },
@@ -10765,6 +11221,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cryptomail.nl", true },
{ "cryptomaniaks.com", true },
{ "cryptonom.org", true },
+ { "cryptonx.io", true },
{ "cryptonym.com", true },
{ "cryptoparty.at", true },
{ "cryptoparty.tv", true },
@@ -10807,6 +11264,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "csfm.com", true },
{ "csgf.fun", true },
{ "csgf.ru", true },
+ { "csgo.design", true },
{ "csgo.su", true },
{ "csgoswap.com", true },
{ "csharpmarc.net", true },
@@ -10818,7 +11276,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cskentertainment.co.uk", true },
{ "cslaboralistas.pe", true },
{ "csmainframe.com", true },
- { "csokolade.hu", true },
{ "csosa.gov", true },
{ "csovek-idomok.hu", true },
{ "csp.ch", true },
@@ -10826,7 +11283,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cspvalidator.org", true },
{ "csrichter.com", true },
{ "css.direct", false },
- { "css.net", true },
{ "cssai.eu", true },
{ "cssaunion.com", true },
{ "cstanley.net", true },
@@ -10835,9 +11291,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cstrong.nl", true },
{ "csu.st", true },
{ "csust.ac.cn", true },
+ { "csuw.net", true },
{ "csvalpha.nl", true },
{ "cswarzone.com", true },
{ "cswgmbh.de", true },
+ { "csy.hu", true },
{ "ct.search.yahoo.com", false },
{ "ctc-transportation.com", true },
{ "ctcom-peru.com", true },
@@ -10845,7 +11303,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ctf.link", true },
{ "ctj.im", true },
{ "ctkwwri.org", true },
- { "ctl.email", true },
{ "ctliu.com", true },
{ "ctnguyen.de", true },
{ "ctnguyen.net", true },
@@ -10855,9 +11312,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ctoresms.com", true },
{ "ctpe.net", true },
{ "ctrl.blog", true },
- { "ctrld.me", true },
{ "cttso.gov", true },
{ "cu247secure.ie", true },
+ { "cuatroymedia.com", true },
{ "cub-bouncingcastles.co.uk", true },
{ "cubaal.com", true },
{ "cube-cloud.com", true },
@@ -10901,10 +11358,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cultofperf.org.uk", true },
{ "cultura10.com", true },
{ "culturedcode.com", true },
+ { "cultureshift.co", true },
{ "culturesouthwest.org.uk", true },
{ "cumberlandrivertales.com", true },
{ "cuminas.com", true },
{ "cuminas.jp", true },
+ { "cumnock.name", true },
+ { "cumnock.org", true },
{ "cumplegenial.com", true },
{ "cumseface.eu", true },
{ "cumshots-video.ru", true },
@@ -10921,7 +11381,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "curacaodiveguide.com", true },
{ "curamail.co.uk", true },
{ "curatedgeek.com", true },
- { "curatedtaste.com", true },
{ "curbside.com", true },
{ "cureatr.com", true },
{ "curieux.digital", true },
@@ -10964,7 +11423,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "customfitbymj.net", true },
{ "customfitmarketing.com", true },
{ "customgear.com.au", true },
- { "customizeyoursink.com", true },
{ "custompapers.com", true },
{ "customwebsitesplus.com", true },
{ "customwritings.com", true },
@@ -11001,7 +11459,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cvv.cn", true },
{ "cw.center", true },
{ "cwagner.me", true },
- { "cwarren.org", true },
{ "cwbrtrust.ca", true },
{ "cwc.gov", true },
{ "cwgaming.co.uk", true },
@@ -11020,6 +11477,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cwwise.com", true },
{ "cxadd.com", true },
{ "cyanghost.com", true },
+ { "cyber-core.co.uk", true },
{ "cyber-wolfs.com", true },
{ "cyber.je", true },
{ "cyberatlantis.com", true },
@@ -11028,6 +11486,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cybercrew.cc", true },
{ "cybercrime-forschung.de", true },
{ "cybercrime.gov", true },
+ { "cybercustodian.com", true },
{ "cybercymru.co.uk", false },
{ "cyberdean.fr", true },
{ "cyberdiscoverycommunity.uk", true },
@@ -11042,18 +11501,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyberkov.com", true },
{ "cyberlegal.co", true },
{ "cyberlightapp.com", true },
+ { "cyberme.sh", true },
{ "cybermeldpunt.nl", true },
{ "cybermotives.com", true },
{ "cyberogism.com", true },
{ "cyberonesol.com", true },
{ "cyberoptic.de", true },
+ { "cyberpathogen.me", true },
{ "cyberphaze.com", true },
- { "cyberpioneer.net", false },
{ "cyberpubonline.com", true },
{ "cyberregister.nl", true },
{ "cyberregister.org", true },
{ "cybersafesolutions.com", true },
{ "cyberscan.io", true },
+ { "cybersecurity.gr", true },
{ "cybersecurity.nz", true },
{ "cybersecurity.run", true },
{ "cybersecuritychallenge.be", false },
@@ -11064,10 +11525,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyberspect.com", true },
{ "cyberspect.io", true },
{ "cyberstatus.de", true },
+ { "cybertorsk.org", true },
{ "cybertu.be", true },
{ "cyberwars.dk", true },
+ { "cyberweightloss.com", true },
{ "cyberwire.nl", true },
- { "cyberxpert.nl", true },
{ "cybozu.cn", true },
{ "cybozu.com", true },
{ "cyclebeads.com", true },
@@ -11078,7 +11540,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyclop-editorial.fr", true },
{ "cydetec.com", true },
{ "cyfly.org", true },
- { "cygnaltech.com", true },
{ "cygnan.com", true },
{ "cygnatus.com", true },
{ "cygnius.net", true },
@@ -11087,6 +11548,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyl6.com", true },
{ "cylindehea.com", true },
{ "cylindricity.com", true },
+ { "cyllos.me", true },
{ "cynicaloptimist.me", true },
{ "cyon.ch", true },
{ "cyph.audio", true },
@@ -11112,6 +11574,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyumus.com", true },
{ "cyyzaid.cn", false },
{ "czakey.net", true },
+ { "czaw.org", true },
{ "czbix.com", true },
{ "czbtm.com", true },
{ "czc.cz", true },
@@ -11137,9 +11600,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "d0g.cc", true },
{ "d0m41n.name", true },
{ "d0xq.com", true },
+ { "d1ownqs4tcx37f.cloudfront.net", true },
{ "d2.gg", true },
{ "d2ph.com", true },
{ "d2qa61rbluifiq.cloudfront.net", true },
+ { "d3dev.cf", true },
{ "d3lab.net", true },
{ "d3xt3r01.tk", true },
{ "d3xx3r.de", true },
@@ -11147,22 +11612,35 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "d4b.in.ua", true },
{ "d4done.com", true },
{ "d4fx.de", true },
- { "d4x.de", true },
{ "d5197.co", true },
{ "d66.nl", true },
{ "d6729.co", true },
+ { "d6729.com", true },
+ { "d6957.co", true },
{ "d6c5yfulmsbv6.cloudfront.net", true },
{ "d7211.com", true },
- { "d7215.com", true },
{ "d7216.com", true },
{ "d8.io", true },
+ { "d8118.com", true },
+ { "d8228.com", true },
+ { "d8787.net", true },
+ { "d881.net", true },
+ { "d8811.net", true },
+ { "d8816.net", true },
+ { "d8819.com", true },
{ "d8853.com", true },
+ { "d886.net", true },
+ { "d8864.com", true },
{ "d88688.com", true },
- { "d8870.net", true },
{ "d8872.net", true },
+ { "d887vip.com", true },
+ { "d8886.net", true },
+ { "d88877.com", true },
+ { "d888818.com", true },
+ { "d8898.com", true },
{ "d88988.com", true },
{ "d88dc05.com", true },
- { "d88md23.com", true },
+ { "d8998.com", true },
{ "d9297.co", true },
{ "d9397.com", true },
{ "d9721.com", true },
@@ -11172,7 +11650,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "daallexx.eu", true },
{ "dabasstacija.lv", true },
{ "dabuttonfactory.com", true },
- { "dachb0den.net", true },
+ { "dachbleche24-shop.de", true },
{ "dachdecker-ranzenberger.de", true },
{ "dachdeckermeister-egon-weiss.de", true },
{ "dachtechnik-windschuettl.de", true },
@@ -11189,6 +11667,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dadosch.de", true },
{ "dadrian.io", true },
{ "daduke.org", true },
+ { "dadycandoit.com", true },
{ "daemen.org", true },
{ "daemwool.ch", true },
{ "daevel.com", true },
@@ -11203,6 +11682,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dagmarhamalova.cz", true },
{ "dahlberg.cologne", true },
{ "dahliacake.com", true },
+ { "dai.top", true },
+ { "dai94.com", true },
{ "daigakujuken-plus.com", true },
{ "daikoz.com", true },
{ "dailybits.be", true },
@@ -11218,11 +11699,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dairyshrine.org", true },
{ "daisakuikeda.org", true },
{ "daisidaniels.co.uk", true },
- { "daisuki.pw", true },
{ "daisy-peanut.com", true },
{ "daisypeanut.com", true },
{ "daitouryu-jujutsu.com", true },
- { "daiyuu.jp", true },
{ "dajiadu.net", true },
{ "dak.org", true },
{ "dakin.nyc", true },
@@ -11261,7 +11740,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "damonline.dk", true },
{ "dampedia.com", true },
{ "damtosfoods.com", true },
- { "dan-informacijske-varnosti.si", true },
{ "dan-nixon.com", true },
{ "dan.me.uk", true },
{ "danads.com", true },
@@ -11269,12 +11747,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "danandrum.com", true },
{ "danarozmarin.com", true },
{ "danbaldwinart.com", true },
+ { "danbergen.com", true },
{ "danburycampervans.co.uk", true },
{ "dance-colleges.com", true },
{ "danchen.org", true },
{ "dancingcubs.co.uk", true },
- { "dancingshiva.at", false },
{ "dandenongroadapartments.com.au", true },
+ { "dandia.ro", true },
{ "daneandthepain.com", true },
{ "danfromit.co.uk", true },
{ "danfromit.com", true },
@@ -11289,6 +11768,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "daniel-milnes.uk", true },
{ "daniel-ruf.de", true },
{ "daniel-wildhaber.ch", true },
+ { "daniela-schwarz-individuelle-lebensberatung-coaching.de", true },
{ "danielas.boutique", true },
{ "daniele.tech", true },
{ "danielehniss.de", true },
@@ -11304,12 +11784,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "danieljball.co.uk", true },
{ "danieljstevens.com", true },
{ "danielkoster.nl", true },
+ { "danielluisrodriguezs.com", true },
{ "danielmartin.de", true },
{ "danielmiessler.com", true },
{ "danielmoch.com", true },
{ "danielmorell.com", true },
- { "danielmostertman.com", true },
- { "danielmostertman.nl", true },
{ "danieln.tech", true },
{ "danielnaaman.com", true },
{ "danielparker.com.au", true },
@@ -11321,12 +11800,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "danielschreurs.com", true },
{ "danielsfirm.com", true },
{ "danielstach.cz", true },
- { "danielsteiner.net", true },
{ "danielstiner.me", true },
{ "danielthompson.info", true },
{ "danieltollot.de", true },
+ { "danielvanassen.nl", true },
{ "danielvoogsgerd.nl", true },
{ "danielwildhaber.ch", true },
+ { "danifabi.eu", true },
{ "danilapisarev.com", true },
{ "danjesensky.com", true },
{ "dank.ninja", true },
@@ -11341,7 +11821,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dannhanks.com", true },
{ "dannicholas.net", true },
{ "danny-tittel.de", true },
- { "danny.fm", true },
{ "dannycairns.com", true },
{ "dannyrohde.de", true },
{ "dannystevens.co.uk", true },
@@ -11367,10 +11846,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "danwolff.se", true },
{ "danyabanya.com", true },
{ "danzac.com", true },
+ { "dao.spb.su", true },
{ "daop.co.uk", true },
{ "daoro.net", true },
{ "daphne.informatik.uni-freiburg.de", true },
- { "dapim.co.il", true },
+ { "dapianw.com", true },
{ "dara-berlin.de", true },
{ "daracokorilo.com", true },
{ "darani.ch", true },
@@ -11386,8 +11866,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "darinkotter.com", true },
{ "darioackermann.ch", true },
{ "darioclip.com", true },
+ { "dariosirangelo.me", true },
{ "darioturchetti.me", true },
- { "darisni.me", true },
{ "dark-infection.de", true },
{ "dark-vision.cz", true },
{ "dark.ninja", true },
@@ -11435,7 +11915,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dasteichwerk.at", true },
{ "dasug.de", true },
{ "dat4u.de", true },
+ { "data-captive.com", true },
{ "data-detox.de", true },
+ { "data-jt.de", true },
{ "data-wing.ga", false },
{ "data.bayern", true },
{ "data.gov", true },
@@ -11444,13 +11926,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "data.qld.gov.au", false },
{ "data.world", true },
{ "data3w.nl", true },
+ { "databasez.net", true },
{ "databionix.com", true },
{ "databutlr.com", true },
{ "databutlr.net", true },
{ "datacalle.com", true },
+ { "datacandy.com", true },
+ { "datacaptive.com", true },
{ "datadit.hu", true },
+ { "datadyne.technology", true },
{ "datafd.com", true },
{ "datafd.net", true },
+ { "dataformers.at", true },
{ "datagrail.io", true },
{ "dataguidance.com", true },
{ "dataharvest.at", true },
@@ -11461,10 +11948,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "datalife.gr", true },
{ "datalysis.ch", true },
{ "dataprivacysolution.com", true },
- { "dataprotectionadvisors.com", true },
{ "datapun.ch", true },
{ "datapure.net", true },
{ "dataregister.info", true },
+ { "datart.fr", true },
{ "datascience.cafe", true },
{ "datascience.ch", true },
{ "dataskydd.net", true },
@@ -11478,13 +11965,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "datateknologsektionen.se", false },
{ "datatree.nl", true },
{ "datatruckers.com", true },
+ { "datatruckers.email", true },
{ "datatruckers.eu", true },
{ "datatruckers.net", true },
+ { "datatruckers.nl", true },
{ "datatruckers.org", true },
{ "datax-cloud.de", true },
{ "datecougarslocal.com", true },
{ "datelah.com", true },
- { "datelligent.com", true },
{ "datememe.com", true },
{ "datengrab.xyz", true },
{ "datenkeks.de", true },
@@ -11548,6 +12036,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "davidfrancoeur.com", true },
{ "davidgouveia.net", true },
{ "davidgow.net", true },
+ { "davidgreig.uk", true },
{ "davidhanle.com", true },
{ "davidkeane.com", true },
{ "davidkennardphotography.com", true },
@@ -11571,7 +12060,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "davidzeegers.nl", true },
{ "davie3.com", true },
{ "davisdieselandautorepair.com", true },
- { "davisroi.com", true },
{ "davo-usedcars.be", true },
{ "davy-server.com", true },
{ "davypropper.com", true },
@@ -11580,6 +12068,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dawnbringer.eu", true },
{ "dawnbringer.net", true },
{ "dawnofeden.net", true },
+ { "dawnson.is", true },
{ "dawoud.org", true },
{ "dawson-floridavilla.co.uk", true },
{ "dax.guide", true },
@@ -11606,12 +12095,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dbas.cz", true },
{ "dbentertainment.co.uk", true },
{ "dbgamestudio.com", true },
+ { "dbjc.tk", true },
{ "dblcastles.co.uk", true },
{ "dbldub.net", true },
{ "dbmiller.org", true },
{ "dbmteam.com", true },
{ "dborcard.com", true },
{ "dbpkg.com", true },
+ { "dbplanview.com", true },
{ "dbq.com", true },
{ "dbrand.com", true },
{ "dbrgn.ch", true },
@@ -11620,6 +12111,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dc-elektro.de", true },
{ "dc-elektro.eu", true },
{ "dc-occasies.be", true },
+ { "dc-service.by", true },
{ "dc-solution.de", false },
{ "dc1.com.br", true },
{ "dc562.org", true },
@@ -11628,6 +12120,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dcards.in.th", true },
{ "dcbouncycastles.co.uk", true },
{ "dcc.cat", true },
+ { "dccwiki.com", true },
{ "dcdestetica.it", true },
{ "dcepler.net", true },
{ "dchatelain.ch", true },
@@ -11640,10 +12133,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dcpower.eu", true },
{ "dcrdev.com", true },
{ "dcw.io", true },
+ { "dcyph.de", true },
{ "dd211d.com", true },
{ "dd5197.co", true },
{ "dd6729.co", true },
{ "dd6729.com", true },
+ { "dd6957.co", true },
{ "dd7211.com", true },
{ "dd9297.co", true },
{ "dd9397.com", true },
@@ -11651,6 +12146,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dd9728.co", true },
{ "ddatsh.com", true },
{ "ddays2008.org", true },
+ { "dddmelbourne.com", true },
{ "ddel.de", true },
{ "dden.ca", true },
{ "ddepot.us", true },
@@ -11676,6 +12172,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "deadmorose.ru", true },
{ "deaf.dating", true },
{ "deaf.eu.org", true },
+ { "deal30.fr", true },
{ "dealapp.nl", true },
{ "dealbanana.at", true },
{ "dealbanana.be", true },
@@ -11688,9 +12185,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dealbanana.it", true },
{ "dealbanana.se", true },
{ "dealcruiser.nl", true },
+ { "dealdump.nl", true },
{ "dealerselectric.com", true },
{ "dealinflatables.co.uk", true },
- { "dealpass.no", true },
{ "dealspotr.com", true },
{ "dealszone.net", true },
{ "deamuseum.org", true },
@@ -11706,6 +12203,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dearktiel.nl", true },
{ "dearnevalleybouncycastles.co.uk", true },
{ "death.social", true },
+ { "deathberry.ddns.net", true },
{ "deathofspring.com", true },
{ "deathsdomain.com", true },
{ "deathy.ro", true },
@@ -11713,18 +12211,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "deavel.com", true },
{ "deavel.fr", true },
{ "deavel.net", true },
- { "debarrasantony.com", true },
- { "debarrasasnieressurseine.com", true },
- { "debarrasboulognebillancourt.com", true },
- { "debarrasclichy.com", true },
- { "debarrascolombes.com", true },
- { "debarrasnanterre.com", true },
{ "debatereport.com", true },
{ "debbyefurd.com", true },
{ "debie-usedcars.be", true },
+ { "debierhandel.nl", true },
{ "debigare.com", true },
- { "debora-singkreis.de", true },
- { "debraydesign.com.au", true },
{ "debron-ot.nl", true },
{ "debrusoft.ch", true },
{ "debt.com", true },
@@ -11732,16 +12223,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "debuemon.com", true },
{ "debuis.nl", true },
{ "dec6.gc.ca", true },
+ { "decaffeinated.io", true },
{ "decal-times.com", true },
{ "decalquai.ch", true },
- { "decay24.de", true },
- { "decayshop.com", true },
{ "decfun.com", true },
{ "dechat.nl", true },
{ "decher.de", true },
{ "decidetreatment.org", true },
{ "decidio.cc", true },
{ "decimatechnologies.eu", true },
+ { "decipe.com", true },
{ "decis.fr", true },
{ "decisivetactics.com", true },
{ "deckbuilderamerica.com", true },
@@ -11749,7 +12240,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "declivitas.com", true },
{ "deco-parisienne.fr", true },
{ "decock-usedcars.be", true },
- { "decodeanddestroy.com", true },
{ "decompiled.de", true },
{ "deconsolas.tk", true },
{ "decoora.com", true },
@@ -11757,6 +12247,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "decor-live.ru", true },
{ "decor-prazdnik.ru", true },
{ "decoratingadvice.co.uk", true },
+ { "decorativeconcretewa.com.au", true },
{ "decoratore.roma.it", true },
{ "decoratrix.com", true },
{ "decorestilo.com.br", true },
@@ -11771,23 +12262,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dedge.org", true },
{ "dedicatedtowomenobgyn.com", true },
{ "dedmorozrzn.ru", false },
+ { "dedoho.pw", true },
{ "deduijventil.nl", true },
{ "dee.pe", true },
{ "dee.su", true },
{ "deechtebakkers.nl", true },
{ "deegeeinflatables.co.uk", true },
- { "deejayevents.ro", true },
{ "deelmijnreis.nl", true },
{ "deep-chess.com", true },
{ "deep-labs.com", true },
{ "deep.club", true },
{ "deeparamaraj.com", true },
+ { "deepblue-web.cn", true },
{ "deepbluecrafting.co.uk", true },
{ "deepblueemail.com", true },
{ "deepcode.io", true },
{ "deephill.com", true },
{ "deepinnov.com", true },
{ "deepinsight.io", true },
+ { "deeplink-medical.com", true },
{ "deeps.me", true },
{ "deepserve.info", true },
{ "deepsouthsounds.com", true },
@@ -11797,20 +12290,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "deerfieldapartmentsstl.com", true },
{ "def-pos.ru", true },
{ "defantasia.cl", true },
- { "defcon.org", true },
- { "defcongroups.org", true },
{ "defeestboek.nl", true },
{ "defendas.com", true },
{ "defender-pro.com", true },
{ "defendersz.com", true },
{ "defendinnovation.org", true },
- { "defendtheweb.co.uk", true },
+ { "defensivefirearmsinstruction.org", true },
{ "defero.io", true },
{ "defiantrust.com", true },
+ { "defibrillateur.co", true },
{ "define-atheism.com", true },
{ "define-atheist.com", true },
{ "defineatheism.com", true },
{ "defineatheist.com", true },
+ { "definitions360.com", true },
{ "deflect.ca", true },
{ "deflumeri.com", true },
{ "deflumeriker.com", true },
@@ -11831,7 +12324,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "degoticapunk.xyz", true },
{ "degoulet.net", true },
{ "degracetechnologie.com", true },
- { "degrasboom.nl", true },
+ { "degradarium.com", true },
{ "degroupage.info", true },
{ "dehopre.com", true },
{ "deidee.nl", true },
@@ -11857,11 +12350,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dekulk.nl", true },
{ "delahrzolder.nl", true },
{ "delam.site", true },
+ { "delandalucia.com", true },
{ "delbecqvo.be", true },
{ "deleenheir.be", true },
{ "deleidscheflesch.nl", true },
{ "delfic.org", true },
- { "delfino.cr", true },
{ "delhionlinegifts.com", true },
{ "deli-tochigi.jp", true },
{ "deliacreates.com", true },
@@ -11873,11 +12366,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "delicioustable.com", true },
{ "delid.cz", true },
{ "deliver.moe", true },
- { "delkniga42.ru", true },
{ "dellipaoli.com", true },
{ "delogo.nl", true },
{ "delopt.co.in", true },
{ "delorenzi.dk", true },
+ { "delpark.de", true },
{ "delphia.ai", true },
{ "delphia.com", true },
{ "delphine.dance", true },
@@ -11893,6 +12386,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "deltaservers.blog.br", true },
{ "deltaservers.com.br", true },
{ "deltasigmachi.org", true },
+ { "deltav.ml", true },
{ "deltava.org", true },
{ "deltawolf.tk", true },
{ "demarle.ch", true },
@@ -11905,6 +12399,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "demiranda.com", true },
{ "demmer.one", true },
{ "demo.swedbank.se", true },
+ { "demo9.ovh", true },
{ "democracychronicles.com", true },
{ "democracyineurope.eu", true },
{ "democraziaineuropa.eu", true },
@@ -11922,7 +12417,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "denardbrewing.com", true },
{ "denariu.net", true },
{ "denbkh.ru", true },
- { "dengchangdong.com", true },
{ "dengode.eu", true },
{ "denied.gr", true },
{ "denimtoday.com", true },
@@ -11936,6 +12430,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "denkubator.de", true },
{ "dennisang.com", true },
{ "dennisdoes.net", false },
+ { "dennisforbes.ca", true },
+ { "dennishzg.com", true },
{ "denniskoot.nl", true },
{ "dennismurphy.biz", true },
{ "dennogumi.org", true },
@@ -11961,14 +12457,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "deparis.me", true },
{ "depeces.com", true },
{ "depechemode-live.com", true },
- { "deped.io", true },
{ "depedclub.net", true },
- { "depedncr.com", true },
{ "depedsurigaodelnorte.com", true },
- { "depedtalks.com", true },
{ "depedtambayan.net", true },
- { "depedtambayan.org.ph", true },
- { "depedtayo.com", true },
{ "depedtayo.ph", true },
{ "depicus.com", true },
{ "depilacioncon.com", true },
@@ -11980,7 +12471,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "depotsquarekerrville.com", true },
{ "depotter-usedcars.be", true },
{ "deprecate.de", true },
- { "depth-co.jp", true },
+ { "deprobe.pro", true },
{ "depthe.gr", true },
{ "depuratori.milano.it", true },
{ "der-bank-blog.de", true },
@@ -11997,7 +12488,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "derbuntering.de", true },
{ "derbybouncycastles.com", true },
{ "derbyware.com", true },
+ { "derco.com.co", true },
{ "derdewereldrommelmarkt.nl", true },
+ { "dereddingsklos.nl", true },
{ "dereferenced.net", true },
{ "derehamcastles.co.uk", true },
{ "derekbooth.co.uk", true },
@@ -12010,6 +12503,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dergeilstestammderwelt.de", true },
{ "derhil.de", true },
{ "derivedata.com", true },
+ { "derkuki.de", true },
{ "derma-expert.eu", true },
{ "dermapuur.nl", true },
{ "dermato.floripa.br", true },
@@ -12044,7 +12538,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "designedcybersecurity.com", true },
{ "designer-drug.com", true },
{ "designera.se", true },
- { "designerchad.com", true },
{ "designhotel-kronjuwel.de", true },
{ "designhuddle.com", true },
{ "designsbyjanith.com", true },
@@ -12063,11 +12556,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "desormiers.com", true },
{ "despertadoronline.com.es", true },
{ "desplats.com.ar", true },
+ { "despora.de", true },
{ "dessinemoilademocratie.ch", true },
{ "destech.nl", true },
{ "destinattorneyjohngreene.com", true },
{ "destinoytarot.com", true },
{ "destinyofthephoenix.me", false },
+ { "destyntek.com", true },
{ "desu.ne.jp", true },
{ "desuchan.eu", true },
{ "desuchan.org", true },
@@ -12088,7 +12583,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dethikiemtra.com", true },
{ "detodojuegos.com", true },
{ "detoxetmoi.com", true },
- { "detoxic.vn", true },
+ { "detrapdoor.com", true },
{ "detroit-english.de", true },
{ "detroitzoo.org", true },
{ "detskysad.com", true },
@@ -12141,13 +12636,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "developyourelement.com", true },
{ "develux.com", true },
{ "develux.net", true },
- { "devh.net", true },
- { "deviajesturismo.com", true },
{ "deviant.email", true },
{ "devillers-occasions.be", true },
{ "devils-point.de", true },
{ "devilshakerz.com", true },
- { "deviltraxxx.de", true },
{ "devinfo.net", false },
{ "devinite.com", true },
{ "devirc.net", true },
@@ -12157,12 +12649,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "devlatron.net", true },
{ "devlogr.com", true },
{ "devnull.zone", true },
+ { "devolution.ws", true },
{ "devonsawatzky.ca", true },
{ "devopers.com.br", true },
{ "devops-survey.com", true },
+ { "devops.pf", true },
{ "devragu.com", true },
{ "devrandom.net", true },
{ "devries.one", true },
+ { "devrim.io", true },
{ "devsjournal.com", true },
{ "devsrvr.ru", true },
{ "devstaff.gr", true },
@@ -12203,8 +12698,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dfl.mn", false },
{ "dflcares.com", true },
{ "dfmn.berlin", true },
- { "dfranke.com", true },
- { "dg7.in", true },
{ "dgblaw.com.au", false },
{ "dgbouncycastlehire.com", true },
{ "dgeex.eu", true },
@@ -12228,7 +12721,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dhemant.de", true },
{ "dhhs.gov", true },
{ "dhinflatables.co.uk", true },
- { "dhlinux.org", true },
{ "dhome.at", true },
{ "dhuy.net", false },
{ "di2pra.com", true },
@@ -12237,6 +12729,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dia.com.br", true },
{ "diabetessucks.net", true },
{ "diablovalleytech.com", true },
+ { "diadiemdangsong.com", true },
{ "diadorafitness.it", true },
{ "diagnoseo.com", true },
{ "diagnoseo.pl", true },
@@ -12257,6 +12750,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dianurse.com", true },
{ "diare-na-miru.cz", true },
{ "diario-egipto.com", true },
+ { "diariodearaxa.com.br", true },
+ { "diarionoticia.pe", true },
{ "diaroma.it", true },
{ "diarynote.jp", true },
{ "diasdasemana.com", true },
@@ -12282,6 +12777,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dicionariofinanceiro.com", true },
{ "dicionariopopular.com", true },
{ "dicionarios.cc", true },
+ { "dick.red", true },
{ "dickord.cloud", true },
{ "dickord.club", true },
{ "dickpics.ru", true },
@@ -12302,7 +12798,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "didtrumpopengovernmentyet.com", true },
{ "die-bergfuehrer.de", true },
{ "die-besten-bewertungen.de", true },
- { "die-blahuts.de", true },
{ "die-borts.ch", true },
{ "die-gruenen-teufel.de", true },
{ "die-machons.de", true },
@@ -12320,6 +12815,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "diegelernten.de", true },
{ "diegerbers.de", true },
{ "diegogelin.com", true },
+ { "diegogonzalez.com.co", true },
{ "diegorbaquero.com", true },
{ "diegotoledo.com.br", true },
{ "diehl.io", true },
@@ -12329,7 +12825,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dienchaninstitute.com", true },
{ "diendorfer.space", true },
{ "dienstplan.cc", true },
- { "dienstplan.one", true },
{ "dierabenmutti.de", true },
{ "dieradvies.nl", true },
{ "dierenartsdeconinck.be", true },
@@ -12368,10 +12863,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "digicy.cloud", true },
{ "digideli.ee", true },
{ "digidroom.be", true },
+ { "digihoc.com", true },
{ "digilicious.com", true },
{ "digimagical.com", true },
{ "digimedia.cd", false },
- { "digioccumss.ddns.net", true },
{ "digipost.no", true },
{ "digired.ro", true },
{ "digit.ec", true },
@@ -12382,11 +12877,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "digital-insurance-platform.com", true },
{ "digital-insurance-platform.de", true },
{ "digital-liberal.ch", true },
- { "digital-muscle.com.au", true },
{ "digital-sculpture.org", true },
{ "digital.gov", false },
{ "digital.govt.nz", true },
{ "digital1st.co.uk", true },
+ { "digital2web.com", false },
{ "digitalallies.co.uk", true },
{ "digitalarchitecture.com", true },
{ "digitalbitbox.com", true },
@@ -12395,6 +12890,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "digitalcitizen.ro", true },
{ "digitalcraftmarketing.co.uk", true },
{ "digitalcreationclass.com", true },
+ { "digitaldashboard.gov", true },
{ "digitaldatacenter.net", true },
{ "digitaldeli.com", true },
{ "digitaldeli.org", true },
@@ -12452,7 +12948,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dimagrimentoincorso.it", true },
{ "dimanet.fr", true },
{ "dimanss47.net", true },
- { "dimdom.com.br", true },
{ "dime-staging.com", true },
{ "dime.io", true },
{ "dimeponline.com.br", true },
@@ -12468,7 +12963,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dimmersoakpark.com", true },
{ "dimmersthousandoaks.com", true },
{ "dimmerswestlakevillage.com", true },
+ { "dimo-analytics.fr", true },
+ { "dimo-crm.fr", true },
+ { "dimo-dematerialisation.com", true },
+ { "dimo-tresorerie.fr", true },
+ { "dimomaint-sav.fr", true },
{ "dimonb.com", true },
+ { "dimosoftware.fr", true },
{ "din-hkd.jp", true },
{ "dineachook.com.au", true },
{ "dinepont.fr", true },
@@ -12481,6 +12982,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dinocarrozzeria.com", true },
{ "dinstec.cl", true },
{ "dintrafic.net", true },
+ { "dinube.com", true },
{ "diodeled.com", true },
{ "diodo.me", true },
{ "dionysos-ios.gr", true },
@@ -12511,6 +13013,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "directscripts.com", true },
{ "directspa.fr", true },
{ "direktvermarktung-schmitzberger.at", true },
+ { "diretashop.com", true },
{ "dirk-scheele.de", true },
{ "dirk-weise.de", true },
{ "dirkdoering.de", true },
@@ -12519,11 +13022,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dirkwolf.de", true },
{ "dirtcraft.ca", true },
{ "dirtinmyshoes.com", true },
+ { "dirtygeek.ovh", true },
{ "dirtyincest.com", true },
{ "dirtyprettyartwear.com", true },
{ "dirtytiles.xyz", true },
{ "disability.gov", true },
+ { "disabled-world.com", true },
{ "disabled.dating", true },
+ { "disadattamentolavorativo.it", true },
{ "disanteimpianti.com", true },
{ "disavow.tools", true },
{ "disc.uz", true },
@@ -12542,13 +13048,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "discord4j.com", true },
{ "discordapp.com", true },
{ "discordbee.com", true },
- { "discordghost.space", true },
{ "discordia.me", true },
{ "discordservers.com", true },
{ "discotek.club", true },
{ "discount24.de", true },
{ "discountlumberspokane.com", true },
{ "discountplush.com", true },
+ { "discountpokale.at", true },
+ { "discountpokale.de", true },
{ "discover-shaken.com", true },
{ "discoverthreejs.com", true },
{ "discoverucluelet.com", true },
@@ -12561,6 +13068,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "disinclined.org", true },
{ "disinfesta.it", true },
{ "disinfestando.info", true },
+ { "disinfestatore.roma.it", true },
{ "disinfestatori.com", true },
{ "disinfestazione.brescia.it", true },
{ "disinfestazione.torino.it", true },
@@ -12598,6 +13106,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "disking.co.uk", true },
{ "dismail.de", true },
{ "displayenergycertificate.co.uk", true },
+ { "displaysfas.com", true },
{ "disposable.link", true },
{ "disroot.org", true },
{ "disrupters.ch", true },
@@ -12610,12 +13119,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "distiduffer.org", true },
{ "distillery.com", true },
{ "distinguishedprisoner.com", true },
+ { "distortmotion.com", true },
{ "distracteddriving.gov", true },
{ "distraction.gov", true },
{ "distratus.com", true },
{ "distribuidoracristal.com.br", true },
{ "distribuidoraplus.com", true },
{ "distribuidorveterinario.es", true },
+ { "districtcapital.com", true },
{ "distro.fr", true },
{ "ditelbat.com", true },
{ "diti.me", true },
@@ -12630,11 +13141,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "divegearexpress.net", true },
{ "diveidc.com", true },
{ "diveplan.org", true },
+ { "diver-equipment.eu", true },
{ "diversifiedproduct.com", true },
{ "diversityflags.com", true },
{ "diversityflags.com.au", true },
{ "diversityflags.nz", true },
- { "divertiagua.com.br", true },
{ "divewithfrank.com", true },
{ "divi-experte.de", true },
{ "dividendz.net", true },
@@ -12644,9 +13155,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "divinemercyparishvld.com", true },
{ "diving.photo", true },
{ "divingforlife.org", true },
+ { "divisasexpress.com", true },
{ "divisuite.com", true },
{ "divorcelawyersformen.com", true },
- { "divorciosmurcia.com", true },
{ "diwei.vip", true },
{ "dixi.fi", true },
{ "dixibox.com", true },
@@ -12657,7 +13168,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "diyosun.com", true },
{ "diytechguides.com", true },
{ "diyvideoeditor.com", true },
- { "dizzie.org", true },
{ "dizzythewizard.co.uk", true },
{ "dj-leszwolle.nl", true },
{ "dj-x.info", true },
@@ -12675,7 +13185,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "djipanov.com", true },
{ "djleon.net", true },
{ "djlinux.cz", true },
- { "djlive.pl", true },
{ "djlnetworks.co.uk", true },
{ "djsbouncycastlehire.com", true },
{ "djt-vom-chausseehaus.de", true },
@@ -12699,9 +13208,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dlfsymposium.nl", true },
{ "dlitz.net", true },
{ "dll4free.com", true },
- { "dlld.biz", true },
{ "dlld.com", true },
- { "dlld.info", true },
{ "dlld.org", true },
{ "dlld.us", true },
{ "dlrsp.org", true },
@@ -12726,13 +13233,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dmhtwebordering.com", true },
{ "dmi.es", true },
{ "dmitry.sh", true },
+ { "dmix.ca", true },
{ "dmk-realestate.com", true },
{ "dmmkenya.co.ke", false },
{ "dmmultionderhoud.nl", true },
{ "dmn.sh", true },
{ "dmoj.ca", true },
{ "dmparish.com", true },
- { "dmschilderwerken.nl", true },
+ { "dmxledlights.com", true },
{ "dn3s.me", true },
{ "dn42.eu", false },
{ "dn42.us", true },
@@ -12754,15 +13262,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dnscrawler.com", true },
{ "dnscrypt-blacklist.tk", true },
{ "dnscrypt.info", true },
- { "dnscrypt.nl", true },
{ "dnscurve.io", true },
+ { "dnsge.org", true },
{ "dnshallinta.fi", true },
+ { "dnsipv6.srv.br", true },
{ "dnskeep.com", true },
{ "dnskeeper.com", true },
{ "dnsman.se", true },
+ { "dnsmate.net", true },
{ "dnspod.ml", true },
{ "dnsrate.com", true },
{ "dnstwister.report", true },
+ { "dnswarden.com", true },
{ "do-prod.com", true },
{ "do.gd", true },
{ "do.search.yahoo.com", false },
@@ -12787,7 +13298,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dochitaceahlau.ro", true },
{ "dockerbook.com", false },
{ "dockerup.net", true },
+ { "dockflow.com", true },
+ { "dockstarter.com", true },
{ "docline.gov", true },
+ { "docloh.de", true },
{ "docloudu.info", true },
{ "docplexus.com", true },
{ "docs.google.com", false },
@@ -12801,6 +13315,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "doctor.dating", true },
{ "doctorbini.com", true },
{ "doctorfox.co.uk", true },
+ { "doctorperu.com", true },
{ "doctorsonmaps.com", true },
{ "doctorwho.cz", true },
{ "doctorxdentist.com", true },
@@ -12809,7 +13324,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "docudanang.com.vn", true },
{ "documaniatv.com", true },
{ "docusearch.com", true },
- { "doda.space", true },
{ "dodds.cc", true },
{ "dodopri.com", true },
{ "doenjoylife.com", true },
@@ -12823,15 +13337,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dogcontrol.ca", true },
{ "dogear.ch", true },
{ "dogforum.de", true },
- { "dogft.com", true },
{ "doggedbyirs.com", true },
{ "doggo.cloud", true },
{ "doggo.dance", true },
{ "doggo.email", true },
{ "doggroomingcourse.com", true },
- { "doggybag-committee.com", true },
{ "dogmap.jp", true },
- { "dogodki.today", true },
{ "dogoo.com", true },
{ "dogpawstudio.com", true },
{ "dogrescuegreece.nl", true },
@@ -12841,9 +13352,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "doitauto.de", true },
{ "dojozendebourges.fr", true },
{ "dokelio-idf.fr", true },
- { "doki.space", true },
+ { "doki.space", false },
{ "dokipy.no", true },
{ "dokuboard.com", true },
+ { "dolcesalatoweb.it", true },
{ "dolci-delizie.de", true },
{ "dolciterapie.com", true },
{ "doleta.gov", true },
@@ -12851,6 +13363,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dolice.net", true },
{ "dolinathome.com", true },
{ "dollarrp.pl", true },
+ { "dollchan.org", true },
{ "dollemore.com", true },
{ "dollhousetoyo.com", true },
{ "dolorism.com", true },
@@ -12860,7 +13373,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "domadillo.com", true },
{ "domain-ermittlung.de", true },
{ "domain-swiss.ch", true },
- { "domain001.info", true },
{ "domainedemiolan.ch", true },
{ "domainexpress.de", false },
{ "domainkauf.de", true },
@@ -12898,6 +13410,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dominique-haas.fr", false },
{ "dominoknihy.cz", true },
{ "dominomatrix.com", true },
+ { "domjh.com", true },
{ "dommascate.com.br", true },
{ "domob.eu", true },
{ "domodeco.fr", true },
@@ -12929,12 +13442,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "domyzitrka.cz", true },
{ "domznak.ru", true },
{ "donabeneko.jp", true },
+ { "donaldjenkins.com", true },
{ "donaldm.co.uk", true },
+ { "donateabox.org", true },
{ "donateaday.net", true },
{ "donateway.com", true },
{ "donation.ph", true },
{ "donboscogroep.nl", true },
- { "donetsk24.su", true },
{ "donfelino.tk", false },
{ "dongcdn.com", true },
{ "dongxuwang.com", true },
@@ -12954,6 +13468,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "donna-bellini-hochzeitsfotograf-frankfurt.de", true },
{ "donna-bellini-hochzeitsfotograf-muenchen.de", true },
{ "donnaandscottmcelweerealestate.com", true },
+ { "donnabrothers.com", true },
{ "donnacha.blog", true },
{ "donnachie.net", true },
{ "donnajeanbooks.com", true },
@@ -12963,6 +13478,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "donotcall.gov", true },
{ "donotlink.it", true },
{ "donovankraag.nl", true },
+ { "donpomodoro.com.co", true },
{ "dont.re", true },
{ "dont.watch", true },
{ "dontbeevil.com", true },
@@ -12970,6 +13486,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dontcageus.org", true },
{ "donthedragonwilson.com", true },
{ "dontpayfull.com", true },
+ { "donttrust.me", true },
{ "donutcompany.co.jp", true },
{ "dooby.fr", true },
{ "dooleylabs.com", true },
@@ -12987,17 +13504,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "doorswest.net", true },
{ "doortim.nl", true },
{ "dopesoft.de", true },
+ { "dophys.top", true },
{ "doppeleinhorn.de", true },
{ "dopravni-modely.cz", true },
{ "dopsi.ch", true },
+ { "dor-tak.com", true },
+ { "dor-tak.ru", true },
{ "dora.moe", true },
{ "dorco.be", true },
{ "dorde.eu", true },
{ "dorfbaeck.at", true },
{ "dorfbrunnen.eu", true },
+ { "dorfpark-falkenburg.de", true },
{ "doriangirod.ch", true },
{ "dorianharmans.nl", true },
- { "dorianmuthig.com", true },
{ "doridian.com", true },
{ "doridian.de", true },
{ "doridian.net", true },
@@ -13062,6 +13582,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "doubleavineyards.com", true },
{ "doubledash.org", true },
{ "doublefun.net", true },
+ { "doubleglazingmasters.com.au", true },
+ { "doublelist.com", true },
{ "doublestat.me", true },
{ "doubleup.com.au", true },
{ "doucheba.gs", false },
@@ -13088,13 +13610,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "downloads.zdnet.com", true },
{ "downloadsoftwaregratisan.com", true },
{ "downrightcute.com", true },
- { "downthe.pub", true },
{ "downtimerobot.nl", true },
{ "downtownautospecialists.com", true },
{ "downtownstevenspoint.org", true },
{ "downtownvernon.com", true },
+ { "downunderporn.com", true },
{ "dox-box.eu", true },
{ "doxal.ro", true },
+ { "doyleshamrock.com", true },
{ "doyoucheck.com", false },
{ "doyouedc.com", true },
{ "doyoutax.com", true },
@@ -13102,16 +13625,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "doze-cloud.tech", true },
{ "dozecloud.com", true },
{ "dp.cx", true },
- { "dp2.com.br", true },
{ "dpd.com.pl", true },
{ "dpecuador.com", true },
{ "dperson.net", true },
{ "dpfsolutionsfl.com", true },
{ "dpg.no", true },
+ { "dphipartner.com", true },
{ "dpi-design.de", true },
{ "dpisecuretests.com", true },
{ "dpm-ident.de", true },
{ "dponetwork.nl", true },
+ { "dposit.com", true },
+ { "dposit.email", true },
+ { "dposit.eu", true },
+ { "dposit.net", true },
+ { "dposit.org", true },
{ "dprb.biz", true },
{ "dprd-wonogirikab.go.id", false },
{ "dps.srl", true },
@@ -13120,7 +13648,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dpwsweeps.co.uk", true },
{ "dr-becarelli-philippe.chirurgiens-dentistes.fr", true },
{ "dr-bodendorf.de", true },
- { "dr-it.co.uk", true },
+ { "dr-it.co.uk", false },
{ "dr-jakob-zahnaerzte.de", true },
{ "dr-klotz.info", true },
{ "dr-knirr.de", true },
@@ -13129,11 +13657,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dr-moldovan.de", true },
{ "dr-nystroem.de", true },
{ "dr-peter-jahn.de", true },
+ { "dr-royaghafourifard.com", true },
{ "dr-schlamminger.de", true },
{ "dr-schmutzer.de", true },
{ "dr-schuessler.de", true },
{ "dr-stoetter.de", true },
{ "dr-www.de", true },
+ { "dr.mg", true },
{ "dr2dr.ca", true },
{ "draadloos-besturen.nl", true },
{ "draadloze-noodstop.nl", true },
@@ -13176,12 +13706,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drake.partners", true },
{ "drakecommercial.com", true },
{ "drakeluce.com", true },
+ { "drakensberg-tourism.com", true },
{ "drakenson.de", true },
+ { "drakoacademy.org", true },
{ "draliabadi.com", true },
{ "dramaticpeople.com", true },
{ "dramyalderman.com", true },
{ "dranderle.com", true },
+ { "dranktoomuchlastnight.com", true },
+ { "dranous.com", true },
{ "dras.hu", true },
+ { "dratini0.hu", true },
{ "draugr.de", true },
{ "draw.uy", true },
{ "drawchan.org", true },
@@ -13220,26 +13755,31 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dreamstream.nl", true },
{ "dreamstream.tv", true },
{ "dreamstream.video", true },
+ { "dreamstudio.com", true },
+ { "dreamsxxl.com", true },
{ "dreamz-staging.zone", true },
{ "dreamz.com", true },
+ { "dreatho.com", true },
{ "dreax.win", true },
+ { "dreemurr.com", true },
{ "drei01.com", true },
{ "drei01.de", true },
{ "drei01.technology", true },
{ "dreid.org", true },
- { "dreiweiden.de", true },
{ "dresden-kaffee-24.de", true },
{ "dresden-kaffeeroesterei.de", true },
{ "dresdener-mandelstollen.de", true },
{ "dresdens-pfefferkuchenprinzessin.de", true },
{ "dresdner-kaffeeroesterei.de", true },
{ "dresdner-mandelstollen.de", true },
+ { "dresdner-stollen-von-reimann.de", true },
{ "dresdner-stollen.shop", true },
{ "dress-cons.com", true },
{ "dressify.in", true },
{ "drevanbeale.com", true },
{ "drevo-door.cz", false },
{ "drew.beer", true },
+ { "drew.life", true },
{ "drew.red", true },
{ "drewapianostudio.com", true },
{ "dreweryinc.com", true },
@@ -13249,10 +13789,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drezzy.it", true },
{ "drfranciscofonseca.com.br", true },
{ "drfrey.ch", true },
- { "drfun1.com", true },
+ { "drgeadsdavinci.com", true },
{ "drgerthplasticsurgery.com", true },
{ "drghomi.com", true },
{ "drglassgyn.com", true },
+ { "drgn.li", true },
{ "drgn.no", true },
{ "drgrace.ca", true },
{ "drhathazi.hu", true },
@@ -13281,8 +13822,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "driver61.com", true },
{ "drivercopilot.com", true },
{ "driverless.id", true },
+ { "drivermototaxi.fr", true },
{ "driverprofiler.co.uk", true },
{ "driverscollection.com", true },
+ { "drivetonortheast.com", true },
{ "drivinghorror.com", true },
{ "drivinhors.com", true },
{ "drivya.com", true },
@@ -13302,6 +13845,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drmcdaniel.com", true },
{ "drms.us", true },
{ "drmtransit.com", true },
+ { "drogavista.com.br", true },
{ "droidandy.com", true },
{ "droidapp.nl", true },
{ "droidgyan.com", true },
@@ -13319,6 +13863,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drop.com", true },
{ "dropbox.com", true },
{ "dropboxer.net", true },
+ { "droperplus.com", true },
{ "dropistic.com", true },
{ "dropq.nl", true },
{ "dropscloud.spdns.de", true },
@@ -13331,12 +13876,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "drpetervoigt.de", true },
{ "drphillipsmwc.com", true },
{ "drpico.com.au", true },
- { "drpure.top", true },
{ "drrr.chat", true },
{ "drrr.wiki", true },
{ "drsajjadian.com", true },
{ "drsamuelkoo.com", true },
- { "drschlarb.eu", true },
{ "drsturgeonfreitas.com", true },
{ "drsubbio.com", true },
{ "drtimmarch.com", true },
@@ -13366,6 +13909,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dryerventcleaningarlington.com", true },
{ "dryerventcleaningcarrollton.com", true },
{ "dryjersey.com", true },
+ { "dryudha.site", true },
{ "drywallresponse.gov", true },
{ "ds67.de", true },
{ "dsancomics.com", true },
@@ -13380,9 +13924,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dsgholsters.com", true },
{ "dsgnet.hu", true },
{ "dsgvo-addon.eu", true },
+ { "dsgvo-analyse.de", true },
{ "dsgvo.name", true },
{ "dsh.io", true },
{ "dshield.org", true },
+ { "dsi7.com", true },
+ { "dsimons.tk", true },
{ "dsm5.com", true },
{ "dsmjs.com", true },
{ "dsmnet.org", true },
@@ -13394,22 +13941,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dstat.cc", true },
{ "dsteiner.at", true },
{ "dstvinstallalberton.co.za", true },
- { "dstvinstalledenvale.co.za", true },
{ "dstvinstallglenvista.co.za", true },
{ "dstvinstalljohannesburg.co.za", true },
- { "dstvinstallkemptonpark.co.za", true },
{ "dstvinstallrandburg.co.za", true },
- { "dstvrandburg.co.za", true },
- { "dstvsandton.co.za", true },
- { "dstvsouthafrica.com", true },
{ "dsuinnovation.com", true },
{ "dt27.org", true },
+ { "dt688.net", true },
{ "dtbouncycastles.co.uk", true },
+ { "dtbw.eu", true },
+ { "dtbw.net", true },
+ { "dtbw.org", true },
{ "dtdsh.com", true },
{ "dtg-fonds.com", true },
{ "dtg-fonds.de", true },
{ "dtg-fonds.net", true },
{ "dtk-vom-chausseehaus.de", true },
+ { "dtmbx.com", true },
+ { "dtmbx.email", true },
+ { "dtmbx.eu", true },
+ { "dtmbx.net", true },
+ { "dtmbx.nl", true },
+ { "dtmbx.org", true },
{ "dtnx.eu", true },
{ "dtnx.net", true },
{ "dtnx.org", true },
@@ -13418,7 +13970,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dtuaarsfest.dk", true },
{ "dtx.sk", true },
{ "du-alex.ru", true },
- { "dualascent.com", true },
+ { "duama.top", true },
{ "dub.cz", true },
{ "dubai-company.ae", true },
{ "dubaieveningsafari.com", true },
@@ -13432,6 +13984,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dubtrack.fm", true },
{ "ducalendars.com", true },
{ "duch.cloud", true },
+ { "duchateaugyn.be", true },
{ "duckbase.com", true },
{ "duckblade.com", true },
{ "duckcorp.org", true },
@@ -13442,14 +13995,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "duckinc.net", true },
{ "duct.me", true },
{ "dudesunderwear.com.br", false },
+ { "due-diligence-security.com", true },
{ "duernberg.at", true },
{ "duesee.org", true },
{ "duesterhus.eu", true },
{ "dufrei.com", true },
- { "dugnet.com", false },
- { "dugnet.io", false },
- { "dugnet.net", false },
- { "dugnet.org", false },
+ { "duggtec.com", true },
{ "dugunedavet.com", true },
{ "duh.se", true },
{ "duijf.info", true },
@@ -13480,9 +14031,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dunkle-seite.org", true },
{ "dunloptrade.com", true },
{ "dunmanelectric.com", true },
+ { "dunyahalleri.com", true },
{ "duobus.nl", true },
{ "duoluodeyu.com", true },
{ "duoquadragintien.fr", true },
+ { "duoyin.com", true },
{ "dupisces.com.tw", true },
{ "duplicazionechiavi.it", true },
{ "duploclique.pt", false },
@@ -13490,8 +14043,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dupree.pe", true },
{ "durand.tf", true },
{ "duranthon.eu", true },
- { "durbanlocksmiths.co.za", true },
- { "durchblick-shop.de", true },
{ "durdle.com", true },
{ "dureuil.info", true },
{ "durfteparticiperen.nl", true },
@@ -13503,7 +14054,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dusmomente.com", true },
{ "dustplanet.de", true },
{ "dustri.org", true },
- { "dustygroove.com", true },
{ "dustyspokesbnb.ca", true },
{ "dustywilson.com", true },
{ "dutabisniz.com", true },
@@ -13538,7 +14088,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dvx.cloud", true },
{ "dwgf.xyz", true },
{ "dwi-sued.de", true },
- { "dwienzek.de", true },
{ "dworekhetmanski.pl", true },
{ "dworzak.ch", true },
{ "dwscdv3.com", true },
@@ -13547,7 +14096,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dx-revision.com", true },
{ "dxgl.info", true },
{ "dxgl.org", true },
- { "dxm.no-ip.biz", true },
{ "dybuster.at", true },
{ "dybuster.ch", true },
{ "dybuster.com", true },
@@ -13582,23 +14130,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dynamicnet.net", false },
{ "dynamics-365.no", true },
{ "dynamics365.no", true },
- { "dynamicsnetwork.net", true },
{ "dynamicsretailnotes.com", true },
{ "dynamictostatic.com", true },
{ "dynapptic.com", true },
{ "dynastic.co", true },
- { "dynastyarena.com", true },
- { "dynastybullpen.com", true },
- { "dynastycalculator.com", true },
- { "dynastycentral.com", true },
- { "dynastychalkboard.com", true },
- { "dynastyclubhouse.com", true },
- { "dynastycrate.com", true },
- { "dynastyduel.com", true },
- { "dynastyfan.com", true },
- { "dynastygoal.com", true },
- { "dynastylocker.com", true },
- { "dynastyredline.com", true },
{ "dyncdn.me", true },
{ "dynn.be", true },
{ "dynocc.xyz", true },
@@ -13617,7 +14152,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dzar.nsupdate.info", true },
{ "dzeina.ch", true },
{ "dzet.de", true },
- { "dzi.wtf", true },
+ { "dziaduch.pl", true },
{ "dziary.com", true },
{ "dziekonski.com", true },
{ "dziura.me", true },
@@ -13629,8 +14164,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dzsi.bi", true },
{ "dzsibi.com", true },
{ "dzsula.hu", true },
+ { "dzu.life", true },
{ "dzworld.com", true },
{ "dzyszla.pl", true },
+ { "dzytdl.com", true },
{ "e-beyond.de", true },
{ "e-bikesdirect.co.uk", true },
{ "e-biografias.net", true },
@@ -13638,12 +14175,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "e-briancon.com", true },
{ "e-colle.info", true },
{ "e-cottage.com.br", true },
+ { "e-emploi.be", true },
{ "e-enterprise.gov", false },
{ "e-id.ee", true },
{ "e-labo.works", true },
{ "e-lambre.com", true },
{ "e-learningbs.com", true },
{ "e-lifetechnology.com", true },
+ { "e-mandataires.fr", true },
+ { "e-michiganinsurance.com", true },
{ "e-nanum.kr", true },
{ "e-ptn.com", true },
{ "e-referendum.cz", true },
@@ -13678,7 +14218,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "e6729.com", true },
{ "e6957.co", true },
{ "e6e.io", true },
- { "e6ex.com", true },
{ "e7d.io", true },
{ "e7fun.net", true },
{ "e9297.co", true },
@@ -13695,7 +14234,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eaglemessaging.com", true },
{ "eagletechz.com.br", true },
{ "eaglewreck.info", true },
- { "eaglexiang.org", true },
{ "eagleyecs.com", true },
{ "eaimty.com", true },
{ "ealadel.com", true },
@@ -13708,13 +14246,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "earlyyearshub.com", true },
{ "earmarks.gov", true },
{ "earn.com", true },
+ { "earn99.co", true },
{ "earthspundesigns.com", true },
{ "earthsystemprediction.gov", true },
{ "earticleblog.com", true },
- { "earvinkayonga.com", false },
{ "easez.net", true },
{ "eashwar.com", true },
- { "eason-yang.com", true },
{ "eastarm.net", true },
{ "eastbaycontractor.com", true },
{ "eastblue.org", true },
@@ -13725,6 +14262,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eastnorschool.co.uk", true },
{ "eastplan.co.kr", true },
{ "eastsideroofingcontractor.com", true },
+ { "eaststudios.net", true },
{ "eastwind.cloud", true },
{ "easy-rpg.org", false },
{ "easy2bathe.co.uk", true },
@@ -13737,7 +14275,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "easyenrollment.net", true },
{ "easyfiles.ch", true },
{ "easyhaul.com", true },
- { "easymun.com", true },
{ "easypay.bg", true },
{ "easypayments.pro", true },
{ "easyproperty.com", true },
@@ -13745,6 +14282,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "easyqr.codes", true },
{ "easyroad.fr", true },
{ "easyslide.be", true },
+ { "easyssl.com.cn", true },
{ "easystore.co", true },
{ "easytechguides.com", true },
{ "easytechsecurity.com", true },
@@ -13763,7 +14301,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eb-net.de", true },
{ "eb7.jp", true },
{ "ebanking.indovinabank.com.vn", true },
- { "ebanking.raiffeisen.ch", true },
{ "ebankingabersicher.ch", true },
{ "ebankingbutsecure.ch", true },
{ "ebankingentoutesecurite.ch", true },
@@ -13786,14 +14323,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eboek.info", true },
{ "ebonyriddle.com", true },
{ "ebooki.eu.org", true },
+ { "ebooknetworking.net", true },
{ "eboutic.ch", true },
{ "eboyer.com", true },
{ "ebpglobal.com", false },
{ "ebrnd.de", true },
+ { "ebteam.ir", true },
{ "ebuyclub.com", true },
{ "ec-current.com", true },
{ "ec.mine.nu", true },
{ "eca.edu.au", true },
+ { "ecalculator.org", true },
{ "ecardoo.com", true },
{ "ecardoo.de", true },
{ "ecardoo.net", true },
@@ -13803,11 +14343,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ecco-verde.com", false },
{ "ecdn.cz", true },
{ "ecfnorte.com.br", true },
+ { "ecfunstalls.com", true },
{ "echarity.ae", true },
{ "echatta.net", true },
{ "echatta.org", true },
{ "echi.pw", true },
{ "echidna-rocktools.eu", true },
+ { "echo-in.info", true },
{ "echo-security.co", true },
{ "echoanalytics.com", true },
{ "echobridgepartners.com", true },
@@ -13828,8 +14370,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ecir.ru", true },
{ "ecirtam.net", true },
{ "eckel.co", true },
+ { "eckstein.tech", true },
{ "eclectiv.com", true },
{ "eclipse.ws", true },
+ { "eclypsium.io", true },
{ "ecnetworker.com", true },
{ "eco-derattizzazione.it", true },
{ "eco-solu.co.jp", true },
@@ -13883,6 +14427,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ecotur.org", true },
{ "ecovision.com.br", true },
{ "ecpannualmeeting.com", true },
+ { "ecpic.gov", true },
{ "ecr-test-backoffice-app.azurewebsites.net", true },
{ "ecr-test-partnapp.azurewebsites.net", true },
{ "ecrandouble.ch", true },
@@ -13891,18 +14436,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ecsupplyinc.com", true },
{ "ecuadorbienesraices.com", true },
{ "ecuatask.com", true },
- { "ecupcafe.com", false },
{ "ecuteam.com", true },
{ "ecxforum.com", true },
{ "ed.gs", true },
{ "ed4becky.net", true },
{ "edanni.io", true },
{ "edapt.org.uk", true },
- { "edas.info", false },
+ { "edas.info", true },
+ { "edcaptain.com", true },
{ "edd-miles.com", true },
{ "eddesign.ch", true },
{ "eddmil.es", true },
{ "eddokloosterman.com", true },
+ { "eddy-vh.com", true },
+ { "eddy.ee", true },
{ "eddyn.net", true },
{ "edeals.co", true },
{ "edeals.co.com", true },
@@ -13915,7 +14462,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "edenming.info", true },
{ "edesseglabor.hu", true },
{ "edfinancial.com", true },
- { "edgedynasty.com", true },
{ "edgefantasy.com", true },
{ "edgeservices.co.uk", true },
{ "edgetalk.net", true },
@@ -13944,6 +14490,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "edlinger.at", true },
{ "edlinger.mobi", true },
{ "edlinus.cn", true },
+ { "edmm.jp", true },
{ "edmodo.com", true },
{ "edmoncu.com", true },
{ "edmundcelis.com", true },
@@ -13954,23 +14501,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "edsby.com", true },
{ "edservicing.com", true },
{ "edshogg.co.uk", true },
- { "edsinet.com", true },
+ { "edsinet.com", false },
{ "edsm.net", true },
{ "edstep.com", true },
{ "edtech-hub.com", true },
- { "edtechwebb.com", true },
{ "edu-kingdom.com", true },
{ "edu6.cloud", true },
{ "edubase.net", true },
{ "edubras.com.br", true },
{ "educacionvirtual.com.ar", true },
+ { "educaestado.com", true },
{ "educatek.es", true },
{ "educateyourskin.com", true },
+ { "educationalstage.com", true },
{ "educationevolving.org", true },
{ "educationfutures.com", true },
{ "educationmalaysia.co.uk", true },
+ { "educativetech.com", true },
{ "eductf.org", true },
- { "edugundavetiyesi.com", false },
+ { "edugundavetiyesi.com", true },
{ "eduid.se", false },
{ "edumi.com", true },
{ "edumundo.nl", true },
@@ -13987,8 +14536,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "edv-ringhofer.de", true },
{ "edv-schmittner.de", true },
{ "edvgarbe.de", true },
+ { "edvinaspaliskis.lt", true },
{ "edvmesstec.de", true },
{ "edwards.me.uk", true },
+ { "edwardsgrounds.co.uk", true },
{ "edwardsnowden.com", true },
{ "edwardspeyer.com", true },
{ "edwardwall.me", true },
@@ -13998,14 +14549,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "edxg.de", false },
{ "edxn.de", true },
{ "edyou.eu", true },
+ { "edyou.org", true },
{ "edzilla.info", true },
{ "ee5197.co", true },
{ "ee6729.co", true },
+ { "ee6729.com", true },
+ { "ee6957.co", true },
{ "ee9297.co", true },
{ "ee9397.com", true },
{ "ee9721.com", true },
{ "ee9728.co", true },
- { "eelcapone.nl", true },
+ { "eebt.hu", true },
{ "eellak.gr", true },
{ "eelsden.net", true },
{ "eelzak.nl", true },
@@ -14017,6 +14571,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eerstejaarsweekend.nl", true },
{ "eery.de", true },
{ "eesti.xyz", true },
+ { "eet.nu", true },
{ "eewna.org", true },
{ "ef-georgia.org", true },
{ "ef.gy", true },
@@ -14052,23 +14607,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eft.boutique", true },
{ "eftopia.org", true },
{ "egablo.black", true },
- { "egamespw.com", true },
{ "egami.ch", true },
{ "egarden.it", true },
{ "egb.at", false },
{ "egbc.ca", true },
- { "egbert.net", true },
{ "egeozcan.com", true },
{ "eges.eu", true },
{ "egg-ortho.ch", true },
{ "eggblast.com", true },
{ "eggert.org", false },
+ { "eggplant.today", true },
{ "eggqvq.com", true },
{ "egiftcards.be", true },
{ "egles.eu", true },
{ "eglisedenantes.fr", true },
{ "ego4u.com", true },
{ "ego4u.de", true },
+ { "egold-keeper.com", true },
{ "egoroof.ru", true },
{ "egov4.ch", true },
{ "egovernment-podcast.com", true },
@@ -14084,7 +14639,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ehcommerce.com", true },
{ "ehcommerce.org", true },
{ "ehdud8451.gq", true },
- { "eheliche-disziplin.schule", true },
{ "ehertz.uk", true },
{ "ehipaa.com", true },
{ "ehlacademy.org", true },
@@ -14112,9 +14666,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eightysoft.de", true },
{ "eigpropertyauctions.co.uk", true },
{ "eihaikyo.com", true },
+ { "eikentafels.nl", true },
{ "eikounoayumi.jp", true },
{ "eilhan.com", true },
{ "eimacs.com", true },
+ { "einaros.is", true },
+ { "eine-andere-welt.org", true },
{ "einfachbahn.de", true },
{ "einheft.info", true },
{ "einheizpreis.de", true },
@@ -14133,9 +14690,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eirb.fr", true },
{ "eirik.eu", true },
{ "eisaev.ru", true },
+ { "eisblau.org", true },
{ "eisenbahnfreunde-lengerich.de", true },
{ "eiskratzer-bedrucken.de", true },
{ "eit-web.de", false },
+ { "eiti.online", true },
{ "eitler.cx", true },
{ "eiyoushi-shigoto.com", true },
{ "ej.uz", true },
@@ -14151,10 +14710,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ekaigotenshoku.com", true },
{ "ekaplast.com.pl", true },
{ "ekati.ru", true },
+ { "ekawaiishop.com", true },
{ "ekb-avia.ru", true },
{ "ekd.de", true },
{ "ekedc.com", true },
{ "ekedp.com", true },
+ { "ekimma.com", true },
{ "eklepka.com", true },
{ "eklitzke.org", true },
{ "ekokontakt.cz", true },
@@ -14189,11 +14750,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elbohlyart.com", true },
{ "elburgozagalicos.com", true },
{ "elcambiador.es", true },
- { "elchamandelaprosperidad.org", true },
{ "eldapoint.co.uk", true },
{ "eldenelesat.com", true },
{ "eldercare.gov", true },
{ "elderjustice.gov", true },
+ { "elderoost.com", true },
{ "eldertons.co.uk", true },
{ "eldevo.com", true },
{ "eldinhadzic.com", true },
@@ -14214,7 +14775,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "electricalcamarillo.com", true },
{ "electricalconejovalley.com", true },
{ "electricaldosvientos.com", true },
- { "electricalfencingbedfordview.co.za", true },
{ "electricalfencingedenvale.co.za", true },
{ "electricalhiddenhills.com", true },
{ "electricallakesherwood.com", true },
@@ -14232,23 +14792,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "electricdosvientos.com", true },
{ "electricfencealberton.co.za", true },
{ "electricfencebenoni.co.za", true },
- { "electricfencingballito.co.za", true },
- { "electricfencinggillitts.co.za", true },
- { "electricfencinghillcrest.co.za", true },
- { "electricfencingkloof.co.za", true },
- { "electricfencingpinetown.co.za", true },
{ "electricgatemotorgermiston.co.za", true },
{ "electricgatemotorglenvista.co.za", true },
{ "electricgatemotorrandburg.co.za", true },
- { "electricgatemotorsballito.co.za", true },
- { "electricgatemotorsberea.co.za", true },
- { "electricgatemotorsbluff.co.za", true },
- { "electricgatemotorskemptonpark.co.za", true },
- { "electricgatemotorsqueensburgh.co.za", true },
- { "electricgatemotorsroodepoort.co.za", true },
- { "electricgatemotorsumhlanga.co.za", true },
{ "electrichiddenhills.com", true },
- { "electrician-umhlangaridge.co.za", true },
{ "electricianagoura.com", true },
{ "electricianagourahills.com", true },
{ "electriciancalabasas.com", true },
@@ -14256,9 +14803,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "electricianconejovalley.com", true },
{ "electriciandosvientos.com", true },
{ "electricianhiddenhills.com", true },
- { "electriciankemptonpark24-7.co.za", true },
{ "electricianlakesherwood.com", true },
- { "electricianlalucia.co.za", true },
{ "electricianmalibu.com", true },
{ "electricianmoorpark.com", true },
{ "electriciannewburypark.com", true },
@@ -14277,12 +14822,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "electricthousandoaks.com", true },
{ "electricwestlakevillage.com", true },
{ "electro-pak.com.pk", true },
+ { "electrocardiographe.net", true },
{ "electronic-ignition-system.com", true },
{ "electronicafacil.net", true },
{ "electronicfasteners.com", false },
{ "electrostatics.com", true },
{ "electrotainment.com", true },
- { "elefandt.com", true },
{ "elefantevoador.com", true },
{ "elegance-sm.com", true },
{ "eleicoes2014.com.br", true },
@@ -14334,7 +14879,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eletor.pl", true },
{ "eletrochape.com.br", true },
{ "elettricista-roma.it", true },
- { "elettricista-roma.org", true },
{ "elettricisti.roma.it", true },
{ "elettrodomestici.roma.it", true },
{ "eleusis-zur-verschwiegenheit.de", true },
@@ -14352,6 +14896,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elglobo.com.mx", false },
{ "elgosblanc.com", true },
{ "elgrecohotel.gr", true },
+ { "elguadia.faith", true },
{ "elguillatun.cl", true },
{ "elhamadimi.com", true },
{ "elhorizontal.com", true },
@@ -14382,6 +14927,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elisabethrene.com", true },
{ "elite-porno.ru", true },
{ "elite12.de", true },
+ { "elitebasementsohio.com", true },
{ "elitebike.com.co", true },
{ "elitebouncingfun.com", true },
{ "elitegameservers.net", true },
@@ -14390,7 +14936,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elitsa.gr", true },
{ "elixi.re", true },
{ "elixir.bzh", true },
- { "eliyah.co.il", true },
{ "elizabethbuitrago.com", true },
{ "elizabethrominski.com", true },
{ "elizeugomes.com.br", true },
@@ -14400,6 +14945,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ell888.com", true },
{ "ella-kwikmed.com", false },
{ "ellak.gr", true },
+ { "ellatotal.com", true },
+ { "elldus.de", true },
+ { "elle-weine.de", true },
{ "ellegaard.dk", true },
{ "ellemental.me", true },
{ "ellencorddry.com", true },
@@ -14422,10 +14970,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "elpo.net", true },
{ "elpoderdelespiritu.org", true },
{ "elradix.be", true },
+ { "elri.blog", true },
{ "elrinconderovica.com", true },
- { "elsagradocoran.org", true },
{ "elshou.com", true },
- { "elsignificadodesonar.com", true },
{ "elstopstelten.nl", true },
{ "elsvanderlugt.nl", true },
{ "eltair.com", true },
@@ -14456,11 +15003,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emailhunter.co", true },
{ "emailmeform.com", true },
{ "emailprivacytester.com", true },
+ { "emailtemporal.org", true },
{ "emailtools.io", true },
{ "emaily.eu", true },
{ "emanol.co.uk", true },
{ "emanuel.photography", true },
- { "emanuela-gabriela.co.uk", true },
{ "emanuelduss.ch", true },
{ "emanueleanastasio.com", true },
{ "emanuelemazzotta.com", true },
@@ -14476,6 +15023,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "embraceni.org", true },
{ "embroideryexpress.co.uk", true },
{ "embsaypreschool.co.uk", true },
+ { "emby.cloud", true },
+ { "emcentrix-com-site-mvc.azurewebsites.net", true },
+ { "emcspotlight.com", true },
{ "emdrupholm.dk", true },
{ "emecew.com", true },
{ "emeliefalk.se", true },
@@ -14483,6 +15033,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emeraldcbdshop.com", false },
{ "emeraldcityswagger.com", true },
{ "emeraldcoastrideshare.com", true },
+ { "emergencyessay.com", true },
{ "emergencyshutoff.com", true },
{ "emergenzalavoro.com", true },
{ "emero.de", true },
@@ -14509,10 +15060,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emilybellydance.com.au", true },
{ "emilyjohnson.ga", true },
{ "emilypennock.com", true },
+ { "eminententerprises.io", true },
{ "emirabiz.com", false },
{ "emirichardson.com", true },
{ "emisia.com", true },
- { "emissary.coffee", true },
{ "emivauthey.com", true },
{ "emkrivoy.com", true },
{ "emma.ly", true },
@@ -14523,6 +15074,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emoji.bzh", false },
{ "emolafarm.com", true },
{ "emond-usedcars.net", true },
+ { "emotionalmente.com", true },
{ "empathogen.com", true },
{ "empathogens.com", true },
{ "empathy.ca", true },
@@ -14531,7 +15083,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emperola.com", true },
{ "emperor-penguin.com", true },
{ "emperor-penguins.com", true },
- { "empese.com", true },
{ "empherino.net", true },
{ "empire-univ.com", true },
{ "emploi-collectivites.fr", true },
@@ -14556,6 +15107,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "empyrean-advisors.com", true },
{ "emrah.io", true },
{ "emresaglam.com", true },
+ { "emrullahsahin.com", true },
{ "ems.gov", true },
{ "emsa-casm.ca", true },
{ "emulovers.com", true },
@@ -14564,7 +15116,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "emvoiceapp.com", true },
{ "emw3.com", true },
{ "emyr.net", true },
- { "emyself.org", true },
{ "emzi0767.com", true },
{ "en-booster.jp", true },
{ "en-crypt.me", true },
@@ -14587,6 +15138,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "encredible.org", false },
{ "encretplomb.ch", true },
{ "encrypted.google.com", true },
+ { "encryptlist.com", true },
{ "encryptmy.site", true },
{ "encryptmysite.net", true },
{ "encuentraprecios.es", true },
@@ -14594,6 +15146,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "encyclopedia-titanica.org", true },
{ "ende-x.com", true },
{ "endeal.nl", true },
+ { "ender.fr", true },
{ "enderbycamping.com", true },
{ "enderle.cloud", true },
{ "enderszone.com", true },
@@ -14613,12 +15166,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "energie-sante.ch", true },
{ "energiekeurplus.nl", true },
{ "energija-visiems.lt", true },
+ { "energy-drink-magazin.de", true },
{ "energy-healings.com", true },
{ "energy-in-balance.eu", true },
{ "energy-infra.nl", true },
{ "energy-initiative.com", true },
{ "energyatlas.com", true },
{ "energyaupair.se", true },
+ { "energybank.com.br", true },
{ "energycodes.gov", true },
{ "energydrinkblog.de", true },
{ "energyefficientservices.com", true },
@@ -14643,8 +15198,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "engelwerbung.com", true },
{ "engg.ca", true },
{ "engie-laadpalen.nl", true },
+ { "engiedev.net", true },
{ "enginepit.com", true },
{ "enginsight.com", true },
+ { "enginx.cn", true },
{ "enginx.net", true },
{ "engl-server.de", true },
{ "engl-systems.de", true },
@@ -14677,6 +15234,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ennea-mediation.fr", true },
{ "enness.co.uk", true },
{ "ennori.jp", true },
+ { "enodais.gr", true },
{ "enorekcah.com", true },
{ "enot32.ru", true },
{ "enotecastore.it", true },
@@ -14700,6 +15258,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "entabe.jp", true },
{ "entactogen.com", true },
{ "entactogens.com", true },
+ { "enter.eco", true },
{ "entercenter.ru", true },
{ "enterclaim.com", true },
{ "entersoftsecurity.com", true },
@@ -14708,7 +15267,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "enthusiaformazione.com", true },
{ "entradaweb.cl", true },
{ "entrainr.com", true },
- { "entravex.com", true },
{ "entrecieletpierres.com", true },
{ "entrezdansladanse.fr", true },
{ "entropia.de", false },
@@ -14722,7 +15280,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "envant.co.uk", true },
{ "enveloppenopmaat.nl", true },
{ "envescent.com", true },
- { "enviatufoto.com", true },
{ "enviaya.com.mx", true },
{ "enviro-umweltservice.de", true },
{ "environmental-colleges.com", true },
@@ -14730,11 +15287,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "envirotech.com.au", true },
{ "envoie.moi", true },
{ "envoyez.moi", true },
- { "enxadahost.com", true },
{ "eocservices.co.uk", true },
{ "eoitek.com", true },
{ "eola.co", true },
+ { "eon.tech", true },
{ "eonhive.com", true },
+ { "eons.io", true },
{ "eooe.me", true },
{ "eoonglobalresources.jp", true },
{ "eopugetsound.org", false },
@@ -14743,7 +15301,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eosolutions.co", true },
{ "epa.com.es", true },
{ "epagos.com.ar", true },
- { "epaslaugos.lt", true },
{ "epassafe.com", true },
{ "epay.bg", true },
{ "epcreport.net", true },
@@ -14759,11 +15316,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "epicenter.works", true },
{ "epicentre.works", true },
{ "epicfail.be", true },
+ { "epichouse.net", false },
{ "epicinflatables.co.uk", true },
{ "epickitty.co.uk", true },
{ "epiclub.com.au", true },
{ "epicpages.com", true },
- { "epicsecure.de", true },
{ "epicserver.ru", true },
{ "epicvistas.com", true },
{ "epicvistas.de", true },
@@ -14777,7 +15334,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "episkevh-plaketas.gr", true },
{ "epistas.com", true },
{ "epistas.de", true },
- { "epitesz.co", true },
{ "epiteugma.com", true },
{ "epitome.cc", true },
{ "epitome.games", true },
@@ -14805,7 +15361,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eppelduerferjugend.lu", true },
{ "eppelpress.lu", true },
{ "eppione.com", true },
- { "epreskripce.cz", true },
{ "epsilon.dk", true },
{ "epsmil.it", true },
{ "epspolymer.com", true },
@@ -14813,10 +15368,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "epvin.com", true },
{ "epyonsuniverse.net", true },
{ "eq-serve.com", true },
+ { "eqassociates.com", true },
{ "eqibank.com", true },
{ "equalcloud.com", true },
{ "equi.ac", true },
- { "equiac.com", true },
{ "equidam.com", true },
{ "equinecoaching.ca", true },
{ "equinetherapy.ca", true },
@@ -14827,21 +15382,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "er-mgmt.com", true },
{ "er.tl", true },
{ "er1s.xyz", true },
+ { "eradoom.net", true },
{ "erasmo.info", true },
{ "erasmusplusrooms.com", true },
{ "erate.fi", true },
{ "erath.fr", true },
+ { "erclaim.com", true },
{ "erdethamburgeronsdag.no", true },
{ "ereader.uno", true },
{ "erethon.com", true },
{ "erf-neuilly.com", true },
+ { "erfolgsmaschine.ch", true },
{ "ergo-open.de", true },
{ "ergobyte.eu", true },
{ "ergobyte.gr", true },
{ "ergodark.com", true },
+ { "ergonova.fr", true },
{ "ergoterapeutas.lt", true },
{ "ergovita.com.br", true },
- { "ergovitanet.com.br", true },
{ "eriador.io", true },
{ "ericabrahamsen.net", true },
{ "ericairwin.com", true },
@@ -14857,7 +15415,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "erics.site", true },
{ "ericspeidel.de", true },
{ "ericvaughn-flam.com", true },
- { "ericyl.com", true },
{ "eridanus.uk", true },
{ "erigrid.eu", true },
{ "erik-stomp.de", true },
@@ -14866,7 +15423,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "erikheemskerk.nl", true },
{ "erikhubers.nl", true },
{ "erikkruithof.nl", true },
- { "erikserver2.tk", true },
{ "erikw.me", true },
{ "erikwalther.eu", true },
{ "erinaceinae.com", true },
@@ -14879,6 +15435,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ernal.net", true },
{ "ernest.ly", true },
{ "ernsteisprung.ch", true },
+ { "ero-video.net", true },
+ { "ero.ink", false },
+ { "erodvd.com", true },
{ "eromon.net", true },
{ "eron.info", true },
{ "eropics.org", true },
@@ -14900,9 +15459,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ersinerce.com", true },
{ "erstehilfeprodukte.at", true },
{ "ert.ovh", true },
+ { "ertir.ru", false },
{ "eru.im", false },
{ "eru.me", true },
{ "eru.moe", true },
+ { "erudicia.com", true },
+ { "erudicia.de", true },
+ { "erudicia.es", true },
+ { "erudicia.fr", true },
+ { "erudicia.it", true },
+ { "erudicia.nl", true },
+ { "erudicia.se", true },
+ { "erudicia.uk", true },
{ "erudikum.cz", true },
{ "ervaarjapan.nl", true },
{ "erverydown.ml", true },
@@ -14916,6 +15484,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esafar.cz", false },
{ "esagente.com", true },
{ "esailinggear.com", true },
+ { "esalesclub.com", true },
{ "esalesdata.com", true },
{ "esamievalori.com", true },
{ "esample.info", true },
@@ -14931,6 +15500,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "escargotbistro.com", true },
{ "escavador.com", true },
{ "esclear.de", true },
+ { "escobarservice7000.com", true },
{ "escolibri.com", true },
{ "escontact.ch", true },
{ "escortlistings.ca", true },
@@ -14940,7 +15510,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "escortlistings.ph", true },
{ "escortlistings.us", true },
{ "escortlistingsuk.co.uk", true },
- { "escortmantra.com", true },
{ "escritoriodearte.com", false },
{ "escuelabiblica.com", true },
{ "escyr.top", true },
@@ -14957,13 +15526,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eshigami.com", true },
{ "eshop-prices.com", true },
{ "eshspotatoes.com", true },
+ { "eshterry.com", true },
{ "esigmbh.de", true },
{ "esigtorg.ru", true },
{ "esim.cz", true },
{ "esite.ch", true },
{ "eskdale.net", true },
{ "eskriett.com", true },
- { "eslint.org", true },
+ { "eslint.org", false },
{ "esoa.net", true },
{ "esoko.eu", true },
{ "esolcourses.com", true },
@@ -14979,9 +15549,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "espacetemps.ch", true },
{ "espacetheosophie.fr", true },
{ "espacio-cultural.com", true },
+ { "espaciosdelalma.com", true },
{ "espanol.search.yahoo.com", false },
{ "espanova.com", true },
{ "espci.fr", true },
+ { "especialistagoogleadwords.com.br", true },
{ "especificosba.com.ar", true },
{ "espehus.dk", true },
{ "espgg.org", true },
@@ -14992,6 +15564,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esports-network.de", true },
{ "espower.com.sg", true },
{ "espritrait.com", true },
+ { "espyder.net", true },
{ "esquirou-trieves.fr", true },
{ "esrhd.com", true },
{ "esrinfo.com", true },
@@ -15007,7 +15580,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "essaylib.com", true },
{ "essaynews.com", true },
{ "essaypro.net", true },
- { "essayscam.org", true },
+ { "essayscam.org", false },
{ "essaytalk.com", true },
{ "essaywriting.biz", true },
{ "essenalablog.de", true },
@@ -15019,8 +15592,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "essoduke.org", true },
{ "essteebee.ch", true },
{ "est-it.de", true },
+ { "est-keyman.de", true },
{ "establo.pro", true },
{ "estada.ch", true },
+ { "estadoreclamos.com", true },
{ "estafallando.es", true },
{ "estafallando.mx", true },
{ "estaleiro.org", true },
@@ -15033,14 +15608,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esteladigital.com", true },
{ "esterilizacion-perros.es", true },
{ "esteticanorte.com.br", true },
+ { "estetici.com", true },
{ "estetista.net", true },
+ { "esthe-zukan.com", true },
{ "estherlew.is", true },
{ "esthernariyoshi.com", true },
{ "esthesoleil.jp", true },
{ "estilopack-loja.com.br", true },
{ "estimulantesbrasil.com", true },
{ "estintori.roma.it", true },
- { "estoic.net", true },
{ "estonia.net", true },
{ "estonoentraenelexamen.com", true },
{ "estoppels.com", true },
@@ -15051,17 +15627,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "esu.moe", true },
{ "esu.wiki", true },
{ "esu.zone", true },
- { "esurety.net", true },
{ "esuretynew.azurewebsites.net", true },
+ { "esyoil.com", true },
{ "esyume.com", true },
{ "et-inf.de", true },
{ "eta.cz", true },
{ "etaes.eu", true },
+ { "etajerka-spb.ru", true },
{ "etajerka.spb.ru", true },
{ "etaoinwu.win", true },
{ "etasigmaphi.org", true },
{ "etath.com", true },
{ "etax.com.au", true },
+ { "etaxigraz.com", true },
{ "etccooperative.org", true },
{ "etch.co", true },
{ "etd-glasfaser.de", true },
@@ -15075,20 +15653,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eternal-warriors.de", true },
{ "eternalabyss.int.eu.org", true },
{ "eternalflame.info", true },
+ { "eternalparking.com", true },
+ { "eternalparking.eu", true },
+ { "eternalparking.net", true },
+ { "eternalparking.org", true },
{ "eternalsymbols.com", true },
{ "eternit.roma.it", true },
{ "etfacta.com", true },
{ "eth-faucet.net", true },
{ "eth0.nl", true },
+ { "eth1.fi", true },
{ "etha.nz", true },
{ "ethack.org", true },
{ "ethan.pm", true },
{ "ethanchin.com", true },
{ "ethanjones.me", true },
- { "ethanlew.is", true },
{ "ethelbrooks.com", true },
{ "ethelbrooks.es", true },
- { "ethercalc.com", true },
{ "ethercalc.org", true },
{ "ethergeist.de", true },
{ "etherium.org", true },
@@ -15116,9 +15697,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "etrecosmeticderm.com", true },
{ "etresmant.es", true },
{ "etrker.com", true },
+ { "etrolleybizstore.com", true },
{ "etskinner.com", true },
{ "etskinner.net", true },
- { "etssquare.com", true },
{ "etudesbibliques.fr", true },
{ "etudesbibliques.net", true },
{ "etudesbibliques.org", true },
@@ -15131,6 +15712,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eu-stellenangebot.de", true },
{ "euaggelion.blog.br", true },
{ "euanbarrett.com", true },
+ { "euc.world", true },
{ "euchre.us", true },
{ "eugenechae.com", true },
{ "eugenekay.com", true },
@@ -15171,7 +15753,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "euroflora.mobi", true },
{ "eurofrank.eu", true },
{ "eurolocarno.es", true },
- { "europalettenkaufen.de", true },
+ { "euronic.fi", true },
{ "europapier.at", false },
{ "europapier.net", true },
{ "europareise2010.de", true },
@@ -15215,15 +15797,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "evangelicalmagazine.com", true },
{ "evangelosm.com", true },
{ "evansdesignstudio.com", true },
- { "evantageglobal.com", true },
{ "evanwang0.com", true },
{ "evasioncreole.com", true },
{ "evasovova.cz", true },
{ "evavolfova.cz", true },
{ "evdenevenakliyatankara.name.tr", true },
+ { "eve-online-com.ru", true },
+ { "eve-raynon.fr", true },
+ { "eve-ua.com", true },
{ "eve.ac", true },
{ "eve0s.com", true },
{ "eveadmin.azurewebsites.net", false },
+ { "evearly.com", true },
{ "evelienzorgt.nl", true },
{ "evelyndayman.com", true },
{ "evemodx.com", true },
@@ -15234,6 +15819,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eventaro.com", true },
{ "eventerlebnis.ch", true },
{ "eventide.space", true },
+ { "eventim-business.com", true },
+ { "eventim-business.de", true },
{ "eventive.org", true },
{ "eventnexus.co.uk", true },
{ "eventosbgp.com", true },
@@ -15249,10 +15836,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "everettsautorepair.com", true },
{ "everfine.com.tw", true },
{ "evergladesrestoration.gov", true },
+ { "everglow.co.jp", true },
{ "evergreenmichigan.com", true },
{ "everhome.de", true },
{ "everify.gov", true },
- { "everitoken.io", true },
{ "everlastingoak.de", true },
{ "everling.lu", true },
{ "everlong.org", true },
@@ -15275,16 +15862,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "everywhere.cloud", true },
{ "eveshamglass.co.uk", true },
{ "eveswell.com", true },
- { "evexia.xyz", true },
{ "evidence-based.review", true },
{ "evidencebased.net", true },
{ "evidenceusa.com.br", true },
{ "evidencija.ba", true },
{ "evidentiasoftware.com", true },
{ "evilbunnyfufu.com", true },
- { "evileden.com", true },
{ "evilized.de", true },
{ "evilmartians.com", true },
+ { "evilnerd.de", true },
{ "evion.nl", true },
{ "evlann.com", false },
{ "evlear.com", true },
@@ -15305,6 +15891,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "evotec.xyz", true },
{ "evoting-test.ch", true },
{ "evoting.ch", true },
+ { "evpro.lt", true },
{ "evrial.com", true },
{ "evrica.me", true },
{ "evromandie.ch", true },
@@ -15319,6 +15906,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ewanm89.co.uk", true },
{ "ewanm89.com", true },
{ "ewanm89.uk", true },
+ { "ewar.lt", false },
{ "ewhitehat.com", true },
{ "ewie.name", true },
{ "ewinstore.com", true },
@@ -15326,7 +15914,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ewsfeed.com", true },
{ "ewtl.es", true },
{ "ewus.de", true },
- { "ewycena.pl", true },
{ "ex-deli.jp", true },
{ "exablue.de", true },
{ "exactlyinfinite.com", true },
@@ -15337,18 +15924,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "exaktus.pt", true },
{ "examedge.com", true },
{ "example.wf", true },
- { "example4d.com", true },
{ "exampleessays.com", true },
{ "examsmate.in", true },
{ "exaplac.com", true },
{ "exarpy.com", true },
{ "exatmiseis.net", false },
{ "excaliburtitle.com", false },
+ { "exceed.global", true },
{ "exceedagency.com", true },
{ "excel-mechanical.com", true },
+ { "excel-utbildning.nu", true },
{ "excelhot.com", true },
{ "excelkurs.one", true },
{ "excella.me", true },
+ { "excellence-eventos.com", true },
{ "exceltechdubai.com", true },
{ "exceltechoman.com", true },
{ "excentos.com", true },
@@ -15369,10 +15958,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "exeintel.com", true },
{ "exekutori.com", true },
{ "exemples-de-stands.com", true },
- { "exerforge.com", true },
- { "exerforge.net", true },
{ "exeria.de", true },
{ "exexcarriers.com", true },
+ { "exeye.io", true },
{ "exgaywatch.com", true },
{ "exgen.io", true },
{ "exhalespa.com", false },
@@ -15382,6 +15970,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "exitooutdoor.com", true },
{ "exmart.ng", true },
{ "exmoe.com", true },
+ { "exnovin.co", true },
{ "exocen.com", true },
{ "exon.io", true },
{ "exordiumconcepts.com", true },
@@ -15410,6 +15999,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "expertsverts.com", true },
{ "expertvagabond.com", true },
{ "expertviolinteacher.com", true },
+ { "expicore.com", true },
{ "expii.com", true },
{ "expiscor.solutions", true },
{ "explicate.org", true },
@@ -15449,6 +16039,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "expressvpn.com", true },
{ "expresswins.co.uk", true },
{ "expromo.eu", true },
+ { "expromo.pl", true },
{ "expxkcd.com", true },
{ "exs.lv", true },
{ "exside.com", true },
@@ -15479,11 +16070,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "exteriorlightingthousandoaks.com", true },
{ "exteriorlightingwestlakevillage.com", true },
{ "extintormadrid.com", true },
+ { "extmatrix.com", false },
{ "extradesktops.com", false },
{ "extradiely.sk", true },
{ "extradivers-worldwide.com", true },
{ "extranetpuc.com.br", true },
{ "extratorrent.cool", true },
+ { "extrawdw.net", true },
{ "extreemhost.nl", true },
{ "extreme-gaming.de", true },
{ "extreme-gaming.us", true },
@@ -15494,11 +16087,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "exyplis.com", true },
{ "eydesignguidelines.com", true },
{ "eye-encounters.com", true },
- { "eyeandfire.com", true },
{ "eyebrowsmicroblading.co.uk", true },
{ "eyecandy.gr", true },
{ "eyeglasses.com", false },
{ "eyelashconcept.com", true },
+ { "eyemagic.net", true },
{ "eyeonid.com", true },
{ "eyep.me", true },
{ "eyes-berg.ch", true },
@@ -15509,6 +16102,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "eyps.net", true },
{ "eyrelles-tissus.com", true },
{ "eythorsson.com", true },
+ { "eyyit.com", false },
+ { "eyyubyilmaz.com", true },
{ "ez3d.eu", true },
{ "ezakazivanje.rs", true },
{ "ezdog.press", true },
@@ -15516,6 +16111,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ezesec.com", true },
{ "ezgif.com", true },
{ "ezhik-din.ru", true },
+ { "ezpzdelivery.com", true },
{ "eztvtorrent.com", true },
{ "ezwritingservice.com", true },
{ "f-droid.org", true },
@@ -15523,6 +16119,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "f-thie.de", true },
{ "f-u-c-k.wien", true },
{ "f00.fr", true },
+ { "f00f.org", true },
{ "f0x.es", true },
{ "f13cybertech.cz", true },
{ "f1classement.com", true },
@@ -15534,6 +16131,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "f3nws.com", true },
{ "f43.me", true },
{ "f5197.co", true },
+ { "f5la.com", true },
{ "f5nu.com", true },
{ "f6729.co", true },
{ "f6729.com", true },
@@ -15576,6 +16174,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fabien-hebuterne.fr", true },
{ "fabienne-roux.org", true },
{ "fabiobier.com", true },
+ { "fabiocicerchia.it", true },
{ "fabjansisters.eu", true },
{ "fabled.com", true },
{ "fableforge.nl", true },
@@ -15587,19 +16186,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fabrysociety.org", true },
{ "fabse.net", true },
{ "fabservicos.com.br", true },
+ { "facadeforum.com", true },
{ "facai666.cc", true },
{ "facai888.cc", true },
{ "facanabota.com", true },
{ "facanabota.com.br", true },
{ "facarospauls.com", true },
{ "facchinaggio.milano.it", true },
+ { "facchinaggio.roma.it", true },
{ "facciadastile.it", true },
{ "face-fashion.de", true },
{ "face-mania.com", true },
{ "facealacrise.fr", true },
{ "facebattle.com", true },
{ "facebook-atom.appspot.com", true },
- { "facebook.com", false },
+ { "facebook.com", true },
{ "facebydrh.com", true },
{ "facebylouise.co.uk", true },
{ "facekungfu.com", true },
@@ -15607,7 +16208,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "facerepo.com", true },
{ "faceresources.org", true },
{ "facesdr.com", true },
- { "facfox.com", true },
{ "fach-journalist.de", true },
{ "fachmann-umzuege.de", true },
{ "fachschaftslisten.at", true },
@@ -15618,6 +16218,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "facilities.fr", true },
{ "facilitiessurvey.org", true },
{ "facility-service-muenchen.de", true },
+ { "facingbipolar.com", true },
{ "fackovcova.cz", true },
{ "fackovcova.eu", true },
{ "fackovcova.sk", true },
@@ -15628,12 +16229,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "factor.cc", false },
{ "factorio.tools", true },
{ "factoriotools.com", true },
+ { "factoriotools.net", true },
+ { "factoriotools.org", true },
{ "factorit.fr", true },
{ "factory-f.net", true },
{ "factuur.pro", true },
{ "factuursturen.be", true },
{ "factuursturen.nl", true },
- { "factys.do", true },
{ "factys.es", true },
{ "facua.org", true },
{ "facucosta.com.ar", true },
@@ -15643,23 +16245,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "faelix.net", true },
{ "faeservice.eu", true },
{ "fafa106.com", true },
+ { "fafarishoptrading.com", true },
{ "faggut.gg", true },
- { "fahmed.de", true },
- { "fahnamporn.com", true },
{ "fahrenwal.de", true },
{ "fahrenwalde.de", true },
{ "fahrschule-laux.de", true },
{ "fahrwerk.io", true },
- { "fai.gov", true },
+ { "fai.gov", false },
{ "faidanoi.it", true },
{ "faidatefacile.it", true },
{ "fail.coach", true },
- { "fail4free.de", true },
+ { "failforward.tech", true },
{ "failover.de", true },
{ "failover.eu", true },
+ { "failoverplan.it", true },
{ "fairbill.com", true },
{ "fairedeseconomies.info", true },
{ "fairgolfteams.com", true },
+ { "fairleighcrafty.com", true },
{ "fairmarketing.com", true },
{ "fairplay.im", true },
{ "fairr.de", true },
@@ -15669,9 +16272,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fairviewmotel-simcoe.com", true },
{ "fairydust.space", true },
{ "faithcentercogop.net", true },
- { "faithgrowth.com", true },
{ "faithindemocracy.eu", false },
{ "faithleaks.org", true },
+ { "faithmissionaries.com", true },
{ "faithwatch.org", true },
{ "faixaazul.com", true },
{ "fakeduckpond.com", true },
@@ -15702,7 +16305,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fallenspirits.co.uk", true },
{ "fallin.space", true },
{ "falling.se", true },
- { "fallofthecitadel.com", true },
{ "falsum.net", true },
{ "fam-kreibich.de", true },
{ "fam-stemmer.de", false },
@@ -15710,7 +16312,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "famcloud.de", true },
{ "fameng.nl", true },
{ "fameus.fr", true },
- { "famfi.co", true },
{ "familiaperez.net", true },
{ "familie-keil.de", true },
{ "familie-kruithof.nl", true },
@@ -15729,6 +16330,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "familylawhotline.org", true },
{ "familyparties.co.uk", true },
{ "familyreal.ru", true },
+ { "familyrecipe.co.uk", true },
{ "familytreehq.com", true },
{ "familyworld.gr", true },
{ "famion.eu", false },
@@ -15763,13 +16365,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fantastici.de", true },
{ "fantasticservices.com", true },
{ "fantasticservicesgroup.com.au", true },
+ { "fantasy-judo.com", true },
{ "fantasycastles.co.uk", true },
- { "fantasycdn.com", true },
- { "fantasydrop.com", true },
{ "fantasyescortsbirmingham.co.uk", true },
{ "fantasymina.de", true },
{ "fantasypartyhire.com.au", true },
{ "fantasyspectrum.com", true },
+ { "fantasysportsnews.org", true },
{ "fantgames.com", true },
{ "fantopia.club", true },
{ "fantraxhq.com", true },
@@ -15778,13 +16380,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fanyue123.tk", true },
{ "fanz.pro", true },
{ "fanzlive.com", true },
+ { "fapp.tube", true },
{ "fapplepie.com", true },
{ "faq.ie", true },
{ "fara.gov", true },
{ "faradji.nu", true },
{ "faradome.ws", true },
{ "faradrive.ir", true },
- { "faraslot8.com", true },
{ "farcecrew.de", true },
{ "farces.com", false },
{ "farfallapets.com.br", true },
@@ -15793,10 +16395,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "farhadexchange.com", true },
{ "farhood.org", true },
{ "farid.is", true },
- { "farizizhan.com", true },
+ { "farizizhan.com", false },
{ "farleybrass.com.au", true },
{ "farleymetals.com.au", true },
+ { "farm-vacations.com", true },
{ "farmacia-discreto.com", true },
+ { "farmacia-lloret.com", true },
{ "farmaciacorvi.it", true },
{ "farmaciadejaime.es", true },
{ "farmer.dating", true },
@@ -15809,7 +16413,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fart.wtf", true },
{ "farthing.xyz", true },
{ "farwat.ru", true },
- { "farzli.com", true },
+ { "farzli.com", false },
{ "faschingmd.com", true },
{ "fashion-hunters.pl", true },
{ "fashion-stoff.de", true },
@@ -15877,6 +16481,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fattailcall.com", true },
{ "fattorino.it", true },
{ "fatturegeko.eu", true },
+ { "fattyink.com", true },
+ { "fau8.ml", true },
{ "faucetbox.com", false },
{ "faultlines.org", true },
{ "faulty.equipment", true },
@@ -15895,6 +16501,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fbiic.gov", true },
{ "fbijobs.gov", true },
{ "fbo.gov", true },
+ { "fboerman.nl", true },
{ "fbrief.org", true },
{ "fbsbx.com", true },
{ "fbtholdings.com", true },
@@ -15929,7 +16536,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "feac.us", true },
{ "feaden.me", true },
{ "feandc.com", true },
- { "fearby.com", true },
{ "feastr-dev.de", true },
{ "feastr.de", true },
{ "feastr.io", true },
@@ -15949,9 +16555,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fedoraproject.org", true },
{ "fedpartnership.gov", true },
{ "fedramp.gov", false },
+ { "fedrtc.org", true },
{ "fedshirevets.gov", true },
{ "fedux.com.ar", true },
- { "fedvan.com", true },
{ "feedbin.com", false },
{ "feedermarket.net", true },
{ "feedfall.com", true },
@@ -16004,6 +16610,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "felixgenicio.com", true },
{ "felixkaaman.com", true },
{ "felixkauer.de", true },
+ { "felixklein.com", true },
{ "felixqu.com", true },
{ "felixsanz.com", true },
{ "felixseele.de", true },
@@ -16019,11 +16626,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "femmes.gc.ca", true },
{ "femmesaupluriel.com", true },
{ "femtomind.com", true },
+ { "fence-stlouis.com", true },
{ "feng-hhcm.com", true },
{ "feng.si", true },
{ "fengyi.tel", true },
{ "fenhl.net", true },
{ "fenichelar.com", true },
+ { "fenixportal.eu", true },
{ "fenster-bank.at", true },
{ "fenster-bank.de", true },
{ "feragon.net", true },
@@ -16040,13 +16649,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "feriespotter.dk", true },
{ "ferm-rotterdam.nl", true },
{ "fermabel.com.br", true },
+ { "fern.health", true },
{ "fernandes.org", true },
{ "fernandob.com", true },
{ "fernandobarata.pt", true },
{ "fernandobarillas.com", true },
{ "fernandomiguel.net", true },
+ { "fernland.com.au", true },
{ "feross.net", true },
{ "feross.org", true },
+ { "ferprobolivia.com", true },
{ "ferrada.org", true },
{ "ferrariadvisor.it", true },
{ "ferret.zone", true },
@@ -16059,7 +16671,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ferticare.pt", true },
{ "fertila.de", true },
{ "festaprylar.se", true },
+ { "festerculiacan.com", true },
{ "festival-tipps.com", true },
+ { "festivaldimouamaroussiou.gr", true },
{ "festivaljapon.com", true },
{ "fetch.co.uk", true },
{ "fetchease.com", true },
@@ -16081,26 +16695,35 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "feuetgloire.com", true },
{ "fewo-hafeninsel-stralsund.de", true },
{ "fewo-thueringer-wald.de", true },
+ { "fewo32.de", true },
{ "fexco.com", true },
{ "feybiblia.com", true },
- { "feyermedia.de", true },
{ "ff-bad-hoehenstadt.de", true },
{ "ff-obersunzing-niedersunzing.de", true },
{ "ff14-mstdn.xyz", false },
{ "ff44.net", true },
{ "ff5197.co", true },
+ { "ff6729.co", true },
{ "ff6729.com", true },
{ "ff6957.co", true },
+ { "ff769.com", true },
+ { "ff916.com", true },
{ "ff9297.co", true },
{ "ff9397.com", true },
+ { "ff967.com", true },
{ "ff9721.com", true },
{ "ff9728.co", true },
+ { "ffb.gov", false },
+ { "ffbans.org", true },
{ "ffbsee.net", true },
+ { "ffdhw.com", true },
+ { "fff-du.de", true },
{ "ffiec.gov", true },
{ "ffis.me", true },
{ "ffkoenigsberg.de", true },
{ "fflone.com", true },
{ "ffmradio.de", true },
+ { "ffmv.de", true },
{ "ffprofile.com", true },
{ "ffrev.de", true },
{ "ffsociety.nl", true },
@@ -16113,7 +16736,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fhconseil.fr", true },
{ "fhdhelp.de", false },
{ "fhdhilft.de", false },
+ { "fheuschen.de", true },
{ "fhfaoig.gov", true },
+ { "fhservices.com.au", true },
{ "fi.google.com", true },
{ "fi.search.yahoo.com", false },
{ "fiam.me", true },
@@ -16137,6 +16762,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fidelis-it.net", true },
{ "fidhouriet.ch", true },
{ "fiduciaire-ratio.ch", true },
+ { "fieggen.eu", true },
+ { "fieggen.net", true },
{ "fieldwork-paysage.com", false },
{ "fierlafijn.net", true },
{ "fierscleaning.nl", true },
@@ -16158,7 +16785,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "figure.nz", true },
{ "fiilr.com", true },
{ "fiix.io", true },
- { "fijnefeestdageneneengelukkignieuwjaar.nl", true },
{ "fijnewoensdag.nl", true },
{ "fiken.no", true },
{ "fikst.com", true },
@@ -16172,10 +16798,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "filebox.one", true },
{ "filecloud.fun", true },
{ "filecopa.com", true },
- { "filedropbox.nl", true },
{ "filehash.de", true },
+ { "filehippo.com", true },
{ "files.com", true },
- { "files.from-me.org", true },
{ "fileservicios.com.ar", true },
{ "filestar.io", true },
{ "filestartest.io", true },
@@ -16194,7 +16819,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "film-op-tv.nl", true },
{ "film-storyboards.fr", true },
{ "film-tutorial.com", true },
+ { "film.photography", true },
+ { "film.photos", true },
{ "filmatiporno.xxx", true },
+ { "filmcrewdb.com", true },
{ "filme-onlines.com", true },
{ "filmers.net", true },
{ "filmitis.com", true },
@@ -16212,8 +16840,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "finalworkdriesstef.tk", true },
{ "finalx.nl", true },
{ "finance-colleges.com", true },
+ { "financecontrol.tk", true },
{ "financejobs.ch", true },
- { "financepark.ch", true },
{ "financialfreedomaus.com", true },
{ "financniexperti.sk", true },
{ "finansa.no", true },
@@ -16237,17 +16865,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "findthatnude.com", true },
{ "findyourtrainer.com", true },
{ "findyourvoice.ca", true },
- { "finecraft.cc", true },
+ { "finecocoin.io", false },
{ "finefriends.nl", true },
{ "finefriends.social", true },
{ "finefriendsapp.com", true },
+ { "finehealth.ru", true },
{ "finelovedolls.com", true },
{ "finenet.com.tw", true },
{ "finesoon.net", true },
{ "finevegashomes.com", true },
{ "finewineonline.com", true },
{ "finflix.net", true },
- { "finform.ch", true },
{ "fini-de-jouer.ch", true },
{ "finilaviolence.gc.ca", true },
{ "finisron.in", true },
@@ -16271,6 +16899,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fioristionline.net", true },
{ "fioulmarket.fr", true },
{ "fir3net.com", true },
+ { "firc.de", true },
{ "fire-schools.com", true },
{ "firebaseio.com", true },
{ "firebirdrangecookers.com", true },
@@ -16317,18 +16946,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "firstdry.com.br", true },
{ "firstfinca.de", true },
{ "firstinnovation.co.jp", true },
+ { "firstinnovationltd.com", true },
{ "firstmall.de", true },
{ "firstnetworksouth.com", true },
{ "firstq.xyz", true },
{ "firstsecurity.cl", true },
{ "fischer-kundendienst.de", true },
{ "fischers.cc", true },
- { "fischers.srv.br", true },
{ "fiscoeconti.it", true },
{ "fise.cz", true },
{ "fish-hook.ru", true },
+ { "fishbattle.io", true },
+ { "fishbattle.net", true },
{ "fishermailbox.net", true },
- { "fishermansbend.apartments", true },
{ "fishermansbendcorporation.com.au", true },
{ "fishermansbendtownhouses.com.au", true },
{ "fishexport.eu", true },
@@ -16339,6 +16969,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fishtacos.blog", true },
{ "fisinfomanagerdr.com", true },
{ "fisiobox.eu", true },
+ { "fisioterapista.roma.it", true },
{ "fiskalnepretor.pl", true },
{ "fiskelures.se", true },
{ "fit-4u.ch", true },
@@ -16351,14 +16982,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fitness-challenge.co.uk", true },
{ "fitness.gov", true },
{ "fitnessunder50.com", true },
- { "fitseven.ru", true },
{ "fittelo.cz", true },
{ "fitzsim.org", true },
{ "fiuxy.bz", true },
- { "fiuxy.org", true },
{ "fiveslice.pizza", true },
{ "fivethirtyeight.com", true },
- { "fiveyearsahead.com", true },
{ "fixatom.com", true },
{ "fixed.supply", true },
{ "fixedtodayplumbing.com.au", true },
@@ -16492,6 +17120,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "floffi.media", true },
{ "floify.com", true },
{ "flokinet.is", true },
+ { "flonharmonymassage.space", true },
{ "floobits.com", true },
{ "floodsmart.gov", true },
{ "floogulinc.com", true },
@@ -16511,6 +17140,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "floresvilleedc.org", true },
{ "florian-bachelet.fr", true },
{ "florian-thie.de", true },
+ { "florianbecker.it", true },
{ "floriankarmen.com", true },
{ "floriankeller.de", true },
{ "florianmitrea.uk", true },
@@ -16518,24 +17148,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "floriantanner.ch", true },
{ "floridafabrication.net", true },
{ "floridafieros.org", true },
- { "floridagulfbeachrealty.com", true },
{ "floridahomesinvest.com", true },
+ { "floridamainmovers.com", true },
{ "floridasexhealth.com", true },
+ { "floridawaterapparel.net", true },
{ "floridaweightlossdoctors.com", true },
{ "florinlungu.it", true },
{ "florismoo.nl", true },
{ "florismouwen.com", false },
- { "floristmou.com", true },
{ "florisvdk.net", true },
{ "floriswesterman.nl", true },
- { "florlola.com", true },
+ { "flosch.at", false },
{ "floskelwolke.de", true },
{ "flossexanten.de", true },
{ "flourishtogether.com", true },
{ "flow.su", true },
+ { "flowair24.ru", true },
{ "flowcom.de", true },
{ "flowersbylegacy.com", true },
{ "flowersquito.com", true },
+ { "flowinity.com", true },
{ "flowinvoice.com", true },
{ "flowreader.com", true },
{ "flra.gov", true },
@@ -16558,6 +17190,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "flw365365.com", true },
{ "fly-en-drive.nl", true },
{ "fly.moe", true },
+ { "flyadrenaline.com", true },
{ "flyavantar.com", true },
{ "flyboyfpv.com", true },
{ "flydrivesicilie.nl", true },
@@ -16565,7 +17198,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "flygon.pink", true },
{ "flyinghigh.co.jp", true },
{ "flyinglocksmiths.com", true },
- { "flyingpackets.net", true },
{ "flyingrub.me", true },
{ "flymns.fr", true },
{ "flynn.io", true },
@@ -16575,13 +17207,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "flyswoop.com", true },
{ "flyt.online", true },
{ "flytoadventures.com", true },
+ { "flywus.com", true },
{ "fm-cdn.de", true },
{ "fm.ie", true },
{ "fmarchal.fr", true },
{ "fmbilder.se", true },
- { "fmc.gov", true },
- { "fmdance.cl", true },
+ { "fmdance.cl", false },
{ "fminsight.net", true },
+ { "fmm-creative.com", true },
{ "fmodoux.biz", true },
{ "fmussatmd.com", true },
{ "fnanen.net", true },
@@ -16591,7 +17224,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fnof.ch", true },
{ "fnordserver.eu", true },
{ "fnpro.eu", true },
- { "fnzc.co.nz", true },
{ "foairbus.fr", true },
{ "foairbussas.fr", true },
{ "focanamoda.com.br", true },
@@ -16643,6 +17275,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fontedoprazer.com", true },
{ "fontein.de", true },
{ "fontlibrary.org", true },
+ { "fonts2u.com", true },
{ "fonts4free.net", true },
{ "fonzone.it", true },
{ "foo.fo", true },
@@ -16650,7 +17283,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "foodattitude.ch", true },
{ "foodblogger.club", true },
{ "foodboy.com", true },
- { "foodcare.ml", true },
+ { "foodev.de", true },
{ "foodlist.net", true },
{ "foodloader.net", true },
{ "foodsafety.gov", true },
@@ -16664,11 +17297,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fooster.io", true },
{ "foot.fr", true },
{ "footagecrate.com", true },
+ { "football.de", true },
{ "footballforum.de", true },
- { "for.care", true },
+ { "for.care", false },
{ "foray-jero.me", true },
{ "forbidden-mods.de", true },
- { "forbusiness.ca", true },
{ "forcelink.eu", true },
{ "forcelinkamerica.com", true },
{ "forcelinkamerica.nl", true },
@@ -16691,6 +17324,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "foresthillhomes.ca", true },
{ "forestraven.net", true },
{ "foreverclean.com", true },
+ { "forevergreens.us", true },
{ "foreverssl.com", true },
{ "foreversummertime.com", true },
{ "forewordreviews.com", true },
@@ -16720,6 +17354,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "formulastudent.de", true },
{ "fornoreason.net.au", true },
{ "fornwall.net", true },
+ { "foroaranda.com", true },
{ "forodeespanol.com", true },
{ "forodieta.com", true },
{ "forokd.com", true },
@@ -16728,6 +17363,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "forrestheller.com", true },
{ "forro.berlin", true },
{ "forro.info", true },
+ { "forsaleinedmonton.ca", true },
{ "forsec.nl", true },
{ "forself.me", true },
{ "forstbetrieb-hennecke.de", true },
@@ -16742,12 +17378,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fortuna.co.ua", true },
{ "forty-two.nl", true },
{ "forty8creates.com", true },
+ { "fortygordy.com", true },
{ "fortytwo.cloud", true },
{ "forum-bonn.de", true },
{ "forum-heg.ch", true },
{ "forum-kinozal-tv.appspot.com", true },
{ "forum-kinozal.appspot.com", true },
{ "forum.quantifiedself.com", false },
+ { "forumdimo.fr", true },
{ "forumotomobil.com", true },
{ "forumvoordemocratie.nl", true },
{ "forvisualdesign.com", true },
@@ -16757,11 +17395,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "foscamcanada.com", true },
{ "fosdem.org", true },
{ "fosgreece.com", true },
+ { "fossdaily.xyz", true },
{ "fossforward.com", true },
{ "fossilfreeyale.org", true },
{ "fosterpark.ca", true },
{ "fotella.com", true },
{ "fotikpro.ru", true },
+ { "fotl.ua", true },
{ "foto-janvanaefst.nl", true },
{ "foto-leistenschneider.de", true },
{ "foto-leitner.com", true },
@@ -16769,7 +17409,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "foto-robitsch.at", true },
{ "foto-roma.ru", true },
{ "foto.by", true },
- { "fotoallerlei.com", true },
{ "fotoboxvysocina.cz", true },
{ "fotocopiatrici.roma.it", true },
{ "fotofaerie.net", true },
@@ -16804,13 +17443,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fowlsmurf.net", true },
{ "fox.my", false },
{ "foxesare.sexy", true },
+ { "foxmay.co.uk", true },
{ "foxo.blue", true },
{ "foxontheinter.net", true },
{ "foxphotography.ch", true },
{ "foxquill.com", true },
{ "foxroy.com", true },
{ "foxstreetcomms.co.za", false },
- { "foxvisor.com", true },
{ "fozzie.space", true },
{ "fpaci.org", true },
{ "fpasca.com", true },
@@ -16818,6 +17457,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fpersona.com", true },
{ "fpgradosuperior.com", true },
{ "fpsclasico.de", true },
+ { "fpsv.de", true },
{ "fpt-technojapan.com", true },
{ "fpy.cz", true },
{ "fr.search.yahoo.com", false },
@@ -16829,7 +17469,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fraho.eu", true },
{ "framapiaf.org", false },
{ "framboise314.fr", true },
- { "framedpaws.com", true },
{ "framezdakkapellen.nl", true },
{ "fran.cr", true },
{ "francescopalazzo.com", true },
@@ -16852,6 +17491,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "francoislepage.com", true },
{ "francoz.me", true },
{ "frandor.co.uk", true },
+ { "frank.fyi", true },
{ "frankbellamy.co.uk", true },
{ "frankellawfirm.com", true },
{ "franken-lehrmittel.de", true },
@@ -16869,18 +17509,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frankslaughterinsurance.com", true },
{ "frankyan.com", true },
{ "frantic1048.com", true },
- { "frantorregrosa.me", true },
{ "franz-vatter.de", true },
{ "franz.beer", true },
{ "franziska-pascal.de", true },
{ "franziskaherbert.de", true },
{ "franzknoll.de", true },
+ { "fraplaster.com", true },
{ "frappant.cc", true },
{ "frappant.net", true },
{ "fraselab.ru", true },
{ "frasesconemocion.com", true },
{ "frasesdodia.com", true },
{ "frasesparaface.com.br", true },
+ { "frasestop.com.br", true },
{ "frasesytarjetas.com", true },
{ "frasys.net", true },
{ "frattaroli.org", true },
@@ -16901,7 +17542,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frebib.co.uk", true },
{ "frebib.com", true },
{ "frebib.net", true },
- { "freddieonfire.tk", false },
{ "freddysfuncastles.co.uk", true },
{ "fredericcote.com", true },
{ "frederik-braun.com", false },
@@ -16918,15 +17558,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "free.ac.cn", true },
{ "free.com.tw", true },
{ "freeaf.gq", true },
- { "freeasyshop.com", true },
{ "freebarrettbrown.org", true },
{ "freebcard.com", true },
{ "freebetoffers.co.uk", true },
+ { "freebies.id", true },
{ "freebookmakersbetsandbonuses.com.au", true },
{ "freeboson.org", true },
{ "freebsdbrasil.com.br", true },
{ "freebus.org", true },
- { "freecam2cam.site", true },
{ "freecloud.at", true },
{ "freecookies.nl", true },
{ "freedev.cz", true },
@@ -16937,7 +17576,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "freedomfinance.se", true },
{ "freedomflotilla.org", true },
{ "freedomfrontier.tk", true },
- { "freedomkiaparts.com", true },
{ "freedomonline.bg", true },
{ "freedomrahoitus.fi", true },
{ "freeenglishhelp.com", true },
@@ -16957,6 +17595,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "freelanceessaywriters.com", true },
{ "freelancehunt.com", true },
{ "freelancejobs.org.uk", true },
+ { "freelancemw.com", true },
{ "freelanceunited.co.uk", true },
{ "freelauri.com", true },
{ "freelifer.jp", true },
@@ -17012,7 +17651,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "freiwurst.net", true },
{ "freizeitbad-riff.de", true },
{ "freizeitplaza.de", true },
- { "frejasdal.dk", true },
{ "frenchcreekcog.org", true },
{ "frenchguy.ch", true },
{ "frenchmusic.fr", true },
@@ -17021,12 +17659,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fresh-hotel.org", true },
{ "fresh-networks.net", true },
{ "fresh.co.il", true },
+ { "fresh4.co.uk", true },
{ "freshdesigns.de", true },
{ "freshdns.nl", true },
{ "freshempire.gov", true },
{ "freshlymind.com", true },
{ "freshmaza.com", true },
{ "freshmaza.net", true },
+ { "freshpounds.com", true },
{ "fretscha.com", true },
{ "frettirnar.is", true },
{ "fretworksec.com", true },
@@ -17039,7 +17679,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frickelmeister.de", true },
{ "fridolinka.cz", true },
{ "friederes.lu", true },
- { "friederloch.de", true },
{ "friedrich-foto-art.de", true },
{ "friedsamphotography.com", true },
{ "friedstechnology.com", true },
@@ -17049,7 +17688,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "friedzombie.nl", true },
{ "friedzombie.online", true },
{ "friendlysiberia.com", true },
- { "friendowment.us", true },
{ "friends-of-naz.com", true },
{ "friends-socialgroup.org", true },
{ "friends.tn", true },
@@ -17063,6 +17701,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frietzombie.nl", true },
{ "friezy.ru", true },
{ "frigi.ch", true },
+ { "frign.de", true },
{ "frigolit.net", true },
{ "friller.com.au", true },
{ "frillip.com", true },
@@ -17071,12 +17710,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frino.de", true },
{ "friplay.host", true },
{ "frippz.se", true },
+ { "friseur-foerder.de", true },
{ "friss.com", true },
{ "fritz-koehne-schule.de", true },
{ "fritzrepair.com", true },
{ "frizo.com", true },
{ "frizzless.com", true },
- { "frnco.uk", true },
+ { "fro.se", true },
{ "frob.nl", true },
{ "froehliche-hessen.de", true },
{ "frogatto.com", true },
@@ -17089,7 +17729,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fromscratch.rocks", true },
{ "fronteers.nl", false },
{ "frontier-ad.co.jp", true },
- { "frontier.bet", true },
{ "frontiers.nl", true },
{ "frontletter.io", true },
{ "frontline.cloud", true },
@@ -17099,16 +17738,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frostwarning.com", true },
{ "frostysummers.com", true },
{ "frothy.coffee", true },
- { "froufe.com", true },
{ "frownonline.co.uk", true },
{ "frozen-geek.net", true },
{ "frozen-solid.net", true },
+ { "frozendurian.club", true },
{ "frozenjam.com", true },
{ "frpg.gov", true },
{ "frprn.com", true },
{ "frprn.es", true },
{ "frprn.xxx", true },
- { "frsnpwr.net", true },
{ "frtib.gov", true },
{ "frtn.com", true },
{ "frtr.gov", true },
@@ -17121,7 +17759,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "frugro.be", true },
{ "fruition.co.jp", true },
{ "fruitscale.com", true },
- { "fruityfitness.com", true },
{ "fruityten.co.uk", true },
{ "frusky.de", true },
{ "fruttini.de", true },
@@ -17130,12 +17767,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fs-maistadt.de", true },
{ "fs257.com", true },
{ "fsapubs.gov", false },
+ { "fsavc.org.uk", true },
{ "fsbn.eu", true },
{ "fsbnh.bank", true },
{ "fsbpaintrock.com", true },
{ "fsbturton.com", true },
{ "fsch2009.com", true },
- { "fsck.cz", true },
{ "fsck.jp", false },
{ "fsckd.com", true },
{ "fscott.de", true },
@@ -17162,8 +17799,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ftptest.net", true },
{ "ftrsecure.com", true },
{ "ftv.re", true },
+ { "ftx.com", true },
+ { "ftx.io", true },
{ "fuantaishenhaimuli.net", true },
{ "fuciam.com.co", true },
+ { "fuckav.ru", true },
{ "fuckcie.com", true },
{ "fucklife.ch", true },
{ "fucknazis.cf", true },
@@ -17190,6 +17830,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fukushimacoffee.com", true },
{ "fulfilmentcrowd.com", true },
{ "fulgenzis.com", true },
+ { "fulibyg.com", true },
{ "fulijiejie.com", true },
{ "fuliwang.info", true },
{ "fuliwang.us", true },
@@ -17200,6 +17841,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fullereno.com", true },
{ "fullerlife.org.uk", true },
{ "fullfilez.com", true },
+ { "fullhost.com", true },
{ "fullhub.ru", true },
{ "fullmatch.net", true },
{ "fullstack.love", true },
@@ -17217,27 +17859,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fun88city.com", true },
{ "funadvisor.ca", true },
{ "funadvisorfrance.com", true },
- { "funandbounce.com", true },
{ "funatic.nl", true },
{ "funbouncelincs.co.uk", true },
- { "funbuynet.com.br", true },
+ { "funcabinrentals.com", true },
{ "funchestra.at", false },
{ "functional.cc", true },
{ "functions-online.com", true },
{ "fundacionfranciscofiasco.org", true },
+ { "fundamentt.com", true },
{ "fundavi.jp", true },
{ "fundayltd.com", true },
{ "fundays.nl", true },
{ "fundchan.com", true },
{ "fundeego.com", true },
{ "fundingempire.com", true },
+ { "fundingrainbows.com", true },
+ { "fundkyapp.com", true },
{ "fundmylegalclaim.co.uk", true },
{ "fundort.ch", true },
{ "funds.ddns.net", true },
{ "funfactorleeds.co.uk", true },
{ "funfair.io", true },
{ "funfoodco.co.uk", true },
- { "funfunmstdn.tokyo", true },
{ "funhouse-inflatables.co.uk", true },
{ "funinbeds.org.uk", true },
{ "funkazoid-radio.com", true },
@@ -17247,6 +17890,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "funktionel.co", true },
{ "funktionsverket.se", true },
{ "funkygamer1.de", true },
+ { "funmountaincanyon.com", true },
{ "funniestclip.com", true },
{ "funnybikini.com", true },
{ "funoverip.net", true },
@@ -17258,6 +17902,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "funtime.kiev.ua", true },
{ "funtimeentertainment.co.uk", true },
{ "funtimesbouncycastles.co.uk", true },
+ { "funyirotraktor.hu", true },
{ "fur.red", true },
{ "furcdn.net", true },
{ "furgo.love", true },
@@ -17283,17 +17928,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "furrytech.network", true },
{ "fursuitbutts.com", true },
{ "fusa-miyamoto.jp", true },
+ { "fusechange.org", true },
{ "fuselight.nl", true },
{ "fuseos.net", true },
{ "fusiongaming.de", true },
{ "fussball-xxl.de", true },
{ "fussell.io", true },
- { "fuszara.pl", true },
{ "futa.moe", false },
{ "futaba-works.com", true },
{ "futbolvivo.tv", true },
{ "futbomb.com", true },
{ "futcre.com", true },
+ { "futo.biz", true },
{ "futos.de", true },
{ "futrou.com", true },
{ "future-moves.com", true },
@@ -17303,9 +17949,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "futurenda.com", true },
{ "futureoceans.org", true },
{ "futuressm.com", true },
- { "futuretimes.io", true },
{ "futurezone.at", true },
{ "fuvelis.fr", true },
+ { "fuvi-clan.com", true },
{ "fuwafuwa.moe", true },
{ "fuyu.moe", true },
{ "fuzenet.net", true },
@@ -17316,6 +17962,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fwest.ovh", true },
{ "fwest98.nl", true },
{ "fwest98.ovh", true },
+ { "fws.gov", true },
{ "fwz.me", true },
{ "fx-rk.com", true },
{ "fx5.de", true },
@@ -17346,6 +17993,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "fyol.xyz", false },
{ "fyreek.me", true },
{ "fyretrine.com", true },
+ { "fyroeo.fr", true },
{ "fysesbjerg.dk", true },
{ "fysiomassageoosterhout.nl", true },
{ "fysiotherapieapeldoornzuid.nl", true },
@@ -17365,7 +18013,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "g-p-design.com", true },
{ "g-rom.net", true },
{ "g.co", true },
- { "g01.in.ua", true },
{ "g0881.com", true },
{ "g0man.com", true },
{ "g1.ie", true },
@@ -17394,6 +18041,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gabe565.com", true },
{ "gabeb1920.com", true },
{ "gabecook.com", true },
+ { "gabehoban.com", true },
{ "gabinetejuridicotecnologicojuandemeseguer.es", true },
{ "gabinetpsychoterapii.krakow.pl", true },
{ "gabiocs.com", true },
@@ -17408,7 +18056,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gachter.name", true },
{ "gadabit.pl", true },
{ "gaddini.it", true },
- { "gadget-tips.com", true },
{ "gadgetadvisor.com", true },
{ "gadgethacks.com", true },
{ "gae123.com", true },
@@ -17419,6 +18066,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gaff-rig.co.uk", true },
{ "gaflooring.com", true },
{ "gafunds.com", true },
+ { "gaganenterprises.in", true },
+ { "gagekroljic.com", true },
{ "gagliarducci.it", true },
{ "gagne.tk", true },
{ "gagnerplusdargent.info", true },
@@ -17448,7 +18097,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "galaltosalento.it", true },
{ "galanight.cz", true },
{ "galax.us", true },
- { "galaxieblog.com.my", true },
{ "galaxus.at", true },
{ "galaxus.ch", true },
{ "galaxus.com", true },
@@ -17462,13 +18110,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "galeriajardim.com.br", true },
{ "galeriarr.pl", true },
{ "galeries.photo", true },
+ { "galganoboutique.com", true },
{ "galighticus.com", true },
{ "galileanhome.org", true },
{ "galilel.cloud", true },
{ "galinas-blog.de", true },
{ "galinos.gr", true },
{ "galle.cz", true },
- { "gallerify.eu", true },
{ "galletasgabi.com.mx", false },
{ "galleyfoods.com", true },
{ "gallicrooster.com", true },
@@ -17487,10 +18135,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gambitprint.com", true },
{ "gambler.ru", true },
{ "gamblerhealing.com", true },
+ { "gambling-business.club", true },
{ "gamcore.com", true },
{ "game-club.me", true },
{ "game-files.net", false },
- { "game-topic.ru", true },
{ "game4less.com", true },
{ "game7.de", true },
{ "game88city.com", true },
@@ -17522,11 +18170,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gamequest.info", true },
{ "gamer-portal.com", true },
{ "gamercredo.com", true },
- { "gamereader.de", true },
{ "gamerepublic.hu", true },
{ "gameres.com", true },
{ "gamerezo.com", true },
- { "gamerwares.com", true },
{ "gamerzdot.com", true },
{ "games4theworld.org", true },
{ "gamesaviour.com", true },
@@ -17553,7 +18199,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gamismu.com", true },
{ "gamismurahonline.com", true },
{ "gamivo.com", true },
- { "gamoloco.com", true },
{ "gamster.tv", true },
{ "ganado.org", true },
{ "ganaenergia.com", true },
@@ -17568,6 +18213,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gangnamcool.com", true },
{ "gansleit.com", false },
{ "ganyouxuan.com", true },
+ { "ganzgraph.de", true },
{ "ganztagplus.de", true },
{ "gao.ci", true },
{ "gao.rocks", true },
@@ -17588,7 +18234,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "garagevanhulle-used.be", true },
{ "garanteasy.com", true },
{ "garazskapuszereles.hu", true },
- { "garbagedisposalguides.com", true },
{ "garbomuffin.com", true },
{ "garcia-franco.com", true },
{ "garciagerman.com", true },
@@ -17600,14 +18245,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "garderobche.eu", true },
{ "gardikagigih.com", true },
{ "gardis.ua", true },
- { "garedtech.com", false },
{ "garethbowker.com", true },
{ "garethkirk.com", true },
{ "garethrhugh.es", true },
{ "gargazon.net", true },
{ "garnuchbau.de", true },
- { "garriganenterprises.com", true },
- { "garriganenterprisesinc.com", true },
{ "garron.net", true },
{ "garrowmediallc.com", true },
{ "gartenbaur.de", true },
@@ -17621,6 +18263,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "garywhittington.com", true },
{ "gashalot.com", true },
{ "gaspapp.com", true },
+ { "gass-transformatoren.de", true },
{ "gastauftritt.net", true },
{ "gastoudererenda.nl", true },
{ "gastromedicalcenter.com.br", true },
@@ -17630,6 +18273,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gateaucreation.fr", true },
{ "gatekiller.co.uk", true },
{ "gatewaybridal.com", true },
+ { "gatewayclub.com.au", true },
{ "gathermycrew.org.au", true },
{ "gathu.co.ke", true },
{ "gauche.com", true },
@@ -17660,6 +18304,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gazellegames.net", true },
{ "gazete.org", true },
{ "gazette.govt.nz", true },
+ { "gb-repair.com", true },
{ "gbc-radio.nl", true },
{ "gbcsummercamps.com", true },
{ "gbl.selfip.net", true },
@@ -17708,7 +18353,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geder.at", true },
{ "gedlingcastlehire.co.uk", true },
{ "gedlingtherapy.co.uk", true },
- { "gee.is", true },
{ "geecrat.com", true },
{ "geek-hub.de", true },
{ "geek.ch", true },
@@ -17725,6 +18369,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geeks.berlin", true },
{ "geeks.lgbt", true },
{ "geeks.one", false },
+ { "geeksandthecity.fr", true },
{ "geekshirts.cz", true },
{ "geekstreet.fr", true },
{ "geekthis.de", true },
@@ -17743,6 +18388,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gefolge.org", true },
{ "gegeco.ch", true },
{ "geh.li", true },
+ { "gehaowu.com", true },
{ "gehas-wein-shop.de", true },
{ "gehirn.co.jp", true },
{ "gehirn.jp", true },
@@ -17753,7 +18399,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gehsicht.de", true },
{ "geigenbauer.in", false },
{ "geiser-family.ch", true },
- { "geisser-elektronikdata.de", true },
{ "geitenijs.com", true },
{ "gelb-computer.de", true },
{ "geld-im-blick.de", true },
@@ -17772,18 +18417,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geluidsstudio.com", true },
{ "geluk.io", true },
{ "gelukkigehonden.nl", true },
- { "gem-info.fr", true },
{ "gemails.eu", true },
{ "gemeinsam-ideen-verwirklichen.de", true },
{ "gemgroups.in", true },
{ "gemini.com", true },
{ "gemquery.com", true },
+ { "gemstn.com", true },
{ "genbright.com", true },
{ "genchev.io", true },
{ "gencmedya.com", true },
{ "genderidentiteit.nl", true },
{ "gendrin.com", true },
- { "gendundrupa.ch", true },
{ "gene-drive.com", true },
{ "gene-drives.com", true },
{ "genealorand.com", true },
@@ -17799,7 +18443,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "general-plast.com", true },
{ "generali-worldwide.com", true },
{ "generalinsuranceservices.com", true },
- { "generationgoat.com", true },
{ "generationr.nl", true },
{ "generator.creditcard", true },
{ "generic.cx", true },
@@ -17815,6 +18458,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "genevoise-entretien.ch", true },
{ "genfaerd.dk", true },
{ "geniofinanciero.org", true },
+ { "genioideal.com", true },
{ "geniush.ovh", true },
{ "geniusteacher.in", true },
{ "geniuszone.biz", true },
@@ -17843,7 +18487,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geocompass.at", true },
{ "geoffsec.org", true },
{ "geography-schools.com", true },
- { "geoinstinct.com", true },
{ "geoip.fedoraproject.org", true },
{ "geoip.stg.fedoraproject.org", true },
{ "geojs.io", true },
@@ -17864,12 +18507,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "georgedesign.ch", true },
{ "georgemaschke.net", true },
{ "georgepancescu.ro", true },
- { "georgescarryout.com", false },
+ { "georgescarryout.com", true },
{ "georgewatson.me", true },
{ "georgewbushlibrary.gov", true },
{ "georgiaautoglass.net", true },
{ "georgiaglassrepair.com", true },
{ "georgiastuartyoga.co.uk", true },
+ { "georgiatransport.com", true },
{ "georgiaurologist.com", true },
{ "georgioskontaxis.com", true },
{ "georgioskontaxis.net", true },
@@ -17883,6 +18527,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "geraintwhite.co.uk", true },
{ "gerald-zojer.com", true },
{ "geraldsonrealty.com", true },
+ { "gerandroid.com", true },
{ "gerardinden.nl", true },
{ "gerardobsd.com", true },
{ "gerardozamudio.mx", true },
@@ -17898,7 +18543,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gervais-avocat.fr", true },
{ "gerwinvanderkamp.nl", true },
{ "ges-bo.de", true },
- { "geschichtscheck.de", true },
{ "geschmacksache.online", true },
{ "geschwinder.net", true },
{ "gesica.cloud", true },
@@ -17908,6 +18552,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gestorehotel.com", true },
{ "gestormensajeria.com", true },
{ "gestsal.com", true },
+ { "gesunddurchenergie.ch", true },
{ "gesundheitmassage.com", true },
{ "gesundheitswelt24.de", true },
{ "get-erp.ru", true },
@@ -17917,22 +18562,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "get-refer.com", true },
{ "get.how", true },
{ "get2getha.org", true },
- { "getbonfire.com", true },
{ "getbooks.co.il", true },
{ "getbox.me", true },
{ "getbreadcrumbs.com", true },
{ "getbrowink.com", true },
{ "getbutterfly.com", true },
{ "getcard.cc", true },
+ { "getcheapinsurancenow.info", true },
{ "getcloak.com", false },
{ "getdash.io", true },
{ "getdeveloper.de", true },
{ "geteckeld.nl", true },
{ "geteduroam.no", true },
{ "geterp.ru", true },
- { "geteventbox.com", true },
{ "getfedora.org", true },
- { "getfilterlive.org", true },
{ "getfirstalert.com", true },
{ "getflorence.co.uk", true },
{ "getgeek.es", true },
@@ -17940,7 +18583,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gethow.org", true },
{ "gethttpsforfree.com", true },
{ "getidmcc.com", true },
- { "getimgs.com", true },
{ "getinphase.com", true },
{ "getintopc.com", true },
{ "getitlive.de", true },
@@ -17951,6 +18593,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "getmovil.com", false },
{ "getnib.com", true },
{ "getnikola.com", true },
+ { "getonyx.com", true },
{ "getpagespeed.com", true },
{ "getpanelapp.com", true },
{ "getpei.com", true },
@@ -17963,6 +18606,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "getsetbounce.co.uk", true },
{ "getsmartaboutdrugs.gov", false },
{ "getsport.mobi", true },
+ { "getswadeshi.com", true },
{ "getteamninja.com", true },
{ "getthefriendsyouwant.com", true },
{ "getticker.com", true },
@@ -17987,7 +18631,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gfestival.fo", true },
{ "gfk-kunststoff-luebben.de", true },
{ "gflame.de", true },
- { "gfms.ru", true },
{ "gfnetfun.cf", true },
{ "gforce.ninja", true },
{ "gfoss.eu", true },
@@ -18003,6 +18646,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gg9728.co", true },
{ "ggbet.me", true },
{ "ggdcpt.com", true },
+ { "gggggg.org", true },
{ "gginin.today", true },
{ "ggl-luzern.ch", true },
{ "ggma.co.uk", true },
@@ -18014,6 +18658,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ggx.us", true },
{ "gh-sandanski.com", true },
{ "gha.st", true },
+ { "ghaglund.se", true },
{ "ghettonetflix.de", true },
{ "ghfip.com.au", true },
{ "ghini.com", true },
@@ -18029,8 +18674,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "giant-panda.com", true },
{ "giant-tortoise.com", true },
{ "gianttree.de", true },
+ { "giaoxudongtri.com", true },
{ "giardinaggio.milano.it", true },
{ "giardinaggio.napoli.it", true },
+ { "giardinaggio.roma.it", true },
{ "giardiniblog.it", true },
{ "giardiniere.bologna.it", true },
{ "giardiniere.milano.it", true },
@@ -18055,7 +18702,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gig-raiffeisen.de", true },
{ "giga.nl", true },
{ "gigabitz.pw", false },
- { "gigacog.com", true },
{ "gigantism.com", true },
{ "giggletotz.co.uk", true },
{ "gigin.eu", true },
@@ -18064,6 +18710,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gigis.cloud", true },
{ "giglink.club", true },
{ "gigolodavid.be", true },
+ { "gigs.guide", true },
{ "gigseekr.com", true },
{ "gigtroll.eu", true },
{ "gijsbertus.com", true },
@@ -18095,6 +18742,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ginzaj.com", true },
{ "giochiecodici.it", true },
{ "gioielleriamolena.com", true },
+ { "gipelpsb.fr", true },
{ "gippert-klein.de", true },
{ "giraffeduck.com", true },
{ "giraffenland.de", true },
@@ -18102,17 +18750,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "giri.co", true },
{ "girlan.net", true },
{ "girlsforum.com", true },
- { "girlsnet.work", true },
{ "girlz.jp", true },
{ "girsa.org", true },
{ "girvas.ru", true },
{ "gisac.org", true },
+ { "gisauto.ru", true },
{ "gisch.tk", true },
{ "gisher.news", true },
{ "gisher.org", true },
{ "gisher.video", true },
{ "gishiko.net", true },
- { "gistr.io", true },
{ "git.market", false },
{ "git.org.il", true },
{ "git.sb", true },
@@ -18155,7 +18802,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gla-hyperloop.com", true },
{ "glaciernursery.com", true },
{ "gladdy.co.uk", true },
- { "gladdy.uk", true },
{ "gladdymedia.co.uk", true },
{ "gladdymedia.com", true },
{ "gladdymedia.uk", true },
@@ -18165,9 +18811,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "glahcks.com", true },
{ "glamguru.co.il", true },
{ "glamguru.world", true },
+ { "glammybabes.com", true },
{ "glamour4you.de", true },
{ "glamourdaze.com", true },
{ "glamouria.com.br", true },
+ { "glamur-video.com", true },
{ "glasdon.com", true },
{ "glasen-hardt.de", true },
{ "glasfaser-im-hanseviertel.de", true },
@@ -18181,6 +18829,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "glassrom.pw", true },
{ "glasweld.com", true },
{ "glavsudexpertiza.ru", true },
+ { "glazedmag.fr", true },
{ "glcastlekings.co.uk", true },
{ "gleanview.com", true },
{ "gleich-aluminium-shop.de", true },
@@ -18189,18 +18838,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "glendarraghbouncycastles.co.uk", true },
{ "glenhuntlyapartments.com.au", true },
{ "glenshere.com", true },
+ { "glexia.com", true },
{ "glidingshop.cz", true },
{ "glidingshop.de", true },
{ "glidingshop.eu", true },
{ "glitzerstuecke.de", true },
{ "glixee.com", true },
{ "glloq.org", true },
+ { "glob-coin.com", true },
{ "global-adult-webcams.com", true },
{ "global-office.com", true },
{ "global-village.koeln", true },
{ "globalbano.com", true },
{ "globalbridge-japan.com", true },
- { "globalcanineregistry.com", true },
{ "globalchokepoints.org", true },
{ "globalcomix.com", true },
{ "globalgovernancewatch.org", true },
@@ -18254,12 +18904,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gm.search.yahoo.com", false },
{ "gmacedo.com", true },
{ "gmail.com", false },
+ { "gmao.com", true },
{ "gmbh-kiekin.de", true },
{ "gmc.uy", true },
{ "gmccar.it", true },
{ "gmcd.co", true },
{ "gmdu.net", true },
{ "gme.one", true },
+ { "gmind.ovh", true },
{ "gmod.de", true },
{ "gmpark.dk", true },
{ "gmpartsdb.com", true },
@@ -18267,7 +18919,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gmta.nl", true },
{ "gmtplus.co.za", true },
{ "gmuh.fr", true },
- { "gmw-hannover.de", true },
{ "gmw-ingenieurbuero.de", true },
{ "gmx.at", true },
{ "gmx.ch", true },
@@ -18283,6 +18934,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gnetion.com", true },
{ "gnetwork.eu", true },
{ "gnfrazier.me", true },
+ { "gnilebein.de", true },
{ "gnk.io", true },
{ "gnucashtoqif.us", true },
{ "gnwp.eu", true },
@@ -18294,6 +18946,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "go.microsoft.com", true },
{ "go.xero.com", false },
{ "go2archive.nl", true },
+ { "go2people-websites.nl", true },
{ "go2ubl.nl", true },
{ "goa8.xyz", true },
{ "goalbookapp.com", true },
@@ -18301,6 +18954,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goanalyse.co.uk", true },
{ "goand.run", true },
{ "goarmy.eu", true },
+ { "goaskrose.com", true },
{ "goatcloud.com", true },
{ "gobarrelroll.com", true },
{ "gobouncy.co.uk", true },
@@ -18312,8 +18966,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gocleanerslondon.co.uk", true },
{ "gocphongthuy.net", true },
{ "god-clan.hu", true },
+ { "godan.tech", true },
{ "godattributes.com", true },
- { "godaxen.tv", true },
{ "godclan.hu", true },
{ "godesigner.ru", true },
{ "godsofhell.com", true },
@@ -18331,7 +18985,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goerlitz-zgorzelec.org", true },
{ "goerres2014.de", true },
{ "goetemp.de", true },
- { "goetic.space", true },
{ "goettinger-biergarten.de", true },
{ "goffrie.com", true },
{ "gofigure.fr", false },
@@ -18359,14 +19012,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goldcoasthypnotherapyhypnosis.com.au", true },
{ "goldcoastphotographycourses.com", true },
{ "goldcoaststumpbusters.com", true },
+ { "golden-kamuy.com", true },
{ "goldenbadger.de", true },
{ "goldendawnapersonalaffair.com", true },
{ "goldenhillsoftware.com", true },
{ "goldenhost.ca", false },
+ { "goldenhostmyanmar.com", true },
{ "goldenmonrepos.com", true },
{ "goldenplate.com.sg", true },
{ "goldenruleemail.com", true },
{ "goldfmromania.ro", true },
+ { "goldlevelmarketing.com", true },
+ { "goldlevelprint.com", true },
{ "goldmark.com.au", true },
{ "goldpreisfinder.at", true },
{ "goldsecurity.com", true },
@@ -18395,7 +19052,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gondelvaartdwarsgracht.nl", true },
{ "gondola-parkinson.com", true },
{ "gongjianwei.com", true },
- { "gongjuhao.com", true },
{ "gonx.dk", false },
{ "goo.gl", true },
{ "gooby.co", false },
@@ -18410,12 +19066,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goodryb.top", true },
{ "goodshepherdmv.com", true },
{ "goodth.ink", true },
+ { "goodtrip.kr", true },
{ "goodvibesblog.com", true },
{ "google", true },
{ "google-analytics.com", true },
{ "googleandroid.cz", true },
{ "googlemail.com", false },
{ "googleplex.com", true },
+ { "googlerecetas.com", true },
{ "googleshortcuts.org", true },
{ "googlesource.com", true },
{ "goombi.fr", true },
@@ -18425,8 +19083,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goover.de", true },
{ "goow.in", true },
{ "goozp.com", true },
- { "gopher.tk", true },
+ { "goparity.com", true },
+ { "gopher.tk", false },
{ "gophoto.it", true },
+ { "gopnikman.cf", true },
{ "goprimal.eu", true },
{ "goproallaccess.com", true },
{ "goproinspectiongroup.com", true },
@@ -18435,9 +19095,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gordonchevy.com", true },
{ "gordonobrecht.com", true },
{ "gordonscouts.com.au", true },
+ { "gordy.fr", true },
+ { "gordyf.com", true },
+ { "gordyforty.com", true },
{ "gorealya.com", true },
- { "gorf.chat", true },
- { "gorf.club", true },
{ "gorgias.me", true },
{ "gorky.media", true },
{ "gorn.ch", true },
@@ -18450,12 +19111,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gosnipe.com", true },
{ "gosolockpicks.com", true },
{ "gospelfollower.com", true },
+ { "gospelites.com", true },
{ "gospelvestcination.de", true },
{ "gosportweather.co.uk", true },
{ "gostaffer.com", true },
{ "gostargazing.co.uk", true },
{ "gosu.pro", true },
{ "gosuland.org", true },
+ { "goswak.com", true },
{ "got-tty.de", true },
{ "goteborgsklassikern.se", true },
{ "gotech.com.eg", false },
@@ -18465,12 +19128,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gotmalk.org", false },
{ "goto.google.com", true },
{ "goto.msk.ru", true },
+ { "goto.world", true },
{ "goto10.se", true },
{ "gotomi.info", false },
{ "gotowned.org", false },
{ "gotoxy.at", true },
{ "gotrail.fr", true },
- { "gotrek.com.au", true },
{ "gottcode.org", false },
{ "goudenharynck.be", true },
{ "gouforit.com", true },
@@ -18478,6 +19141,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "goup.co", true },
{ "goup.com.tr", true },
{ "gouptime.ml", true },
+ { "gourgouli.com", true },
{ "gourmetfestival.de", true },
{ "gourmetspalencia.com", true },
{ "gov.uk", false },
@@ -18491,23 +19155,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "govype.com", true },
{ "gow220.ru", true },
{ "gowancommunications.com", true },
+ { "gowe.wang", false },
{ "goweraesthetics.co.uk", true },
{ "gowildrodeo.co.uk", true },
{ "gowithflo.de", true },
{ "gozenhost.com", true },
{ "gpalabs.com", true },
- { "gpccp.cc", true },
+ { "gpcp.org", true },
{ "gpcsolutions.fr", true },
{ "gpdimaranathasiantar.org", false },
+ { "gpfclan.de", true },
{ "gpgscoins.com", true },
{ "gplans.us", true },
{ "gpm.ltd", true },
+ { "gpna.org", true },
{ "gprs.uk.com", true },
{ "gpsolarpanels.com", true },
{ "gpsvideocanada.com", true },
{ "gpu.nu", true },
{ "gpureport.cz", true },
- { "gpws.ovh", true },
{ "gpyy.net", true },
{ "gqmstore.com.br", true },
{ "gr.search.yahoo.com", false },
@@ -18531,7 +19197,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "graetnew.com", true },
{ "graf-igor.ch", true },
{ "graf.re", true },
- { "grafcaps.com", true },
{ "graffen.dk", true },
{ "grafmag.pl", true },
{ "grafoteka.pl", true },
@@ -18569,6 +19234,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grannyshouse.de", true },
{ "grantcooper.com", true },
{ "grantmorrison.net", true },
+ { "grantpark.org", true },
{ "grantplatform.com", true },
{ "grantsplatform.com", true },
{ "graonatural.com.br", true },
@@ -18583,15 +19249,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "graphic-shot.com", true },
{ "graphobyte.com", true },
{ "grapholio.net", true },
- { "grasboomamersfoort.nl", true },
- { "grasboombinnendoor.nl", true },
- { "grasboomclophaemer.nl", true },
- { "grasboomderoos.nl", true },
- { "grasboomleusden.nl", true },
- { "grasboommax.nl", true },
- { "grasboommeerbalans.nl", true },
- { "grasboomveenendaal.nl", true },
- { "grasboomvondellaan.nl", true },
{ "grasmark.com", true },
{ "grassenberg.de", true },
{ "grasshoppervape.com", true },
@@ -18605,8 +19262,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grattan.co.uk", true },
{ "graumeier.de", true },
{ "gravilink.com", true },
+ { "graviola.es", true },
{ "gravitascreative.net", true },
- { "gravity-inc.net", true },
{ "gravityformspdfextended.com", true },
{ "gravitypdf.com", true },
{ "grawe-blog.at", true },
@@ -18658,6 +19315,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "greenoutdoor.dk", false },
{ "greenpanda.de", true },
{ "greenpartyofnewmilford.org", true },
+ { "greenpaws.ee", true },
{ "greenpeace-magazin.de", true },
{ "greenpeace.berlin", true },
{ "greenponik.com", true },
@@ -18668,6 +19326,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "greensquare.tk", true },
{ "greenteamtwente.nl", true },
{ "greenwithdecor.com", true },
+ { "greer.ru", true },
{ "greg.red", true },
{ "gregbrimble.com", true },
{ "greger.me", true },
@@ -18676,7 +19335,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gregoirow.be", true },
{ "gregorians.org", true },
{ "gregorkofler.com", true },
- { "gregory-kramer.fr", true },
{ "gregory-thibault.com", true },
{ "gregorykelleher.com", true },
{ "gregoryrealestategroup.com", true },
@@ -18707,7 +19365,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "griassdi-reseller.de", true },
{ "gricargo.com", true },
{ "grid.studio", true },
- { "gridle.io", true },
{ "gridpack.org", true },
{ "gridsmartercities.com", true },
{ "griechische-pfoetchen.de", true },
@@ -18718,7 +19375,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grieglogistics.no", true },
{ "griegshipbrokers.com", true },
{ "griegshipbrokers.no", true },
- { "grienenberger.eu", true },
{ "griesser2.de", true },
{ "grifomarchetti.com", true },
{ "grillen-darf-nicht-gesund-sein.de", true },
@@ -18730,6 +19386,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grimstveit.no", true },
{ "grinnellplanes.com", true },
{ "grinnellplans.com", true },
+ { "grippe-impftermin.de", false },
{ "gritte.ch", true },
{ "grizzlys.com", true },
{ "grocerybuild.com", true },
@@ -18777,6 +19434,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grove-archiv.de", true },
{ "growingallthings.co.uk", true },
{ "growit.events", true },
+ { "growthseedconsulting.com", true },
{ "growy.ch", true },
{ "grozter.se", true },
{ "grrmmll.com", true },
@@ -18793,6 +19451,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "grumpy.fr", true },
{ "grumpygamers.com", true },
{ "grundlage.com.ua", true },
+ { "grundschule-mittelbuch.de", true },
{ "grunwaldzki.center", true },
{ "grunwasser.fr", true },
{ "gruper.mk", true },
@@ -18839,7 +19498,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "guanzhong.ca", true },
{ "guardian360.nl", true },
{ "guardianportal.us", true },
- { "guardianproject.info", true },
{ "gubagoo.com", true },
{ "gubagoo.io", true },
{ "gudini.net", true },
@@ -18864,9 +19522,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "guichet-qualifications.fr", true },
{ "guid2steamid.com", true },
{ "guid2steamid.pw", true },
- { "guida.org", true },
{ "guide-peche-cantal.com", true },
{ "guidebook.co.tz", true },
+ { "guidedselling.net", true },
{ "guidedsteps.com", true },
{ "guideline.gov", false },
{ "guidelines.gov", false },
@@ -18883,6 +19541,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "guineapigmustach.es", true },
{ "guitarvolume.com", true },
{ "gulchuk.com", true },
+ { "gulcinulutuna.com", true },
{ "gulfstream.ru", true },
{ "gulshankumar.net", true },
{ "gume4you.com", true },
@@ -18891,19 +19550,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gummientchen.net", true },
{ "gunauc.net", true },
{ "gunbrig.com", true },
+ { "gunlukburc.net", true },
{ "gunn.ee", true },
{ "gunwatch.co.uk", true },
{ "gunworld.com.au", true },
{ "gunz.net", true },
{ "guochang.xyz", true },
{ "guodong.net", true },
- { "guohuageng.com", true },
{ "guoke.com", true },
{ "guolaw.ca", true },
{ "guoliang.me", true },
{ "guozeyu.com", true },
{ "gupfen.ch", true },
- { "guphi.net", false },
{ "gurkan.in", true },
{ "gurmel.ru", true },
{ "gurpusmaximus.com", true },
@@ -18918,13 +19576,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gutools.co.uk", true },
{ "guts.me", true },
{ "guts.moe", true },
- { "gutschein-spezialist.de", true },
+ { "gutscheinemagic.de", true },
{ "gutscheingeiz.de", true },
{ "guus-thijssen.nl", true },
{ "guusvandewal.nl", true },
{ "guyeskens.be", true },
{ "guysauto.com", true },
{ "guytarrant.co.uk", true },
+ { "guzdek.co", true },
{ "gv-neumann.de", true },
{ "gv-salto.nl", true },
{ "gvatas.in", true },
@@ -18943,7 +19602,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gw2zone.net", true },
{ "gwerder.net", true },
{ "gwhois.org", true },
- { "gwilken.com", true },
{ "gwo24.pl", true },
{ "gwrtech.com", true },
{ "gwsec.co.uk", true },
@@ -18957,10 +19615,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gymkirchenfeld.ch", true },
{ "gymnaserenens.ch", true },
{ "gymnasium-hittfeld.de", true },
+ { "gymnastikfitness.se", true },
{ "gympap.de", true },
{ "gynaecology.co", true },
+ { "gynem.de", true },
{ "gynoguide.com", true },
- { "gyoza.beer", true },
{ "gypsyreel.com", true },
{ "gyre.ch", true },
{ "gyrenens.ch", true },
@@ -18976,7 +19635,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "h-jo.net", true },
{ "h001.ru", true },
{ "h09.eu", true },
- { "h10l.com", true },
{ "h11.io", false },
{ "h1ctf.com", true },
{ "h1z1swap.com", true },
@@ -18986,10 +19644,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "h2s-design.de", true },
{ "h2u.tv", true },
{ "h3artbl33d.nl", true },
- { "h3b.nl", true },
{ "h3x.net", true },
{ "h3z.jp", true },
- { "h404bi.com", true },
+ { "h404bi.com", false },
{ "h5197.co", true },
{ "h6729.co", true },
{ "h6729.com", true },
@@ -19002,12 +19659,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ha3.eu", true },
{ "ha6.ru", true },
{ "haaksmadehaanuitvaart.nl", true },
+ { "haaldesignpro.com", true },
{ "haarigerrattenarsch.com", true },
{ "haarlemsesaxofoonschool.nl", true },
{ "haarstudiok99.nl", true },
{ "haavard.me", true },
{ "haazen.xyz", true },
{ "habarisoft.com", true },
+ { "habbstars.org", true },
{ "haberer.me", true },
{ "habitat-domotique.fr", true },
{ "habr.com", true },
@@ -19038,7 +19697,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hacker.parts", true },
{ "hacker1.com", true },
{ "hacker101.com", true },
- { "hacker8.cn", false },
{ "hackerchai.com", true },
{ "hackereyes.com", true },
{ "hackergateway.com", true },
@@ -19051,12 +19709,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hackerone.events", true },
{ "hackerone.net", true },
{ "hackerone.org", true },
- { "hackerschat.net", true },
{ "hackgins.com", true },
{ "hackhouse.sh", true },
{ "hackingand.coffee", false },
- { "hackingdh.com", true },
{ "hackingondemand.com", true },
+ { "hackintosh.eu", true },
{ "hackmd.io", true },
{ "hackmeimfamo.us", true },
{ "hackreone.com", true },
@@ -19072,6 +19729,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hady.fr", true },
{ "haeckdesign.com", true },
{ "haefligermedia.ch", true },
+ { "haehnel.xyz", true },
{ "haemka.de", true },
{ "haens.li", true },
{ "haerwu.biz", true },
@@ -19087,12 +19745,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "haha-raku.com", true },
{ "haha.nl", true },
{ "hahay.es", true },
- { "haibara.top", true },
{ "haiboxu.com", true },
{ "hailer.com", true },
{ "hailstorm.nl", true },
- { "haim.bio", true },
- { "haimablog.ooo", true },
+ { "haindlmuehle.eu", true },
{ "haircrazy.com", true },
{ "hairplaybychenellekay.com", false },
{ "hairraisingphotobooths.co.uk", true },
@@ -19119,6 +19775,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "halihali.tv", true },
{ "halitopuroprodutos.com.br", true },
{ "halkirkbouncycastles.co.uk", true },
+ { "hallaminternet.com", true },
{ "hallelujahsoftware.com", true },
{ "halletienne.fr", true },
{ "hallhuber.com", true },
@@ -19146,11 +19803,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hamiltonweather.ca", true },
{ "hammer-schnaps.com", true },
{ "hammer-sms.com", true },
+ { "hammerpondkennels.co.uk", true },
{ "hampl.tv", true },
{ "hampshiretechservices.co.uk", true },
{ "hana.ondemand.com", true },
{ "hanakaraku.com", true },
- { "hanakatova.com", true },
{ "hanazono.tokyo", true },
{ "hanbing.it", true },
{ "handbrake.fr", true },
@@ -19173,7 +19830,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hang333.moe", true },
{ "hangar.hosting", true },
{ "hangcapnach.com", true },
- { "hangerphant.com", true },
{ "hangout", true },
{ "hangouts.google.com", true },
{ "hangtenseo.com", true },
@@ -19184,6 +19840,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hannah.link", true },
{ "hannahi.com", true },
{ "hannasecret.de", true },
+ { "hannes.paris", true },
{ "hannoluteijn.nl", true },
{ "hannover.de", true },
{ "hannywbarek.com", true },
@@ -19207,14 +19864,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hantse.com", true },
{ "hanu.la", true },
{ "hanyibo.com", true },
+ { "hanying55.com", true },
+ { "hanying6.com", true },
+ { "hanying9.com", true },
+ { "hanyingw.com", true },
{ "hanzubon.jp", true },
{ "hao-zhang.com", true },
{ "haogoodair.ca", true },
{ "haoqi.men", true },
{ "haorenka.org", true },
{ "haozhang.org", true },
+ { "haozhexie.com", true },
{ "hapheemraadssingel.nl", true },
- { "hapimiennam.com", true },
{ "haplogroup.org", true },
{ "happist.com", true },
{ "happy-baby.info", true },
@@ -19264,7 +19925,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "harisht.me", false },
{ "harititan.com", true },
{ "harjitbhogal.com", true },
- { "harlor.de", true },
{ "harmfarm.nl", true },
{ "harmoney.co.nz", true },
{ "harmoney.com", true },
@@ -19316,14 +19976,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hashes.org", true },
{ "hashi.dk", true },
{ "hashicorp.com", true },
- { "hashimah.ca", true },
{ "hashimoto-jimusho.com", true },
{ "hashinteractive.com", true },
{ "hashish.net", true },
{ "hashiura.jp", true },
- { "hashnode.com", true },
{ "hashru.nl", true },
{ "hashtagpatriot.com", true },
+ { "hashtagswimwear.com", true },
{ "hashworks.net", true },
{ "hashxp.org", true },
{ "hasilocke.de", true },
@@ -19373,6 +20032,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hawaar.com", true },
{ "hawaiianchoice.com", true },
{ "hawaiioceanproject.com", true },
+ { "hawaiiwho.com", true },
{ "hawkeyeinsight.com", true },
{ "hawkinsonkiaparts.com", true },
{ "hawkofgeorgia.com", true },
@@ -19395,11 +20055,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hazeover.com", true },
{ "hazloconlapix.com", true },
{ "hazukilab.com", true },
- { "hb5197.com", false },
{ "hb6729.com", true },
{ "hb8522.com", true },
{ "hb9397.com", true },
{ "hbcu-colleges.com", true },
+ { "hbgshop.cf", true },
{ "hbkonsult.com", true },
{ "hboeck.de", true },
{ "hbpowell.com", true },
@@ -19410,7 +20070,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hd-offensive.at", false },
{ "hd-only.org", true },
{ "hd-outillage.com", true },
- { "hd5197.com", false },
{ "hd6729.com", true },
{ "hd9397.com", true },
{ "hd9721.com", true },
@@ -19425,21 +20084,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hdhoang.space", true },
{ "hdkandsons.com", true },
{ "hdnastudio.com", true },
- { "hdritalyphotos.com", true },
{ "hdrsource.com", true },
{ "hdrtranscon.com", true },
{ "hds-lan.de", true },
{ "hdtwinks.com", true },
{ "hdv.paris", true },
{ "hdwallpapers.net", true },
+ { "he.kg", true },
{ "heaaart.com", true },
- { "head.org", true },
{ "head.ru", true },
{ "headforcloud.com", true },
{ "headjapan.com", true },
{ "headlinepublishing.be", true },
- { "headlinesclub.com", true },
- { "headshotharp.de", true },
{ "healike.hk", true },
{ "healingourskin.com", true },
{ "health-booster.com", false },
@@ -19455,6 +20111,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "healtheffectsofasbestos.com", true },
{ "healthery.com", true },
{ "healthfinder.gov", true },
+ { "healthfitapp.com", true },
{ "healthfoam.com", true },
{ "healthgames.co.uk", true },
{ "healthiercompany.com", true },
@@ -19467,8 +20124,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "healthy-map.com", true },
{ "healthybeterlife.click", true },
{ "healthyfitfood.com", true },
+ { "healthyhomesofmichigan.com", true },
{ "healthypeople.gov", true },
- { "healthyrecharge.com", true },
{ "healthyspirituality.org", true },
{ "healthysuperhuman.com", true },
{ "healthyteame.com", true },
@@ -19476,17 +20133,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "heapkeeper.org", true },
{ "hearmeraw.uk", true },
{ "heartcomms.com.au", true },
+ { "heartfelttokens.com", true },
{ "heartlandbiomed.com", true },
{ "heartmdinstitute.com", true },
{ "heartsintrueharmony.com", true },
{ "hearttruth.gov", true },
{ "heartview.com.br", true },
{ "heartwoodart.com", true },
+ { "hearty.blog", true },
{ "hearty.ga", true },
{ "hearty.gq", true },
{ "hearty.me", true },
{ "hearty.ml", true },
- { "hearty.ooo", true },
{ "hearty.tw", true },
{ "heartyapp.tw", true },
{ "heartycraft.com", true },
@@ -19497,7 +20155,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "heavensattic.co.uk", true },
{ "heavensinferno.net", true },
{ "heavyequipments.org", true },
- { "heayao.com", true },
{ "hebamme-cranio.ch", true },
{ "hebikhiv.nl", true },
{ "hebingying.cn", true },
@@ -19506,7 +20163,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hec.global", true },
{ "heckelektro.de", true },
{ "heckerundknopp.de", true },
- { "heddoun.com", true },
{ "hedge.fi", true },
{ "hedgeschool.ie", true },
{ "hedonism.org", true },
@@ -19532,6 +20188,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "heighton.com.au", true },
{ "heijblok.com", true },
{ "heijdel.nl", true },
+ { "heijmans.email", true },
{ "heikegastmann.com", true },
{ "heikohessenkemper.de", true },
{ "heikorichter.name", true },
@@ -19544,6 +20201,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "heinemeier.dk", true },
{ "heino-peters.de", true },
{ "heinpost.nl", false },
+ { "heinrich-kleyer-schule.de", true },
{ "heinzelmann.co", true },
{ "heiraten-gardasee.de", true },
{ "heiraten-venedig.de", true },
@@ -19586,12 +20244,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hellomookie.com", true },
{ "hellomouse.cf", true },
{ "hellomouse.net", true },
+ { "hellosalmon.com", true },
{ "hellovillam.com", true },
{ "helloworldhost.com", false },
{ "helloyemek.com", true },
{ "hellsgamers.pw", true },
{ "hellsh.com", true },
+ { "helm-pokale.at", true },
{ "helm-pokale.de", true },
+ { "helm-trophy.com", true },
{ "help.simpletax.ca", true },
{ "help207.xyz", true },
{ "helpconnect.com.au", true },
@@ -19615,11 +20276,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hems.si", true },
{ "hemtest.com", true },
{ "hen.ne.ke", true },
- { "henchman.io", true },
{ "hendersonrealestatepros.com", true },
{ "hendersonvalleyautomotive.co.nz", true },
{ "hendric.us", false },
{ "hendrickx.be", true },
+ { "hendrik.li", true },
{ "hendrinortier.nl", true },
{ "hengroenet.de", true },
{ "hengstumone.com", true },
@@ -19629,21 +20290,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "henkverlinde.com", false },
{ "henley-computer-repairs.co.uk", true },
{ "henleybouncycastles.co.uk", true },
+ { "henlich.de", true },
{ "hennecke-forstbetrieb.de", true },
{ "henneke.me", true },
{ "hennes-haan.de", true },
{ "hennes-shop.de", true },
{ "hennies.org", true },
- { "henningkerstan.de", true },
+ { "henningkerstan.org", true },
{ "hennymerkel.com", true },
- { "henok.eu", true },
{ "henrik-bondtofte.dk", true },
{ "henriksen.is", true },
{ "henrikwelk.de", true },
{ "henrilammers.nl", true },
{ "henry.gg", true },
{ "henryocallaghan.com", true },
- { "henryphan.com", false },
{ "henrysautodetail.com", true },
{ "hentaipornography.com", true },
{ "hentaiz.net", true },
@@ -19651,6 +20311,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hentschke-betonfertigteilwerk.de", true },
{ "hentschke-invest.de", true },
{ "henzenhoning.nl", true },
+ { "hepla.de", true },
{ "heppler.net", true },
{ "heptafrogs.de", true },
{ "her25.com", false },
@@ -19668,6 +20329,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "herecsrymy.cz", true },
{ "heren.fashion", true },
{ "heretic-guild.com", true },
+ { "hereticle.com", true },
{ "heritagebaptistchurch.com.ph", true },
{ "heritagecoffee.co.uk", true },
{ "herkam.pl", true },
@@ -19693,12 +20355,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "herringboneeats.com", true },
{ "herringsresidence.be", true },
{ "herrkaschke.com", true },
+ { "herrschaftlich-durch-dresden.de", true },
{ "herrsmith.com", true },
{ "herrtxbias.net", false },
{ "hersdorf-eifel.de", true },
{ "hertsbouncycastles.com", true },
{ "hertz.bj", true },
- { "herzbotschaft.de", true },
{ "herzfuersoziales.at", true },
{ "herzig.cc", true },
{ "herzogglass.com", true },
@@ -19712,7 +20374,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hestia-systeme.fr", true },
{ "hesyifei.com", true },
{ "hetene.nl", true },
- { "hethely.ch", true },
{ "hetluisterbos.be", true },
{ "hetmer.cz", true },
{ "hetushu.com", true },
@@ -19726,6 +20387,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hexed.it", true },
{ "hexiaohu.cn", true },
{ "hexicurity.com", true },
+ { "hexid.me", false },
+ { "hexieshe.com", true },
{ "hexo.io", false },
{ "hexony.com", true },
{ "hexr.org", true },
@@ -19739,11 +20402,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hg.gg", true },
{ "hg.python.org", true },
{ "hg0086.la", true },
- { "hg170.cc", true },
{ "hgbet.com", true },
{ "hghanbarimd.com", true },
{ "hgpowerglue.nl", true },
- { "hguandl.com", true },
{ "hgvnet.de", true },
{ "hgw168.com", true },
{ "hgw777.cc", true },
@@ -19765,12 +20426,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hhs.gov", true },
{ "hhtoners.com.br", true },
{ "hhuitvaart.nl", true },
+ { "hi.team", true },
{ "hibari.moe", true },
{ "hiccupsandjuice.co.uk", true },
{ "hickorywinecellar.com", true },
{ "hicl.org", true },
{ "hicoria.com", true },
- { "hicts.nl", true },
{ "hiczp.com", true },
{ "hidbo.de", true },
{ "hiddendepth.ie", true },
@@ -19782,17 +20443,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hiddenhillslighting.com", true },
{ "hiddenhillsoutdoorlighting.com", true },
{ "hiddenmalta.net", true },
+ { "hiddout.com", true },
{ "hideallip.com", true },
{ "hideo54.com", true },
{ "hideouswebsite.com", true },
{ "hidroshop.com.br", true },
{ "hidroshoping.com.br", true },
- { "hidupnomad.com", true },
{ "hielscher.com", true },
{ "hieu.com.au", true },
{ "hiffo.de", true },
{ "higgstools.org", true },
{ "highair.net", true },
+ { "highcorkett.com", true },
{ "highdesertroboticsurgery.com", true },
{ "higherpress.org", true },
{ "highkick.jp", true },
@@ -19801,12 +20463,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "highlevelwoodlands.com", true },
{ "highlightsfootball.com", true },
{ "highlnk.com", true },
+ { "highpressuretech.com", true },
{ "highspeed-arnsberg.de", true },
{ "highspeedinternet.my", true },
{ "hightimes.com", true },
{ "highwaytohoell.de", true },
{ "higilopocht.li", true },
- { "hiimodel.com", true },
{ "hik-cloud.com", true },
{ "hikawa.top", true },
{ "hike.pics", true },
@@ -19834,6 +20496,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hilltopcellar.com", true },
{ "hilnu.com", true },
{ "hiltonarubabeachservices.com", true },
+ { "himalaya-masala.at", true },
{ "himecorazon.com", true },
{ "himekomi.com", true },
{ "himiku.com", true },
@@ -19848,8 +20511,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hinterhofbu.de", true },
{ "hinterposemuckel.de", true },
{ "hiparish.org", true },
- { "hiphop.ren", true },
{ "hipnos.net", true },
+ { "hippiekiller.net", true },
{ "hippies.com.br", true },
{ "hippomovers.com", true },
{ "hippopotamuses.org", true },
@@ -19881,6 +20544,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hisregistries.net", true },
{ "hisregistries.org", true },
{ "histoire-cite.ch", true },
+ { "histoiresdemotos.fr", true },
{ "historia-arte.com", true },
{ "historiasdepueblo.es", true },
{ "history-schools.com", true },
@@ -19896,7 +20560,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hititgunesi-tr.com", true },
{ "hitmanstat.us", true },
{ "hitn.at", true },
- { "hitoapi.cc", true },
+ { "hitoapi.cc", false },
{ "hitocom.net.br", true },
{ "hitokoto-mania.com", true },
{ "hitokoto.cn", false },
@@ -19910,7 +20574,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hiv.gov", true },
{ "hivatalinfo.hu", true },
{ "hiverlune.net", true },
- { "hiwiki.tk", true },
{ "hiyacar.co.uk", true },
{ "hiyobi.me", true },
{ "hiyuki2578.net", false },
@@ -19928,6 +20591,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hkbsurgery.com", true },
{ "hkdobrev.com", true },
{ "hkr.at", true },
+ { "hks-ffm.de", true },
{ "hks-projekt.at", true },
{ "hks.pw", true },
{ "hktech.com", true },
@@ -19943,6 +20607,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hloe0xff.ru", true },
{ "hlsmandarincentre.com", true },
{ "hlucas.de", true },
+ { "hm1ch.com", true },
+ { "hm1ch.ovh", true },
{ "hm773.net", true },
{ "hm773.org", true },
{ "hmcdj.cn", true },
@@ -19957,6 +20623,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hnonline.sk", true },
{ "hnrk.io", true },
{ "hnyp.hu", true },
+ { "ho18.net", true },
+ { "ho518.net", true },
+ { "ho68.net", true },
+ { "ho918.net", true },
{ "hoaas.no", true },
{ "hoahau.org", true },
{ "hoarding.me", true },
@@ -19965,7 +20635,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hobby-drechselei.de", true },
{ "hobbyspeed.com", true },
{ "hocassian.cn", true },
- { "hochdorf-tennis.de", true },
{ "hochhaus.us", true },
{ "hochoukikikiraku.com", true },
{ "hochyi.com", true },
@@ -20003,6 +20672,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hokioisecurity.com", true },
{ "hokung.xyz", true },
{ "hokusya.com", true },
+ { "holad.de", true },
{ "holadinero.es", true },
{ "holadinero.mx", true },
{ "holboxwhalesharktours.com", false },
@@ -20015,7 +20685,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "holland-sailing.de", true },
{ "hollandsdiep.nl", true },
{ "hollermann.eu", true },
- { "hollo.me", true },
{ "hollowpoint.xyz", true },
{ "hollowrap.com", true },
{ "hollowwinds.xyz", true },
@@ -20026,6 +20695,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "holofono.com", true },
{ "holofox.ru", true },
{ "holoxplor.space", true },
+ { "holtackersleather.be", true },
{ "holvonix.com", true },
{ "holycrossphl.org", true },
{ "holycrossverobeach.org", true },
@@ -20051,11 +20721,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "holzvergaser-forum.de", true },
{ "homatism.com", true },
{ "hombresconestilo.com", true },
+ { "homeadore.com", true },
{ "homebasedsalons.com.au", true },
{ "homebodyalberta.com", true },
{ "homecareassociatespa.com", true },
+ { "homecareinterio.com", true },
{ "homecheck.gr", true },
{ "homecompost.in", true },
+ { "homedatacenter.com.br", true },
{ "homeeducator.com", true },
{ "homefacialpro.com", false },
{ "homegardeningforum.com", true },
@@ -20111,7 +20784,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hoogeveen.nl", true },
{ "hookany.com", true },
{ "hookbin.com", true },
- { "hookupndate.com", true },
{ "hookxlab.org", true },
{ "hoooc.com", true },
{ "hooowl.com", true },
@@ -20128,9 +20800,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hope-line-earth.jp", true },
{ "hopecbd.com", true },
{ "hopemeet.me", true },
+ { "hopeofmyheart.com", true },
{ "hopesanddreams.org.uk", true },
{ "hopla.sg", true },
{ "hoplongtech.com", true },
+ { "hoponmedia.de", true },
{ "hopps.me", true },
{ "hoppyx.com", true },
{ "hopzone.net", true },
@@ -20157,6 +20831,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "horrormovies.gr", true },
{ "horsegateway.com", true },
{ "horsehunter.co.uk", true },
+ { "horsky.me", true },
{ "horstmanshof.eu", true },
{ "horton-brasses.com", true },
{ "hory.me", true },
@@ -20172,8 +20847,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hostadvice.com", true },
{ "hostarea51.com", true },
{ "hostco.nl", true },
+ { "hostcoz.com", true },
{ "hosteasy.nl", false },
- { "hostedcomments.com", true },
{ "hostedtalkgadget.google.com", true },
{ "hostfission.com", true },
{ "hostiberi.com", true },
@@ -20190,11 +20865,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hostingsolutions.cz", true },
{ "hostix.de", true },
{ "hostmark.pl", true },
+ { "hostme.co.il", false },
{ "hostmijnpagina.nl", true },
{ "hostmodern.com.au", true },
{ "hostmywebsite.online", true },
{ "hosts.cf", true },
{ "hot-spa.ch", true },
+ { "hotartup.com", true },
{ "hotcandlestick.com", true },
{ "hotchillibox.com", true },
{ "hotcoin.io", true },
@@ -20230,17 +20907,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hotelvalena.com", true },
{ "hotelvillaluisa.de", true },
{ "hothbricks.com", true },
- { "hothiphopmusic.com", true },
{ "hotjuice.com", true },
{ "hotnewhiphop.com", true },
{ "hoton.in", true },
{ "hotornot.com", true },
{ "hotplate.co.nz", true },
+ { "hotplug.gr", true },
{ "hottaro.com", true },
{ "hottheme.net", true },
{ "hotting.nl", true },
{ "hottubhirenewcastle.co.uk", true },
{ "hottubspasnewcastle.co.uk", true },
+ { "hotvideosgalleries.com", true },
{ "hotwifer.com", true },
{ "houdremont-la-courneuve.info", true },
{ "houraiteahouse.net", true },
@@ -20249,10 +20927,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "houseboydesigns.com", true },
{ "housekeeperlondon.co.uk", true },
{ "houselocal.co.uk", true },
+ { "housemates.uk.com", true },
{ "houseofherbs.gr", true },
{ "houseofhouston.com", true },
{ "houseofyee.com", true },
- { "houser.lu", true },
{ "housese.at", true },
{ "houstonapartmentinsiders.com", true },
{ "houstonauthorizedrepair.com", true },
@@ -20263,7 +20941,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "how-old.info", true },
{ "how2dev.tools", true },
{ "howa-n.net", true },
- { "howardtyson.com", true },
{ "howbehealthy.com", true },
{ "howbigismybuilding.com", true },
{ "howellaccounts.co.uk", true },
@@ -20283,6 +20960,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "howtomovetheneedle.com", true },
{ "howtoteachviolin.com", true },
{ "howtotech.de", true },
+ { "howtutu.click", true },
+ { "howtutu.com", true },
+ { "howtutu.email", true },
+ { "howtutu.eu", true },
+ { "howtutu.info", true },
+ { "howtutu.link", true },
+ { "howtutu.net", true },
+ { "howtutu.org", true },
{ "hoxo.fr", true },
{ "hozana.si", false },
{ "hp-work.net", true },
@@ -20307,6 +20992,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hranicka.cz", true },
{ "hrbanen.nl", true },
{ "hrbatypes.cz", true },
+ { "hrbl.lc", true },
{ "hrbrt.nl", true },
{ "hrdns.de", false },
{ "hrebecek.cz", true },
@@ -20314,6 +21000,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hreflang.info", true },
{ "hrjfeedstock.org", true },
{ "hrltech.com.br", true },
+ { "hrmg.agency", true },
+ { "hro.to", true },
{ "hroling.nl", true },
{ "hroschyk.cz", true },
{ "hrsa.gov", true },
@@ -20345,13 +21033,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hstspreload.de", true },
{ "hstspreload.org", true },
{ "hsturan.com", true },
- { "hsuan.pw", false },
+ { "hsuan.pw", true },
{ "hszemi.de", true },
{ "ht.mk", true },
{ "htaccessbook.com", true },
{ "htaps.com", true },
{ "htb.click", true },
- { "htdcomputer.vn", true },
{ "hte.ovh", true },
{ "hti.digital", true },
{ "htmanager.fr", true },
@@ -20363,7 +21050,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "htmlacademy.ru", true },
{ "htmlvalidator.com", true },
{ "htmlyse.com", true },
- { "htmue.net", true },
{ "htmue.org", true },
{ "htsure.ma", true },
{ "http2.eu", true },
@@ -20378,8 +21064,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "httpsispisseasy.com", true },
{ "httpsnow.com", true },
{ "httpsnow.org", true },
+ { "httpstest.com", true },
+ { "httpstest.eu", true },
+ { "httpstest.nl", true },
{ "httpswatch.ca", true },
{ "httpswatch.com", true },
+ { "httpswatch.eu", true },
+ { "httpswatch.nl", true },
+ { "hu-a-u.com", true },
{ "hu.search.yahoo.com", false },
{ "huagati.com", true },
{ "huahinpropertylisting.com", true },
@@ -20390,7 +21082,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "huangjiaint.com", true },
{ "huangjingjing.com", true },
{ "huangqifu.com", true },
- { "huangzenghao.cn", false },
{ "huaqian.art", true },
{ "huashan.co.uk", true },
{ "hub.org.ua", true },
@@ -20403,11 +21094,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hubchain.io", true },
{ "hubchain.org", true },
{ "huber-informatik.de", true },
+ { "hubitt.com", true },
{ "hubok.net", true },
{ "hubspot.com", true },
{ "huchet.me", true },
{ "hudebnibazarmixer.cz", true },
{ "hudobniny.net", true },
+ { "hudognik.com", true },
{ "hudrydum.cz", true },
{ "hudsonfaceandeye.com", true },
{ "huduser.gov", true },
@@ -20415,7 +21108,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "huersch.com", true },
{ "hues-in-lee.de", true },
{ "huffduffer.com", true },
- { "hugh-dancy.com", true },
{ "hugi.is", true },
{ "huglen.info", true },
{ "hugo.pro", true },
@@ -20423,7 +21115,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hugolegrand.fr", true },
{ "hugolynx.fr", true },
{ "hugonote.ml", true },
- { "hugonote.ovh", true },
{ "hugovr.nl", true },
{ "huguesblanchard.paris", true },
{ "huguesditciles.com", true },
@@ -20434,6 +21125,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "huininga.nl", true },
{ "huininga.org", true },
{ "huipc.com", true },
+ { "huirongis.me", true },
{ "huisartsenpraktijkheemraadssingel.nl", true },
{ "huisartsenpraktijksonmezer.nl", true },
{ "huisartsenpraktijkzonnehoed.nl", true },
@@ -20451,7 +21143,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "human-clone.com", true },
{ "humanenrich.com", true },
{ "humanesources.com", true },
+ { "humanit.com.au", true },
{ "humanity.com", true },
+ { "humaniza.com.mx", true },
{ "humans.io", true },
{ "humanzee.com", true },
{ "humass.nl", true },
@@ -20482,6 +21176,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "humbledot.com", true },
{ "humboldthomeguide.com", true },
{ "humboldtmfg.com", true },
+ { "humdingersnj.com", true },
{ "humeur.de", true },
{ "humexe.com", true },
{ "humio.com", true },
@@ -20490,15 +21185,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "humpen.se", true },
{ "humppakone.com", true },
{ "hund.io", true },
- { "hundesport-psvhalle.de", true },
{ "hundeverwaltung.de", true },
{ "hundhausen.de", true },
{ "hundter.com", true },
{ "hunger.im", true },
{ "huniverse.co", true },
+ { "hunngard.com", true },
{ "hunqz.com", true },
{ "hunstoncanoeclub.co.uk", true },
- { "hunter-read.com", true },
{ "hunter.io", true },
{ "hunterkehoe.com", true },
{ "huntexpired.com", true },
@@ -20510,9 +21204,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "huoduan.com", true },
{ "huonit.com.au", true },
{ "huoqibaike.club", true },
+ { "huotuyouxi.com", true },
{ "huoyankan.com", true },
{ "hup.hu", true },
- { "hurd.is", true },
{ "huren.nl", true },
{ "hurleyhomestead.com", true },
{ "huroji.com", true },
@@ -20522,6 +21216,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "husic.net", false },
{ "huskyeye.de", true },
{ "huskyinc.us", false },
+ { "husqvarnamoped.se", true },
{ "hussam.eu.org", true },
{ "hustlehope.com", true },
{ "huurwoordenaar.nl", true },
@@ -20531,18 +21226,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "huxley.net", true },
{ "huynhviet.com", true },
{ "huyvu.nl", true },
+ { "hv-huset.no", true },
{ "hvdbox.de", true },
+ { "hvgg.de", true },
{ "hvh.no", true },
{ "hvmk.nl", true },
{ "hvrint.de", true },
+ { "hvt.com.au", true },
{ "hvtuananh.com", true },
{ "hwag-pb.de", true },
{ "hwlibre.com", true },
+ { "hwsw.io", true },
+ { "hwx8.com", true },
+ { "hwxvip.com", true },
{ "hx53.de", true },
{ "hxp.io", true },
{ "hxsf.me", true },
{ "hxying.com", true },
- { "hy1.com", true },
{ "hybridworx.com", true },
{ "hybridworx.de", true },
{ "hybridworx.eu", true },
@@ -20556,7 +21256,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hydra.zone", true },
{ "hydracommunity.net", true },
{ "hydrante.ch", true },
- { "hydrazin.pw", true },
+ { "hydrasolutions.de", true },
{ "hydro17.com", true },
{ "hydroagro.pl", true },
{ "hydrographicsocietybenelux.eu", true },
@@ -20568,12 +21268,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hygo.com", true },
{ "hyk.me", true },
{ "hylemorphica.org", true },
+ { "hyncice.com", true },
{ "hynek.me", true },
{ "hyparia.fr", true },
{ "hyparia.org", true },
{ "hype.ru", true },
- { "hypehost.net", false },
- { "hypemgmt.com", true },
{ "hyper-text.org", true },
{ "hyper.ai", true },
{ "hyper.lol", true },
@@ -20587,6 +21286,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hypersomnia.com", true },
{ "hyperstack.org", true },
{ "hyperthymia.com", true },
+ { "hyperv.fr", true },
{ "hyphen.co.za", true },
{ "hyphenpda.co.za", true },
{ "hypnovir.us", true },
@@ -20596,6 +21296,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hypothes.is", true },
{ "hypothesis.link", true },
{ "hypothyroidmom.com", true },
+ { "hyr.mn", true },
+ { "hysolate.com", true },
{ "hytale.com", true },
{ "hytzongxuan.com", true },
{ "hytzongxuan.top", true },
@@ -20604,9 +21306,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hyvanolonterapia.fi", true },
{ "hyvinvointineuvoja.fi", true },
{ "hywlovexyc.info", true },
+ { "hyyen.com", true },
{ "hztgzz.com", true },
{ "i--b.com", true },
- { "i-aloks.ru", true },
+ { "i-0v0.in", true },
+ { "i-fastnet.net", true },
{ "i-geld.de", true },
{ "i-hakul.net", true },
{ "i-hoz.ru", true },
@@ -20625,6 +21329,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "i2b.ro", true },
{ "i2gether.org.uk", true },
{ "i2verify.com", true },
+ { "i4m1k0su.com", true },
{ "i5197.co", true },
{ "i5y.co.uk", true },
{ "i5y.org", true },
@@ -20656,9 +21361,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iam.soy", true },
{ "iamanewme.com", true },
{ "iambozboz.co.uk", true },
- { "iamcryptoki.com", true },
{ "iamhansen.xyz", true },
+ { "iamhealthystore.com", true },
{ "iamjoshellis.com", true },
+ { "iamlbk.com", true },
{ "iamlife.com", true },
{ "iamtheib.me", true },
{ "iamtonyarthur.com", true },
@@ -20705,13 +21411,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ibericarreicomsa.es", true },
{ "ibericartechnik.es", true },
{ "iberiserver.es", true },
+ { "ibestproduct.com", true },
{ "ibestreview.com", true },
{ "ibexcore.com", true },
{ "ibi.mt", true },
+ { "ibidyoupeace.com", true },
{ "ibigawamizueco.com", true },
{ "ibin.co", true },
{ "ibiz.mk", true },
{ "iblackfriday.ro", true },
+ { "ibloggospel.com", true },
{ "ibodyiq.com", true },
{ "ibps-recruitment.in", true },
{ "ibrainmedicine.org", true },
@@ -20722,16 +21431,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ibwc.gov", true },
{ "ibykos.com", true },
{ "ic-lighting.com.au", true },
- { "ic-spares.com", true },
{ "ic3.gov", true },
{ "icafecash.com", true },
{ "icanhasht.ml", true },
{ "icanhazpass.com", true },
{ "icarlos.net", true },
{ "icasture.top", true },
+ { "iccorporateinteriors.com.au", true },
{ "iccpublisher.com", true },
{ "icdp.org.ua", true },
{ "ice.xyz", true },
+ { "iceandfiremechanical.com", true },
{ "iceberg.academy", true },
{ "icecars.net", true },
{ "icecontrol.ro", true },
@@ -20744,6 +21454,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ichasco.com", true },
{ "ichbinein.org", true },
{ "ichbinkeinreh.de", true },
+ { "ichitaso.com", true },
{ "iclart.com", true },
{ "iclinic.ua", true },
{ "icloud.st", true },
@@ -20751,15 +21462,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "icmhd.ch", true },
{ "icmp2018.org", true },
{ "icmshoptrend.com", true },
+ { "icnc.ga", true },
{ "icobench.com", true },
{ "icodeconnect.com", true },
{ "icoh.it", true },
{ "iconomi.net", true },
{ "icowhitepapers.co", true },
{ "icpc.pp.ua", true },
- { "icq-project.net", true },
{ "icsfinomornasco.gov.it", true },
- { "icsfinomornasco.it", true },
{ "ict-concept.nl", true },
{ "ict-crew.nl", true },
{ "ict-helpteam.nl", true },
@@ -20772,7 +21482,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ictoniolopisa.it", true },
{ "ictradar.com", true },
{ "ictussistemas.com.br", true },
- { "icy.aq", true },
{ "icyapril.com", true },
{ "icymint.me", true },
{ "icynet.eu", true },
@@ -20784,21 +21493,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "id0-rsa.pub", true },
{ "idaeus.eu", true },
{ "idahoansforliberty.net", true },
- { "idar-oberstein.de", true },
+ { "idar-oberstein.de", false },
{ "idarv.com", true },
{ "idaspis.com", true },
{ "idatha.de", true },
+ { "idbs.com", true },
{ "idc-business.be", true },
{ "idconsult.nl", true },
{ "ideageek.net", true },
{ "ideal-envelopes.co.uk", false },
{ "idealimplant.com", true },
+ { "idealize.ml", true },
{ "idealninajemce.cz", false },
{ "idealsegurancaeletronica.com.br", true },
{ "idealtruss.com", true },
{ "idealtruss.com.tw", true },
{ "idealwhite.space", true },
- { "ideasenfoto.com", true },
{ "ideashop.com", true },
{ "ideatarmac.com", true },
{ "ideaweb.de", true },
@@ -20806,7 +21516,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "idensys.nl", true },
{ "ident-clinic.be", true },
{ "identassist.com", true },
- { "identifyme.net", true },
{ "identigraf.center", true },
{ "identity.plus", true },
{ "identitytheft.gov", true },
@@ -20820,7 +21529,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "idgard.de", false },
{ "idgateway.co.uk", true },
{ "idhosts.co.id", true },
+ { "idid.tk", true },
{ "idiotentruppe.de", true },
+ { "idirect.com.ng", true },
{ "idleleo.com", true },
{ "idlethoughtsandramblings.com", true },
{ "idmanagement.gov", true },
@@ -20830,7 +21541,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "idodiandina.com", true },
{ "idolf.dk", true },
{ "idolish7.fun", false },
- { "idolknow.com", true },
+ { "idolshop.dk", true },
{ "idontplaydarts.com", true },
{ "idoparadoxon.hu", true },
{ "idratherbequilting.com", true },
@@ -20846,10 +21557,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "idunno.org", true },
{ "idvl.de", true },
{ "idxforza.com", true },
+ { "idyl.fr", true },
{ "idysse.com", true },
{ "ie.search.yahoo.com", false },
{ "iea-annex61.org", true },
- { "iec.pe", true },
+ { "iedcommunications.com", true },
{ "ieeedeis.org", true },
{ "ieeesb.nl", true },
{ "ieeesbe.nl", true },
@@ -20861,9 +21573,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ies-italia.it", true },
{ "iesonline.co.in", true },
{ "ieval.ro", true },
+ { "iexpert99.com", true },
{ "ifan.ws", true },
- { "ifangpei.cn", true },
- { "ifangpei.com.cn", true },
{ "ifelse.io", true },
{ "ifengge.cn", true },
{ "ifengge.me", true },
@@ -20872,19 +21583,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ifightsurveillance.com", true },
{ "ifightsurveillance.net", true },
{ "ifightsurveillance.org", true },
+ { "ifixe.ch", false },
{ "iflare.de", true },
{ "ifma.edu.br", true },
{ "ifort.fr", true },
{ "ifosep.fr", true },
{ "ifoss.me", true },
+ { "ifreetion.cn", true },
{ "ifsac.org", true },
{ "ifsclist.com", true },
{ "ifsr.de", true },
{ "ift.cx", true },
- { "iftrue.de", true },
+ { "iftarsaati.org", true },
+ { "iftrue.de", false },
{ "ifttl.com", true },
{ "ifxd.bid", true },
{ "ig.com", true },
+ { "ig.me", true },
{ "iga-semi.jp", true },
{ "igarage.nl", true },
{ "igcc.jp", true },
@@ -20894,10 +21609,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iggprivate.com", true },
{ "iggsoft.com", true },
{ "iggsoftware.com", true },
+ { "igi.codes", true },
{ "igiftcards.de", true },
{ "igiftcards.nl", true },
{ "igimusic.com", true },
{ "igk.nz", true },
+ { "iglobus.cz", true },
{ "iglosujemy.pl", true },
{ "igmus.org", true },
{ "ignace72.eu", true },
@@ -20924,6 +21641,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ihearmedical.com", true },
{ "ihempz.cz", true },
{ "ihkk.net", true },
+ { "ihls.stream", true },
+ { "ihls.world", false },
{ "ihmphila.org", true },
{ "ihoey.com", true },
{ "ihollaback.org", true },
@@ -20931,10 +21650,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ihorizon.jp", true },
{ "ihostup.net", true },
{ "ihotel.io", true },
+ { "ihre-pflege-sachsen.de", true },
{ "ihrhost.com", true },
{ "ihtdenisjaccard.com", true },
{ "ihuan.me", true },
{ "ii5197.co", true },
+ { "ii6729.co", true },
{ "ii6729.com", true },
{ "ii6957.co", true },
{ "ii74.com", true },
@@ -20946,10 +21667,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iiax.net", true },
{ "iiax.org", true },
{ "iiit.pl", true },
+ { "iimarckus.org", true },
{ "iinf.in", true },
{ "iinix.com", true },
{ "iiong.com", true },
{ "iisjy.cn", true },
+ { "iitowns.ir", true },
{ "iix.se", true },
{ "iiyama-bg.com", true },
{ "ijinus.com", true },
@@ -20980,7 +21703,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ikkev.de", true },
{ "ikkoku.de", true },
{ "iklive.org", false },
- { "ikmx.net", true },
{ "iknet.top", true },
{ "ikparis.com", true },
{ "ikraenglish.com", false },
@@ -20990,6 +21712,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ikxkx.com", true },
{ "ikymbo.com", true },
{ "ila.fi", true },
+ { "ilacrehberi.com", true },
{ "ilamparas.at", true },
{ "ilamparas.co.uk", true },
{ "ilamparas.com", true },
@@ -20998,12 +21721,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ilamparas.mx", true },
{ "ilard.fr", true },
{ "ilazycat.com", true },
+ { "ilc666.com", true },
{ "ildomani.it", true },
{ "ile-kalorii.pl", true },
{ "ile-sapporo.jp", true },
{ "ileci.de", true },
{ "ilektronika-farmakeia-online.gr", true },
- { "ilemonrain.com", false },
+ { "ilemonrain.com", true },
{ "ilformichiere.com", true },
{ "ilhan.name", true },
{ "iliastsi.net", true },
@@ -21026,7 +21750,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "illsley.org", true },
{ "illumed.net", true },
{ "illuminationis.com", true },
- { "illuminatisofficial.org", true },
{ "illusionephemere.com", true },
{ "illusionunlimited.com", true },
{ "illustrate.biz", true },
@@ -21039,10 +21762,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ilonewolfs.com", true },
{ "ilookz.nl", true },
{ "ilove.fish", true },
+ { "iloveherb.ru", true },
{ "ilovequiz.ru", true },
{ "ilovethiscampsite.com", true },
{ "ilrg.com", true },
- { "iltec-prom.ru", true },
{ "iltec.ru", true },
{ "iltuogiardino.org", true },
{ "ilweb.es", true },
@@ -21055,10 +21778,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "im4h.eu", true },
{ "im4h.info", true },
{ "im66.net", true },
- { "ima-tourcoing.fr", true },
{ "ima.re", true },
{ "imacs.org", true },
{ "image-drive.de", true },
+ { "image.tf", false },
{ "imagebin.ca", true },
{ "imagecurl.com", true },
{ "imagecurl.org", true },
@@ -21084,15 +21807,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "imbianchino.roma.it", true },
{ "imbushuo.net", true },
{ "imcsi.cn", true },
- { "imcsx.co", true },
{ "imdemos.com", true },
+ { "ime-a-tolerancia-eredmenye.club", true },
{ "ime.moe", true },
{ "imed.com.pt", true },
{ "imed.pt", true },
+ { "imedia.com.sg", true },
{ "imediafly.com", true },
+ { "imediamyanmar.com", true },
+ { "imediasingapore.com", true },
{ "imedikament.de", true },
{ "imeds.pl", true },
- { "imeid.de", false },
{ "imex-dtp.com", true },
{ "imforza.com", true },
{ "img.com.ru", true },
@@ -21121,24 +21846,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "immarypoppinsyall.tk", true },
{ "immaterium.de", true },
{ "immatix.xyz", true },
+ { "immedia.net", true },
{ "immersion-pictures.com", true },
+ { "immivest.com", true },
{ "immo-agentur.com", false },
{ "immo-passion.net", true },
{ "immobilien-badlippspringe.de", true },
{ "immobilien-in-istanbul.de", true },
{ "immobilien-zirm.de", true },
{ "immobiliengutachter-holland.de", true },
- { "immobilier-nice.fr", true },
{ "immobilier92.net", true },
{ "immobiza.com", false },
{ "immortal.run", true },
+ { "immortec.com", true },
{ "imobile3.com", true },
{ "imoe.xyz", true },
{ "imokuri123.com", true },
{ "imoney.tw", true },
{ "imouto.my", false },
{ "imouyang.com", true },
- { "imovel5.com.br", true },
{ "impact.health.nz", true },
{ "impacter.eu", true },
{ "impactfestival.be", true },
@@ -21153,8 +21879,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "imperial-legrand.com", true },
{ "imperialinfosys.com", true },
{ "imperialmiami.com", true },
- { "imperiodigital.online", true },
{ "imperiumglass.com.au", true },
+ { "impex.com.bd", true },
{ "impiantistica.org", true },
{ "implantologie-dr-loeck.de", true },
{ "impns.org", true },
@@ -21197,7 +21923,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "imtikai.ml", true },
{ "imtikaib.ml", true },
{ "imwalking.de", true },
- { "imwnk.cn", true },
+ { "imwnk.cn", false },
{ "imy.rs", true },
{ "imydl.tech", true },
{ "imyjy.cn", true },
@@ -21217,6 +21943,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inbitcoin.it", true },
{ "inbounder.io", false },
{ "inbox.google.com", true },
+ { "inboxceo.com", true },
{ "inbulgaria.info", true },
{ "inc.wf", true },
{ "incarceratedwombats.com", true },
@@ -21232,17 +21959,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "incigma.com", true },
{ "includesubdomains.preloaded.test", true },
{ "includesubdomains2.preloaded.test", true },
+ { "inclusion.tn", true },
{ "incoherent.ch", true },
{ "incommon.io", true },
{ "incompliance.de", true },
{ "inconcerts.de", true },
{ "incontrixsingle.net", true },
{ "incore.nl", true },
+ { "incosi.com", true },
{ "incowrimo.org", true },
{ "incparadise.net", true },
{ "incubos.org", true },
{ "incy.io", true },
{ "ind.ie", true },
+ { "indasun.com", true },
{ "indecipherable.info", true },
{ "independencerecovery.com", true },
{ "independenttravelcats.com", true },
@@ -21267,12 +21997,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "indigitalagency.com", true },
{ "indigoblack.com.au", true },
{ "indigoinflatables.com", true },
+ { "indigojewelers.com", true },
{ "indigolawnscape.net", true },
{ "indigosakura.com", true },
{ "indigotreeservice.com", true },
{ "indika.pe", true },
{ "indio.co.jp", true },
{ "inditip.com", true },
+ { "inditoot.com", true },
+ { "individualizedwellness.net", true },
{ "indogermanstartup.com", true },
{ "indoorcomfortteam.com", true },
{ "indota.hu", true },
@@ -21280,6 +22013,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "indusap.com", true },
{ "indusfastremit-us.com", true },
{ "indust.me", true },
+ { "industinc.com", true },
{ "industriafranchini.com", true },
{ "industrial-remote-control.com", true },
{ "industrialstarter.com", true },
@@ -21295,7 +22029,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inethost.eu", true },
{ "inetserver.eu", true },
{ "inetsoftware.de", true },
+ { "inewroom.com", true },
{ "inf-fusion.ca", true },
+ { "inf0sec.nl", true },
{ "inference.biz.tr", true },
{ "infermiere.roma.it", true },
{ "inff.info", true },
@@ -21324,11 +22060,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "info-screen.me", true },
{ "info-screw.com", true },
{ "infobae.com", true },
+ { "infobot.email", true },
+ { "infobot.eu", true },
+ { "infobot.nl", true },
{ "infobrain.net", true },
{ "infocity-tech.fr", true },
{ "infocoin.es", true },
{ "infocommsociety.com", true },
- { "infocon.org", true },
{ "infocusvr.net", true },
{ "infodesigners.eu", true },
{ "infodesk.at", true },
@@ -21343,6 +22081,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "infomir.eu", true },
{ "infomisto.com", true },
{ "infonote.ca", true },
+ { "infopier.sg", true },
{ "infopuntzorg.nl", true },
{ "infor-allaitement.be", true },
{ "informace-zbozi.cz", true },
@@ -21354,18 +22093,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "informnapalm.org", true },
{ "infosec-handbook.eu", true },
{ "infosec.exchange", false },
- { "infosec.pizza", true },
{ "infosec.wiki", true },
{ "infosecchicago.com", true },
{ "infosectalks.com", true },
{ "infosectekniques.com", true },
{ "infosective.org", true },
{ "infosenior.ch", true },
+ { "infosexual.com", true },
{ "infotainworld.com", true },
{ "infotolium.com", false },
{ "infotrac.net", true },
{ "infotune.nl", true },
{ "infovision-france.com", true },
+ { "infra-se.com", true },
{ "infra.land", true },
{ "infraball.com", true },
{ "infrabeep.com", true },
@@ -21380,6 +22120,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "infradart.com", true },
{ "infradisk.com", true },
{ "infradrop.com", true },
+ { "infraedifice.com", true },
{ "infrafile.com", true },
{ "infrafind.com", true },
{ "infrafire.com", true },
@@ -21423,11 +22164,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "infravideo.com", true },
{ "infravoce.com", true },
{ "infrazine.com", true },
- { "infruction.com", true },
{ "infstudios.nl", true },
{ "infuzeit.com.au", true },
{ "ing-buero-junk.de", true },
- { "ingalls.run", true },
{ "ingatlanjogaszok.hu", true },
{ "ingatlanrobot.hu", true },
{ "ingber.com", true },
@@ -21443,6 +22182,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ingoschlueter.de", true },
{ "ingressfs.pl", true },
{ "ingridbai.me", true },
+ { "ingwaz.org", true },
{ "inhaltsangabe.de", true },
{ "inheritestate.com", true },
{ "inhouseents.co.uk", true },
@@ -21450,6 +22190,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inima.org", true },
{ "iningrui.com", true },
{ "inishbofin.ie", true },
+ { "init.blog", true },
{ "initq.net", true },
{ "initramfs.io", true },
{ "initrd.net", true },
@@ -21458,6 +22199,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "injurylawyer.com", true },
{ "ink.horse", true },
{ "inkable.com.au", true },
+ { "inkeliz.com", true },
{ "inkhor.se", true },
{ "inkontriamoci.com", true },
{ "inkopers.org", true },
@@ -21479,7 +22221,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "innerlightcrystals.co.uk", true },
{ "innermostparts.org", true },
{ "innersafe.com", true },
- { "inno.ch", true },
+ { "inno.ch", false },
{ "innocenceseekers.net", true },
{ "innogen.fr", true },
{ "innohb.com", true },
@@ -21498,19 +22240,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "innovation.gov", false },
{ "innover.se", true },
{ "innovere.co.uk", true },
+ { "innovomuebles.com", true },
{ "innovum.cz", false },
{ "innwan.com", true },
{ "inoa8.com", true },
{ "inobun.jp", true },
{ "inondation.ch", true },
{ "inovatecsystems.com", true },
- { "inovitec.eu", true },
+ { "inovitec.eu", false },
{ "inoxandco.com", true },
{ "inoxdesign.fr", true },
{ "inoxdesign.pro", true },
{ "inoxmavang.net", true },
{ "inpas.co.uk", true },
{ "inphi.com", true },
+ { "inprotec.com.co", true },
{ "input.sh", true },
{ "inputmag.com", true },
{ "inputmodes.com", true },
@@ -21519,7 +22263,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ins-kreativ.de", true },
{ "ins.to", true },
{ "ins1gn1a.com", true },
- { "insblauehinein.nl", true },
{ "inscomers.net", true },
{ "inscribe.ai", true },
{ "inscripcionessena.com", true },
@@ -21569,6 +22312,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "instant-clearance-sale.co.uk", true },
{ "instant-thinking.de", true },
{ "instant.io", true },
+ { "instantdomainsearch.com", true },
{ "instantkhabar.com", true },
{ "instantphotocamera.com", true },
{ "instantphotoprinter.com", true },
@@ -21588,10 +22332,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "instrumart.ru", false },
{ "insult.es", true },
{ "insurance321.com", true },
+ { "insuranceonlinenow.com", true },
{ "insurancesloans.com", true },
{ "insureon.com", true },
{ "int64software.com", true },
{ "intafe.co.jp", true },
+ { "intakesync.com", true },
{ "intal.info", true },
{ "intarweb.ca", true },
{ "intasky.cz", true },
@@ -21601,7 +22347,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "integrata.de", true },
{ "integratedintegrations.xyz", true },
{ "integratedmedicalonline.com", true },
- { "integrateur-web-paris.com", true },
+ { "integritet.com.se", true },
{ "integrity.gov", true },
{ "integrityfortcollins.com", true },
{ "integrityglobal.com", true },
@@ -21620,15 +22366,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inteli.com.pl", true },
{ "intellar.com", true },
{ "intellectdynamics.com", true },
+ { "intelliance.eu", true },
{ "intelligence-explosion.com", true },
{ "intelligenetics.com", true },
{ "intellihr.io", true },
+ { "intellimatica.se", true },
{ "intellimax.ir", true },
{ "intellinetixvibration.com", true },
{ "intellitonic.com", true },
{ "intelly.nl", true },
{ "intelly365.nl", true },
{ "intencje.pl", true },
+ { "intensivpflege-sachsen.de", true },
{ "inter-corporate.com", true },
{ "inter-culinarium.com", true },
{ "interaffairs.com", true },
@@ -21648,7 +22397,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "interimages.fr", true },
{ "interior-design-colleges.com", true },
{ "interiordesignsconcept.com", true },
- { "interiorprofesional.com.ar", true },
{ "interisaudit.com", true },
{ "interlijn.nl", true },
{ "interlingvo.biz", true },
@@ -21657,7 +22405,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "intern.tax", true },
{ "internalkmc.com", true },
{ "internaluse.net", true },
- { "international-arbitration-attorney.com", true },
{ "international-books.org", true },
{ "international-nash-day.com", true },
{ "internationalfashionjobs.com", true },
@@ -21666,7 +22413,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "internationalstudentassociation.com", true },
{ "internationaltalento.it", true },
{ "internect.co.za", true },
- { "internet-aukcion.info", true },
{ "internet-pornografie.de", false },
{ "internet-software.eu", true },
{ "internetaanbieders.eu", true },
@@ -21689,6 +22435,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "internetovehazardnihry.cz", true },
{ "internetpro.me", true },
{ "internetstaff.com", true },
+ { "internetstiftelsen.se", true },
{ "internetzentrale.net", true },
{ "interparcel.com", true },
{ "interpol.gov", true },
@@ -21723,7 +22470,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "intrepy.com", true },
{ "intrigue3d.com", true },
{ "intropickup.ru", true },
- { "intrp.net", true },
{ "intvonline.com", true },
{ "intxt.net", true },
{ "inumcoeli.com.br", true },
@@ -21745,6 +22491,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inventum.cloud", true },
{ "inverselink-user-content.com", true },
{ "investarholding.nl", true },
+ { "investforum.net", true },
{ "investigatore.roma.it", true },
{ "investigazione.milano.it", true },
{ "investigazione.roma.it", true },
@@ -21756,6 +22503,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "investor.gov", true },
{ "investoren-beteiligung.de", true },
{ "investorforms.com", true },
+ { "investorloanshub.com", true },
{ "investosure.com", true },
{ "investpay.ru", true },
{ "invidio.us", true },
@@ -21775,18 +22523,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "invuite.com", true },
{ "invuite.com.au", true },
{ "inwao.com", true },
+ { "inwebo.com", true },
{ "inwestcorp.se", true },
{ "inyourowntime.info", true },
{ "inyourowntime.zone", true },
{ "inzdr.com", true },
{ "inzelabs.com", true },
{ "inzernettechnologies.com", true },
- { "inzestfreunde.de", true },
{ "ioactive.com", true },
{ "iobint.com", true },
{ "iocheck.com", false },
{ "iochen.com", true },
{ "iocurrents.com", true },
+ { "iodev.nl", true },
+ { "iodine.com", true },
{ "iofort.com", true },
{ "iojo.net", true },
{ "ioliver.co.uk", true },
@@ -21807,7 +22557,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iop.intuit.com", false },
{ "iosartstudios.gr", true },
{ "ioslo.net", true },
- { "iosmods.com", true },
{ "iosnoops.com", true },
{ "iossifovlab.com", true },
{ "iostream.by", true },
@@ -21831,8 +22580,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ipal.tel", true },
{ "iparkki.com", true },
{ "ipcareers.net", true },
+ { "ipcyb.com", true },
{ "ipdsols.co.za", true },
{ "ipemcomodoro.com.ar", true },
+ { "iperconnessi.it", true },
{ "ipfire.org", true },
{ "ipfirebox.de", true },
{ "ipfs.ink", true },
@@ -21841,7 +22592,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iphoneunlock.nu", true },
{ "iphonote.com", true },
{ "ipintel.io", true },
- { "iplantom.com", true },
{ "iplayradio.net", false },
{ "ipleak.net", true },
{ "ipledgeonline.org", false },
@@ -21859,8 +22609,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ipripojeni.cz", true },
{ "iproducemusic.com", true },
{ "ips-consult.nl", true },
+ { "ips-ihre-pflege-sachsen.de", true },
+ { "ips-sachsen.de", true },
{ "ipsec.pl", true },
- { "ipslsig.org", true },
{ "ipso.paris", true },
{ "ipstream.it", true },
{ "ipswitch.com.tw", true },
@@ -21878,7 +22629,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ipv6wallofshame.com", true },
{ "iqboxy.com", true },
{ "iqsmn.org", true },
- { "ir1s.com", true },
+ { "ir1s.com", false },
{ "iramellor.com", true },
{ "iranian.lgbt", true },
{ "iranianholiday.com", true },
@@ -21886,6 +22637,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "irasandi.com", true },
{ "irayo.net", true },
{ "irc-results.com", true },
+ { "ird.nz", true },
{ "irdvb.com", true },
{ "ireef.tv", true },
{ "iren.ch", true },
@@ -21901,6 +22653,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iriomote.com", true },
{ "iris-design.info", true },
{ "iris-insa.com", true },
+ { "irisdesideratum.com", true },
{ "irish.dating", true },
{ "irish.radio", true },
{ "irishradioplayer.radio", true },
@@ -21916,10 +22669,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iroise.ch", true },
{ "ironcarnival.com", true },
{ "ironfistdesign.com", true },
+ { "ironfittings.com.br", true },
{ "ironhide.de", true },
{ "ironpeak.be", true },
{ "ironpony.com", true },
{ "irrewilse.se", true },
+ { "irrigadorbucal.com", true },
{ "irritant.net", true },
{ "iruarts.ch", true },
{ "iruca.co", true },
@@ -21941,7 +22696,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "isaacman.tech", true },
{ "isaacmorneau.com", true },
{ "isaacpartnership.co.uk", true },
- { "isaacpartnership.com", true },
{ "isaacphysics.org", true },
{ "isaaczais.com", true },
{ "isabelaflores.com", true },
@@ -21966,7 +22720,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "isg-tech.com", true },
{ "isgp-studies.com", false },
{ "ishamf.com", true },
- { "ishangirdhar.com", true },
+ { "ishigurodo.com", true },
{ "ishiharaken.com", true },
{ "ishland.com", true },
{ "ishtarfreya.com", true },
@@ -21994,10 +22748,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "islavolcan.cl", true },
{ "isletech.net", true },
{ "isliada.org", true },
- { "islief.com", true },
{ "islightdown.today", true },
- { "islykaithecutest.cf", true },
- { "islykaithecutest.ml", true },
{ "ismailkarsli.com", true },
{ "ismat.com", true },
{ "ismena.bg", true },
@@ -22020,8 +22771,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "isowosi.com", true },
{ "ispfontela.es", true },
{ "ispitrade.com", true },
- { "ispo.com.tw", true },
- { "isqrl.de", true },
{ "israel-in-color.com", true },
{ "israelbiblicalstudies.com", true },
{ "israelbizreg.com", true },
@@ -22034,9 +22783,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "issio.net", true },
{ "issue.watch", true },
{ "issues.email", true },
- { "ist-intim.de", true },
{ "ist.cm", true },
{ "istanbul.systems", true },
+ { "istdas.lol", true },
{ "istdieweltschonuntergegangen.de", true },
{ "isteinbaby.de", true },
{ "isterfaslur.com", true },
@@ -22058,7 +22807,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "istrazivac-istine.com", true },
{ "istschonsolangeinrente.de", true },
{ "istsi.org", true },
- { "isusemasa.com", true },
+ { "isusemasa.com", false },
{ "isuzupartscenter.com", true },
{ "isv.online", true },
{ "isvbscriptdead.com", true },
@@ -22091,7 +22840,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "it-sysoft.com", true },
{ "it-tekniker.nu", true },
{ "it-ti.me", true },
- { "it-uws.com", true },
+ { "it-uws.com", false },
{ "it.search.yahoo.com", false },
{ "it1b.com", true },
{ "itactiq.com", true },
@@ -22104,15 +22853,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "italian.dating", true },
{ "italianjourneys.com.au", true },
{ "italianshoemanufacturers.com", true },
+ { "italiansrent.com", true },
+ { "italiataxi.ru", true },
{ "italieflydrive.nl", true },
{ "italserrande.it", true },
{ "italserver.com", true },
{ "itamservices.nl", true },
{ "itap.gov", true },
+ { "itaporanga.se.gov.br", true },
{ "itb-online.co.uk", true },
{ "itbox.cl", true },
{ "itcbuerobedarf.de", true },
- { "itchy.nl", true },
{ "itchybrainscentral.com", true },
{ "itconsulting-wolfinger.de", true },
{ "itcs.services", true },
@@ -22121,14 +22872,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "itecor.net", true },
{ "iteecafe.hu", true },
{ "iteha.de", true },
- { "iteke.ml", true },
{ "iteke.tk", true },
{ "iteli.eu", true },
+ { "itemorder.com", true },
{ "iterader.com", true },
+ { "iternalnetworks.com", true },
{ "iterror.co", true },
{ "itesign.de", true },
{ "itfh.eu", true },
{ "itfix.cz", true },
+ { "itfly.xyz", true },
+ { "itgm-consultants.com", true },
{ "itgoesup.com", true },
{ "itgoesupent.com", true },
{ "itgoesupentertainment.com", true },
@@ -22140,14 +22894,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ithjalpforetag.se", true },
{ "itikon.com", true },
{ "itilo.de", true },
+ { "itinthebubble.com", true },
{ "itis.gov", true },
{ "itis4u.ch", true },
+ { "itisyourmoney.co.uk", true },
{ "itkaufmann.at", true },
{ "itkonsultstockholm.se", true },
{ "itludens.com", true },
{ "itm-c.de", true },
- { "itmanie.cz", true },
{ "itmindscape.com", true },
+ { "itmustbee.com", true },
+ { "itmx.cc", true },
{ "itn.co.uk", true },
{ "itneeds.tech", true },
{ "itnota.com", true },
@@ -22190,6 +22947,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "itsstefan.eu", true },
{ "itstatic.tech", true },
{ "itsuitsyou.co.za", true },
+ { "itsuki.nl", true },
{ "itsundef.in", true },
{ "itsupportnacka.se", true },
{ "itsv.at", true },
@@ -22198,8 +22956,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "itzap.com.au", true },
{ "iurisnow.com", true },
{ "iusedtosmoke.com", true },
- { "iuyos.com", true },
{ "ivact.co.jp", true },
+ { "ivanaleksandrov.com", true },
{ "ivanaleksandrov.net", true },
{ "ivanbenito.com", true },
{ "ivanboi.com", true },
@@ -22220,7 +22978,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ivor.is", true },
{ "ivorvanhese.com", true },
{ "ivorvanhese.nl", true },
- { "ivotemahdi.com", true },
{ "ivpn.net", true },
{ "ivre.rocks", true },
{ "ivsign.net", true },
@@ -22241,11 +22998,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iwd.gc.ca", true },
{ "iwell.de", true },
{ "iwizerunek.pl", true },
- { "iworos.com", true },
{ "iww.me", true },
{ "ixanis.net", true },
{ "ixds.org", true },
- { "ixnext.de", true },
{ "ixquick-proxy.com", true },
{ "ixquick.co.uk", true },
{ "ixquick.com", true },
@@ -22257,13 +23012,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "iyassu.com", true },
{ "iyc.web.tr", true },
{ "iyinolaashafa.com", true },
- { "iyn.me", true },
{ "iyouewo.com", true },
{ "iyuanbao.net", true },
{ "iz8mbw.net", true },
+ { "izanah.com", true },
{ "izevg.ru", true },
{ "izodiacsigns.com", true },
{ "izolpoznan.pl", true },
+ { "izs8.com", true },
{ "izt.tech", true },
{ "izttech.com", true },
{ "izuba.info", true },
@@ -22273,6 +23029,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "izxzw.net", true },
{ "izzys.casa", true },
{ "j-elliott.co.uk", true },
+ { "j-l.pw", true },
{ "j-navi.com", true },
{ "j-ph.ovh", true },
{ "j-softlab.com", true },
@@ -22280,9 +23037,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "j0e.com", true },
{ "j0hndball.com", true },
{ "j0m.de", true },
+ { "j0rj.com", true },
{ "j0s.at", true },
{ "j0s.eu", true },
{ "j15h.nu", true },
+ { "j1879.com", false },
{ "j1visahealthinsurance.com", true },
{ "j2h.de", true },
{ "j3e.de", true },
@@ -22292,11 +23051,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "j5lx.io", true },
{ "j605.tk", true },
{ "j6729.co", true },
+ { "j6729.com", true },
{ "j6957.co", true },
{ "j9297.co", true },
{ "j9504.com", true },
{ "j9507.com", true },
{ "j9508.com", true },
+ { "j9511.com", true },
{ "j9512.com", true },
{ "j9514.com", true },
{ "j9515.com", true },
@@ -22315,6 +23076,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "j9721.com", true },
{ "j9728.co", true },
{ "ja-gps.com.au", true },
+ { "ja-no-me.ru", true },
{ "ja-zur-gs.de", true },
{ "jaakkohannikainen.fi", true },
{ "jaalits.com", true },
@@ -22383,6 +23145,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jaingynecology.com", true },
{ "jaispirit.com", true },
{ "jaitnetworking.com", false },
+ { "jaja.wtf", true },
{ "jajsemjachym.cz", true },
{ "jak-na-les.cz", true },
{ "jakarta.dating", true },
@@ -22415,19 +23178,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jaleo.cn", true },
{ "jalogisch.de", true },
{ "jamaat.hk", true },
- { "jamacha.org", true },
- { "jamalfi.bio", true },
- { "jamberrynails.co.uk", true },
{ "james-bell.co.uk", true },
{ "james-loewen.com", true },
- { "jamesachambers.com", false },
+ { "jamesachambers.com", true },
{ "jamesaimonetti.com", true },
{ "jamesbillingham.com", true },
{ "jameschorlton.co.uk", true },
{ "jamesdorf.com", true },
{ "jamesedition.com", true },
{ "jamesgreenfield.com", true },
- { "jamesheald.com", true },
{ "jameshemmings.co.uk", true },
{ "jameshost.net", true },
{ "jameshunt.us", false },
@@ -22444,7 +23203,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jamesturnerstickley.com", true },
{ "jameswarp.com", true },
{ "jamhost.org", true },
- { "jamie-read-photography.com", true },
{ "jamie.ie", true },
{ "jamielarter.ca", true },
{ "jamielinux.com", true },
@@ -22480,23 +23238,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "janjoris.nl", true },
{ "jankamp.com", true },
{ "janker.me", true },
- { "jankoepsel.com", true },
{ "jann.is", true },
{ "jannekekaasjager.nl", true },
{ "jannisfink.de", true },
{ "jannyrijneveld.nl", true },
{ "janokacer.sk", true },
+ { "janome.club", true },
{ "janschaumann.de", true },
{ "janterpstra.eu", true },
{ "jantinaboelens.nl", true },
{ "janvari.com", true },
{ "janvaribalint.com", true },
{ "janz.online", true },
+ { "japanese-cuisine.com", true },
{ "japanesemotorsports.net", true },
{ "japangids.nl", true },
{ "japaniac.de", false },
{ "japanphilosophy.com", false },
- { "japansm.com", true },
{ "japanwatches.xyz", true },
{ "jardineriaon.com", true },
{ "jardiniersduminotaure.fr", true },
@@ -22524,10 +23282,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jaszbereny-vechta.eu", true },
{ "javalestari.com", true },
{ "javamilk.com", true },
+ { "javaweb.site", true },
{ "javelin.cc", true },
{ "javfree.me", true },
{ "javhdmovies.com", true },
- { "javi.pro", false },
{ "javierburgos.net", true },
{ "javierlorente.es", true },
{ "javik.net", true },
@@ -22538,6 +23296,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jayf.de", true },
{ "jayfreestone.com", false },
{ "jayharkess.uk", true },
+ { "jaylineko.com", true },
{ "jaymecd.rocks", true },
{ "jaypandit.me", true },
{ "jayrl.com", true },
@@ -22569,6 +23328,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jci.cc", true },
{ "jclynne.com", true },
{ "jcontspoord.nl", true },
+ { "jcsdevelopment.com", true },
{ "jcsesecuneta.com", true },
{ "jctf.team", true },
{ "jcus.co", true },
@@ -22596,6 +23356,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jdubya.info", true },
{ "je-vends.fr", true },
{ "je2050.de", true },
+ { "jean-luc.org", true },
{ "jeancardeno.com", true },
{ "jeandanielfaessler.ch", true },
{ "jeankygourmet.com", true },
@@ -22606,7 +23367,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jec-dekrone.be", true },
{ "jecho.cn", true },
{ "jecjacshop.com", true },
+ { "jecurranpc.com", true },
{ "jeda.ch", true },
+ { "jedayoshi.com", true },
{ "jedepannetonordi.fr", true },
{ "jedidiah.eu", false },
{ "jedipedia.net", true },
@@ -22635,10 +23398,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jeffwebb.com", true },
{ "jefrydco.id", true },
{ "jefsweden.eu", true },
+ { "jehovahsays.net", true },
{ "jej.cz", true },
{ "jej.sk", true },
{ "jekhar.com", true },
- { "jekkt.com", false },
{ "jelena-adeli.com", true },
{ "jelenkovic.rs", true },
{ "jell.ie", true },
@@ -22649,9 +23412,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jelleluteijn.nl", true },
{ "jelleluteijn.pro", true },
{ "jelleraaijmakers.nl", true },
- { "jelleschneiders.com", true },
{ "jelly.cz", true },
{ "jellybeanbooks.com.au", true },
+ { "jellysquid.me", true },
{ "jelmer.uk", true },
{ "jelmoli-shop.ch", true },
{ "jem.gov", true },
@@ -22662,6 +23425,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jennethaarfotografie.nl", true },
{ "jennierobinson.com", true },
{ "jenniferengerwingaantrouwen.nl", true },
+ { "jenniferlucia.com", true },
{ "jennifersauer.nl", true },
{ "jennythebaker.com", true },
{ "jenolson.net", true },
@@ -22671,7 +23435,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jeproteste.info", true },
{ "jeremiahbenes.com", true },
{ "jeremy-chen.org", true },
- { "jeremy.codes", false },
{ "jeremy.hu", true },
{ "jeremybentham.com", true },
{ "jeremybloomfield.co.uk", true },
@@ -22679,7 +23442,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jeremycantu.com", true },
{ "jeremycrews.com", true },
{ "jeremynally.com", true },
- { "jeremyness.com", true },
{ "jeremypaul.me", true },
{ "jeremytcd.com", true },
{ "jericamacmillan.com", true },
@@ -22711,6 +23473,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jesusvazquez.online", true },
{ "jet-stream.fr", true },
{ "jetbbs.com", true },
+ { "jetfirenetworks.com", true },
{ "jetflex.de", true },
{ "jetkittens.co.uk", true },
{ "jetsetboyz.net", true },
@@ -22721,6 +23484,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jeweet.net", true },
{ "jewishboyscouts.com", true },
{ "jewishquotations.com", true },
+ { "jezeravillage.com", true },
+ { "jezibaba.info", true },
{ "jf-fotos.de", true },
{ "jfbst.net", true },
{ "jfr.im", true },
@@ -22739,6 +23504,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jhill.de", true },
{ "jhollandtranslations.com", true },
{ "jhservicos.net.br", true },
+ { "jhuang.me", true },
{ "jhwestover.com", true },
{ "ji0vwl.net", true },
{ "jiahao.codes", true },
@@ -22748,6 +23514,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jianshu.com", true },
{ "jianwei.wang", true },
{ "jianyuan.art", true },
+ { "jiatingtrading.com", true },
{ "jicaivvip.com", true },
{ "jichi.io", true },
{ "jichi000.win", true },
@@ -22780,9 +23547,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jinkuru.net", true },
{ "jino-jossy.appspot.com", true },
{ "jinshuju.net", true },
- { "jintaiyang123.org", true },
{ "jiogo.com", true },
{ "jirav.com", true },
+ { "jiretvariedades.com", true },
{ "jiripudil.cz", true },
{ "jisai.net.cn", true },
{ "jisha.site", true },
@@ -22810,7 +23577,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jki.io", true },
{ "jkinteriorspa.com", true },
{ "jkrippen.com", true },
- { "jldp.org", true },
{ "jlink.nl", true },
{ "jlkhosting.com", true },
{ "jloh.codes", true },
@@ -22824,7 +23590,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jmatt.org", true },
{ "jmbeautystudio.se", true },
{ "jmbelloteau.com", true },
- { "jmcashngold.com.au", true },
{ "jmcataffo.com", true },
{ "jmce.eu", true },
{ "jmcleaning.services", true },
@@ -22832,11 +23597,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jmedved.com", true },
{ "jmentertainment.co.uk", true },
{ "jmfjltd.com", true },
+ { "jmk.hu", true },
+ { "jmkrecords.fr", true },
{ "jmorahan.net", true },
{ "jmpb.hu", true },
- { "jms8.net", true },
- { "jmsjms.cc", true },
{ "jmsjms.me", true },
+ { "jmsjms.org", true },
{ "jmsjms.top", true },
{ "jmsjms.xyz", true },
{ "jmsolodesigns.com", true },
@@ -22847,7 +23613,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jnordell.com", true },
{ "joa-ebert.com", true },
{ "joanofarcmtcarmel.org", true },
- { "joaoaugusto.net", true },
+ { "joaoaugusto.net", false },
{ "joaopenteado.com", true },
{ "joaosampaio.com.br", true },
{ "job-ofertas.info", true },
@@ -22865,12 +23631,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jobcorpsy2y.com", true },
{ "jobify.in", true },
{ "jobindex.dk", true },
+ { "jobit.gr", true },
{ "joblab.com.ua", true },
{ "joblife.co.za", true },
{ "jobmi.com", true },
{ "jobmiplayground.com", true },
{ "jobs.at", true },
{ "jobs.ch", true },
+ { "jobs.su", true },
{ "jobs4sales.ch", true },
{ "jobsarkari.com", true },
{ "jobseekeritalia.it", true },
@@ -22895,8 +23663,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "joedavison.me", true },
{ "joedoyle.us", true },
{ "joefixit.co", true },
+ { "joehenry.co.uk", true },
{ "joel.coffee", true },
{ "joelcoustrain.com", true },
+ { "joeldbolivarc.com", true },
{ "joeldrapper.com", true },
{ "joelfries.com", true },
{ "joelj.org", true },
@@ -22950,7 +23720,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "johndball.net", true },
{ "johndball.org", true },
{ "johnfulgenzi.com", true },
- { "johngadenne.com.au", true },
{ "johngallias.com", true },
{ "johngmchenrymd.com", true },
{ "johnguant.com", true },
@@ -22962,7 +23731,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "johnmcintosh.pro", true },
{ "johnmh.me", true },
{ "johnmichel.org", true },
- { "johnnybegood.tk", true },
{ "johnnybet.com", true },
{ "johnnybsecure.com", true },
{ "johnroach.io", true },
@@ -22971,14 +23739,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "johnrosewicz.com", true },
{ "johnsanchez.io", true },
{ "johnsegovia.com", true },
+ { "johnsiu.com", true },
+ { "johnsongenealogy.net", true },
{ "johnvanhese.nl", true },
- { "johnyytb.be", true },
{ "joi-dhl.ch", true },
{ "joinhahobby.com.br", true },
{ "joinhonor.com", true },
{ "jointotem.com", true },
{ "joinus-outfits.nl", true },
- { "jojosplaycentreandcafeteria.co.uk", true },
{ "jokedalderup.nl", true },
{ "jokequebec.com", true },
{ "jokerice.co.uk", true },
@@ -22997,7 +23765,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jomo.tv", true },
{ "jonahperez.com", true },
{ "jonale.net", true },
- { "jonandnoraswedding.com", true },
{ "jonas-thelemann.de", true },
{ "jonas-wenk.de", false },
{ "jonas.me", true },
@@ -23044,16 +23811,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "joonatoona.me", true },
{ "joostrijneveld.nl", true },
{ "joostvanderlaan.nl", true },
+ { "jopl.org", true },
{ "jopsens.de", true },
{ "joran.org", true },
{ "jorcus.com", true },
{ "jordandevelopment.com", true },
- { "jordanhamilton.me", false },
+ { "jordanhamilton.me", true },
{ "jordankmportal.com", true },
{ "jordans.co.uk", true },
{ "jordanscorporatelaw.com", true },
{ "jordanstrustcompany.com", true },
{ "jordhy.com", true },
+ { "jorexenterprise.com", true },
{ "jorisdalderup.nl", true },
{ "jornalalerta.com.br", true },
{ "jorsev.com", true },
@@ -23090,6 +23859,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "joshua-kuepper.de", true },
{ "joshua.bio", true },
{ "joshuadmiller.info", true },
+ { "joshuajohnson.ca", true },
{ "joshuamessick.com", true },
{ "joshuameunier.com", true },
{ "joshuarogers.net", true },
@@ -23097,14 +23867,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "journalism-schools.com", true },
{ "journeedesfilles.gc.ca", true },
{ "journeyfriday.rocks", true },
+ { "journeying.ca", true },
{ "journeyof1000hops.com", true },
{ "journeytomastery.net", true },
+ { "joustsec.ca", true },
+ { "joustsec.com", true },
+ { "joustsecurity.com", true },
{ "jouwpaardenbak.nl", true },
+ { "jouwtechnischecoach.nl", true },
{ "jovani.com", false },
{ "jovic.hamburg", true },
{ "joyful.house", true },
{ "joyfulexpressions.gallery", true },
{ "joyfulhealthyeats.com", true },
+ { "joyinverse.com", true },
{ "joynadvisors.com", true },
{ "joyofcookingandbaking.com", true },
{ "joyqi.com", true },
@@ -23117,12 +23893,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jpgangbang.com", true },
{ "jphandjob.com", true },
{ "jplesbian.com", true },
+ { "jpm-inc.jp", true },
{ "jpmelos.com", true },
{ "jpmelos.com.br", true },
{ "jpmguitarshop.com.br", true },
{ "jpod.cc", true },
- { "jpoirierlavoie.ca", true },
{ "jpph.org", true },
+ { "jpprivatehiretaxis.co.uk", true },
{ "jpralves.net", true },
{ "jproxx.com", true },
{ "jps-selection.co.uk", true },
@@ -23134,7 +23911,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jquery.wtf", true },
{ "jrabasco.me", true },
{ "jrc9.ca", true },
- { "jrchaseify.xyz", true },
{ "jreb.nl", true },
{ "jreiff.de", true },
{ "jrflorian.com", true },
@@ -23142,7 +23918,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jrtapsell.co.uk", true },
{ "jrxpress.com", true },
{ "js-web.eu", true },
+ { "js0204.com", true },
{ "js8855.com", true },
+ { "jsbentertainment.nl", true },
+ { "jsc7776.com", true },
{ "jschoi.org", true },
{ "jschumacher.info", true },
{ "jsd-cog.org", true },
@@ -23151,6 +23930,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jsent.co.uk", true },
{ "jsevilleja.org", false },
{ "jsk26.ru", true },
+ { "jskier.com", false },
{ "jskoelliken.ch", true },
{ "jsme.cz", true },
{ "jsmetallerie.fr", true },
@@ -23158,6 +23938,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jsnfwlr.io", true },
{ "json.download", true },
{ "jsonsinc.com", true },
+ { "jss.moe", true },
{ "jsteward.moe", true },
{ "jstore.ch", true },
{ "jsxc.ch", true },
@@ -23185,6 +23966,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "juch.cc", true },
{ "juchit.at", true },
{ "jucktehkeinen.de", true },
+ { "judaicaganeden.com", true },
{ "judge2020.com", true },
{ "judoprodeti.cz", true },
{ "judosaintdenis.fr", true },
@@ -23193,6 +23975,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "juegosycodigos.es", true },
{ "juegosycodigos.mx", true },
{ "juegosyolimpicos.com", true },
+ { "juergen-elbert.de", true },
{ "juergen-roehrig.de", true },
{ "juergenhecht.de", true },
{ "juergenklieber.de", true },
@@ -23203,6 +23986,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jugendhackt.org", true },
{ "jugendsuenden.info", true },
{ "jugh.de", true },
+ { "jugwallonie.be", true },
{ "juhakoho.com", true },
{ "juice.codes", true },
{ "juk.life", false },
@@ -23210,6 +23994,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jule-spil.dk", true },
{ "julenlanda.com", false },
{ "julestern.com", true },
+ { "julia-thonig.de", true },
{ "julian-post.de", true },
{ "julian-uphoff.de", true },
{ "julian-weigle.de", true },
@@ -23227,7 +24012,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "julibear.com", true },
{ "julibon.com", true },
{ "julico.nl", true },
- { "julie-and-stevens-wedding.com", true },
{ "juliedecubber.com", true },
{ "juliekoubova.net", true },
{ "juliekproperties.com", true },
@@ -23251,6 +24035,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jumpandjivechildrensparties.co.uk", true },
{ "jumparoundbouncycastles.co.uk", true },
{ "jumparty.co.uk", true },
+ { "jumpbuttonnorth.com", true },
{ "jumpeasy.com.au", true },
{ "jumpin-jax.co.uk", true },
{ "jumpinchat.com", true },
@@ -23282,6 +24067,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "junodownload.com", true },
{ "junta.pl", true },
{ "juozasveza.lt", true },
+ { "jupuglia.com.br", true },
{ "jura-reiseschutz.de", true },
{ "jurassicbarkharrogate.co.uk", true },
{ "jurassicgolf.nl", true },
@@ -23309,30 +24095,32 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "justice4assange.com", true },
{ "justin-tech.com", true },
{ "justinfreid.com", true },
+ { "justinharrison.ca", true },
{ "justinho.com", true },
{ "justinmuturifoundation.org", true },
{ "justinribeiro.com", true },
{ "justinstandring.com", true },
{ "justmensgloves.com", true },
- { "justonce.net", true },
+ { "justmysocks.xyz", true },
{ "justpaste.it", true },
- { "justsmart.io", true },
{ "justsome.info", true },
{ "justthinktwice.gov", false },
{ "justupdate.me", true },
{ "justyy.com", true },
+ { "juszczak.io", true },
{ "juszkiewicz.com.pl", true },
{ "jutella.de", false },
{ "jutlander-netbank.dk", true },
{ "jutlander.dk", true },
{ "juttaheitland.com", true },
- { "juusujanar.eu", true },
+ { "juusujanar.eu", false },
{ "juwelierstoopman.nl", true },
{ "juyunce.com", true },
{ "jvandenbroeck.com", true },
{ "jvanerp.nl", true },
{ "jvbouncycastlehire.co.uk", true },
{ "jvdham.nl", true },
+ { "jvdz.nl", true },
{ "jvega.me", true },
{ "jvlandscapingservices.com", true },
{ "jvphotoboothhire.co.uk", true },
@@ -23348,15 +24136,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jwod.gov", true },
{ "jwplay.ml", true },
{ "jwpoore.com", true },
+ { "jwr.me", true },
{ "jwschuepfheim.ch", true },
{ "jwz.org", true },
- { "jxir.de", true },
- { "jxkangyifu.com", true },
+ { "jxi.fr", true },
{ "jxltom.com", true },
{ "jxm.in", true },
{ "jydemarked.dk", true },
+ { "jym.fit", true },
{ "jyoti-fairworks.org", true },
- { "jz585.com", true },
{ "jzbk.org", true },
{ "jzcapital.co", true },
{ "jzgj088.com", true },
@@ -23365,6 +24153,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "k-netz.de", true },
{ "k-plant.com", true },
{ "k-pture.com", true },
+ { "k-sails.com", true },
{ "k-scr.me", true },
{ "k-system.de", true },
{ "k-tube.com", true },
@@ -23376,16 +24165,67 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "k4law.com", true },
{ "k4r.ru", true },
{ "k5197.co", true },
+ { "k6729.co", true },
{ "k6729.com", true },
{ "k6957.co", true },
{ "k7azx.com", true },
{ "k8.com", true },
+ { "k8002.com", true },
+ { "k80039.com", true },
{ "k8013.com", true },
+ { "k8023.com", true },
+ { "k8037.com", true },
+ { "k8039.com", true },
+ { "k805.com", true },
+ { "k8063.com", true },
{ "k807.com", true },
+ { "k8071.com", true },
+ { "k8075.com", true },
+ { "k8082.com", true },
{ "k8084.com", true },
+ { "k8102.com", true },
+ { "k8106.com", true },
+ { "k81111.com", true },
+ { "k8125.com", true },
+ { "k816.com", true },
+ { "k816.net", true },
{ "k819.com", true },
+ { "k82222.com", true },
+ { "k8268.com", true },
+ { "k8268.net", true },
+ { "k829.com", true },
+ { "k8368.com", true },
+ { "k8368.net", true },
+ { "k8370.com", true },
+ { "k8403.com", true },
+ { "k8421.com", true },
+ { "k8437.com", true },
+ { "k8463.com", true },
+ { "k8487.com", true },
+ { "k851.com", true },
+ { "k852.com", true },
+ { "k8524.com", true },
+ { "k8533.com", true },
{ "k8668.com", true },
+ { "k86681.com", true },
+ { "k86788.com", true },
+ { "k8694.com", true },
+ { "k86965.com", true },
+ { "k86988.com", true },
{ "k86990.com", true },
+ { "k87777.com", true },
+ { "k88208.com", true },
+ { "k88801.com", true },
+ { "k88870.com", true },
+ { "k88891.com", true },
+ { "k89188.com", true },
+ { "k89388.com", true },
+ { "k89999.com", true },
+ { "k8dc01.com", true },
+ { "k8dc13.com", true },
+ { "k8dc17.com", true },
+ { "k8md01.com", true },
+ { "k8md12.com", true },
{ "k8n.de", true },
{ "k9297.co", true },
{ "k9728.co", true },
@@ -23405,16 +24245,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kabos.art", true },
{ "kabouterbankje.nl", true },
{ "kabulpress.org", true },
- { "kabus.org", true },
{ "kacgal.com", true },
{ "kachelfm.nl", true },
{ "kachlikova2.cz", true },
{ "kack.website", true },
{ "kadhambam.in", true },
{ "kado-ya.jp", true },
+ { "kadro.com.pl", true },
{ "kafeh-jazan.com", true },
{ "kaffau.com", true },
{ "kaffeekrone.de", true },
+ { "kaffeeringe.de", true },
{ "kafoom.de", true },
{ "kagicomb.org", true },
{ "kaginalycloud.com", true },
@@ -23430,9 +24271,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kaisab.com", true },
{ "kaisakura.net", true },
{ "kaisev.net", false },
+ { "kaitori-goods.shop", true },
{ "kaiusaltd.com", true },
{ "kaivac-emea.com", true },
{ "kaizencraft.ga", true },
+ { "kaizenjuku.org", true },
{ "kaizenreporting.com", true },
{ "kaizeronion.com", true },
{ "kajak.land", true },
@@ -23456,12 +24299,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kalian.cz", true },
{ "kalifornien-tourismus.de", true },
{ "kalkulacka-havarijni.cz", true },
- { "kall.is", true },
{ "kallies-net.de", true },
{ "kalmar.com", true },
{ "kalolina.com", true },
{ "kalombo.ru", true },
- { "kaloni.info", true },
{ "kaltenbrunner.it", true },
{ "kalterersee.ch", true },
{ "kalugadeti.ru", true },
@@ -23483,11 +24324,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kamuniang.org", true },
{ "kan3.de", true },
{ "kana-mono.biz", true },
+ { "kana.me", true },
{ "kanaete-uranai.com", true },
{ "kanag.pl", true },
{ "kanal-tv-haensch.de", true },
- { "kandalife.com", true },
{ "kandianshang.com", true },
+ { "kandofu.com", true },
{ "kanecastles.com", true },
{ "kanehusky.com", false },
{ "kanetix.ca", true },
@@ -23505,10 +24347,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kankimaru.com", true },
{ "kanna.cf", true },
{ "kannchen.de", true },
+ { "kanootours.com", true },
{ "kansaiyamamoto.jp", true },
{ "kantankye.nl", true },
{ "kantanmt.com", true },
- { "kantorkita.net", true },
{ "kantorosobisty.pl", true },
{ "kanuvu.de", true },
{ "kany.me", false },
@@ -23524,6 +24366,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kapsalonlinds.nl", true },
{ "kapseli.net", true },
{ "kaptadata.com", true },
+ { "kaptamedia.com", true },
{ "karabas.com", true },
{ "karabijnhaken.nl", false },
{ "karachi.dating", true },
@@ -23541,11 +24384,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kargl.net", true },
{ "karguine.in", true },
{ "karina.gd", true },
+ { "karinwerner.com", true },
{ "karit.nz", true },
{ "karlbowden.com", true },
{ "karlic.net", true },
{ "karlin.run", true },
- { "karlloch.de", true },
{ "karlsmithmn.org", true },
{ "karlzotter.com", true },
{ "karmaassurance.ca", true },
@@ -23556,6 +24399,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "karmaspa.se", true },
{ "karn.nu", true },
{ "karneid.info", true },
+ { "karo.pc.pl", true },
+ { "karopc.com.pl", true },
+ { "karopc.pl", true },
{ "karoverwaltung.de", true },
{ "karrot.world", true },
{ "karsofsystems.com", true },
@@ -23571,7 +24417,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "karuna.community", true },
{ "karupp-did.net", true },
{ "kasadara.com", true },
+ { "kaseban.com", true },
{ "kasei.im", true },
+ { "kashadriskill.com", true },
{ "kashinavi.com", true },
{ "kashmirobserver.net", true },
{ "kasinobonus.com", true },
@@ -23602,6 +24450,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "katieriker.com", true },
{ "katieskandy.co.uk", true },
{ "katieskastles.co.uk", true },
+ { "kativa.it", true },
{ "katja-und-ronny.de", true },
{ "katjavoneysmondt.de", true },
{ "katka.info", true },
@@ -23619,14 +24468,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kaufberatung.community", true },
{ "kavorka.me", true },
{ "kavovary-kava.cz", true },
- { "kawaii.io", true },
+ { "kawaiicon.org", true },
{ "kaweus.de", true },
{ "kay.la", true },
{ "kayo.digital", true },
{ "kaypasocks.com", true },
+ { "kayscs.com", true },
{ "kaysis.gov.tr", false },
{ "kazakov.lt", true },
- { "kazancci.com", true },
{ "kazand.lt", true },
{ "kazandaemon.ru", true },
{ "kazek.com.pl", true },
@@ -23635,16 +24484,36 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kazuhirohigashi.com", true },
{ "kazumi.ro", true },
{ "kazy111.info", true },
+ { "kb0283.com", true },
{ "kb09.net", true },
+ { "kb1717.com", true },
+ { "kb2929.com", true },
+ { "kb3636.com", true },
+ { "kb3939.com", true },
+ { "kb7272.com", true },
+ { "kb848.com", true },
{ "kb88.com", true },
{ "kb883.cc", true },
+ { "kb8835.com", true },
+ { "kb8839.com", true },
+ { "kb8844.com", true },
+ { "kb8857.com", true },
+ { "kb8864.com", true },
+ { "kb8875.com", true },
{ "kb8882.com", true },
+ { "kb8890.com", true },
+ { "kb8897.com", true },
{ "kb88dc23.com", true },
+ { "kb9292.com", true },
+ { "kb9797.com", true },
+ { "kb9988.com", true },
{ "kba-online.de", true },
{ "kbb-ev.de", true },
{ "kbbouncycastlehire.co.uk", true },
{ "kbc.be", true },
{ "kbcequitas.hu", true },
+ { "kbcso.com", true },
+ { "kbet168.com", true },
{ "kbit.dk", true },
{ "kbjorklu.com", true },
{ "kbleventhire.co.uk", true },
@@ -23653,6 +24522,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kc1hbk.com", true },
{ "kc3.moe", true },
{ "kc5mpk.com", true },
+ { "kcire.me", true },
{ "kcliner.com", true },
{ "kcmicapital.com", true },
{ "kcolford.com", false },
@@ -23672,8 +24542,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "keb.net.au", true },
{ "kebabbesteld.nl", true },
{ "kebabbruce.com", false },
+ { "kebhanamyanmar.com", true },
{ "kecht.at", true },
{ "kedarastudios.com", true },
+ { "kedibizworx.com", true },
{ "kedv.es", true },
{ "kee.pm", true },
{ "keeckee.ga", true },
@@ -23681,7 +24553,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "keelove.net", true },
{ "keengamer.com", true },
{ "keepa.com", true },
- { "keeperapp.com", true },
{ "keeperklan.com", false },
{ "keepersecurity.com", true },
{ "keepingtheplot.co.uk", true },
@@ -23690,15 +24561,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "keepleft.gr", true },
{ "keepsight.org.au", true },
{ "keevault.pm", true },
- { "keevitaja.com", true },
{ "keeweb.info", true },
{ "keez.cf", true },
+ { "keezyavaleri.com", true },
{ "keganthorrez.com", true },
{ "kehlenbach.net", true },
{ "keian.tk", true },
{ "keifel.de", true },
{ "kein-design.de", true },
- { "keinanung.nl", true },
{ "keinefilterblase.de", true },
{ "keisaku.org", true },
{ "keishiando.com", true },
@@ -23707,12 +24577,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "keke-shop.ch", true },
{ "kekku.li", true },
{ "keksi.io", true },
- { "kela.jp", true },
{ "keldan.fo", true },
{ "kelderwijnen.nl", true },
{ "kelgtermans-usedcars.be", true },
{ "kelheor.space", true },
- { "kelleymcchesney.us", true },
+ { "kellerlan.org", true },
{ "kellimacconnell.com", true },
{ "kellygrenard.com", true },
{ "kellyskastles.co.uk", true },
@@ -23737,6 +24606,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kennedyinsurancesolutions.com", true },
{ "kenners.org", true },
{ "kennethaasan.no", true },
+ { "kennethandersen.com", true },
{ "kennethlim.me", true },
{ "kenneths.org", true },
{ "kenny-peck.com", true },
@@ -23749,7 +24619,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kensbouncycastles.co.uk", true },
{ "kenscustomfloors.com", true },
{ "kenshobox.net", true },
- { "kensparkesphotography.com", true },
+ { "kensyou.network", true },
{ "kentec.net", false },
{ "kenterlis.gr", true },
{ "kenvix.com", true },
@@ -23776,12 +24646,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kerstkaart.nl", true },
{ "kersvers.agency", true },
{ "kerus.net", true },
- { "kerzyte.net", true },
{ "kessawear.com", true },
{ "kesslerwine.com", true },
{ "ketamine.co.uk", true },
{ "ketaminecareclinic.com", true },
- { "ketosecology.co.uk", true },
{ "ketotadka.com", true },
{ "kettlebellkrusher.com", true },
{ "kettner.com", true },
@@ -23807,6 +24675,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kevinmoreland.com", true },
{ "kevinmorssink.nl", true },
{ "kevinpirnie.com", false },
+ { "kevinquintero.co", true },
{ "kevinrandles.com", false },
{ "kevinratcliff.com", true },
{ "kevinschreuder.com", true },
@@ -23827,7 +24696,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "keyinfo.io", true },
{ "keylaserinstitute.com", true },
{ "keylength.com", true },
- { "keymach.com", true },
+ { "keymaster.lookout.com", false },
{ "keymicrosystems.com", true },
{ "keynes.id.au", true },
{ "keys247.co.uk", true },
@@ -23836,10 +24705,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "keysupport.org", true },
{ "keywalker.co.jp", true },
{ "keywebdesign.nl", true },
- { "keyyek.com", false },
+ { "kf-59.com", true },
+ { "kf0000.com", true },
+ { "kf388.com", true },
{ "kf5252.com", true },
- { "kf7joz.com", true },
+ { "kf588.com", true },
+ { "kf6464.com", true },
+ { "kf6868.com", true },
{ "kfassessment.com", true },
+ { "kff7.com", true },
{ "kffs.ru", true },
{ "kfirba.me", true },
{ "kfm.ink", true },
@@ -23852,7 +24726,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kgnk.ru", true },
{ "kgv-schlauroth.de", true },
{ "khaganat.net", true },
- { "khairul-zamri.com", true },
+ { "khairul-zamri.com", false },
{ "khaledgarbaya.net", false },
{ "khanovaskola.cz", true },
{ "khas.co.uk", true },
@@ -23862,10 +24736,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "khetzal.info", true },
{ "khg-orchester.de", true },
{ "khipu.com", true },
- { "khmb.ru", false },
- { "khojirdesign.ir", true },
+ { "khmb.ru", true },
+ { "khohangmadeinvietnam.com", true },
{ "khorne.me", true },
{ "khoury-dulla.ch", true },
+ { "khouryalexandre.com", true },
{ "khs1994.com", true },
{ "khslaw.com", true },
{ "khudothiswanpark.vn", true },
@@ -23887,6 +24762,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kidaptive.com", true },
{ "kiddieschristian.academy", true },
{ "kiddyboom.ua", true },
+ { "kidneydonation.com", true },
{ "kids-at-home.ch", true },
{ "kids-castles.com", true },
{ "kids-world.dk", true },
@@ -23907,7 +24783,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kidzpartiesllp.co.uk", true },
{ "kidzsmile.co.uk", true },
{ "kiebel.de", true },
- { "kiehls.pt", true },
{ "kiekin.org", true },
{ "kiekko.pro", true },
{ "kieran.de", true },
@@ -23916,6 +24791,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kiesuwkerstkaart.nl", true },
{ "kievkiralikotel.com", true },
{ "kigmbh.com", true },
+ { "kii91.com", true },
{ "kiisu.club", true },
{ "kikbb.com", true },
{ "kiki-voice.jp", true },
@@ -23923,6 +24799,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kiku.pw", true },
{ "kileahh.fr", true },
{ "kilianvalkhof.com", true },
+ { "kill.trade", true },
{ "killaraapartments.com.au", true },
{ "killdeer.com", true },
{ "killerkink.net", true },
@@ -23938,7 +24815,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kimisia.net", true },
{ "kimitang.com", true },
{ "kimkuhlmanphoto.com", true },
- { "kimmel.com", true },
+ { "kimmel.com", false },
{ "kimmel.in", true },
{ "kimochi.info", true },
{ "kimono-rental-one.com", true },
@@ -23956,7 +24833,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kinderkleding.news", true },
{ "kinderpneumologie.ch", true },
{ "kindertagespflege-rasselbande-halle.de", true },
- { "kinderzahn-bogenhausen.de", true },
{ "kindesfreude.ch", true },
{ "kindfotografie.nl", true },
{ "kindlezs.com", true },
@@ -23980,7 +24856,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kingofthecastlesrhyl.co.uk", true },
{ "kingsfoot.com", true },
{ "kingsgateseptic.com", true },
- { "kingstclinic.com", true },
{ "kingtreeexperts.com", true },
{ "kingwoodtxlocksmith.com", true },
{ "kini24.ru", true },
@@ -23988,6 +24863,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kinkenonline.com", true },
{ "kinkyhookup.com", true },
{ "kinmunity.com", true },
+ { "kinmunity.net", true },
{ "kinnikinnick.com", true },
{ "kinniyaonlus.com", true },
{ "kinocheck.de", true },
@@ -23996,10 +24872,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kinos.nl", true },
{ "kinozal-tv.appspot.com", true },
{ "kinsights.com", false },
+ { "kintana.ovh", true },
{ "kintawifi.com", false },
{ "kintone.com", true },
{ "kintore.tv", true },
{ "kiocloud.com", true },
+ { "kiokoman.eu.org", true },
+ { "kiomara.com", true },
+ { "kionetworks.es", true },
{ "kiot.eu", true },
{ "kipa.at", true },
{ "kipiradio.com", true },
@@ -24008,6 +24888,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kipwells32.com", true },
{ "kiragameforum.net", true },
{ "kirainmoe.com", true },
+ { "kirakirasoft.jp", true },
{ "kiraku.co", true },
{ "kirbear.com", true },
{ "kirchen-im-web.de", false },
@@ -24017,13 +24898,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kirei.se", true },
{ "kirig.ph", true },
{ "kirikira.moe", true },
- { "kirill.ws", true },
{ "kirillaristov.com", true },
- { "kirillpokrovsky.de", false },
+ { "kirillpokrovsky.de", true },
{ "kirinas.com", true },
{ "kirinuki.jp", true },
{ "kirkforcongress.com", true },
{ "kirkforillinois.com", true },
+ { "kirklandtriallawyer.com", true },
{ "kirkovsky.com", true },
{ "kirkwoodfence.com", true },
{ "kiro-ku.com", true },
@@ -24063,9 +24944,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kiteschoolwijkaanzee.nl", true },
{ "kiteschoolzandvoort.nl", true },
{ "kitpartners.com", true },
- { "kitsapsolutions.com", true },
{ "kittmedia.com", true },
{ "kittpress.com", true },
+ { "kittyhacker101.tk", true },
+ { "kiumie.com", true },
{ "kivitelezesbiztositas.hu", true },
{ "kiwi-bird.xyz", true },
{ "kiwi.com", true },
@@ -24086,11 +24968,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kjelltitulaer.com", true },
{ "kjellvn.net", true },
{ "kjfaudio.com", true },
+ { "kjgmuenster.org", true },
{ "kjmedia.dk", true },
{ "kjnotes.com", true },
{ "kk-neudorf-duissern.de", false },
{ "kk.in.th", true },
+ { "kk.sb", true },
{ "kk5197.co", true },
+ { "kk575757.com", true },
{ "kk6729.co", true },
{ "kk6729.com", true },
{ "kk6957.co", true },
@@ -24116,6 +25001,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "klauke-enterprises.com", true },
{ "klausbrinch.dk", false },
{ "klausen.dk", true },
+ { "klautshop.com", true },
{ "klaver.it", true },
{ "klaw.xyz", true },
{ "klaxon.me", true },
@@ -24137,21 +25023,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kleinestrandburg-usedom.de", true },
{ "kleineviecherei.de", true },
{ "kleinfein.co", true },
+ { "kleinhelena.dynv6.net", true },
+ { "kleinreich.de", true },
{ "kleinsys.com", true },
{ "kleintransporte.net", true },
{ "klemkow.net", true },
{ "klemkow.org", true },
{ "klempin.se", true },
- { "kleppe.co", true },
{ "kleteckova.cz", true },
{ "klev.su", true },
+ { "kleyer.eu", true },
{ "kli.is", true },
{ "klickstdu.com", true },
{ "kliemann.me", true },
{ "klimaloven.no", true },
{ "klimapartner.de", true },
{ "klimapartner.net", true },
- { "klimchuk.com", true },
{ "klingenundmesser.com", true },
{ "klinik-fuer-aesthetische-zahnheilkunde.de", true },
{ "klinikac.co.id", false },
@@ -24173,23 +25060,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "klubxanadu.cz", true },
{ "kluck.me", true },
{ "klugemedia.de", true },
+ { "klumba.org", true },
{ "klustermedia.com", true },
{ "klusweb-merenwijk.nl", true },
{ "klva.cz", true },
{ "kmashworth.co.uk", true },
{ "kmkz.jp", true },
+ { "kmnsk.eu", true },
{ "kmsci.com.ph", true },
{ "kn007.net", true },
{ "kn40la.com", true },
{ "kn4ivj.com", true },
{ "kn4ola.com", true },
- { "knaake.net", true },
{ "knab-networks.com", true },
{ "knapp.noip.me", true },
{ "knapp.servehttp.com", true },
{ "knarcraft.net", true },
{ "kncg.pw", true },
- { "kndkv.com", true },
{ "kndrd.io", true },
{ "kneblinghausen.de", true },
{ "knechtology.com", true },
@@ -24202,6 +25089,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kngk.org", true },
{ "kngkng.com", true },
{ "knight-industries.org", true },
+ { "knightsblog.de", true },
{ "knightsbridge.net", true },
{ "knightsbridgewine.com", true },
{ "knihovnajablonne.cz", true },
@@ -24217,6 +25105,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "knowledgeforce.com", true },
{ "knowledgehook.com", true },
{ "knowyourday.ai", true },
+ { "knoxvilleimplants.com", true },
{ "knthost.com", true },
{ "knurps.de", true },
{ "knuthildebrandt.de", true },
@@ -24241,11 +25130,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kode-it.de", true },
{ "kode.ch", true },
{ "kodify.net", true },
+ { "kodikom.de", true },
{ "koe.hn", true },
{ "koebbes.de", true },
{ "koecollege.com", true },
{ "koeeusa.org", true },
{ "koehlhoff.de", true },
+ { "koehn.com", true },
{ "koeldezomerdoor.nl", true },
{ "koelnmafia.de", true },
{ "koenigsbrunner-tafel.de", true },
@@ -24261,6 +25152,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "koertner-muth.de", true },
{ "koethen-markt.de", true },
{ "koetjesenkanker.nl", true },
+ { "koffie-enzo.com", true },
{ "kofler.info", true },
{ "kogak.ninja", true },
{ "kogax.com", true },
@@ -24288,13 +25180,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kolania.de", true },
{ "kolania.net", true },
{ "kolaprestaurant.com", true },
- { "kolas.in", true },
{ "kolbeinsson.se", true },
{ "kolcsey.eu", true },
{ "kolibrisolutions.nl", true },
{ "kolin.org", true },
{ "kolitel.com", true },
- { "kolizaskrap.bg", true },
{ "kolja-engelmann.de", true },
{ "koljakrekow.de", true },
{ "kolkataflowermall.com", true },
@@ -24307,6 +25197,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "koluke.co", true },
{ "koluke.com", true },
{ "komall.net", true },
+ { "komandakovalchuk.com", false },
{ "komelin.com", true },
{ "komenamanda.de", true },
{ "kometia.com", true },
@@ -24320,6 +25211,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "komischkeszeug.de", true },
{ "kommaer.dk", true },
{ "kommune42.org", true },
+ { "kommx.de", true },
{ "komodolabs.com", true },
{ "komoju.com", true },
{ "komok.co.uk", true },
@@ -24330,6 +25222,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kon-sil.de", true },
{ "kondi.net", true },
{ "kondou-butsudan.com", true },
+ { "konfekcjonowanie.com", true },
{ "kongar.org", true },
{ "kongress-hostessen.de", true },
{ "koniecfica.sk", false },
@@ -24340,7 +25233,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "konosuke.jp", true },
{ "konplott.shop", true },
{ "konpyuta.nl", true },
- { "konsertoversikt.no", true },
{ "konst.se", true },
{ "kontaxis.org", true },
{ "kontorhaus-stralsund.de", true },
@@ -24376,6 +25268,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "korea.dating", true },
{ "koreaboo.com", true },
{ "koreaninhd.com", true },
+ { "koreanrandom.com", true },
+ { "koreanrandom.ru", true },
{ "korem011-tniad.mil.id", true },
{ "koretech.nl", true },
{ "korinar.com", true },
@@ -24390,6 +25284,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "koryfi.com", true },
{ "kos4all.com", true },
{ "kosaki.moe", true },
+ { "koscielniak-nieruchomosci.pl", true },
{ "kosherjava.com", true },
{ "kosho.org", true },
{ "kosinc.org", true },
@@ -24409,6 +25304,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kotobox.net", true },
{ "kotois.com", true },
{ "kotonoha.cafe", true },
+ { "kotonozaka.xyz", true },
{ "kotori.love", true },
{ "kouki-food.com", true },
{ "koumakan.cc", true },
@@ -24435,8 +25331,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kplnet.net", true },
{ "kpmgclientcollab.co.nz", true },
{ "kpop.re", true },
+ { "kpopsource.com", true },
{ "kpumuk.info", true },
{ "kpx1.de", true },
+ { "kr.cm", true },
{ "kr.search.yahoo.com", false },
{ "kr0n.dk", true },
{ "krachtinverbinding.nl", true },
@@ -24488,10 +25386,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kriechel.de", true },
{ "krikorianconstruction.com", true },
{ "krinetzki.de", true },
- { "kringloopwinkelsteenwijk.nl", true },
{ "krinnovations.ie", true },
{ "kriptokereso.com", true },
{ "kriptosec.com", true },
+ { "kriptoworld.hu", true },
{ "kris.click", true },
{ "krise-chance.ch", true },
{ "krisftp.fr", true },
@@ -24521,6 +25419,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "krsaustralia.com.au", true },
{ "krsn.de", true },
{ "krsvrs.nl", true },
+ { "krugermillions.org", true },
{ "kruin.net", true },
{ "kruisselbrink.com", true },
{ "kruk.co", true },
@@ -24544,36 +25443,144 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kryx.de", true },
{ "krzyzowki123.pl", true },
{ "ks-watch.de", true },
+ { "ks009.com", true },
+ { "ks0098.com", true },
+ { "ks0168.com", true },
+ { "ks0188.com", true },
+ { "ks0288.com", true },
+ { "ks0388.com", true },
+ { "ks0550.com", true },
+ { "ks0577.com", true },
+ { "ks058.com", true },
+ { "ks0588.com", true },
+ { "ks059.com", true },
+ { "ks0599.com", true },
{ "ks0618.com", true },
+ { "ks063.com", true },
+ { "ks065.com", true },
{ "ks0718.com", true },
+ { "ks0766.com", true },
{ "ks0768.com", true },
+ { "ks0770.com", true },
{ "ks0776.com", true },
+ { "ks0778.com", true },
+ { "ks0788.com", true },
{ "ks080.com", true },
+ { "ks081.com", true },
+ { "ks0816.com", true },
+ { "ks0855.com", true },
+ { "ks0858.com", true },
+ { "ks086.com", true },
{ "ks0877.com", true },
+ { "ks0878.com", true },
+ { "ks0886.com", true },
+ { "ks0977.com", true },
+ { "ks098.com", true },
+ { "ks0990.com", true },
{ "ks0996.com", true },
+ { "ks15.net", true },
+ { "ks16.cc", true },
+ { "ks16.net", true },
+ { "ks1608.com", true },
+ { "ks161.com", true },
+ { "ks18.cc", true },
{ "ks191.com", true },
+ { "ks200.vip", true },
+ { "ks2000.vip", true },
+ { "ks2020.vip", true },
+ { "ks262.com", true },
+ { "ks28.cc", true },
+ { "ks28.net", true },
+ { "ks308.com", true },
+ { "ks32.cc", true },
+ { "ks36.net", true },
+ { "ks3636.com", true },
{ "ks381.com", true },
{ "ks5000.com", true },
- { "ks5660.com", true },
+ { "ks509.com", true },
+ { "ks516.com", true },
+ { "ks531.com", true },
+ { "ks55.net", true },
+ { "ks58.net", true },
+ { "ks5808.com", true },
{ "ks628.com", true },
+ { "ks629.com", true },
+ { "ks636.com", true },
+ { "ks66.la", true },
+ { "ks6601.com", true },
+ { "ks6602.com", true },
+ { "ks6603.com", true },
+ { "ks6605.com", true },
+ { "ks6607.com", true },
+ { "ks6609.com", true },
+ { "ks6612.com", true },
+ { "ks6615.com", true },
+ { "ks6617.com", true },
+ { "ks6618.com", true },
+ { "ks6619.com", true },
+ { "ks6620.com", true },
+ { "ks6621.com", true },
+ { "ks6623.com", true },
+ { "ks6625.com", true },
+ { "ks6627.com", true },
+ { "ks6628.com", true },
+ { "ks6629.com", true },
+ { "ks6630.com", true },
+ { "ks6631.com", true },
+ { "ks6632.com", true },
+ { "ks6635.com", true },
+ { "ks6637.com", true },
+ { "ks6638.com", true },
+ { "ks6650.com", true },
+ { "ks6651.com", true },
+ { "ks6652.com", true },
+ { "ks6653.com", true },
+ { "ks6656.com", true },
+ { "ks6657.com", true },
+ { "ks6658.com", true },
+ { "ks6659.com", true },
+ { "ks6665.com", true },
+ { "ks6670.com", true },
+ { "ks6671.com", true },
+ { "ks68.net", true },
+ { "ks680.com", true },
+ { "ks6808.com", true },
{ "ks681.com", true },
+ { "ks6860.com", true },
+ { "ks698.com", true },
+ { "ks81.cc", true },
+ { "ks86.cc", true },
+ { "ks86.net", true },
+ { "ks8600.com", true },
{ "ks88.com", true },
{ "ks88.org", true },
+ { "ks8802.com", true },
+ { "ks8812.com", true },
+ { "ks8825.com", true },
+ { "ks8831.com", true },
+ { "ks888.la", true },
+ { "ks89.cc", true },
+ { "ks902.com", true },
+ { "ks912.com", true },
+ { "ks921.com", true },
+ { "ks958.com", true },
+ { "ks98.cc", true },
{ "kscarlett.com", true },
{ "kschv-rdeck.de", true },
{ "kselenia.ee", true },
{ "ksero.center", true },
{ "ksero.wroclaw.pl", true },
+ { "ksham.net", true },
{ "kshlm.in", true },
{ "ksmmmo.org.tr", true },
{ "ksoc.com", true },
{ "ksopp.si", true },
- { "kspg.tv", true },
{ "kssk.de", true },
{ "ksukelife.com", true },
{ "kt-events.de", true },
{ "kt-zoe.com", true },
{ "kt3i.com", true },
+ { "ktbnetbank.com", true },
{ "kthnxbai.xyz", true },
{ "ktm-troxler.de", true },
{ "ktmclubitalia.it", true },
@@ -24605,7 +25612,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kuehndel.org", true },
{ "kuehnel-bs.de", true },
{ "kuehnel-online.eu", true },
- { "kuehnel.org", false },
{ "kuemmerlin.eu", true },
{ "kuemmling.eu", true },
{ "kuhn-elektrotechnik.de", true },
@@ -24615,10 +25621,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kukal.cz", true },
{ "kuketz-blog.de", true },
{ "kuketz-security.de", true },
+ { "kukoon.de", true },
{ "kulde.net", true },
{ "kulinaristi.fi", true },
{ "kulivps.com", true },
- { "kulopo.com", true },
+ { "kulpakko.com", true },
{ "kultsar.com", true },
{ "kulturmel.ch", true },
{ "kum.com", true },
@@ -24635,6 +25642,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kunra.de", true },
{ "kunstdrucke-textildruck.de", true },
{ "kunsthandel-augustus-rex.de", true },
+ { "kunstkieken.nl", true },
{ "kunstundunrat.de", true },
{ "kunvn.com", true },
{ "kuoruan.com", true },
@@ -24648,7 +25656,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kupimlot.ru", true },
{ "kupinska.pl", true },
{ "kupleno.com", true },
- { "kuponrazzi.com", true },
{ "kuponydoher.cz", true },
{ "kupschke.net", true },
{ "kurniadwin.to", true },
@@ -24664,15 +25671,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kursypolska.pl", true },
{ "kurtschlatzer.com", true },
{ "kuruppa.xyz", true },
+ { "kusadasiforum.com", true },
{ "kuschku.de", true },
{ "kusdaryanto.web.id", true },
{ "kushtikidsparties.co.uk", true },
{ "kusochi.eu", true },
{ "kutinsoft.com", true },
{ "kutip.id", true },
+ { "kutny.cz", true },
{ "kutsankaplan.com", true },
{ "kuttler.eu", true },
- { "kutukupret.com", true },
{ "kutus.ee", true },
{ "kuunlamaailm.ee", true },
{ "kuwichitagastro.com", true },
@@ -24683,9 +25691,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kvalitnitesneni.cz", true },
{ "kvantel.no", true },
{ "kvcc.com.au", true },
- { "kvestmaster.ru", true },
+ { "kvestiks.ru", true },
{ "kvetinymilt.cz", true },
- { "kvhile.com", true },
{ "kvilt.dk", true },
{ "kvnsport.ru", true },
{ "kvpc.com.au", true },
@@ -24700,6 +25707,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kx197.com", true },
{ "kxah35.com", true },
{ "kxline.com", true },
+ { "kxnrl.com", true },
{ "kxway.com", true },
{ "kybi.sk", true },
{ "kydara.com", true },
@@ -24728,6 +25736,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kzar.co.uk", true },
{ "kzsdabas.hu", true },
{ "l-atelier-c.com", true },
+ { "l-lab.org", true },
{ "l0re.com", true },
{ "l0v0l.com", true },
{ "l17r.eu", true },
@@ -24765,6 +25774,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "labanote.com", true },
{ "labanskoller.se", true },
{ "labanskollermark.se", true },
+ { "labavn.com", true },
{ "labavn.org", true },
{ "labcenter.com", true },
{ "labcoat.jp", true },
@@ -24782,6 +25792,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "labspack.com", true },
{ "labsys.xyz", true },
{ "labtest.ltd", true },
+ { "labworks.org", true },
{ "lacaey.se", true },
{ "lacantine.xyz", true },
{ "lacaveducinquantenaire.com", true },
@@ -24799,12 +25810,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lacledeslan.com", false },
{ "lacledor.ch", true },
{ "laclefdor.ch", true },
- { "lacliniquefinanciere.com", true },
{ "lacoast.gov", true },
- { "lacocinadelila.com", true },
{ "lacoquette.gr", true },
{ "lacyc3.eu", true },
{ "ladadate.com", true },
+ { "ladakhtrip.tours", true },
{ "ladbroke.net", false },
{ "ladenzeile.at", true },
{ "ladenzeile.de", true },
@@ -24816,9 +25826,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lady-2.jp", true },
{ "ladyanna.de", true },
{ "ladyofhopeparish.org", true },
- { "laegernevedlillebaelt.dk", true },
{ "laermschmiede.de", true },
- { "laeryn.com", true },
{ "laextra.mx", true },
{ "lafantasticatravel.com", true },
{ "lafayette-rushford.com", true },
@@ -24872,6 +25880,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lalucepulsata.it", true },
{ "lalucioledigitale.com", true },
{ "lalunaonlinebr.com", true },
+ { "lalunecreative.com", true },
{ "lalyre-corcelles.ch", true },
{ "lamakat.de", true },
{ "lamaletarural.es", true },
@@ -24902,22 +25911,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lampenwelt.at", true },
{ "lampenwelt.ch", true },
{ "lampenwelt.de", true },
- { "lampl.info", false },
{ "lampposthomeschool.com", true },
{ "lampy.pl", true },
+ { "lamujerquesoy.com", true },
{ "lamunyon.com", true },
{ "lan.biz.tr", true },
{ "lana.swedbank.se", true },
{ "lanahallen.com", true },
{ "lanbroa.eu", true },
{ "lancashirecca.org.uk", true },
- { "lancejames.com", true },
{ "lancelafontaine.com", true },
{ "lancelhoff.com", true },
{ "lancemanion.com", true },
{ "lanceyip.com", true },
{ "lancyvbc.ch", true },
{ "land.nrw", false },
+ { "landassessmentservices.com", true },
{ "landbetweenthelakes.us", true },
{ "landchecker.com.au", true },
{ "landegge.nl", true },
@@ -24927,7 +25936,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "landinfo.no", true },
{ "landingear.com", true },
{ "landlordy.com", true },
- { "landofelves.net", false },
{ "landoncreekapartments.com", true },
{ "landrovermerriamparts.com", true },
{ "landscape-photography.org", true },
@@ -24954,7 +25962,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "langatang.com", true },
{ "langbein.org", true },
{ "langduytinh.com", true },
- { "langkahteduh.com", true },
{ "langkawitrip.com", true },
{ "langotie.com.br", true },
{ "langsam-dator.se", true },
@@ -24983,7 +25990,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lanzamientovirtual.es", true },
{ "lanzarote-online.info", true },
{ "laos.dating", true },
- { "laospage.com", true },
{ "laozhu.me", true },
{ "lapageamelkor.org", true },
{ "lapassiondutrading.com", true },
@@ -25003,7 +26009,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "larabergmann.de", true },
{ "laracode.eu", true },
{ "laraeph.com", true },
- { "laraigneedusoir.com", true },
{ "laranara.se", true },
{ "laranjada.org", true },
{ "laraveldirectory.com", true },
@@ -25017,7 +26022,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lariposte.org", true },
{ "lariscus.eu", true },
{ "larondinedisinfestazione.com", true },
- { "larptreff.de", true },
+ { "larotayogaming.com", true },
{ "larraz.es", true },
{ "larryli.cn", true },
{ "larrysalibra.com", true },
@@ -25029,6 +26034,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "larsklint.com", true },
{ "lartduportrait.fr", true },
{ "laruga.co.uk", true },
+ { "lasabina.it", true },
{ "lasabubillas.es", true },
{ "lasalle.wa.edu.au", true },
{ "lasarmas.com", true },
@@ -25036,9 +26042,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lascana.co.uk", true },
{ "lasereyess.net", true },
{ "laserhealthsolutions.com", true },
+ { "laserpc.net", true },
{ "laserplaza.de", true },
{ "laserplaza.net", true },
- { "lask.in", true },
{ "laskas.pl", true },
{ "lasowy.com", true },
{ "laspequenassemillas.com", true },
@@ -25052,10 +26058,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lasseleegaard.org", true },
{ "lassesworld.com", true },
{ "lassesworld.se", true },
- { "lastbutnotyeast.com", true },
- { "lastharo.com", true },
+ { "lassovideos.com", true },
+ { "lasterhub.me", true },
{ "lastpass.com", false },
- { "lastrada-minden.de", true },
{ "lasuzefc.fr", true },
{ "lat.sk", true },
{ "latabaccheria.net", true },
@@ -25084,7 +26089,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lauensteiner.de", false },
{ "laufpix.de", true },
{ "lauftreff-himmelgeist.de", true },
- { "laughinggrapepublishing.com", true },
{ "laukstein.com", true },
{ "launayflorian.net", true },
{ "launch-subtitle.com", true },
@@ -25101,6 +26105,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lauraofrank.com", true },
{ "lauraohagan.com", true },
{ "laurasplacefamilysupport.org.au", true },
+ { "lauravaindumentaria.com", true },
{ "laurelblack.com", true },
{ "laurencball.com", true },
{ "laurenceplouffe.com", true },
@@ -25121,7 +26126,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lavamob.com", true },
{ "lavanderia.roma.it", true },
{ "lavaux.lv", true },
- { "lavenderx.org", true },
{ "laviedalex.ovh", true },
{ "lavinaec.com", true },
{ "lavinya.net", true },
@@ -25134,12 +26138,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lavolte.net", true },
{ "lavril.fr", true },
{ "law-colleges.com", true },
+ { "law-iku.pro", true },
{ "law-peters.de", true },
{ "law-profile.com", true },
{ "law.co.il", true },
{ "law22.com", true },
{ "lawabidingcactus.com", true },
- { "lawbirduk.com", true },
{ "lawlessenglish.com", true },
{ "lawlessfrench.com", true },
{ "lawlessspanish.com", true },
@@ -25155,9 +26159,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "layordesign.co.uk", true },
{ "layoutsatzunddruck.de", true },
{ "lazau.com", true },
+ { "lazerengravingpros.com", true },
{ "lazisbaiturrahman.org", true },
{ "lazistance.com", true },
- { "lazowik.pl", true },
{ "lazurit.com", true },
{ "lazyboston.com", true },
{ "lazyclock.com", true },
@@ -25176,6 +26180,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lbsistemas.com.mx", true },
{ "lbux.org", true },
{ "lc-cs.com", false },
+ { "lc1588.com", true },
+ { "lc389.com", true },
+ { "lc460.com", true },
+ { "lc5998.com", true },
+ { "lc68694.com", true },
+ { "lc68699.com", true },
+ { "lc8.com", true },
+ { "lc8.fun", true },
+ { "lc8.live", true },
+ { "lc8.tv", true },
+ { "lc8841.com", true },
+ { "lc8893.com", true },
+ { "lc8a.com", true },
+ { "lc8dc12.com", true },
+ { "lc8dc14.com", true },
+ { "lc8dc17.com", true },
+ { "lc8guidance.com", true },
+ { "lc8md03.com", true },
+ { "lc8md30.com", true },
+ { "lc98.net", true },
+ { "lc9852.com", true },
+ { "lc9910.com", true },
{ "lca-pv.de", true },
{ "lca.gov", true },
{ "lcacommons.gov", true },
@@ -25204,15 +26230,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "le-page.info", true },
{ "le-palantir.com", true },
{ "le-traiteur-parisien.fr", true },
- { "le130rb.com", true },
- { "le23.fr", true },
+ { "le-upfitter.com", true },
{ "leadbook.ru", true },
{ "leadbox.cz", true },
- { "leaderoftheresistance.com", false },
- { "leaderoftheresistance.net", false },
{ "leadinfo.com", true },
{ "leadpagebuilders.com", true },
{ "leadquest.nl", true },
+ { "leaf-consulting.de", true },
{ "leafandseed.co.uk", true },
{ "leafans.tk", false },
{ "leafinote.com", true },
@@ -25224,6 +26248,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "leap-it.be", true },
{ "leapandjump.co.uk", true },
{ "leapworks.io", true },
+ { "learncrypto.live", true },
+ { "learncrypto.show", true },
+ { "learncrypto.vip", true },
{ "learnflakes.net", true },
{ "learning-id.com", true },
{ "learningaboutcarinsurance.com", true },
@@ -25237,7 +26264,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "learnthetruth.tk", true },
{ "leaseit24.com", true },
{ "leaseit24.de", true },
- { "leaseourthings.com", true },
{ "leaseplan.com", true },
{ "leasit.at", true },
{ "leasit.de", true },
@@ -25259,6 +26285,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lebourgeo.is", true },
{ "lecannabis.com", false },
{ "lecannabiste.com", true },
+ { "lecheng08.com", true },
+ { "lecheng88.com", true },
{ "lecn2.com", true },
{ "lecoinchocolat.com", true },
{ "lectricecorrectrice.com", true },
@@ -25269,6 +26297,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ledlight.com", true },
{ "ledlights.ca", true },
{ "ledscontato.com.br", true },
+ { "ledspadova.eu", true },
{ "ledwereld.nl", true },
{ "lee-fuller.co.uk", true },
{ "leeaaronsrealestate.com", true },
@@ -25277,7 +26306,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "leedev.org", true },
{ "leekspin.ml", true },
{ "leelaylay.com", true },
- { "leere.me", true },
{ "leerliga.de", true },
{ "leertipp.de", true },
{ "leesilvey.com", true },
@@ -25305,11 +26333,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "legalcontrol.info", true },
{ "legaldesk.com", true },
{ "legalforms.ng", true },
- { "legalinmotion.es", true },
{ "legalplace.fr", true },
{ "legalrobot.com", true },
{ "legalsearch.nl", true },
{ "legalsoftware.net", true },
+ { "legaltechnology.pro", true },
{ "legendary.camera", true },
{ "legendarycamera.com", true },
{ "legendcatz.com", true },
@@ -25330,7 +26358,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "legrandvtc.fr", true },
{ "legumeinfo.org", true },
{ "legyenkianegykereked.hu", true },
- { "lehighmathcircle.org", true },
{ "lehighvalleypeds.com", true },
{ "lehmitz-weinstuben.de", true },
{ "lehti-tarjous.net", true },
@@ -25349,10 +26376,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lejardindesmesanges.fr", true },
{ "lektier.cf", true },
{ "lel.ovh", true },
- { "lelambiental.com.br", true },
+ { "lelux.fi", true },
{ "lemarcheelagrandeguerra.it", true },
{ "lemazol.fr", true },
{ "lemilane.it", true },
+ { "leminhduong.com", true },
{ "lemni.top", true },
{ "lemoine.at", true },
{ "lemondenumerique.com", true },
@@ -25364,6 +26392,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lemonthy.com", true },
{ "lemouillour.fr", true },
{ "lemuslimpost.com", true },
+ { "lenafonster.se", true },
{ "lenagroben.de", true },
{ "lenalio.fr", true },
{ "lenaneva.ru", true },
@@ -25376,10 +26405,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lennyobez.be", true },
{ "lenostech.gr", true },
{ "lenou.nl", true },
+ { "lenovovietnam.net", true },
{ "lenr-forum.com", true },
{ "lensdoctor.com", true },
{ "lenspirations.com", true },
- { "lensual.space", true },
{ "lenuagebauche.org", true },
{ "lenyip.com", true },
{ "lenyip.me", true },
@@ -25421,12 +26450,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lesancheslibres.fr", true },
{ "lesarts.com", true },
{ "lesberger.ch", true },
+ { "lesbi-porno-video.ru", true },
{ "lesbofight.com", true },
{ "lesbrillantsdaristide.com", true },
{ "lesconteursavis.org", true },
{ "lescrapdesfilles.fr", true },
{ "leseditionsbraquage.com", true },
{ "lesfilmsavivre.com", true },
+ { "lesgarianes.com", true },
{ "lesgoodnews.fr", true },
{ "leshervelines.com", true },
{ "lesjardinsdubanchet.fr", true },
@@ -25436,6 +26467,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lespagesweb.ch", true },
{ "lespecialiste-pradelexcellence.com", true },
{ "lesplatanes.ch", true },
+ { "lespoesiesdheloise.fr", true },
{ "lespret.nl", true },
{ "lesquerda.cat", false },
{ "lessis.moe", true },
@@ -25453,7 +26485,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lets-bounce.com", true },
{ "lets-go-acoustic.de", true },
{ "lets-ktai.jp", true },
- { "lets.ninja", true },
{ "lets.nu", true },
{ "letsbounceuk.com", true },
{ "letsdebug.net", true },
@@ -25505,6 +26536,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lew.im", true },
{ "lewdawson.com", true },
{ "lewdgamer.com", true },
+ { "lewdlist.com", true },
{ "lewis.li", true },
{ "lewiscollard.com", true },
{ "lewisdatasecurity.com", true },
@@ -25533,7 +26565,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lgnsh.fr", true },
{ "lgpecasoriginais.com.br", true },
{ "lhajn.cz", true },
- { "lhakustik.se", true },
{ "lhamaths.online", true },
{ "lhconsult.tk", false },
{ "lhgavarain.com", true },
@@ -25542,6 +26573,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "li-ke.co.jp", true },
{ "li.search.yahoo.com", false },
{ "lialion.de", true },
+ { "liam-w.com", true },
{ "liam-w.io", true },
{ "liamelliott.me", true },
{ "liamlin.me", true },
@@ -25555,9 +26587,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lianye5.cc", true },
{ "lianye6.cc", true },
{ "liaronce.com", true },
- { "liautard.fr", true },
{ "lib64.net", true },
- { "libbitcoin.org", true },
{ "libble.eu", true },
{ "libbywinberginteriors.com.au", true },
{ "liberapay.com", true },
@@ -25565,6 +26595,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "liberationist.org", true },
{ "liberationschool.org", true },
{ "liberdademg.com.br", true },
+ { "libertas.co.jp", true },
{ "libgame.com", true },
{ "libmpq.org", true },
{ "libnull.com", true },
@@ -25595,6 +26626,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "libsodium.org", true },
{ "libstock.si", true },
{ "lichess.org", true },
+ { "lichform.com", true },
{ "lichtmetzger.de", false },
{ "lichtspot.de", true },
{ "lichttechnik-tumler.com", true },
@@ -25620,6 +26652,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "liebel.org", true },
{ "lieberwirth.biz", true },
{ "liemen.net", true },
+ { "lienhardtconstruction.fr", true },
{ "lieren4x4.nl", true },
{ "lieuu.com", true },
{ "lifanov.com", true },
@@ -25644,6 +26677,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lifesafety.com.br", true },
{ "lifeset.pp.ua", true },
{ "lifeslonglist.com", true },
+ { "lifestorage.com", true },
{ "lifestylecent.com", true },
{ "lifestylefinancial.ca", true },
{ "lifestylefoto.cz", true },
@@ -25675,6 +26709,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lightingsimivalley.com", true },
{ "lightingthousandoaks.com", true },
{ "lightingwestlakevillage.com", true },
+ { "lightning-wallet.com", true },
{ "lightning.community", true },
{ "lightning.engineering", true },
{ "lightpics.net", true },
@@ -25690,6 +26725,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lignoma.com", true },
{ "ligonier.com", true },
{ "lihaul.dnsalias.net", true },
+ { "lije-creative.com", true },
{ "lijncoaching.nl", true },
{ "lijstje.be", true },
{ "lijstje.nl", true },
@@ -25704,11 +26740,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "likeometer.co", true },
{ "likere.com", true },
{ "likesforinsta.com", true },
- { "likui.me", true },
+ { "likestudio.com.ua", true },
{ "lilaccakeboutique.com", true },
+ { "lilai6616.com", true },
+ { "liliang13.com", true },
{ "liljohnsanitary.net", true },
{ "lillepuu.com", true },
{ "lilliputpreschool.co.nz", true },
+ { "lilomatrixcorner.fr", true },
{ "lily-bearing.com", true },
{ "lily-inn.com", true },
{ "lilyfarmfreshskincare.com", true },
@@ -25737,11 +26776,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "limx.win", true },
{ "lin.fi", true },
{ "linaklein.de", true },
- { "linan.blog", true },
{ "linan.info", true },
{ "linan.me", true },
{ "linan.site", true },
- { "linasjourney.com", true },
{ "lincdavis.com", true },
{ "linchpin-it.com", true },
{ "lincnaarzorg.nl", true },
@@ -25754,6 +26791,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lincolnwayflorist.com", true },
{ "lindalap.fi", true },
{ "lindaolsson.com", true },
+ { "lindemann.space", true },
{ "linden.me", true },
{ "lindeskar.se", true },
{ "lindnerhof-taktik.de", true },
@@ -25767,6 +26805,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "line-wise.com", true },
{ "line.biz", true },
{ "line.co.nz", true },
+ { "line.red", true },
{ "lineageos.org", true },
{ "linearaudio.net", true },
{ "linearaudio.nl", true },
@@ -25777,7 +26816,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lingotaxi.com", true },
{ "linguatrip.com", false },
{ "lingvo-svoboda.ru", true },
- { "linherest.tk", true },
{ "linhua.org", true },
{ "link-sanitizer.com", true },
{ "link2serve.com", true },
@@ -25810,6 +26848,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "linux.cn", true },
{ "linux.conf.au", true },
{ "linux.fi", true },
+ { "linux.pizza", true },
{ "linux3.org", true },
{ "linuxadictos.com", true },
{ "linuxbabe.com", true },
@@ -25821,15 +26860,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "linuxforum.ch", true },
{ "linuxgiggle.com", true },
{ "linuxhostsupport.com", true },
+ { "linuxincluded.com", true },
{ "linuxiuvat.de", true },
{ "linuxlounge.net", true },
{ "linuxos.org", true },
- { "linuxproperties.com", true },
{ "linuxsecurity.expert", true },
{ "linx.net", true },
{ "linzgau.de", true },
{ "linzyjx.com", true },
- { "lion-tech.ch", true },
{ "lionlyrics.com", true },
{ "lionsdeal.com", true },
{ "lipartydepot.com", true },
@@ -25852,7 +26890,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lisamccorrie.com", true },
{ "lisanzauomo.com", true },
{ "lisburnhottubnbounce.co.uk", true },
- { "lisinphotography.com", true },
{ "liskgdt.net", true },
{ "lislan.org.uk", true },
{ "lisowski-development.com", false },
@@ -25865,11 +26902,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "listminut.be", true },
{ "lists.fedoraproject.org", true },
{ "lists.stg.fedoraproject.org", true },
+ { "listsothebysrealtyhk.com", true },
{ "litchidova.nl", true },
{ "litebit.de", true },
{ "litebit.eu", true },
{ "litebit.nl", true },
- { "litebitanalytics.eu", true },
{ "litebitcdn.eu", true },
{ "litebits.com", true },
{ "litemind.com", false },
@@ -25881,10 +26918,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lithesalar.se", true },
{ "lithianissaneugeneparts.com", true },
{ "litsovet.com", true },
+ { "little-bird-bayreuth.de", true },
+ { "little-brother.eu", true },
{ "little-cake.com", true },
{ "littlebestfriend.de", true },
{ "littleblackfish.se", true },
{ "littleboutiqueshop.co.uk", true },
+ { "littledev.nl", true },
{ "littleduck.xyz", true },
{ "littlefairy.no", true },
{ "littlefamilyadventure.com", true },
@@ -25915,9 +26955,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "liupeicheng.top", true },
{ "liuxiangling.com", true },
{ "liv3d.stream", true },
- { "liv3ly.com", true },
{ "livada.fr", true },
{ "livaniaccesorios.com", true },
+ { "live4k.media", false },
{ "live8811.com", true },
{ "live8899.cn", true },
{ "live8899.co", true },
@@ -25934,6 +26974,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "livedesign.at", true },
{ "livedesign24.de", true },
{ "liveflightapp.com", true },
+ { "liveforspeed.se", true },
{ "livehomecams.co.uk", true },
{ "livejasmin.dk", true },
{ "livekaarten.be", true },
@@ -25947,7 +26988,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "livekortti.com", true },
{ "livekortti.fi", true },
{ "livela.jp", true },
- { "livelexi.com", true },
{ "livelifewithintent.com", true },
{ "livepaperhelp.com", true },
{ "liveregistratie.nl", true },
@@ -25965,7 +27005,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "living.video", true },
{ "living24.de", true },
{ "livingafrugallife.com", true },
- { "livingforreal.com", true },
{ "livinginhimalone.com", true },
{ "livingkingsinc.net", true },
{ "livinglocalnashville.com", true },
@@ -25973,6 +27012,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "livive.com", true },
{ "livnev.xyz", true },
{ "livogeva.dk", true },
+ { "livv168.com", true },
+ { "livv88.com", true },
{ "lixiaoyu.live", true },
{ "lixtick.com", true },
{ "liyang.pro", false },
@@ -25986,8 +27027,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lizzaran.io", true },
{ "lizzwood.com", true },
{ "ljason.cn", true },
+ { "ljc.ro", true },
{ "ljoonal.xyz", true },
{ "ljs.io", true },
+ { "ljskool.com", true },
{ "ljusdalsnaprapatklinik.se", true },
{ "lk-hardware.cz", true },
{ "lk1.bid", true },
@@ -26003,6 +27046,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ll9721.com", true },
{ "ll9728.co", true },
{ "llamacuba.com", true },
+ { "llamasweet.tech", true },
{ "llandudnochristmasfayre.co.uk", true },
{ "llbcpa.com", true },
{ "llemoz.com", true },
@@ -26032,7 +27076,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lndrive.space", true },
{ "lng-17.org", true },
{ "lnhequipmentltd.com", true },
- { "lnyltx.cn", true },
+ { "lnhydy.cn", true },
+ { "lnrsoft.ddns.net", true },
{ "load-ev.de", true },
{ "loadlow.me", true },
{ "loanaway.ca", true },
@@ -26064,7 +27109,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "localhost.ee", true },
{ "localprideart.com", true },
{ "localsearch.homes", true },
- { "localsource.eu", true },
{ "localspot.pl", true },
{ "locapos.com", true },
{ "location-appartement-dakar.com", true },
@@ -26083,13 +27127,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lockme.pl", true },
{ "locknlock.com.br", true },
{ "locknlockbrasil.com.br", true },
+ { "lockoutgroup.com", true },
{ "lockpick.nl", true },
{ "lockpicks.se", true },
{ "locksmith--sanantoniotx.com", true },
{ "locksmith-sanantonio-tx.com", true },
{ "locksmithbalchsprings.com", true },
- { "locksmithballito.com", true },
- { "locksmithbluff.co.za", true },
{ "locksmithdearborn.com", true },
{ "locksmithdrippingspringstx.com", true },
{ "locksmithedmonds.com", true },
@@ -26097,7 +27140,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "locksmithgarland-tx.com", true },
{ "locksmithgrapevinetx.com", true },
{ "locksmithhumbletx.com", true },
- { "locksmithindurban.co.za", true },
{ "locksmithlakewaytx.com", true },
{ "locksmithlivoniami.com", true },
{ "locksmithmadisonheights.com", true },
@@ -26111,12 +27153,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "locksmithscottsdaleaz.com", true },
{ "locksmithseattleco.com", true },
{ "locksmithservice-houston.com", true },
+ { "locksmithsinsanantoniotx.com", true },
{ "locksmithspring.com", true },
{ "locksmithspringtx.com", true },
- { "locksmithswestville.com", true },
{ "locksmiththewoodlands.com", true },
{ "lockwoodchristmastreefarm.com", true },
- { "locomocosec.com", true },
{ "locomore.com", true },
{ "locomotionds.com", true },
{ "locomotive.net.br", true },
@@ -26126,6 +27167,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "locusmap.eu", true },
{ "lodash.com", false },
{ "loddeke.eu", true },
+ { "lodewijkict.nl", true },
+ { "lodus.io", true },
{ "loenshotel.de", true },
{ "loew.de", true },
{ "loforo.com", true },
@@ -26142,6 +27185,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "logfile.ch", true },
{ "logicaccountingsolutions.com", true },
{ "logical-invest.com", true },
+ { "logiccircle.ir", true },
{ "logiciel-entreprise-seurann.fr", true },
{ "logicio.ch", false },
{ "logicio.de", false },
@@ -26151,11 +27195,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "login.corp.google.com", true },
{ "login.gov", false },
{ "login.launchpad.net", true },
+ { "login.ooo", true },
{ "login.raiffeisen.ch", true },
{ "login.sapo.pt", true },
{ "login.ubuntu.com", true },
{ "login.xero.com", false },
{ "login.yahoo.com", false },
+ { "loginmailpage.com", true },
{ "logitel.de", true },
{ "logitrack.tk", true },
{ "logo-vogtland.de", true },
@@ -26169,7 +27215,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "logostock.jp", true },
{ "logtalk.org", true },
{ "logtalk.pt", true },
- { "logtywardrobe.com", true },
{ "logue.be", true },
{ "logze.nl", true },
{ "lohanaflores.com.br", true },
@@ -26212,9 +27257,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "loli.ski", true },
{ "loli.tube", true },
{ "loli.world", true },
+ { "loliblogs.cf", true },
+ { "loliblogs.ga", true },
+ { "loliblogs.gq", true },
+ { "loliblogs.ml", true },
{ "lolibrary.org", true },
{ "lolic.xyz", true },
{ "lolicon.eu", true },
+ { "lolifamily.cf", true },
+ { "lolifamily.ga", true },
+ { "lolifamily.gq", true },
+ { "lolifamily.ml", true },
{ "lolitalechat.com", true },
{ "lolkot.ru", true },
{ "lolly.cc", true },
@@ -26222,20 +27275,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lolpatrol.de", true },
{ "lolpatrol.wtf", true },
{ "loma.ml", true },
+ { "lombri-agro.com", true },
{ "lommeregneren.dk", true },
{ "lommyfleet.com", true },
{ "lon-so.com", true },
{ "lona.io", true },
- { "lonasdigital.com", true },
{ "london-transfers.com", true },
{ "london.dating", true },
{ "londongallery.net", true },
{ "londongynaecologist.co", true },
{ "londonindustry.it", true },
- { "londonkan.jp", true },
{ "londonkeyholdingcompany.co.uk", true },
{ "londonpropertymatch.com", true },
{ "londonseedcentre.co.uk", true },
+ { "londontaxipr.com", true },
{ "lonelytweets.com", true },
{ "lonesomecosmonaut.com", true },
{ "lonestarlandandcommercial.com", true },
@@ -26243,7 +27296,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "long139.com", true },
{ "long18.cc", true },
{ "long228.com", true },
+ { "long388.com", true },
+ { "long510.com", true },
{ "long688.com", true },
+ { "long788.com", true },
+ { "long8.com", true },
+ { "long8039.com", true },
+ { "long918.com", true },
+ { "long988.com", true },
{ "longboat.io", true },
{ "longhaircareforum.com", true },
{ "longhorn-imports.com", true },
@@ -26254,6 +27314,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "longtermcare.gov", true },
{ "lonniec.com", true },
{ "lonniemason.net", true },
+ { "lonny.ee", true },
{ "lonwan.ru", true },
{ "look.co.il", true },
{ "lookagain.co.uk", true },
@@ -26280,6 +27341,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "loqu8.com", true },
{ "loquo.com", true },
{ "loqyu.com", true },
+ { "lord.sh", true },
{ "lordjevington.co.uk", true },
{ "lore.azurewebsites.net", true },
{ "loremipsum.info", true },
@@ -26293,17 +27355,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lormansas.com", true },
{ "losangelestown.com", true },
{ "loshogares.com.mx", true },
+ { "losingweight.coach", true },
{ "losmedicamentos.net", true },
{ "losreyesdeldescanso.com.ar", true },
{ "lost.host", true },
{ "lost.report", true },
+ { "lostinweb.eu", true },
{ "lostkeys.co.uk", true },
{ "lostsandal.com", true },
{ "lostsandal.io", true },
{ "lostserver.com", true },
{ "lostwithdan.com", true },
- { "loteamentoabertoamparo.com.br", true },
{ "loteamentomontereiitu.com.br", true },
+ { "lothlorien.ca", false },
{ "lotl.ru", true },
{ "lotn.mobi", true },
{ "lotn.nl", true },
@@ -26323,15 +27387,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "louerunhacker.fr", true },
{ "louisapolicefoundation.com", true },
{ "louisapolicefoundation.org", true },
- { "louisemisellinteriors.co.uk", true },
{ "louisvillecarguys.com", true },
{ "louisvillefibroids.com", true },
{ "loune.net", true },
{ "loungecafe.net", true },
{ "loungecafe.org", true },
{ "loungepapillon.com", true },
+ { "louremedi.fr", true },
{ "love4taylor.me", true },
- { "loveai.org", true },
{ "loveandadoreboutique.com", true },
{ "lovebeingsexy.co.uk", true },
{ "lovebigisland.com", true },
@@ -26346,13 +27409,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lovenwishes.com", true },
{ "loveph.one", true },
{ "lover-bg.com", true },
- { "loverepair.co.uk", true },
{ "loverepublic.ru", true },
{ "lovesmagical.com", true },
{ "lovesupremefestival.com", true },
- { "lovevape.co", true },
+ { "loveweddingphotosandfilm.co.uk", true },
{ "loveysa.ch", true },
{ "lovg.ren", true },
+ { "lovingbody.yoga", true },
{ "lovingearth.co", true },
{ "lovingthermo.com", true },
{ "lovizaim.ru", true },
@@ -26365,7 +27428,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lowsec.space", true },
{ "lowsidetna.com", true },
{ "lowson.ca", true },
- { "loxal.net", true },
{ "loxal.org", true },
{ "loyaleco.it", true },
{ "loyaltyondemand.club", true },
@@ -26395,7 +27457,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lt.search.yahoo.com", false },
{ "ltaake.com", true },
{ "ltecode.com", true },
+ { "ltheinrich.de", true },
{ "ltib.com.au", true },
+ { "ltlec.cn", true },
+ { "ltlec.org", true },
+ { "ltlec.services", true },
{ "ltls.org", true },
{ "ltn-tom-morel.fr", true },
{ "ltservers.net", true },
@@ -26410,22 +27476,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lucacastelnuovo.nl", false },
{ "lucafontana.net", true },
{ "lucafrancesca.me", true },
- { "lucasantarella.com", true },
{ "lucasbergen.ca", true },
+ { "lucasdamasceno.com", true },
{ "lucasem.com", true },
{ "lucasgymnastics.com", true },
{ "lucasit.com", true },
{ "lucaslarson.net", true },
{ "lucassoler.com.ar", false },
{ "luce.life", true },
+ { "lucentioluo.space", true },
{ "luchscheider.de", false },
{ "luchthavenmaastricht.nl", true },
{ "lucian.blog", true },
{ "lucianoalbanes.com", true },
{ "lucid-light.de", true },
{ "lucid-reality.ch", true },
- { "lucidframeworks.com", true },
{ "lucidlight.de", true },
+ { "lucidlink.com", true },
{ "lucie-parizkova.cz", true },
{ "lucie.jp", true },
{ "lucielavickova.com", true },
@@ -26433,6 +27500,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "luckyfrog.hk", true },
{ "luckystorevn.com", true },
{ "luclu7.fr", true },
+ { "luctam.com", true },
{ "lucy.science", true },
{ "lucyparsonslabs.com", true },
{ "lucysan.net", true },
@@ -26446,6 +27514,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ludwigjohnson.se", true },
{ "ludwigpro.net", true },
{ "luedeke-bremen.eu", true },
+ { "lueersen.homedns.org", true },
{ "luehne.de", true },
{ "luelistan.net", true },
{ "luenwarneke.com", true },
@@ -26483,9 +27552,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lumen.sh", true },
{ "lumenbrowser.com", true },
{ "lumi.pw", true },
- { "lumiere.com", true },
{ "luminaire.fr", true },
- { "luminaires-online.fr", true },
{ "luminary.pl", true },
{ "lumitop.com", true },
{ "lumminary.com", true },
@@ -26495,7 +27562,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lunanova.moe", true },
{ "lunapps.com", true },
{ "lunar6.ch", true },
- { "lunarichter.de", true },
{ "lunarlog.com", true },
{ "lunarshark.com", true },
{ "lunarsoft.net", true },
@@ -26521,7 +27587,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lupinencyclopedia.com", true },
{ "lupinenorthamerica.com", true },
{ "luqsus.pl", true },
- { "lushan.me", true },
{ "lusitom.com", true },
{ "luso-livros.net", true },
{ "lusoft.cz", true },
@@ -26533,9 +27598,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "luteijn.cloud", true },
{ "luteijn.email", true },
{ "luteijn.pro", true },
- { "luthierunatespalermo.com", true },
{ "lutizi.com", false },
{ "lutoma.org", true },
+ { "luu.moe", true },
{ "luukdebruincv.nl", true },
{ "luukklene.nl", true },
{ "luukuton.fi", true },
@@ -26546,7 +27611,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "luvplay.co.uk", true },
{ "luxcraft.eng.br", true },
{ "luxecalendar.com", true },
+ { "luxfosdecoenterprise.com", true },
{ "luxsci.com", true },
+ { "luxstil.ga", true },
{ "luxurydistribution.cz", true },
{ "luxurynsight.net", false },
{ "luxuryweddingsindonesia.com", true },
@@ -26556,7 +27623,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "luxwatch.com", true },
{ "luyckx.net", true },
{ "luzat.com", true },
- { "luzfaltex.com", true },
{ "lv.search.yahoo.com", false },
{ "lv0.it", true },
{ "lvcshu.com", true },
@@ -26564,6 +27630,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lvguitars.com", true },
{ "lvmoo.com", true },
{ "lvrsystems.com", true },
+ { "lvtrafficticketguy.com", true },
{ "lw-addons.net", true },
{ "lwl.moe", true },
{ "lwl12.com", true },
@@ -26571,8 +27638,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lxai.net", true },
{ "lxd.cc", true },
{ "lyam.fr", true },
+ { "lyax.be", true },
{ "lycee-saintjoseph-mesnieres.fr", true },
- { "lycetre.com", true },
{ "lycly.me", true },
{ "lydudlejning.net", true },
{ "lyftrideestimate.com", true },
@@ -26594,6 +27661,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lyrical-nonsense.com", true },
{ "lyricfm.ie", true },
{ "lys.ch", true },
+ { "lysbed.com", true },
{ "lyst.co.uk", true },
{ "lyuly.com", true },
{ "lyx.dk", true },
@@ -26602,6 +27670,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lzwc.nl", true },
{ "m-22.com", true },
{ "m-chemical.com.hk", true },
+ { "m-cont.cz", true },
{ "m-gaming.tk", true },
{ "m-gh.info", true },
{ "m-idea.jp", true },
@@ -26616,12 +27685,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "m.mail.ru", true },
{ "m.me", true },
{ "m0t0k1ch1.com", true },
- { "m0v0.com", true },
{ "m134.eu", true },
- { "m2epro.com", true },
+ { "m23cal.eu", true },
{ "m2il.co", true },
{ "m2os.com", true },
{ "m2tm.fr", true },
+ { "m3windowsanddoors.com", true },
{ "m4g.ru", true },
{ "m4rcus.de", true },
{ "m5197.co", true },
@@ -26633,6 +27702,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "m9721.com", true },
{ "m9728.co", true },
{ "ma-eir.nl", true },
+ { "ma-maison-container.fr", true },
+ { "ma-maison-ossature-bois.fr", true },
{ "ma2t.com", true },
{ "maartenderaedemaeker.be", true },
{ "maartenvandekamp.nl", true },
@@ -26649,8 +27720,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mac-support.se", true },
{ "mac-world.pl", true },
{ "mac.biz.tr", true },
+ { "mac.osaka.jp", true },
{ "mac1.net", true },
- { "mac101hq.com", true },
{ "macaw.nl", true },
{ "macaws.org", true },
{ "macbook.es", true },
@@ -26667,13 +27738,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "machetewp.com", true },
{ "machidaclip.com", true },
{ "machikka.com", false },
+ { "machine.email", true },
{ "machinetransport.com", true },
{ "machon.biz", true },
{ "macht-elektro.de", true },
{ "machtweb.de", true },
{ "machu-picchu.nl", true },
{ "macil.tech", true },
- { "macinyasha.net", true },
+ { "macker.io", true },
{ "mackeysack.com", true },
{ "mackiehouse.ca", true },
{ "macksproductions.in", true },
@@ -26685,9 +27757,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "macnetwork.net", true },
{ "maco.org.uk", true },
{ "maconnerie-dcs.ch", true },
- { "macosxfilerecovery.com", true },
{ "macros.co.jp", true },
{ "macrostudent.com", true },
+ { "macstore.pe", true },
{ "macsupportnacka.se", true },
{ "macsupportstockholm.se", true },
{ "mactools.com.co", true },
@@ -26759,15 +27831,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "magentapinkinteriors.co.uk", true },
{ "magentoeesti.eu", true },
{ "magepro.fr", true },
+ { "magestionfinanciere.com", true },
{ "magewell.nl", true },
{ "maggie.com", true },
{ "magi-cake.com", true },
{ "magic-cards.info", true },
+ { "magic-photo-events.fr", true },
{ "magical-secrets.com", true },
{ "magical.rocks", true },
- { "magicalcircuslv.com", true },
{ "magicamulet.me", true },
- { "magicball.co", true },
{ "magicbeanschool.com", true },
{ "magicbroccoli.de", true },
{ "magiccards.info", true },
@@ -26784,13 +27856,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "magnacarebroker.com", true },
{ "magnate.co", true },
{ "magnatronic.com.br", true },
- { "magneticanvil.com", true },
+ { "magnetgaming.com", true },
{ "magneticattraction.com.au", true },
{ "magnetpass.uk", true },
{ "magnets.jp", true },
{ "magnificatwellnesscenter.com", true },
{ "magnificentdata.com", true },
{ "magnoliastrong.com", true },
+ { "magnumwallet.co", true },
{ "magnunbaterias.com.br", true },
{ "magodaoferta.com.br", true },
{ "magonote-nk.com", true },
@@ -26802,7 +27875,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mahadulmuneer.org", true },
{ "mahatmayoga.org", true },
{ "mahawi.sk", true },
- { "mahefa.co.uk", true },
{ "mahjong-navi.com", true },
{ "mahjong.org", true },
{ "mahjongrush.com", true },
@@ -26826,6 +27898,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mail4you.in", true },
{ "mailbox.mg", true },
{ "mailbox.org", true },
+ { "mailbro.de", true },
{ "mailfence.com", true },
{ "mailflank.com", true },
{ "mailhardener.com", true },
@@ -26848,6 +27921,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maintenance-traceur-hp.fr", true },
{ "mainzelmaennchen.net", true },
{ "maioresemelhores.com", true },
+ { "maiscelular.com.br", true },
{ "maisgasolina.com", true },
{ "maison-haimard.fr", true },
{ "maisondoree.be", true },
@@ -26859,6 +27933,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maitheme.com", true },
{ "maiti.info", true },
{ "maitrise-orthopedique.com", true },
+ { "majahoidja.ee", true },
{ "majaweb.cz", true },
{ "majemedia.com", false },
{ "majesnix.org", true },
@@ -26876,15 +27951,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "majorpussycum.com", true },
{ "makaleci.com", true },
{ "makalu.me", true },
- { "makariza.com.co", true },
{ "make-your-own-song.com", true },
{ "makeaboldmove.com", true },
{ "makechanges.com.au", true },
{ "makedin.net", true },
{ "makefoodrecipes.com", true },
+ { "makejusticework.org.uk", true },
{ "makem-bounce.co.uk", true },
{ "makenaiyo-fx.com", true },
+ { "makera.ga", true },
{ "makerdao.com", true },
+ { "makermiles.com", true },
+ { "makermiles.net", true },
+ { "makermiles.org", true },
{ "makersatwork.com", true },
{ "maketheneighborsjealous.com", true },
{ "makeurbiz.com", true },
@@ -26897,9 +27976,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "makowitz.cz", true },
{ "maktoob.search.yahoo.com", false },
{ "maku.edu.tr", true },
- { "malacat.com", true },
{ "malachiteauth.com", true },
- { "malash.me", true },
+ { "malash.me", false },
+ { "malasuk.com", true },
{ "malaysia.search.yahoo.com", false },
{ "malaysian.dating", true },
{ "maldives.cx", true },
@@ -26919,9 +27998,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "malikussa.id", true },
{ "malikussaid.com", true },
{ "malikzinad.com", true },
- { "malinator.net", false },
{ "malinheadview.ie", true },
- { "malkoun.com", true },
{ "mall.cz", true },
{ "mall.hr", true },
{ "mall.hu", true },
@@ -26931,8 +28008,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mallhonda.com", true },
{ "mallonline.com.br", true },
{ "malnex.de", true },
+ { "malphisruul.de", true },
{ "malta-firma.com", true },
- { "maltarea.com", true },
{ "malte-kiefer.de", true },
{ "malufs.com.br", true },
{ "malvertise.xyz", true },
@@ -26944,14 +28021,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "malyshata.com", true },
{ "malysvet.net", true },
{ "mamabepo.com", true },
+ { "mamaisondefamille.info", true },
{ "mamamoet.ru", true },
{ "mamanecesitaungintonic.com", true },
+ { "mamasorganizedchaos.com", true },
{ "mamatting.com", true },
{ "mamaxi.org", true },
{ "mambas.cn", true },
{ "mamiecouscous.com", true },
{ "mammals.net", true },
{ "mammaw.com", true },
+ { "mammooc.org", true },
{ "mammothlakesmls.net", true },
{ "mamoris-net.jp", true },
{ "mamospienas.lt", true },
@@ -26982,20 +28062,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mandiblackburnphoto.com", true },
{ "mandynamic.gr", true },
{ "maneggio.milano.it", true },
+ { "manelli.fr", true },
{ "manesht.ir", true },
{ "manfredgruber.net", true },
{ "manfredi.io", true },
{ "manfredimatteo.com", true },
{ "manfredschafer.ch", true },
+ { "mangabank.net", true },
{ "mangahigh.com", true },
{ "mangaristica.com", false },
{ "mangel.io", true },
- { "mangnhuapvc.com.vn", true },
{ "mangotwoke.co.uk", true },
+ { "mangowave.com", true },
{ "manhattanchoralensemble.org", true },
{ "manhole.club", true },
{ "manhuagui.com", true },
- { "maniaiti.nz", true },
{ "manicbouncycastles.co.uk", true },
{ "manicode.com", true },
{ "manicuradegel.com", true },
@@ -27004,7 +28085,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maniorpedi.com", true },
{ "maniosglass.gr", true },
{ "manipil.ch", true },
- { "manipurmatka.net", false },
{ "manja-und-martin.de", true },
{ "manjaro.ru", true },
{ "mankans.com", true },
@@ -27014,9 +28094,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mannheimbloggt.tk", true },
{ "mannschafft.ch", true },
{ "manoirdecontres.com", true },
+ { "manonamission.de", true },
{ "manonandre-avocat.fr", true },
{ "manoro.de", true },
- { "manowarus.com", true },
+ { "mansarda-life.net", true },
{ "mansdell.net", true },
{ "mansfeld.pl", true },
{ "manski.net", true },
@@ -27055,7 +28136,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "manuth.life", true },
{ "manwish.cn", true },
{ "manwithavan.co.uk", true },
- { "manyetikboya.com", true },
{ "manyiu.com", true },
{ "manylots.ru", true },
{ "manyue.org", true },
@@ -27079,7 +28159,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mapstack.org", true },
{ "maquinariaspesadas.org", true },
{ "maquinasdecoserplus.com", true },
- { "maquininhamercadopoint.com.br", true },
{ "mar-eco.no", true },
{ "marabumadrid.com", false },
{ "marabunta.io", true },
@@ -27116,7 +28195,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marcheslep.org.uk", true },
{ "marchhappy.tech", false },
{ "marchukov.com", true },
- { "marciaimportados.com.br", true },
{ "marcianoandtopazio.com", true },
{ "marclay.co.uk", true },
{ "marco-goltz.de", true },
@@ -27136,6 +28214,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marek.pro", true },
{ "marek.su", true },
{ "marelijah.org", true },
+ { "marex.host", true },
{ "margagriesser.de", true },
{ "margatroid.com", true },
{ "margaux-perrin.com", true },
@@ -27162,7 +28241,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mariereichl.cz", true },
{ "marietrap.ch", true },
{ "marijnfidder.nl", true },
- { "marikafranke.de", true },
{ "marilsnijders.nl", true },
{ "marilynmartin.com.au", true },
{ "marilynstreats.com", true },
@@ -27180,10 +28258,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marines-shop.com", true },
{ "marioabela.com", true },
{ "mariogeckler.de", false },
- { "mariposah.ch", true },
{ "marisamorby.com", false },
{ "mariskavankasbergen.nl", true },
{ "maritim.go.id", false },
+ { "maritimeseafoods.com", true },
{ "mariushubatschek.de", true },
{ "mariviolin.com", true },
{ "marjeta-gurtner.ch", true },
@@ -27208,13 +28286,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marketing.limited", true },
{ "marketing91.com", true },
{ "marketingbrandingnews.com", true },
- { "marketingbrandingnews.net", true },
{ "marketingco.nl", true },
{ "marketingconverts.com", true },
{ "marketingforfood.com", true },
{ "marketinggenerators.nl", false },
{ "marketingtrendnews.com", true },
{ "marketingvirtuales.com", true },
+ { "marketizare.ro", true },
{ "marketnsight.com", true },
{ "markfordelegate.com", true },
{ "markhaehnel.de", true },
@@ -27228,7 +28306,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marklauman.ca", true },
{ "markoh.co.uk", true },
{ "markom.rs", true },
- { "markprof.ru", true },
{ "markri.nl", true },
{ "markridgwell.co.uk", true },
{ "markridgwell.com", true },
@@ -27253,6 +28330,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "markusehrlicher.de", true },
{ "markuskeppeler.de", true },
{ "markuskeppeler.no-ip.biz", true },
+ { "markusueberallassetmanagement.de", true },
+ { "markusueberallconsulting.de", true },
{ "markvanacker.be", true },
{ "marl.fr", true },
{ "marloncommunications.com", true },
@@ -27271,7 +28350,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "marrickvilleapartments.com.au", true },
{ "marron-dietrecipe.com", true },
{ "marsanvet.com", true },
- { "marsble.com", true },
+ { "marsble.com", false },
+ { "marsbleapp.com", true },
{ "marseillekiteclub.com", true },
{ "marshallscastles.com", true },
{ "marshallwilson.com", true },
@@ -27286,9 +28366,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "martensson.io", true },
{ "marti201.ga", true },
{ "martialarts-wels.at", true },
+ { "martian.community", true },
{ "martian.tk", true },
{ "martide.com", true },
{ "martijn.site", true },
+ { "martijnhielema.nl", true },
{ "martijnvanderzande.nl", true },
{ "martin-loewer.de", true },
{ "martin-weil.de", true },
@@ -27297,7 +28379,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "martindimitrov.cz", true },
{ "martine.nu", true },
{ "martineweitweg.de", true },
- { "martinfranc.eu", true },
+ { "martinfranc.eu", false },
{ "martinhaunschmid.com", true },
{ "martinkus.eu", true },
{ "martinmuc.de", true },
@@ -27328,7 +28410,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "masaze-hanka.cz", true },
{ "mascosolutions.com", true },
{ "masdillah.com", true },
+ { "maseni.com", true },
{ "maservant.net", true },
+ { "masha.one", true },
{ "mashandco.it", true },
{ "mashandco.tv", true },
{ "mashcape.com", true },
@@ -27345,7 +28429,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "massagecupping.com", true },
{ "massagetainha-hanoi.com", true },
{ "massconsultores.com", true },
- { "massdrop.com", true },
{ "masse.org", true },
{ "massflix.com", true },
{ "massfone.com", true },
@@ -27361,6 +28444,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "masterdemolitioninc.com", true },
{ "masterdigitale.com", true },
{ "masterhelenaroma.com", true },
+ { "mastermindcesar.com", true },
{ "masterofallscience.com", true },
{ "masterofbytes.ch", true },
{ "masterpassword.org", true },
@@ -27370,9 +28454,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mastersadistancia.com", true },
{ "mastersthesiswriting.com", true },
{ "masterstuff.de", true },
+ { "masterton.com.au", true },
{ "mastodon.at", true },
{ "mastodon.host", true },
{ "mastodon.top", true },
+ { "mastodon.uno", true },
{ "mat.tt", true },
{ "matanz.de", true },
{ "matatabimix.com", true },
@@ -27381,7 +28467,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "matcha-iga.jp", true },
{ "matchatea24.com", true },
{ "matchboxdesigngroup.com", true },
+ { "matchlessdentist.com", true },
{ "matchmadeinstubton.com", true },
+ { "matchpointusa.com", true },
{ "matdogs.com", true },
{ "mateiko.by", true },
{ "matejgroma.com", true },
@@ -27394,11 +28482,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "materialism.com", true },
{ "materialyinzynierskie.pl", true },
{ "maternalsafety.org", true },
+ { "maternum.com", true },
{ "matex-tokyo.co.jp", true },
{ "math-coaching.com", true },
{ "math-colleges.com", true },
{ "math.hamburg", true },
- { "mathalexservice.info", true },
+ { "mathe.top", true },
{ "mathematik.rocks", false },
{ "matheo-schefczyk.de", true },
{ "mathes.berlin", true },
@@ -27412,6 +28501,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mathis.com.tr", true },
{ "maths.network", true },
{ "mathspace.co", true },
+ { "mathys.io", true },
{ "matijakolaric.com", true },
{ "matildajaneclothing.com", true },
{ "matipl.pl", true },
@@ -27436,6 +28526,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "matt-royal.gr", true },
{ "matt.gd", true },
{ "matt.re", true },
+ { "mattadams.info", true },
{ "mattandyana.com", true },
{ "mattari-app.com", true },
{ "mattatoio.eu", true },
@@ -27447,15 +28538,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "matteobrenci.com", true },
{ "matteomarescotti.it", true },
{ "mattersource.com", true },
- { "mattessons.co.uk", true },
{ "mattferderer.com", true },
{ "mattfin.ch", true },
{ "mattforster.ca", true },
{ "matthecat.com", true },
{ "matthew-cash.com", true },
{ "matthewfells.com", true },
- { "matthewgallagher.co.uk", true },
- { "matthewgrow.com", true },
{ "matthewj.ca", true },
{ "matthewkenny.co.uk", true },
{ "matthewljiang.com", true },
@@ -27467,7 +28555,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "matthi3u.xyz", true },
{ "matthias-muenzner.de", true },
{ "matthiasbeck.com", true },
- { "matthiasheil.de", true },
{ "matthiasott.com", true },
{ "matthiasschwab.de", true },
{ "matthieuschlosser.fr", true },
@@ -27491,10 +28578,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mauracher.cc", true },
{ "mauran.me", true },
{ "maureencsmith.ca", true },
+ { "maurice-walker.com", false },
{ "mauricedb.nl", true },
{ "mauricioquadradoconsultor.com.br", true },
{ "mauricioquadradocontador.com.br", true },
- { "mauricioquadradofotografia.com.br", true },
{ "maurovacca.com", true },
{ "maury-moteurs.com", true },
{ "mavenclinic.com", true },
@@ -27509,6 +28596,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mavotax.at", true },
{ "mavotax.de", true },
{ "mawo.olkusz.pl", true },
+ { "mawrex.tech", true },
{ "max-moeglich.de", true },
{ "max-went.pl", true },
{ "max.gov", true },
@@ -27527,6 +28615,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maximilian-staedtler.de", true },
{ "maximiliankaul.de", true },
{ "maximiliankrieg.de", true },
+ { "maximind.sg", true },
{ "maxims-travel.com", true },
{ "maxinesbydennees.com", true },
{ "maxipcalls.com", true },
@@ -27547,12 +28636,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "maxwaellenergie.de", true },
{ "maxwell-english.co.jp", false },
{ "maxwellmoore.co.uk", true },
+ { "may24.tw", true },
{ "mayaimplant.com", true },
{ "mayavi.co.in", true },
{ "mayhutmuibep.com", true },
{ "mayomarquees.com", true },
{ "mayopartyhire.com", true },
{ "mayorcahill.com", true },
+ { "mayper.net", true },
{ "maypolevilla.co.uk", true },
{ "mayrhofer.eu.org", false },
{ "mazda-mps.de", true },
@@ -27564,7 +28655,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mazenjobs.com", true },
{ "mazepa.ml", true },
{ "mazi.io", true },
- { "mazurlabs.tk", true },
{ "mazzotta.me", true },
{ "mb-is.info", true },
{ "mb-server.de", true },
@@ -27589,6 +28679,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mbsec.net", true },
{ "mbsr-barmstedt.de", true },
{ "mburaks.com", true },
+ { "mburns.duckdns.org", true },
{ "mbwis.net", true },
{ "mc-jobs.net", true },
{ "mc-ruempel-firmen-und-haushaltsaufloesungen.de", true },
@@ -27620,7 +28711,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mcgaccountancy.co.uk", true },
{ "mcgovernance.com", true },
{ "mchel.net", true },
- { "mchopkins.net", true },
{ "mchost.no", true },
{ "mchristopher.com", true },
{ "mcinterface.de", true },
@@ -27656,8 +28746,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mcyukon.com", true },
{ "mczo.net", true },
{ "md-clinica.com.ua", true },
+ { "md19lc8.com", true },
+ { "md21lc8.com", true },
+ { "md24lc8.com", true },
+ { "md33lc8.com", true },
{ "md5file.com", true },
{ "md5hashing.net", true },
+ { "mdcloudps.com", true },
{ "mdek.at", true },
{ "mdewendt.de", true },
{ "mdf-bis.com", true },
@@ -27678,8 +28773,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mdxdave.de", true },
{ "mdxn.org", true },
{ "mdzservers.com", true },
- { "me-center.com", true },
- { "me-groups.com", true },
{ "me-soft.nl", true },
{ "me.net.nz", true },
{ "meadowfen.farm", true },
@@ -27692,6 +28785,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "measureyourpenis.today", true },
{ "meat.org.uk", true },
{ "mebaneattorney.com", true },
+ { "mebanesteakhouse.com", true },
{ "mec010.com", true },
{ "mec020.com", true },
{ "mec021.com", true },
@@ -27788,89 +28882,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mec0513.com", true },
{ "mec0514.com", true },
{ "mec0515.com", true },
- { "mec0516.com", true },
- { "mec0517.com", true },
- { "mec0518.com", true },
- { "mec0519.com", true },
- { "mec0523.com", true },
- { "mec0530.com", true },
- { "mec0531.com", true },
- { "mec0532.com", true },
- { "mec0533.com", true },
- { "mec0534.com", true },
- { "mec0535.com", true },
- { "mec0536.com", true },
- { "mec0537.com", true },
- { "mec0538.com", true },
- { "mec0539.com", true },
- { "mec0550.com", true },
- { "mec0551.com", true },
- { "mec0552.com", true },
- { "mec0553.com", true },
- { "mec0554.com", true },
- { "mec0555.com", true },
- { "mec0556.com", true },
- { "mec0557.com", true },
- { "mec0558.com", true },
- { "mec0559.com", true },
- { "mec0561.com", true },
- { "mec0562.com", true },
- { "mec0563.com", true },
- { "mec0564.com", true },
- { "mec0565.com", true },
- { "mec0566.com", true },
- { "mec0570.com", true },
- { "mec0571.com", true },
- { "mec0572.com", true },
- { "mec0573.com", true },
- { "mec0574.com", true },
- { "mec0575.com", true },
- { "mec0576.com", true },
- { "mec0577.com", true },
- { "mec0578.com", true },
- { "mec0579.com", true },
- { "mec0580.com", true },
- { "mec0591.com", true },
- { "mec0592.com", true },
- { "mec0593.com", true },
- { "mec0594.com", true },
- { "mec0595.com", true },
- { "mec0596.com", true },
- { "mec0597.com", true },
- { "mec0598.com", true },
- { "mec0599.com", true },
- { "mec0660.com", true },
- { "mec0661.com", true },
- { "mec0662.com", true },
- { "mec0663.com", true },
- { "mec0691.com", true },
- { "mec0692.com", true },
- { "mec0701.com", true },
- { "mec0710.com", true },
- { "mec0711.com", true },
- { "mec0712.com", true },
- { "mec0713.com", true },
- { "mec0714.com", true },
- { "mec0715.com", true },
- { "mec0716.com", true },
- { "mec0717.com", true },
- { "mec0718.com", true },
- { "mec0719.com", true },
- { "mec0722.com", true },
- { "mec0724.com", true },
- { "mec0728.com", true },
- { "mec0730.com", true },
- { "mec0731.com", true },
- { "mec0732.com", true },
- { "mec0733.com", true },
- { "mec0734.com", true },
- { "mec0735.com", true },
- { "mec0736.com", true },
- { "mec0737.com", true },
- { "mec0738.com", true },
- { "mec0739.com", true },
- { "mec0743.com", true },
- { "mec0744.com", true },
{ "mec0745.com", true },
{ "mec0746.com", true },
{ "mec0751.com", true },
@@ -28036,13 +29047,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "medellinapartamentos.com", true },
{ "medexpress.co.uk", true },
{ "medguide-bg.com", true },
- { "medhy.fr", true },
{ "medi.com.br", true },
{ "media-credit.eu", true },
{ "media-instance.ru", true },
{ "media-library.co.uk", true },
{ "media-pi.com", true },
{ "media-serwis.com", true },
+ { "media101.xyz", true },
{ "mediaarea.net", true },
{ "mediabackoffice.co.jp", true },
{ "mediablaster.com", true },
@@ -28061,6 +29072,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mediajurnal.com", true },
{ "medialab.nrw", true },
{ "medialys.ca", true },
+ { "mediamaklumat.com", true },
{ "mediamarkt.pl", true },
{ "mediapart.fr", true },
{ "mediapath.gr", true },
@@ -28068,6 +29080,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mediarithmics.io", true },
{ "mediaselection.eu", true },
{ "mediathekview.de", true },
+ { "mediation-mv.de", true },
{ "mediationculturelleclp.ch", true },
{ "mediatorzy.waw.pl", true },
{ "mediaukkies.nl", true },
@@ -28089,11 +29102,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mediciventures.com", true },
{ "medicm.jp", true },
{ "medicocompetente.it", true },
+ { "medicoleads.com", true },
{ "medicoresponde.com.br", true },
{ "medicsz.co", true },
{ "medienweite.de", true },
{ "medifi.com", true },
{ "medigap-quote.net", true },
+ { "medik8.com.cy", true },
{ "medikalakademi.com.tr", true },
{ "medikuma.com", true },
{ "medino.com", true },
@@ -28153,10 +29168,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "medvezhii-ozera.ru", true },
{ "medwaybouncycastlehire.co.uk", true },
{ "medyotan.ga", true },
- { "medzinenews.com", false },
{ "meeco.kr", true },
{ "meedoenhartvanwestbrabant.nl", true },
- { "meehle.com", true },
{ "meeplegamers.com", true },
{ "meereskunst.de", true },
{ "meerman.nl", true },
@@ -28171,6 +29184,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "meetingmanage.nl", true },
{ "meetingmanager.ovh", true },
{ "meetings2.com", true },
+ { "meetmibaby.co.uk", true },
{ "meetmygoods.com", true },
{ "meetscompany.jp", true },
{ "meeusen-usedcars.be", true },
@@ -28194,17 +29208,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "megaplan.cz", true },
{ "megaplan.ru", true },
{ "megarex.jp", true },
- { "megauction.tk", true },
{ "megawarez.org", true },
{ "megaxchange.com", true },
{ "megaxchange.org", true },
{ "meggidesign.com", true },
- { "mego.cloud", true },
+ { "megh.biz", true },
+ { "megh.tv", true },
+ { "meginajums1.space", true },
{ "megumico.net", true },
{ "megztosidejos.lt", true },
{ "meh.is", true },
{ "mehalick.com", true },
- { "mehhh.xyz", true },
{ "mehmetdursun.av.tr", true },
{ "mehmetince.net", true },
{ "mehostdd.com", false },
@@ -28219,7 +29233,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "meillard-auto-ecole.ch", true },
{ "meilleur.info", true },
{ "meilleurstrucs.com", true },
- { "mein-gehalt.at", true },
+ { "meimeistartup.com", true },
+ { "mein-einszueins.de", true },
{ "mein-kuechenhelfer.de", true },
{ "mein-muehlhausen.bayern", true },
{ "mein-webportal.de", true },
@@ -28243,6 +29258,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "meistertask.com", true },
{ "meitan.gz.cn", true },
{ "meizitang.es", true },
+ { "mekatro.tech", true },
+ { "mekatrotekno.com", true },
{ "mekesh.com", true },
{ "mekesh.net", true },
{ "mekesh.ru", true },
@@ -28288,7 +29305,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "memememememememe.me", true },
{ "memes.nz", true },
{ "memesbee.com", true },
- { "memfrob.org", true },
{ "memiux.com", true },
{ "memmertusa.com", true },
{ "memo-linux.com", true },
@@ -28303,9 +29319,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mendipbouncycastles.co.uk", true },
{ "mendozagenevieve.com", true },
{ "mendy.jp", true },
- { "mengxin.life", true },
+ { "menh.vn", true },
{ "menielias.com", true },
- { "menkyo-blog.com", true },
{ "mennace.com", true },
{ "menno.me", true },
{ "menole.com", true },
@@ -28322,14 +29337,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mentaltraining-fuer-musiker.ch", true },
{ "mentecuriosa.net", true },
{ "mentiq.az", true },
- { "menudieta.com", true },
{ "menuonlineordering.com", true },
{ "menzietti.it", true },
{ "meo.de", true },
+ { "meow.plus", true },
{ "mephedrone.org", true },
{ "meps.net", true },
{ "mer.gd", true },
{ "merakilp.com", true },
+ { "meralda.eu", true },
+ { "meralda.net", true },
+ { "meralda.org", true },
+ { "meraldamulder.com", true },
+ { "meraldamulder.eu", true },
+ { "meraldamulder.net", true },
+ { "meraldamulder.org", true },
{ "meransuedtirol.com", true },
{ "meraseo.com", true },
{ "mercadeolocal.com.ar", true },
@@ -28337,6 +29359,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mercadopago.com", true },
{ "mercamaris.es", true },
{ "mercari.com", true },
+ { "mercedes-benz-kiev.com", true },
{ "mercedes-benz.io", true },
{ "mercedes-ig.de", true },
{ "mercedespartscenter.com", true },
@@ -28366,12 +29389,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "merojob.com", true },
{ "meronberry.jp", true },
{ "merpay.com", true },
- { "mers.one", true },
- { "merson.org", true },
{ "merson.tv", true },
{ "mertarauh.com", true },
{ "mertcangokgoz.com", true },
{ "meruri.com", true },
+ { "merza.is", true },
{ "merzai.co.uk", true },
{ "mes-bouquins.fr", true },
{ "mes-finances.be", true },
@@ -28389,7 +29411,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "messagevortex.com", true },
{ "messagevortex.net", true },
{ "messdorferfeld.de", true },
- { "messenger.com", false },
+ { "messenger.co.tz", true },
+ { "messenger.com", true },
{ "messengerwebbrands.com", true },
{ "messer24.ch", true },
{ "messymom.com", true },
@@ -28423,7 +29446,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "metebalci.com", false },
{ "meteenonline.nl", true },
{ "meteo-parc.com", true },
- { "meteo-r.ovh", true },
{ "meteobox.co", true },
{ "meteobox.cz", true },
{ "meteobox.de", true },
@@ -28440,6 +29462,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "meter.md", true },
{ "meterhost.com", true },
{ "methamphetamine.co.uk", true },
+ { "method.com", true },
{ "methylone.com", true },
{ "metric.ai", true },
{ "metricmutt.com", true },
@@ -28456,6 +29479,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "metronews.co.nz", true },
{ "metropolisil.gov", true },
{ "metropop.ch", true },
+ { "metrorealestatepros.com", true },
{ "metsasta.com", true },
{ "mettekopp.dk", true },
{ "meubanco7.com.br", true },
@@ -28467,15 +29491,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mevs.cz", true },
{ "mexican.dating", true },
{ "mexicanjokes.net", true },
+ { "mexico.rs", true },
{ "mexico.sh", true },
{ "mexicom.org", true },
{ "meyash.co", true },
+ { "meys.io", true },
{ "mezzehuis.be", true },
{ "mf-fischer.de", true },
{ "mfen.de", true },
{ "mfits.co.uk", true },
{ "mflodin.se", true },
+ { "mfsquad.com", true },
{ "mfxbe.de", true },
+ { "mgcraft.net", true },
{ "mgdigitalmarketing.com.au", true },
{ "mghw.ch", true },
{ "mgi.gov", true },
@@ -28496,6 +29524,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mhf.gc.ca", true },
{ "mhi.web.id", true },
{ "mhjuma.com", true },
+ { "mhonline.fr", true },
{ "mhtdesign.net", true },
{ "mhurologytriad.org", true },
{ "mi-beratung.de", true },
@@ -28507,11 +29536,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "miagexport.com", true },
{ "miah.top", true },
{ "mialquilerdecoches.com", true },
- { "miamaibaum.com", true },
{ "miaololi.com", true },
{ "miaomiao.eu.org", true },
{ "miaomiaomiao.live", true },
- { "miaonagemi.com", true },
{ "miaowo.org", true },
{ "miavierra.org", true },
{ "mibh.de", true },
@@ -28521,6 +29548,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "micbase.com", true },
{ "michadenheijer.com", true },
{ "michael-schefczyk.de", true },
+ { "michael-schilling.de", true },
{ "michael-steinhauer.eu", true },
{ "michael.band", true },
{ "michaelasawyer.com", true },
@@ -28528,10 +29556,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "michaelband.com", true },
{ "michaelcullen.name", true },
{ "michaelhrehor.com", true },
+ { "michaeliscorp.com", true },
{ "michaelismold.com", true },
{ "michaelizquierdo.com", true },
{ "michaeljdennis.com", true },
- { "michaelklos.nl", true },
{ "michaelkuchta.me", true },
{ "michaell.io", true },
{ "michaell.xyz", true },
@@ -28553,6 +29581,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "michal-spacek.cz", true },
{ "michaldudek.it", true },
{ "michalklabnik.cz", true },
+ { "michalpodraza.pl", true },
{ "michalspacek.com", true },
{ "michalspacek.cz", true },
{ "michalwiglasz.cz", true },
@@ -28568,6 +29597,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "michmexguides.com.mx", true },
{ "michu.pl", true },
{ "mickelvaessen.com", true },
+ { "mickgrimesgamingpodcast.co.uk", true },
{ "miconcinemas.com", true },
{ "micopal.com", true },
{ "micr.io", true },
@@ -28610,7 +29640,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "midnightmango.co.uk", true },
{ "midnightmango.de", true },
{ "midnightmechanism.com", true },
- { "midrandplumber24-7.co.za", true },
{ "midress.club", true },
{ "midstatebasement.com", true },
{ "midt.io", true },
@@ -28626,6 +29655,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mierloiu.ro", true },
{ "mietwohnungen-vermietung.com", true },
{ "mieuxgrandir.ch", true },
+ { "mifarmaciaenbarcelona.com", true },
{ "miffy.me", true },
{ "mig5.net", true },
{ "miggy.org", true },
@@ -28633,6 +29663,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "miguel.pw", true },
{ "migueldemoura.com", true },
{ "miguelgaton.es", true },
+ { "miguelkertsman.com", true },
{ "miguelmenendez.pro", true },
{ "miguelmoura.com", true },
{ "miguia.tv", true },
@@ -28642,7 +29673,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mijcorijneveld.nl", true },
{ "mijn-financien.be", true },
{ "mijn.computer", true },
- { "mijnetz.nl", true },
+ { "mijnetz.nl", false },
{ "mijnkerstkaarten.be", true },
{ "mijnkinderkleding.com", true },
{ "mijnpartijhandel.nl", true },
@@ -28652,17 +29683,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mijntransacties.nl", true },
{ "mika.moe", true },
{ "mikadoe.nl", true },
+ { "mikaeljansson.net", true },
{ "mikakalathil.ca", true },
{ "mikakalevi.com", true },
{ "mikalikes.men", true },
{ "mike-bland.com", true },
{ "mike-burns.com", true },
+ { "mike-estela.com", true },
{ "mike-et-pascale-sanger.com", true },
{ "mike2k.de", true },
{ "mikeandersondj.com", true },
{ "mikebelanger.ca", true },
{ "mikeblog.site", true },
{ "mikebutcher.ca", true },
+ { "mikecameronyyc.com", true },
{ "mikecapson.com", true },
{ "mikecb.org", true },
{ "mikegao.net", false },
@@ -28686,15 +29720,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "miki.it", true },
{ "mikkelladegaard.dk", true },
{ "mikkelscheike.com", true },
- { "mikkelvej.dk", true },
{ "mikkonen.bio", true },
{ "miklcct.com", true },
{ "miknight.com", true },
{ "mikonmaa.fi", true },
{ "mikropixel.de", true },
{ "mikroskeem.eu", true },
- { "miku.ro", true },
{ "mikumaycry.com", true },
+ { "mikupic.com", true },
{ "mil-spec.ch", true },
{ "milahendri.com", true },
{ "milania.de", true },
@@ -28751,12 +29784,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mindatasupport.se", true },
{ "mindatorsupport.se", true },
{ "mindcoding.ro", true },
- { "mindfactory.de", true },
{ "mindhunter.info", true },
{ "mindleaking.org", true },
{ "mindmax.fi", true },
{ "mindmeister.com", true },
- { "mindofmedia.dk", true },
{ "mindoktor.se", false },
{ "mindorbs.com", true },
{ "mindox.com.br", true },
@@ -28775,11 +29806,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "minehattan.de", true },
{ "minehub.de", true },
{ "minei.me", true },
- { "minenash.com", true },
{ "minepack.net", true },
{ "minepay.net", true },
{ "minepic.org", true },
- { "minepod.fr", true },
{ "minerstat.com", true },
{ "minerva2015.it", true },
{ "minesouls.fr", true },
@@ -28794,6 +29823,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mingwah.ch", true },
{ "minh.at", false },
{ "minhyukpark.com", true },
+ { "mini-piraten.de", true },
{ "mini2.fi", true },
{ "miniaturepets.net", true },
{ "minican.net", true },
@@ -28835,8 +29865,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mionerve.com", true },
{ "mionerve.org", true },
{ "mipapo.de", true },
+ { "mipnet.cl", true },
{ "miproximopaso.org", true },
- { "mipueblohoy.com", true },
{ "mipymesenlinea.com", true },
{ "mir.pe", true },
{ "mirabalphoto.es", true },
@@ -28848,7 +29878,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mirazperu.com", true },
{ "mircarfinder.ru", true },
{ "mirch.com", true },
- { "mirco-grams.de", true },
{ "mireiaseuba.com", true },
{ "mirepublic.co.nz", true },
{ "mireservaonline.es", true },
@@ -28857,6 +29886,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mirkofranz.de", true },
{ "miroctum.com", true },
{ "mironet.cz", true },
+ { "miroslavbaka.cz", true },
{ "mirrordream.net", true },
{ "mirrorsedgearchive.de", true },
{ "mirshak.com", true },
@@ -28884,13 +29914,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "missdream.org", true },
{ "misseguf.dk", true },
{ "missevent.pl", true },
+ { "missfuli.com", true },
{ "missguidedus.com", true },
{ "mission-orange.de", true },
{ "missionsgemeinde.de", true },
{ "missip.nl", true },
+ { "missivystorm.com", true },
{ "missjoias.com.br", true },
{ "misskey.jp", true },
- { "misskey.xyz", true },
{ "missoy.me", true },
{ "misssex.de", true },
{ "missualready.com", true },
@@ -28899,27 +29930,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mistaken.pl", true },
{ "mister-matthew.de", true },
{ "misterseguros.com.br", true },
- { "mistinecn.com", true },
+ { "mistine.net", true },
{ "mistreaded.com", true },
{ "mistybox.com", true },
{ "misupport.dk", true },
- { "misura.re", true },
{ "misuzu.moe", true },
{ "misxvenelantro.com", true },
{ "mit-dem-rad-zur-arbeit.de", true },
{ "mit-dem-rad-zur-uni.de", true },
- { "mit-uns.org", true },
+ { "mita.me", true },
{ "mitaines.ch", true },
{ "mitarbeitermotivation-anleitungen.de", true },
{ "mitchellhandymanservices.co.uk", true },
{ "mitchelmore.ca", true },
{ "mitdip-mit-group-ch.azurewebsites.net", true },
+ { "mitevi.com", true },
{ "miticobikes.com", true },
{ "mitigationcommission.gov", true },
{ "mitnetz-gas.de", true },
{ "mitnetz-strom.de", true },
{ "mitrax.com.br", true },
- { "mitre10.com.au", true },
+ { "mitre10.com.au", false },
{ "mitrecaasd.org", true },
{ "mitremai.org", true },
{ "mitrostudios.com", true },
@@ -28933,7 +29964,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mitylite.com", true },
{ "mitzpettel.com", true },
{ "miui-germany.de", true },
- { "mivestuariolaboral.com", true },
{ "mivzak.im", true },
{ "mivzakim.biz", true },
{ "mivzakim.cf", true },
@@ -28954,8 +29984,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mixrepairs.co.uk", true },
{ "mixtafrica.com", true },
{ "mixx.com.hk", true },
+ { "miyatakaikei.com", true },
{ "miyatore.com", true },
- { "miyoshi-kikaku.com", false },
{ "miyugirls.com", true },
{ "mizar.im", true },
{ "mizipack.com", true },
@@ -28994,6 +30024,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mkinteriores.com.br", true },
{ "mkjl.ml", true },
{ "mkk.de", true },
+ { "mklenterprises.com", true },
+ { "mklenterprisesacademy.com", true },
+ { "mklenterprisescoaching.com", true },
{ "mklpedia.de", true },
{ "mkoppmann.at", true },
{ "mkpef.org", true },
@@ -29006,18 +30039,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mktenlared.com", true },
{ "mkuznets.com", true },
{ "mkw.st", true },
+ { "mladamoda.sk", true },
{ "mlan-server.de", true },
{ "mlcnfriends.com", true },
- { "mlemay.com", true },
{ "mlmjam.com", true },
{ "mlp.ee", true },
{ "mlpvector.club", true },
- { "mlsha.cn", true },
{ "mlundberg.se", true },
- { "mlvbphotography.com", true },
{ "mlytics.com", true },
{ "mm-wife.com", true },
{ "mm13.at", true },
+ { "mm404.com", true },
{ "mm5197.co", true },
{ "mm6729.co", true },
{ "mm6729.com", true },
@@ -29029,12 +30061,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mmalisz.com", true },
{ "mmaps.org", true },
{ "mmbb.org", true },
+ { "mmcc.pe", true },
{ "mmgal.com", true },
- { "mmin.us", false },
{ "mmmarco.com", true },
{ "mmmm.mn", true },
{ "mmogah.com", true },
{ "mmonit.com", true },
+ { "mmpaymentsystem.com", true },
{ "mmprojects.nl", true },
{ "mms.is", true },
{ "mmsmotor.com.hk", true },
@@ -29066,7 +30099,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moabygg.se", true },
{ "moahmo.com", true },
{ "moarcookies.com", true },
- { "mobag.ru", true },
{ "mobal.com", true },
{ "mobasuite.com", true },
{ "mobi2go.com", true },
@@ -29103,7 +30135,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mobycoders.com", true },
{ "mobydog.net", true },
{ "moc.ac", true },
- { "mochanstore.com", false },
{ "mochizuki.moe", true },
{ "mockerel.com", true },
{ "mocking-bird.org", true },
@@ -29119,6 +30150,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moddiy.com", true },
{ "mode-hautnah.de", true },
{ "mode-individuell.de", true },
+ { "model.earth", true },
{ "modelclub-draveil.eu", true },
{ "modelcube.com", true },
{ "modelemax.pl", true },
@@ -29131,7 +30163,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "modeportaal.nl", true },
{ "moderatoren.org", true },
{ "modern-family.tv", true },
- { "moderncoinmart.com", true },
+ { "modernapprenticeships.org", true },
+ { "moderncoinmart.com", false },
{ "moderncommercialrealestate.com", true },
{ "modifiedmind.com", true },
{ "modistry.com", true },
@@ -29139,14 +30172,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "modonor.dk", true },
{ "modosaude.com.br", true },
{ "modscrew.com", true },
- { "modul21.com", true },
{ "modul21.eu", true },
+ { "modul8infinity.co", true },
{ "module.market", true },
{ "modulex-gmbh.de", true },
- { "moduloseltaladro.com", true },
{ "modusawperandi.com", true },
{ "moe-max.jp", true },
- { "moe.best", true },
{ "moebel-vergleichen.com", true },
{ "moechel.com", true },
{ "moecraft.net", true },
@@ -29167,6 +30198,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mohanmekap.com", true },
{ "mohela.com", true },
{ "mohitchahal.com", true },
+ { "mohot.com", true },
+ { "mohot.fit", true },
{ "mohr-maschinenservice.de", true },
{ "moin.jp", true },
{ "moipourtoit.ch", true },
@@ -29182,7 +30215,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mojizuri.com", true },
{ "mojkragujevac.net", true },
{ "mojoco.co.za", true },
- { "mojomusic.org", true },
{ "mojt.net", true },
{ "mojzis.com", true },
{ "mojzis.cz", true },
@@ -29191,7 +30223,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mokhtarmial.com", false },
{ "moki.org.pl", true },
{ "molb.org", true },
- { "mold.world", true },
{ "molecularbiosystems.org", true },
{ "moleskinestudio.com", true },
{ "molinero.xyz", true },
@@ -29207,10 +30238,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "momentum.photos", true },
{ "momentumdash.com", true },
{ "momirfarooq.com", true },
- { "momjoyas.com", true },
{ "momo0v0.club", true },
+ { "momobako.com", true },
{ "momove.nl", true },
{ "momozeit.de", true },
+ { "momsays.co.za", true },
{ "momstableonline.com", true },
{ "momut.org", true },
{ "momy-genealogie.info", true },
@@ -29231,7 +30263,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mondedie.fr", true },
{ "mondial-movers.nl", true },
{ "mondo-it.ch", true },
- { "monelephantapois.com", true },
+ { "mondonet.org", true },
+ { "mondzorgaanzee.nl", true },
{ "moneni.com", true },
{ "monerogamez.com", true },
{ "monetki.net", true },
@@ -29249,6 +30282,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moniquedekermadec.com", true },
{ "moniquemunhoz.com.br", true },
{ "monitman.com", true },
+ { "monitorbox.jp", true },
{ "monitoring.kalisz.pl", true },
{ "monitzer.com", true },
{ "monix.io", true },
@@ -29267,7 +30301,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "monolithapps.com", true },
{ "monolithindustries.com", true },
{ "monolithinteractive.com", true },
- { "mononom.com", true },
{ "monopoly-one.com", true },
{ "monospazzole.roma.it", true },
{ "monothesis.com", true },
@@ -29291,13 +30324,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "montanwerk.de", true },
{ "montarfotoaki.com", true },
{ "montas.io", true },
- { "montazer.net", true },
{ "montemanik.com", true },
{ "montessori.edu.vn", true },
{ "montgomeryfirm.com", true },
- { "montgomerysoccer.net", true },
{ "montopolis.com", true },
{ "montpreveyres.ch", true },
+ { "montrealcatadoptions.com", true },
{ "montredeal.fr", true },
{ "montsaintaignan.fr", true },
{ "montychristie.com", true },
@@ -29319,6 +30351,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moonmelo.com", true },
{ "moonraptor.co.uk", false },
{ "moonraptor.com", false },
+ { "moonrhythm.io", true },
{ "moonshyne.org", true },
{ "moontaj.com", true },
{ "moonue.com", true },
@@ -29333,14 +30366,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moorparkoutdoorlighting.com", true },
{ "mooselook.de", true },
{ "moosmann-moehrle.de", true },
+ { "moosmaus.tk", true },
{ "moot-info.co.za", true },
{ "moovablestorage.com", true },
+ { "moow.info", true },
+ { "moowcraft.eu", true },
+ { "moowdesign.eu", true },
{ "moparcraft.net", true },
{ "moparisthebest.com", true },
{ "moparisthebest.net", true },
{ "moparisthebest.org", true },
{ "moparscape.net", true },
- { "mopedpress.com", true },
{ "mopedreifen.de", false },
{ "mopie.de", true },
{ "mople71.cz", true },
@@ -29363,7 +30399,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moreniche.com", true },
{ "morepablo.com", true },
{ "morepay.cn", true },
- { "moreserviceleads.com", true },
{ "moresw.com", true },
{ "morethanautodealers.com", true },
{ "morethancode.be", true },
@@ -29379,6 +30414,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mormonleaks.io", true },
{ "morningcurve.com", true },
{ "morningstar.moe", true },
+ { "moroccomiami.com", true },
+ { "morox.top", true },
{ "morris.computer", true },
{ "morrisby.com", true },
{ "morteruelo.net", true },
@@ -29398,7 +30435,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "moskeedieren.nl", true },
{ "mosquitojoe.com", true },
{ "mosscade.com", true },
- { "mostcomfortableworkboots.net", true },
{ "motd.ch", true },
{ "motd.today", true },
{ "motekforce.link", true },
@@ -29408,6 +30444,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "motekmedical.com", true },
{ "motekmedical.eu", true },
{ "motekmedical.nl", true },
+ { "motekrysen.com", true },
{ "moteksystems.com", true },
{ "motezazer.fr", true },
{ "mothereff.in", false },
@@ -29435,10 +30472,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "motorsplus.com", false },
{ "motorsportdiesel.com", true },
{ "motoryachtclub-radolfzell.de", true },
+ { "motorzone.od.ua", true },
{ "motosikletevi.com", true },
{ "motospaya.com", true },
{ "motostorie.blog", true },
{ "mototax.ch", true },
+ { "motovated.co.nz", false },
{ "motovio.de", true },
{ "motowilliams.com", true },
{ "motransportinfo.com", true },
@@ -29451,29 +30490,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mountainbatchers.de", true },
{ "mountainchalet.blue", true },
{ "mountainspringsrentals.ca", true },
+ { "mousemade.art", true },
{ "mousepotato.uk", true },
{ "moutiezhaller.com", true },
{ "movacare.de", true },
{ "move.mil", true },
{ "moveltix.net", true },
{ "movember.com", false },
+ { "movementdanceacademy.it", true },
{ "movewellapp.com", true },
{ "movewellnesslab.com", true },
{ "movfun.ga", true },
{ "movie-infos.net", true },
{ "movie1000.com", true },
- { "movie4kto.site", true },
{ "movie4kto.stream", true },
{ "moviefreeze.com", true },
{ "movieguys.org", true },
{ "moviesetc.net", true },
{ "moviko.nz", true },
{ "movil.uno", true },
+ { "movilcelular.es", true },
{ "moviltronix.com", true },
{ "movimento-terra.it", true },
{ "movinglogistics.nl", false },
{ "movingtohttps.com", true },
- { "movingtojapan.life", true },
{ "movlib.org", true },
{ "moy.cat", true },
{ "moylen.eu", true },
@@ -29502,11 +30542,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mpu-beratungsstellen.com", true },
{ "mpu-ibbi.de", true },
{ "mpu-vorbereitung.com", true },
- { "mpublicidad.com", true },
{ "mr-anderson.org", true },
+ { "mr-bills.com", true },
{ "mr-wolf.nl", false },
{ "mralonas.ml", true },
{ "mrandmrsparrot.gr", true },
+ { "mrbmafrica.com", true },
{ "mrbounce.com", true },
{ "mrbouncescrazycastles.co.uk", true },
{ "mrbouncycastle.com", true },
@@ -29517,9 +30558,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mrd.ninja", true },
{ "mrdatenschutz.de", true },
{ "mrdayman.com", true },
+ { "mredsanders.net", true },
{ "mremallin.ca", true },
{ "mrevolution.eu", true },
- { "mrhc.ru", true },
{ "mrhee.com", true },
{ "mrhookupsd.com", true },
{ "mrichard333.com", true },
@@ -29543,6 +30584,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mrsbairds.com", false },
{ "mrschristine.com", true },
{ "mrserge.lv", true },
+ { "mrsheep.win", true },
+ { "mrsiding.net", true },
{ "mrsk.me", true },
{ "mrstat.co.uk", true },
{ "mrstuudio.ee", true },
@@ -29551,10 +30594,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mrv.li", true },
{ "mrx.one", false },
{ "mrxn.net", true },
- { "ms-a.at", true },
{ "ms-ch.ch", true },
{ "ms-host.fr", true },
{ "msa-aesch.ch", true },
+ { "msafiri.co", true },
{ "mscc.mu", true },
{ "mscc.org", true },
{ "msch.pw", true },
@@ -29572,10 +30615,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mssora.com", true },
{ "mssys.de", true },
{ "mstdn.blue", true },
- { "mstdn.club", true },
{ "mstdn.io", true },
{ "mstdn.onl", false },
- { "mstdn.vodka", false },
{ "msuna.net", true },
{ "msx.org", true },
{ "mszavodumiru.cz", true },
@@ -29590,7 +30631,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mtasa.com", true },
{ "mtasa.hu", true },
{ "mtauburnassociates.com", true },
- { "mtb.wtf", true },
+ { "mtcq.jp", true },
{ "mtd.org", true },
{ "mte.sk", true },
{ "mtechprecisioninc.com", true },
@@ -29603,6 +30644,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mthrbrd.net", true },
{ "mths.be", false },
{ "mticareportal.com", true },
+ { "mtinz.com", true },
{ "mtiryaki.com", true },
{ "mtjholding.ee", true },
{ "mtlconcerts.com", true },
@@ -29623,11 +30665,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "muckingabout.eu", true },
{ "muckrack.com", true },
{ "mucmail.de", true },
- { "muctool.de", true },
{ "mudanzasacuna.com.co", true },
{ "mudbenesov.cz", true },
{ "mudcrab.us", false },
{ "mudit.xyz", true },
+ { "mueblesemporium.com", true },
{ "muehlemann.net", true },
{ "muelhau.pt", true },
{ "muell-weg.de", true },
@@ -29654,6 +30696,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mulheres18.com", true },
{ "muling.lu", true },
{ "mulk.hopto.org", true },
+ { "mullen.net.au", true },
{ "mullens-usedcars.be", true },
{ "mullerimoveisrj.com.br", true },
{ "multi-vpn.biz", true },
@@ -29698,21 +30741,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mundokinderland.com.br", true },
{ "mundolarraz.es", true },
{ "mundomagicotv.com", true },
+ { "mundoperfecto.net", true },
{ "mundoperros.es", true },
{ "mundotortugas.com", true },
{ "mundschenk.at", true },
{ "mundtec.com.br", true },
{ "munduch.cz", true },
{ "munduch.eu", true },
+ { "munich-eventlocations.de", true },
{ "munki.org", true },
{ "munkibuilds.org", true },
+ { "muntproever.nl", true },
{ "munwr.com", true },
{ "muqu.co", true },
{ "mur-vegetal-interieur.fr", true },
{ "murakami-sah.com", true },
{ "murashun.jp", true },
+ { "muratatifsayar.com.tr", true },
{ "muratore-roma.it", true },
{ "murfy.nz", true },
+ { "murmashi.com", true },
+ { "murmashi.ru", true },
{ "murmel.it", false },
{ "murof.com.br", true },
{ "murray.xyz", true },
@@ -29738,10 +30787,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "musicalive.nl", true },
{ "musicall.com", true },
{ "musicalschwarzenburg.ch", true },
- { "musicalsoulfood.com", true },
{ "musicapara.net", true },
{ "musicasbr.com.br", true },
{ "musicchris.de", true },
+ { "musiccitycats.com", true },
{ "musicdemons.com", true },
{ "musicfromgod.com", true },
{ "musicgamegalaxy.de", true },
@@ -29759,6 +30808,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "musiktag2020.ch", true },
{ "musikverein-elten.de", true },
{ "musikzentrale.net", true },
+ { "musique2nuit.com", true },
{ "musketonhaken.nl", false },
{ "muslim.singles", true },
{ "musmann.io", true },
@@ -29768,7 +30818,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "musta.ch", true },
{ "mustafaturhan.com", false },
{ "mustard.co.uk", true },
- { "mustardking.me", true },
{ "mustasj.no", true },
{ "mustat.com", true },
{ "muster-folien.de", true },
@@ -29776,12 +30825,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mustertexte-musterbewerbung.de", true },
{ "musthavesforreal.com", true },
{ "muszic.co", true },
+ { "mutantmonkey.in", true },
+ { "mutantmonkey.info", true },
{ "muthai.in.th", true },
{ "mutuelle.fr", true },
{ "muunnin.net", true },
{ "muurlingoogzorg.nl", true },
{ "muwatenraqamy.org", true },
- { "muy.ooo", true },
{ "muz2u.ru", true },
{ "muzeumkomiksu.eu", true },
{ "muzhijy.com", true },
@@ -29790,6 +30840,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mv-schnuppertage.de", true },
{ "mvandek.nl", true },
{ "mvbits.com", true },
+ { "mvion.fr", true },
{ "mvisioncorp.com", true },
{ "mvistatic.com", true },
{ "mvno.io", true },
@@ -29812,6 +30863,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mx.org.ua", true },
{ "mx.search.yahoo.com", false },
{ "mx5international.com", true },
+ { "mxdanggui.org", true },
{ "mxdvl.com", true },
{ "mxihan.xyz", true },
{ "my-aftershave-store.co.uk", true },
@@ -29819,11 +30871,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "my-contract.ch", true },
{ "my-contract.info", true },
{ "my-contract.net", true },
+ { "my-dns.co.il", true },
{ "my-ebook.es", true },
{ "my-floor.com", true },
{ "my-gode.fr", true },
{ "my-host.ovh", true },
- { "my-hps.de", false },
+ { "my-hps.de", true },
{ "my-ip.work", true },
{ "my-new-bikini.de", true },
{ "my-nextcloud.at", true },
@@ -29857,21 +30910,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mybloggedlife.com", true },
{ "mybodylife.com", true },
{ "mybon.at", false },
- { "mybonfire.com", true },
{ "myboothang.com", true },
{ "mybus.ro", true },
{ "mybusiness.wien", true },
{ "mycaelis.fr", true },
{ "mycamshowhub.com", true },
{ "mycamshowhub.to", true },
- { "mycard.moe", true },
{ "mycareersfuture.sg", true },
{ "mycc.be", true },
{ "mycieokien.info", false },
{ "mycinema.pro", true },
{ "mycircleworks.com", true },
- { "myclasscam.com", true },
- { "myclasscam.org", true },
{ "myclgnotes.com", true },
{ "myclinicalstudybuddy.com", true },
{ "mycloud-system.com", true },
@@ -29880,7 +30929,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myconan.tk", true },
{ "myconf.com", true },
{ "myconf.uk", true },
- { "myconnect.cn", true },
{ "myconsulting.ch", true },
{ "mycookrecetas.com", true },
{ "mycoupons.com", true },
@@ -29917,12 +30965,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myeisenbahn.de", true },
{ "myessaygeek.com", true },
{ "myetherwallet.com", true },
+ { "myexams.nl", true },
{ "myf.cloud", true },
{ "myfae.eu", true },
{ "myfantasysportstalk.com", true },
{ "myfedloan.org", true },
{ "myfirenet.com", true },
- { "myfloridadeferredcomp.com", true },
{ "myforfaitmobile.com", true },
{ "myfreemp3.click", true },
{ "myfrenchtattoo.fr", true },
@@ -29940,11 +30988,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mygnmr.com", true },
{ "mygoldennetwork.com", true },
{ "mygreatlakes.org", true },
+ { "mygreenrecipes.com", true },
{ "mygretchen.de", true },
{ "mygrotto.org", true },
{ "mygymer.ch", true },
{ "myhatsuden.jp", true },
- { "myhealthreviews.com", true },
+ { "myhealthyday.com", true },
{ "myhmz.bid", true },
{ "myhollywoodnews.com", true },
{ "myhome-24.pl", true },
@@ -29965,8 +31014,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mylatestnews.org", true },
{ "mylawyer.be", true },
{ "myleanfactory.de", true },
- { "mylife360mag.com", true },
{ "mylifeabundant.com", true },
+ { "mylifeinsurancechoices.info", true },
{ "mylittlechat.ru", true },
{ "myliveupdates.com", true },
{ "myloan.hk", true },
@@ -29991,6 +31040,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mynameistavis.com", true },
{ "myndcoin.com", true },
{ "myndcoins.com", true },
+ { "mynewsspot.com", true },
{ "mynext.events", true },
{ "mynextmove.org", true },
{ "mynn.io", true },
@@ -30006,7 +31056,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myownconference.cloud", true },
{ "myownconference.com", true },
{ "myownconference.com.ua", true },
- { "myownconference.net", true },
{ "myownconference.pl", true },
{ "myownconference.ru", true },
{ "myowndisk.com", true },
@@ -30025,11 +31074,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mypillcard.com", true },
{ "mypizza-bremen.de", true },
{ "myplaceonline.com", true },
+ { "myplaystation.nl", true },
{ "mypnu.net", true },
{ "mypress.mx", true },
{ "myprintcard.de", true },
{ "myproblog.com", true },
+ { "mypromoshop.com.au", true },
{ "myprotime.eu", true },
+ { "mypt3.com", false },
+ { "myptsite.com", false },
{ "myrandomtips.com", true },
{ "myraytech.net", false },
{ "myrealestatemate.com.au", true },
@@ -30096,10 +31149,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myrotvorets.news", true },
{ "myrp.co", true },
{ "mysad.de", true },
+ { "mysam.net", true },
{ "mysber.ru", true },
{ "myschoolphoto.org", true },
{ "myseatime.com", true },
- { "mysecretcase.com", true },
{ "myself5.de", true },
{ "myservicearl.com", true },
{ "mysexydate24.com", true },
@@ -30110,6 +31163,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mysocrat.com", true },
{ "mysoundtalks.com", false },
{ "myspicer.com", true },
+ { "mysql-real-escape-string.xyz", true },
{ "mysqldump-secure.org", true },
{ "myssl.com", true },
{ "mystaffonline.com", true },
@@ -30117,6 +31171,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mysteriouscode.io", true },
{ "mysterydata.com", true },
{ "mysterymind.ch", true },
+ { "mysterysear.ch", true },
{ "mysteryshow.site", true },
{ "mystia.org", true },
{ "mystic-welten.de", true },
@@ -30157,6 +31212,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myvegan.menu", true },
{ "myvirtualserver.com", true },
{ "myvitalhealthsolutions.com.au", true },
+ { "myvpl.com", true },
{ "mywari.com", true },
{ "mywebpanel.eu", true },
{ "mywebpanel.nl", true },
@@ -30193,9 +31249,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "n-un.de", false },
{ "n0paste.tk", false },
{ "n0psled.nl", true },
- { "n26.com", true },
{ "n2diving.net", true },
{ "n2servers.com", true },
+ { "n3ro.io", true },
+ { "n3ro.net", true },
{ "n4v.eu", true },
{ "n5197.co", true },
{ "n6729.co", true },
@@ -30204,8 +31261,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "n6a.net", true },
{ "n7.education", true },
{ "n8ch.net", true },
- { "n8mgt.com", true },
- { "n8nvi.com", true },
{ "n8solutions.net", true },
{ "n8solutions.us", true },
{ "n8ta.com", true },
@@ -30218,10 +31273,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nabaleka.com", true },
{ "nabankco.com", true },
{ "nabbar.com", true },
+ { "naberiusmedia.com", true },
{ "nabidkamajetku.cz", true },
{ "nabidkydnes.cz", true },
{ "nabytek-valmo.cz", true },
- { "nac-6.fr", true },
{ "nacfit.com", true },
{ "nachsendeauftrag.net", true },
{ "nachsenden.info", true },
@@ -30241,14 +31296,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nadyaolcer.fr", true },
{ "nafod.net", true },
{ "naga-semi.com", true },
- { "naga.im", true },
{ "naganithin.me", true },
{ "nagashi.ma", false },
{ "nagaya.biz", true },
+ { "nagb.gov", true },
+ { "nagb.org", true },
{ "nagel-dentaltechnik.de", true },
{ "nagelfam.com", true },
{ "nah.nz", true },
{ "nah.re", true },
+ { "nahouw.net", true },
{ "nai-job.jp", true },
{ "naijaxnet.com.ng", true },
{ "nailattitude.ch", true },
@@ -30286,7 +31343,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nalexandru.xyz", true },
{ "nalsai.de", true },
{ "namaanakperempuan.net", true },
- { "namaleaks.com", false },
{ "namalelaki.com", true },
{ "namaperempuan.com", true },
{ "namazvakitleri.com.tr", true },
@@ -30308,7 +31364,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "namu.news", true },
{ "namu.wiki", true },
{ "namus.gov", true },
- { "nan.ci", true },
+ { "nan.ci", false },
{ "nan.ge", true },
{ "nan0.cloud", true },
{ "nanarose.ch", true },
@@ -30325,10 +31381,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nanopixel.ch", true },
{ "nanotechnologist.com", true },
{ "nanotechnologysolutions.com.au", true },
- { "nanotechtorsion.com", true },
{ "nanowallet.io", true },
{ "nanpuyue.com", true },
{ "nansa.ch", true },
+ { "nanshy.com", false },
{ "nanubo.com", true },
{ "nanubo.de", true },
{ "naomi.es", false },
@@ -30350,13 +31406,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "naralogics.com", true },
{ "narardetval.se", true },
{ "narazaka.net", true },
+ { "narenderchopra.com", true },
{ "narfation.org", true },
{ "nargele.eu", true },
{ "nargileh.nl", true },
{ "naric.com", true },
{ "narindal.ch", true },
{ "naro.se", true },
- { "narodniki.com", true },
+ { "narodsovety.ru", true },
{ "naroska.name", true },
{ "narrativasdigitais.pt", true },
{ "narrative.network", true },
@@ -30373,6 +31430,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nashvillebasements.com", true },
{ "nashvillelidsurgery.com", true },
{ "nashzhou.me", true },
+ { "nasladko.cz", true },
+ { "naslovi.net", true },
{ "nasr.mobi", true },
{ "nasrsolar.com", true },
{ "nasserver-test.de", true },
@@ -30380,6 +31439,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nataldigital.com", true },
{ "nataliedawnhanson.com", true },
{ "natation-nsh.com", false },
+ { "natcheflife.co.uk", true },
{ "natchmatch.com", true },
{ "nateandxtina.wedding", true },
{ "natecraun.net", false },
@@ -30393,13 +31453,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nathaliebaroncoaching.ch", true },
{ "nathaliedijkxhoorn.com", true },
{ "nathaliedijkxhoorn.nl", true },
+ { "nathan.ovh", true },
{ "nathanaeldawe.com", true },
{ "nathancheek.com", false },
- { "nathanmfarrugia.com", true },
{ "nathansmetana.com", true },
{ "nation-contracting.com.hk", true },
{ "nationalbank.gov", true },
{ "nationalbanknet.gov", true },
+ { "nationalcashoffer.com", true },
{ "nationalcentereg.org", true },
{ "nationalcprfoundation.com", true },
{ "nationalcrimecheck.com.au", true },
@@ -30420,13 +31481,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "natuerlichabnehmen.ch", true },
{ "natur.com", true },
{ "natura-sense.com", true },
+ { "naturalbijou.com", true },
{ "naturalezafengshui.com", true },
{ "naturalfit.co.uk", true },
{ "naturalhealthcures.net", true },
{ "naturalkitchen.co.uk", true },
{ "naturalspacesdomes.com", true },
{ "naturaum.de", true },
- { "nature-et-bio.fr", true },
{ "natureclaim.com", true },
{ "natureflo.net", true },
{ "naturesbest.co.uk", true },
@@ -30442,15 +31503,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "naughty.audio", true },
{ "nauris.fi", true },
{ "nausicaahotel.it", true },
- { "naut.ca", true },
{ "nautiljon.com", true },
{ "nautsch.de", true },
+ { "navaneethnagesh.com", true },
{ "navarralanparty.org", true },
{ "navdeep.ca", true },
+ { "navegos.net", true },
{ "navienna.com", true },
{ "navient.com", true },
+ { "navigate-it-services.de", false },
{ "navigator.ca", true },
{ "navitime.me", true },
+ { "navroopsahdev.in", true },
{ "navstevnik.sk", true },
{ "navycs.com", true },
{ "nawir.de", true },
@@ -30526,16 +31590,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nbur.co.uk", true },
{ "nc-beautypro.fr", true },
{ "nc-formation.fr", true },
- { "nca.ink", true },
{ "ncamarquee.co.uk", true },
{ "ncands.net", true },
{ "ncarmine.com", true },
+ { "ncascade.com", true },
{ "ncc-efm.com", true },
{ "ncc-efm.org", true },
{ "ncc-qualityandsafety.org", true },
{ "nccemail.net", true },
{ "ncdc.pt", true },
{ "ncea.net.au", true },
+ { "ncgt.se", true },
{ "nch.link", true },
{ "nchangfong.com", true },
{ "nchponline.org", true },
@@ -30559,7 +31624,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ndphp.org", true },
{ "ndpigskin.com", true },
{ "nds-helicopter.de", true },
- { "ndum.ch", true },
{ "ndvr.com", true },
{ "ndx.ee", true },
{ "ndy.sex", true },
@@ -30578,6 +31642,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nebenbeiblog.ch", true },
{ "nebl.cash", true },
{ "nebra.io", true },
+ { "nebras.ga", true },
{ "nebul.at", true },
{ "nebula.exchange", true },
{ "nebulae.co", true },
@@ -30595,6 +31660,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nederlands-vastgoedfonds.nl", true },
{ "nedim-accueil.fr", true },
{ "nedlinin.com", true },
+ { "nednex.com", true },
{ "nedraconsult.ru", true },
{ "nedzadalibegovic.com", true },
{ "neecist.org", true },
@@ -30605,19 +31671,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "neemzy.org", true },
{ "neev.tech", true },
{ "nefertitis.cz", true },
- { "neffat.si", true },
{ "neflabs.com", true },
{ "nefro-cme.de", true },
{ "neftis.es", true },
{ "neg9.org", false },
{ "negai.moe", true },
- { "negativecurvature.net", true },
{ "neglecteddiseases.gov", true },
{ "negril.com", true },
{ "neheim-huesten.de", true },
{ "nehoupat.cz", true },
{ "nehrp.gov", true },
{ "neighborhoodelectricwa.com", true },
+ { "neighborshop.de", true },
{ "neil-barrett.com", true },
{ "neil-barrett.uk", true },
{ "neildaniels.com", true },
@@ -30628,9 +31693,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nejenpneu.cz", true },
{ "nejlevnejsi-parapety.cz", true },
{ "neko-nyan-nuko.com", true },
+ { "neko-nyan.org", true },
{ "nekodex.net", true },
{ "nekomimi.pl", true },
{ "nekomimirouter.com", true },
+ { "nekomio.com", true },
{ "nekorektni.cz", true },
{ "nekosc.com", true },
{ "nekowa.moe", true },
@@ -30639,6 +31706,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nelflex.com.br", true },
{ "nelhage.com", true },
{ "nemcd.com", false },
+ { "nemez.net", true },
{ "nemiroth.net", true },
{ "nemo.run", true },
{ "nemopan.com", true },
@@ -30648,7 +31716,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nems.no", true },
{ "nemumu.com", true },
{ "nemunai.re", true },
- { "nengzhen.com.cn", true },
{ "nenkin-kikin.jp", true },
{ "neno.io", true },
{ "neo2k.dk", true },
@@ -30689,6 +31756,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nerdca.st", true },
{ "nerdherd.fun", true },
{ "nerdhouse.io", true },
+ { "nerdinator.ddns.net", true },
{ "nerdmind.de", true },
{ "nerdpol.ch", true },
{ "nerdpol.org", true },
@@ -30699,6 +31767,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nerdwallet.com", true },
{ "nerdydev.net", true },
{ "nereustech.com", true },
+ { "nerofox.de", true },
{ "nerot.eu", true },
{ "nerpa-club.ru", true },
{ "nerv.com.au", true },
@@ -30729,6 +31798,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "netcoolusers.org", true },
{ "netd.at", true },
{ "netdex.co", true },
+ { "netdiode.com", true },
+ { "netdiode.eu", true },
+ { "netdiode.net", true },
+ { "netdiode.org", true },
{ "netera.se", true },
{ "neteraser.de", true },
{ "netexpat.com", true },
@@ -30742,6 +31815,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nethackwiki.com", true },
{ "nethask.ru", true },
{ "nethostingtalk.com", true },
+ { "nethruster.com", true },
+ { "nethui.nz", true },
{ "nethunter.top", true },
{ "netid.de", true },
{ "netki.com", true },
@@ -30758,9 +31833,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "netrider.net.au", false },
{ "netrogue.ninja", true },
{ "netronix.be", true },
+ { "netsec.cloud", true },
{ "netsigna.de", true },
{ "netsite.dk", true },
{ "netsoins.org", true },
+ { "netsoj.nl", true },
{ "netsparker.com", true },
{ "netsparker.com.tr", true },
{ "netspeedia.net", true },
@@ -30775,10 +31852,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "netto-service.ch", true },
{ "nettools.link", true },
{ "nettx.co.uk", true },
- { "netube.org", true },
{ "netvizura.co.uk", true },
- { "netvpn.ml", true },
- { "netwaf.com", true },
{ "netwarc.eu", true },
{ "netwarc.nl", true },
{ "netweaver.uk", true },
@@ -30789,17 +31863,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "network-midlands.uk", true },
{ "network-notes.com", true },
{ "network23.nl", true },
+ { "networkdiode.com", true },
+ { "networkdiode.eu", true },
+ { "networkdiode.net", true },
+ { "networkdiode.org", true },
{ "networkersdiary.com", true },
{ "networkhane.com", true },
{ "networking4all.com", true },
{ "networkingnexus.net", true },
{ "networkingphoenix.com", true },
- { "networkmas.com", false },
+ { "networkmas.com", true },
{ "networkmidlands.co.uk", true },
{ "networkmidlands.uk", true },
{ "networkmon.net", true },
{ "networkofarts.com", true },
{ "networkposting.com", true },
+ { "networth.at", true },
{ "netz-yokohama.co.jp", true },
{ "netzfabrik.com", true },
{ "netzfrauen.org", true },
@@ -30841,10 +31920,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "new-process.eu", true },
{ "new-vip.com", true },
{ "new-web-studio.com", true },
- { "new.travel.pl", true },
{ "newaccess.ch", true },
{ "newbernpost539.com", true },
- { "newbietech.cn", false },
{ "newborncryptocoin.com", true },
{ "newbrunswick.today", true },
{ "newbrunswicktoday.com", true },
@@ -30861,15 +31938,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "newcloudwhodis.com", true },
{ "newday.host", true },
{ "newdimensioninterlock.com", true },
+ { "newdirectionsolar.com.au", true },
{ "newearth.press", true },
{ "newenglandworkinjury.com", true },
{ "newfangledscoop.com", true },
{ "newfiepedia.ca", true },
{ "newflavor.design", true },
{ "newflora.ru", true },
+ { "newfordmustang.com.au", true },
{ "newfoundland-labradorflora.ca", true },
{ "newgrowbook.com", true },
{ "newguidance.ch", true },
+ { "newhamyoungbloods.co.uk", true },
+ { "newhopeplacement.com", true },
{ "newind.info", true },
{ "newinf.at", true },
{ "newinternet.media", true },
@@ -30877,6 +31958,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "newkaliningrad.ru", true },
{ "newknd.com", true },
{ "newlifeband.de", true },
+ { "newlifehempoil.com", true },
{ "newline.online", true },
{ "newmarketbouncycastlehire.co.uk", true },
{ "newmed.com.br", true },
@@ -30887,6 +31969,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "newposts.ru", true },
{ "newreleases.io", true },
{ "news47ell.com", true },
+ { "newsdiff.eu", true },
+ { "newsdiff.nl", true },
+ { "newsdiffs.eu", true },
{ "newsgroups.io", true },
{ "newsletteralerts.com", true },
{ "newsmotor.info", true },
@@ -30934,8 +32019,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nextnowagency.com", true },
{ "nextos.com", true },
{ "nextrec.site", true },
+ { "nextrend.co", true },
{ "nextrobotics.de", true },
+ { "nextstart-staging.azurewebsites.net", true },
+ { "nextstart.azurewebsites.net", true },
{ "nextstep-labs.gr", true },
+ { "nexttv.co.il", true },
{ "nextwab.com", true },
{ "nexus-exit.de", true },
{ "nexusconnectinternational.eu", true },
@@ -30948,8 +32037,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nfam.de", true },
{ "nfe-elektro.de", true },
{ "nfir.nl", true },
+ { "nfl.dedyn.io", true },
+ { "nfl.duckdns.org", true },
{ "nflchan.org", true },
{ "nflmocks.com", true },
+ { "nfls.io", true },
+ { "nflsic.org", true },
+ { "nfltshirt.com", true },
+ { "nfluence.org", true },
{ "nfpors.gov", true },
{ "nframe.io", true },
{ "nfsec.pl", true },
@@ -30957,10 +32052,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ng-musique.com", true },
{ "ngasembaru.com", true },
{ "ngc.gov", false },
+ { "ngetik.id", true },
{ "nghe.net", true },
{ "ngi.eu", true },
{ "nginxconfig.com", true },
{ "nginxconfig.io", true },
+ { "ngmx.com", true },
+ { "ngmx.net", true },
+ { "ngmx.org", true },
{ "ngojclee.com", true },
{ "ngospelmedia.net", true },
{ "ngt.gr", true },
@@ -30973,7 +32072,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nhakhoangocanh.net", true },
{ "nhchalton.com", true },
{ "nhdsilentheroes.org", true },
- { "nhgteam.hu", true },
{ "nhhoteljobs.nl", true },
{ "nhimf.org", true },
{ "nhnieuws.nl", true },
@@ -30989,12 +32087,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "niagaraschoice.org", true },
{ "nibb13.tech", true },
{ "nibo.blog", true },
- { "nibouw.nl", true },
{ "nic.goog", true },
{ "nic.gov", true },
{ "nic.how", true },
{ "nic.soy", true },
{ "nic.xn--q9jyb4c", true },
+ { "nicaise.ca", true },
{ "nice.ch", true },
{ "niceb5y.net", true },
{ "niceguyit.biz", true },
@@ -31008,10 +32106,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nicholasquigley.com", true },
{ "nicholasruddick.com", true },
{ "nicholaswilliams.net", true },
+ { "nicht-blau.de", true },
{ "nichteinschalten.de", false },
{ "nichthelfer.de", true },
{ "nicic.gov", true },
{ "nickcraver.com", true },
+ { "nickdekruijk.nl", true },
{ "nickfrost.rocks", true },
{ "nickguyver.com", true },
{ "nickhitch.co.uk", true },
@@ -31022,7 +32122,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nickplotnek.co.uk", true },
{ "nickrickard.co.uk", true },
{ "nicks-autos.com", true },
+ { "nickscomputers.nl", true },
+ { "nickserv.eu", true },
{ "nickserve.com", true },
+ { "nickserve.eu", true },
+ { "nickserve.net", true },
+ { "nickserve.nl", true },
+ { "nickserve.org", true },
{ "nickstories.de", true },
{ "nicktheitguy.com", true },
{ "niclasreich.de", true },
@@ -31046,8 +32152,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nicolaszambetti.ch", true },
{ "nicolaw.uk", true },
{ "nicolemathew.com", true },
- { "niconico.ooo", true },
- { "niconode.com", false },
{ "nicoobook.com", true },
{ "nicsezcheckfbi.gov", true },
{ "nicul.in", true },
@@ -31080,14 +32184,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "niggemeier.cc", true },
{ "niggo.eu", true },
{ "night2stay.cn", true },
- { "night2stay.com", true },
{ "night2stay.de", true },
{ "night2stay.fr", true },
{ "night2stay.ru", true },
{ "nightfirec.at", true },
{ "nightsi.de", true },
{ "nightstand.io", true },
- { "nihon-no-sake.net", true },
{ "nihtek.in", true },
{ "nij.gov", true },
{ "nijiero-ch.com", false },
@@ -31096,7 +32198,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nikandcara.com", true },
{ "nikao-tech.com", true },
{ "nikimix.com", true },
- { "nikitashevchenko.com", true },
+ { "nikitin.photo", true },
{ "nikkasystems.com", true },
{ "nikkila.me", true },
{ "nikklassen.ca", true },
@@ -31116,7 +32218,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nil.mx", true },
{ "niles.xyz", true },
{ "nilgirispice.co.uk", true },
- { "niloxy.com", true },
{ "nim-news.com", true },
{ "nimbo.com.au", true },
{ "nimeshjm.com", true },
@@ -31140,8 +32241,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ninjasquad.fr", true },
{ "ninjaworld.co.uk", true },
{ "ninjio.com", true },
+ { "ninofink.com", true },
{ "ninov.de", true },
- { "ninreiei.jp", true },
{ "nintendoforum.no", true },
{ "ninth.cat", true },
{ "ninthfloor.org", true },
@@ -31157,11 +32258,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nirhub.ru", true },
{ "nirjonmela.com", true },
{ "nirjonmela.net", true },
- { "nirudo.me", true },
{ "nirvanashop.com", true },
{ "niscats.com", true },
{ "nishimebistro.cz", true },
{ "nissanofbismarckparts.com", true },
+ { "nist.tech", true },
{ "nitifilter.com", true },
{ "nitrix.me", true },
{ "nitrohorse.com", false },
@@ -31179,6 +32280,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nixx-gel.cz", true },
{ "niyawe.de", true },
{ "niyazpoyilan.com", false },
+ { "niyen.com", true },
+ { "niyen.eu", true },
+ { "niyen.net", true },
+ { "niyen.org", true },
{ "nizhaoheng.com", true },
{ "nja.id.au", true },
{ "njast.net", true },
@@ -31224,6 +32329,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nob.ro", true },
{ "nobilefoods.com", true },
{ "nobitakun.com", true },
+ { "nobleandlore.com", true },
{ "nobledust.com", true },
{ "nobleparkapartments.com.au", true },
{ "nobly.de", true },
@@ -31232,12 +32338,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nocks.com", true },
{ "noclegiwchecinach.pl", true },
{ "nocmd.com", true },
+ { "nodebb-cn.org", true },
{ "nodecdn.net", true },
{ "nodecraft.com", true },
{ "nodeedge.com", true },
{ "nodeflame.com", true },
{ "nodejs.de", true },
{ "nodelab-it.de", true },
+ { "nodelia.com", true },
{ "nodesec.cc", true },
{ "nodespin.com", true },
{ "nodevops.com", true },
@@ -31263,16 +32371,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "noiglosujemy.pl", true },
{ "noima.com", true },
{ "noincludesubdomains.preloaded.test", false },
+ { "noinghene.com", true },
{ "noise.agency", true },
{ "noisetrap.cz", true },
{ "noisky.cn", true },
{ "noisyfox.cn", true },
+ { "nokia.la", true },
{ "nokono.com", true },
{ "nolaviz.org", true },
{ "noleggio-bagni-chimici.it", true },
{ "noleggiobagnichimici.perugia.it", true },
{ "noleggioimbarcazioni.it", true },
{ "noleggiolimousine.roma.it", true },
+ { "nolte-imp.de", true },
{ "noma-film.com", true },
{ "nomadproject.io", true },
{ "nomagic.software", true },
@@ -31284,10 +32395,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nomik.xyz", true },
{ "nomsy.net", true },
{ "noname-ev.de", true },
- { "nonametheme.com", true },
{ "noncombatant.org", true },
+ { "nonglamfarm.vn", true },
{ "nonx.pro", true },
{ "noob-box.net", true },
+ { "nooben.com", true },
{ "noobow.me", true },
{ "noobsunited.de", true },
{ "noobunbox.net", true },
@@ -31295,11 +32407,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "noodplan.co.za", true },
{ "noodweer.be", true },
{ "noofficewalls.com", true },
- { "nook.my", true },
{ "noomist.com", true },
{ "noon-entertainments.com", true },
{ "noonan.family", true },
+ { "nooneshere.co.uk", true },
{ "noop.ch", true },
+ { "noop.com.au", true },
{ "nooranevalainen.fi", true },
{ "noordsee.de", true },
{ "noordwesthoekrit.nl", true },
@@ -31349,7 +32462,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "northbrisbaneapartments.com.au", true },
{ "northcoastlabs.com", true },
{ "northconsulting.fr", true },
- { "northcountykiaparts.com", true },
{ "northcreekresort.com", true },
{ "northcreekresortblue.ca", true },
{ "northdakotahealthnetwork.com", true },
@@ -31370,6 +32482,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "northridgeelectrical.com", true },
{ "northtexasvasectomy.com", true },
{ "northumbriagames.co.uk", true },
+ { "norys-escape.de", true },
{ "nos-medias.fr", true },
{ "nos-oignons.net", true },
{ "noscript.net", true },
@@ -31381,12 +32494,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nossasenhora.net", true },
{ "nossasenhoradodesterro.com.br", true },
{ "nostalgimidi.se", true },
+ { "nostalgische-attracties.nl", true },
{ "nostraforma.com", false },
{ "nosuch.site", true },
{ "nosuch.website", true },
{ "noswap.com", true },
{ "nosyu.pe.kr", true },
{ "nota.moe", true },
+ { "notablepeeps.com", true },
{ "notabug.org", true },
{ "notacooldomain.com", true },
{ "notadd.com", true },
@@ -31408,9 +32523,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "noticaballos.com", true },
{ "noticiasdehumor.com", true },
{ "noticiasdetv.com", true },
+ { "noticiasymas.cl", true },
{ "notify.moe", true },
{ "notigatos.es", true },
{ "notilus.fr", true },
+ { "notilus.it", true },
{ "notjustvacs.com", true },
{ "notmybox.com", true },
{ "notnize.net", true },
@@ -31423,6 +32540,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "noudjalink.nl", true },
{ "nourishandnestle.com", true },
{ "noustique.com", true },
+ { "noustramits.com", true },
{ "nousyukum.com", true },
{ "nova-dess.ch", true },
{ "nova-it.pl", true },
@@ -31453,6 +32571,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "novengi.mu", true },
{ "novfishing.ru", true },
{ "novgorod-avia.ru", true },
+ { "novicecamp.com", true },
{ "novilaw.com", true },
{ "novilidery.com", true },
{ "novinhabucetuda.com", true },
@@ -31470,6 +32589,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "noxlogic.nl", true },
{ "noxx.global", true },
{ "noxx.solutions", true },
+ { "noydeen.com", true },
{ "noyocenter.org", true },
{ "np-edv.at", true },
{ "np.search.yahoo.com", false },
@@ -31482,7 +32602,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "npregion.org", true },
{ "npsas.org", true },
{ "npw.net", true },
- { "nqeshreviewer.com", true },
{ "nrd.gov", true },
{ "nrd.li", true },
{ "nrev.ch", true },
@@ -31518,6 +32637,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nstnet.org", true },
{ "nstremsdoerfer.ovh", true },
{ "nstrust.co.uk", true },
+ { "nstyleintl.ca", true },
{ "nsworks.com", true },
{ "nszipline.com", true },
{ "nt-catala.com", true },
@@ -31528,6 +32648,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ntia.gov", true },
{ "ntlabs.org", true },
{ "ntotten.com", true },
+ { "ntpana.com", true },
{ "ntppool.org", false },
{ "ntsb.gov", true },
{ "ntwt.us", true },
@@ -31541,7 +32662,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nuclea.id", true },
{ "nuclearcat.com", true },
{ "nucleosynth.space", true },
- { "nudes.ovh", true },
{ "nudevotion.com", true },
{ "nudge.ai", true },
{ "nuel.cl", true },
@@ -31563,6 +32683,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "numberoneshoes.co.nz", true },
{ "numberzero.org", true },
{ "numerik-games.ch", true },
+ { "numeritelefonici.it", true },
{ "numero-aleatorio.com", true },
{ "numero1.ch", true },
{ "numerologist.com", true },
@@ -31603,6 +32724,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nutripedia.gr", true },
{ "nutrishop.com", true },
{ "nutrition.gov", true },
+ { "nutrivisa.com.br", true },
{ "nuttyveg.com", true },
{ "nuvechtdal.nl", true },
{ "nuvini.com", true },
@@ -31610,16 +32732,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nuxer.fr", true },
{ "nv.gw", true },
{ "nvl-game.tokyo", true },
+ { "nvlocalbusiness.com", true },
{ "nvq.nl", true },
{ "nvr.bz", true },
{ "nvtc.gov", true },
- { "nwapproval.com", false },
{ "nwautorebuild.com", true },
{ "nwbc.gov", true },
{ "nwea.nl", true },
{ "nwerc.party", true },
{ "nwgh.org", false },
- { "nwimports.com", true },
{ "nwitt.us", true },
{ "nwk1.com", true },
{ "nwmd.nl", true },
@@ -31638,8 +32759,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nyadora.moe", true },
{ "nyan.it", true },
{ "nyan.stream", true },
+ { "nyansparkle.com", true },
{ "nyantec.com", true },
{ "nybiz.nyc", true },
+ { "nycfilmcrew.com", true },
{ "nyconcretelifting.com", true },
{ "nycoyote.org", true },
{ "nydig.com", true },
@@ -31654,6 +32777,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nyloc.de", true },
{ "nylonfeetporn.com", true },
{ "nymphetomania.net", true },
+ { "nynex.net", true },
{ "nyoliveoil.com", true },
{ "nyoronfansubs.org", true },
{ "nyphox.ovh", true },
@@ -31684,6 +32808,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "o9397.com", true },
{ "o9721.com", true },
{ "o9728.co", true },
+ { "o98.com", true },
{ "oahpmdata.net", true },
{ "oaic.gov.au", true },
{ "oakandresin.co", true },
@@ -31705,6 +32830,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oatmealdome.me", true },
{ "oatycloud.spdns.de", true },
{ "oauth-dropins.appspot.com", false },
+ { "oauth.how", true },
{ "obamalibrary.gov", true },
{ "obamawhitehouse.gov", true },
{ "obec-krakovany.cz", true },
@@ -31716,25 +32842,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "obg-global.com", true },
{ "obgalslancaster.com", true },
{ "obgynmiamifl.com", true },
+ { "obioncountytn.gov", true },
{ "obitech.de", true },
{ "object.earth", true },
{ "objectif-terre.ch", true },
{ "objectorientedsolutions.com", true },
{ "objekt-textil.ch", true },
+ { "objetperso.fr", true },
{ "oblast45.ru", false },
{ "obligacjekk.pl", true },
{ "oboeta.com", true },
{ "obono.at", true },
{ "obrienswine.ie", true },
{ "obs.group", true },
- { "obscur.us", true },
+ { "obsessharness.com", true },
{ "obsproject.com", true },
{ "obtima.org", true },
{ "obud.cz", true },
{ "obxlistings.com", true },
{ "obyvateleceska.cz", true },
- { "obzoroff.info", true },
{ "oc-sa.ch", true },
+ { "ocad.com.au", true },
{ "ocalaflwomenshealth.com", true },
{ "ocarupo.com", true },
{ "occ.gov", true },
@@ -31744,7 +32872,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "occonnections.org", true },
{ "occupational-therapy-colleges.com", true },
{ "ocd2016.com", true },
- { "ocdadmin.com", true },
{ "oceanbreezehomes.com", true },
{ "oceancity4sales.com", true },
{ "oceandns.eu", true },
@@ -31764,11 +32891,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ockendenhemming.co.uk", true },
{ "oclausen.com", true },
{ "ocni-ambulance-most.cz", true },
+ { "ocnjapartment.com", true },
{ "ocolere.ch", true },
{ "ocotg.com", true },
{ "ocrn.nl", true },
{ "ocsigroup.fr", true },
- { "ocsr.nl", true },
{ "octa.store", true },
{ "octagongroup.co", true },
{ "octarineparrot.com", true },
@@ -31778,7 +32905,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "octavus.it", true },
{ "octobered.com", true },
{ "octocaptcha.com", true },
- { "octocat.ninja", true },
{ "octofox.de", true },
{ "octohedralpvp.tk", true },
{ "octolopagon.games", true },
@@ -31788,13 +32914,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "octosys.org", true },
{ "octosys.ru", true },
{ "octothorpe.club", true },
- { "octothorpe.ninja", true },
+ { "octovpn.com", true },
{ "oculus.com", true },
{ "odden.io", true },
{ "oddmuse.org", true },
{ "oddnumber.ca", true },
{ "oddsandevens.ca", true },
{ "oddsandevensbookkeeping.ca", true },
+ { "oddtime.net", true },
{ "ode.red", true },
{ "odensc.me", true },
{ "odense3dprint.dk", true },
@@ -31806,6 +32933,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "odtu.lu", true },
{ "oducs.org", true },
{ "odvps.com", true },
+ { "odysea.cat", true },
{ "odysseyofthemind.eu", true },
{ "odzyskaniedomeny.pl", true },
{ "oe-boston.com", true },
@@ -31821,10 +32949,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oemspace.net", true },
{ "oemspace.nl", true },
{ "oemwolf.com", true },
- { "oenings.eu", true },
{ "oepsbanaan.nl", true },
{ "oes.org.gt", true },
- { "oessi.eu", true },
+ { "of2m.fr", true },
{ "ofcampuslausanne.ch", true },
{ "ofda.gov", true },
{ "ofertasadsl.com", true },
@@ -31835,8 +32962,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "offenekommune.de", true },
{ "offenes-deutschland.de", true },
{ "offensity.com", true },
+ { "offerhome.com", true },
{ "offertegiuste.com", true },
- { "offgames.io", true },
{ "offgridauto.com", true },
{ "offgridhub.com", true },
{ "office-discount.at", true },
@@ -31850,7 +32977,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "officium.tech", true },
{ "offroadeq.com", true },
{ "offroadhoverboard.net", true },
- { "offshoot.ie", true },
{ "offshoot.rentals", true },
{ "offshore.digital", true },
{ "offshoremarineparts.com", false },
@@ -31861,10 +32987,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oftamedic.com", true },
{ "oftn.org", true },
{ "oge.ch", true },
+ { "ogkw.de", true },
{ "ogocare.com", true },
{ "oguya.ch", true },
{ "ogyaa.jp", true },
- { "oh14.de", true },
{ "ohadsoft.com", true },
{ "ohai.su", true },
{ "ohchouette.com", true },
@@ -31872,15 +32998,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oheila.com", true },
{ "ohentpay.com", true },
{ "ohhere.xyz", true },
+ { "ohioflockcote.com", true },
{ "ohiohealthfortune100.com", true },
{ "ohm.sg", true },
{ "ohm2013.org", true },
{ "ohmayonnaise.com", true },
{ "ohne-name.de", true },
+ { "ohnonotme.com", true },
{ "ohol.se", true },
{ "ohsocool.org", true },
{ "ohsohairy.co.uk", true },
{ "oi-wiki.org", true },
+ { "oic-ci.gc.ca", true },
{ "oil-ecn.ru", true },
{ "oisd.nl", true },
{ "oita-homes.com", true },
@@ -31895,7 +33024,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "okaidi.es", true },
{ "okaidi.fr", true },
{ "okakuro.org", true },
- { "okashi.me", true },
+ { "okasurfbali.com", true },
{ "okay.cf", true },
{ "okay.coffee", true },
{ "okaz.de", true },
@@ -31908,6 +33037,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "okin-jp.net", true },
{ "okinawa-mag.net", true },
{ "oklahomafibroids.com", true },
+ { "okmx.cloud", true },
+ { "okmx.de", true },
+ { "okmyanmartravels.com", true },
{ "okna-tm.kz", true },
{ "okonetwork.org.uk", true },
{ "okoris.net", true },
@@ -31916,7 +33048,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oksafe-t.org", true },
{ "oktime.cz", true },
{ "oktoberfeststore.nl", true },
- { "oktomus.com", true },
{ "oku-nara.com", true },
{ "okukan.com.au", true },
{ "okurapictures.com", true },
@@ -31924,6 +33055,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "okviz.com", true },
{ "okwu.cz", true },
{ "olafnorge.de", true },
+ { "olafwalther.de", true },
{ "olanderflorist.com", true },
{ "olasouris.com", true },
{ "olastrafford.org", true },
@@ -31937,8 +33069,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "older-racer.com", true },
{ "oldita.ru", true },
{ "oldking.net", true },
- { "oldnews.news", true },
{ "oldno07.com", true },
+ { "oldnoob.de", true },
{ "oldoakflorist.com", true },
{ "oldonyosafaris.com", true },
{ "oldprop.com", true },
@@ -31947,7 +33079,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oldsticker.com", true },
{ "oldstmary.com", true },
{ "oldtimerreifen-moeller.de", true },
- { "oleam.org", true },
{ "olecoin.io", true },
{ "olegon.ru", true },
{ "olegs.be", true },
@@ -31968,6 +33099,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oliveoilschool.org", true },
{ "oliveoiltest.com", true },
{ "oliveoiltimes.com", true },
+ { "oliverah.com", true },
{ "oliveraiedelabastideblanche.fr", true },
{ "oliverclausen.com", true },
{ "oliverdunk.com", false },
@@ -31984,6 +33116,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oliviervaillancourt.com", true },
{ "olizeite.ch", true },
{ "ollie.io", true },
+ { "ollies.cloud", true },
{ "ollies.cz", true },
{ "olliespage.com", true },
{ "olliespage.net", true },
@@ -31995,7 +33128,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "olmcjc.com", true },
{ "olmcnewark.com", true },
{ "olmik.net", true },
- { "olmmcc.tk", true },
{ "olmsted.io", true },
{ "olofsson.cc", true },
{ "olomercy.com", true },
@@ -32004,6 +33136,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "olschurch.com", true },
{ "olsh-hilltown.com", true },
{ "olsonproperties.com", true },
+ { "olygazoo.com", true },
{ "olymp-arts.world", true },
{ "olympeakgaming.tv", true },
{ "olympiads.ca", true },
@@ -32011,6 +33144,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "om.yoga", true },
{ "om1.com", true },
{ "omanko.porn", true },
+ { "omega-gaming.online", true },
{ "omegahosting.net", true },
{ "omegarazer.ca", true },
{ "omegathermoproducts.nl", true },
@@ -32020,15 +33154,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "omertabeyond.com", true },
{ "omertabeyond.net", true },
{ "ometepeislandinfo.com", true },
+ { "omexcables.com", true },
{ "omf.link", true },
{ "omfg.exposed", true },
{ "omgbouncycastlehire.co.uk", true },
{ "omi-news.fr", true },
{ "omicron3069.com", true },
{ "omitech.co.uk", true },
+ { "ommcitalflex.com", true },
{ "omniaclubs.com", true },
{ "omniasig.ro", true },
- { "omniasl.com", true },
{ "omniatv.com", true },
{ "omnibot.tv", true },
{ "omnifurgone.it", true },
@@ -32042,11 +33177,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "omorashi.org", true },
{ "omori.ch", true },
{ "omoteura.com", true },
+ { "omranic.com", true },
{ "omronwellness.com", true },
{ "omsdieppe.fr", true },
{ "omskrock.com", true },
{ "on-tech.co.uk", true },
- { "on.tax", true },
{ "on2it.net", true },
{ "ona.io", true },
{ "onaboat.se", true },
@@ -32058,6 +33193,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onceuponarainbow.co.uk", true },
{ "oncf.asso.fr", true },
{ "oncodedesign.com", true },
+ { "oncotarget.ru", true },
{ "ond-inc.com", true },
{ "ond-inc.jp", true },
{ "ondcp.gov", true },
@@ -32065,7 +33201,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ondevamosjantar.com", true },
{ "ondrej.org", true },
{ "ondrejbudin.cz", true },
- { "one---line.com", true },
{ "one-resource.com", true },
{ "one-s.co.jp", true },
{ "one-tab.com", true },
@@ -32094,10 +33229,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onepointsafeband.com", true },
{ "onepointzero.com", true },
{ "oneprediction.com", true },
- { "onesnzeroes.com", true },
+ { "onesnzeroes.com", false },
{ "onesports.cz", true },
{ "onestasolar.com", true },
- { "onestepfootcare.com", true },
{ "onestop-study.com", true },
{ "onestopcastles.co.uk", true },
{ "onetcenter.org", true },
@@ -32106,6 +33240,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onetonline.org", true },
{ "onetouchrevealplus.com", true },
{ "onetwentyseven001.com", true },
+ { "onetwosweetatelier.com", true },
{ "onevpn.com", true },
{ "oneway.ga", true },
{ "onewaymail.com", true },
@@ -32126,11 +33261,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onix.eu.com", true },
{ "onixcco.com.br", true },
{ "onkentessegertdij.hu", true },
+ { "onkfaktor.de", true },
{ "onlfait.ch", true },
{ "online-backup.se", true },
{ "online-biblio.tk", true },
{ "online-calculator.com", true },
- { "online-consulting-corp.fr", true },
{ "online-eikaiwa-guide.com", true },
{ "online-health-insurance.com", true },
{ "online-lernprogramme.de", true },
@@ -32144,10 +33279,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "online24.pt", true },
{ "onlinecasino.vlaanderen", true },
{ "onlinecasinobluebook.com", true },
+ { "onlinecasinoselite.org", true },
{ "onlinecensorship.org", true },
{ "onlinecollegeessay.com", true },
{ "onlinedemo.hu", true },
- { "onlinefashion.it", true },
{ "onlinehaircuts.com", true },
{ "onlinehashfollow.com", true },
{ "onlinekmc.com", true },
@@ -32177,8 +33312,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onrr.gov", true },
{ "ons.ca", true },
{ "onsgenoegen-waz.nl", true },
+ { "onshuistrust.co.za", true },
{ "onsinscrit.com", true },
{ "onspring.com", true },
+ { "onsudoku.com", true },
{ "ontdekhetzelf.nu", true },
{ "onthebriteside.com", true },
{ "ontras.com", false },
@@ -32196,6 +33333,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "onyxfireinc.com", true },
{ "onyxgen.duckdns.org", true },
{ "onyxmoon.me", true },
+ { "onzerelaties.net", true },
{ "oo5197.co", true },
{ "oo6729.co", true },
{ "oo6729.com", true },
@@ -32215,6 +33353,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "op3racional.eu", true },
{ "opalesurfcasting.net", true },
{ "oparl.org", true },
+ { "opbedbugcanines.com", true },
{ "opcare.co.uk", true },
{ "opcenter.de", true },
{ "opcionpublicitaria.com", true },
@@ -32236,7 +33375,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "open-sauce-recipes.co.uk", true },
{ "open-source.gr", true },
{ "open.gl", true },
+ { "open.ru", true },
{ "openacte.ch", true },
+ { "openai.community", true },
{ "openbayes.com", true },
{ "openbeecloud.com", true },
{ "openblox.org", true },
@@ -32262,8 +33403,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "openjur.de", true },
{ "openkim.org", true },
{ "openkvk.nl", true },
- { "openmirrors.ml", true },
{ "openmtbmap.org", true },
+ { "opennippon.com", true },
+ { "opennippon.ru", true },
{ "openpictures.ch", true },
{ "openquery.com.au", true },
{ "openrainbow.com", true },
@@ -32289,12 +33431,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "openstreetmap.lu", true },
{ "openstreetmap.org", true },
{ "opentrack.info", true },
+ { "opentrash.org", true },
{ "opentuition.com", true },
{ "openverse.com", true },
{ "openvz.org", true },
{ "openwaveguide.de", true },
{ "openwifi.gr", true },
{ "openwireless.org", true },
+ { "operationsafeescape.org", true },
{ "opexterminating.com", true },
{ "opfin.com", true },
{ "ophis-phosphoros.com", true },
@@ -32308,6 +33452,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "opioids.gov", true },
{ "opium.io", true },
{ "oplop.appspot.com", true },
+ { "opoleo.com", true },
{ "oposiciones.com.es", true },
{ "oposicionesapolicialocal.es", true },
{ "oposicionescorreos.com.es", true },
@@ -32323,7 +33468,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "opportunity.de", true },
{ "opportunityliu.top", true },
{ "oppositionsecurity.com", true },
- { "oppress.life", true },
{ "oppwa.com", true },
{ "opq.pw", true },
{ "oprechtgezegd.nl", true },
@@ -32334,9 +33478,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "opti-net.at", true },
{ "opticaltest.com", true },
{ "optik-trosdorff.de", true },
+ { "optiker-gilde.de", true },
{ "optimalsetup.com", true },
{ "optimaner.pl", true },
{ "optimist.bg", true },
+ { "optimo.com.tr", true },
{ "optimumwebdesigns.com", true },
{ "optimus.io", true },
{ "optimuscrime.net", true },
@@ -32345,7 +33491,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "optoutday.de", true },
{ "opture.ch", true },
{ "opus-codium.fr", true },
- { "opus-consulting.no", true },
{ "opvakantie-noorwegen.nl", true },
{ "opvakantie-zweden.nl", true },
{ "oqwebdesign.com", true },
@@ -32360,12 +33505,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "orangutan.org", true },
{ "oranjee.net", false },
{ "orbital3.com", true },
+ { "orbitcleaning.com.au", true },
{ "orbu.net", true },
{ "orca.pet", true },
{ "orcada.co", true },
{ "orcahq.com", true },
{ "orcamoney.com", true },
{ "orcawiki.nl", true },
+ { "orchardnh.org", true },
{ "orchideenettoyage.com", true },
{ "orchidlive.com", true },
{ "orchids.co.jp", true },
@@ -32374,11 +33521,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "orcsnet.com", true },
{ "ordbokpro.se", true },
{ "orde.red", true },
+ { "orderessay.net", true },
{ "ordermore.cloud", true },
+ { "ordermygear.com", true },
{ "ordernow.at", true },
{ "orderswift.com", true },
- { "ordoh.com", true },
{ "ordoro.com", true },
+ { "orebolt.cz", true },
+ { "orembaeviajes.tur.ar", true },
{ "oreshinya.xyz", true },
{ "oreskylaw.com", true },
{ "oreto.de", false },
@@ -32389,6 +33539,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "organisatieteam.nl", true },
{ "organisationsberatung-jacobi.de", true },
{ "orgasmium.com", true },
+ { "orged.de", true },
{ "orgsyn.in", true },
{ "orgyporngroup.com", true },
{ "orhideous.name", true },
@@ -32411,7 +33562,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "orioncokolada.cz", true },
{ "orionfinancialservices.com", true },
{ "orkestar-krizevci.hr", true },
- { "orkiv.com", true },
+ { "orkiv.com", false },
{ "orlandobalbas.com", true },
{ "orlandoprojects.com", true },
{ "orleika.io", true },
@@ -32422,7 +33573,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oroscopodelmese.it", true },
{ "orrs.de", true },
{ "ortho-europe.com", true },
- { "orthocop.cz", true },
+ { "ortho-graz.at", true },
{ "orthodocspro.com", true },
{ "orthodontiste-geneve-docteur-rioux.com", true },
{ "orthograph.ch", true },
@@ -32447,10 +33598,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "osez-l-odyssee.fr", true },
{ "oshayr.com", true },
{ "oshell.me", true },
+ { "oshershalom.com", true },
{ "oshrc.gov", true },
{ "osielnava.com", true },
{ "osimmo.fr", true },
- { "osirisrp.online", true },
{ "osirium.com", true },
{ "oskrba.net", true },
{ "oskrba.online", true },
@@ -32461,6 +33612,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "osm.ovh", true },
{ "osmani-gebaeudereinigung.de", true },
{ "osmanlitorunu.com", true },
+ { "osmestres.com", true },
{ "osmosis.org", true },
{ "osmre.gov", true },
{ "osnova.cz", true },
@@ -32472,8 +33624,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ospree.me", true },
{ "ostachstore.com", true },
{ "ostan-collections.net", true },
+ { "ostechnix.com", true },
{ "osteendiner.com", true },
{ "osterkraenzchen.de", true },
+ { "osterlensyd.se", true },
{ "ostgotamusiken.se", true },
{ "osti.gov", true },
{ "ostimwebyazilim.com", true },
@@ -32501,6 +33655,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oticasvisao.net.br", true },
{ "otisko.com", true },
{ "otokiralama.name.tr", true },
+ { "otoma.tk", true },
{ "otomobilforumu.com", true },
{ "otorrino.pt", true },
{ "otoy.com", true },
@@ -32513,14 +33668,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "otsfreestyle.jp", true },
{ "ottoproject.io", false },
{ "ottoversand.at", true },
+ { "otus-magnum.com", true },
{ "otvaracie-hodiny.sk", true },
{ "otvertka.kz", true },
{ "otya.me", true },
- { "ouaibe.qc.ca", true },
{ "ouattara.ch", true },
{ "ouestsolutions.com", true },
{ "ouglor.com", true },
- { "ouin.land", true },
{ "oulunjujutsu.com", true },
{ "ouowo.gq", true },
{ "our-box.de", true },
@@ -32539,7 +33693,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ourwedding.xyz", true },
{ "ourworldindata.org", true },
{ "out-of-scope.de", true },
- { "outdoorchoose.com", true },
{ "outdoorfurniture.ie", true },
{ "outdoorimagingportal.com", true },
{ "outdoorlightingagoura.com", true },
@@ -32556,6 +33709,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "outdoorlightingsimivalley.com", true },
{ "outdoorlightingthousandoaks.com", true },
{ "outdoorlightingwestlakevillage.com", true },
+ { "outdoortrip.com", true },
{ "outerlimitsdigital.com", true },
{ "outetc.com", true },
{ "outfunnel.com", true },
@@ -32573,11 +33727,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "outstack.vote", true },
{ "ouxiang.me", true },
{ "ovabastecedoraindustrial.com", true },
+ { "ovejabohemia.com", true },
{ "ovelhaostra.com", false },
{ "overalglas.nl", true },
{ "overamsteluitgevers.nl", true },
{ "overclockers.ge", true },
{ "overdrive-usedcars.be", true },
+ { "overframe.gg", true },
{ "overkillshop.com", true },
{ "overlandireland.ie", true },
{ "overnightglasses.com", true },
@@ -32589,6 +33745,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "overstap.deals", true },
{ "overstemmen.nl", true },
{ "overstockpromote.com", true },
+ { "overthecloud.it", true },
{ "overthinkingit.com", true },
{ "overtrolls.de", true },
{ "overzicht.pro", true },
@@ -32613,6 +33770,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ownagepranks.com", true },
{ "ownc.at", true },
{ "ownmay.com", false },
+ { "ownspec.com", true },
{ "owntournament.org", true },
{ "oxanababy.com", true },
{ "oxborrow.ca", true },
@@ -32620,23 +33778,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "oxelie.com", true },
{ "oxia.me", true },
{ "oxiame.eu", true },
- { "oximo.lviv.ua", true },
{ "oxo.cloud", true },
+ { "oxygenit.co.za", true },
{ "oxygin.net", true },
{ "oxytocin.org", true },
{ "oxyx.tk", true },
{ "oxz.me", true },
{ "oxzeth3sboard.com", true },
- { "oyashirosama.tokyo", true },
{ "oyosoft.fr", true },
{ "oyosoft.net", true },
{ "oysterworldwide.com", true },
{ "oyunpat.com", true },
{ "ozalp.dk", true },
{ "ozark.be", true },
- { "ozarktrailcooler.com", true },
{ "oznamovacipovinnost.cz", true },
{ "ozvolvo.org", true },
+ { "p-mint.jp", true },
{ "p-p.site", true },
{ "p-s-b.com", true },
{ "p0l.de", true },
@@ -32648,12 +33805,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "p5197.co", true },
{ "p5on.net", true },
{ "p5r.uk", true },
+ { "p6729.co", true },
{ "p6957.co", true },
{ "p9297.co", true },
{ "p9721.com", true },
{ "p9728.co", true },
{ "pa-w.de", true },
{ "pa.search.yahoo.com", false },
+ { "paal.network", true },
{ "paarberatung-hn.de", true },
{ "paardenhulp.nl", true },
{ "paardensportbak.nl", true },
@@ -32680,6 +33839,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pabloarteaga.xyz", true },
{ "pablofain.com", true },
{ "pabuzo.vn", true },
+ { "pacalzheimer.com", true },
{ "pacaom.com", true },
{ "pacatlantic.com", true },
{ "pacch.io", true },
@@ -32701,6 +33861,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "packetdigital.com", true },
{ "packetlinux.com", true },
{ "pact2017.nl", true },
+ { "pactandoconlamoda.com", true },
{ "pactf.com", true },
{ "padam-group.com", true },
{ "padberx-marketing-consultants.de", true },
@@ -32710,7 +33871,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "padianda.com", true },
{ "padkit.org", true },
{ "padpilot.co", true },
- { "padrepio.in", true },
{ "padron.com.es", true },
{ "padzilla.com", true },
{ "paedlink.ca", true },
@@ -32726,6 +33886,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "page-builders.com", true },
{ "pageantsnews.com", false },
{ "pageboard.fr", true },
+ { "pagecdn.io", true },
{ "pagedesignhub.com", true },
{ "pagedesignpro.com", true },
{ "pagedesignweb.com", true },
@@ -32736,6 +33897,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pagina394.com.br", true },
{ "paginaweb4u.com", true },
{ "pagure.io", true },
+ { "pagure.org", true },
{ "pahae.de", false },
{ "pahealthbilling.com", true },
{ "pahlawanpulsa.com", true },
@@ -32746,10 +33908,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paintball-ljubljana.si", true },
{ "paintball-shop.sk", true },
{ "paintcolorsbysue.com", true },
- { "paintingindurban.co.za", true },
+ { "paintersgc.com.au", true },
{ "paipuman.jp", true },
{ "pajadam.me", true },
{ "pajuvuo.fi", true },
+ { "pakaranggrek.com", true },
{ "paketo.cz", true },
{ "paketo.sk", true },
{ "paketwatch.de", false },
@@ -32769,9 +33932,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "palavatv.com", true },
{ "palazzo.link", true },
{ "palebluedot.de", true },
+ { "palembal.fr", true },
{ "paleo.io", true },
{ "paleodietfoodlist.com", true },
{ "paleodietrecipes.com", true },
+ { "paleolowcarb.de", true },
{ "paleorecipepro.com", true },
{ "paleoso.com", true },
{ "palermopride.it", true },
@@ -32824,6 +33989,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "panda.tf", true },
{ "pandaltd.nl", true },
{ "pandemicflu.gov", true },
+ { "pandiora.pw", true },
+ { "pandit.tech", true },
{ "pandkonijn.nl", true },
{ "pandoraflora.com", true },
{ "pandymic.com", true },
@@ -32831,6 +33998,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paneldoorsolutions.com", true },
{ "paneu.de", true },
{ "panevo.com", true },
+ { "pangoly.com", true },
{ "panhandlemenshealth.com", true },
{ "panic.tk", true },
{ "panier-legumes.bio", true },
@@ -32838,11 +34006,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paninohome.com", true },
{ "paniodpolskiego.eu", true },
{ "paniyanovska.ua", true },
- { "panj.ws", true },
{ "panjiva.com", true },
{ "panmetro.com", true },
{ "panopy.co", true },
{ "panopy.me", true },
+ { "panoramichq.com", true },
{ "panpa.ca", true },
{ "panpsychism.com", true },
{ "panpsychist.com", true },
@@ -32850,12 +34018,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pantallasled.mx", true },
{ "pantallasyescenarios.com", true },
{ "pantheoncrafters.com", true },
+ { "pantherage.co.uk", true },
{ "panthur.com.au", false },
{ "pantographe.info", true },
{ "pantou.org", false },
{ "pants-off.xyz", true },
{ "panzer72.ru", true },
- { "panzerscreen.dk", true },
{ "paolotagliaferri.com", true },
{ "pap.la", false },
{ "papa-webzeit.de", true },
@@ -32874,13 +34042,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "papersmart.net", true },
{ "papertracker.net", true },
{ "paperturn.com", true },
+ { "paperworld.online", true },
{ "paperwritinghelp.net", true },
{ "papiermakerijdehoop.nl", true },
{ "papiermeteenverhaal.nl", true },
{ "papierniczy.eu", true },
{ "papillon-events.be", true },
{ "papion.it", true },
- { "papiweb.ca", true },
{ "paprikas.fr", true },
{ "paraborsa.net", true },
{ "parachute70.com", true },
@@ -32908,12 +34076,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "parcon.it", true },
{ "parcoursup.fr", true },
{ "pareachat.com", true },
+ { "paremvasi.net", true },
{ "parentelement.com", true },
{ "parentheseardenne.be", true },
{ "parentinterview.com", true },
+ { "parents-as-allies.com", true },
{ "parentsandzebrasunited.com", true },
{ "parentsintouch.co.uk", true },
- { "paris-store.com", true },
{ "parisackerman.com", true },
{ "parisbloom.com", true },
{ "parisderriere.fr", true },
@@ -32922,6 +34091,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "parisfranceparking.de", true },
{ "parisfranceparking.fr", true },
{ "parisfranceparking.nl", true },
+ { "parisprovincedemenagements.fr", true },
{ "parkeren.in", true },
{ "parkerplumbingcompany.com.au", true },
{ "parkhost.eu", true },
@@ -32935,6 +34105,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "parlamento.gub.uy", true },
{ "parleamonluc.fr", true },
{ "parleu2016.nl", true },
+ { "parleur.net", true },
+ { "parltrack.org", true },
{ "parmels.com.br", true },
{ "parnassys.net", true },
{ "parnizaziteksasko.cz", true },
@@ -32942,6 +34114,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "parolu.io", true },
{ "parquettista.milano.it", true },
{ "parquettista.roma.it", true },
+ { "parrilladasparaeventos.com", true },
{ "parrocchiamontevecchia.it", true },
{ "parry.org", true },
{ "parsdev.ir", true },
@@ -32958,6 +34131,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "partnercardservices.com", true },
{ "partnermobil.de", true },
{ "partnertaxhub.com", true },
+ { "partoenagua.org", true },
{ "partou.de", true },
{ "partridge.tech", true },
{ "parts4phone.com", true },
@@ -32965,9 +34139,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "parturi-manner.fi", true },
{ "partusedtyres.net", true },
{ "party-and-play.co.uk", true },
- { "party-calendar.net", true },
{ "party-kneipe-bar.com", true },
{ "party-time-inflatables-durham.co.uk", true },
+ { "partyausstatter24.de", true },
{ "partybounceplay.co.uk", true },
{ "partycentrumopenhuis.nl", true },
{ "partyhelfer.ch", true },
@@ -32999,7 +34173,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pascalmathis.com", true },
{ "pascalmathis.me", true },
{ "pascalmathis.net", true },
- { "pascalspoerri.ch", false },
{ "pascualinmuebles.com", true },
{ "pasearch.nl", true },
{ "pashminacachemire.com", true },
@@ -33015,6 +34188,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "passionatehorsemanship.com", true },
{ "passionatelife.com.au", true },
{ "passionebenessere.com", true },
+ { "passionfiat.fr", true },
{ "passionpictures.eu", true },
{ "passions-art.com", true },
{ "passover-fun.com", true },
@@ -33055,7 +34229,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pasztor.at", true },
{ "patapwn.com", true },
{ "patatbesteld.nl", true },
- { "pataterosviajeros.com", true },
{ "patbatesremodeling.com", false },
{ "patdorf.com", true },
{ "patechmasters.com", true },
@@ -33068,11 +34241,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "patikabiztositas.hu", true },
{ "patineteselectricosbaratos.net", true },
{ "patric-lenhart.de", true },
+ { "patriciaandpaul.com", true },
{ "patrick-omland.de", true },
{ "patrick-omland.eu", true },
{ "patrick-othmer.de", true },
{ "patrick-robrecht.de", true },
{ "patrick.my-gateway.de", true },
+ { "patrick21.ch", true },
{ "patrickaudley.ca", true },
{ "patrickaudley.com", true },
{ "patrickbrosi.de", true },
@@ -33082,8 +34257,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "patrikgarten.de", true },
{ "patriksima.cz", true },
{ "patriksimek.cz", true },
+ { "patrikzk.eu", true },
{ "patriotstationatchalfont.com", true },
{ "patrocinio.com.br", true },
+ { "patrol-x.com", true },
{ "patrykwegrzynek.pl", true },
{ "patrz.eu", true },
{ "patsch-photography.de", true },
@@ -33098,7 +34275,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paul-barton.co.uk", true },
{ "paul.reviews", true },
{ "pauladamsmith.com", true },
- { "paulbakaus.com", true },
{ "paulbdelaat.nl", true },
{ "paulbramhall.uk", true },
{ "paulchen.at", true },
@@ -33124,18 +34300,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paulwatabe.com", true },
{ "paulwendelboe.com", true },
{ "pauly-stahlhandel.com", true },
- { "pauly-stahlhandel.de", true },
{ "pautadiaria.com", true },
{ "pavamtio.cz", true },
{ "pavando.com", true },
{ "pavelfojt.cz", true },
{ "pavelrebrov.com", true },
- { "pavelstriz.cz", true },
{ "paw.cloud", true },
{ "paw.pt", true },
{ "pawel-international.com", true },
{ "pawelnazaruk.com", true },
{ "pawelurbanek.com", true },
+ { "pawgearlab.com", true },
+ { "pawnkingloansmore.com", true },
{ "pawspuppy.com", true },
{ "pawsr.us", true },
{ "pawsru.org", true },
@@ -33143,7 +34319,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paxerahealth.com", true },
{ "pay-online.in", true },
{ "pay.gov", true },
+ { "pay.mg", true },
{ "paya.cat", true },
+ { "paybook.co.tz", true },
{ "payboy.biz", true },
{ "payboy.rocks", true },
{ "paybro.eu", true },
@@ -33160,13 +34338,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "payments.google.com", true },
{ "payments.gy", true },
{ "paymerang.com", true },
- { "paymill.com", true },
- { "paymill.de", true },
+ { "paymongo.com", true },
{ "paynet.com.co", true },
{ "payoff.com", true },
{ "paypal.com", true },
{ "paypaq.com", true },
{ "paypro.nl", false },
+ { "payps.ru", true },
{ "payroll.myftp.org", true },
{ "payroll.xero.com", false },
{ "paysbuy.net", true },
@@ -33178,6 +34356,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paytonmoledor.com", true },
{ "payupay.ru", true },
{ "pb.ax", false },
+ { "pborn.eu", true },
{ "pbosquet.com", true },
{ "pbourhis.me", true },
{ "pbr.so", true },
@@ -33186,9 +34365,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pbrumby.com", true },
{ "pbz.im", true },
{ "pc-rescue.me", false },
- { "pc-servis-brno.com", true },
{ "pc-warriors.com", true },
{ "pc28yc.com", true },
+ { "pcatv.org", true },
{ "pccentral.nl", true },
{ "pcdocjim.com", true },
{ "pcel.com", true },
@@ -33204,9 +34383,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pclob.gov", true },
{ "pcloud.com", true },
{ "pcmkrembangan.or.id", true },
- { "pcmobile.tech", true },
{ "pcmr.info", true },
{ "pcnotdienst-oldenburg-rastede.de", true },
+ { "pcprkolo.pl", true },
+ { "pcr24.ru", true },
{ "pcrypt.org", true },
{ "pcs.org.au", true },
{ "pcs2.gr", true },
@@ -33216,7 +34396,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pctrouble.net", true },
{ "pculiar.com", true },
{ "pcunderground.com.ar", true },
- { "pd2bans.org", true },
+ { "pcw.gov.ph", false },
{ "pdf-archive.com", true },
{ "pdfconvert.me", true },
{ "pdfmint.com", true },
@@ -33226,14 +34406,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pdfsearches.com", true },
{ "pdkrawczyk.com", true },
{ "pdox.net", true },
- { "pdragt.com", true },
{ "pdxtowncar.net", true },
{ "pe-bank.jp", true },
{ "pe.search.yahoo.com", false },
+ { "peaceandjava.com", true },
{ "peacedivorce.com", true },
{ "peaceispossible.cc", true },
{ "peaceloveandlabor.com", true },
- { "peak-careers.com", true },
{ "peakhomeloan.com", true },
{ "peaksloth.com", true },
{ "peanutbase.org", true },
@@ -33265,8 +34444,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pedimoda.com.br", true },
{ "pedro.com.es", true },
{ "pedrosaurus.com", true },
- { "pedrosluiter.nl", true },
- { "pedroventura.com", false },
{ "peeekaaabooo.com", true },
{ "peekier.com", true },
{ "peep.gq", true },
@@ -33296,6 +34473,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "peername.com", true },
{ "peernode.net", true },
{ "peertube.social", true },
+ { "peertube.uno", true },
{ "peervpn.net", true },
{ "peerweb.com", true },
{ "peetah.com", true },
@@ -33306,11 +34484,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "peifi.de", false },
{ "peippo.at", true },
{ "pekarstvivetvrzi.cz", true },
+ { "pekinet.com", true },
{ "pekkapleppanen.fi", true },
{ "pekoe.se", true },
{ "pelanucto.cz", true },
{ "pelican.ie", true },
{ "pellet.pordenone.it", true },
+ { "pelletizermill.com", true },
{ "pelletsprice.com", true },
{ "pelopogrund.com", true },
{ "pelopoplot.com", true },
@@ -33327,11 +34507,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pendriveapps.com", true },
{ "penetrationstest.se", true },
{ "penfold.fr", true },
- { "pengepung.com", true },
{ "pengi.me", true },
{ "penguinbits.net", true },
{ "penguindrum.moe", true },
{ "penguinprotocols.com", true },
+ { "peniarth.cymru", true },
{ "penispumpen.se", true },
{ "pennergold.net", true },
{ "pennington.io", true },
@@ -33344,13 +34524,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pensioenfonds-ey.nl", true },
{ "pension-am-alten-waschhaus.de", true },
{ "pensionecani.milano.it", true },
+ { "pensionecani.roma.it", true },
{ "pensionpilot.ca", true },
{ "pensiunea-paco.ro", true },
{ "pensiunealido.ro", true },
{ "penslabyrinth.com", true },
{ "pentagonreviewcenter.com.ph", true },
- { "pentandra.com", true },
{ "pentatec.de", true },
+ { "pentechealth.com", true },
{ "pentest.blog", true },
{ "pentest.nl", true },
{ "pentesterlab.com", true },
@@ -33385,6 +34566,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "perevedi.org", true },
{ "perezdecastro.org", true },
{ "perfect-carstyle.de", true },
+ { "perfect-privacy.com", true },
{ "perfect.in.th", true },
{ "perfectbalance.tech", true },
{ "perfectcloud.org", true },
@@ -33399,7 +34581,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "performancehealth.com", false },
{ "performing-art-schools.com", true },
{ "perfumes.com.br", true },
- { "perge.com.br", true },
+ { "perfumestudio.in", true },
{ "periodex.co", true },
{ "periodic-drinking.com", true },
{ "periscope.tv", true },
@@ -33409,6 +34591,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "permajackofstlouis.com", true },
{ "permaseal.net", true },
{ "permeance108.com", true },
+ { "permiscoderoute.fr", true },
{ "permisecole.com", true },
{ "permistheorique.be", true },
{ "permistheoriqueenligne.be", true },
@@ -33437,7 +34620,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pestcontrol.co.uk", true },
{ "pestici.de", true },
{ "pet-hotel-mura.net", true },
- { "pet-tekk.co.uk", true },
{ "petabits.de", true },
{ "petalkr.com", true },
{ "petaouchnok.ch", true },
@@ -33446,7 +34628,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "petdesign.pet", true },
{ "petech.ro", true },
{ "petelew.is", true },
- { "peter-hurtenbach.de", true },
{ "peter.org.ua", true },
{ "peterandjoelle.co.uk", true },
{ "peterbarrett.ca", true },
@@ -33482,6 +34663,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "petpost.co.nz", false },
{ "petpower.eu", true },
{ "petr.as", true },
+ { "petrachuk.ru", true },
{ "petrasestakova.cz", true },
{ "petravdbos.nl", true },
{ "petresort.pt", true },
@@ -33492,7 +34674,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "petrsvec.cz", true },
{ "petrucciresidential.com", true },
{ "petruzz.net", true },
- { "pets4life.com.au", true },
{ "petschnighof.at", true },
{ "pettitcoat.com", true },
{ "petto.com.co", true },
@@ -33517,6 +34698,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pflan.dk", true },
{ "pflanzen-shop.ch", true },
{ "pflanzenshop-emsland.de", true },
+ { "pflegesalon-siebke.de", true },
{ "pflug.email", true },
{ "pfmeasure.com", true },
{ "pfotentour-berlin.de", true },
@@ -33558,7 +34740,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "phcorner.net", true },
{ "phellowseven.com", true },
{ "phelx.de", true },
- { "phen-garcinia.info", true },
{ "phenixairsoft.com", true },
{ "phenq.com", true },
{ "phget.com", true },
@@ -33566,15 +34747,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "phi-works.com", true },
{ "phibureza.com", true },
{ "phil-dirt.com", true },
- { "phil-phillies.com", true },
{ "phil.red", true },
{ "phil.tw", true },
{ "philadelphia.com.mx", true },
{ "phildonaldson.com", true },
{ "phileas-psychiatrie.be", true },
{ "philia-sa.com", true },
+ { "philia.de", true },
{ "philipdb.com", true },
{ "philipdb.nl", true },
+ { "philiperiksson.se", true },
{ "philipkobelt.ch", true },
{ "philipp-trulson.de", false },
{ "philipp-winkler.de", true },
@@ -33583,6 +34765,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "philippe-mignotte.fr", true },
{ "philippebonnard.fr", true },
{ "philipperoose.be", true },
+ { "philippestudiopro.com", true },
{ "philippheenen.de", false },
{ "philippinedroneassociation.org", true },
{ "philippkeschl.at", true },
@@ -33604,13 +34787,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "philsturgeon.uk", true },
{ "philux.ch", true },
{ "phishingusertraining.com", true },
- { "phoenics.de", false },
+ { "phive.eu", true },
{ "phoenixlogan.com", true },
{ "phoenixnest.ltd", true },
{ "phoenixurbanspaces.com", true },
{ "phographer.com", true },
{ "pholder.com", true },
{ "phone-service-center.de", true },
+ { "phone888.cn", true },
+ { "phonedoc.it", true },
+ { "phonefleet.fr", true },
+ { "phonemore.com", true },
{ "phonenumber-info.co.uk", true },
{ "phormance.com", true },
{ "phosagro.biz", false },
@@ -33618,6 +34805,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "phosagro.ru", false },
{ "phosphene.io", true },
{ "photistic.org", true },
+ { "photo-castings.com", true },
{ "photo-livesearch.com", true },
{ "photo-paysage.com", true },
{ "photo.org.il", true },
@@ -33628,7 +34816,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "photofilmcamera.com", true },
{ "photographe-reims.com", true },
{ "photography-workshops.net", true },
- { "photolium.net", false },
+ { "photolessya.by", true },
{ "photomodelcasting.com", true },
{ "photosafari.com.my", true },
{ "photosafaribg.com", true },
@@ -33646,7 +34834,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "phpdorset.co.uk", true },
{ "phpliteadmin.org", true },
{ "phpmyadmin.net", true },
- { "phpower.com", true },
+ { "phpmynewsletter.com", true },
{ "phpprime.com", true },
{ "phpsecure.info", true },
{ "phpstan.org", true },
@@ -33655,21 +34843,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "phulyshop.com", true },
{ "phurl.de", true },
{ "phurl.io", true },
- { "phus.lu", true },
{ "phyley.com", true },
{ "physicalism.com", true },
{ "physicalist.com", true },
- { "physicentrix.ca", true },
+ { "physicpezeshki.com", false },
{ "physics-schools.com", true },
{ "physik.hu", true },
+ { "physiobiggerawaters.com.au", true },
+ { "physiobroadbeach.com.au", true },
{ "physiotherapie-seiwald.de", true },
{ "physiovesenaz.ch", true },
{ "pi-control.de", true },
{ "pi-dash.com", true },
{ "pi-net.dedyn.io", true },
{ "pi-supply.com", true },
+ { "pi3kum.com", true },
{ "pianetaottica.com", true },
- { "pianetaottica.it", true },
{ "pianetatatuaggi.it", true },
{ "pianomover.co.uk", true },
{ "pianos.de", true },
@@ -33677,11 +34866,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "piatabrasil.com.br", true },
{ "piboubes.me", true },
{ "pic.gov", false },
- { "pic.sr", true },
{ "pic2map.com", true },
{ "picchietti.io", true },
{ "piccirello.com", true },
{ "piccolo-parties.co.uk", true },
+ { "picka.gift", true },
{ "pickabrain.fr", true },
{ "pickelhaubes.com", true },
{ "pickersurvey.org", true },
@@ -33710,6 +34899,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "piekacz.eu.org", true },
{ "piekacz.net", true },
{ "piekacz.tel", true },
+ { "pieland.eu", true },
{ "pieldenaranja.com", true },
{ "piem.org", true },
{ "piening.ddns.net", true },
@@ -33724,7 +34914,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pierrefv.com", true },
{ "pierreyvesdick.fr", true },
{ "pierrickdeniel.fr", true },
- { "pietechsf.com", true },
{ "pieter-verweij.nl", true },
{ "pieterbos.nl", true },
{ "pieterdev.net", true },
@@ -33732,7 +34921,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pietermaene.be", false },
{ "pietz.uk", true },
{ "pif.email", true },
- { "pig.name", true },
+ { "pigliadesigns.com", true },
{ "pigs.pictures", true },
{ "pijuice.com", true },
{ "pijusmagnificus.com", true },
@@ -33747,7 +34936,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pillitteriobgyn.com", true },
{ "pillowfort.pub", true },
{ "pilot-colleges.com", true },
- { "pilot.co", true },
{ "pilotgrowth.com", true },
{ "pilsoncontracting.com", true },
{ "pilvi.pw", true },
@@ -33772,6 +34960,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pingworks.eu", true },
{ "pingworks.net", true },
{ "pinhadigital.com", true },
+ { "pinheirofrio.pt", true },
{ "pinimg.com", true },
{ "pinkapple.com", true },
{ "pinkbike.com", true },
@@ -33784,7 +34973,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pinkoi.com", true },
{ "pinkwalk.co.nz", true },
{ "pinkylam.me", true },
- { "pinnacleallergy.net", true },
+ { "pinnacle-tex.com", true },
{ "pinnaclelife.co.nz", true },
{ "pinot.it", true },
{ "pinoydailytvshow.net", true },
@@ -33804,13 +34993,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pinterest.jp", true },
{ "pinterjann.is", true },
{ "pintiaux.com", true },
- { "pintosbeeremovals.co.za", true },
- { "pintoselectricfencing.co.za", true },
- { "pintosplumbing.co.za", true },
- { "pinup-app.com", true },
{ "pioneer-car.eu", true },
{ "pioneer-rus.ru", true },
{ "pipenny.net", true },
+ { "pipeuro.com", true },
{ "pipfrosch.com", true },
{ "piramalglassusa.com", true },
{ "pirapiserver.ddns.net", true },
@@ -33822,7 +35008,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pirateproxy.bet", true },
{ "pirateproxy.cam", true },
{ "pirateproxy.cat", true },
- { "pirateproxy.cc", true },
+ { "pirateproxy.ch", true },
{ "pirateproxy.gdn", true },
{ "pirateproxy.id", true },
{ "pirateproxy.ist", true },
@@ -33839,6 +35025,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "piratesforums.co", true },
{ "pircher.co.uk", true },
{ "pires.ovh", true },
+ { "pirman.es", true },
{ "piroleikki.co.jp", true },
{ "piruchita.com", true },
{ "pirxpilot.me", true },
@@ -33853,25 +35040,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pitaiatrade.com", true },
{ "pitbullsecuritysolutions.ca", true },
{ "pitch.vip", true },
- { "pitchup.com", true },
{ "pitchupp.com", true },
{ "pitfire.io", true },
{ "pitot-rs.org", true },
{ "pitshift.com", true },
{ "piu.moe", true },
{ "piubip.com.br", true },
+ { "piucellulare.it", true },
{ "pivniraj.com", true },
{ "pivotaltracker.com", true },
{ "pivotanimation.org", true },
{ "pivovarcunak.cz", true },
- { "piwko.co", true },
{ "pix5.de", true },
{ "pixe2019.org", true },
{ "pixel-kraft.de", true },
{ "pixel.facebook.com", false },
{ "pixel.google.com", true },
+ { "pixelabs.fr", true },
{ "pixelbash.de", true },
{ "pixelcomunicacion.com", true },
+ { "pixelcubed.com", true },
{ "pixelminers.net", true },
{ "pixelpirat.ch", true },
{ "pixelsquared.us", true },
@@ -33891,7 +35079,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pizzagigant.hu", true },
{ "pizzahut.ru", true },
{ "pizzalongaway.it", true },
- { "pizzamc.eu", true },
{ "pizzeria-mehrhoog.de", true },
{ "pizzeriaamadeus.hr", true },
{ "pizzeriacolore.com", true },
@@ -33903,6 +35090,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pjuu.com", false },
{ "pk.search.yahoo.com", false },
{ "pk8k.com", true },
+ { "pkdhungthinh.com", true },
{ "pkeus.de", true },
{ "pkgt.de", false },
{ "pkirwan.com", true },
@@ -33911,6 +35099,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pkphotobooths.co.uk", true },
{ "pkrank.com", true },
{ "pksps.com", true },
+ { "pkvitality.com", true },
{ "pl-cours.ch", true },
{ "pl.search.yahoo.com", false },
{ "placasonline.com.br", true },
@@ -33926,16 +35115,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "plainjs.com", true },
{ "plainmark.com", true },
{ "plaintech.net.au", true },
+ { "plaintextpledge.com", true },
{ "plaisirdumouvement.com", true },
{ "plan-immobilier.fr", true },
{ "plan-it-events.de", true },
{ "planboardapp.com", true },
{ "planecon.nz", true },
- { "planer.me", true },
{ "planespotterblog.de", true },
{ "planet-work.com", true },
+ { "planet.live", true },
{ "planetanim.fr", true },
- { "planetarian.moe", true },
{ "planetarydesign.com", true },
{ "planetasuboficial.com.br", true },
{ "planetau2.com", true },
@@ -33945,6 +35134,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "planeteroliste.fr", true },
{ "planetknauer.net", true },
{ "planetofthegames.tv", true },
+ { "planetofwoman.com", true },
+ { "planetofwomen.net", true },
{ "planetromeo.com", true },
{ "planetromeofoundation.org", true },
{ "planetsoftware.com.au", true },
@@ -33964,7 +35155,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "planteforum.no", true },
{ "plantekno.com", true },
{ "plantes.ch", true },
- { "plantezcheznous.com", true },
{ "plantron.gr", true },
{ "plantroon.com", true },
{ "plantrustler.com", true },
@@ -33973,10 +35163,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "planview.com", true },
{ "plaque-funeraire.fr", true },
{ "plaque-immatriculation-auto.com", true },
+ { "plaros.ml", true },
{ "plasdeck.me", true },
{ "plassmann.ws", true },
{ "plastic-id.com", true },
{ "plasticbags.co.uk", true },
+ { "plasticstare.com", true },
{ "plasticsurgerynola.com", true },
{ "plasticsurgeryservices.com", true },
{ "plastovelehatko.cz", true },
@@ -34007,6 +35199,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "playsharp.com", true },
{ "playsnake.org", true },
{ "playsprout.industries", true },
+ { "playstationtrophies.org", true },
{ "playtictactoe.org", true },
{ "playtimebouncycastles.co.uk", true },
{ "playtopia.com", true },
@@ -34031,9 +35224,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "plesse.pl", true },
{ "plevenlab.org", true },
{ "plexa.de", true },
+ { "plexbpvr.ddns.net", true },
{ "plexhome13.ddns.net", true },
{ "plexmark.tk", true },
- { "plexnet.cz", true },
{ "plextv.de", true },
{ "plicca.com", true },
{ "plichso.de", true },
@@ -34047,7 +35240,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ploi.io", true },
{ "plokko.com", true },
{ "plongee-phuket.fr", true },
- { "ploofer.com", true },
{ "plot.ly", true },
{ "plotbubble.com", true },
{ "ploxel.com", true },
@@ -34057,31 +35249,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "plugcubed.net", false },
{ "plugin-planet.com", true },
{ "pluginfactory.io", true },
+ { "plugins-telechargement.com", true },
{ "pluginsloaded.com", true },
{ "pluimveeplanner.nl", true },
{ "plumber-in-sandton.co.za", true },
{ "plumbercincoranch.com", true },
- { "plumbermountedgecombe.co.za", true },
- { "plumberumhlangarocks.co.za", true },
{ "plumbing-arlington.com", true },
{ "plumbingandheatingspecialistnw.com", true },
{ "plumbingbenoni.co.za", true },
{ "plumbingcentral.com.au", true },
- { "plumbingglenvista.co.za", true },
{ "plumbingkingsllc.com", true },
{ "plumlocosoft.com", true },
- { "plumnet.ch", true },
{ "plumpie.net", false },
{ "plur.com.au", true },
{ "plural.cafe", true },
- { "plurr.me", true },
- { "plurr.us", true },
{ "plus-5.com", true },
{ "plus.google.com", false },
{ "plus.sandbox.google.com", true },
{ "pluscbdoil.com", true },
{ "pluslink.co.jp", true },
- { "plusminus30.si", true },
+ { "plusmobile.fr", true },
{ "plusstreamfeed.appspot.com", true },
{ "plustech.id", true },
{ "pluta.net", true },
@@ -34100,6 +35287,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pm13.cz", true },
{ "pm13.org", true },
{ "pm25.im", true },
+ { "pma-iss.com", true },
{ "pmaene.be", false },
{ "pmalaty.com", true },
{ "pmarques.info", true },
@@ -34115,7 +35303,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pmnaish.co.uk", true },
{ "pmoreau.org", true },
{ "pmp-art.com", true },
- { "pms.myiphost.com", true },
+ { "pmsacorp.com", true },
{ "pmsf.eu", true },
{ "pmt-documenten.nl", true },
{ "pn.id.lv", true },
@@ -34137,6 +35325,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pocketfruity.com", true },
{ "pocketinsure.com", true },
{ "pocketpasta.com", true },
+ { "pocze.ch", true },
{ "poddr.co", true },
{ "podemos.info", true },
{ "podia.com.gr", false },
@@ -34151,6 +35340,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "poezja.com.pl", true },
{ "poffenhouse.ddns.net", true },
{ "pogera.com", true },
+ { "pogetback.pl", true },
{ "pogoswine.com", true },
{ "pogotowiekomputeroweolsztyn.pl", true },
{ "pogrebisky.net", true },
@@ -34158,20 +35348,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pohlmann.io", true },
{ "poinsot.info", true },
{ "pointaction.com", true },
- { "pointcab.vn", true },
{ "pointforwardinc.net", true },
- { "pointhost.de", true },
{ "pointiswunderland.de", true },
{ "pointmaquininha.com", true },
- { "pointsgame.net", true },
{ "pointsixtyfive.com", true },
{ "pointum.com", true },
{ "poiru.net", true },
{ "poitiers-ttacc-86.eu.org", true },
{ "pojer.me", true },
{ "pokazy-iluzji.pl", true },
+ { "poke.blue", true },
{ "pokefarm.com", true },
{ "pokeinthe.io", true },
+ { "pokeli.de", true },
{ "pokemondb.net", true },
{ "pokemonlab.com", true },
{ "pokemonsimulator.com", true },
@@ -34182,9 +35371,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pokrowcecardo.pl", true },
{ "polaire.org", true },
{ "polanda.com", true },
- { "polar-baer.com", true },
{ "polarfisk.com", true },
{ "pole-emotion.ch", true },
+ { "pole-et-motion.fr", true },
{ "poleacademie.com", true },
{ "poles4pilots.com", true },
{ "police-schools.com", true },
@@ -34210,7 +35399,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "polishwomen.com", true },
{ "polit.im", true },
{ "politic.org.ua", true },
- { "politicachubut.com.ar", true },
{ "political-science-schools.com", true },
{ "politiezoneriho.be", true },
{ "politik-bei-uns.de", true },
@@ -34222,6 +35410,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pollev.com", true },
{ "polleverywhere.com", true },
{ "pollingplace.uk", true },
+ { "polly.spdns.org", true },
{ "polomack.eu", true },
{ "poloniainfo.com", true },
{ "polska-robota.com.ua", true },
@@ -34238,14 +35427,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "polypane.rocks", true },
{ "polypet.com.sg", true },
{ "polyr.xyz", true },
- { "polytarian.com", true },
{ "polytekniskforening.dk", true },
{ "pomar.club", false },
+ { "pomegranate.productions", true },
{ "pomelo-paradigm.com", true },
{ "pomfe.co", true },
{ "pomfeed.fr", true },
{ "pommedepain.fr", true },
- { "pommetelecom.fr", true },
{ "pomockypredeti.sk", true },
{ "pomocniczy.eu.org", true },
{ "pompiers-martigny.ch", true },
@@ -34260,7 +35448,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pony-cl.co.jp", true },
{ "pony.tf", true },
{ "ponychan.net", true },
- { "ponycyclepals.co.uk", true },
{ "ponydesignclub.nl", true },
{ "ponyfoo.com", true },
{ "poodleassassin.com", true },
@@ -34284,10 +35471,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "popcultureshack.com", true },
{ "popeyes.com", true },
{ "popinga.it", true },
+ { "popitsnack.com", true },
{ "popmagz.com", true },
{ "popoway.cloud", true },
{ "popoway.me", true },
- { "poppetsphere.de", true },
{ "poptimize.net", true },
{ "population-ethics.com", true },
{ "popvitrin.com", true },
@@ -34297,6 +35484,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "porg.es", true },
{ "pork.org.uk", true },
{ "porkel.de", true },
+ { "porkyx.com", true },
{ "porn2019.tk", true },
{ "porn77.info", true },
{ "pornagent.de", true },
@@ -34316,6 +35504,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pornmax.net", true },
{ "pornmega.net", true },
{ "porno-gif.ru", true },
+ { "porno-stars-video.ru", true },
{ "pornofilmovi.us", true },
{ "pornohub.su", true },
{ "pornomens.be", true },
@@ -34324,7 +35513,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pornport.org", true },
{ "pornshop.biz", true },
{ "pornsocket.com", true },
- { "pornspider.to", true },
{ "pornstop.net", true },
{ "pornsuper.net", true },
{ "pornteddy.com", true },
@@ -34346,7 +35534,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "portercup.com", true },
{ "porterranchelectrical.com", true },
{ "portesmagistral.com", true },
- { "portofacil.com", true },
{ "portofala.pt", true },
{ "portofrotterdam.com", false },
{ "portosonline.pl", true },
@@ -34356,9 +35543,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "portugalsko.net", true },
{ "porybox.com", true },
{ "pos.co.tz", true },
- { "posalji.me", true },
{ "posaunenchor-senden.de", true },
{ "posbank.co.uk", true },
+ { "posbich.net", true },
{ "poschtiliste.ch", true },
{ "poseidonwaterproofing.com", true },
{ "poshcastles.co.uk", true },
@@ -34366,6 +35553,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "poshsecurity.com", true },
{ "positionus.io", true },
{ "positive.com.cy", true },
+ { "positiveaffirmationscenter.com", true },
{ "poslusny.com", true },
{ "posobota.cz", true },
{ "post-darwinian.com", true },
@@ -34392,7 +35580,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "postimages.org", true },
{ "postimg.cc", true },
{ "postmatescode.com", true },
- { "postn.eu", true },
{ "postpot.co.kr", true },
{ "postsubmeta.net", true },
{ "posttigo.com", true },
@@ -34401,7 +35588,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "potato.im", true },
{ "potatofrom.space", true },
{ "potatopro.com", true },
+ { "potatotee.com", true },
{ "potatron.tech", true },
+ { "potature.it", true },
+ { "potature.org", true },
{ "potature.rimini.it", true },
{ "potature.roma.it", true },
{ "potbar.com", true },
@@ -34420,6 +35610,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "potworowski.de", true },
{ "potzwonen.nl", true },
{ "poudlard.fr", true },
+ { "poundgatepark.co.uk", true },
{ "poundwholesale.co.uk", true },
{ "pourlesenfants.info", true },
{ "pouwels-oss.nl", true },
@@ -34447,13 +35638,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "powersergholdings.com", true },
{ "powersergthisisthetunnelfuckyouscott.com", true },
{ "powersergthisisthewebsitefuckyouscott.com", true },
- { "powerwashingproslosangeles.com", true },
{ "powerwellness-korecki.de", true },
{ "pozemedicale.org", true },
+ { "pozitive.pl", true },
{ "pozlife.net", true },
+ { "poznajrynek.pl", true },
{ "pp-server.com", true },
{ "pp3345.net", true },
{ "pp5197.co", true },
+ { "pp6729.co", true },
+ { "pp6729.com", true },
{ "pp6957.co", true },
{ "pp9297.co", true },
{ "pp9397.com", true },
@@ -34470,11 +35664,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ppoozl.com", true },
{ "ppro.com", true },
{ "pptavmdata.org", true },
+ { "ppuu.org", true },
{ "ppy.la", true },
{ "ppy.sh", true },
{ "pr.search.yahoo.com", false },
{ "pr1sm.com", true },
{ "pr2studio.com", true },
+ { "pr3.space", true },
{ "prac.to", true },
{ "pracevjihlave.cz", true },
{ "pracowniatkanin.com", true },
@@ -34483,7 +35679,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "practiceflow.nl", true },
{ "practicepanther.com", true },
{ "practisforms.com", true },
- { "practixdevelopment.com", true },
{ "practo.com", true },
{ "pracujwunii.pl", true },
{ "praderarestaurant.co.uk", true },
@@ -34497,6 +35692,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pragueswim.cz", true },
{ "praha-9.eu", true },
{ "prajwal-koirala.com", true },
+ { "prajwalkoirala.com", true },
{ "prakhar.uk", true },
{ "prakharprasad.com", true },
{ "praktijkdevecht.nl", true },
@@ -34504,23 +35700,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "praktiker.hu", true },
{ "praleria.com", true },
{ "pranaprinciple.com", true },
+ { "pranita-schals.de", true },
+ { "pranita.cz", true },
+ { "pranita.sk", true },
{ "prashchar.uk", true },
{ "prateep.io", true },
{ "pratopronto.org", true },
{ "pratorotoli.it", true },
+ { "pravaha-elixirs.com", true },
{ "praxino.de", false },
{ "praxis-dingeldey.de", true },
{ "praxis-familienglueck.de", true },
{ "praxis-odermath.de", true },
{ "praxistipp24.com", true },
{ "prayerrequest.com", true },
- { "prayum.com", true },
{ "prc.gov", true },
+ { "pre-renewal.com", true },
{ "precept.uk.com", true },
{ "preciouslife.fr", true },
{ "preciscx.com", true },
{ "preciseassemblies.com", true },
{ "precision-tops.com", true },
+ { "precision.st", true },
{ "precisiondigital-llc.com", true },
{ "precisionmachineservice.com", true },
{ "precisionventures.com", true },
@@ -34538,7 +35739,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "preissler.co.uk", true },
{ "preload.link", true },
{ "preloaded-hsts.badssl.com", true },
- { "preludes.org", true },
{ "prelved.com", true },
{ "prelved.es", true },
{ "prelved.fi", true },
@@ -34548,18 +35748,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prelved.pl", true },
{ "prelved.se", true },
{ "preme.name", true },
+ { "premieravenue.net", true },
{ "premierbouncycastles.co.uk", true },
{ "premierdisco.co.uk", true },
+ { "premiereco.com.sg", true },
{ "premieresloges.ca", false },
{ "premierevents.ie", true },
{ "premierheart.com", true },
{ "premierjewelersjax.com", true },
{ "premiermaldives.com", true },
{ "premiermortgageservices.com", true },
+ { "premierrange.co.uk", true },
{ "premiership-predictors.co.uk", true },
{ "premioambiente.it", true },
{ "premiumcredit.am", true },
{ "premiumweb.co.id", true },
+ { "premiumwebdesign.it", true },
{ "premsarswat.me", true },
{ "premtech.nl", true },
{ "prenatalgeboortekaartjes.nl", true },
@@ -34581,6 +35785,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "presentationmedia.com", true },
{ "preserveourhillcountry.org", true },
{ "president.bg", true },
+ { "presidentialserviceawards.org", true },
{ "presidio.gov", true },
{ "prespanok.sk", true },
{ "pressakey.com", true },
@@ -34598,6 +35803,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prestige-portal.com", true },
{ "prestigebouncycastles.co.uk", true },
{ "prestigerepairs.com.au", true },
+ { "prestigesoundandlight.co.uk", true },
{ "prestonandsons.com.au", true },
{ "prestonapp.com", true },
{ "prestonbrant.com", true },
@@ -34632,8 +35838,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "princefamilylaw.co.uk", true },
{ "princessefoulard.com", true },
{ "princetonnassaupediatrics.com", true },
- { "principalsexam.com", true },
+ { "princezna.club", true },
{ "principalstest.com", true },
+ { "principalstest.review", true },
{ "principaltoolbox.com", true },
{ "principia-journal.de", true },
{ "principia-magazin.de", true },
@@ -34645,7 +35852,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "printerleasing.be", true },
{ "printertonerkopen.nl", true },
{ "printfn.com", false },
- { "printler.com", true },
{ "printmet.com", true },
{ "printus.de", true },
{ "priorite-education.com", true },
@@ -34670,7 +35876,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prioritylawyers.com.au", true },
{ "prioritynissannewportnewsparts.com", true },
{ "prismacloud.com", true },
- { "prismacloud.green", true },
{ "prismapayments.com", true },
{ "pristal.eu", true },
{ "pristinegreenlandscaping.com", true },
@@ -34696,6 +35901,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "privatebanks.uk", true },
{ "privatebin.info", true },
{ "privatecapsecurity.org", true },
+ { "privateger.me", true },
{ "privateideas.de", true },
{ "privateimarketing.com", true },
{ "privatepokertour.com", true },
@@ -34710,6 +35916,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "privea.fr", true },
{ "privelust.nl", true },
{ "priverify.com", true },
+ { "privorot-taro.com", true },
{ "privy-staging.com", true },
{ "privy.com", true },
{ "prizehometickets.com.au", true },
@@ -34741,11 +35948,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "procharter.com", true },
{ "procinorte.net", true },
{ "proclib.org", true },
+ { "proclubs.news", true },
{ "procrastinatingengineer.uk", true },
{ "procrastinationland.com", true },
{ "procreditbank-kos.com", true },
{ "procreditbank.com.al", true },
+ { "proctorauth.com", true },
{ "proctorio.com", true },
+ { "proctorio.net", true },
+ { "prodatalabs.com", true },
{ "prodct.info", true },
{ "prodietix.cz", true },
{ "prodigia.com", false },
@@ -34761,6 +35972,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "productlondon.com", true },
{ "productpeo.pl", true },
{ "products4more.at", true },
+ { "products88.com", true },
+ { "productsblockbuster.com", true },
+ { "productsbrandleader.com", true },
+ { "productscastle.com", true },
+ { "productsmansion.com", true },
{ "produkttest-online.com", true },
{ "prodware.fr", true },
{ "prodware.nl", true },
@@ -34781,15 +35997,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "profitopia.de", true },
{ "profloorstl.com", true },
{ "profmetod.com", true },
- { "proformer.io", true },
{ "proft.eu", true },
{ "profumeria.roma.it", true },
{ "progarm.org", true },
{ "progenda.be", true },
- { "progenitor.space", true },
{ "progeon.nl", true },
{ "progettograjau.com", true },
- { "progg.no", true },
{ "proggersession.com", true },
{ "proggersession.de", true },
{ "progiscad.com", true },
@@ -34807,19 +36020,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "progresswww.nl", true },
{ "prohrcloud.com", true },
{ "proimpact.it", true },
+ { "proj3ct.me", true },
{ "project.supply", true },
{ "project86fashion.com", true },
{ "projectarmy.net", false },
+ { "projectascension.io", true },
{ "projectborealisgitlab.site", true },
{ "projectbotticelli.com", true },
{ "projectforge.org", true },
+ { "projectgrimoire.com", true },
+ { "projectionpictures.com", true },
{ "projectlinuseasttn.org", true },
{ "projectmakeit.com", true },
{ "projectnom.com", true },
+ { "projectobs.com", true },
{ "projectsafechildhood.gov", true },
{ "projectsecretidentity.com", true },
{ "projectsecretidentity.org", true },
- { "projectvault.ovh", true },
{ "projectxyz.eu", true },
{ "projektarbeit-projektplanung.de", true },
{ "projektzentrisch.de", true },
@@ -34846,7 +36063,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "promohulp.nl", true },
{ "promolover.com", true },
{ "promopony.com", true },
- { "promorder.ru", true },
{ "promoscuola.net", true },
{ "promoteiq.com", true },
{ "promoterms.com.au", true },
@@ -34854,7 +36070,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "promovite.com.mx", true },
{ "promozione.info", true },
{ "promuovi.tv", true },
- { "pronto-intervento.net", true },
{ "prontocleaners.co.uk", true },
{ "prontointerventofognature.roma.it", true },
{ "prontointerventoimmediato.it", true },
@@ -34881,7 +36096,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "propshub.com", true },
{ "prosafilosofica.com.br", true },
{ "proseandleprechauns.com", true },
- { "proservices.vip", true },
{ "prospanek.cz", true },
{ "prospecto.com.au", true },
{ "prospecto.ee", true },
@@ -34894,6 +36108,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prosperops.com", true },
{ "prospo.co", true },
{ "prostohobby.ru", true },
+ { "prostoporno.love", true },
{ "prostye-recepty.com", true },
{ "prosurveillancegear.com", true },
{ "prot.ch", true },
@@ -34905,6 +36120,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "protectr.de", true },
{ "protege.moi", true },
{ "protegetudescanso.com", true },
+ { "proteh.com.ua", true },
{ "protein-riegel-test.de", true },
{ "protempore.fr", true },
{ "proteogenix-products.com", true },
@@ -34921,10 +36137,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "proust.media", false },
{ "proustmedia.de", false },
{ "prove.no", true },
- { "proveits.me", false },
{ "provence-appartements.com", true },
{ "provent.io", true },
{ "providerlijst.com", true },
+ { "providerlijst.ml", true },
{ "providerlijst.nl", true },
{ "provinciaotlavoro.it", true },
{ "provision-isr.nl", true },
@@ -34940,7 +36156,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "proxybay.bz", true },
{ "proxybay.cc", true },
{ "proxybay.co", true },
- { "proxybay.eu.org", true },
+ { "proxybay.info", true },
{ "proxybay.ist", true },
{ "proxybay.la", true },
{ "proxybay.one", true },
@@ -34950,6 +36166,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "proyectafengshui.com", true },
{ "proyecto13.com", true },
{ "prpferrara.it", true },
+ { "prpr.cloud", true },
{ "prsnlafk.com", true },
{ "prt.in.th", true },
{ "prtimes.com", true },
@@ -34957,6 +36174,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "prtscloud.ddns.net", true },
{ "pru.com.hk", true },
{ "pru.hk", true },
+ { "pruma.com.br", true },
{ "prvikvadrat.hr", true },
{ "prvnirodinna.cz", true },
{ "prylarprylar.se", true },
@@ -34985,13 +36203,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "psdsfn.com", true },
{ "psdsuc.com", true },
{ "pseek.com", true },
- { "pself.net", true },
{ "pseric.site", true },
{ "pseta.ru", true },
{ "pseudo.coffee", true },
{ "psg-calw.de", true },
{ "psg.bg", true },
{ "pshostpk.com", true },
+ { "psicanalista.milano.it", true },
{ "psici.eu", true },
{ "psicologajanainapresotto.com.br", true },
{ "psicologasandrabernal.es", true },
@@ -35017,11 +36235,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "psycho-lobby.com", true },
{ "psychoactive.com", true },
{ "psychoco.net", false },
+ { "psychometrictest.africa", true },
+ { "psychopersonnalite.com", true },
+ { "psychotechnique.africa", true },
{ "psychotechnique.be", true },
{ "psychotechnique.ch", true },
{ "psychotechniquetest.fr", true },
{ "psychotherapie-kp.de", true },
{ "psycolleges.com", true },
+ { "psylab.cc", true },
+ { "psylab.re", true },
+ { "psylab.vip", true },
{ "psytrance-pro.com", true },
{ "pt-d.ru", true },
{ "pt-server.de", true },
@@ -35032,6 +36256,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ptbi.org.pl", true },
{ "ptbx.co", true },
{ "pteceng.com", true },
+ { "pterodactyl.org.cn", true },
{ "pterodactylus.cz", true },
{ "ptfiber.com", true },
{ "ptfiber.ru", true },
@@ -35064,12 +36289,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "publisherservices.co", true },
{ "pubmire.com", false },
{ "pubreview.com.au", true },
- { "pubreviews.com", true },
{ "pucchi.net", true },
{ "pucssa.org", true },
{ "puddis.de", true },
{ "pudro.com", true },
- { "puestifiestas.mx", true },
+ { "puestifiestas.mx", false },
{ "puestosdeferia.mx", true },
{ "puggan.se", true },
{ "pugovka72.ru", true },
@@ -35098,10 +36322,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "puneflowermall.com", true },
{ "punematka.com", false },
{ "punikonta.de", true },
- { "punitsheth.com", true },
{ "punkapoule.fr", true },
{ "punknews.org", true },
{ "puntacananetwork.com", true },
+ { "puntasiho.com", true },
{ "puntcunts.com", true },
{ "punte-juwelier.nl", true },
{ "puntonium.hu", true },
@@ -35119,6 +36343,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "purenvi.ca", true },
{ "purevapeofficial.com", true },
{ "purexis.ch", true },
+ { "puripia.com", true },
{ "purityclothing.co.uk", true },
{ "purplebooth.co.uk", false },
{ "purplebricks.co.uk", true },
@@ -35136,10 +36361,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "purplestar.mobi", true },
{ "purplewindows.net", true },
{ "purplscientific.com", true },
- { "purrfectboudoir.com", true },
- { "purrfectcams.com", true },
- { "purrfectmembersclub.com", true },
- { "purrfectswingers.com", true },
{ "pursuedtirol.com", true },
{ "puryearlaw.com", true },
{ "pushers.com.mx", true },
@@ -35184,17 +36405,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pxx.io", true },
{ "py-amf.org", true },
{ "py.search.yahoo.com", false },
+ { "pya.org.tr", true },
{ "pycoder.org", true },
{ "pycrc.org", true },
{ "pycrypto.org", true },
{ "pygarage.com", false },
{ "pymesvalencia.es", true },
- { "pyopenssl.org", true },
{ "pypa.io", true },
{ "pypi.io", true },
{ "pypi.org", true },
{ "pypi.python.org", true },
- { "pyramidsofchi.com", false },
{ "pyrenees.io", true },
{ "pyrios.pro", true },
{ "pyroballpcbs.com", true },
@@ -35203,7 +36423,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "pyspace.org", true },
{ "python-hyper.org", true },
{ "python.org", false },
- { "pyxo.net", false },
{ "pyzlnar.com", true },
{ "pzpittsburgh.com", true },
{ "pzsearch.nl", true },
@@ -35216,18 +36435,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "q6729.co", true },
{ "q6729.com", true },
{ "q6957.co", true },
+ { "q8igh228tq.tk", true },
{ "q9297.co", true },
{ "q9397.com", true },
{ "q9721.com", true },
{ "q9728.co", true },
{ "qa-brandywineglobal.com", true },
- { "qa-team.xyz", true },
{ "qa.fedoraproject.org", true },
{ "qa.stg.fedoraproject.org", true },
{ "qabel.de", true },
{ "qacademy.com.au", true },
{ "qaconstrucciones.com", true },
- { "qadmium.com", true },
{ "qambarraza.com", true },
{ "qani.me", true },
{ "qaq.cloud", true },
@@ -35253,18 +36471,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qdon.space", false },
{ "qdqlh.cn", true },
{ "qe-lab.at", true },
+ { "qed.ai", true },
{ "qedcon.org", false },
{ "qelectrotech.org", true },
{ "qetesh.de", true },
{ "qetic.co.jp", true },
{ "qewc.com", true },
- { "qgblog.org", true },
{ "qgustavor.tk", true },
{ "qhse-professionals.nl", true },
{ "qianalysis.com", true },
{ "qianmo.com", true },
{ "qianqiao.me", true },
- { "qiaohong.org", true },
{ "qifu.me", true },
{ "qihl.gg", true },
{ "qiliang.wang", true },
@@ -35289,6 +36506,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qlrace.com", false },
{ "qm-marzahnnordwest.de", true },
{ "qmee.com", true },
+ { "qnickx.top", true },
{ "qoacher.com", true },
{ "qochealth.com", true },
{ "qoml.net", true },
@@ -35301,6 +36519,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qq-navi.com", true },
{ "qq5197.co", true },
{ "qq52o.me", true },
+ { "qq6177.com", true },
+ { "qq6177.net", true },
{ "qq6729.co", true },
{ "qq6729.com", true },
{ "qq6957.co", true },
@@ -35320,6 +36540,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qrpth.eu", true },
{ "qruiser.com", true },
{ "qscloud.de", true },
+ { "qtacairsoft.com", true },
{ "qtl.me", true },
{ "qtmsheep.com", true },
{ "qtn.net", true },
@@ -35333,11 +36554,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qtxh.net", true },
{ "quackerswaterproofing.com", true },
{ "quadra.srl", true },
- { "quaedam.org", true },
{ "quafe.tech", true },
{ "quagga.me", true },
{ "quaggan.co", true },
{ "quai10.org", false },
+ { "qualbe.com", true },
{ "qualitation.co.uk", true },
{ "qualite-ecole-et-formation.ch", true },
{ "quality-life.gr", true },
@@ -35348,10 +36569,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qualitypropertycare.co.uk", true },
{ "qualitywaterproofing.com", true },
{ "quallo.com", true },
- { "qualpay.biz", true },
{ "qualpay.com", true },
{ "qualtrics.com", true },
{ "quant-labs.de", true },
+ { "quantaloupe.tech", true },
{ "quanterra.ch", true },
{ "quantifiedcommerce.com", true },
{ "quantolytic.de", true },
@@ -35376,16 +36597,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qubes-os.org", true },
{ "qubyte.codes", true },
{ "quchao.com", true },
+ { "que-debo-regalar.es", true },
{ "quebajelagasolina.com", true },
{ "quebec.casa", true },
{ "quedos.com.au", true },
{ "queencomplex.net", true },
{ "queene.eu", true },
+ { "queenmargaret.ddns.net", true },
{ "queensrdapartments.com.au", true },
{ "queer.party", true },
{ "queercoders.com", false },
{ "queextensiones.com", true },
- { "quehacerencusco.com", true },
{ "quelle.at", true },
{ "quelle.ch", true },
{ "quelle.de", true },
@@ -35394,6 +36616,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "quenecesitopara.com", true },
{ "quenotejodan.cl", true },
{ "quentin-sauvetre.fr", true },
+ { "quentinaurat.com", true },
{ "quentinchevre.ch", true },
{ "queo.com.co", true },
{ "quera.ir", true },
@@ -35407,6 +36630,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "quevisiongrafica.com", true },
{ "quic.network", true },
{ "quic.stream", true },
+ { "quichante.com", true },
{ "quickassortments.com", true },
{ "quickinfosystem.com", true },
{ "quicksell.store", true },
@@ -35423,6 +36647,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "quimatic.com.br", true },
{ "quinnlabs.com", true },
{ "quinoa24.com", true },
+ { "quintenbraakman.com", true },
+ { "quintenbraakman.nl", true },
{ "quintessa.org", true },
{ "quintype.com", true },
{ "quiq-api.com", true },
@@ -35432,7 +36658,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "quirkytravelguy.com", true },
{ "quitarlasmanchasde.com", true },
{ "quitimes.com", true },
- { "quizstore.net", true },
+ { "quitsmoking.coach", true },
+ { "quizz.biz", true },
{ "qul.link", true },
{ "quli.nl", false },
{ "quote.gq", true },
@@ -35446,7 +36673,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qvg.company", true },
{ "qvggroup.com", true },
{ "qvi.st", true },
- { "qvitoo.com", true },
{ "qvq.cloud", true },
{ "qwans.nl", true },
{ "qwant.com", true },
@@ -35462,7 +36688,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "qx.fi", true },
{ "qx.se", true },
{ "qxzg.xyz", true },
- { "qxzgssr.xyz", true },
+ { "qybot.cc", true },
+ { "qybot.cn", true },
{ "r-ay.cn", true },
{ "r-rwebdesign.com", true },
{ "r-t-b.fr", true },
@@ -35470,7 +36697,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "r1a.eu", true },
{ "r1ch.net", true },
{ "r2d2pc.com", true },
- { "r33.space", true },
{ "r3bl.blog", true },
{ "r3bl.me", true },
{ "r3s1stanc3.me", true },
@@ -35500,16 +36726,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rabbitinternet.com", true },
{ "rabica.de", true },
{ "rabotaescort.com", true },
+ { "rabotayes.ru", true },
{ "raccoltarifiuti.com", true },
{ "raccoon-music.com", true },
{ "raccoon.fun", true },
{ "racermaster.xyz", true },
{ "raceviewcycles.com", true },
- { "raceviewequestrian.com", true },
{ "racheldiensthuette.de", true },
{ "rachelmoorelaw.com", true },
{ "rachelreagan.com", true },
- { "rachelsbouncycastles.co.uk", true },
{ "rachida-dati.eu", true },
{ "rachurch.net", true },
{ "racing-planet.cz", true },
@@ -35528,6 +36753,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "radegundisfest.de", true },
{ "radfieldhomecare.co.uk", true },
{ "radfieldhomecarefranchising.co.uk", true },
+ { "radicalepil-haguenau.fr", true },
{ "radicaloptimism.org", true },
{ "radicalsub.com.br", true },
{ "radins.com", true },
@@ -35548,8 +36774,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "radionicabg.com", true },
{ "radiopleer.net", true },
{ "radioradicchio.it", true },
+ { "radiormi.com", true },
{ "radiorsvp.com", false },
- { "radiosendungen.com", true },
{ "radis-adopt.com", true },
{ "radiumcode.com", true },
{ "radiumone.io", true },
@@ -35575,8 +36801,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rafleatherdesign.com", true },
{ "rafting-japan.com", true },
{ "ragasto.nl", true },
- { "rage-overload.ch", true },
- { "rage.rip", true },
{ "rage4.com", true },
{ "ragingserenity.com", true },
{ "ragu.co.uk", true },
@@ -35587,7 +36811,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "raidensnakesden.com", true },
{ "raidensnakesden.net", true },
{ "raidstone.net", true },
- { "raiffeisen-kosovo.com", true },
+ { "raiffeisenleasing-kosovo.com", true },
{ "raiffeisenzeitung.at", true },
{ "raiilto.com", true },
{ "raiito.com", true },
@@ -35606,6 +36830,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "railto-sucks.com", true },
{ "railto.cm", true },
{ "railto.co", true },
+ { "railto.com", true },
{ "railto.com.de", true },
{ "railto.com.se", true },
{ "railto.exchange", true },
@@ -35647,12 +36872,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "raisecorp.com", true },
{ "raiseyourflag.com", true },
{ "raissarobles.com", true },
+ { "raistrick.it", true },
{ "raitlo.com", true },
{ "rajastore.ma", true },
- { "rajivshah.co.uk", true },
{ "rajyogarishikesh.com", true },
{ "rak-business-service.com", true },
{ "raketaro.de", true },
+ { "raketenwolke.de", true },
{ "raku.bzh", true },
{ "rakugokai.net", true },
{ "raleto.com", true },
@@ -35667,12 +36893,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rally-vysledky.cz", true },
{ "rallybase.cz", true },
{ "rallybase.eu", true },
+ { "rallycycling.com", true },
{ "rallypodium.be", true },
{ "raltha.com", true },
{ "ralvke.rocks", true },
{ "ram-it.nl", true },
{ "ram.nl", true },
{ "ramarka.de", true },
+ { "rambedjeans.com", true },
{ "rambii.de", true },
{ "rambo.codes", true },
{ "rammstein-portugal.com", true },
@@ -35704,6 +36932,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rank-net.de", true },
{ "ranking-deli.jp", true },
{ "ranktopay.com", true },
+ { "rannamoisaaiasalong.ee", true },
{ "ranos.org", true },
{ "ranson.com.au", true },
{ "ranyeh.com", false },
@@ -35715,7 +36944,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "raphael.li", true },
{ "raphaeladdile.com", true },
{ "raphaelcasazza.ch", true },
- { "raphrfg.com", true },
{ "rapidapp.io", true },
{ "rapidoo.com.br", true },
{ "rapidplumbingpenrith.com.au", true },
@@ -35743,6 +36971,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rationalcreation.com", true },
{ "rationalism.com", true },
{ "rationalops.com", true },
+ { "rattattees.com", true },
{ "rattenkot.io", true },
{ "raucris.ro", true },
{ "raulrivero.es", true },
@@ -35755,7 +36984,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ravencoin.com", true },
{ "ravencoin.org", true },
{ "ravenger.net", true },
- { "ravenrockrp.com", true },
{ "ravensbuch.de", true },
{ "ravhaaglanden.org", true },
{ "ravindran.me", true },
@@ -35768,6 +36996,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rawsec.net", true },
{ "ray-home.de", true },
{ "ray-works.de", true },
+ { "rayadventure.com", true },
{ "rayan-it.ir", true },
{ "rayiris.com", true },
{ "raykitchenware.com", true },
@@ -35780,6 +37009,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "raziskovalec-resnice.com", true },
{ "razrsec.uk", true },
{ "razvanburz.net", true },
+ { "rbd.events", true },
{ "rbensch.com", true },
{ "rbflote.lv", true },
{ "rbin.nl", true },
@@ -35788,30 +37018,32 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rbnet.xyz", true },
{ "rbran.com", true },
{ "rbs.com", true },
+ { "rbt.sx", true },
{ "rbuddenhagen.com", true },
{ "rbx-talk.xyz", true },
{ "rbx.com", true },
{ "rc-offi.net", true },
- { "rc-rp.com", true },
{ "rc-shop.ch", true },
{ "rca.fr", true },
{ "rca.ink", true },
{ "rcd.cz", true },
{ "rcdocuments.com", true },
{ "rcgoncalves.pt", true },
+ { "rchavez.site", true },
+ { "rchrdsn.uk", true },
{ "rcifsgapinsurance.co.uk", true },
{ "rclaywilliamsdo.com", true },
+ { "rcmlinx.com", true },
{ "rcmstream.com", true },
{ "rcmurphy.com", true },
{ "rcnitrotalk.com", true },
+ { "rcra-uganda.org", true },
{ "rcraigmurphy.com", true },
{ "rcsolutions.nl", true },
{ "rct.sk", true },
{ "rct.uk", true },
{ "rctalk.com", true },
{ "rcvd.io", true },
- { "rdactive.de", true },
- { "rdactive.net", true },
{ "rdap.co.il", true },
{ "rdcdesign.com", true },
{ "rdfencingandgates.co.uk", true },
@@ -35822,11 +37054,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rdmc.fr", true },
{ "rdmrotterdam.nl", true },
{ "rdmtaxservice.com", true },
- { "rdns.cc", true },
+ { "rdns.cc", false },
{ "rdv-cni.fr", true },
{ "rdv-prefecture.com", true },
{ "rdwh.tech", true },
- { "re-curi.com", true },
{ "re-engines.com", true },
{ "reach-on.de", true },
{ "reachhead.com", true },
@@ -35851,11 +37082,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "readouble.com", false },
{ "reads.wang", true },
{ "ready4bf.tk", true },
- { "readybetwin.com", true },
{ "readyrowan.com", true },
{ "readyrowan.org", true },
{ "readysell.net", true },
- { "readytobattle.net", true },
{ "readytongue.com", true },
{ "reaganlibrary.gov", true },
{ "reaiaer.com", true },
@@ -35863,7 +37092,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "real-digital.co.uk", true },
{ "real-it.nl", true },
{ "realcapoeira.ru", true },
- { "realcolors.net", true },
{ "realestate-in-uruguay.com", true },
{ "realestatecentralcoast.info", true },
{ "realestatemarketingblog.org", true },
@@ -35880,7 +37108,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "realloc.me", true },
{ "really-simple-plugins.com", false },
{ "really-simple-ssl.com", true },
- { "really.ai", true },
{ "reallytrusted.com", true },
{ "realme.govt.nz", true },
{ "realmofespionage.xyz", true },
@@ -35919,6 +37146,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "recalls.gov", true },
{ "recantoshop.com", true },
{ "recantoshop.com.br", true },
+ { "recapp.ch", true },
{ "recaptcha-demo.appspot.com", true },
{ "recebersms.com", true },
{ "receiliart.com", true },
@@ -35965,7 +37193,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "redb.cz", true },
{ "redballoonsecurity.com", true },
{ "redcarpetmonday.com", true },
- { "redcarpets.in", true },
{ "redcatrampageforum.com", true },
{ "redchat.cz", true },
{ "redchip.com.au", true },
@@ -35973,6 +37200,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "redcorus.com", true },
{ "redd.it", true },
{ "reddepsicologosdecr.com", true },
+ { "reddingo.at", true },
{ "reddingo.be", true },
{ "reddingo.ch", true },
{ "reddingo.com", true },
@@ -35994,7 +37222,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rede-reim.de", true },
{ "rede-t.com", true },
{ "redecsirt.pt", true },
- { "redespaulista.com", true },
+ { "redeemingbeautyminerals.com", true },
{ "redflare.com.au", true },
{ "redfox-infosec.de", true },
{ "redfoxmarketiing.com", true },
@@ -36003,11 +37231,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "redgravity.net", true },
{ "redhandedsecurity.com.au", true },
{ "redheadfuck.com", true },
+ { "redicals.com", true },
+ { "redion.me", true },
{ "redir.me", true },
{ "redirect.fedoraproject.org", true },
{ "redirect.stg.fedoraproject.org", true },
{ "rediske.me", true },
- { "redit.com", true },
{ "redivis.com", true },
{ "redjuice.co.uk", true },
{ "redleslie.com", true },
@@ -36019,24 +37248,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "redmore.me", true },
{ "redneragenturen.org", true },
{ "rednsx.org", true },
+ { "rednumberone.com", true },
{ "redpact.com", true },
- { "redphi.dedyn.io", true },
+ { "redpatronus.com", true },
{ "redporno.cz", true },
{ "redrowcareers.co.uk", true },
{ "redscan.com", true },
{ "redshiftlabs.com.au", true },
{ "redshoeswalking.net", true },
{ "redsicom.com", true },
+ { "redstoner.com", true },
{ "redteam-pentesting.de", true },
{ "redwaterhost.com", true },
{ "redweek.com", true },
- { "redzurl.com", false },
+ { "redwhey.com", true },
{ "reed-sensor.com", true },
{ "reedloden.com", true },
{ "reedyforkfarm.com", true },
{ "reeftrip.com", true },
{ "reegle.com", true },
{ "reening.net", true },
+ { "reensshop.com", true },
{ "reepay.com", true },
{ "rees-carter.net", true },
{ "reesmichael1.com", true },
@@ -36048,6 +37280,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "referdell.com", true },
{ "refficience.com", true },
{ "refinansiering.no", true },
+ { "refjob.jp", true },
{ "reflectivity.io", true },
{ "reflectores.net", true },
{ "refletindosaude.com.br", true },
@@ -36055,12 +37288,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reflexions.co", true },
{ "reflexive.xyz", true },
{ "refood-cascaiscpr.eu", true },
+ { "reforesttheplanet.com", true },
{ "reformation.financial", true },
{ "refresh-media.nl", true },
+ { "refreshcartridges.co.uk", true },
{ "refreshliving.us", true },
{ "refrigeracionpeinado.com.mx", true },
{ "refu.net", true },
- { "refuelcollective.com", true },
{ "refuelcreative.com.au", true },
{ "refundo.cz", true },
{ "refundo.sk", true },
@@ -36104,7 +37338,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "regraph.de", true },
{ "regresionavidaspasadas.com", true },
{ "regularflolloping.com", true },
- { "regularizaeudora.com.br", true },
{ "regulations.gov", true },
{ "reha-honpo.jp", true },
{ "rehabili-shigoto.com", true },
@@ -36132,7 +37365,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reinaldudrasfamily.ee", true },
{ "reinencaressa.be", true },
{ "reinfer.io", true },
- { "reinhard.codes", true },
{ "reinhardtsgermanautorepair.com", true },
{ "reinhardtsgrimma.de", true },
{ "reinout.nu", true },
@@ -36163,6 +37395,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "release-monitoring.org", true },
{ "reliableremovals-blackpool.co.uk", true },
{ "reliancebank.bank", true },
+ { "relocatefeds.gov", false },
{ "relojeriajoyeria.com", true },
{ "relojes-online.com", true },
{ "relsak.cz", true },
@@ -36175,7 +37408,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "remeb.de", true },
{ "remedi.tokyo", true },
{ "remedionaturales.com", true },
- { "remedioparaherpes.com", true },
{ "remedyrecoverymat.com", true },
{ "rememberthemilk.com", false },
{ "remi-saurel.com", true },
@@ -36184,7 +37416,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "remini.cz", true },
{ "remirampin.com", true },
{ "remissan.com", true },
- { "remitatm.com", false },
{ "remmik.com", true },
{ "remonti.info", true },
{ "remotedesktop.corp.google.com", true },
@@ -36196,7 +37427,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "remrol.ru", true },
{ "rena.cloud", true },
{ "renaissanceplasticsurgery.net", true },
- { "renascentia.asia", true },
{ "renaultclubticino.ch", true },
{ "rendall.tv", true },
{ "render.com", true },
@@ -36231,7 +37461,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rentandgo.it", true },
{ "rentasweb.gob.ar", true },
{ "rentaways.com", true },
- { "rentayventadecarpas.com", true },
{ "renthelper.us", true },
{ "rentinsingapore.com.sg", true },
{ "rentourhomeinprovence.com", true },
@@ -36240,6 +37469,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "renuo.ch", true },
{ "reorz.com", false },
{ "reox.at", false },
+ { "repaik.com", true },
{ "repair.by", true },
{ "repaper.org", true },
{ "reparacionesdecalefones.com", true },
@@ -36247,10 +37477,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "repaxan.com", true },
{ "replace.ninja", true },
{ "replenology.com", true },
+ { "repo.ml", true },
{ "repology.org", true },
{ "report-uri.com", true },
{ "report2psb.online", true },
- { "reportband.gov", true },
{ "reporting.gov", true },
{ "reproduciblescience.org", true },
{ "reproductive-revolution.com", true },
@@ -36269,21 +37499,28 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "repugnantconclusion.com", true },
{ "reputationweaver.com", true },
{ "requestr.co.uk", true },
+ { "reroboto.com", true },
+ { "reroboto.eu", true },
+ { "reroboto.net", true },
+ { "reroboto.org", true },
{ "res-kc.com", true },
{ "resama.eu", true },
{ "rescms-secure.com", true },
{ "resdon.cn", true },
{ "research-panel.jp", true },
{ "research.facebook.com", false },
+ { "researchbyaxia.com", true },
{ "researchgate.net", true },
{ "researchstory.com", true },
{ "reseausyndic.ca", true },
- { "resepi.my", true },
- { "resepimok.com", true },
+ { "resepi.my", false },
+ { "resepimok.com", false },
{ "reservar-un-hotel.com", true },
+ { "reserve-duchenier.com", true },
{ "residence-donatello.be", true },
{ "residence-simoncelli.com", true },
- { "residentiallocksmithsanantoniotx.com", true },
+ { "residentialmortgageholdings.com", true },
+ { "resilientlives.com", true },
{ "resine.roma.it", true },
{ "resinflooringcompany.com", true },
{ "resist.ca", true },
@@ -36324,7 +37561,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "responsive-shop.com", true },
{ "responsivepaper.com", true },
{ "respostas.com.br", true },
- { "ressl.ch", true },
+ { "resqdesk.com", true },
{ "restaurant-de-notenkraker.be", true },
{ "restaurant-oregano.de", true },
{ "restaurant-rosengarten.at", true },
@@ -36340,11 +37577,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "restrito.org", true },
{ "resultsatretail.com", true },
{ "resumelab.com", true },
+ { "resumeshoppe.com", true },
{ "resursedigitale.ro", true },
{ "retailcybersolutions.com", true },
{ "retefarmaciecostadamalfi.it", true },
{ "retetenoi.net", true },
- { "reticket.me", true },
{ "reticon.de", true },
{ "retidurc.fr", true },
{ "retireearlyandtravel.com", true },
@@ -36357,20 +37594,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "retornaz.eu", true },
{ "retornaz.fr", true },
{ "retractableawningssydney.com.au", true },
- { "retro.rocks", true },
+ { "retro-game.org", true },
{ "retro.sx", true },
{ "retroarms.com", true },
{ "retroarms.cz", true },
{ "retrocdn.net", true },
{ "retrofitlab.com", true },
{ "retroity.net", true },
- { "retrojar.top", true },
{ "retroride.cz", true },
{ "retroroundup.com", true },
{ "retrotown.ws", true },
{ "retrotracks.net", true },
{ "retrovideospiele.com", true },
- { "rettig.xyz", true },
{ "returnonerror.com", true },
{ "returnpath.com", true },
{ "retzer.me", true },
@@ -36379,7 +37614,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reuna.me", true },
{ "reupo.com", true },
{ "reussirsavie.info", true },
- { "reuter-profishop.de", true },
{ "reuter-shop.com", true },
{ "reuter.de", true },
{ "reuzenplaneten.nl", true },
@@ -36397,6 +37631,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reviderm-skinmedics-rheinbach.de", true },
{ "review.jp", true },
{ "reviewbestseller.com", true },
+ { "reviewcenter.in", true },
{ "reviewninja.net", true },
{ "reviews.anime.my", false },
{ "reviewu.ca", true },
@@ -36406,6 +37641,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "revistabifrontal.com", true },
{ "revivalinhisword.com", true },
{ "revivalprayerfellowship.com", true },
+ { "reviveplumbingmelbourne.com.au", true },
{ "revivingtheredeemed.org", true },
{ "revlect.com", true },
{ "revolt.tv", true },
@@ -36416,12 +37652,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rexskz.info", true },
{ "rexxworld.com", true },
{ "reyna.cc", true },
+ { "rezaaryo.id", true },
{ "rezenfitness.com", true },
{ "rezept-planer.de", true },
+ { "rezosup.net", true },
+ { "rezosup.org", true },
{ "rezultant.ru", true },
{ "rezun.cloud", true },
{ "rftoon.com", true },
{ "rfxanalyst.com", true },
+ { "rfxt.com", true },
{ "rga.sh", true },
{ "rgbinnovation.com", true },
{ "rgbpty.com", true },
@@ -36433,8 +37673,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rhd-instruments.com", true },
{ "rhd-instruments.de", true },
{ "rhees.nl", true },
+ { "rheijmans.email", true },
{ "rheinneckarmetal.com", true },
- { "rhese.net", true },
{ "rhetorical.ml", true },
{ "rhetthenckel.com", true },
{ "rhevelo.com", true },
@@ -36442,7 +37682,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rhinelander.ca", true },
{ "rhinobase.net", false },
{ "rhinoceroses.org", true },
- { "rhiskiapril.com", true },
{ "rhodenmanorcattery.co.uk", true },
{ "rhodri.io", true },
{ "rhondanp.com", true },
@@ -36497,7 +37736,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "richeyweb.com", true },
{ "richie.fi", true },
{ "richie.one", true },
- { "richlj.net", true },
+ { "richieheijmans.email", true },
{ "ricketyspace.net", true },
{ "ricki-z.com", true },
{ "rickmakes.com", true },
@@ -36522,7 +37761,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ridhaan.co", true },
{ "ridingboutique.de", true },
{ "riederle.com", true },
- { "riemzac.com", true },
{ "riesenweber.id.au", true },
{ "riesheating.com", true },
{ "rievo.net", true },
@@ -36537,6 +37775,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rightlaw.nz", true },
{ "rightmovecanada.com", true },
{ "rightnetworks.com", true },
+ { "rightoncorpus.com", true },
{ "rightsolutionplumbing.com.au", true },
{ "rightstuff.link", false },
{ "righttobuy.gov.uk", true },
@@ -36548,16 +37787,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rik.onl", true },
{ "riku.pw", true },
{ "rile5.com", true },
- { "rileyevans.co.uk", true },
{ "rileyskains.com", true },
{ "rimax.vn", true },
{ "rimcountrymuseum.org", true },
{ "rimeto.io", true },
{ "rimo.site", true },
{ "rimorrecherche.nl", true },
- { "rincondenoticas.com", true },
+ { "ring.com", true },
{ "ringingliberty.com", true },
{ "ringjewellery.co.uk", true },
+ { "rinvex.com", true },
{ "rio-weimar.de", true },
{ "rioshop.com.br", true },
{ "rioxmarketing.com", true },
@@ -36566,10 +37805,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ripaton.fr", true },
{ "ripcorddesign.com", true },
{ "ripcordsandbox.com", true },
+ { "ripley.red", true },
{ "ripmixmake.org", true },
{ "riproduzionichiavi.it", true },
{ "riptoforex.com", true },
- { "riqy86.nl", true },
{ "ris.fi", true },
{ "risada.nl", true },
{ "risaphuketproperty.com", true },
@@ -36592,6 +37831,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ristrutturazioneappartamento.roma.it", true },
{ "ristrutturazioniappartamentinapoli.it", true },
{ "rit.space", false },
+ { "riteway.rocks", true },
{ "ritirocalcinacci.viterbo.it", true },
{ "rittau.biz", true },
{ "rittau.org", true },
@@ -36617,7 +37857,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rixter.com", true },
{ "riyono.com", true },
{ "rizalpalawan.gov.ph", true },
- { "rizonrice.club", true },
{ "rizospastis.gr", true },
{ "rj-onderneemt.nl", true },
{ "rjan.nl", true },
@@ -36630,7 +37869,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rlds.ch", true },
{ "rleeden.servehttp.com", true },
{ "rleh.de", true },
- { "rlnunez.com", true },
{ "rlove.org", true },
{ "rm-it.de", true },
{ "rmb.li", true },
@@ -36646,11 +37884,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rnag.ie", true },
{ "rnbjunk.com", true },
{ "rngmeme.com", true },
- { "rnt.cl", true },
{ "ro.search.yahoo.com", false },
{ "roach.nz", true },
{ "roaddoc.de", true },
{ "roadguard.nl", false },
+ { "roalogic.com", true },
{ "roams.es", true },
{ "roams.mx", true },
{ "rob006.net", true },
@@ -36698,7 +37936,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "robohash.org", true },
{ "robokits.co.in", true },
{ "robot.car", true },
- { "robot.works", true },
{ "robotattack.org", true },
{ "robotham.org", true },
{ "robotkvarnen.se", true },
@@ -36709,7 +37946,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "robpol86.com", true },
{ "robsalmon.me.uk", true },
{ "robspc.repair", true },
- { "robspeed.rocks", true },
{ "robsutter.com", true },
{ "robtatemusic.com", true },
{ "robtex.com", true },
@@ -36730,7 +37966,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rocketmill.co.uk", true },
{ "rocketr.net", true },
{ "rocketsandtutus.com", true },
- { "rockfax.com", true },
+ { "rockhounds.co.za", true },
{ "rockinronniescastles.co.uk", true },
{ "rockitinflatables.co.uk", true },
{ "rockmyshoes.co.uk", true },
@@ -36741,18 +37977,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rocssti.net", true },
{ "rodab.party", true },
{ "rodafe.sk", true },
- { "roddis.net", true },
+ { "rodchapman.com", true },
{ "rodeobull.biz", true },
{ "rodeohire.com", true },
{ "rodeoimport.com", true },
{ "rodeosales.co.uk", true },
- { "rodest.net", true },
{ "rodevlaggen.nl", true },
{ "rodichi.net", true },
{ "rodinnebyvanie.eu", true },
- { "rodinneodpoledne2018.cz", true },
{ "rodolfo.gs", true },
{ "rodomonte.org", true },
+ { "rodrigoacevedo.com.uy", true },
{ "rodrigocarvalho.blog.br", true },
{ "rody-design.com", true },
{ "rodykossen.com", true },
@@ -36779,10 +38014,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "roguefinancial.com", true },
{ "roguefortgame.com", true },
{ "roguenation.space", true },
+ { "roguenetworks.me", true },
{ "roguerocket.com", true },
{ "roguesignal.net", true },
+ { "roh.one", true },
{ "rohedaten.de", true },
{ "rohitagr.com", true },
+ { "roi.ovh", true },
{ "rointe.online", true },
{ "roka9.de", true },
{ "rokass.nl", true },
@@ -36798,7 +38036,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rolecontj.com", true },
{ "roligprylar.se", true },
{ "rolleyes.org", true },
- { "rollforadventure.com.au", true },
{ "rollingbarge.com", true },
{ "rolliwelt.de", true },
{ "rolob.io", true },
@@ -36806,7 +38043,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rolodato.com", true },
{ "roma-servizi.it", true },
{ "romab.com", true },
- { "romail.ml", true },
{ "romain-arias.fr", true },
{ "romaindepeigne.fr", true },
{ "romainlapoux.com", true },
@@ -36820,13 +38056,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "romanpavlodar.kz", true },
{ "romantelychko.com", true },
{ "romantica-hotel.de", true },
- { "romanticfirstdance.com", true },
{ "romanticschemer.com", true },
{ "romanticsexshopguatemala.com", true },
{ "romanticvillas.com.au", false },
+ { "romapa.com", true },
{ "romarin.es", true },
{ "romaservicegroup.it", true },
- { "romastantra.com", true },
{ "romatrip.it", true },
{ "rome.dating", true },
{ "rommelwood.de", true },
@@ -36843,6 +38078,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "roninitconsulting.com", true },
{ "ronniegane.kiwi", true },
{ "ronnylindner.de", true },
+ { "ronnytito.com", true },
{ "ronomon.com", true },
{ "ronsguideservice.com", true },
{ "roo.ie", true },
@@ -36855,6 +38091,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "roofsandbasements.com", true },
{ "roohanionlinespiritualhelp.co.uk", true },
{ "rook-playz.net", true },
+ { "rookiehpc.com", true },
{ "rookvrij.nl", true },
{ "room-composite.com", true },
{ "room208.org", true },
@@ -36867,18 +38104,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "roopakv.com", true },
{ "roosabels.nl", false },
{ "roosta.xyz", true },
- { "roosteroriginals.com", false },
+ { "root-couture.de", true },
{ "root-space.eu", true },
{ "root.bg", true },
{ "root.cz", true },
{ "root.eu.org", true },
+ { "root.vg", true },
{ "rootcamp.net", true },
{ "rootcommand.com", true },
{ "rootear.com", true },
{ "rootedlifemontessori.com", true },
{ "rootetsy.com", true },
+ { "rootie.de", true },
{ "rootkea.me", true },
- { "rootkit.es", true },
{ "rootlair.com", true },
{ "rootonline.de", true },
{ "rootpigeon.com", true },
@@ -36891,12 +38129,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rootstation.de", true },
{ "rootswitch.com", false },
{ "rootusers.com", true },
+ { "rootze.com", true },
{ "ropd.info", true },
{ "roryneville.com", true },
{ "rosabellas.co.uk", true },
+ { "rosalindgreenllc.com", true },
{ "rosalindturner.co.uk", true },
{ "rosbass.ru", true },
{ "rose-prism.org", true },
+ { "rosecrance.org", true },
{ "rosehosting.reviews", true },
{ "roseitsolutions.co.uk", true },
{ "roseitsolutions.uk", true },
@@ -36923,17 +38164,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rosswilson.co.uk", true },
{ "rostclub.ro", true },
{ "rostov-avia.ru", true },
- { "rostros.eu", true },
{ "rot47.net", true },
{ "rotapalor.com", true },
{ "rotek.at", true },
- { "roten.email", true },
{ "rothe.io", true },
{ "rothkranz.net", true },
{ "rothnater.ch", true },
{ "rothwellgornthomes.com", true },
{ "rotkreuzshop.de", true },
{ "rotol.me", true },
+ { "rotring.com", true },
{ "rottweil-hilft.de", true },
{ "rotunneling.net", true },
{ "rougechocolat.fr", true },
@@ -36951,7 +38191,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "roussosmanos.gr", true },
{ "rout0r.org", true },
{ "route-wird-berechnet.de", true },
- { "routeragency.com", true },
{ "routerclub.ru", true },
{ "routetracker.co", true },
{ "rowancasting.com", true },
@@ -36980,6 +38219,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "royalbuffetdijon.fr", true },
{ "royalcitytaxi.ca", true },
{ "royalfitnesschennai.in", true },
+ { "royalkitchensandfurniture.co.ug", true },
{ "royalmarinesassociation.org.uk", true },
{ "royalnissanparts.com", true },
{ "royalpainters.co", true },
@@ -37003,10 +38243,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rpgmaker.es", true },
{ "rpherbig.com", true },
{ "rphl.net", true },
+ { "rphyncice.cz", true },
{ "rpine.net", true },
{ "rpmdrivingschool.com.au", true },
{ "rpoplus.nl", true },
- { "rprevost.fr", true },
{ "rpus.co", true },
{ "rpy.xyz", true },
{ "rq-labo.jp", true },
@@ -37020,6 +38260,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rr9728.co", true },
{ "rraesthetics.com", true },
{ "rrailto.com", true },
+ { "rrbt.eu", true },
+ { "rrbt.net", true },
{ "rrbts.com", true },
{ "rrdesignsuisse.com", true },
{ "rrg-partner.ch", true },
@@ -37036,11 +38278,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rsblake.net", true },
{ "rsdisedezzari.it", true },
{ "rsearch.co", true },
+ { "rsec.kr", true },
{ "rsingermd.com", true },
{ "rsl.gd", true },
+ { "rsldb.com", true },
{ "rslnd.com", true },
{ "rsm-liga.de", true },
- { "rsmith.io", true },
{ "rsp-blogs.de", true },
{ "rsridentassist.com", true },
{ "rss.sh", false },
@@ -37061,8 +38304,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rteguide.ie", true },
{ "rteinternational.ie", true },
{ "rtejr.ie", true },
+ { "rtenews.eu", true },
{ "rteone.ie", true },
{ "rteplayer.com", true },
+ { "rtesport.eu", true },
{ "rteworld.com", true },
{ "rthsoftware.cn", true },
{ "rtmoran.org", true },
@@ -37071,6 +38316,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rtsr.ch", true },
{ "rttvvip.com", true },
{ "rtwcourse.com", false },
+ { "ru-e-business.com", true },
{ "ru-sprachstudio.ch", true },
{ "ru.search.yahoo.com", false },
{ "ruaneattorneys.com", true },
@@ -37078,22 +38324,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rubberfurs.org", true },
{ "rubberlegscastles.co.uk", true },
{ "rubbermaidoutlet.com", true },
- { "rubbleremovalhillcrest.co.za", true },
{ "rubbleremovalsbenoni.co.za", true },
{ "ruben.am", false },
{ "rubenbaer.ch", true },
{ "rubenbarbero.com", true },
+ { "rubenbrito.net", true },
{ "rubenkruisselbrink.nl", true },
{ "rubenruiz.org", true },
{ "rubens.cloud", true },
{ "rubixstudios.com.au", true },
{ "rublacklist.net", true },
{ "ruby-auf-schienen.de", true },
- { "rubyist.im", true },
{ "rubyist.today", true },
+ { "rubylabs.am", true },
{ "rubymartin.com.au", true },
- { "rubyquincunx.com", true },
- { "rubyquincunx.org", true },
{ "rubytune.com", true },
{ "rucksack-rauf-und-weg.de", true },
{ "ruckzuck-privatpatient.de", true },
@@ -37112,7 +38356,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ruedigervoigt.de", true },
{ "ruedirrenggli.ch", true },
{ "rueduparticulier.com", true },
- { "rueduparticulier.tk", false },
{ "rueduverre.com", true },
{ "rueegger.me", true },
{ "rueg.eu", true },
@@ -37124,6 +38367,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ruh-veit.de", true },
{ "ruha.co.in", true },
{ "ruhnke.cloud", true },
+ { "ruhproject.kz", true },
{ "ruhrmobil-e.de", true },
{ "ruhrnalist.de", true },
{ "ruht.ro", true },
@@ -37155,7 +38399,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "runningrabb.it", true },
{ "runreport.fr", true },
{ "runschrauger.com", true },
- { "runtimepanic.xyz", true },
{ "runvs.io", true },
{ "ruobiyi.com", true },
{ "ruobr.ru", true },
@@ -37164,7 +38407,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ruralink.com.ar", true },
{ "ruralsoba.com", true },
{ "ruralsuppliesdirect.co.uk", true },
- { "ruri.io", false },
+ { "ruri.io", true },
{ "rusempire.ru", true },
{ "rushball.net", true },
{ "rushiiworks.com", true },
@@ -37180,8 +38423,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "russelljohn.net", true },
{ "russellupevents.co.uk", true },
{ "russia.dating", true },
+ { "russia.wtf", true },
{ "russiaeconomy.org", true },
{ "russianorthodoxchurch.co.uk", true },
+ { "russianrandom.com", true },
+ { "russianrandom.ru", true },
{ "russpuss.ru", true },
{ "russt.me", true },
{ "rustable.com", true },
@@ -37195,7 +38441,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rutika.ru", true },
{ "rutten.me", false },
{ "ruudkoot.nl", true },
- { "ruurdboomsma.nl", true },
{ "ruwhof.net", true },
{ "ruya.com", true },
{ "ruyatabirleri.com", true },
@@ -37219,9 +38464,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rxgroup.io", true },
{ "rxguide.nl", true },
{ "rxight.com", true },
- { "ryan-design.com", true },
{ "ryan-gehring.com", true },
{ "ryan-goldstein.com", true },
+ { "ryan.cafe", true },
{ "ryanbritton.com", true },
{ "ryanhowell.io", false },
{ "ryankearney.com", false },
@@ -37251,14 +38496,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "s-mainte.com", true },
{ "s-pegasus.com", true },
{ "s-s-paint.com", true },
+ { "s-u.pw", true },
{ "s-yuz.com", true },
{ "s007.co", true },
{ "s0laris.co.uk", true },
{ "s1-llc.com", true },
- { "s10y.eu", true },
{ "s1128.com", true },
{ "s13d.fr", true },
- { "s16e.no", true },
{ "s1ris.org", true },
{ "s2member.com", true },
{ "s2t.net", true },
@@ -37276,6 +38520,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "s6729.co", true },
{ "s6729.com", true },
{ "s6957.co", true },
+ { "s88.com", true },
{ "s8a.us", true },
{ "s92.cloud", true },
{ "s92.io", true },
@@ -37287,7 +38532,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "s9728.co", true },
{ "sa-mp.ro", true },
{ "sa.net", true },
- { "saabpartsdistribution.com", true },
{ "saamhorigheidsfonds.nl", false },
{ "saas.de", true },
{ "saastopankki.fi", true },
@@ -37295,7 +38539,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saba-piserver.info", true },
{ "sabahattin-gucukoglu.com", true },
{ "sabbottlabs.com", true },
- { "sabe.cz", true },
{ "saberhortifruti.com.br", true },
{ "sabine-forschbach.de", true },
{ "sablyrics.com", true },
@@ -37303,6 +38546,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sabrinajoiasprontaentrega.com.br", true },
{ "sac.moe", true },
{ "sacaentradas.com", true },
+ { "sacaleches.net", true },
{ "saccani.net", true },
{ "sachk.com", true },
{ "sackmesser.ch", true },
@@ -37322,6 +38566,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sadmansh.com", true },
{ "sadou.kyoto.jp", true },
{ "saechsischer-christstollen.shop", true },
+ { "saeder-krupp.de", true },
{ "saengsook.com", true },
{ "saengsuk.com", true },
{ "saf.earth", true },
@@ -37335,6 +38580,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "safebasements.com", true },
{ "safebasementsnorthdakota.com", true },
{ "safebasementsofindiana.com", true },
+ { "safebuyerscheme.co.uk", true },
{ "safecar.gov", false },
{ "safegold.ca", true },
{ "safegroup.pl", true },
@@ -37355,17 +38601,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "safestore.io", true },
{ "safetycloud.me", true },
{ "safetynames.com", true },
+ { "safetynetwork.me", true },
{ "safetyrange.com", true },
{ "safetyrisk.net", true },
{ "safetyworkkits.co.nz", true },
{ "safeui.com", false },
{ "safewaysecurityscreens.com.au", true },
{ "safire.ac.za", true },
- { "safungerar.se", true },
{ "saga-umzuege.de", true },
{ "sagaenterprizes.com", true },
+ { "sagagardencentre.co.uk", true },
{ "sagargandecha.com.au", false },
{ "sagedocumentmanager.com", true },
+ { "sagenesykkel.com", true },
{ "sagerus.com", true },
{ "saggiocc.com", true },
{ "sagitta.hr", true },
@@ -37383,6 +38631,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saidtezel.com", true },
{ "saier.me", true },
{ "saifoundation.in", true },
+ { "saigaocy.me", true },
{ "saigonflowers.com", true },
{ "saigonstar.de", true },
{ "saikarra.com", true },
@@ -37397,6 +38646,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saimoe.org", true },
{ "sainetworks.net", true },
{ "sainformatica.com.es", true },
+ { "sainikbiswas.com", true },
{ "saint-bernard-gouesch.fr", true },
{ "saint-cyril.com", true },
{ "saintaardvarkthecarpeted.com", true },
@@ -37422,14 +38672,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saintphilipneri.org", true },
{ "saintpius.net", true },
{ "saintpolycarp.org", true },
+ { "saintsrobotics.com", true },
{ "saipariwar.com", true },
{ "saiputra.com", true },
{ "saitapovan.com", true },
{ "saitrance.com", true },
{ "saitv.org", true },
+ { "saityvkaluge.ru", true },
{ "sajamstudija.info", true },
{ "sajdowski.de", true },
{ "sajjadzaidi.com", true },
+ { "sajter.ga", true },
{ "sajtoskal.hu", true },
{ "sakaki.anime.my", false },
{ "sakerhetskopiering.nu", true },
@@ -37460,6 +38713,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "salemedia.pro", true },
{ "salensmotors-usedcars.be", true },
{ "salentocab.com", true },
+ { "salesblackbelt.coach", true },
{ "salesflare.com", true },
{ "salesmachine.io", true },
{ "salexy.kz", true },
@@ -37483,18 +38737,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "salonsantebienetre.ch", true },
{ "salrosadohimalaia.com", true },
{ "salsa-straubing.de", true },
- { "salt-documentary.blog", true },
{ "saltbythesea.com", true },
{ "saltercane.com", false },
{ "saltstack.cz", true },
{ "salud.top", false },
+ { "saluddecalidad.com", true },
{ "saludmas.site", true },
+ { "saludnutrivida.com", true },
{ "saluels.servemp3.com", true },
{ "salutethefish.com", true },
{ "salutethegrains.com", true },
{ "salutethepig.com", true },
{ "salva.re", true },
{ "salvagedfurnitureparlour.com", true },
+ { "salzerperu.com", true },
+ { "sam-cousins.com", true },
{ "sam-football.fr", true },
{ "samalderson.co.uk", true },
{ "samanacafe.com", true },
@@ -37507,13 +38764,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sambaash.com", true },
{ "sambeso.net", true },
{ "samdev.io", true },
- { "samdrewtakeson.com", true },
+ { "samdrewtakeson.com", false },
{ "samegoal.com", true },
{ "samegoal.org", true },
{ "samel.de", true },
{ "samenwerkingsportaal.nl", true },
{ "samenwerkingsportaal.tk", true },
{ "sameworks.com", true },
+ { "samfreaks.de", true },
{ "samgrayson.me", true },
{ "samhuri.net", true },
{ "samifar.in", true },
@@ -37522,26 +38780,30 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "samkoandmikotoywarehouse.com", true },
{ "saml-gateway.org", true },
{ "samlaw.co.nz", true },
- { "samlivogarv.dk", true },
{ "sammamish--locksmith.com", true },
{ "sammyjohnson.com", true },
{ "sammyservers.com", true },
{ "sammyservers.net", true },
{ "samnya.cn", true },
+ { "samodding.com", true },
{ "samorazvitie.ru", true },
+ { "samotorsporttyres.com.au", true },
{ "sampaguide.com", true },
+ { "sampatjewelers.com", true },
{ "sample-site.click", true },
+ { "sampleappservice.com", true },
{ "samplefashion.nl", true },
{ "samri.pt", true },
{ "sams.wtf", true },
{ "samshouseofspaghetti.net", true },
{ "samtalen.nl", true },
+ { "samuelebencini.it", true },
{ "samuelkeeley.com", true },
{ "samuellaulhau.fr", false },
{ "samui-samui.de", false },
{ "samvanderkris.xyz", true },
- { "samwilberforce.com", true },
{ "samwrigley.co.uk", true },
+ { "samwu.tw", true },
{ "san.ac.th", true },
{ "sana-store.com", true },
{ "sana-store.cz", true },
@@ -37555,17 +38817,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sanatorionosti.com.ar", true },
{ "sanbornteam.com", true },
{ "sancdz.com", true },
+ { "sanctumwealth.com", true },
{ "sand-islets.de", true },
{ "sandalj.com", true },
- { "sandbagexpress.com", true },
{ "sandbox.mydigipass.com", false },
{ "sandboxfp.com", true },
+ { "sandburner.net", true },
{ "sander.sh", true },
{ "sanderdorigo.nl", true },
{ "sanderkoenders.eu", true },
{ "sanderkoenders.nl", true },
{ "sandervanderstap.nl", true },
{ "sandervankasteel.nl", false },
+ { "sandhaufen.tk", true },
{ "sandiegoluxuryhomes.org", true },
{ "sandiegotown.com", true },
{ "sandmanintel.com", true },
@@ -37596,7 +38860,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sanitairwinkel.be", true },
{ "sanitairwinkel.com", true },
{ "sanitairwinkel.nl", true },
- { "sanjotech.space", true },
{ "sannefoltz.com", true },
{ "sanovnik.at", true },
{ "sanovnikat.com", true },
@@ -37609,7 +38872,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "santiagogarza.co", true },
{ "santoshpandit.com", true },
{ "sanvitolocapobus.com", true },
+ { "sanyasingh.in", true },
{ "sanych-msk.ru", true },
+ { "saobancrafts.com", true },
{ "saol.eu", true },
{ "saoneth.pl", true },
{ "saorsat.com", true },
@@ -37625,15 +38890,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sapien-ci.com", true },
{ "sapience.com", true },
{ "sapindus.pl", true },
- { "sapk.fr", true },
{ "saplumbers.com.au", true },
- { "saposute-s.jp", true },
{ "sapphirepearl.com.sg", true },
{ "sapporobeer.com", true },
{ "sapprendre.ch", true },
{ "saprima.de", true },
{ "saputra.org", true },
{ "saq.com", true },
+ { "sarae.id", true },
{ "sarahbeckettharpist.com", true },
{ "sarahboydrealty.com", true },
{ "sarahlicity.co.uk", true },
@@ -37653,6 +38917,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sardegnatirocini.it", true },
{ "sardinianvillas.com", true },
{ "sarella.org", true },
+ { "sargeson.it", true },
{ "sarink.eu", true },
{ "sarkisianbuilders.com", true },
{ "sarkoziadam.hu", true },
@@ -37671,8 +38936,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sash.pw", true },
{ "sashaokun.com", true },
{ "sashascollections.com", true },
+ { "sashka.com.ua", true },
{ "sasioglu.co.uk", true },
{ "saskpension.com", true },
+ { "sasquatt.com.br", true },
{ "sasrobotics.xyz", true },
{ "sassandbelle.co.uk", true },
{ "sassandbelle.com", true },
@@ -37687,12 +38954,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saterdalen.net", true },
{ "satimagingcorp.com", true },
{ "satinn.pl", true },
+ { "satisperfectacollections.com", true },
{ "satmd.de", true },
{ "satoshinumbers.com", true },
{ "satplay.host", true },
{ "satserwis.xyz", true },
{ "satsukii.moe", true },
- { "sattamatka.market", false },
{ "sattamatkachart.in", false },
{ "sattamatkamobi.mobi", false },
{ "sattaresult.net", true },
@@ -37709,8 +38976,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saultdefencelaw.ca", true },
{ "saumon-de-france.com", false },
{ "saumon-france.com", false },
+ { "saumondefrance.fr", false },
{ "saumonfrance.fr", false },
{ "saunafahrten.ch", true },
+ { "saunahats.eu", true },
{ "saunas.fr", true },
{ "saunatime.jp", true },
{ "sauvagebridge.nl", true },
@@ -37721,6 +38990,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "savbus.net", true },
{ "savbus.ws", true },
{ "save-me-aachen.de", true },
+ { "savebees.org", true },
+ { "savebt.net", true },
{ "savecrypto.org", true },
{ "savenet.org", true },
{ "saveoney.ca", true },
@@ -37734,6 +39005,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "savingrecipe.com", true },
{ "savingsoftheyear.com", true },
{ "savingsomegreen.com", true },
+ { "savisasolutions.co.za", true },
{ "sawyerroofing.com", true },
{ "saxeandthecity.com", true },
{ "saxojoe.co.uk", true },
@@ -37744,7 +39016,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "saxwereld.nl", true },
{ "sayprepay.com", true },
{ "sayrodigital.com", true },
- { "saytu.co", true },
{ "sayura.net", true },
{ "saz.sh", true },
{ "saz9001.com", true },
@@ -37764,6 +39035,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sberbank.ch", true },
{ "sberna-fotofast.cz", true },
{ "sbf888.com", true },
+ { "sbiewald.de", true },
{ "sbir.gov", true },
{ "sbirecruitment.co.in", true },
{ "sbivc.jp", true },
@@ -37783,17 +39055,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sc5.jp", true },
{ "scaarus.com", true },
{ "scaffalature.roma.it", true },
- { "scaffoldhireeastrand.co.za", true },
- { "scaffoldhirefourways.co.za", true },
- { "scaffoldhiremidrand.co.za", true },
- { "scaffoldhirerandburg.co.za", true },
- { "scaffoldhiresandton.co.za", true },
{ "scalacollege.nl", true },
{ "scalaire.com", true },
{ "scalaire.fr", true },
{ "scale.milano.it", true },
{ "scalesbiolab.com", true },
{ "scaling.solutions", true },
+ { "scalive.tv", true },
{ "scallywagsbouncycastles.co.uk", true },
{ "scallywagskids.co.uk", true },
{ "scalpel.com", true },
@@ -37810,7 +39078,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scatsbouncingcastles.ie", true },
{ "scbdh.org", true },
{ "scbreed.com", true },
- { "sccwf.com", true },
{ "scde.ventures", true },
{ "sceenfox.de", true },
{ "scelec.com.au", true },
@@ -37819,6 +39086,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scenicbyways.info", true },
{ "scepticism.com", true },
{ "scevity.com", true },
+ { "schack.dk", true },
{ "schadevergoedingen.eu", true },
{ "schaefer-reifen.de", true },
{ "schaffensdrang.at", true },
@@ -37827,7 +39095,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schatzibaers.de", true },
{ "schawe.me", true },
{ "schbebtv.fr", true },
- { "scheduleme.io", true },
{ "scheemadigital.com", true },
{ "schefczyk.com", true },
{ "schefczyk.de", true },
@@ -37835,9 +39102,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schefczyk.net", true },
{ "scheinlichter.de", true },
{ "schelberts.de", true },
+ { "schellevis.net", true },
{ "schemingmind.com", true },
{ "schenkes.de", false },
{ "scherfke.de", true },
+ { "schermkapot.nl", true },
{ "scheuchenstuel.at", true },
{ "schgroup.com", true },
{ "schier.info", true },
@@ -37852,15 +39121,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schlaf.guru", true },
{ "schlagenhauf.info", true },
{ "schlagma.de", false },
- { "schlarb.eu", true },
{ "schlarp.com", true },
{ "schlechtewitze.com", true },
{ "schlick.network", true },
{ "schlick.wedding", true },
{ "schlossereieder.at", true },
- { "schlossfuchs.de", true },
{ "schluesseldienst-berlin.de", true },
- { "schluesseldienst-hannover24.de", true },
{ "schlueter-software.de", true },
{ "schmaeh-coaching.ch", true },
{ "schmatloch.cloud", true },
@@ -37874,6 +39140,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schmitt-max.com", true },
{ "schmuggelware.de", true },
{ "schnapke.name", true },
+ { "schneckenhilfe.de", true },
{ "schneeketten-ratgeber.de", true },
{ "schnegg.name", true },
{ "schneidr.de", true },
@@ -37882,7 +39149,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schnouki.net", true },
{ "schnuckenhof-wesseloh.de", true },
{ "schnyder-werbung.ch", true },
- { "schoeck-elektro.de", true },
{ "schoeller.click", true },
{ "schoenstatt-fathers.link", true },
{ "schoenstatt-fathers.us", true },
@@ -37892,7 +39158,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schoknecht.one", true },
{ "schoko-ferien.de", true },
{ "schokoferien.de", true },
- { "schokofoto.de", true },
{ "schokokeks.org", true },
{ "schokoladensouffle.eu", true },
{ "scholar.group", true },
@@ -37966,7 +39231,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "schwarzes-muenchen.de", true },
{ "schwarzhenri.ch", true },
{ "schwarztrade.cz", true },
- { "schweingehabt.expert", true },
{ "schwerkraftlabor.de", true },
{ "schwinabart.com", true },
{ "schwinger.me", true },
@@ -37987,7 +39251,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scigov.xyz", true },
{ "scijinks.gov", true },
{ "scilifebiosciences.com", true },
- { "scimage.com", true },
+ { "scimage.com", false },
{ "scintilla.nl", true },
{ "scintillating.stream", true },
{ "scistarter.com", true },
@@ -37995,9 +39259,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scitopia.net", true },
{ "scity88.com", true },
{ "scohetal.de", true },
+ { "scolasti.co", true },
{ "scoop6.co.uk", true },
{ "scootaloo.co.uk", true },
{ "scooterservis.com", true },
+ { "scootfleet.com", true },
{ "scorerealtygroup.com", true },
{ "scorp13.com", true },
{ "scorpowines.com", true },
@@ -38021,7 +39287,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scp-trens.notaires.fr", true },
{ "scp500.com", true },
{ "scpslgame.com", true },
- { "scqpw.com", true },
{ "scra.gov", true },
{ "scrabble-solver.com", true },
{ "scrabble123.co.uk", true },
@@ -38086,6 +39351,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sdsi.us", true },
{ "sdsk.one", true },
{ "sdsmt.engineering", true },
+ { "sduconnect.nl", true },
{ "sduoxminty.cn", true },
{ "sdvigpress.org", true },
{ "sdxcentral.com", true },
@@ -38135,6 +39401,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "searchcandy.nl", true },
{ "searchcandy.uk", true },
{ "searchdatalogy.com", true },
+ { "searchforbeer.com", true },
{ "searchfox.org", true },
{ "searchmore.dk", true },
{ "searchpartners.dk", true },
@@ -38153,7 +39420,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "seattle-life.net", true },
{ "seattlefabrication.com", true },
{ "seattlemesh.net", true },
+ { "seattleprivacy.org", true },
{ "seattlewalkinbathtubs.com", true },
+ { "seavancouver.com", true },
{ "seb-mgl.de", true },
{ "seb-net.com", true },
{ "sebald.com", true },
@@ -38166,7 +39435,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sebastian-haeutle.de", true },
{ "sebastian-janich.de", true },
{ "sebastian-kraus.me", true },
- { "sebastian-lutsch.de", true },
{ "sebastian.expert", true },
{ "sebastianblade.com", true },
{ "sebastianboegl.de", true },
@@ -38194,7 +39462,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sec455.com", true },
{ "sec530.com", true },
{ "secard.me", true },
- { "secbone.com", true },
{ "seccom.ch", true },
{ "secctexasgiving.org", false },
{ "secfish.com", true },
@@ -38209,7 +39476,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "secpatrol.de", true },
{ "secretary-schools.com", true },
{ "secretpanties.com", true },
- { "secretsanta.fr", true },
{ "secretsdujeu.com", true },
{ "secretserveronline.com", true },
{ "secretum.tech", true },
@@ -38235,7 +39501,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "secure.facebook.com", false },
{ "securecloudplatform.nl", true },
{ "securecomms.cz", true },
- { "securedns.zone", true },
{ "securedrop.org", true },
{ "secureesolutions.com", true },
{ "securefiletransfer.nl", true },
@@ -38256,6 +39521,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "securetrustbank.com", true },
{ "securevideo.com", true },
{ "secureworks.com", true },
+ { "securi-tay.co.uk", true },
{ "securify.nl", true },
{ "securipy.com", true },
{ "securiscan.io", true },
@@ -38264,7 +39530,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "security-brokers.com", true },
{ "security.gives", true },
{ "security.google.com", true },
- { "security.love", true },
{ "security201.co.uk", true },
{ "security201.com", true },
{ "securitybsides.pl", false },
@@ -38272,7 +39537,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "securitydriver.com", true },
{ "securityescrownews.com", true },
{ "securityfest.com", true },
- { "securitygladiators.com", true },
{ "securityheaders.com", true },
{ "securityheaders.io", true },
{ "securityheaders.nl", true },
@@ -38327,7 +39591,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "segnidisegni.eu", true },
{ "segulink.com", true },
{ "seguridadconsumidor.gov", true },
- { "seguridadysaludeneltrabajo.com.co", true },
{ "seguros-de-salud-y-vida.com", true },
{ "segurosbalboa.com.ec", false },
{ "segurosdecarroshialeah.org", true },
@@ -38377,9 +39640,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "selfdestruct.net", true },
{ "selfici.com", true },
{ "selfici.cz", true },
+ { "selfiehome.cz", true },
{ "selfishness.com", true },
{ "selfloath.in", true },
- { "selfmade4u.de", true },
{ "selfycheck.it", true },
{ "selkiemckatrick.com", true },
{ "sellajoch.com", true },
@@ -38388,6 +39651,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "selldurango.com", true },
{ "sellguard.pl", true },
{ "sellme.biz", true },
+ { "sellmymobile.com", true },
{ "sellorbuy.uk", true },
{ "sellorbuy.us", true },
{ "seloc.org", true },
@@ -38404,20 +39668,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "seminariruum.ee", true },
{ "seminariruumid.ee", true },
{ "semiocast.com", true },
+ { "semiotical.com", true },
{ "semiread.com", true },
{ "semjonov.de", true },
{ "semox.de", true },
- { "semplicementelight.com", true },
{ "semps-2fa.de", true },
{ "semps-threema.de", true },
{ "semps.de", true },
{ "semsec.net", true },
+ { "sen.bo", true },
{ "senarius.de", true },
{ "sendai-sisters.com", true },
{ "sendaiouji.com", true },
{ "sendbox.cz", true },
- { "sendc.at", true },
- { "sendcat.com", true },
+ { "sender.services", true },
{ "sendingbee.com", true },
{ "sendinvoice.nl", true },
{ "sendmeback.de", false },
@@ -38440,9 +39704,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sens2lavie.com", true },
{ "sense.hamburg", true },
{ "sensebridge.net", true },
+ { "senseict.com.au", true },
{ "sensepixel.com", true },
{ "senshudo.tv", true },
+ { "sensoft-int.org", true },
{ "sensor-dream.ru", true },
+ { "sensorville.com.br", true },
{ "sensory-brands.com", true },
{ "sensualism.com", true },
{ "sensuality-models.com", true },
@@ -38494,7 +39761,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "septentrionalist.org", true },
{ "septfinance.ch", true },
{ "septicrepairspecialists.com", true },
- { "septillion.cn", true },
{ "septs.blog", true },
{ "sequencing.com", true },
{ "sequiturs.com", true },
@@ -38504,6 +39770,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "serbanpaun.ro", true },
{ "serbianclimbing.com", true },
{ "sereema.com", true },
+ { "serele.fr", true },
{ "serenaden.at", true },
{ "serenavilage.net", true },
{ "serenavillage.net", true },
@@ -38527,6 +39794,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sernate.com", true },
{ "serotiuk.com", false },
{ "serpenteq.com", true },
+ { "serpic.photo", true },
{ "serrande.roma.it", true },
{ "serrano-chris.ch", true },
{ "serrature.roma.it", true },
@@ -38541,6 +39809,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "server-essentials.com", true },
{ "server-eye.com", true },
{ "server-eye.de", true },
+ { "server72a.ddns.net", true },
{ "server92.eu", true },
{ "serveradium.com", true },
{ "serveradminz.com", true },
@@ -38556,7 +39825,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "serversfrom.space", true },
{ "serversftw.com", true },
{ "serverstuff.info", true },
- { "serversuit.com", true },
{ "servertastic.com", true },
{ "servethecity-karlsruhe.de", true },
{ "servetten-groothandel.nl", true },
@@ -38567,9 +39835,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "serviceair.com.ar", true },
{ "servicebeaute.fr", true },
{ "serviceboss.de", true },
+ { "serviceinconstanta.ro", true },
{ "servicemembers.gov", true },
{ "servicerequesthub.io", true },
{ "serviciales.com", true },
+ { "serviciodebarralibreparaeventos.com", true },
{ "servicios-electricos.com", true },
{ "servida.ch", true },
{ "servietten-grosshandel.at", true },
@@ -38584,13 +39854,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "servious.org", true },
{ "servitek.de", true },
{ "serviziourgente.it", true },
- { "servmaslt.com", true },
{ "servo.org", true },
{ "servx.org", true },
{ "serw.org", true },
{ "serwetki-papierowe.pl", true },
{ "serwis-wroclaw.pl", true },
- { "serwusik.pl", true },
{ "seryox.com", true },
{ "sesam-biotech.com", true },
{ "sesamecare.com", true },
@@ -38608,6 +39876,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sethjust.com", true },
{ "sethriedel.com", true },
{ "sethvargo.com", true },
+ { "setphaserstostun.org", false },
{ "setsailanddive.com", true },
{ "settberg.de", true },
{ "settimanadellascienza.it", true },
@@ -38615,7 +39884,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "setuid.io", true },
{ "setuid0.kr", true },
{ "setyoursite.nl", true },
- { "seulean.gq", true },
{ "seutens.be", true },
{ "seutens.eu", true },
{ "seva.fashion", true },
@@ -38623,17 +39891,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "seven-purple.com", true },
{ "seven-shadows.de", true },
{ "sevencooks.com", true },
+ { "sevengang.tk", true },
{ "sevenhillsapartments.com.au", true },
{ "sevenicealimentos.com.br", true },
{ "seventwentynine.com", true },
{ "severntrentinsuranceportal.com", true },
{ "sevocomm.com", true },
- { "sevsey.ru", true },
{ "sevwebdesign.com", true },
{ "sewa.nu", true },
{ "sewafineseam.com", true },
{ "sewamobilperdana.com", true },
{ "sewatec.com", true },
+ { "sewing-world.ru", true },
{ "sewinginsight.com", true },
{ "sewoo.co.uk", true },
{ "sex-education.com", true },
@@ -38676,6 +39945,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sg1.tech", true },
{ "sgb.co", true },
{ "sgcaccounts.co.uk", true },
+ { "sgcy.vip", true },
{ "sgdementia.ca", true },
{ "sgi.org", true },
{ "sgitc.de", true },
@@ -38700,13 +39970,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sha2017.org", true },
{ "shaadithailand.com", true },
{ "shabiwangyou.com", true },
- { "shachang.com", true },
{ "shad.waw.pl", true },
{ "shadedesign.cz", true },
{ "shadesofgrayadr.com", true },
{ "shadesofgraylaw.com", true },
{ "shadex.net", true },
{ "shadigee.org", true },
+ { "shadowcp.eu", true },
{ "shadowict.tech", true },
{ "shadowkingdomrecords.com", true },
{ "shadowkitsune.net", true },
@@ -38730,7 +40000,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shaicoleman.com", true },
{ "shakan.ch", true },
{ "shakebox.de", true },
- { "shaken-kyoto.jp", true },
{ "shaken110.com", true },
{ "shakepeers.org", false },
{ "shakerwebdesign.net", true },
@@ -38758,7 +40027,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shard.vc", true },
{ "sharealo.org", true },
{ "sharedhost.de", true },
- { "shareeri.xyz", true },
{ "sharefox.eu", true },
{ "sharefox.nl", true },
{ "sharejoy.cn", false },
@@ -38771,17 +40039,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sharescope.co.uk", false },
{ "shareselecttools.com", true },
{ "shareworks.com", true },
- { "sharezen.de", true },
{ "sharing-kyoto.com", true },
+ { "sharingphotos.co", true },
{ "sharisharpe.com", true },
{ "shark.cat", true },
{ "shark5060.net", true },
{ "sharkcut.se", true },
+ { "sharpe.systems", true },
+ { "sharperedge.pw", true },
+ { "sharperedgecomputers.com", true },
{ "sharu.me", true },
{ "sharvey.ca", true },
{ "shattered-souls.de", true },
{ "shaun.net", true },
- { "shaunandamyswedding.com", true },
{ "shaunc.com", true },
{ "shaundanielz.com", true },
{ "shav.it", true },
@@ -38821,6 +40091,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shellshock.eu", true },
{ "shellta.com", true },
{ "shellvatore.us", true },
+ { "shelvacu.com", true },
{ "shengbao.org", false },
{ "shenghaiautoparts.com", true },
{ "shenghaiautoparts.net", true },
@@ -38834,7 +40105,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shg-pornographieabhaengigkeit.de", false },
{ "shgroup.xyz", true },
{ "shgt.jp", true },
- { "shh-listen.com", true },
{ "shh.sh", true },
{ "shiawasedo.co.jp", true },
{ "shibbydex.com", true },
@@ -38847,6 +40117,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shiftdevices.com", true },
{ "shiftj.is", true },
{ "shiftleft.org", true },
+ { "shiftsixth.com", true },
{ "shiga1.jp", true },
{ "shihadwiki.com", true },
{ "shiji.info", true },
@@ -38884,7 +40155,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shiqi1.com", true },
{ "shiqishidai.cc", true },
{ "shiqisifu.cc", true },
- { "shirao.jp", true },
{ "shirt2go.shop", true },
{ "shirtsdelivered.com", true },
{ "shirtsofholland.com", true },
@@ -38909,9 +40179,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shoestringeventing.co.uk", true },
{ "shokola.com", true },
{ "shooter.dog", true },
- { "shootingstarmedium.com", true },
{ "shop-hellsheadbangers.com", true },
{ "shop-s.net", true },
+ { "shop4d.com", true },
{ "shopadvies.nl", true },
{ "shopalike.cz", true },
{ "shopalike.dk", true },
@@ -38946,10 +40216,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shoppingandreviews.it", true },
{ "shoppr.dk", true },
{ "shopregional.com.br", true },
+ { "shopsouthafrican.com", true },
{ "shopstart.dk", true },
{ "shopstasy.com", true },
{ "shoptec.sk", true },
{ "shopunilever.com", true },
+ { "shopwebhue.com", true },
{ "shorebreaksecurity.com", true },
{ "shorehamfort.co.uk", true },
{ "short-biography.com", false },
@@ -38976,6 +40248,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "showroom.co.uk", true },
{ "showroom.uk", true },
{ "showsonar.com", true },
+ { "shoxmusic.net", false },
{ "shred.ch", true },
{ "shredoptics.ch", true },
{ "shredriteservices.com", true },
@@ -39024,6 +40297,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sibfk.org", true },
{ "sibiutourguide.com", true },
{ "sibrenvasse.nl", true },
+ { "sice-si.org", true },
{ "sich-fight.club", true },
{ "siciliadisinfestazioni.it", true },
{ "siciliamconsulting.com", true },
@@ -39031,6 +40305,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "siciliapulizie.it", true },
{ "sicilyalacarte.com", true },
{ "sicken.eu", true },
+ { "sicurezza24.info", true },
{ "sicurezzalavoro24.com", true },
{ "sicurled.com", true },
{ "sicz.de", true },
@@ -39053,7 +40328,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sielsystems.nl", true },
{ "sientemendoza.com.ar", true },
{ "sierpinska.co", true },
- { "sierpinska.eu", true },
{ "sietejefes.com.ar", true },
{ "sift-tool.org", true },
{ "sig6.org", true },
@@ -39076,6 +40350,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "signaconsultoria.com.br", true },
{ "signage.red", true },
{ "signal.org", true },
+ { "signaletique-inox.fr", true },
{ "signalmaps.co.uk", true },
{ "signdesk.com", true },
{ "significados.com", true },
@@ -39083,6 +40358,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "significantbanter.com", true },
{ "signing-milter.org", true },
{ "signix.net", true },
+ { "signmycode.com", true },
{ "signpath.io", true },
{ "signrightsigns.co.uk", true },
{ "signtul.com", false },
@@ -39093,8 +40369,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "siikaflix.tv", true },
{ "siirtutkusu.com", true },
{ "sik-it.nl", true },
+ { "sikademy.com", true },
{ "sikayetvar.com", false },
- { "sikecikcomel.com", true },
{ "sikevux.se", true },
{ "sikko.biz", true },
{ "siku-shop.ch", true },
@@ -39104,17 +40380,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "silent-clean.de", true },
{ "silent-yachts.com", true },
{ "silentexplosion.de", true },
- { "silentkernel.fr", false },
+ { "silentkernel.fr", true },
{ "silentundo.org", true },
{ "silerfamily.net", true },
{ "silesianus.pl", true },
{ "silica-project.com", true },
{ "silica-project.jp", true },
{ "silicanetworks.com", true },
+ { "silicon-north.com", true },
+ { "silicon-vision.com", true },
{ "silkebaekken.no", true },
{ "silkon.net", true },
{ "sillisalaatti.fi", true },
- { "sillypoohbear.gq", true },
{ "sillysnapz.co.uk", true },
{ "silo.org.br", true },
{ "siloportem.net", true },
@@ -39132,26 +40409,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "silvergoldbull.cm", true },
{ "silvergoldbull.cn", true },
{ "silvergoldbull.co", true },
- { "silvergoldbull.co.ao", true },
{ "silvergoldbull.co.il", true },
{ "silvergoldbull.co.no", true },
{ "silvergoldbull.co.uk", true },
{ "silvergoldbull.com", true },
{ "silvergoldbull.com.ar", true },
{ "silvergoldbull.com.au", true },
- { "silvergoldbull.com.eg", true },
- { "silvergoldbull.com.mt", true },
{ "silvergoldbull.cr", true },
{ "silvergoldbull.cz", true },
{ "silvergoldbull.de", true },
- { "silvergoldbull.dj", true },
{ "silvergoldbull.do", true },
{ "silvergoldbull.ec", true },
{ "silvergoldbull.ee", true },
{ "silvergoldbull.es", true },
{ "silvergoldbull.fi", true },
{ "silvergoldbull.gd", true },
- { "silvergoldbull.ge", true },
{ "silvergoldbull.gl", true },
{ "silvergoldbull.gr", true },
{ "silvergoldbull.gt", true },
@@ -39165,17 +40437,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "silvergoldbull.li", true },
{ "silvergoldbull.lv", true },
{ "silvergoldbull.ma", true },
- { "silvergoldbull.mw", true },
{ "silvergoldbull.nz", true },
{ "silvergoldbull.pl", true },
{ "silvergoldbull.pt", true },
{ "silvergoldbull.qa", true },
{ "silvergoldbull.rs", true },
- { "silvergoldbull.ru", true },
{ "silvergoldbull.se", true },
{ "silvergoldbull.si", true },
{ "silvergoldbull.sv", true },
- { "silvergoldbull.tn", true },
{ "silvergoldbull.tt", true },
{ "silvergoldbull.tw", true },
{ "silvergoldbull.uy", true },
@@ -39200,7 +40469,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "simam.de", true },
{ "simark.ca", true },
{ "simbeton.nl", true },
- { "simeon.us", false },
{ "simeonoff.ninja", true },
{ "simetal.ch", true },
{ "simfdr.com", true },
@@ -39219,6 +40487,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "simon-czech.de", true },
{ "simon-hofmann.org", true },
{ "simon-mueller.de", true },
+ { "simon3k.moe", true },
{ "simonastallone.com", true },
{ "simonberard.garden", true },
{ "simonbondo.dk", true },
@@ -39259,7 +40528,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "simpleinout.com", true },
{ "simpleinvoices.io", true },
{ "simpleit.services", true },
- { "simplepress.uk", true },
{ "simpletax.ca", true },
{ "simplewire.de", true },
{ "simplexgame.net", true },
@@ -39270,16 +40538,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "simplifylivelove.com", true },
{ "simplithai.com", true },
{ "simplosoft.co.uk", true },
- { "simply.black", true },
{ "simply.scot", true },
+ { "simplycateringequipment.co.uk", true },
{ "simplycharlottemason.com", true },
{ "simplycloud.de", true },
{ "simplyenak.com", true },
{ "simplyfixit.co.uk", true },
{ "simplyhelen.de", true },
{ "simplylifetips.com", false },
- { "simplylovejesus.com", true },
- { "simplymozzo.se", true },
{ "simplyregister.net", true },
{ "simplytiles.com", true },
{ "simpte.com", true },
@@ -39296,12 +40562,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sincemydivorce.com", true },
{ "sinclairinat0r.com", true },
{ "sincordones.net", true },
+ { "sindarina.com", true },
+ { "sindarina.eu", true },
+ { "sindarina.net", true },
{ "sinde.ru", true },
{ "sindicatoburgos.org", true },
{ "sinergy.ch", true },
{ "sinfonietta-meridiana.de", true },
{ "singaporemint.com", true },
{ "singapurfirma.com", true },
+ { "singer.ru", true },
{ "singleuse.link", true },
{ "singlu10.org", false },
{ "sinktank.de", true },
@@ -39358,6 +40628,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "siseministeerium.ee", true },
{ "sismit.com", true },
{ "sismit.es", true },
+ { "sissden.eu", true },
{ "sisseastumine.ee", true },
{ "sistel.es", true },
{ "sistem-maklumat.com", true },
@@ -39367,6 +40638,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sistimiki-anaparastasi.gr", true },
{ "sistov.it", true },
{ "sisv.eu", true },
+ { "sisver.host", true },
+ { "sisver.mx", true },
{ "sit-brn.ru", true },
{ "sit.ec", true },
{ "sitanleta.de", true },
@@ -39375,6 +40648,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "site.pictures", true },
{ "sitebuilderreport.com", true },
{ "sitecentre.com.au", true },
+ { "sitedebelezaemoda.com.br", true },
{ "sitedrive.fi", true },
{ "sitefactory.com.br", true },
{ "sitenv.org", true },
@@ -39390,24 +40664,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sivale.mx", true },
{ "sivyerge.com", true },
{ "siw64.com", true },
- { "siwyd.com", true },
{ "six-o-one.com", true },
{ "sixnines.net", true },
{ "sixpackholubice.cz", true },
- { "sizuvip.com", true },
{ "sj-leisure.com", true },
{ "sjaakgilsingfashion.nl", true },
{ "sjamaan.nl", true },
- { "sjatsh.com", true },
{ "sjbwoodstock.org", true },
{ "sjd.is", false },
{ "sjdaws.com", true },
- { "sjis.me", true },
{ "sjleisure.co.uk", true },
{ "sjnp.org", true },
{ "sjoorm.com", true },
{ "sjorsvanweert.nl", true },
- { "sjp.co.uk", true },
{ "skala.io", true },
{ "skalar.sk", true },
{ "skanvordoff.ru", true },
@@ -39418,6 +40687,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skatingchina.com", true },
{ "skatn.de", true },
{ "skazka.ru", true },
+ { "skday.com", true },
{ "skedda.com", true },
{ "skedr.io", false },
{ "skeeley.com", true },
@@ -39473,11 +40743,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skolakrizik.cz", true },
{ "skolem.de", true },
{ "skoleniphp.cz", true },
+ { "skolni-system.eu", true },
{ "skolnilogin.cz", true },
{ "skolniweby.cz", true },
{ "skommettiamo.it", true },
{ "skontakt.cz", true },
- { "skontorp-enterprise.no", true },
{ "skoolergraph.azurewebsites.net", true },
{ "skorepova.info", true },
{ "skorovsud.ru", true },
@@ -39522,7 +40792,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skynet233.ch", true },
{ "skynethk.com", true },
{ "skynetnetwork.eu.org", true },
- { "skyparlourfilms.com", true },
{ "skype.com", true },
{ "skyportcloud.com", true },
{ "skyquid.co.uk", true },
@@ -39540,7 +40809,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skyzimba.com.br", true },
{ "sl-bildermacher.de", true },
{ "sl-informatique.fr", true },
- { "sl0.us", true },
{ "slab.com", false },
{ "slack-files.com", true },
{ "slack.com", true },
@@ -39559,7 +40827,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "slaughterhouse.fr", true },
{ "slavasveta.info", true },
{ "sldlcdn.com", true },
- { "sleepingbaghub.com", true },
{ "sleeplessbeastie.eu", true },
{ "sleepmap.de", true },
{ "sleeps.jp", true },
@@ -39598,11 +40865,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "slotfara.net", true },
{ "sloths.org", true },
{ "slotlist.info", true },
+ { "slow.social", true },
{ "slow.zone", true },
{ "slowb.ro", true },
{ "slowcookingperfected.com", true },
{ "slowgames.xyz", true },
{ "slownik123.pl", true },
+ { "slowsocial.email", true },
+ { "slowsocial.eu", true },
+ { "slowsocial.net", true },
+ { "slowsocial.org", true },
{ "slpm.com", true },
{ "slpower.com", true },
{ "slrd-isperih.com", true },
@@ -39626,19 +40898,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sma-gift.com", true },
{ "smackhappy.com", true },
{ "smakassen.no", true },
- { "smallbytedesign.co", true },
{ "smallcloudsolutions.co.za", true },
{ "smalldata.tech", true },
{ "smalldogbreeds.net", true },
{ "smalle-voet.de", true },
{ "smallhadroncollider.com", true },
- { "smallpath.me", true },
{ "smalltalkconsulting.com", true },
{ "smaltimento-rifiuti.org", true },
{ "smaltimento.caserta.it", true },
{ "smaltimento.milano.it", true },
{ "smaltimento.napoli.it", true },
{ "smaltimento.roma.it", true },
+ { "smaltimento.salerno.it", true },
{ "smaltimentoamianto.campania.it", true },
{ "smaltimentoamianto.frosinone.it", true },
{ "smaltimentoamianto.latina.it", true },
@@ -39664,7 +40935,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smartcheck.gov", true },
{ "smartcleaningcenter.nl", true },
{ "smartcpa.ca", true },
- { "smartedg.io", true },
{ "smartfit.cz", true },
{ "smartftp.com", true },
{ "smartgridsecurity.com", true },
@@ -39683,13 +40953,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smartmachine.com", true },
{ "smartmarketingcoaching.com", true },
{ "smartmeal.ru", true },
- { "smartmessages.net", true },
{ "smartminibushire.co.uk", true },
{ "smartmomsmartideas.com", true },
{ "smartpass.government.ae", true },
+ { "smartpatika.hu", true },
{ "smartphone-pliable.wtf", true },
{ "smartphonechecker.co.uk", true },
{ "smartphones-baratos.com", true },
+ { "smartplace.ro", true },
{ "smartpolicingplatform.com", true },
{ "smartproductguide.com", true },
{ "smartpti.net", true },
@@ -39701,7 +40972,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smartsparrow.com", true },
{ "smartthursday.hu", true },
{ "smartvideo.io", true },
- { "smartwank.com", true },
+ { "smartvita.com", true },
{ "smartweb.ge", true },
{ "smartwoodczech.cz", true },
{ "smartwritingservice.com", true },
@@ -39712,7 +40983,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smdcn.net", true },
{ "smdtk.com", true },
{ "sme-gmbh.net", true },
- { "smeetsengraas.com", true },
{ "smelly.cloud", true },
{ "smesitel-online.ru", true },
{ "smeso.it", true },
@@ -39721,6 +40991,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smicompact.com", true },
{ "smileandpay.com", true },
{ "smiledirectsales.com", true },
+ { "smilenwa.com", true },
{ "smilesatlakewood.com", true },
{ "smileserver.com", true },
{ "smilessoftplay.co.uk", true },
@@ -39731,7 +41002,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smipty.cn", true },
{ "smipty.com", true },
{ "smit.com.ua", true },
- { "smit.ee", true },
{ "smith.bz", true },
{ "smith.co", false },
{ "smithandcanova.co.uk", false },
@@ -39740,7 +41010,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smithf.red", true },
{ "smits.frl", true },
{ "smkw.com", false },
- { "smm.im", true },
{ "smokeandmirrors.agency", true },
{ "smokefree.gov", true },
{ "smokefreerowan.org", true },
@@ -39751,10 +41020,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smoo.st", true },
{ "smoothcomp.com", true },
{ "smoothgesturesplus.com", true },
- { "smoothics.at", true },
{ "smoothics.com", true },
- { "smoothics.eu", true },
- { "smoothics.net", true },
{ "smoothtalker.com", true },
{ "smorgasblog.ie", true },
{ "smrtrpck.com", true },
@@ -39786,6 +41052,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "snap.com", true },
{ "snapappointments.com", true },
{ "snapchat.com", true },
+ { "snapfinance.com", true },
+ { "snapintegrations.net", true },
{ "snapserv.ch", true },
{ "snapserv.net", true },
{ "snaptools.io", true },
@@ -39796,7 +41064,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sncdn.com", true },
{ "sndbouncycastles.co.uk", true },
{ "sneak.berlin", true },
- { "sneakers88.it", true },
{ "sneakpod.de", true },
{ "sneakycode.net", true },
{ "sneakynote.com", true },
@@ -39833,7 +41100,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "snoupon.com", true },
{ "snow-online.com", true },
{ "snow.dog", true },
- { "snowalerts.eu", true },
{ "snowalerts.nl", true },
{ "snowchamps.nl", true },
{ "snowcrestdesign.com", true },
@@ -39875,8 +41141,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "soblaznenie2.ru", true },
{ "sobotkama.eu", true },
{ "sobreporcentagem.com", true },
+ { "soc.net", true },
{ "socal-babes.com", true },
- { "soccorso-stradale.org", true },
{ "socheat.net", true },
{ "sochi-sochno.ru", true },
{ "sochic.in", true },
@@ -39888,17 +41154,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "socializam.com", true },
{ "socialmarketingday.nl", true },
{ "socialmedia-manager.gr", true },
- { "socialmedia.ro", true },
{ "socialnitro.com", true },
{ "socialnous.co", true },
{ "socialrank.com", true },
{ "socialsecurity.gov", false },
+ { "socialsecurityhelpcenters.com", true },
{ "socialtrends.pl", true },
{ "socialz.nl", true },
{ "societe-chablaisienne-de-revetements.com", true },
{ "societe-chablaisienne-de-revetements.fr", true },
{ "societyhilldance.com", true },
- { "socioambiental.org", true },
{ "sociobiology.com", true },
{ "sociology-schools.com", true },
{ "sociopathy.org", true },
@@ -39916,8 +41181,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "soe-server.com", true },
{ "sofa-rockers.org", true },
{ "sofabedshop.de", true },
+ { "soffit.com", true },
{ "sofgen.com", true },
{ "sofiadaoutza.gr", true },
+ { "sofiaestado.com", true },
{ "sofiavanmoorsel.com", true },
{ "sofiesteinfeld.de", true },
{ "sofoco.us", true },
@@ -39926,14 +41193,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "soft41.ru", true },
{ "softandbouncy.co.uk", true },
{ "softanka.com", true },
- { "softart.club", true },
{ "softballrampage.com", true },
{ "softblinds.co.uk", true },
{ "softcreatr.com", true },
{ "softcreatr.de", false },
{ "softfay.com", true },
{ "softonic.com", true },
- { "softonic.com.br", true },
{ "softonic.jp", true },
{ "softonic.pl", true },
{ "softplay4hire.co.uk", true },
@@ -39943,9 +41208,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "softtennis-zenei.com", true },
{ "softw.net", true },
{ "software-search.com", true },
- { "softwarebetrieb.de", true },
{ "softwarebeveiligingtestdomein.be", true },
{ "softwaredesign.foundation", false },
+ { "softwaregeek.nl", true },
+ { "softwaresen.com", true },
{ "softwarevoortherapeuten.nl", true },
{ "softwaylancing.com", true },
{ "softwerk-edv.de", true },
@@ -39954,7 +41220,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sogravatas.com.br", true },
{ "sogutma.com.tr", true },
{ "sohamroy.me", true },
- { "soia.ca", true },
{ "sointelcom.com.co", true },
{ "soinvett.com", true },
{ "sokaissues.info", true },
@@ -39963,6 +41228,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sokolkarvina.cz", true },
{ "sokouchousa.net", true },
{ "sol-computers.es", true },
+ { "sol.works", true },
{ "sol24.net", true },
{ "solacyre.ch", true },
{ "solanum-games.com", true },
@@ -39986,6 +41252,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "solemare-hotel.it", true },
{ "solentbasketball.co.uk", true },
{ "solentbubblesandbounce.co.uk", true },
+ { "solepurposetest.com", true },
{ "soleria.eu", true },
{ "solesoftware.de", true },
{ "soleus.nu", false },
@@ -40009,24 +41276,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "solomonsklash.io", true },
{ "solonotizie24.it", true },
{ "solos.im", true },
- { "solsocog.de", false },
+ { "solsocog.de", true },
+ { "solulan.com", true },
{ "solupredperu.com", true },
{ "solutionhoisthire.com.au", true },
{ "solutions-marquagedelignes.com", true },
{ "solutions-teknik.com", true },
+ { "solutiontestbank.com", true },
{ "solvation.de", true },
{ "solvemethod.com", true },
{ "solvewebmedia.com", true },
- { "solvingproblems.com.au", true },
{ "solvops.com", true },
{ "solxsys.com", true },
{ "somaini.li", true },
- { "somali-derp.com", true },
{ "somaliagenda.com", true },
{ "somaliaonline.com", true },
{ "somanao.com", true },
{ "somecrazy.com", true },
- { "somepills.com", true },
{ "somersetscr.nhs.uk", true },
{ "somersetwellbeing.nhs.uk", true },
{ "somethingsketchy.net", true },
@@ -40035,6 +41301,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sommeilsante.com", true },
{ "somnomedics.eu", true },
{ "somoshuemul.cl", true },
+ { "somoyorkies.com", true },
{ "sompani.com", true },
{ "somuchbetterwithage.com", true },
{ "somweyr.de", true },
@@ -40045,23 +41312,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sonavankova.cz", true },
{ "sondebase.com", true },
{ "sondergaard.de", true },
+ { "sonderkomission.ch", true },
{ "sondersobk.dk", true },
- { "songsmp3.co", true },
{ "songsmp3.com", true },
{ "songsmp3.cool", true },
- { "songsmp3.info", true },
{ "songsmp3.live", true },
{ "songsmp3.me", true },
- { "songsthatsavedyourlife.com", true },
{ "songtianyi.com", true },
{ "songzhuolun.com", true },
{ "sonia.com.au", true },
+ { "soniadoras.pe", true },
{ "soniafauville.com", true },
{ "sonic.studio", true },
{ "sonicdoe.com", true },
{ "sonix.dk", true },
{ "sonixonline.com", true },
{ "sonofsunart.com", true },
+ { "sony-psvita.ru", true },
{ "sonyunlock.nu", true },
{ "soohealthy.nl", true },
{ "soomee.be", true },
@@ -40074,9 +41341,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sophiaandmatt.co.uk", true },
{ "sophiahatstudio.com", true },
{ "sophiakligys.com", true },
+ { "sophieandtrey.com", true },
{ "sopo.me", true },
{ "sopra.tk", true },
{ "soprabalao.com.br", true },
+ { "soptq.me", true },
{ "sor.so", true },
{ "soraharu.com", true },
{ "sorakumo.jp", true },
@@ -40088,6 +41357,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sort.land", true },
{ "sortesim.com.br", true },
{ "soruly.com", true },
+ { "sorx.tech", true },
{ "sorz.org", true },
{ "sos-elettricista.it", true },
{ "sos-fabbro.it", true },
@@ -40107,13 +41377,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sotadb.info", true },
{ "sotar.us", true },
{ "sotoasobi.net", true },
- { "sou-co.jp", true },
{ "soubriquet.org", true },
{ "soufastnet.com.br", true },
{ "souked.com", true },
{ "souki.cz", true },
{ "soukodou.jp", true },
{ "soul-source.co.uk", true },
+ { "soulc.ml", true },
{ "soulcasa.com.br", true },
{ "soulcrazy.org", true },
{ "soulike.tech", true },
@@ -40123,6 +41393,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "soumikghosh.com", true },
{ "soumya.xyz", true },
{ "soumya92.me", true },
+ { "sounavholidays.com", true },
{ "sound.as", true },
{ "soundabout.nl", true },
{ "soundbytemedia.com", true },
@@ -40130,7 +41401,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "soundeo.com", true },
{ "soundeo.net", true },
{ "soundgasm.net", true },
- { "soundonsound.com", true },
{ "soundprotectionllc.com", true },
{ "sounds-familiar.info", true },
{ "soundscrate.com", true },
@@ -40155,6 +41425,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "southdakotahealthnetwork.com", true },
{ "southeastradiology.com", true },
{ "southeastvalleyurology.com", true },
+ { "southernlights.cf", true },
{ "southernlights.gq", true },
{ "southernmost.us", true },
{ "southernsurgicalga.com", true },
@@ -40162,7 +41433,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "southflanewsletter.com", true },
{ "southlakenissanparts.com", true },
{ "southlandurology.com", true },
- { "southmelbourne.apartments", true },
{ "southmorangtownhouses.com.au", true },
{ "southside-crew.com", true },
{ "southside-tuning-day.de", true },
@@ -40214,8 +41484,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spanyolul.hu", true },
{ "sparanoid.com", true },
{ "sparendirekt.at", true },
+ { "sparkar.com", true },
{ "sparkforautism.org", true },
{ "sparklebastard.com", true },
+ { "sparklesdelivery.com", true },
{ "sparkresearch.net", true },
{ "sparkz.no", true },
{ "sparprofi.at", true },
@@ -40254,7 +41526,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "speechndraw.com", true },
{ "speeddate.it", false },
{ "speeder.im", true },
- { "speeders.cf", true },
{ "speeders.ga", true },
{ "speedof.me", true },
{ "speedracer.ca", true },
@@ -40263,6 +41534,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "speedtest-russia.com", true },
{ "speedwaybusinesspark.com", true },
{ "speedychat.it", true },
+ { "speedyjanes.com", true },
{ "speeltoneel.nl", true },
{ "speerpunt.info", true },
{ "speets.ca", true },
@@ -40281,7 +41553,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sperrstun.de", true },
{ "spesys-services.fr", true },
{ "spewingmews.moe", true },
- { "spha.info", true },
+ { "sphardy.com", true },
{ "sphere-realty.com", true },
{ "spherenix.org", true },
{ "sphido.org", false },
@@ -40292,7 +41564,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spidernet.tk", true },
{ "spideroak.com", true },
{ "spiders.org.ua", true },
- { "spiegel21.de", true },
{ "spielezar.ch", true },
{ "spielland.ch", true },
{ "spieltexte.de", true },
@@ -40334,14 +41605,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "splitdna.com", true },
{ "splitreflection.com", true },
{ "splnk.net", true },
+ { "sploch.com", true },
{ "splopp.com", true },
{ "splunk.net", true },
- { "spmswiss.com", true },
{ "spnitalianfestival.com", true },
{ "spodelime.com", true },
{ "spofia.nu", true },
{ "spokaneexteriors.com", true },
{ "spokanepolebuildings.com", true },
+ { "spokesly.com", true },
{ "spoluck.ca", true },
{ "spolwind.de", true },
{ "spom.net", true },
@@ -40361,7 +41633,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sport-potreby.cz", true },
{ "sport-potreby.sk", true },
{ "sport-socken.net", true },
- { "sportabee.com", true },
+ { "sportabee.com", false },
{ "sportakrobatik.at", true },
{ "sportbetuwe.nl", true },
{ "sporter.com", true },
@@ -40380,8 +41652,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sporttown.it", true },
{ "sportugalia.ru", true },
{ "sportvereine.online", true },
- { "sportwette.eu", true },
- { "sportwetten-anbieter.de", true },
{ "sportxt.ru", true },
{ "spot-lumiere-led.com", true },
{ "spot.su", true },
@@ -40417,10 +41687,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spsidahoinc.com", true },
{ "spslawoffice.com", true },
{ "spsnewengland.org", true },
+ { "spstaticfiles.com", true },
{ "spt.re", true },
{ "spt.tf", true },
{ "sptk.org", true },
- { "sptr.blog", true },
{ "spuffin.com", true },
{ "spufpowered.com", true },
{ "spumanti.dk", true },
@@ -40432,7 +41702,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "spydar007.wiki", true },
{ "spydersec.com", true },
{ "spyprofit.ru", true },
- { "spyroszarzonis.com", true },
{ "sqdll.com", true },
{ "sqills.com", true },
{ "sql-und-xml.de", true },
@@ -40444,11 +41713,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sqr-training.com", true },
{ "sqroot.eu", true },
{ "sqsd.xyz", true },
+ { "squadlinx.com", true },
{ "square-gaming.org", true },
{ "square-src.de", false },
{ "square.com", false },
{ "squareup.com", false },
- { "squeakie.club", true },
{ "squeezemetrics.com", true },
{ "squido.ch", true },
{ "squidparty.com", true },
@@ -40458,6 +41727,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sr33.com", true },
{ "srandom.com", true },
{ "sranje.rocks", true },
+ { "srb.help", true },
{ "srbija-nekretnine.org", true },
{ "src-el-main.com", true },
{ "src.fedoraproject.org", true },
@@ -40472,8 +41742,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "srpx.de", true },
{ "srrdb.com", true },
{ "srroddy.com", true },
+ { "srsforward.email", true },
+ { "srsfwd.com", true },
+ { "srsfwd.email", true },
+ { "srsfwd.eu", true },
+ { "srsfwd.net", true },
+ { "srsfwd.org", true },
{ "srv.so", true },
{ "srvc.io", true },
+ { "srx.sx", true },
{ "ss.com", true },
{ "ss.lazio.it", true },
{ "ss.lt", true },
@@ -40483,6 +41760,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ss5197.co", true },
{ "ss64.com", true },
{ "ss64.org", true },
+ { "ss6729.co", true },
{ "ss6729.com", true },
{ "ss6957.co", true },
{ "ss88.uk", true },
@@ -40495,7 +41773,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ssbgportal.net", true },
{ "ssbkk.ru", true },
{ "ssbrm.ch", true },
- { "sscd.no", true },
{ "ssdax.com", true },
{ "ssenberg.nl", true },
{ "ssh-vault.com", true },
@@ -40504,7 +41781,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ssky.cn", true },
{ "ssl-zertifikate.de", true },
{ "ssl.do", true },
- { "ssl.doctor", true },
{ "ssl.google-analytics.com", true },
{ "ssl.md", true },
{ "ssl24.pl", true },
@@ -40530,12 +41806,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ssready.io", true },
{ "ssready.org", true },
{ "ssrfq.com", true },
+ { "ssrjiedian.com", true },
{ "sssppp.gq", true },
{ "sstaging.com", true },
{ "sstewartgallus.com", true },
{ "ssuiteoffice.com", true },
{ "ssuitesoft.com", true },
- { "st-antonius-kuenzell.de", true },
{ "st-bede.org", true },
{ "st-innovationcup.com", true },
{ "st-kilian-markt-erlbach.de", true },
@@ -40575,6 +41851,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stagelectrical.com.au", true },
{ "stagespediatrics.com", true },
{ "stahlfeuer-ofenwerkstatt.de", true },
+ { "stahlfors.com", true },
{ "stainedglass.net.au", true },
{ "stainternational.com", true },
{ "stair.ch", true },
@@ -40589,6 +41866,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stalker-shop.com", true },
{ "stalkerteam.pl", true },
{ "stalkr.net", true },
+ { "stameystreet.com", true },
{ "stamkassa.nl", true },
{ "stammtisch.domains", true },
{ "stamparmakarije.me", true },
@@ -40606,6 +41884,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "star-clean.it", true },
{ "star-darom.co.il", true },
{ "star-killer.net", true },
+ { "star-one.co.uk", true },
{ "star.watch", true },
{ "starcoachservices.ca", true },
{ "starcomproj.com", true },
@@ -40626,6 +41905,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "starlim.org", true },
{ "starlux.cz", true },
{ "starmtech.fr", true },
+ { "starorusing.com", true },
{ "starpeak.org", true },
{ "starretest.nl", true },
{ "starryvoid.com", true },
@@ -40634,12 +41914,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "starsing.bid", true },
{ "starstreak.net", false },
{ "startablog.tv", true },
+ { "startachim.eu", true },
{ "startaninflatablebusiness.com", true },
{ "startanull.ru", true },
- { "startergen.com", true },
{ "startersiteweb.com", true },
{ "startlab.sk", true },
{ "startle.cloud", true },
+ { "startle.studio", true },
{ "startliste.info", true },
{ "startloop.org", true },
{ "startmail.com", true },
@@ -40664,6 +41945,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "statically.io", true },
{ "staticline.de", true },
{ "stationa.ch", true },
+ { "stationary-traveller.eu", true },
{ "stationatbuckscounty.com", true },
{ "stationatlyndhurst.com", true },
{ "stationcharlie.co.za", true },
@@ -40672,17 +41954,20 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "statistikian.com", true },
{ "statofus.com", true },
{ "stats.g.doubleclick.net", true },
+ { "statusboard.eu", true },
{ "statuscode.ch", true },
{ "stav.io", true },
{ "stavnager.net", true },
{ "stavros.ovh", true },
{ "stay.black", true },
+ { "staycurrent.eu", true },
+ { "staycurrent.nl", true },
{ "stayme.cz", true },
{ "stayokay.com", true },
{ "stayschemingco.com", true },
{ "stb-lemke.de", true },
{ "stb-schefczyk.de", true },
- { "stb-strzyzewski.de", true },
+ { "stb-timmler.de", true },
{ "stb.gov", true },
{ "stbarnabashospice.co.uk", true },
{ "stbartholomewmanchester.org", true },
@@ -40700,18 +41985,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "steakovercooked.com", true },
{ "stealingheather.com", true },
{ "stealsaga.net", true },
+ { "stealthmodel.fi", true },
{ "steam-route-saxony.com", true },
{ "steamdb.info", true },
{ "steamerrors.com", true },
{ "steamgifts.com", true },
- { "steamold.com", false },
+ { "steamhours.com", false },
{ "steamosaic.com", true },
{ "steampress.io", true },
{ "steamstat.us", true },
{ "steamtrades.com", true },
{ "steamwhale.com", true },
{ "stebet.net", true },
- { "steborio.pw", true },
{ "stedb.eu", true },
{ "stedbg.net", true },
{ "steef389.eu", true },
@@ -40719,6 +42004,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "steelbeasts.org", true },
{ "steelephys.com.au", true },
{ "steelmounta.in", true },
+ { "steelpoint.com.pl", true },
{ "steemit.com", true },
{ "steemyy.com", true },
{ "steerty.com", true },
@@ -40754,6 +42040,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stellenticket.de", true },
{ "stellmacher.name", true },
{ "stembureauledenindenhaag.nl", true },
+ { "stemkit4kids.com", true },
{ "stemmayhem.com", true },
{ "stemsims.com", true },
{ "stening.co", true },
@@ -40764,6 +42051,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stephaniedeady.ie", true },
{ "stephanieschreiber.com", true },
{ "stephansurgicalarts.com", true },
+ { "stephencreilly.com", true },
{ "stephenhaunts.com", true },
{ "stephenhorler.com.au", true },
{ "stephenj.co.uk", true },
@@ -40794,11 +42082,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stern.koeln", true },
{ "sternadel.pl", true },
{ "sternen-sitzberg.ch", true },
- { "sternenbund.info", true },
{ "sternplastic.com", true },
{ "sternsinus.com", true },
{ "stesti.cz", true },
{ "stetson.edu", true },
+ { "steuer-voss.de", true },
{ "steuerkanzlei-edel.de", true },
{ "steuern-recht-wirtschaft.de", true },
{ "steuertipps-sonderausgaben.de", true },
@@ -40814,7 +42102,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stevenbolgartersnakes.com", true },
{ "stevengrech.com", true },
{ "stevenpilger.com", true },
- { "stevenroddis.com", true },
{ "stevens.se", false },
{ "steventress.com", true },
{ "stevenwooding.com", true },
@@ -40828,7 +42115,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stewartswines.com", true },
{ "stewpolley.com", false },
{ "steyaert.be", false },
- { "stforex.com", false },
{ "stfrancisnaugatuck.org", true },
{ "stfw.info", true },
{ "stgabrielavondalepa.org", true },
@@ -40893,6 +42179,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stkevin-stbenedict.org", true },
{ "stln.ml", true },
{ "stlouisinsuranceco.com", true },
+ { "stlouisnativeflute.com", true },
{ "stlu.de", true },
{ "stlukenh.org", true },
{ "stlukesbrandon.org", true },
@@ -40902,7 +42189,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stmariagoretti.net", true },
{ "stmarkseagirt.com", true },
{ "stmarthachurch.com", true },
- { "stmaryextra.uk", true },
{ "stmarysnutley.org", true },
{ "stmaryswestwarwick.org", true },
{ "stmatthewri.org", true },
@@ -40910,9 +42196,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stmichaellvt.com", true },
{ "stmichaelunion.org", true },
{ "stmlearning.com", true },
+ { "stmosesbookstore.org", true },
{ "stmsolutions.pl", true },
{ "stneotsbouncycastlehire.co.uk", true },
- { "stnevis.ru", true },
{ "stockholmpride.org", true },
{ "stockpile.com", true },
{ "stockportpyramid.co.uk", true },
@@ -40928,6 +42214,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stoffelnet.de", true },
{ "stoicatedy.ovh", true },
{ "stoinov.com", true },
+ { "stokl.com.au", true },
{ "stokvistrading.nl", true },
{ "stolin.info", true },
{ "stolina.de", false },
@@ -40950,7 +42237,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stopbullying.gov", true },
{ "stopfraud.gov", true },
{ "stopjunkmail.co.uk", true },
- { "stopmodacruel.org", true },
{ "stopoverconnections.com", true },
{ "stopthethyroidmadness.com", true },
{ "stopthinkconnect.jp", true },
@@ -40968,9 +42254,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "storycollective.nl", true },
{ "storyland.ie", true },
{ "storysift.news", true },
+ { "storytea.top", true },
{ "storytell.com", true },
{ "storytellingforbusiness.com.au", true },
{ "storytime.hu", true },
+ { "storzrealty.com", true },
{ "stouter.nl", true },
{ "stoxford.com", true },
{ "stpatrickbayshore.org", true },
@@ -40984,7 +42272,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "strafensau.de", true },
{ "strafvollzugsgesetze.de", true },
{ "strahlende-augen.info", true },
- { "straka.name", true },
+ { "strajnar.si", true },
{ "strandbyfysio.dk", true },
{ "strandedinotter.space", true },
{ "strandom.ru", true },
@@ -41009,7 +42297,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "strategiccapital.com", true },
{ "strategiclivingblog.com", true },
{ "strategie-zone.de", true },
- { "strategos.co", true },
{ "strathewerd.de", true },
{ "stratmann-b.de", true },
{ "stratuscloud.co.za", true },
@@ -41021,7 +42308,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "streamchan.org", true },
{ "streamelements.com", true },
{ "streamkit.gg", true },
- { "streampleasure.xyz", true },
+ { "streamspouredout.com", true },
{ "streathamfoodfestival.com", true },
{ "street-medics.fr", true },
{ "street-smart-home.de", true },
@@ -41059,7 +42346,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stroeder.com", true },
{ "stroeerdigital.de", true },
{ "stroginohelp.ru", true },
- { "stroke-of-luck.com", true },
{ "stromaci.sk", true },
{ "stromak.cz", true },
{ "strommenhome.com", true },
@@ -41074,7 +42360,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "strozik.de", true },
{ "strrl.com", true },
{ "structurally.net", true },
- { "structure.systems", true },
{ "strugee.net", true },
{ "strydom.me.uk", true },
{ "stsolarenerji.com", true },
@@ -41085,6 +42370,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sttg.com.au", true },
{ "stthomasbrigantine.org", true },
{ "stuartbell.co.uk", true },
+ { "stuartbell.uk", true },
{ "stuarteggerton.com", true },
{ "stuartmorris.id.au", true },
{ "stuartmorris.me", true },
@@ -41107,6 +42393,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "studentse.fr", true },
{ "studenttenant.com", true },
{ "studiebegeleiding-haegeman.be", true },
+ { "studienportal.eu", true },
{ "studio-637.com", true },
{ "studio-architetto.com", true },
{ "studio-fotografico.ru", true },
@@ -41144,6 +42431,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "studium.cz", true },
{ "studlan.no", true },
{ "studyin.jp", true },
+ { "studyportal.net", true },
{ "studyspy.ac.nz", true },
{ "studytactics.com", true },
{ "stuermer.me", true },
@@ -41153,6 +42441,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "stulda.cz", false },
{ "stumeta.de", true },
{ "stumeta2019.de", true },
+ { "stumf.si", true },
{ "stuntmen.xyz", true },
{ "stupendous.net", false },
{ "stutelage.com", true },
@@ -41183,6 +42472,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "subculture.live", true },
{ "subdev.org", true },
{ "subdimension.org", true },
+ { "subjektzentrisch.de", true },
{ "sublimebits.com", true },
{ "sublocale.com", true },
{ "submedia.tv", true },
@@ -41192,7 +42482,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "subsistence.wiki", true },
{ "substitutealert.com", true },
{ "subtitry.ru", true },
- { "subtlelonging.com", true },
{ "suburban-landscape.net", true },
{ "suburbaninfinitioftroyparts.com", true },
{ "subversive-tech.com", true },
@@ -41232,13 +42521,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sujoydhar.in", true },
{ "suka.moe", true },
{ "suke3.jp", true },
+ { "suki.moe", true },
{ "suko.pe", true },
+ { "sukoyaka-labo.com", true },
{ "sukrie.net", true },
+ { "suksesbisnisonline.id", true },
{ "suksit.com", true },
{ "sulavius.tech", true },
{ "sulek.eu", true },
{ "sullenholland.nl", true },
{ "suluvir.com", true },
+ { "sumatphoto.com", true },
{ "sumguy.com", true },
{ "sumit.me", true },
{ "sumitchahal.com", true },
@@ -41282,22 +42575,27 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sunfulong.me", true },
{ "sungreen.info", true },
{ "sunhaoxiang.net", true },
+ { "sunjaydhama.com", true },
{ "sunjiutuo.com", true },
{ "sunlit.cloud", true },
{ "sunn.ie", true },
{ "sunnibangla.com", true },
{ "sunny.co.uk", true },
+ { "sunnylyx.com", true },
+ { "sunnysidechurchofchrist.org", true },
{ "sunoikisis.org", true },
{ "sunplay.host", true },
{ "sunred.info", true },
{ "sunred.org", true },
{ "sunsetwx.com", true },
+ { "sunshine-cleaners.com.au", true },
{ "sunshinesf.org", true },
{ "sunsmartresorts.com", true },
{ "sunsong.org", true },
{ "sunsquare.cz", true },
{ "sunstar.bg", true },
{ "sunwolf.studio", true },
+ { "suourl.com", true },
{ "supa.sexy", true },
{ "supastuds.com", true },
{ "supedi.com", true },
@@ -41335,6 +42633,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "supern0va.net", true },
{ "supernaut.info", true },
{ "supernt.lt", true },
+ { "supersahnetorten.de", true },
+ { "supersena.com.br", true },
{ "supersole.net", true },
{ "supersonnig-festival.de", true },
{ "supersonnigfestival.de", true },
@@ -41349,6 +42649,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "superway.es", true },
{ "supeuro.com", true },
{ "supioka.com", true },
+ { "suplments.co.uk", true },
+ { "suplments.com", true },
+ { "suplments.de", true },
+ { "suplments.fr", true },
+ { "suplments.it", true },
+ { "suplments.pt", true },
{ "supmil.net", true },
{ "supplementler.com", true },
{ "supplies24.at", true },
@@ -41365,7 +42671,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "supremestandards.com", true },
{ "supriville.com.br", true },
{ "sur-v.com", true },
- { "surdam.casa", true },
{ "sure-it.de", true },
{ "surefit-oms.com", true },
{ "surefleet.com.au", true },
@@ -41373,9 +42678,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "surfnetkids.com", true },
{ "surfnetparents.com", true },
{ "surfocal.com", true },
+ { "surgenights.com", true },
{ "surgeongeneral.gov", true },
{ "surgicalassociateswny.com", true },
{ "surmountsoft.com", true },
+ { "surnet.io", true },
{ "suroil.com", true },
{ "surpreem.com", true },
{ "surreyheathyc.org.uk", true },
@@ -41432,7 +42739,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "svc-sitec.com.mx", true },
{ "svc-sitec.mx", true },
{ "svc-sitec.org", true },
- { "svc4u.de", true },
{ "svdb.co", false },
{ "svdesign.su", true },
{ "sveinerik.org", true },
@@ -41447,8 +42753,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "svetila.com", true },
{ "svetlilo.com", true },
{ "svht.nl", true },
+ { "svia.nl", true },
{ "svijet-medija.hr", true },
{ "svinformatica.es", true },
+ { "svisa.nl", true },
{ "svm-basketball.de", true },
{ "svm-it.eu", true },
{ "svobodnyblog.cz", true },
@@ -41458,7 +42766,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sw-machines.io", true },
{ "sw-servers.net", true },
{ "sw33tp34.com", true },
- { "swankism.com", true },
{ "swansdoor.org", true },
{ "swap.gg", true },
{ "swapadoodle.com", true },
@@ -41471,7 +42778,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "swaz.co.uk", true },
{ "swc-cfc.gc.ca", true },
{ "swd.agency", true },
+ { "swdiscount.ru", true },
{ "sweak.net", true },
+ { "swedentelugucommunity.com", true },
{ "swedishhost.com", true },
{ "swedishhost.se", true },
{ "sweep-me.net", true },
@@ -41486,11 +42795,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sweetgood.de", true },
{ "sweethomesnohomishrenovations.com", true },
{ "sweets-mimatsu.com", true },
- { "sweetydecor.ru", true },
{ "sweharris.org", true },
{ "swerve-media-testbed-03.co.uk", true },
{ "swetrust.com", true },
+ { "swey.net", false },
{ "swfmax.com", true },
+ { "swhw.io", true },
{ "swi.sytes.net", true },
{ "swid.co.uk", true },
{ "swiftcashforcars.com.au", true },
@@ -41521,6 +42831,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "swissvanilla.ch", true },
{ "swissvanilla.com", true },
{ "switch-trader.com", true },
+ { "switch.moe", true },
{ "switchchargers.com", true },
{ "switcheo.exchange", true },
{ "switcheo.rocks", true },
@@ -41535,6 +42846,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "swxtd.com", true },
{ "swy.cz", true },
{ "swyn.net", true },
+ { "sx6729.com", true },
{ "sx8.ovh", true },
{ "sxistolithos.gr", true },
{ "sy-anduril.de", true },
@@ -41558,8 +42870,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "sylvaindurand.fr", true },
{ "sylvaindurand.org", true },
{ "sylvaloir.fr", true },
- { "sylvan.me", true },
- { "sylvangarden.net", true },
{ "sylve.ch", true },
{ "sym01.com", true },
{ "symb.ch", true },
@@ -41580,6 +42890,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "synack.uk", true },
{ "synackr.net", true },
{ "synackrst.net", true },
+ { "synapsepain.com", true },
{ "synatra.co", true },
{ "sync-it.no", true },
{ "synccentre.com", true },
@@ -41596,12 +42907,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "synergyflare.com", true },
{ "synergyworkingdogclub.com", true },
{ "synerionagile.com", true },
+ { "synfin.org", true },
{ "synicalsyntax.com", true },
{ "synony.me", true },
{ "synotna.eu", true },
{ "syntheticgrassliving.com.au", true },
{ "synthetik.com", true },
+ { "syogainenkin119.com", true },
{ "syplasticsurgery.com", true },
+ { "sys-tm.com", true },
{ "sysadm.guru", true },
{ "sysadmins.ro", true },
{ "syscoon.com", true },
@@ -41620,6 +42934,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "systemadmin.uk", true },
{ "systematic-momo.com", true },
{ "systematic-momo.dk", true },
+ { "systemchile.com", true },
{ "systemctl.io", true },
{ "systemd.ch", true },
{ "systemd.eu.org", true },
@@ -41627,13 +42942,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "systemintegra.ru", true },
{ "systemisbusy.info", true },
{ "systemli.org", true },
- { "systemonthego.com", true },
{ "systemspace.link", true },
{ "systemups.com", true },
{ "systemweb.no", true },
{ "systoolbox.net", true },
{ "sysystems.cz", true },
{ "syt3.net", true },
+ { "syunpay.cn", true },
{ "syy.im", true },
{ "syzygy-tables.info", true },
{ "sz-ideenlos.de", true },
@@ -41642,13 +42957,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "szaloneigly.com", true },
{ "szamitogepdepo.com", true },
{ "szasz.me", true },
- { "szaydon.me", false },
+ { "szc.me", true },
{ "szclsya.me", true },
{ "szechenyi2020.hu", true },
{ "szentistvanpt.sk", true },
{ "szeptylasu.eu", true },
{ "szunia.com", true },
+ { "szurgot.eu", true },
{ "szybkiebieganie.pl", true },
+ { "szymczak.at", true },
{ "szyndler.ch", true },
{ "szzsivf.com", true },
{ "t-hawk.com", true },
@@ -41670,9 +42987,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "t6729.co", true },
{ "t6957.co", true },
{ "t7e.de", false },
+ { "t7ys.com", true },
{ "t9297.co", true },
{ "t9721.com", true },
{ "t9728.co", true },
+ { "t9i.in", true },
{ "ta-65.com", true },
{ "ta65.com", true },
{ "taabe.net", true },
@@ -41696,9 +43015,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taborsky.cz", true },
{ "tac-volley.com", true },
{ "tachi.uk", true },
- { "tacklinglife.com", true },
{ "tacomafia.net", true },
{ "tacticalavocado.com", true },
+ { "tadamstudio.ca", true },
{ "taddiestales.com", true },
{ "tadeo.ca", true },
{ "tadiranbatteries.de", true },
@@ -41719,8 +43038,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tagungsraum-usedom.de", true },
{ "tagungsraum-zinnowitz.de", true },
{ "tahavu.com", true },
- { "tahmintr.com", true },
+ { "taherian.me", true },
{ "tahosa.co", false },
+ { "taichichuanyang.com", true },
{ "taiklus.lt", true },
{ "tailpuff.net", false },
{ "tails.boum.org", true },
@@ -41754,16 +43074,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "takumi-s.net", true },
{ "takuto.de", true },
{ "takuyaphotos.com", true },
- { "talado.gr", false },
{ "talendipank.ee", true },
{ "talentcast.nl", true },
{ "talentcast.org", true },
- { "talenthub.co.nz", true },
{ "talentos.pt", true },
{ "talentwall.io", true },
{ "taler.net", true },
{ "talichi.com", true },
{ "talideon.com", false },
+ { "talis-bs.com", true },
{ "talk.google.com", true },
{ "talkgadget.google.com", true },
{ "talking12.com", true },
@@ -41778,7 +43097,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tallship.cz", true },
{ "talltreeskv.com.au", true },
{ "tallyfy.com", true },
- { "talon.rip", true },
{ "talroo.com", true },
{ "talun.de", true },
{ "talxis.com", true },
@@ -41843,9 +43161,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taotuba.org", true },
{ "taowa.ca", true },
{ "taoways.com", true },
+ { "tapissier-schall.fr", true },
{ "taplemon.at", true },
{ "taplemon.com", true },
{ "tappezzeria.roma.it", true },
+ { "tappezziere.milano.it", true },
{ "taprix.org", true },
{ "taquilla.com", true },
{ "tar-mag.com", true },
@@ -41900,13 +43220,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taxationweb.co.uk", true },
{ "taxaudit.com", true },
{ "taxhawk.com", true },
+ { "taxhunter.com.au", true },
{ "taxi-chamonix.fr", true },
{ "taxi-collectif.ch", true },
{ "taxi-edessas.gr", true },
{ "taxi-jihlava.cz", true },
{ "taxi-legroux.com", true },
{ "taxi-puck.pl", true },
+ { "taxi-uslu.de", true },
{ "taxi-waregem.be", true },
+ { "taxichic.com", true },
{ "taxicollectif.ch", true },
{ "taxid-k.be", true },
{ "taxis-collectifs.ch", true },
@@ -41916,7 +43239,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "taxo.fi", true },
{ "taxpackagesupport.com", true },
{ "taxsquirrel.com", true },
- { "tayanamina.com", true },
{ "taylorpearson.me", false },
{ "taylors-castles.co.uk", true },
{ "taylorstauss.com", true },
@@ -41946,6 +43268,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tchannels.tv", true },
{ "tchebb.me", true },
{ "tchebotarev.com", true },
+ { "tchnics.de", true },
{ "tchoukball.ch", true },
{ "tchverheul.nl", true },
{ "tcit.fr", true },
@@ -41960,7 +43283,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tcspartner.net", true },
{ "tcvvip.com", true },
{ "tcwis.com", true },
- { "tda602-secure-login.tk", true },
{ "tdchrom.com", true },
{ "tddos.pw", true },
{ "tdfbfoundation.org", true },
@@ -41970,6 +43292,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tdrs.info", true },
{ "tdsinflatables.co.uk", true },
{ "tdude.co", true },
+ { "tdyx-china.com.cn", true },
{ "tea.in.th", true },
{ "teachbiz.net", true },
{ "teachercreatedmaterials.com", true },
@@ -41978,14 +43301,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "teachingcopyright.com", true },
{ "teachingcopyright.net", true },
{ "teachingcopyright.org", true },
- { "teachmeplease.com", true },
{ "teachmeplease.ru", true },
{ "teachpeople.org", true },
{ "teachwithouttears.com", true },
{ "teahut.net", true },
{ "tealdotsinanorangeworld.com", true },
{ "team-azerty.com", true },
- { "team-bbd.com", true },
{ "team-io.net", true },
{ "team3482.com", true },
{ "teambeam.at", true },
@@ -42019,6 +43340,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "teasenetwork.com", true },
{ "teaser-trailer.com", true },
{ "teatrarium.com", true },
+ { "teb-akademia.pl", true },
{ "tebodental.com", true },
{ "teboorthodontics.com", true },
{ "tec3000.ch", true },
@@ -42051,12 +43373,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "techcultivation.de", false },
{ "techcultivation.net", false },
{ "techcultivation.org", false },
+ { "techdatapark.com", true },
{ "techdirt.com", true },
{ "techdroid.eu", true },
{ "techendeavors.com", true },
{ "techformator.pl", true },
{ "techforthepeople.org", true },
- { "techgadgetry.in", true },
{ "techglover.com", true },
{ "techhappy.ca", true },
{ "techinet.pl", true },
@@ -42070,7 +43392,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "techmasters.io", true },
{ "techmerch.ru", true },
{ "techmoviles.com", true },
- { "techmunchies.net", false },
+ { "techmunchies.net", true },
{ "techni-grav.com", true },
{ "technic3000.com", true },
{ "technicabv.nl", true },
@@ -42082,10 +43404,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "technik-boeckmann.de", true },
{ "technikblase.fm", true },
{ "technikman.de", true },
+ { "technistan.in", true },
{ "technofirstonline.com", true },
{ "technogps.com", true },
{ "technokicks.com", true },
{ "technologie-innovation.fr", true },
+ { "technology.cx", true },
{ "technologyhound.org", true },
{ "technologysi.com", true },
{ "technoparcepsilon.fr", true },
@@ -42093,6 +43417,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "technoscoots.com", true },
{ "technosorcery.net", true },
{ "technospeakco.com", true },
+ { "technotronikcanada.ca", true },
{ "techold.ru", true },
{ "techorbiter.com", true },
{ "techosmarcelo.com.ar", true },
@@ -42110,20 +43435,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "techtrader.io", true },
{ "techusers.de", true },
{ "techvalue.gr", true },
- { "techvhow.com", true },
{ "techview.link", true },
{ "techviewforum.com", true },
{ "techwayz.com", true },
{ "techwords.io", true },
{ "techy360.com", true },
{ "techzero.cn", true },
+ { "techzjc.com", true },
{ "teckids.org", true },
{ "tecknobox.fr", true },
{ "tecma.com", true },
{ "tecnaa.com", true },
{ "tecne.ws", true },
{ "tecnicoelettrodomestici.roma.it", true },
- { "tecnidev.com", true },
{ "tecnoarea.com.ar", true },
{ "tecnobrasilloja.com.br", true },
{ "tecnodritte.it", true },
@@ -42132,7 +43456,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tecnologiasurbanas.com", true },
{ "tecnosa.es", true },
{ "tecon.co.at", true },
- { "tecyt.com", true },
{ "ted.do", true },
{ "tedb.us", true },
{ "teddy.ch", true },
@@ -42145,9 +43468,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "teemo.gg", true },
{ "teemperor.de", true },
{ "teemulintula.fi", true },
+ { "teen-porno-video.ru", true },
{ "teenerotic.net", true },
{ "teengirl.pub", true },
{ "teensexgo.com", true },
+ { "teensybows.hu", true },
{ "teeqq.com", true },
{ "teetje-doko.de", true },
{ "teetoptens.com", true },
@@ -42161,6 +43486,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tehniss.rs", true },
{ "tehrabbitt.com", false },
{ "tehranperfume.com", true },
+ { "teichroeb.net", true },
{ "teixobactin.com", true },
{ "tejarat98.com", true },
{ "teknemodus.com.au", true },
@@ -42169,7 +43495,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tekniskakustik.se", true },
{ "tekno.de", true },
{ "teknoforums.com", true },
- { "teknoroit.com", true },
{ "tekstschrijvers.net", true },
{ "telamon.eu", true },
{ "telamon.fr", true },
@@ -42196,13 +43521,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "teleogistic.net", true },
{ "telepass.me", true },
{ "telephonedirectories.us", true },
+ { "teleport.com.br", true },
{ "teleskell.org", true },
{ "telestepina.ru", true },
{ "teletechnology.in", false },
{ "teletexto.com", true },
{ "televizeseznam.cz", true },
{ "telework.gov", true },
- { "telibee.com", true },
+ { "telford.codes", true },
{ "telling.xyz", true },
{ "tellingua.com", false },
{ "tellthemachines.com", true },
@@ -42241,7 +43567,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tenenz.com", true },
{ "tenisservis.eu", true },
{ "tenkofx.com", true },
- { "tenniscourtsjoburg.com", true },
{ "tennismindgame.com", true },
{ "tenno.tools", true },
{ "tenpo-iku.com", true },
@@ -42249,6 +43574,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tenseapp.pl", true },
{ "tenshoku-hanashi.com", true },
{ "tenta.com", true },
+ { "tentacletank.com", true },
{ "tentations-voyages.com", false },
{ "tentech.io", true },
{ "tenthousandcoffees.com", true },
@@ -42259,7 +43585,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tepid.org", true },
{ "tepitus.de", true },
{ "teplofom.ru", true },
+ { "teplomash24.ru", true },
{ "tequilazor.com", true },
+ { "terabyte-computing.com", true },
{ "terabyte.services", true },
{ "terabyteit.co.uk", true },
{ "teracloud.at", true },
@@ -42271,6 +43599,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "terlindung.com", true },
{ "terme.viterbo.it", true },
{ "termee.com", true },
+ { "terminalhrd.com", true },
{ "terminalvelocity.co.nz", true },
{ "termino.eu", true },
{ "terminsrakning.se", true },
@@ -42286,8 +43615,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "terraform.io", true },
{ "terragni-sarasin.ch", true },
{ "terrainator.com", true },
- { "terralimno.com", true },
- { "terralimno.eu", true },
{ "terraluna.space", true },
{ "terranova.fi", true },
{ "terrapay.com", true },
@@ -42295,10 +43622,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "terraweb.net", true },
{ "terresmagiques.com", true },
{ "terrorbilly.com", true },
- { "terrorismattacks.com", true },
{ "terrty.net", true },
{ "terrybutler.co.uk", true },
{ "terryjohnsononline.com", true },
+ { "terudon.com", true },
{ "tes.com", true },
{ "tesche.biz", true },
{ "teschenhausen.com", true },
@@ -42307,20 +43634,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tescoludia.sk", true },
{ "teskalabs.com", true },
{ "teslamagician.com", true },
- { "tesoro.pr", true },
{ "tessai.ga", true },
{ "tesseractinitiative.org", true },
- { "tessierashpool.de", true },
+ { "test-allegrodev.pantheonsite.io", true },
{ "test-greavesindia.pantheonsite.io", true },
{ "test-sev-web.pantheonsite.io", true },
{ "test-textbooks.com", true },
{ "test.de", true },
{ "test.support", true },
+ { "tested.email", true },
{ "testeri.fi", true },
{ "testeveonline.com", true },
{ "testfra.me", true },
{ "testgeomed.ro", true },
{ "testingbot.com", true },
+ { "testmx.email", true },
+ { "testmx.eu", true },
+ { "testmx.org", true },
{ "testomato.com", true },
{ "testoon.com", true },
{ "testpornsite.com", true },
@@ -42330,10 +43660,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "testvocacional.online", true },
{ "tetedelacourse.ch", true },
{ "teto.nu", true },
+ { "tetr.io", true },
{ "tetraetc.com", true },
{ "tetragir.com", true },
{ "tetraktus.org", true },
{ "tetrarch.co", true },
+ { "tetsai.net", true },
{ "tetsugakunomichi.jp", true },
{ "tetsumaki.net", true },
{ "teufel.dk", true },
@@ -42350,9 +43682,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "texastwostepdivorce.com", true },
{ "texasurodoc.com", true },
{ "texasvolunteerattorneys.org", true },
+ { "texaswinetrail.com", true },
{ "texby.com", true },
{ "texhnolyze.net", true },
- { "text-shirt.com", true },
+ { "texier.mx", true },
+ { "text-shirt.com", false },
{ "textbrawlers.com", true },
{ "textburst.com", true },
{ "texter-linz.at", true },
@@ -42360,6 +43694,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "texterseo.at", true },
{ "texterseo.de", true },
{ "textinmate.com", true },
+ { "textonly.email", true },
{ "textpattern.com", true },
{ "textualapp.com", true },
{ "textundblog.de", true },
@@ -42396,29 +43731,31 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thablubb.de", true },
{ "thaedal.net", true },
{ "thai.dating", true },
- { "thai.land", true },
{ "thaicurry.net", true },
{ "thaicyberpoint.com", true },
{ "thaiforest.ch", true },
{ "thaihomecooking.com", true },
+ { "thailandlongtime.com", true },
{ "thailandpharmacy.net", true },
{ "thailandpropertylisting.com", true },
+ { "thaimega.club", true },
{ "thajskyraj.com", true },
{ "thalan.fr", true },
{ "thalgott.net", false },
{ "thalhammer.it", true },
{ "thalia.nu", true },
{ "thaliagetaway.com.au", true },
+ { "thalmann.fr", true },
{ "thambaru.com", true },
{ "thamesfamilydentistry.com", true },
{ "thamtubinhminh.com", false },
{ "thanatoid.net", true },
{ "thanhthinhbui.com", true },
+ { "thaqfni.com", true },
{ "tharuka-app.de", true },
{ "tharuka.com", true },
{ "tharuka.de", true },
{ "thatdarkplace.com", true },
- { "thatguyalex.com", true },
{ "thatquiz.org", true },
{ "thatsme.io", true },
{ "thavmacode.gr", true },
@@ -42427,6 +43764,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thcdev.de", true },
{ "thconsulting.co.uk", true },
{ "thcpbees.co.uk", true },
+ { "the-alan-parsons-project.com", true },
{ "the-arabs.com", true },
{ "the-archimedeans.org.uk", true },
{ "the-bermanns.com", true },
@@ -42439,8 +43777,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "the-mystery.org", true },
{ "the-nash-education-program.com", true },
{ "the-pack.nl", true },
- { "the-pcca.org", true },
{ "the-train.de", true },
+ { "the-trophy-company.com", true },
{ "the-webmaster.com", true },
{ "the-woods.org.uk", true },
{ "the-zenti.de", true },
@@ -42460,15 +43798,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thealonas.ml", true },
{ "theantarticx.com", true },
{ "theanticellulitediet.com", true },
+ { "theapplewiki.com", true },
{ "theappliancedepot.co.uk", true },
- { "theaps.net", true },
{ "theasianshooter.com", true },
{ "theastrocoach.com", true },
{ "theatre-schools.com", true },
{ "theaviationagency.com", true },
{ "theazoorsociety.org", true },
{ "thebabypassport.com", true },
- { "thebakers.com.br", true },
+ { "thebakers.com.br", false },
{ "thebakery2go.de", true },
{ "thebannerstore.com", true },
{ "thebarrens.nu", true },
@@ -42478,10 +43816,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thebeardedrapscallion.com", true },
{ "thebeginningviolinist.com", true },
{ "thebestfun.co.uk", true },
- { "thebestpersonin.ml", true },
{ "thebigbitch.nl", true },
{ "thebigdatacompany.com", true },
- { "thebiggive.org.uk", true },
{ "thebiglaskowski.com", true },
{ "thebigslow.com", true },
{ "thebigwave.de", true },
@@ -42491,7 +43827,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thebirchwoods.com", true },
{ "thebirthdaysite.co.uk", true },
{ "thebit.link", true },
- { "theblackknightsings.com", true },
{ "theblacklock.com", true },
{ "theblondeabroad.com", true },
{ "theblueroofcottage.ca", true },
@@ -42505,7 +43840,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theboats.site", true },
{ "thebodyprinciple.com", true },
{ "thebonerking.com", true },
- { "theboss.ch", true },
{ "thebouncedepartment.co.uk", true },
{ "thebouncyman.co.uk", true },
{ "theboxofcarlos.com", true },
@@ -42530,7 +43864,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theclinician.com", true },
{ "thecloudshelter.com", true },
{ "thecoffeecamp.com", true },
- { "thecompany.pl", true },
{ "thecondobuyers.com", true },
{ "thecr3ative.com", true },
{ "thecr3ative.tk", true },
@@ -42538,18 +43871,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thecrescentchildcarecenter.com", true },
{ "thecrew-exchange.com", true },
{ "thecskr.in", true },
+ { "thecstick.com", true },
{ "thecuriousdev.com", true },
{ "thecurvyfashionista.com", true },
{ "thecustomdroid.com", true },
- { "thecyberaid.com", true },
{ "theda.co.za", true },
{ "thedailyshirts.com", true },
{ "thedark1337.com", true },
{ "thederminstitute.com", true },
- { "thedermreport.com", true },
{ "thedhs.com", true },
{ "thediamondcenter.com", true },
{ "thediaryofadam.com", true },
+ { "thedinnerdetective.com", true },
{ "thedisc.nl", true },
{ "thediscovine.com", true },
{ "thedocumentrefinery.com", true },
@@ -42557,6 +43890,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thedronechart.com", true },
{ "thedroneely.com", true },
{ "thedword.xyz", true },
+ { "theebookkeepers.co.za", true },
{ "theeducationchannel.info", true },
{ "theeducationdirectory.org", true },
{ "theeffingyogablog.com", true },
@@ -42619,6 +43953,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thehomeicreate.com", true },
{ "thehonorguard.org", true },
{ "thehookup.be", true },
+ { "thehopefuture.com", true },
{ "thehotfix.net", true },
{ "thehub.ai", true },
{ "theideaskitchen.com.au", true },
@@ -42635,7 +43970,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theintercept.com", true },
{ "theinternationalgeekconspiracy.eu", true },
{ "theissen.io", true },
- { "theissue.com.au", true },
{ "theitsage.com", false },
{ "thejacksoninstitute.com.au", true },
{ "thejimmyw.uk", true },
@@ -42648,9 +43982,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thekovnerfoundation.org", true },
{ "thelaimlife.com", true },
{ "thelanscape.com", true },
- { "thelastbeach.top", true },
- { "thelatedcult.com", true },
{ "thelbc.io", true },
+ { "theleap.co.uk", true },
{ "thelearningenterprise.co.uk", true },
{ "thelegionshirley.co.uk", true },
{ "thelifeofmala.com", true },
@@ -42669,6 +44002,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "themecraft.studio", true },
{ "themefoxx.com", true },
{ "themenmedia.com", true },
+ { "themenzentrisch.de", true },
{ "themeridianway.com", true },
{ "themetacity.com", true },
{ "themiddle.co", true },
@@ -42686,6 +44020,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theneatgadgets.com", true },
{ "thenerdic.com", true },
{ "thenetw.org", true },
+ { "thenewclassics.com", true },
+ { "thenexteducation.com", true },
{ "thenexwork.com", true },
{ "thenib.com", true },
{ "thenine.info", true },
@@ -42698,13 +44034,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theobromos.fr", true },
{ "theoc.co", true },
{ "theocharis.org", true },
+ { "theodeboer.nl", true },
{ "theodorahome.co", true },
{ "theodorahome.com.br", true },
{ "theofleck.com", true },
+ { "theokouzelis.com", true },
{ "theologyz.com", true },
{ "theonethaimassage.de", true },
{ "theoptechnation.com", true },
{ "theoriginalbit.com", true },
+ { "theoriginalmarkz.com", true },
{ "theory-test-online.co.uk", true },
{ "theory.org", true },
{ "theoscure.eu", true },
@@ -42719,12 +44058,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thepb.in", true },
{ "thepeoplesdata.com", true },
{ "thepeoplesdata.org", true },
+ { "theperry.group", true },
{ "thepharm.co.nz", true },
{ "thephonecaseplace.com", true },
{ "thephp.cc", true },
{ "thepickledhedgehog.com", true },
{ "thepieslicer.com", true },
- { "thepiratesociety.org", true },
+ { "thepillclub.com", true },
{ "theplasticsurgerycenterofnashville.com", true },
{ "theplayspot.co.uk", true },
{ "thepoplarswines.com.au", true },
@@ -42747,6 +44087,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "therevenge.me", true },
{ "therhetorical.ml", true },
{ "thermalbad-therme.de", true },
+ { "thermalflowtech.com", true },
{ "thermia.co.nz", true },
{ "thermia.com.au", true },
{ "thermique.ch", true },
@@ -42759,17 +44100,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "theruizes.com", true },
{ "theruleslawyer.net", true },
{ "therumfordcitizen.com", true },
- { "thesage.cf", true },
+ { "therworth.com", true },
+ { "therworth.eu", true },
+ { "therworth.net", true },
+ { "therworth.org", true },
{ "thesalonthing.com", false },
{ "thesanta.biz", true },
{ "thesarogroup.com", true },
+ { "thesassynut.com", true },
{ "thesaturdaypaper.com.au", true },
{ "thesaurus.net", true },
{ "theschool.jp", true },
{ "thescientists.nl", true },
{ "thesecondsposts.com", false },
+ { "thesecurityvault.com", true },
{ "theseed.io", true },
- { "theseedbox.xyz", true },
{ "theseletarmall.com", true },
{ "theseoframework.com", true },
{ "theseosystem.com", true },
@@ -42799,18 +44144,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thestationatwillowgrove.com", true },
{ "thesteamrooms.com", true },
{ "thesteins.org", false },
+ { "thestockoasis.com", true },
{ "thestoneage.de", true },
{ "thestory.ie", true },
{ "thestoryshack.com", true },
{ "thestrategyagency.com.au", true },
{ "thestreamable.com", true },
{ "thestudyla.com", true },
+ { "thestylebouquet.com", true },
{ "thestyleforme.com", true },
{ "thesuppercircle.com", true },
{ "theswissbay.ch", true },
{ "theta.eu.org", true },
{ "thetassos.com", true },
{ "thetechbasket.com", true },
+ { "thetenscrolls.com", true },
{ "thethreadofhope.org", true },
{ "thethreepercent.marketing", true },
{ "thetiedyelab.com", true },
@@ -42829,11 +44177,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thevalueofarchitecture.com", true },
{ "thevenueofhollywood.com", true },
{ "theverybusyoffice.co.uk", true },
+ { "thevgg.com", false },
+ { "theviewat55th.com", true },
+ { "thevirtualbookkeepers.com", true },
{ "thevisasofoz.com", true },
{ "thevoya.ga", true },
{ "thewagesroom.co.uk", true },
- { "thewaxhouse.academy", true },
- { "thewaxhouse.de", true },
{ "thewayofthedojo.com", true },
{ "thewebflash.com", true },
{ "thewebsitedoctors.co.uk", true },
@@ -42853,6 +44202,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thexfactorgames.com", true },
{ "thexme.de", true },
{ "theyakshack.co.uk", true },
+ { "theyarnhookup.com", false },
+ { "theycallmefox.net", true },
{ "theyear199x.org", true },
{ "theyearinpictures.co.uk", true },
{ "theyosh.nl", true },
@@ -42876,8 +44227,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thing.vn", true },
{ "thing4everyone.com", true },
{ "thingies.site", true },
+ { "thingsandcode.com", true },
{ "thingsimplied.com", false },
- { "thingsof.org", true },
{ "thingswithstuff.llc", true },
{ "think-asia.org", true },
{ "think-pink.info", true },
@@ -42886,6 +44237,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thinkindifferent.net", true },
{ "thinkingandcomputing.com", true },
{ "thinkingliberty.com", true },
+ { "thinkingplanet.net", true },
{ "thinkmarketing.ca", true },
{ "thinkquality.nl", true },
{ "thinkrealty.com", true },
@@ -42893,6 +44245,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thinktux.net", true },
{ "thirdbearsolutions.com", true },
{ "thirdgenphoto.co.uk", true },
+ { "thirtysixseventy.ml", true },
{ "thiry-automobiles.net", true },
{ "this-server-will-be-the-death-of-me.com", true },
{ "thisbrownman.com", true },
@@ -42910,7 +44263,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thisphone.us", true },
{ "thistleandleaves.com", true },
{ "thitruongsi.com", true },
- { "thmpartners.com", true },
{ "thole.org", true },
{ "thom4s.info", true },
{ "thomalaudan.de", true },
@@ -42933,26 +44285,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thomaskaviani.be", true },
{ "thomasmcfly.com", true },
{ "thomasmerritt.de", true },
+ { "thomaspluschris.com", true },
{ "thomassen.sh", true },
{ "thomasstevensmusic.com", true },
{ "thomastimepieces.com.au", true },
{ "thomasverhelst.be", true },
{ "thomasvochten.com", true },
- { "thomaswoo.com", true },
{ "thomien.de", true },
{ "thompsonfamily.cloud", true },
{ "thomsonscleaning.co.uk", true },
{ "thomspooren.nl", true },
{ "thomwiggers.nl", true },
+ { "thooka.com", true },
{ "thor.edu", true },
{ "thor.re", true },
{ "thoroughbreddiesel.com", true },
{ "thorsten-schaefer.com", false },
{ "thorstenschaefer.name", true },
{ "thotpublicidad.com", true },
- { "thoughtsynth.com", true },
- { "thoughtsynth.net", true },
- { "thoughtsynth.org", true },
{ "thouni.de", true },
{ "thousandoakselectrical.com", true },
{ "thousandoaksexteriorlighting.com", true },
@@ -42963,10 +44313,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thpay.com", true },
{ "threatcon.io", true },
{ "threatmarket.com", true },
+ { "threatmonitor.io", true },
{ "threatnix.io", true },
{ "threatworking.com", true },
{ "threecrownsllp.com", true },
{ "threedpro.me", true },
+ { "threefantasy.com", true },
{ "threefours.net", false },
{ "threelions.ch", true },
{ "threema.ch", true },
@@ -43003,9 +44355,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "thycotic.ru", true },
{ "thymiaturtle.de", true },
{ "thyngster.com", true },
+ { "thyrex.fr", true },
{ "ti-pla.net", true },
{ "ti-planet.org", true },
- { "ti780.com", true },
{ "tiagonunes.pt", true },
{ "tiaki.org", true },
{ "tianeptine.com", true },
@@ -43013,13 +44365,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tib1.com", true },
{ "tibicinagarricola.com", true },
{ "tibipg.com", true },
- { "tibovanheule.space", true },
{ "ticfleet.com", true },
{ "ticinoscout.ch", true },
{ "ticketassist.nl", true },
{ "ticketcity.com", true },
{ "ticketdriver.com", true },
- { "ticketmaze.com", true },
{ "ticketpro.ca", false },
{ "ticketrunway.com", true },
{ "ticketslover.com", true },
@@ -43033,22 +44383,26 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tickit.ca", false },
{ "tid.jp", true },
{ "tidy.chat", true },
+ { "tidych.at", true },
{ "tidycustoms.net", true },
{ "tiekoetter.com", true },
{ "tielecingenieria.com.co", true },
{ "tiendadecosplay.es", true },
{ "tiendafetichista.com", true },
+ { "tiendasmart.com.co", true },
{ "tiens-ib.cz", true },
{ "tierarztpraxis-bogenhausen.de", true },
{ "tierarztpraxis-illerwinkel.de", true },
{ "tierarztpraxis-weinert.de", true },
{ "tiergear.com.au", true },
+ { "tiernanx.com", true },
{ "tieronegraphics.com", true },
{ "tierraprohibida.net", true },
{ "ties.com", true },
{ "tiew.pl", true },
{ "tifan.net", true },
{ "tifaware.com", true },
+ { "tiffanytravels.com", true },
{ "tiffnix.com", true },
{ "tiger21.com", true },
{ "tigerchef.com", true },
@@ -43074,9 +44428,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tilleysbouncycastles.co.uk", true },
{ "tillseasyscore.com", true },
{ "tilman.ninja", true },
- { "tilosp.de", true },
{ "tilta.com", true },
- { "tiltedwindmillcrafts.com", true },
{ "tim-demisch.de", true },
{ "timbarlotta.com", true },
{ "timberkel.com", true },
@@ -43113,12 +44465,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "timing.com.br", true },
{ "timjk.de", false },
{ "timmersgems.com", true },
- { "timmy.im", true },
{ "timmyrs.de", true },
{ "timnash.co.uk", true },
{ "timonengelke.de", true },
{ "timoso.de", true },
- { "timowi.de", true },
{ "timoxbrow.com", true },
{ "timroes.de", true },
{ "timsayedmd.com", true },
@@ -43139,17 +44489,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tinhbotnghegold.com", true },
{ "tinhchattrangda.vn", true },
{ "tinkerbeast.com", true },
+ { "tinkerboard.org", true },
{ "tinkertry.com", true },
{ "tinlc.org", true },
+ { "tinlook.com", true },
{ "tinte24.de", true },
{ "tintencenter.com", true },
{ "tintenfix.net", true },
{ "tintenfux.de", true },
{ "tintenland.de", true },
{ "tintenprofi.de", true },
+ { "tintoria.roma.it", true },
{ "tiny.ee", true },
{ "tinyhousefinance.com.au", true },
{ "tinylan.com", true },
+ { "tinyppt.com", true },
{ "tinyspeck.com", true },
{ "tinyssh.com", true },
{ "tinyssh.org", true },
@@ -43167,7 +44521,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tipstersweb.com", true },
{ "tipulnagish.co.il", true },
{ "tir-mauperthuis.fr", true },
- { "tir-pistolet-chexbres.ch", true },
{ "tiratuki.games", true },
{ "tircentrale.net", true },
{ "tirionnetwork.de", true },
@@ -43176,7 +44529,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tirs4ne.ch", true },
{ "tis.ph", true },
{ "tischlerei-klettke.de", true },
- { "tism.in", true },
{ "tissot-mayenfisch.com", true },
{ "tissus-paris.com", true },
{ "tisvapo.it", true },
@@ -43187,7 +44539,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tit.systems", true },
{ "titanandco.com", true },
{ "titandirect.co.uk", true },
- { "titanous.com", true },
{ "titanplumbingservices.com.au", true },
{ "titansized.com", true },
{ "titanwaterproofing.com.au", true },
@@ -43212,11 +44563,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tkcafe.net", true },
{ "tkgpm.com", true },
{ "tkirch.de", true },
- { "tkjg.fi", true },
+ { "tkn.me", true },
+ { "tkn.tokyo", true },
{ "tkusano.jp", true },
{ "tkw01536.de", false },
{ "tl.gg", true },
{ "tlca.org", true },
+ { "tlcnet.info", true },
{ "tldtattoo.com", true },
{ "tlehseasyads.com", true },
{ "tleng.de", true },
@@ -43254,7 +44607,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tmsdiesel.com", true },
{ "tmtopup.com", true },
{ "tn0.club", true },
- { "tnd.net.in", true },
+ { "tncentro.com", true },
{ "tndentalwellness.com", true },
{ "tnes.dk", true },
{ "tniad.mil.id", false },
@@ -43275,6 +44628,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tobi-server.goip.de", true },
{ "tobiaalberti.com", true },
{ "tobias-bauer.de", true },
+ { "tobias-bauer.eu", true },
+ { "tobias-bauer.fr", true },
+ { "tobias-bauer.net", true },
{ "tobias-haenel.de", true },
{ "tobias-kleinmann.de", true },
{ "tobias-kluge.com", true },
@@ -43289,14 +44645,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tobiashorvath.de", true },
{ "tobiaskorf.de", true },
{ "tobiaspahlings.de", true },
+ { "tobiassachs.de", true },
{ "tobiassattler.com", true },
{ "tobiaswiese.com", true },
{ "tobiaswiese.eu", true },
{ "tobiaswiese.net", true },
{ "tobiaswiese.org", true },
- { "tobiaswiese.work", true },
{ "tobiemilford.com", true },
{ "tobis-rundfluege.de", true },
+ { "tobis.cloud", true },
{ "tobischo.de", true },
{ "tobisworld.ch", true },
{ "tobyalden.com", true },
@@ -43331,17 +44688,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "toeightycountries.com", true },
{ "toekomstperspectief.be", true },
{ "toerschaatsenknsb.nl", true },
+ { "toerschaatsenoverijssel.nl", true },
{ "toest.bg", true },
{ "toetsplatform.be", true },
{ "tofe.io", true },
{ "tofliving.nl", true },
- { "tofu.cf", true },
{ "togech.jp", true },
{ "togetter.com", true },
{ "toheb.de", false },
{ "tohochofu-sportspark.com", true },
+ { "tohofc.co.jp", true },
{ "tohokinemakan.tk", true },
- { "tojannah.com", true },
+ { "toihoctiengtrung.com", false },
+ { "tojannah.com", false },
{ "tokaido-kun.jp", true },
{ "tokaido.com", true },
{ "tokainafb.net", true },
@@ -43364,10 +44723,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tokyomakino.com", true },
{ "tokyovipper.com", true },
{ "tolboe.com", true },
+ { "toldositajuba.com", false },
{ "toleressea.fr", true },
{ "toles-sur-mesure.fr", true },
{ "tolle-wolke.de", true },
{ "tollerunterricht.com", true },
+ { "tolmaidis.com", true },
{ "tom-geiger.de", true },
{ "tom-kunze.de", true },
{ "tom-kurka.cz", true },
@@ -43378,8 +44739,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tomabrafix.de", true },
{ "tomahawk.ca", true },
{ "tomandmara.com", true },
+ { "tomashouzvicka.com", true },
+ { "tomashouzvicka.pl", true },
{ "tomasjacik.cz", true },
{ "tomaskavalek.cz", false },
+ { "tomasmoberg.org", true },
{ "tomaspatera.cz", true },
{ "tomasvecera.cz", true },
{ "tomasz.com", true },
@@ -43403,6 +44767,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tomjans.nl", true },
{ "tomjepp.uk", true },
{ "tomjn.com", true },
+ { "tomkempers.nl", true },
{ "tomkunze.de", true },
{ "tomli.blog", true },
{ "tomlowenthal.com", true },
@@ -43420,6 +44785,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tomsherakmshope.org", true },
{ "tomspdblog.com", true },
{ "tomssl.com", true },
+ { "tomthorogood.co.uk", true },
+ { "tomthorogood.uk", true },
{ "tomticket.com", true },
{ "tomudding.nl", true },
{ "tomvote.com", true },
@@ -43465,7 +44832,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tontonnews.net", true },
{ "tonyarcieri.com", true },
{ "tonymanning.com", true },
- { "tonytan.cn", true },
{ "tonytan.io", true },
{ "tonytron.com.br", true },
{ "tonyw.xyz", true },
@@ -43479,6 +44845,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "toolroomrecords.com", true },
{ "tools.pro", true },
{ "toolsense.io", true },
+ { "toolshero.com", true },
{ "toom.io", true },
{ "toomy.pri.ee", true },
{ "toon.style", true },
@@ -43488,20 +44855,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "toool.nl", true },
{ "toool.nyc", true },
{ "toool.org", true },
- { "tooolroc.org", false },
{ "toot.center", true },
{ "toothdoc.ca", true },
{ "tooti.biz", true },
{ "top-obaly.cz", true },
{ "top-opakowania.pl", true },
+ { "top2servers.tv", true },
{ "top4shop.de", true },
{ "top5hosting.co.uk", true },
{ "top6casinos.com", true },
+ { "toparkinfo.hu", true },
{ "topaxi.ch", true },
{ "topaxi.codes", true },
{ "topbestsellerproduct.com", true },
{ "topbigdeals.com", true },
{ "topbounce.com", true },
+ { "topcarehvac.ca", true },
{ "topciderska-crkva.rs", true },
{ "topclassfun.ie", true },
{ "topdesk.net", true },
@@ -43527,6 +44896,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "toponlinecasinosites.co.uk", true },
{ "toppercan.es", true },
{ "topprice.ua", true },
+ { "topproductidea.com", true },
+ { "topproductsanalysis.com", true },
+ { "topreit.ru", true },
+ { "topservercccam.tv", true },
{ "topshelf.tech", true },
{ "topshelfcommercial.com", true },
{ "topsteaks-daun.de", true },
@@ -43561,7 +44934,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "toros2.com", true },
{ "torproject.org", false },
{ "torprojects.com", true },
- { "torquato.de", false },
{ "torrent.fedoraproject.org", true },
{ "torrent.is", true },
{ "torrent.tm", true },
@@ -43571,7 +44943,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "torrentfunk.pw", true },
{ "torrentfunk2.com", true },
{ "torrenttop100.net", true },
- { "torrentz2.eu", true },
+ { "torresshop.es", true },
{ "torresygutierrez.com", true },
{ "torretzalam.com", true },
{ "torservers.net", true },
@@ -43598,6 +44970,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "totalclean.co.uk", true },
{ "totalemaildelivery.com", true },
{ "totalforcegym.com", true },
+ { "totalhomecareinc.com", true },
{ "totallylegitimatehosting.ru", true },
{ "totalpahire.com", true },
{ "totalparts.com.au", true },
@@ -43610,7 +44983,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "toucan-informatique.fr", true },
{ "touch.facebook.com", false },
{ "touch.mail.ru", true },
- { "touchinformatica.com", true },
{ "touchoflife.in", true },
{ "touchscreentills.com", true },
{ "touchstone.io", true },
@@ -43618,14 +44990,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "touchtunesnz.com", true },
{ "touchweb.fr", true },
{ "touchwoodtrees.com.au", true },
+ { "touhou.ac.cn", true },
{ "touhou.fm", true },
{ "touhouwiki.net", true },
{ "toujours-actif.com", true },
{ "toulineprestige.com", true },
+ { "tourdatenarchiv.de", true },
{ "tourdewestwoud.nl", true },
{ "tourgest.net", true },
{ "tourismwithme.com", true },
- { "tournamentmgr.com", true },
{ "tournevis.ch", true },
{ "tourtransferitaly.it", true },
{ "tourtrektrip.com", true },
@@ -43680,8 +45053,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tpro.co.id", true },
{ "tpro.rocks", true },
{ "tqdev.com", true },
+ { "tqm1.sk", true },
{ "tr.search.yahoo.com", false },
- { "tr0n.net", true },
{ "traas.org", true },
{ "trabajarenremoto.com", true },
{ "trabbel.org", true },
@@ -43692,11 +45065,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tracfinancialservices.com", true },
{ "tracinsurance.com", true },
{ "trackchair.com", true },
- { "trackdomains.com", true },
{ "tracker.com.ar", true },
{ "trackersimulator.org", true },
{ "trackeye.dk", true },
{ "tracking.best", true },
+ { "trackingstream.com", true },
{ "trackrecordpro.co.uk", true },
{ "tracksa.com.ar", true },
{ "trackyourlogs.com", true },
@@ -43784,6 +45157,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trajectvideo.nl", true },
{ "tramclub-basel.ch", true },
{ "tran.pw", true },
+ { "trance.im", true },
+ { "trancehost.com", true },
+ { "trancetronic.com", true },
{ "trangell.com", true },
{ "tranhsondau.net", false },
{ "tranquillity.se", true },
@@ -43794,10 +45170,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "transdyne.com", true },
{ "transfer.pw", true },
{ "transferbags.com", true },
+ { "transfers.com.jm", true },
{ "transfers.do", true },
{ "transfers.mx", true },
{ "transferserver.at", true },
{ "transfersummit.com", true },
+ { "transferwiseturkiye.com.tr", true },
{ "transfigurewizard.com", true },
{ "transformaniatime.com", true },
{ "transformations-magazin.com", true },
@@ -43825,12 +45203,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "transnexus.com", true },
{ "transoil.co.uk", true },
{ "transpak-cn.com", true },
- { "transparent.cf", true },
{ "transparentcorp.com", true },
{ "transporta.it", true },
{ "transporterlock.com", true },
{ "transumption.com", true },
{ "transverify.com", true },
+ { "tranvia.ml", true },
{ "trappednerve.org", true },
{ "trashnothing.com", true },
{ "trashwagon.club", true },
@@ -43838,6 +45216,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "traslocatore.roma.it", true },
{ "traslochi-trasporti-facchinaggio.it", true },
{ "trasloco.milano.it", true },
+ { "trastornoevitacion.com", true },
+ { "trastornolimite.com", true },
{ "tratamentoparacelulite.net", true },
{ "tratamientodelvitiligo.es", true },
{ "trattamenti.biz", true },
@@ -43879,13 +45259,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trbanka.com", true },
{ "trea98.org", true },
{ "treaslockbox.gov", true },
+ { "treasuredinheritanceministry.com", true },
{ "trebarov.cz", true },
{ "trebek.club", true },
{ "tree0.xyz", true },
{ "treebaglia.xyz", true },
- { "treefelling-durban.co.za", true },
+ { "treehole.life", true },
{ "treehouse.pub", true },
{ "treehouseresort.nl", true },
+ { "treeline.tech", true },
{ "treeoilpot.com", true },
{ "trees.chat", true },
{ "treeschat.com", true },
@@ -43914,7 +45296,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tresorsecurity.com", true },
{ "tretail.net", true },
{ "tretkowski.de", true },
- { "treussart.com", true },
+ { "trevo-lotofacil.com.br", true },
{ "trevsanders.co.uk", true },
{ "trezy.me", true },
{ "trezy.net", true },
@@ -43926,6 +45308,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "triageclinic.com", true },
{ "trialandsuccess.nl", true },
{ "trialcentralnet.com", true },
+ { "trianglebruins.org", true },
{ "trianglecastles.co.uk", true },
{ "trianglelawngames.com", true },
{ "tribac.de", true },
@@ -43951,6 +45334,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trilex.be", true },
{ "trillian.im", true },
{ "trilliumvacationrentals.ca", true },
+ { "trilon.eu", true },
{ "triluxds.com", true },
{ "trim-a-slab.com", true },
{ "trimage.org", true },
@@ -43958,12 +45342,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trindonball.com", true },
{ "trineco.com", true },
{ "trineco.fi", true },
- { "tringavillasyala.com", true },
{ "trinitasgyor.hu", true },
{ "trinitycorporateservices.com", true },
{ "trinnes.net", true },
{ "trio.online", true },
{ "triop.se", true },
+ { "triozon.hu", true },
{ "triplekeys.net", true },
{ "tripolistars.com", true },
{ "tripp.xyz", true },
@@ -43971,8 +45355,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tripsinc.com", true },
{ "triri.org", true },
{ "trisect.eu", true },
- { "trish-mcevoy.ru", true },
- { "tristanberger.io", true },
{ "trit.pro", true },
{ "trix360.com", true },
{ "trixati.org.ua", true },
@@ -43980,7 +45362,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trk1234.co.uk", true },
{ "trkpuls.tk", true },
{ "trockendock.ch", true },
- { "troedel-trolle.de", true },
{ "troedelhannes.at", true },
{ "troi.de", true },
{ "troianet.com.br", true },
@@ -43995,7 +45376,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "troomcafe.com", true },
{ "troopaid.info", true },
{ "trophee-discount.com", true },
+ { "trophy-discount.com", true },
+ { "trophy-solution.com", true },
{ "tropicalserver.com", false },
+ { "troplo.com", true },
{ "trotec.com", true },
{ "trotina.cz", true },
{ "trouble-free-employees.com", true },
@@ -44006,12 +45390,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "troxal.com", true },
{ "troyfawkes.com", true },
{ "troyhunt.com", true },
+ { "troyhuntstress.com", true },
{ "troyhuntsucks.com", true },
{ "trs.tn", true },
{ "trtruijens.com", true },
{ "tru.ltd", true },
{ "trucchibellezza.it", true },
- { "truckers-auction.jp", true },
{ "truckersmp.com", true },
{ "truckerswereld.nl", false },
{ "trucosdescargas.com", true },
@@ -44021,7 +45405,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "truecosmeticbeauty.com", true },
{ "trueduality.net", true },
{ "truehempculture.com.au", true },
- { "trueinstincts.ca", true },
{ "truekey.com", true },
{ "truelovesakuya.info", true },
{ "trueminecraft.com", true },
@@ -44038,7 +45421,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "truetrophies.com", true },
{ "trueweb.es", true },
{ "trufflemonkey.co.uk", true },
- { "truhlarstvi-fise.cz", true },
+ { "trufflepig-forensics.com", true },
{ "truly-madly-happiness.de", true },
{ "trumanlibrary.org", true },
{ "trunk-show.net", true },
@@ -44049,9 +45432,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "trustcase.com", true },
{ "trustednetworks.nl", true },
{ "trustfield.ch", true },
+ { "trustnet.co.il", true },
{ "trustserv.de", true },
{ "truthmessages.pw", true },
{ "truthsayer.tk", true },
+ { "trutopoffer.com", true },
{ "truvisory.com", true },
{ "truyencuoi.org", true },
{ "truyenfull.vn", true },
@@ -44082,7 +45467,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tsa-sucks.com", true },
{ "tsab.moe", true },
{ "tsachs.eu", true },
- { "tsai.com.de", true },
{ "tsatestprep.com", true },
{ "tschuermans.be", true },
{ "tscinsurance.com", true },
@@ -44111,7 +45495,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tsung.co", true },
{ "tsurai.work", true },
{ "tsutsumi-kogyo.jp", true },
- { "tsuyuzakihiroyuki.com", true },
{ "tsv-1894.de", true },
{ "tt5197.co", true },
{ "tt6729.co", true },
@@ -44142,6 +45525,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tty1.net", true },
{ "ttyystudio.com", true },
{ "tu-immoprojekt.at", true },
+ { "tu6.pm", true },
{ "tuanhstore.com", true },
{ "tuasaude.com", true },
{ "tubanten.nl", true },
@@ -44149,6 +45533,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tubebegana.com", true },
{ "tubejack.nl", true },
{ "tubepro.de", true },
+ { "tubepro.net", true },
{ "tubs4fun.co.uk", true },
{ "tubul.net", true },
{ "tucepihotelalga.com", true },
@@ -44165,9 +45550,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tuimprenta.com.ar", true },
{ "tuincentersnaet.be", true },
{ "tuingereedschappen.net", false },
+ { "tuingresoonline.com", true },
{ "tuitle.com", true },
{ "tuja.hu", true },
{ "tujunfang.com", true },
+ { "tukdesigns.com", true },
{ "tulenceria.es", true },
{ "tully.co.uk", true },
{ "tulpan22.ru", true },
@@ -44218,7 +45605,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "turunculevye.com", true },
{ "turystyczny-system.pl", true },
{ "tuscanyleather.it", true },
- { "tusksol.com", true },
{ "tusmedicamentos.com", true },
{ "tutanota.com", true },
{ "tuto-craft.com", true },
@@ -44235,9 +45621,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tuwaner.com", true },
{ "tuxcloud.net", true },
{ "tuxflow.de", false },
- { "tuxgeo.com", false },
{ "tuxie.com", true },
{ "tuxlife.net", true },
+ { "tuxone.ch", true },
{ "tuxpi.com", true },
{ "tuxplace.nl", true },
{ "tuxtimo.me", true },
@@ -44274,7 +45660,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tweakers.com.au", true },
{ "tweakers.net", true },
{ "tweaktown.com", true },
- { "twem.ddns.net", true },
{ "twenty71.com", true },
{ "twentymilliseconds.com", true },
{ "twilleys.com", true },
@@ -44296,6 +45681,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "twitteroauth.com", true },
{ "twizzkidzinflatables.co.uk", true },
{ "twlan.org", true },
+ { "twlitek.com.tw", true },
{ "twmartin.codes", true },
{ "twodadsgames.com", true },
{ "twoef.co.uk", true },
@@ -44328,7 +45714,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tyleromeara.com", true },
{ "tylerschmidtke.com", true },
{ "typcn.com", true },
- { "typeblog.net", true },
{ "typecodes.com", true },
{ "typeof.pw", true },
{ "typeonejoe.com", true },
@@ -44346,8 +45731,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tyroremotes.no", true },
{ "tyroremotes.pt", true },
{ "tyroremotes.se", true },
- { "tysox.de", true },
{ "tysye.ca", true },
+ { "tytod.com", true },
{ "tyuo-keibi.co.jp", true },
{ "tzermias.gr", true },
{ "tziyona.net", true },
@@ -44370,6 +45755,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "u5197.co", true },
{ "u5b.de", false },
{ "u5r.nl", true },
+ { "u6729.co", true },
{ "u6729.com", true },
{ "u6957.co", true },
{ "u9297.co", true },
@@ -44377,7 +45763,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "u9721.com", true },
{ "u9728.co", true },
{ "ua.search.yahoo.com", false },
- { "uaci.edu.mx", true },
{ "uae-company-service.com", true },
{ "uangteman.com", true },
{ "uasmi.com", true },
@@ -44399,10 +45784,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ubineering.de", true },
{ "ubis.company", true },
{ "ublaboo.org", true },
- { "ubntleaks.com", true },
{ "uborcare.com", true },
+ { "ubstudygroups.com", true },
+ { "ubstudygroups.org", true },
{ "ubunlog.com", true },
{ "ubuntu18.com", true },
+ { "ubytovanihyncice.cz", true },
{ "ucac.nz", false },
{ "ucangiller.com", true },
{ "ucasa.org.au", true },
@@ -44416,7 +45803,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "udancy.com", true },
{ "udbhav.me", true },
{ "uddate-linthdcp-3345app.com", true },
- { "uddate-linthdcp-567app.com", true },
{ "uddi.ng", true },
{ "udo-luetkemeier.de", true },
{ "udomain.net", true },
@@ -44429,7 +45815,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uedaviolin.com", true },
{ "ueni.com", true },
{ "uevan.com", true },
- { "ufanisi.mx", true },
{ "ufindme.at", true },
{ "ufo-blogger.com", true },
{ "ufo.moe", true },
@@ -44437,6 +45822,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ufplanets.com", true },
{ "ugb-verlag.de", true },
{ "uggedal.com", true },
+ { "uglycat.com", true },
+ { "uglycat.eu", true },
+ { "uglycat.net", true },
+ { "uglycat.org", true },
{ "ugtdigiteldocumentos.es", true },
{ "ugx-mods.com", true },
{ "ugy.es", true },
@@ -44456,8 +45845,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ujvary.eu", true },
{ "uk.dating", true },
{ "uk.search.yahoo.com", false },
+ { "ukari.hokkaido.jp", true },
{ "ukchemicalresearch.org", false },
- { "ukclimbing.com", true },
{ "ukdefencejournal.org.uk", true },
{ "ukhas.net", true },
{ "ukhillwalking.com", true },
@@ -44499,7 +45888,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ultratechlp.com", true },
{ "ultrautoparts.com.au", true },
{ "um-sachsen-pictures.de", true },
- { "uma.vn", true },
+ { "umail2.com", true },
{ "umanityracing.com", true },
{ "umartina.eu", true },
{ "umasstransit.org", true },
@@ -44509,6 +45898,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "umisonoda.com", true },
{ "umlcode.com", true },
{ "ummati.com", true },
+ { "umwandeln-online.de", true },
{ "umzuege-berlin.com", true },
{ "umzuege-hannover.net", true },
{ "umzuege-wolfsburg.de", true },
@@ -44517,6 +45907,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "un-framed.co.za", true },
{ "un-zero-un.fr", true },
{ "un.fo", true },
+ { "unadonna.it", true },
{ "unapp.me", true },
{ "unatco.noip.me", true },
{ "unausa.com.br", true },
@@ -44528,6 +45919,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unblocked.gdn", true },
{ "unblocked.ink", true },
{ "unblocked.krd", true },
+ { "unblocked.lc", true },
{ "unblocked.live", true },
{ "unblocked.llc", true },
{ "unblocked.mx", true },
@@ -44549,6 +45941,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unccelearn.org", true },
{ "uncensoreddns.dk", true },
{ "uncensoreddns.org", true },
+ { "unclebens-specials.gr", true },
{ "undecidable.de", true },
{ "undeductive.media", true },
{ "undef.in", false },
@@ -44557,6 +45950,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "underfloorheating-uk.co.uk", true },
{ "underlined.fr", true },
{ "undernet.uy", false },
+ { "underskatten.tk", true },
{ "underwearoffer.com", true },
{ "undp.lt", true },
{ "unece-deta.eu", true },
@@ -44586,6 +45980,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unicefkartkidlafirm.pl", true },
{ "unicefkepeslapok.hu", true },
{ "unicefvoscilnice.si", true },
+ { "unicioushop.com", true },
+ { "unicode.gq", true },
+ { "unicode.website", true },
{ "unicolabo.jp", true },
{ "unicorn-systems.net", true },
{ "unicorn.melbourne", true },
@@ -44609,6 +46006,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unionplat.ru", true },
{ "unionstreetskateboards.com", true },
{ "uniontestprep.com", true },
+ { "unipart.digital", true },
{ "unipig.de", true },
{ "uniprimebr.com.br", false },
{ "uniq.site", true },
@@ -44625,11 +46023,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "united-schools.net", true },
{ "united.com", false },
{ "unitedadmins.com", true },
+ { "unitedbaby.fr", true },
{ "unitedkingdoms-guild.com", true },
+ { "unitedprovinces.nl", true },
{ "unitedpsychological.com", true },
{ "unitedstreamers.de", true },
{ "unitel2000.de", true },
{ "unityconsciousnessbooks.com", true },
+ { "unityvox.com", true },
{ "univate.berlin", true },
{ "univercite.ch", true },
{ "univeril.com", false },
@@ -44639,7 +46040,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "universalcarremote.com", true },
{ "universe.horse", true },
{ "universeinform.com", true },
+ { "universidadperu.com", true },
{ "universogay.com", true },
+ { "universovalve.net", true },
{ "universrumbacongolaise.com", true },
{ "univitale.fr", true },
{ "unix.se", true },
@@ -44675,26 +46078,24 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "unquote.li", true },
{ "unrealircd.org", true },
{ "unrelated.net.au", true },
- { "uns.ac.id", true },
{ "uns.vn", true },
{ "unsacsurledos.com", true },
{ "unsee.cc", true },
{ "unseen.is", true },
{ "unseen.tw", true },
{ "unser-gartenforum.de", true },
- { "unsereins.me", true },
{ "unsourirealecole.fr", true },
{ "unstablewormhole.ltd", true },
{ "unstamps.org", true },
{ "unstoppableunits.com", true },
{ "unsuspicious.click", true },
+ { "untaianelena.com", true },
{ "unterfrankenclan.de", true },
{ "unterhaltungsbox.com", true },
{ "unternehmer-radio.de", true },
{ "unternehmerrat-hagen.de", true },
{ "untethereddog.com", true },
{ "unti.me", true },
- { "unun.fi", true },
{ "unusedrooms.com", true },
{ "unusualhatclub.com", true },
{ "unveiledgnosis.com", true },
@@ -44704,16 +46105,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uotomizu.com", true },
{ "up-ai.com", true },
{ "up2mark.com", true },
+ { "up2mark.de", true },
{ "up2staff.com", true },
{ "upakweship.com", true },
{ "upandrunningtutorials.com", true },
{ "upay.ru", true },
{ "upbad.com", true },
{ "upbeatrobot.com", true },
+ { "upbeatrobot.email", true },
{ "upbeatrobot.eu", true },
+ { "upbeatrobot.net", true },
+ { "upbeatrobot.nl", true },
+ { "upbeatrobot.org", true },
{ "upcambio.com", true },
{ "upcloud.cz", true },
{ "upd.jp", true },
+ { "update-linthdcp-567app1.com", true },
{ "upengo.com", true },
{ "upforshare.com", true },
{ "upgamerengine.com", true },
@@ -44729,9 +46136,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "upload.facebook.com", false },
{ "uploadbeta.com", true },
{ "uplotnitel.online", true },
- { "upnext.io", true },
+ { "uplr.it", true },
+ { "upmon.com", true },
{ "upperbeaconsfield.org.au", true },
{ "upperroommission.ca", true },
+ { "upplay.com.br", true },
{ "upplevelse.com", true },
{ "upr.com.ua", true },
{ "uprint.it", true },
@@ -44758,11 +46167,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uraimo.com", true },
{ "uraniborg.net", true },
{ "uranius.eu", true },
+ { "urantiabookstudygroup.com", true },
+ { "urantiabookstudygroup.org", true },
+ { "urantiabookstudygroups.com", true },
+ { "urantiabookstudygroups.org", true },
+ { "urantiastudygroup.org", true },
+ { "urantiastudygroups.com", true },
+ { "urantiastudygroups.org", true },
{ "urbackups.com", true },
{ "urbalex.ch", true },
+ { "urban-culture.fr", true },
{ "urban.melbourne", true },
{ "urbancreators.dk", true },
- { "urbandance.club", true },
{ "urbane-london.com", true },
{ "urbanesecurity.com", true },
{ "urbanfi.sh", true },
@@ -44770,19 +46186,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "urbangymfirenze.com", true },
{ "urbanhotbed.eu", true },
{ "urbanietz-immobilien.de", true },
- { "urbanmelbourne.info", true },
{ "urbannewsservice.com", true },
{ "urbansparrow.in", true },
{ "urbanwaters.gov", false },
{ "urbanwildlifealliance.org", false },
{ "urbanxdevelopment.com", true },
+ { "urbexdk.nl", true },
{ "urbexing.eu", true },
{ "urbizoroofing.com", true },
{ "urcentral.com", true },
+ { "urcentral.eu", true },
{ "urcentral.net", true },
{ "urcentral.nl", true },
+ { "urcentral.org", true },
{ "ureka.org", true },
{ "urep.us", true },
+ { "urion.com.br", true },
{ "uriports.com", true },
{ "uripura.de", true },
{ "urist1011.ru", true },
@@ -44795,10 +46214,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "urlaub-leitner.at", true },
{ "urlgot.com", true },
{ "urlscan.io", true },
+ { "urlsimple.tk", true },
{ "urltell.com", true },
{ "urltodomain.com", true },
- { "urmom.lol", true },
{ "urnes.org", true },
+ { "urology.wiki", true },
{ "urown.net", true },
{ "ursa-minor-beta.org", true },
{ "ursae.co", true },
@@ -44817,7 +46237,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "usabackground.com", true },
{ "usabibi.net", true },
{ "usability.gov", true },
- { "usadba.net.ru", true },
{ "usaestaonline.com", true },
{ "usage.be", true },
{ "usagexchange.com", true },
@@ -44865,7 +46284,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ussst.org", true },
{ "ussuka.com", true },
{ "ust.space", true },
- { "ustensiles-cuisine.boutique", true },
{ "ustr.gov", false },
{ "ustugov.kiev.ua", true },
{ "ustugova.kiev.ua", true },
@@ -44904,7 +46322,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "utox.io", true },
{ "utrace.me", true },
{ "utterberry.io", true },
+ { "uttnetgroup.fr", true },
{ "utugnn.ru", true },
+ { "utvbloggen.se", true },
{ "utw.me", true },
{ "utwente.io", true },
{ "utzon.net", true },
@@ -44923,7 +46343,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uvocorp.com", true },
{ "uvx.io", true },
{ "uw1008.com", true },
- { "uw2333.com", true },
{ "uwac.co.uk", false },
{ "uwat.cf", true },
{ "uwelilienthal.de", true },
@@ -44936,19 +46355,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uxp-it.nl", true },
{ "uxteam.com", true },
{ "uy.search.yahoo.com", false },
+ { "uyen.party", true },
{ "uz.search.yahoo.com", false },
{ "uzayliyiz.biz", true },
{ "uzaymedya.com.tr", true },
+ { "uze-mobility.at", true },
{ "uze-mobility.ch", true },
{ "uze-mobility.co", true },
{ "uze-mobility.com", true },
{ "uze-mobility.group", true },
{ "uze-mobility.info", true },
+ { "uze-mobility.io", true },
{ "uze-mobility.net", true },
{ "uze-mobility.org", true },
{ "uze-store.com", true },
{ "uze.mobi", true },
{ "uzemobility.com", true },
+ { "uzemobility.de", true },
{ "uzemobility.eu", true },
{ "uzemobility.org", true },
{ "uziregister.nl", true },
@@ -44962,7 +46385,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "v0ctor.me", true },
{ "v2bv.net", true },
{ "v2bv.win", true },
- { "v2cn.win", true },
+ { "v2cn.win", false },
{ "v2ex.com", true },
{ "v2ray6.com", true },
{ "v2ray66.com", true },
@@ -44975,11 +46398,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "v9728.co", true },
{ "v9728.com", true },
{ "va-reitartikel.com", true },
- { "va.gov", true },
+ { "va.gov", false },
{ "va1der.ca", true },
{ "vacancyfiller.com", true },
{ "vacationsbyvip.com", true },
{ "vacuumpump.co.id", true },
+ { "vademekum.com", true },
{ "vadennissanofhiltonheadparts.com", true },
{ "vaeplatform.com", true },
{ "vaew.com", true },
@@ -44992,6 +46416,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vagpartsdb.com", true },
{ "vagrantcloud.com", true },
{ "vagrantup.com", true },
+ { "vahoshop.cz", true },
{ "vaincreladyslexie.com", false },
{ "vaindil.com", true },
{ "vaioswolke.xyz", false },
@@ -45002,6 +46427,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vakuutuskanava.fi", true },
{ "valaphee.com", true },
{ "valasi.eu", true },
+ { "valcano-krd.ru", true },
+ { "valcano.ru", true },
{ "valcansell.com", true },
{ "valcardiesel.com", true },
{ "valdicass.com", true },
@@ -45009,11 +46436,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "valemountchamber.com", true },
{ "valemountmuseum.ca", true },
{ "valenciadevops.me", true },
- { "valentin.ml", true },
{ "valentinarosamilia.ch", true },
{ "valentinarosamilia.com", true },
{ "valentinberclaz.com", true },
- { "valentineapparel.com", true },
{ "valentineforpresident.com", true },
{ "valentinesongs.com", true },
{ "valentinritz.com", true },
@@ -45024,7 +46449,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "validbrands.com", true },
{ "valika.ee", true },
{ "valimised.ee", true },
- { "valis.sx", true },
{ "valkohattu.fi", true },
{ "valkova.net", true },
{ "vallei-veluwe.nl", true },
@@ -45041,8 +46465,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "valsk.is", false },
{ "valskis.lt", true },
{ "valtlai.fi", true },
- { "valtool.uk", true },
{ "valudo.st", true },
+ { "valuecashhomes.com", true },
+ { "valuecashoffers.com", true },
{ "valuehost.com.br", true },
{ "valuemyhome.co.uk", true },
{ "valuemyhome.uk", true },
@@ -45067,7 +46492,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vandeput.be", true },
{ "vanderbiltcisa.org", true },
{ "vanderkrieken.org", true },
- { "vanderkroon.nl", true },
{ "vanderlest.de", true },
{ "vandermeer.frl", true },
{ "vanderrijt.nl", false },
@@ -45078,7 +46502,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vanessarivas.com", true },
{ "vaneurology.com", true },
{ "vangoghcoaching.nl", true },
- { "vanhaos.com", true },
{ "vanhoudt-usedcars.be", true },
{ "vanhoutte.be", false },
{ "vanhove.biz", true },
@@ -45094,11 +46517,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vantagepointpreneed.com", true },
{ "vante.me", false },
{ "vantien.com", true },
- { "vantru.is", true },
{ "vanwa.ch", true },
+ { "vanwoensel.xyz", true },
{ "vanwunnik.com", true },
{ "vape-hit.in", true },
{ "vapecrunch.com", true },
+ { "vapeking.co.za", true },
{ "vapekingusa.com", true },
{ "vapensiero.co.uk", true },
{ "vaperolles.ch", true },
@@ -45114,6 +46538,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vareillefoundation.fr", true },
{ "vareillefoundation.org", true },
{ "varghese.de", true },
+ { "variable.agency", false },
{ "variag-group.ru", true },
{ "variag-montazh.ru", true },
{ "variando.fi", true },
@@ -45164,9 +46589,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vb.media", true },
{ "vbazile.com", true },
{ "vbcdn.com", true },
- { "vbql.me", true },
+ { "vbestproduct.com", true },
+ { "vbestseller.com", true },
+ { "vbh2o.com", true },
{ "vbsoft.cz", true },
{ "vbwinery.com", true },
+ { "vc.gg", false },
{ "vcam.org", true },
{ "vccmurah.net", true },
{ "vcelin-na-doliku.cz", true },
@@ -45207,13 +46635,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "veganism.co.uk", true },
{ "veganism.com", true },
{ "veganmasterrace.com", true },
+ { "veganrecipereviews.com", true },
{ "vegasluxuryestates.com", true },
{ "vegavio.com", true },
{ "vegekoszyk.pl", true },
{ "vegepa.com", true },
{ "vegetariantokyo.net", true },
{ "veggie-einhorn.de", true },
- { "veggiesecret.com", true },
{ "vegguide.org", true },
{ "vegoresto.fr", true },
{ "vehiclematsuk.com", true },
@@ -45226,16 +46654,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "velassoltas.pt", true },
{ "velen.io", true },
{ "veloroute.hamburg", true },
+ { "velvetia.no", true },
{ "venalytics.com", true },
{ "venclave.com", true },
{ "vendermicasarapido.com.mx", true },
{ "vendigital.com", true },
+ { "venditorepoa.com.br", true },
{ "vendorconnect.nyc", true },
{ "vendreacheter.be", true },
{ "vendreacheter.net", true },
{ "vendserve.eu", true },
{ "veneerssandiego.com", true },
{ "venenum.org", true },
+ { "venetkaarsenovart.com", true },
{ "venev.name", true },
{ "venje.pro", true },
{ "venmail.net", true },
@@ -45248,7 +46679,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ventilateurs-plafond.com", true },
{ "ventizo.com", true },
{ "ventriloservers.biz", true },
- { "venturavwparts.com", true },
+ { "venturebanners.co.uk", true },
{ "venturedisplay.co.uk", true },
{ "ventures.lgbt", true },
{ "ventureslgbt.com", true },
@@ -45259,7 +46690,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "venuedriver.com", true },
{ "venzagroup.com", true },
{ "veply.com", true },
- { "ver.ma", true },
{ "vera.bg", true },
{ "veramagazine.jp", true },
{ "verasani.ch", true },
@@ -45271,6 +46701,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "verdict.gg", true },
{ "verduccies.com", true },
{ "verein-kiekin.de", true },
+ { "verein-zur-pflege-der-geselligkeit.de", true },
{ "vereinlandwege.de", true },
{ "vereinscheck.de", true },
{ "verfassungsklage.at", true },
@@ -45279,12 +46710,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "verhovs.ky", false },
{ "veri2.com", true },
{ "verifalia.com", true },
+ { "verified.eu", true },
{ "verifiedjoseph.com", true },
{ "verifiny.com", true },
{ "verifygroup.com", true },
{ "verifyos.com", true },
{ "verifyyourip.com", true },
{ "veriny.tf", true },
+ { "veriomed.com", true },
{ "veritafineviolins.com", true },
{ "veritas-data.de", true },
{ "veritasinvestmentwealth.com", true },
@@ -45320,6 +46753,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "verschurendegroot.nl", true },
{ "verses.space", true },
{ "versicherungen-werner-hahn.de", true },
+ { "versolslapeyre.fr", true },
{ "verspai.de", true },
{ "verstraetenusedcars.be", true },
{ "vertebrates.com", true },
@@ -45341,7 +46775,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "verymetal.nl", true },
{ "verzekeringencambier.be", true },
{ "verzekeringsacties.nl", true },
- { "verzick.com", true },
{ "ves.vn.ua", true },
{ "vesaviljanen.fi", true },
{ "vescudero.net", true },
@@ -45350,7 +46783,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vestd.com", true },
{ "vestingbar.nl", true },
{ "vestum.ru", true },
- { "vet-planet.com", true },
{ "vetbits.com", false },
{ "vetergysurveys.com", false },
{ "veterinario.milano.it", true },
@@ -45388,7 +46820,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "viajaramsterdam.com", true },
{ "viaje-a-china.com", true },
{ "vialibido.com.br", true },
- { "vialorran.com", true },
{ "viantours.net", true },
{ "viaprinto.de", true },
{ "viasinc.com", false },
@@ -45396,7 +46827,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vibrant-america.com", true },
{ "vibrato1-kutikomi.com", true },
{ "vicentee.com", true },
- { "vicgenesis.me", true },
{ "vichiya.com", true },
{ "vician.cz", true },
{ "vicianovi.cz", true },
@@ -45409,6 +46839,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "victorcarwasher.com", true },
{ "victoreriksson.co", true },
{ "victoreriksson.com", true },
+ { "victoreriksson.es", true },
{ "victoreriksson.eu", true },
{ "victoreriksson.info", true },
{ "victoreriksson.me", true },
@@ -45434,7 +46865,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vicugna.nl", true },
{ "vicyu.com", true },
{ "vid-immobilien.de", true },
- { "vida-it.com", true },
{ "vidadu.com", true },
{ "vidbooster.com", true },
{ "vide-greniers.org", false },
@@ -45450,8 +46880,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "videospornogratis.pt", true },
{ "videosqr.com", true },
{ "videosxgays.com", true },
+ { "videot.tk", true },
{ "videov.tk", true },
{ "videownload.com", true },
+ { "videozv.tk", true },
+ { "vidister.de", true },
{ "vidracariaespelhosbh.com.br", true },
{ "vieaw.com", true },
{ "vieclam24h.vn", false },
@@ -45459,10 +46892,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "viemeister.com", true },
{ "viemontante.be", true },
{ "viennadancecrew.at", true },
- { "vientos.coop", false },
{ "viepixel.at", true },
- { "vieref.eu", true },
- { "vierna.ga", true },
{ "vierpfeile.de", true },
{ "vierpluseins.wtf", true },
{ "vietnamese.dating", true },
@@ -45484,12 +46914,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vignoblesdeletat.ch", true },
{ "vigo-krankenversicherung.de", true },
{ "vigo-tarife.de", true },
+ { "vigorspa.it", true },
{ "vigoxatelier.tech", true },
{ "vigrey.com", true },
- { "viikko.cf", true },
- { "viikko.ga", true },
- { "viikko.gq", true },
- { "viikko.ml", true },
{ "vijay-international.com", true },
{ "vijverbenodigdheden.nl", true },
{ "vik.im", true },
@@ -45498,6 +46925,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vikapaula.com", true },
{ "vikashkumar.me", true },
{ "vikaviktoria.com", true },
+ { "viki.com", true },
{ "viking-style.ru", true },
{ "vikings.net", true },
{ "vikramkulkarni.com", true },
@@ -45530,6 +46958,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "villu.ga", true },
{ "viltsu.net", true },
{ "vim.cx", true },
+ { "vim.ge", true },
{ "vima.ch", true },
{ "vimeo.com", true },
{ "vinagro.sk", true },
@@ -45546,16 +46975,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vinetech.co.nz", true },
{ "vingt.me", true },
{ "vinifriuli.sk", true },
- { "vinigas.com", true },
{ "vinistas.com", true },
{ "vinkt.eu", true },
+ { "vinktwebdesign.nl", true },
{ "vinner.com.au", true },
{ "vinnyandchristina.com", true },
{ "vinnyvidivici.com", true },
{ "vinodoc.cz", true },
{ "vinokurov.tk", true },
{ "vinolli.de", true },
- { "vinosalmundo.com", true },
{ "vinoshipper.com", true },
{ "vinovum.net", true },
{ "vinsation.com", true },
@@ -45576,6 +47004,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vionicshoes.com", true },
{ "vip8522.com", true },
{ "vip918.net", true },
+ { "vipam8.com", true },
+ { "vipd88.net", true },
{ "vipf88.com", true },
{ "vipfitter.com", true },
{ "vipllcnj.com", true },
@@ -45585,11 +47015,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vipw66.com", true },
{ "vir-tec.eu", false },
{ "vir2.me", true },
+ { "viralify.me", true },
{ "viralpop.it", true },
{ "virgopolymer.com", true },
{ "viridis-milites.cz", true },
+ { "viris.si", true },
{ "virtit.fr", true },
{ "virtualcitehuallaga.com", true },
+ { "virtualcloud.ddns.net", true },
{ "virtualcommodities.org", true },
{ "virtuality4d.com", true },
{ "virtuallifestyle.nl", true },
@@ -45601,7 +47034,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "virtuebags.com", true },
{ "virtus-group.com", true },
{ "virtusaero.com", true },
- { "virus.pm", true },
{ "virvum.ch", true },
{ "visalist.io", true },
{ "visalogy.com", true },
@@ -45612,7 +47044,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "viscopic.com", true },
{ "viseum.co.uk", true },
{ "vishwashantiyoga.com", true },
- { "visibleone.com", true },
{ "visibox.nl", true },
{ "visikom.de", true },
{ "visiondetails.ru", true },
@@ -45620,7 +47051,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "visionexpress.com", true },
{ "visionexpress.ie", true },
{ "visionexpresscareers.com", true },
- { "visionless.me", false },
{ "visionnissancanandaiguaparts.com", true },
{ "visionviral.com", true },
{ "visit-montenegro.com", true },
@@ -45629,6 +47059,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "visitkangaroovalley.com.au", true },
{ "visitmaine.com", true },
{ "visitorguard.com", true },
+ { "visitorslist.com", true },
{ "visor.ph", true },
{ "vista-research-group.com", true },
{ "vistaalmar.es", true },
@@ -45643,8 +47074,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "visualideas.org", true },
{ "visualizing.info", true },
{ "visualmasters.nl", true },
+ { "visualproyectos.co", true },
{ "visudira.com", true },
{ "vitahook.pw", true },
+ { "vital-tel.co.uk", true },
{ "vitalastin-sport.de", true },
{ "vitalia.cz", true },
{ "vitalismaatjes.nl", true },
@@ -45656,6 +47089,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vitastic.nl", true },
{ "viteoscrm.ch", true },
{ "vitkausk.as", true },
+ { "vitkutny.cz", true },
{ "vitlproducts.com", true },
{ "vitoye.com", true },
{ "vitpeyr.com", true },
@@ -45675,7 +47109,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vivendi.de", true },
{ "viveport.com", true },
{ "vivesaludableconomnilife.com", true },
- { "vivianmaier.cn", true },
{ "vivid-academy.com", true },
{ "vividinflatables.co.uk", true },
{ "vividlumen.com", true },
@@ -45702,6 +47135,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vkino.com", false },
{ "vkox.com", true },
{ "vksportphoto.com", true },
+ { "vladimir-chanaev.pro", true },
{ "vladimiroff.org", true },
{ "vladislavstoyanov.com", true },
{ "vladsfads.com", true },
@@ -45718,7 +47152,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vm-0.com", true },
{ "vm-co.ch", true },
{ "vm0.eu", true },
+ { "vmagz.ir", true },
{ "vmc.co.id", true },
+ { "vmconnected.co.uk", true },
{ "vmgirls.com", true },
{ "vmhydro.ru", false },
{ "vmis.nl", true },
@@ -45727,18 +47163,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vmug.pl", true },
{ "vn.search.yahoo.com", false },
{ "vnctdj.fr", true },
- { "vnd.cloud", true },
{ "vndb.org", true },
{ "vnpay.vn", true },
- { "vns1780.com", true },
- { "vns3780.com", true },
{ "vnvisa.center", true },
{ "vnvisa.ru", true },
{ "vocaloid.my", true },
{ "vocalviews.com", true },
{ "voceempaz.com", true },
{ "vocescruzadasbcs.mx", true },
- { "vochuys.nl", true },
{ "vocus.aero", true },
{ "vocustest.aero", true },
{ "voda.org.ru", true },
@@ -45752,12 +47184,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "voice-of-design.com", true },
{ "voicu.ch", true },
{ "void-zero.com", true },
+ { "voidbot.ai", true },
{ "voidcore.org", true },
{ "voidma.in", true },
{ "voidnya.com", true },
{ "voidpay.com", true },
{ "voidptr.eu", true },
- { "voidshift.com", true },
{ "voidx.top", true },
{ "voipdigit.nl", true },
{ "voipsun.com", true },
@@ -45765,13 +47197,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vojtechpavelka.cz", true },
{ "vokativy.cz", true },
{ "vokeapp.com", true },
+ { "volcano-kazan.ru", true },
+ { "volcano-spb.ru", true },
+ { "volcano-vts.ru", true },
+ { "volcano24.ru", true },
+ { "volcanov.ru", true },
{ "volga.us", true },
{ "volgavibes.ru", false },
{ "voliere-info.nl", false },
{ "volker-gropp.de", true },
{ "volkergropp.de", true },
{ "volkerwesselstransfer.nl", false },
- { "volksvorschlagpmar.ch", true },
{ "vollans.id.au", true },
{ "voloevents.com", true },
{ "volqanic.com", true },
@@ -45779,14 +47215,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "volto.io", true },
{ "volubilisplus.fr", true },
{ "volunteeringmatters.org.uk", true },
+ { "volvipress.gr", true },
{ "vomitb.in", true },
{ "vonauw.com", true },
{ "vonborstelboerner.de", true },
{ "vonimus.com", true },
{ "vonitsanet.gr", true },
+ { "vonkuenheim.de", true },
{ "vonniehudson.com", true },
{ "vonski.pl", true },
+ { "vontainment.com", true },
{ "voodoochile.at", true },
+ { "voodoocomedy.com", true },
{ "voolik.pw", true },
{ "voordeuren-opmaat.nl", true },
{ "voorjou.com", true },
@@ -45796,6 +47236,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vorlage-mustervertrag.de", true },
{ "vorlagen-geburtstagsgruesse.de", true },
{ "vorlicek.de", true },
+ { "vorm2.com", true },
{ "vorodevops.com", true },
{ "vos-fleurs.ch", true },
{ "vos-systems.com", true },
@@ -45804,6 +47245,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vos-systems.net", true },
{ "vos-systems.org", true },
{ "vosgym.jp", true },
+ { "voshod.org", true },
{ "vosky.fr", true },
{ "vosn.de", true },
{ "voss-klinik.com", true },
@@ -45815,6 +47257,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "votesandymurman.com", true },
{ "votoot.com", true },
{ "votre-hotel.com", true },
+ { "votresiteweb.ch", true },
{ "vouchinsurance.sg", true },
{ "vovladikavkaze.ru", true },
{ "voxfilmeonline.net", true },
@@ -45850,9 +47293,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vrcholovka.cz", true },
{ "vrcinvestigations.com", true },
{ "vrcprofile.com", true },
- { "vreaulafacultate.ro", true },
{ "vreeman.com", true },
{ "vretmaskin.se", true },
+ { "vreviewbestseller.com", true },
{ "vriesdonkow.be", true },
{ "vrifox.cc", true },
{ "vrij-links.nl", true },
@@ -45878,7 +47321,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vspin.cz", true },
{ "vssnederland.nl", true },
{ "vstehn.ru", true },
+ { "vsund.de", true },
+ { "vsx.ch", true },
{ "vtaxi.se", true },
+ { "vtbs.moe", true },
+ { "vthebest9.com", true },
{ "vtipe-vylez.cz", true },
{ "vtt-hautsdefrance.fr", true },
{ "vtuber.art", true },
@@ -45904,8 +47351,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vuvanhon.com", true },
{ "vux.li", true },
{ "vuzi.fr", true },
- { "vv1234.cn", true },
{ "vv5197.co", true },
+ { "vv6729.co", true },
{ "vv6729.com", true },
{ "vv6957.co", true },
{ "vv9297.co", true },
@@ -45928,6 +47375,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vwsoft.de", true },
{ "vwt-event.nl", true },
{ "vx.hn", true },
+ { "vxz.me", true },
{ "vybeministry.org", true },
{ "vyber-odhadce.cz", true },
{ "vyberodhadce.cz", true },
@@ -45938,6 +47386,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "vytea.com", true },
{ "vyvygen.org", true },
{ "vzis.org", true },
+ { "w-architectes.com", true },
{ "w-p-k.de", true },
{ "w-spotlight.appspot.com", true },
{ "w-w-auto.de", true },
@@ -45947,16 +47396,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "w2n.me", true },
{ "w3ctag.org", true },
{ "w3n14izy.ml", true },
+ { "w3punkt.de", true },
{ "w4.no", true },
{ "w4eg.de", true },
{ "w4nvu.org", true },
- { "w4solutions.de", true },
{ "w50.co.uk", false },
{ "w5197.co", true },
{ "w5gfe.org", true },
+ { "w66161.com", true },
+ { "w6619.com", true },
+ { "w6648.com", true },
+ { "w66918.com", true },
+ { "w66938.com", true },
{ "w6729.co", true },
{ "w6729.com", true },
{ "w6957.co", true },
+ { "w6969.com", true },
{ "w7k.de", true },
{ "w80010.com", true },
{ "w889-line.com", true },
@@ -45992,7 +47447,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wafuton.com", true },
{ "wageverify.com", true },
{ "wagyu-bader.de", true },
- { "wahidhasan.com", true },
{ "wahrnehmungswelt.de", true },
{ "wahrnehmungswelten.de", true },
{ "waidfrau.de", true },
@@ -46002,7 +47456,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "waikatowebdesigners.com", true },
{ "wail.net", true },
{ "waits.io", true },
- { "wajtc.com", true },
{ "wak.io", true },
{ "waka-mono.com", true },
{ "wakamiyasumiyosi.com", true },
@@ -46018,6 +47471,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "walkhighlandsandislands.com", true },
{ "walkhisway.co.za", true },
{ "walkingrehabilitation.com", true },
+ { "walkman.cloud", true },
+ { "walkman.io", true },
{ "walksedona.com", true },
{ "walksfourpaws.co.uk", true },
{ "wallabet.fr", true },
@@ -46027,9 +47482,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wallet.google.com", true },
{ "wallet.pp.ua", true },
{ "walletconnector.cz", true },
+ { "wallethub.com", false },
{ "walletnames.com", true },
{ "wallinger-online.at", true },
{ "wallingford.cc", true },
+ { "wallpapereg.com", true },
{ "wallpaperup.com", true },
{ "walls.de", true },
{ "walls.io", true },
@@ -46059,6 +47516,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wanderzoom.co", true },
{ "wandystan.eu", true },
{ "wane.co", true },
+ { "wanekat.fr", true },
{ "wang.by", true },
{ "wangbangyu.cf", true },
{ "wangbangyu.ga", true },
@@ -46075,6 +47533,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wangwill.me", true },
{ "wangyue.blog", true },
{ "wangzuan168.cc", false },
+ { "wanlieyan.cc", true },
{ "wanlieyan.com", true },
{ "wanmen.org", true },
{ "wannaridecostarica.com", true },
@@ -46107,9 +47566,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "warhaggis.com", true },
{ "warmtepomp.express", true },
{ "waroengkoe-shop.com", true },
+ { "waroengkopigazebo.net", true },
{ "warofelements.de", true },
{ "warp-radio.com", true },
{ "warp-radio.net", true },
+ { "warp-radio.tv", true },
{ "warr.ath.cx", true },
{ "warringtonkidsbouncycastles.co.uk", true },
{ "warschild.org", true },
@@ -46122,6 +47583,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wasd.ms", true },
{ "wasema.com", true },
{ "wasfestes.de", true },
+ { "wasgigant.nl", true },
{ "washingtonregisteredagent.io", true },
{ "washingtonviews.com", true },
{ "washoedems.org", true },
@@ -46139,6 +47601,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "watchcow.org", true },
{ "watchface.watch", true },
{ "watchfreeonline.co.uk", true },
+ { "watchmetech.com", true },
{ "watchparts-and-tools-okayama.co.jp", true },
{ "watchstyle.com", true },
{ "water-addict.com", true },
@@ -46155,13 +47618,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "waterseal.in", true },
{ "waterside-residents.org.uk", true },
{ "waterslide-austria.at", true },
+ { "watertrails.io", true },
{ "watervillewomenscare.com", true },
{ "waterworkscondos.com", true },
{ "watfordjc.uk", true },
{ "watoo.tech", true },
- { "wattmaedchen.de", true },
+ { "wattnow.io", true },
{ "watvindtnederland.com", true },
{ "wav-productions.com", true },
+ { "wav.tv", true },
{ "wave.is", true },
{ "wave.red", true },
{ "wavengine.com", true },
@@ -46176,8 +47641,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wayohoo.com", true },
{ "wayohoo.net", true },
{ "waytt.cf", true },
+ { "waze.com", true },
{ "wb2288.cc", true },
{ "wb256.com", true },
+ { "wb6668.net", true },
{ "wba.or.at", true },
{ "wbci.us", false },
{ "wbg-vs.de", true },
@@ -46190,6 +47657,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wbuntu.com", true },
{ "wbvb.nl", true },
{ "wbx.support", true },
+ { "wby.by", true },
{ "wby.tw", true },
{ "wcbook.ru", false },
{ "wcn.life", false },
@@ -46201,11 +47669,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wdic.org", true },
{ "wdmg.com.ua", true },
{ "wdodelta.nl", true },
- { "wdol.gov", true },
+ { "wdol.gov", false },
{ "wdt.cz", false },
{ "we-bb.com", true },
- { "we-run-linux.de", true },
- { "we-use-linux.de", true },
+ { "we5688.net", true },
+ { "we6668.net", true },
{ "weacceptbitcoin.gr", true },
{ "wealthings.net", true },
{ "wealthprojector.com", true },
@@ -46217,6 +47685,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wearegenki.com", true },
{ "wearepapermill.co", true },
{ "wearepapermill.com", true },
+ { "wearesouthafricans.com", true },
+ { "wearetuzag.com", true },
{ "wearvr.com", true },
{ "weather-schools.com", true },
{ "weather.gov", true },
@@ -46226,6 +47696,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "web-design.co.il", true },
{ "web-fox23.ru", true },
{ "web-hotel.gr", true },
+ { "web-jive.com", true },
{ "web-kouza.com", true },
{ "web-mail.info", true },
{ "web-odyssey.com", true },
@@ -46246,12 +47717,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webaeon.org", true },
{ "webaholic.co.in", true },
{ "webais.ru", true },
- { "webalert.cz", true },
{ "webandmore.de", true },
{ "webandsun.com", true },
{ "webartex.ru", true },
+ { "webarxsecurity.com", true },
{ "webbiz.co.uk", true },
{ "webcamtoy.com", true },
+ { "webcaptive.com", true },
+ { "webcaptive.net", true },
{ "webcasinos.com", true },
{ "webcatchers.nl", false },
{ "webcatechism.com", false },
@@ -46263,6 +47736,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webcrm.com", true },
{ "webcurtaincall.com", true },
{ "webdemaestrias.com", true },
+ { "webdesign-note.jp", true },
{ "webdesign-st.de", true },
{ "webdesigneauclaire.com", true },
{ "webdesignerinwarwickshire.co.uk", true },
@@ -46276,8 +47750,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webeast.eu", true },
{ "webeau.com", true },
{ "webergrillrestaurant.com", true },
- { "webetnet.fr", true },
- { "webev.ru", true },
{ "webexample.win", true },
{ "webexp.biz", true },
{ "webexpertsdirect.com.au", true },
@@ -46286,8 +47758,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webfilings-mirror-hrd.appspot.com", true },
{ "webfilings.appspot.com", true },
{ "webfixers.nl", true },
+ { "webfox.com.br", true },
{ "webgap.io", false },
{ "webgarten.ch", true },
+ { "webgears.com", true },
{ "webgeneric.com", true },
{ "webgeneric.in", true },
{ "webgeneric.xyz", true },
@@ -46297,6 +47771,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webhooks.stream", true },
{ "webhost.guide", true },
{ "webhostingshop.ca", true },
+ { "webhostingspace.net", true },
{ "webhostingzzp.nl", true },
{ "webhotelli.website", true },
{ "webhotelsoversigt.dk", true },
@@ -46340,7 +47815,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webpostingmart.com", true },
{ "webpostingpro.com", true },
{ "webpostingreviews.com", true },
- { "webproject.rocks", true },
{ "webpubsub.com", true },
{ "webqualitat.com.br", true },
{ "webrabbit.at", true },
@@ -46349,7 +47823,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webreport.fr", true },
{ "websa.nl", true },
{ "webscale.nl", false },
- { "websec.nl", true },
{ "websecurity.is", true },
{ "webseitendesigner.com", false },
{ "webseitenserver.com", true },
@@ -46361,7 +47834,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "websiteboost.nl", true },
{ "websiteout.ca", true },
{ "websiteout.net", true },
- { "websites4business.ca", true },
{ "websitesdallas.com", true },
{ "websiteservice.pro", true },
{ "websize.me", true },
@@ -46384,6 +47856,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webtheapp.com", true },
{ "webtoro.com", true },
{ "webtorrent.io", true },
+ { "webtrek.ch", true },
{ "webtrh.cz", true },
{ "webtropia.com", false },
{ "webukhost.com", true },
@@ -46396,6 +47869,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webworkshop.ltd", true },
{ "webxr.today", true },
{ "webyazilimankara.com", true },
+ { "wecanvisit.com", true },
{ "wechatify.com", true },
{ "wecho.net", true },
{ "weck.alsace", true },
@@ -46407,7 +47881,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "weddingsbynoon.co.uk", true },
{ "weddywood.ru", false },
{ "wedg.uk", true },
- { "wedos.com", true },
{ "wedovapes.co.uk", true },
{ "wedplay.host", true },
{ "weebl.me", true },
@@ -46438,7 +47911,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wegotcookies.com", true },
{ "wegrzynek.org", true },
{ "wegrzynek.pl", true },
- { "wegvielfalt.de", true },
{ "wehostdnn.com", true },
{ "weibomiaopai.com", true },
{ "weideheuvel.org", true },
@@ -46470,6 +47942,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "welcomescuba.com", true },
{ "welcometoscottsdalehomes.com", true },
{ "weld.io", true },
+ { "weldwp.com", true },
{ "well-around-the-world.com", true },
{ "wella-download-center.de", true },
{ "wellacapability.com", true },
@@ -46487,16 +47960,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wellspringsga.com", true },
{ "welltycoon.com", true },
{ "welovecatsandkittens.com", true },
- { "welovejudo.com", true },
{ "welovemaira.com", true },
{ "welshccf.org.uk", true },
{ "welteneroberer.de", true },
{ "weltengilde.de", true },
{ "weltenhueter.de", true },
- { "weltmeister.de", true },
{ "weltverschwoerung.de", true },
{ "welzijnkoggenland.nl", true },
{ "wem.hr", false },
+ { "wemakeit.mx", true },
{ "wemakemenus.com", true },
{ "wemakeonlinereviews.com", true },
{ "wemovemountains.co.uk", true },
@@ -46511,6 +47983,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wepay.com", false },
{ "wepay.in.th", true },
{ "wepay.vn", true },
+ { "wepbiz.com", true },
{ "weplaynaked.dk", true },
{ "wer-kommt-her.de", true },
{ "werally.com", true },
@@ -46523,13 +47996,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "werbewelt-tv.de", true },
{ "werbezentrum-stiebler.de", true },
{ "werbik.at", false },
+ { "werd.pw", true },
{ "werehub.org", true },
{ "wereldkoffie.eu", true },
{ "wereoutthere.nl", true },
{ "werepairit.com.au", true },
{ "werk-34.de", true },
{ "werk32.net", false },
- { "werkaanonderwijs.nl", true },
{ "werkemotion.com", true },
{ "werkenbijdfzs.nl", true },
{ "werkenbijsherpa.nl", true },
@@ -46558,6 +48031,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wesleywarnell.com", true },
{ "wesoco.de", true },
{ "wesreportportal.com", true },
+ { "wessner.co", true },
{ "wessner.org", true },
{ "west-contemporary.com", true },
{ "west-trans.com.au", true },
@@ -46575,9 +48049,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "westendwifi.net", true },
{ "westernfrontierins.com", true },
{ "westernpadermatologist.com", true },
+ { "westernparts.com", true },
{ "westeros.hu", true },
{ "westhillselectrical.com", true },
- { "westlahair.com", true },
{ "westlakevillageelectric.com", true },
{ "westlakevillageelectrical.com", true },
{ "westlakevillageelectrician.com", true },
@@ -46626,7 +48100,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wf-training-hrd.appspot.com", true },
{ "wf-training-master.appspot.com", true },
{ "wf-trial-hrd.appspot.com", true },
- { "wfcom-98-wf-www.pantheonsite.io", true },
{ "wfcp1010.com", true },
{ "wfh.ovh", true },
{ "wfh.se", true },
@@ -46634,7 +48107,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wfschicago.com", true },
{ "wft-portfolio.nl", true },
{ "wg-steubenstrasse.de", true },
- { "wg3k.us", false },
+ { "wg3k.us", true },
{ "wgcaobgyn.com", true },
{ "wgcp.com", true },
{ "wgdp.gov", true },
@@ -46678,15 +48151,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "whatwebcando.today", true },
{ "whatwg.org", true },
{ "whd-guide.de", true },
+ { "wheatgra.in", true },
{ "wheatley.nl", true },
{ "wheelwork.org", true },
{ "wheezie.be", true },
- { "when-release.com", true },
- { "when-release.ru", true },
{ "when.fm", false },
{ "where2trip.com", true },
+ { "wheredoi.click", true },
{ "whereiszakir.com", true },
{ "wheresbuzz.com.au", true },
+ { "wheretogomyanmar.com", true },
{ "whey-protein.ch", true },
{ "whichgender.today", true },
{ "whiletrue.run", true },
@@ -46694,9 +48168,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "whipnic.com", true },
{ "whirlpool-luboss.de", true },
{ "whirlpool.net.au", true },
- { "whiskey.town", true },
{ "whisky-circle.info", true },
- { "whiskygentle.men", false },
+ { "whiskygentle.men", true },
{ "whiskyglazen.nl", false },
{ "whiskynerd.ca", true },
{ "whisp.ly", false },
@@ -46753,16 +48226,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "whoisthenightking.com", true },
{ "whoiswp.com", true },
{ "whoit.top", true },
- { "wholesalecbd.com", true },
{ "wholesomeharvestbread.com", false },
{ "whollyskincare.com", true },
{ "whonix.org", true },
{ "whorepresentsme.us", true },
{ "whotracks.me", true },
{ "whoturgled.com", true },
- { "whqqq.com", true },
{ "whqtravel.org", false },
{ "whs-music.org", true },
+ { "whta.eu", true },
{ "whta.se", true },
{ "whub.io", true },
{ "why-brexit.uk", true },
@@ -46771,7 +48243,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "whyopencomputing.ch", true },
{ "whyopencomputing.com", true },
{ "whysoslow.co.uk", true },
- { "whythisguy.com", true },
{ "whytls.com", true },
{ "whyworldhot.com", true },
{ "whyz1722.tk", true },
@@ -46798,6 +48269,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wiegedaten.de", true },
{ "wiehenkrug.de", true },
{ "wiek.net", true },
+ { "wieloswiat.pl", true },
{ "wien52.at", true },
{ "wieneck-bauelemente.de", true },
{ "wiener.hr", true },
@@ -46810,6 +48282,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wifipineapple.com", true },
{ "wifirst.net", true },
{ "wifree.lv", true },
+ { "wigelsworth.io", true },
{ "wigggle.it", true },
{ "wigle.net", true },
{ "wigmore-hall.org.uk", true },
@@ -46838,6 +48311,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wikihow.pet", true },
{ "wikihow.tech", true },
{ "wikihow.vn", true },
+ { "wikijugos.com", true },
{ "wikileaks.com", true },
{ "wikileaks.org", true },
{ "wikimedia.org", true },
@@ -46849,9 +48323,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wikiquote.org", true },
{ "wikisource.org", true },
{ "wikiversity.org", true },
+ { "wikiversus.com", true },
{ "wikivisually.com", true },
{ "wikivoyage.org", true },
- { "wikiwp.org", true },
{ "wiktionary.org", true },
{ "wiktoriaslife.com", true },
{ "wilane.org", true },
@@ -46860,9 +48334,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wildbirds.dk", true },
{ "wildcardcorp.com", true },
{ "wildcardfederal.net", true },
- { "wildcatdiesel.com.au", true },
{ "wilddogdesign.co.uk", true },
- { "wildercerron.com", true },
{ "wildewood.ca", true },
{ "wildlifeadaptationstrategy.gov", true },
{ "wildnisfamilie.net", true },
@@ -46870,13 +48342,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wildwildtravel.com", true },
{ "wildwind.world", true },
{ "wildzoopark.co.uk", true },
- { "wilfrid-calixte.fr", false },
{ "wilhelm-nathan.de", true },
{ "wili.li", true },
{ "wiliquet.net", true },
{ "wilkushka.com", true },
{ "wilkushka.net", true },
{ "willbarnesphotography.co.uk", true },
+ { "willberg.bayern", true },
{ "willekeinden.nl", true },
{ "willems-kristiansen.dk", true },
{ "willfarrell.ca", true },
@@ -46909,11 +48381,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wimachtendienk.com", true },
{ "wimbo.nl", true },
{ "wimpernforyou.de", true },
+ { "win365.com", true },
{ "win7stylebuilder.com", false },
{ "win88-line.com", true },
{ "win88-line.net", true },
{ "winbignow.click", true },
{ "winbuzzer.com", true },
+ { "wincasinosmoney.com", true },
{ "wincasinowin.click", true },
{ "winch-center.de", true },
{ "wind.moe", true },
@@ -46944,6 +48418,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wingify.com", true },
{ "wingmin.net", true },
{ "wingsofacow.com", true },
+ { "wingspatagonia.com", true },
{ "winhistory-forum.net", true },
{ "winkelcentrumputten.nl", true },
{ "winmodels.org", true },
@@ -46974,20 +48449,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wipswiss.ch", true },
{ "wir-bewegen.sh", true },
{ "wir-machen-druck.de", true },
- { "wircon-int.net", true },
{ "wire.com", true },
{ "wireheading.com", true },
+ { "wirekeep.com", true },
{ "wireless-emergency-stop.com", true },
{ "wireshark.org", true },
{ "wiretime.de", true },
{ "wirhabenspass.de", true },
{ "wirkstoffreich.de", true },
{ "wirralbouncycastles.co.uk", true },
+ { "wirsberg-studios.de", true },
{ "wirsol.com", true },
{ "wis.no", true },
{ "wisak.me", true },
+ { "wisal.org", true },
{ "wischu.com", true },
- { "wisedog.eu", true },
{ "wishingyou.co.uk", true },
{ "wishlist.net", true },
{ "wispapp.com", false },
@@ -47012,7 +48488,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "witneywaterpolo.org.uk", true },
{ "witt-international.co.uk", true },
{ "witte.cloud", true },
+ { "wittepapaver.nl", true },
{ "wittu.fi", true },
+ { "wittywomaniyaa.com", true },
{ "witway.nl", false },
{ "wivoc.nl", true },
{ "wiz.at", true },
@@ -47031,9 +48509,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wjglerum.nl", true },
{ "wjm2038.me", true },
{ "wjr.io", true },
- { "wjwieland.dvrdns.org", false },
{ "wkennington.com", true },
{ "wkv.com", true },
+ { "wkz.io", true },
{ "wlaws.com", true },
{ "wlci.gov", true },
{ "wlog.it", true },
@@ -47053,6 +48531,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wo2forum.nl", true },
{ "wobble.ninja", true },
{ "wobblywotnotz.co.uk", true },
+ { "wobker.co", true },
{ "woblex.cz", true },
{ "wochennummern.de", true },
{ "wodinaz.com", true },
@@ -47076,7 +48555,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wolferstetterkeller.de", true },
{ "wolfgang-braun.info", true },
{ "wolfgang-kerschbaumer.at", true },
- { "wolfgang-kerschbaumer.com", true },
{ "wolfgang-kloke.de", true },
{ "wolfgang-ziegler.com", true },
{ "wolfie.ovh", false },
@@ -47091,7 +48569,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wollwerk.org", true },
{ "wolszon.me", true },
{ "woltlab-demo.com", true },
- { "womb.city", true },
{ "wombatalla.com.au", true },
{ "wombatnet.com", true },
{ "wombats.net", true },
@@ -47114,6 +48591,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wonderlandmovies.de", true },
{ "wondermags.com", true },
{ "wonghome.net", true },
+ { "wongu.tech", true },
{ "wooc.org", true },
{ "wood-crafted.co.uk", true },
{ "wood-crafted.uk", true },
@@ -47174,11 +48652,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "workinginsync.co.uk", true },
{ "workingon.tech", true },
{ "worklizard.com", true },
+ { "workmart.mx", true },
{ "worknrby.com", true },
{ "workoptions.com", true },
{ "workplace.com", true },
+ { "workplace.tools", true },
{ "workraw.com", true },
- { "workray.com", true },
{ "works-ginan.jp", true },
{ "workshopengine.com.au", true },
{ "workshopszwolle.nl", true },
@@ -47213,9 +48692,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "worthygo.com", true },
{ "woshiluo.com", true },
{ "wot-tudasbazis.hu", true },
+ { "wot-zadrot.com", true },
{ "woti.dedyn.io", true },
{ "wotra-register.com", true },
{ "wotsunduk.ru", true },
+ { "wotzadrot.com", true },
{ "woudenberg.nl", false },
{ "woudenbergsedrukkerij.nl", true },
{ "wound-doc.co.uk", true },
@@ -47235,6 +48716,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wowjs.org", true },
{ "wowjs.uk", true },
{ "wownmedia.com", true },
+ { "wozalapha.com", true },
{ "wp-france.com", true },
{ "wp-master.org", true },
{ "wp-mix.com", true },
@@ -47243,13 +48725,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wp-tao.com", true },
{ "wp-webagentur.de", true },
{ "wpabu.com", true },
- { "wpac.de", true },
+ { "wpac.de", false },
{ "wpandup.org", true },
{ "wpboot.com", true },
{ "wpbox.cc", true },
{ "wpcanban.com", true },
{ "wpccu-cdn.org", true },
{ "wpccu.org", true },
+ { "wpcdn.bid", true },
{ "wpcs.pro", true },
{ "wpenhance.com", true },
{ "wpexplorer.com", true },
@@ -47277,13 +48760,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wpthaiuser.com", true },
{ "wptorium.com", true },
{ "wptotal.com", true },
+ { "wpturnedup.com", true },
{ "wpvulndb.com", true },
- { "wq.ro", true },
{ "wr.su", true },
{ "wrara.org", true },
{ "wrathofgeek.com", true },
{ "wrc-results.com", true },
- { "wrd48.net", true },
{ "wrdcfiles.ca", true },
{ "wrdx.io", true },
{ "wrenwrites.com", true },
@@ -47293,6 +48775,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "write-right.net", true },
{ "writeandedit-for-you.com", true },
{ "writecustomessay.com", true },
+ { "writemyessay.info", true },
{ "writemyessay.today", true },
{ "writemyessays.com", true },
{ "writemypaperhub.com", true },
@@ -47306,17 +48789,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "writingtoserve.net", true },
{ "writtenworld.bg", true },
{ "writtit.com", true },
- { "wrksheet.com", true },
{ "wrmea.org", true },
- { "wrn.sh", true },
- { "wrongware.cz", true },
{ "wrp-timber-mouldings.co.uk", true },
{ "wrp.gov", true },
{ "wryoutube.com", true },
- { "ws-meca.com", true },
+ { "ws159.com", true },
{ "wsa.poznan.pl", true },
{ "wsadek.ovh", true },
{ "wsb.pl", true },
+ { "wsbhvac.com", true },
{ "wscales.com", false },
{ "wscbiolo.id", true },
{ "wscore.me", true },
@@ -47333,11 +48814,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wt-server3.de", true },
{ "wtfismyip.com", true },
{ "wtfnope.org", true },
+ { "wth.in", true },
{ "wtp.co.jp", true },
{ "wtpdive.jp", true },
{ "wtpmj.com", true },
{ "wtup.net", true },
{ "wtw.io", true },
+ { "wucke13.de", true },
{ "wuerfel.wf", true },
{ "wuerfelmail.de", true },
{ "wug.fun", true },
@@ -47364,6 +48847,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wuxiaobai.win", true },
{ "wuxiaohen.com", true },
{ "wuyang.ws", true },
+ { "wv-n.de", false },
{ "wvg.myds.me", true },
{ "ww-design.ch", true },
{ "ww0512.com", true },
@@ -47380,16 +48864,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wweforums.net", true },
{ "wweichen.com.cn", true },
{ "wwgc2011.se", true },
+ { "wwjd.dynu.net", true },
{ "wwtext.com", true },
{ "wwv-8722.com", true },
{ "www-33445.com", true },
{ "www-49889.com", true },
{ "www-5287.com", true },
{ "www-68277.com", true },
- { "www-80036.com", true },
{ "www-8522.am", true },
{ "www-8522.com", true },
- { "www-8722.com", true },
{ "www-9822.com", true },
{ "www-railto.com", true },
{ "www.aclu.org", false },
@@ -47465,6 +48948,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "www.wepay.com", false },
{ "www.wordpress.com", false },
{ "www.zdnet.com", true },
+ { "www63605.com", true },
+ { "wwwindows.co.uk", true },
{ "wwwrailto.com", true },
{ "wx37.ac.cn", true },
{ "wxcafe.net", true },
@@ -47477,6 +48962,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wxw.moe", true },
{ "wyam.io", true },
{ "wyatttauber.com", true },
+ { "wyckoff.pro", true },
+ { "wyckoff.vip", true },
{ "wycrow.com", true },
{ "wyczaruj.pl", true },
{ "wyday.com", true },
@@ -47499,6 +48986,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "wzfou.com", true },
{ "wzilverschoon.nl", true },
{ "wzrd.in", true },
+ { "wzxaini9.com", true },
{ "wzyboy.org", true },
{ "x-6.pl", true },
{ "x-iweb.ru", true },
@@ -47507,14 +48995,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "x.io", true },
{ "x.st", true },
{ "x0r.be", true },
+ { "x13.com", true },
{ "x2d2.de", false },
{ "x378.ch", true },
{ "x5197.co", true },
{ "x64architecture.com", true },
{ "x6729.co", true },
{ "x69.biz", true },
+ { "x6957.co", true },
{ "x69x.net", true },
- { "x6r3p2yjg1g6x7iu.myfritz.net", true },
{ "x7plus.com", true },
{ "x9297.co", true },
{ "x9721.com", true },
@@ -47528,6 +49017,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xanadu-taxi.cz", true },
{ "xanadu-trans.cz", true },
{ "xanax.pro", false },
+ { "xanderbron.tech", true },
{ "xanimalcaps.com", true },
{ "xants.de", true },
{ "xanyl.de", true },
@@ -47540,6 +49030,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xbdmov.com", true },
{ "xbertschy.com", true },
{ "xblau.com", true },
+ { "xboxachievements.com", true },
{ "xboxdownloadthat.com", true },
{ "xboxlivegoldshop.nl", true },
{ "xboxonex.shop", true },
@@ -47606,11 +49097,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xiangweiqing.co.uk", true },
{ "xiangwenquan.me", true },
{ "xiao094605.com", true },
- { "xiaobaiwancai.com", true },
{ "xiaocg.xyz", false },
{ "xiaoguo.net", false },
{ "xiaolanglang.net", true },
- { "xiaolong.link", true },
{ "xiaomao.tk", true },
{ "xiaomi.eu", true },
{ "xiaomionline24.pl", true },
@@ -47619,14 +49108,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xiashali.me", true },
{ "xichtsbuch.de", true },
{ "xicreative.net", true },
+ { "xie38.com", true },
+ { "xie91.com", true },
{ "xif.at", true },
{ "xight.org", true },
{ "xilef.org", true },
{ "xilo.net", true },
{ "ximble.com", true },
{ "ximbo.net", false },
+ { "xingyu1993.cn", true },
{ "xinlandm.com", true },
{ "xinnixdeuren-shop.be", true },
+ { "xinqinhai.com", true },
{ "xinsane.com", true },
{ "xinsto.com", true },
{ "xinu.xyz", true },
@@ -47638,6 +49131,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xjd.vision", true },
{ "xjf6.com", true },
{ "xjjeeps.com", true },
+ { "xjoi.net", true },
{ "xjpvictor.info", true },
{ "xkblog.xyz", true },
{ "xkcd.pw", true },
@@ -47648,7 +49142,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xlange.com", true },
{ "xldl.ml", true },
{ "xlfilippou.com", true },
- { "xliang.co", true },
{ "xluxes.jp", true },
{ "xm.digital", true },
{ "xmedius.ca", true },
@@ -47664,6 +49157,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xmusic.live", true },
{ "xmv.cz", true },
{ "xn-----6kcbjcgl1atjj7aadbkxfxfe7a9yia.xn--p1ai", true },
+ { "xn----7sbfl2alf8a.xn--p1ai", true },
{ "xn----8hcdn2ankm1bfq.com", true },
{ "xn----9sbkdigdao0de1a8g.com", true },
{ "xn----ncfb.ws", true },
@@ -47675,8 +49169,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--13-6kc0bufl.xn--p1ai", true },
{ "xn--158h.ml", true },
{ "xn--15tx89ctvm.xn--6qq986b3xl", true },
- { "xn--1yst51avkr.ga", true },
- { "xn--1yst51avkr.xn--6qq986b3xl", true },
+ { "xn--24-6kch4bfqee.xn--p1ai", true },
+ { "xn--24-glcia8dc.xn--p1ai", true },
{ "xn--2sxs9ol7o.com", true },
{ "xn--3st814ec8r.cn", true },
{ "xn--3stv82k.hk", true },
@@ -47688,22 +49182,22 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--5dbkjqb0d.com", true },
{ "xn--5dbkjqb0d.net", true },
{ "xn--6o8h.cf", true },
- { "xn--6qq52xuogcjfw8pwqp.ga", true },
- { "xn--6qq62xsogfjfs8p1qp.ga", true },
- { "xn--6x6a.life", true },
{ "xn--79q87uvkclvgd56ahq5a.net", true },
{ "xn--7ca.co", true },
{ "xn--7xa.google.com", true },
{ "xn--80aanbkcescrdedmxzcl4pmc.xn--p1acf", true },
+ { "xn--80adb4aeode.xn--p1ai", true },
{ "xn--80adbevek3air0ee9b8d.com", true },
{ "xn--80adbvdjzhptl1be6j.com", true },
{ "xn--80aejljbfwxn.xn--p1ai", true },
{ "xn--80ahclcaoccacrhfebi0dcn5c1jh.xn--p1ai", true },
+ { "xn--80aihgal0apt.xn--p1ai", true },
{ "xn--80anogxed.xn--p1ai", true },
{ "xn--80azelb.xn--p1ai", true },
{ "xn--8bi.gq", true },
{ "xn--8n2am80a.tech", true },
{ "xn--90accgba6bldkcbb7a.xn--p1acf", true },
+ { "xn--90adahrqfmec.xn--p1ai", true },
{ "xn--95q32l0t6b9cb17l.cn", true },
{ "xn--acompaamientoholistico-pec.com", true },
{ "xn--allgu-biker-o8a.de", true },
@@ -47712,6 +49206,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--b3c4f.xn--o3cw4h", true },
{ "xn--baron-bonzenbru-elb.com", true },
{ "xn--bckerei-trster-5hb11a.de", true },
+ { "xn--bckerei-wohlgemuth-ltb.de", true },
{ "xn--ben-bank-8za.dk", true },
{ "xn--benbank-dxa.dk", true },
{ "xn--bersetzung-8db.cc", true },
@@ -47728,11 +49223,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--dcko6fsa5b1a8gyicbc.biz", true },
{ "xn--detrkl13b9sbv53j.com", true },
{ "xn--detrkl13b9sbv53j.org", true },
- { "xn--die-hrercharts-zpb.de", true },
{ "xn--dmonenjger-q5ag.net", true },
+ { "xn--dmontaa-9za.com", true },
{ "xn--dragni-g1a.de", true },
{ "xn--dtursfest-72a.dk", true },
{ "xn--durhre-yxa.de", true },
+ { "xn--e1aaavheew.xn--p1ai", true },
+ { "xn--e1aaavheewr.xn--p1ai", true },
+ { "xn--e1adlfhcdo7h.xn--p1ai", true },
+ { "xn--e1aoahhqgn.xn--p1ai", true },
{ "xn--ehqw04eq6e.jp", true },
{ "xn--erban-e9b.ro", true },
{ "xn--erklderbarenben-slbh.dk", true },
@@ -47754,13 +49253,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--hllrigl-90a.at", true },
{ "xn--hmdiseoweb-y9a.com.ar", true },
{ "xn--i2ru8q2qg.com", true },
+ { "xn--ikketenkpdet-1cb.no", true },
{ "xn--imker-in-nrnberg-szb.de", true },
{ "xn--irr.xn--fiqs8s", true },
{ "xn--is8h6d.gq", true },
+ { "xn--j1aoca.xn--p1ai", true },
{ "xn--j4h.cf", true },
+ { "xn--j8se.com", true },
{ "xn--jda.tk", true },
{ "xn--jp8hx8f.ws", true },
- { "xn--kckd0bd4a8tp27yee2e.com", true },
{ "xn--kda.tk", true },
{ "xn--kkcon-fwab.nz", true },
{ "xn--kl-oja.is", true },
@@ -47795,7 +49296,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--o38h.tk", true },
{ "xn--obt757c.com", true },
{ "xn--oiqt18e8e2a.eu.org", true },
- { "xn--p3t555glxhnwa.com", true },
{ "xn--p8j9a0d9c9a.xn--q9jyb4c", true },
{ "xn--pbt947am3ab71g.com", true },
{ "xn--pe-bka.ee", true },
@@ -47810,6 +49310,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--roselire-60a.ch", true },
{ "xn--roselire-60a.com", true },
{ "xn--rt-cja.ie", true },
+ { "xn--rtter-kva.eu", true },
{ "xn--ruanmller-u9a.com", true },
{ "xn--s-1gaa.fi", true },
{ "xn--schlerzeitung-ideenlos-ulc.de", true },
@@ -47820,7 +49321,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--svezavaukuu-ulb08i.rs", true },
{ "xn--sz8h.ml", true },
{ "xn--t-oha.lv", true },
- { "xn--t8j4aa4nkg1h9bwcvud.com", true },
{ "xn--t8j4aa4nzg3a5euoxcwee.xyz", true },
{ "xn--t8jo9k1b.com", true },
{ "xn--tigreray-i1a.org", true },
@@ -47832,7 +49332,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xn--v-wfa35g.ro", true },
{ "xn--v6q426ishax2a.xyz", true },
{ "xn--wq9h.ml", true },
- { "xn--xft85up3jca.ga", true },
{ "xn--y-5ga.com", true },
{ "xn--y8j148r.xn--q9jyb4c", true },
{ "xn--y8jarb5hca.jp", true },
@@ -47862,6 +49361,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xperiacode.com", true },
{ "xperidia.com", true },
{ "xpertcube.com", true },
+ { "xpiuat.global", true },
{ "xpjiosapp.com", true },
{ "xpletus.nl", true },
{ "xpoc.pro", true },
@@ -47870,7 +49370,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xr.cx", true },
{ "xr1s.me", true },
{ "xrg.cz", true },
- { "xrippedhd.com", true },
{ "xrockx.de", true },
{ "xrp.pp.ua", true },
{ "xrptoolkit.com", true },
@@ -47899,6 +49398,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xtom.com.hk", true },
{ "xtom.wiki", true },
{ "xtrainsights.com", true },
+ { "xtremealaskainsulation.com", true },
{ "xtremebouncepartyhire.com.au", true },
{ "xtrememidlife.nl", true },
{ "xtri.xyz", true },
@@ -47907,7 +49407,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xts3636.net", true },
{ "xtu2.com", true },
{ "xuab.net", true },
- { "xuanmeishe.net", true },
{ "xubo666.com", true },
{ "xuc.me", true },
{ "xueanquan.com", true },
@@ -47918,12 +49417,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xun3708855.com", true },
{ "xunn.io", true },
{ "xuntier.ch", true },
- { "xuyh0120.win", true },
{ "xvii.pl", true },
{ "xviimusic.com", true },
{ "xvt-blog.tk", true },
{ "xwalck.se", true },
{ "xwaretech.info", true },
+ { "xwf.fyi", true },
{ "xx0r.eu", true },
{ "xx6729.co", true },
{ "xx6729.com", true },
@@ -47934,12 +49433,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "xx9728.co", true },
{ "xxffo.com", true },
{ "xxiz.com", true },
- { "xxx020625.com", true },
{ "xxxladyboysporn.com", true },
{ "xxxlbox.com", true },
{ "xxxred.net", true },
{ "xxxsuper.net", true },
+ { "xy6161.com", true },
+ { "xy6262.com", true },
+ { "xy6363.com", true },
{ "xy6729.com", true },
+ { "xy7171.com", true },
+ { "xy7272.com", true },
+ { "xy7373.com", true },
{ "xyenon.bid", true },
{ "xyfun.net", false },
{ "xylerfox.ca", true },
@@ -47956,7 +49460,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "y9721.com", true },
{ "y9728.co", true },
{ "yabuisha.jp", true },
- { "yachigoya.com", true },
{ "yachting-home.com", true },
{ "yachtlettering.com", true },
{ "yacineboumaza.fr", true },
@@ -47971,25 +49474,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yakmade.com", true },
{ "yakmail.tech", true },
{ "yakmoo.se", true },
+ { "yalecleaners.com", true },
{ "yallamotor.com", true },
{ "yalook.com", true },
{ "yama.su", true },
{ "yamadaya.tv", true },
{ "yamashita-clinic.org", true },
{ "yame2.com", true },
- { "yamei1.com", true },
{ "yamei8.com", true },
- { "yamei88.com", true },
{ "yamei99.com", true },
- { "yamei9911.com", true },
{ "yamei9922.com", true },
{ "yamilafeinart.de", true },
{ "yamm.io", true },
{ "yanaduday.com", true },
- { "yanbao.xyz", true },
+ { "yanbohon.com", true },
{ "yandere.moe", true },
{ "yangcs.net", true },
{ "yangjingwen.cn", true },
+ { "yangjingwen.com", true },
+ { "yangmaodang.org", true },
{ "yangruixin.com", true },
{ "yanngraf.ch", true },
{ "yanngraf.com", true },
@@ -48006,8 +49509,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yanwei.tech", true },
{ "yao28.com", true },
{ "yapbreak.fr", true },
+ { "yapeal.ch", true },
{ "yappy.com", true },
{ "yarcom.ru", false },
+ { "yarogneva.ru", true },
{ "yarravilletownhouses.com.au", true },
{ "yaru.one", true },
{ "yasirworkfolio.com", true },
@@ -48035,10 +49540,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yeapdata.com", true },
{ "yecl.net", true },
{ "yeesker.com", true },
- { "yell.ml", true },
+ { "yellowfish.top", true },
{ "yellowparachute.com", true },
{ "yellowsquid.co.uk", true },
- { "yellowstone.nsupdate.info", true },
{ "yellowtaillasvegas.com", true },
{ "yellowtree.co.za", true },
{ "yelon.hu", true },
@@ -48076,18 +49580,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yelp.se", true },
{ "yemektarifleri.com", true },
{ "yep-pro.ch", true },
- { "yephy.com", true },
+ { "yes.com", true },
{ "yes35.ru", true },
- { "yesiammaisey.me", true },
{ "yeskx.com", true },
{ "yesod.in", true },
{ "yesogovinpetcare.com", true },
{ "yesornut.com", true },
{ "yestees.com", true },
+ { "yeswecan.co.bw", true },
{ "yeswehack.com", true },
{ "yetanalytics.io", true },
{ "yetii.net", true },
- { "yetzt.me", false },
{ "yeu.io", true },
{ "yex.trade", true },
{ "yeyi.site", true },
@@ -48095,6 +49598,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yfengs.moe", true },
{ "ygobbs.com", true },
{ "ygrene.com", true },
+ { "yh12366.com", true },
{ "yh56787.com", true },
{ "yh599.cc", true },
{ "yh811.com", true },
@@ -48107,11 +49611,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yhhh.org", true },
{ "yhndnzj.com", false },
{ "yhrd.org", true },
+ { "yicipick.com", true },
{ "yicivideo.com", true },
{ "yiff.forsale", true },
{ "yigujin.cn", true },
{ "yiheng.moe", true },
- { "yii2.cc", true },
{ "yikeyong.com", true },
{ "yimgo.fr", true },
{ "yinfor.com", true },
@@ -48119,6 +49623,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yinglinda.love", true },
{ "yingyj.com", true },
{ "yinlei.org", true },
+ { "yipingguo.com", true },
{ "yiyuanzhong.com", true },
{ "yiyueread.com", true },
{ "yiz96.com", true },
@@ -48133,9 +49638,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ym039.com", true },
{ "ym065.com", true },
{ "ym181.com", true },
+ { "ym3311.com", true },
+ { "ym3322.com", true },
+ { "ym6699.com", true },
{ "ymarion.de", true },
{ "ymoah.nl", true },
{ "ymtsonline.org", true },
+ { "ymvip8.com", true },
{ "yoa.st", true },
{ "yoast.com", true },
{ "yobai-grouprec.jp", true },
@@ -48169,6 +49678,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yolocamgirls.com", true },
{ "yolops.net", true },
{ "yombo.net", true },
+ { "yomi.moe", true },
{ "yon.co.il", true },
{ "yonema.com", true },
{ "yongbin.org", true },
@@ -48176,11 +49686,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yooomu.com", true },
{ "yooooex.com", true },
{ "yoppoy.com", true },
- { "yopuedo.co", true },
{ "yoramvandevelde.net", true },
{ "yorcom.nl", false },
{ "yorcool.nl", true },
- { "yorgosbos.nl", true },
{ "yorkshiredalesinflatables.co.uk", true },
{ "yorkshireinflatables.co.uk", true },
{ "yorname.ml", false },
@@ -48205,9 +49713,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "youdamom.com", true },
{ "youdungoofd.com", true },
{ "yougee.ml", true },
- { "youhabitat.es", true },
{ "youhavewords.com", true },
- { "youhs.top", true },
{ "youhua.ru", true },
{ "youkaryote.com", true },
{ "youkaryote.org", true },
@@ -48226,12 +49732,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "youngpeopleunited.co.uk", true },
{ "youngsook.com", true },
{ "youngsook.org", true },
+ { "youngvoicesmatter.org", true },
{ "youpark.no", true },
{ "youpickfarms.org", true },
{ "your-erotic-stories.com", true },
+ { "your-out.com", true },
{ "your-waterserver.com", true },
+ { "your28days.com", true },
{ "youracnepro.com", true },
- { "youran.me", true },
+ { "youran.me", false },
{ "yourantiquarian.com", false },
{ "yourbittorrent.host", true },
{ "yourbittorrent.icu", true },
@@ -48275,13 +49784,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yoxall.me.uk", true },
{ "yoyoost.duckdns.org", true },
{ "yoyoost.ga", true },
- { "yp518518.com", true },
{ "ypart.eu", true },
{ "ypfr.fr", true },
{ "ypid.de", true },
{ "yplanapp.com", true },
{ "ypse.com.br", true },
- { "yqjf68.com", true },
{ "yr166166.com", true },
{ "yr8.com", true },
{ "yrjanheikki.com", true },
@@ -48291,6 +49798,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ysicing.net", true },
{ "ysicorp.com", true },
{ "yslbeauty.com", true },
+ { "ystream.tv", true },
{ "ytec.ca", false },
{ "ytreza.fr", true },
{ "ytuquelees.net", true },
@@ -48358,12 +49866,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yue.la", true },
{ "yue2.net", true },
{ "yuexiangzs.com", true },
- { "yugasun.com", true },
{ "yuhindo.com", true },
+ { "yuho.vn", true },
{ "yuimarukitchen.com", true },
{ "yuisyo.ml", true },
{ "yukari.cafe", true },
{ "yukari.cloud", true },
+ { "yukbeli.id", true },
{ "yuki-nagato.com", true },
{ "yuki.xyz", true },
{ "yukict.com", true },
@@ -48375,10 +49884,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yukonconnector.com", false },
{ "yukonlip.com", false },
{ "yukontec.com", false },
- { "yulaiz.com", true },
{ "yumeconcert.com", true },
+ { "yumiandryan.com", true },
{ "yumikori.net", true },
{ "yuncaioo.com", true },
+ { "yunhu365.com", true },
{ "yunity.org", true },
{ "yunjishou.pro", true },
{ "yunloc.com", true },
@@ -48402,13 +49912,15 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yuvibrands.com", true },
{ "yuwei.org", true },
{ "yuweiji.com", true },
- { "yuweiyang.xyz", true },
{ "yuxuan.org", true },
{ "yuyantang.club", true },
{ "yuyiyang.eu.org", true },
{ "yuyo.com", true },
{ "yuyu.io", true },
{ "yuzei.tk", true },
+ { "yuzulia.com", true },
+ { "yuzurisa.com", true },
+ { "yuzzamatuzz.co.uk", true },
{ "yveslegendre.fr", true },
{ "yvonnehaeusser.de", true },
{ "yvonnethomet.ch", true },
@@ -48418,13 +49930,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "yy-s.net", true },
{ "yy5197.co", true },
{ "yy6729.co", true },
+ { "yy6729.com", true },
{ "yy6957.co", true },
{ "yy9297.co", true },
{ "yy9297.com", true },
{ "yy9397.com", true },
{ "yy9721.com", true },
{ "yy9728.co", true },
- { "yya.me", true },
{ "yyc.city", true },
{ "yycbike.info", true },
{ "yyyy.xyz", true },
@@ -48439,12 +49951,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "z6729.co", true },
{ "z6729.com", true },
{ "z6957.co", true },
+ { "z8193.com", true },
{ "z9297.co", true },
{ "z9397.com", true },
{ "z9721.com", true },
{ "z9728.co", true },
{ "z99944x.xyz", true },
{ "za.search.yahoo.com", false },
+ { "zaadnet.ir", true },
{ "zaagbaak.nl", true },
{ "zabbix.tips", true },
{ "zabezpecweb.cz", true },
@@ -48495,8 +50009,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zakr.es", true },
{ "zakspartiesandevents.com", true },
{ "zalamea.ph", true },
+ { "zalaxx.ddns.net", true },
{ "zaloghaz.ro", true },
- { "zalohovaniburian.cz", true },
{ "zaltv.com", true },
{ "zalvus.com", true },
{ "zamalektoday.com", true },
@@ -48513,6 +50027,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zappbuildapps.com", true },
{ "zarabiaj.com", true },
{ "zargescases.co.uk", true },
+ { "zarmarket.org", true },
{ "zary.me", true },
{ "zatsepin.by", true },
{ "zaufanatrzeciastrona.pl", true },
@@ -48535,12 +50050,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zcore.org", true },
{ "zcr.ca", true },
{ "zcwtl.com", true },
+ { "zczc.cz", true },
{ "zd1313.com", true },
{ "zd1717.com", true },
{ "zd6565.com", true },
{ "zd8863.com", true },
{ "zd8869.com", true },
- { "zd8882.com", true },
{ "zdbl.de", true },
{ "zdenekspacek.cz", true },
{ "zdenekvecera.cz", true },
@@ -48557,6 +50072,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zealworks.jp", true },
{ "zebbra.ro", true },
{ "zebranolemagicien.net", true },
+ { "zeckenhilfe.de", true },
{ "zeds-official.com", true },
{ "zeebrieshoekvanholland.nl", true },
{ "zeel.com", true },
@@ -48569,16 +50085,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zeidlertechnik.de", true },
{ "zeilenmethans.nl", true },
{ "zeilles.nu", true },
- { "zeit.co", true },
{ "zeitpunkt-kulturmagazin.de", true },
{ "zekesnider.com", true },
{ "zekinteractive.com", true },
+ { "zell-mbc.com", true },
{ "zen-diez.de", true },
{ "zen-solutions.io", true },
{ "zena.cx", false },
{ "zenchain.com", true },
{ "zenevents.ro", true },
- { "zengdong.ren", true },
+ { "zenghx.tk", false },
{ "zenideen.com", true },
{ "zenidees.com", true },
{ "zenithmedia.ca", true },
@@ -48603,6 +50119,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zerg.uk", true },
{ "zermatterhof.ch", true },
{ "zerobounce.net", true },
+ { "zerocash.msk.ru", true },
{ "zerocz.eu", true },
{ "zerofy.de", true },
{ "zerolab.org", true },
@@ -48644,21 +50161,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zhangsidan.com", true },
{ "zhangwendao.com", true },
{ "zhangxuhu.com", true },
- { "zhangyuhao.com", true },
{ "zhangzifan.com", false },
{ "zhaofeng.li", true },
{ "zhaopage.com", true },
{ "zhaostephen.com", true },
- { "zhaotongjun.com", true },
{ "zhaoxixiangban.cc", true },
+ { "zhattyt.com", true },
{ "zhcexo.com", true },
{ "zhdd.pl", true },
{ "zhen-chen.com", true },
- { "zhenggangzhao.org", true },
{ "zhengjie.com", true },
{ "zhengqiangonglue.com", true },
{ "zhengzihan.com", true },
- { "zhenic.ir", true },
{ "zhi.ci", true },
{ "zhih.me", true },
{ "zhiin.net", true },
@@ -48680,6 +50194,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zhovner.com", true },
{ "zhuihoude.com", true },
{ "zhuji.com", true },
+ { "zhujiceping.com", true },
{ "zhy.us", true },
{ "zi.is", true },
{ "ziegler-heizung-frankfurt.de", true },
@@ -48705,7 +50220,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zingarastore.com", true },
{ "zingjerijk.nl", true },
{ "zinglix.xyz", true },
- { "zingpetfood.com", true },
{ "zinniamay.com", true },
{ "zinnowitzer-ferienwohnung.de", true },
{ "zinoui.com", true },
@@ -48734,23 +50248,25 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zivyruzenec.cz", true },
{ "ziwa.ir", true },
{ "zixiao.wang", true },
+ { "zixin.com", true },
+ { "zizcollections.com", true },
{ "zjateaucafe.be", true },
{ "zjbuilding.com.au", true },
- { "zjv.me", true },
{ "zk.gd", true },
{ "zk9.nl", true },
{ "zkontrolujsiauto.cz", true },
{ "zkrypt.cc", true },
{ "zkzone.net", true },
- { "zl0101.com", true },
{ "zl016.com", true },
{ "zl0303.com", true },
{ "zl0iu.com", true },
+ { "zl2020.vip", true },
{ "zl7373.com", true },
{ "zl8849.com", true },
{ "zl8862.com", true },
{ "zl9292.com", true },
{ "zl9696.com", true },
+ { "zl9814.com", true },
{ "zl9889.com", true },
{ "zlatakus.cz", true },
{ "zlatosnadno.cz", true },
@@ -48758,6 +50274,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zlatytyden.cz", true },
{ "zlavomat.sk", true },
{ "zlima12.com", true },
+ { "zlogic.xyz", true },
{ "zmarta.de", true },
{ "zmarta.dk", true },
{ "zmarta.fi", true },
@@ -48769,7 +50286,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zmartagroup.no", true },
{ "zmartagroup.se", true },
{ "znaj.ua", true },
+ { "znakcomstva.ru", true },
{ "znation.nl", true },
+ { "znhglobalresources.com", true },
{ "znti.de", true },
{ "zoarcampsite.uk", true },
{ "zobraz.cz", true },
@@ -48782,7 +50301,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zodgame.us", true },
{ "zodiacohouses.com", true },
{ "zoeller.me", true },
- { "zofrex.com", true },
{ "zohar.wang", true },
{ "zoigl.club", true },
{ "zoisfinefood.com", true },
@@ -48790,11 +50308,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zoki.art", true },
{ "zollihood.ch", true },
{ "zom.bi", true },
+ { "zombie-40th.com", true },
{ "zombiesecured.com", true },
{ "zomerschoen.nl", true },
{ "zomiac.pp.ua", true },
{ "zonadigital.co", true },
- { "zone-produkte.de", false },
{ "zone39.com", true },
{ "zonecb.com", true },
{ "zonehomesolutions.com", true },
@@ -48806,12 +50324,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zonky.cz", true },
{ "zonky.de", true },
{ "zonkysetkani.cz", true },
- { "zontractors.com", true },
{ "zooish.net", true },
{ "zook.systems", true },
{ "zoola.io", true },
{ "zoolaboo.de", true },
{ "zoom.earth", true },
+ { "zoomcar.pro", true },
{ "zoomek.com", true },
{ "zooneshop.com", true },
{ "zooom.azurewebsites.net", true },
@@ -48831,16 +50349,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zorntt.fr", true },
{ "zorrobei.cf", true },
{ "zorz.info", true },
+ { "zoso.ro", true },
{ "zotero.org", true },
{ "zouk.info", true },
{ "zouyaoji.top", true },
{ "zozo.com", true },
{ "zozzle.co.uk", true },
- { "zp.do", true },
{ "zp25.ninja", true },
{ "zr.is", true },
{ "zravyobrazky.cz", true },
{ "zravypapir.cz", true },
+ { "zrhdwz.cn", true },
{ "zrniecka-pre-sny.sk", true },
{ "zrnieckapresny.sk", true },
{ "zry-blog.top", true },
@@ -48856,7 +50375,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zsrbcs.com", true },
{ "zstgmnachod.cz", true },
{ "zten.org", true },
- { "zuanqianni.com", true },
+ { "ztk.im", true },
{ "zubel.it", false },
{ "zubr.net", true },
{ "zubro.net", true },
@@ -48885,6 +50404,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zvps.uk", true },
{ "zvxr.net", true },
{ "zwartendijkstalling.nl", true },
+ { "zwembadheeten.nl", true },
{ "zwergenfeste.ch", true },
{ "zwerimex.com", true },
{ "zwierslanguagetraining.nl", true },
@@ -48894,7 +50414,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zwy.ch", true },
{ "zx6rninja.de", true },
{ "zx7r.de", true },
- { "zxavier.com", true },
{ "zxssl.com", true },
{ "zy.md", true },
{ "zy.si", true },
@@ -48914,6 +50433,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "zyzsdy.com", true },
{ "zz5197.co", true },
{ "zz6729.co", true },
+ { "zz6729.com", true },
{ "zz6957.co", true },
{ "zz9297.co", true },
{ "zz9397.com", true },
diff --git a/security/nss/lib/cryptohi/seckey.c b/security/nss/lib/cryptohi/seckey.c
index 080909772..173096050 100644
--- a/security/nss/lib/cryptohi/seckey.c
+++ b/security/nss/lib/cryptohi/seckey.c
@@ -639,6 +639,11 @@ seckey_ExtractPublicKey(const CERTSubjectPublicKeyInfo *spki)
return pubk;
break;
case SEC_OID_ANSIX962_EC_PUBLIC_KEY:
+ /* A basic sanity check on inputs. */
+ if (spki->algorithm.parameters.len == 0 || newOs.len == 0) {
+ PORT_SetError(SEC_ERROR_INPUT_LEN);
+ break;
+ }
pubk->keyType = ecKey;
pubk->u.ec.size = 0;
diff --git a/security/nss/lib/freebl/dh.c b/security/nss/lib/freebl/dh.c
index 6f2bafda2..b2d6d7430 100644
--- a/security/nss/lib/freebl/dh.c
+++ b/security/nss/lib/freebl/dh.c
@@ -210,7 +210,8 @@ DH_Derive(SECItem *publicValue,
unsigned int len = 0;
unsigned int nb;
unsigned char *secret = NULL;
- if (!publicValue || !prime || !privateValue || !derivedSecret) {
+ if (!publicValue || !publicValue->len || !prime || !prime->len ||
+ !privateValue || !privateValue->len || !derivedSecret) {
PORT_SetError(SEC_ERROR_INVALID_ARGS);
return SECFailure;
}
diff --git a/security/nss/lib/freebl/ec.c b/security/nss/lib/freebl/ec.c
index 6468a10d6..ddbcc2340 100644
--- a/security/nss/lib/freebl/ec.c
+++ b/security/nss/lib/freebl/ec.c
@@ -202,8 +202,8 @@ ec_NewKey(ECParams *ecParams, ECPrivateKey **privKey,
#endif
MP_DIGITS(&k) = 0;
- if (!ecParams || !privKey || !privKeyBytes || (privKeyLen < 0) ||
- !ecParams->name) {
+ if (!ecParams || ecParams->name == ECCurve_noName ||
+ !privKey || !privKeyBytes || privKeyLen <= 0) {
PORT_SetError(SEC_ERROR_INVALID_ARGS);
return SECFailure;
}
@@ -391,7 +391,7 @@ EC_NewKey(ECParams *ecParams, ECPrivateKey **privKey)
int len;
unsigned char *privKeyBytes = NULL;
- if (!ecParams) {
+ if (!ecParams || ecParams->name == ECCurve_noName || !privKey) {
PORT_SetError(SEC_ERROR_INVALID_ARGS);
return SECFailure;
}
@@ -430,7 +430,8 @@ EC_ValidatePublicKey(ECParams *ecParams, SECItem *publicValue)
mp_err err = MP_OKAY;
int len;
- if (!ecParams || !publicValue || !ecParams->name) {
+ if (!ecParams || ecParams->name == ECCurve_noName ||
+ !publicValue || !publicValue->len) {
PORT_SetError(SEC_ERROR_INVALID_ARGS);
return SECFailure;
}
@@ -536,8 +537,9 @@ ECDH_Derive(SECItem *publicValue,
int i;
#endif
- if (!publicValue || !ecParams || !privateValue || !derivedSecret ||
- !ecParams->name) {
+ if (!publicValue || !publicValue->len ||
+ !ecParams || ecParams->name == ECCurve_noName ||
+ !privateValue || !privateValue->len || !derivedSecret) {
PORT_SetError(SEC_ERROR_INVALID_ARGS);
return SECFailure;
}
diff --git a/security/nss/lib/freebl/ecl/ecp_25519.c b/security/nss/lib/freebl/ecl/ecp_25519.c
index 38bd34c50..7b331b28f 100644
--- a/security/nss/lib/freebl/ecl/ecp_25519.c
+++ b/security/nss/lib/freebl/ecl/ecp_25519.c
@@ -114,6 +114,9 @@ ec_Curve25519_pt_mul(SECItem *X, SECItem *k, SECItem *P)
}
px = P->data;
}
+ if (k->len != 32) {
+ return SECFailure;
+ }
SECStatus rv = ec_Curve25519_mul(X->data, k->data, px);
if (NSS_SecureMemcmpZero(X->data, X->len) == 0) {
diff --git a/security/nss/lib/nss/nss.h b/security/nss/lib/nss/nss.h
index 49c545ecc..ea54ce0cd 100644
--- a/security/nss/lib/nss/nss.h
+++ b/security/nss/lib/nss/nss.h
@@ -22,10 +22,10 @@
* The format of the version string should be
* "<major version>.<minor version>[.<patch level>[.<build number>]][ <ECC>][ <Beta>]"
*/
-#define NSS_VERSION "3.41" _NSS_CUSTOMIZED
+#define NSS_VERSION "3.41.2" _NSS_CUSTOMIZED
#define NSS_VMAJOR 3
#define NSS_VMINOR 41
-#define NSS_VPATCH 0
+#define NSS_VPATCH 2
#define NSS_VBUILD 0
#define NSS_BETA PR_FALSE
diff --git a/security/nss/lib/pk11wrap/pk11akey.c b/security/nss/lib/pk11wrap/pk11akey.c
index c6070e264..9a914272d 100644
--- a/security/nss/lib/pk11wrap/pk11akey.c
+++ b/security/nss/lib/pk11wrap/pk11akey.c
@@ -190,7 +190,6 @@ PK11_ImportPublicKey(PK11SlotInfo *slot, SECKEYPublicKey *pubKey,
attrs++;
PK11_SETATTRS(attrs, CKA_DERIVE, &cktrue, sizeof(CK_BBOOL));
attrs++;
- signedattr = attrs;
PK11_SETATTRS(attrs, CKA_EC_PARAMS,
pubKey->u.ec.DEREncodedParams.data,
pubKey->u.ec.DEREncodedParams.len);
@@ -224,10 +223,13 @@ PK11_ImportPublicKey(PK11SlotInfo *slot, SECKEYPublicKey *pubKey,
}
templateCount = attrs - theTemplate;
- signedcount = attrs - signedattr;
PORT_Assert(templateCount <= (sizeof(theTemplate) / sizeof(CK_ATTRIBUTE)));
- for (attrs = signedattr; signedcount; attrs++, signedcount--) {
- pk11_SignedToUnsigned(attrs);
+ if (pubKey->keyType != ecKey) {
+ PORT_Assert(signedattr);
+ signedcount = attrs - signedattr;
+ for (attrs = signedattr; signedcount; attrs++, signedcount--) {
+ pk11_SignedToUnsigned(attrs);
+ }
}
rv = PK11_CreateNewObject(slot, CK_INVALID_SESSION, theTemplate,
templateCount, isToken, &objectID);
@@ -1074,9 +1076,13 @@ pk11_loadPrivKeyWithFlags(PK11SlotInfo *slot, SECKEYPrivateKey *privKey,
&cktrue, &ckfalse);
/* Not everyone can handle zero padded key values, give
- * them the raw data as unsigned */
- for (ap = attrs; extra_count; ap++, extra_count--) {
- pk11_SignedToUnsigned(ap);
+ * them the raw data as unsigned. The exception is EC,
+ * where the values are encoded or zero-preserving
+ * per-RFC5915 */
+ if (privKey->keyType != ecKey) {
+ for (ap = attrs; extra_count; ap++, extra_count--) {
+ pk11_SignedToUnsigned(ap);
+ }
}
/* now Store the puppies */
diff --git a/security/nss/lib/pk11wrap/pk11cert.c b/security/nss/lib/pk11wrap/pk11cert.c
index 819769643..a880b1ab8 100644
--- a/security/nss/lib/pk11wrap/pk11cert.c
+++ b/security/nss/lib/pk11wrap/pk11cert.c
@@ -184,7 +184,9 @@ PK11_IsUserCert(PK11SlotInfo *slot, CERTCertificate *cert,
SECKEY_DestroyPublicKey(pubKey);
return PR_FALSE;
}
- pk11_SignedToUnsigned(&theTemplate);
+ if (pubKey->keyType != ecKey) {
+ pk11_SignedToUnsigned(&theTemplate);
+ }
if (pk11_FindObjectByTemplate(slot, &theTemplate, 1) != CK_INVALID_HANDLE) {
SECKEY_DestroyPublicKey(pubKey);
return PR_TRUE;
diff --git a/security/nss/lib/pk11wrap/pk11pk12.c b/security/nss/lib/pk11wrap/pk11pk12.c
index 47b6702c6..9888ace69 100644
--- a/security/nss/lib/pk11wrap/pk11pk12.c
+++ b/security/nss/lib/pk11wrap/pk11pk12.c
@@ -505,7 +505,7 @@ PK11_ImportAndReturnPrivateKey(PK11SlotInfo *slot, SECKEYRawPrivateKey *lpk,
}
PK11_SETATTRS(attrs, CKA_ID, ck_id->data, ck_id->len);
attrs++;
- signedattr = attrs;
+ /* No signed attrs for EC */
/* curveOID always is a copy of AlgorithmID.parameters. */
PK11_SETATTRS(attrs, CKA_EC_PARAMS, lpk->u.ec.curveOID.data,
lpk->u.ec.curveOID.len);
@@ -523,11 +523,12 @@ PK11_ImportAndReturnPrivateKey(PK11SlotInfo *slot, SECKEYRawPrivateKey *lpk,
}
templateCount = attrs - theTemplate;
PORT_Assert(templateCount <= sizeof(theTemplate) / sizeof(CK_ATTRIBUTE));
- PORT_Assert(signedattr != NULL);
- signedcount = attrs - signedattr;
-
- for (ap = signedattr; signedcount; ap++, signedcount--) {
- pk11_SignedToUnsigned(ap);
+ if (lpk->keyType != ecKey) {
+ PORT_Assert(signedattr);
+ signedcount = attrs - signedattr;
+ for (ap = signedattr; signedcount; ap++, signedcount--) {
+ pk11_SignedToUnsigned(ap);
+ }
}
rv = PK11_CreateNewObject(slot, CK_INVALID_SESSION,
diff --git a/security/nss/lib/softoken/legacydb/keydb.c b/security/nss/lib/softoken/legacydb/keydb.c
index b4aa7754b..c8c4d07ba 100644
--- a/security/nss/lib/softoken/legacydb/keydb.c
+++ b/security/nss/lib/softoken/legacydb/keydb.c
@@ -1213,6 +1213,8 @@ nsslowkey_EncodePW(SECOidTag alg, const SECItem *salt, SECItem *data)
unsigned char one = 1;
SECItem *epw = NULL;
SECItem *encParam;
+ int iterLen = 0;
+ int saltLen;
SECStatus rv;
param.salt = *salt;
@@ -1221,6 +1223,17 @@ nsslowkey_EncodePW(SECOidTag alg, const SECItem *salt, SECItem *data)
param.iter.len = 1;
edi.encryptedData = *data;
+ iterLen = salt->len > 1 ? salt->data[salt->len - 1] : 2;
+ saltLen = (salt->len - iterLen) - 1;
+ /* if the resulting saltLen is a sha hash length, then assume that
+ * the iteration count is tacked on the end of the buffer */
+ if ((saltLen == SHA1_LENGTH) || (saltLen == SHA256_LENGTH) || (saltLen == SHA384_LENGTH) || (saltLen == SHA224_LENGTH) ||
+ (saltLen == SHA512_LENGTH)) {
+ param.iter.data = &salt->data[saltLen];
+ param.iter.len = iterLen;
+ param.salt.len = saltLen;
+ }
+
arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
if (arena == NULL) {
return NULL;
@@ -1270,9 +1283,23 @@ nsslowkey_DecodePW(const SECItem *derData, SECOidTag *alg, SECItem *salt)
if (rv != SECSuccess) {
goto loser;
}
- rv = SECITEM_CopyItem(NULL, salt, &param.salt);
- if (rv != SECSuccess) {
- goto loser;
+ /* if the iteration count isn't one, tack it at the end of the salt */
+ if (!((param.iter.len == 1) && (param.iter.data[0] == 1))) {
+ int total_len = param.salt.len + param.iter.len + 1;
+ salt->data = PORT_Alloc(total_len);
+ if (salt->data == NULL) {
+ goto loser;
+ }
+ PORT_Memcpy(salt->data, param.salt.data, param.salt.len);
+ PORT_Memcpy(&salt->data[param.salt.len], param.iter.data,
+ param.iter.len);
+ salt->data[total_len - 1] = param.iter.len;
+ salt->len = total_len;
+ } else {
+ rv = SECITEM_CopyItem(NULL, salt, &param.salt);
+ if (rv != SECSuccess) {
+ goto loser;
+ }
}
pwe = SECITEM_DupItem(&edi.encryptedData);
diff --git a/security/nss/lib/softoken/legacydb/lgattr.c b/security/nss/lib/softoken/legacydb/lgattr.c
index 542b0c968..3d77bd056 100644
--- a/security/nss/lib/softoken/legacydb/lgattr.c
+++ b/security/nss/lib/softoken/legacydb/lgattr.c
@@ -950,9 +950,9 @@ lg_FindECPrivateKeyAttribute(NSSLOWKEYPrivateKey *key, CK_ATTRIBUTE_TYPE type,
case CKA_UNWRAP:
return LG_CLONE_ATTR(attribute, type, lg_StaticFalseAttr);
case CKA_VALUE:
- return lg_CopyPrivAttrSigned(attribute, type,
- key->u.ec.privateValue.data,
- key->u.ec.privateValue.len, sdbpw);
+ return lg_CopyPrivAttribute(attribute, type,
+ key->u.ec.privateValue.data,
+ key->u.ec.privateValue.len, sdbpw);
case CKA_EC_PARAMS:
return lg_CopyAttributeSigned(attribute, type,
key->u.ec.ecParams.DEREncoding.data,
diff --git a/security/nss/lib/softoken/lgglue.c b/security/nss/lib/softoken/lgglue.c
index 94f054129..67f17943b 100644
--- a/security/nss/lib/softoken/lgglue.c
+++ b/security/nss/lib/softoken/lgglue.c
@@ -171,6 +171,8 @@ sftkdb_encrypt_stub(PLArenaPool *arena, SDB *sdb, SECItem *plainText,
{
SFTKDBHandle *handle = sdb->app_private;
SECStatus rv;
+ SECItem *key;
+ int iterationCount;
if (handle == NULL) {
return SECFailure;
@@ -192,9 +194,15 @@ sftkdb_encrypt_stub(PLArenaPool *arena, SDB *sdb, SECItem *plainText,
/* PORT_SetError */
return SECFailure;
}
+ if (handle->newKey) {
+ key = handle->newKey;
+ iterationCount = handle->newDefaultIterationCount;
+ } else {
+ key = &handle->passwordKey;
+ iterationCount = handle->defaultIterationCount;
+ }
- rv = sftkdb_EncryptAttribute(arena,
- handle->newKey ? handle->newKey : &handle->passwordKey,
+ rv = sftkdb_EncryptAttribute(arena, key, iterationCount,
plainText, cipherText);
PZ_Unlock(handle->passwordLock);
diff --git a/security/nss/lib/softoken/pkcs11.c b/security/nss/lib/softoken/pkcs11.c
index 34f25a9d0..7dd4f7ee9 100644
--- a/security/nss/lib/softoken/pkcs11.c
+++ b/security/nss/lib/softoken/pkcs11.c
@@ -617,7 +617,7 @@ sftk_hasNullPassword(SFTKSlot *slot, SFTKDBHandle *keydb)
pwenabled = PR_FALSE;
if (sftkdb_HasPasswordSet(keydb) == SECSuccess) {
PRBool tokenRemoved = PR_FALSE;
- SECStatus rv = sftkdb_CheckPassword(keydb, "", &tokenRemoved);
+ SECStatus rv = sftkdb_CheckPasswordNull(keydb, &tokenRemoved);
if (tokenRemoved) {
sftk_CloseAllSessions(slot, PR_FALSE);
}
@@ -3812,7 +3812,7 @@ NSC_SetPIN(CK_SESSION_HANDLE hSession, CK_CHAR_PTR pOldPin,
PZ_Unlock(slot->slotLock);
tokenRemoved = PR_FALSE;
- rv = sftkdb_CheckPassword(handle, "", &tokenRemoved);
+ rv = sftkdb_CheckPasswordNull(handle, &tokenRemoved);
if (tokenRemoved) {
sftk_CloseAllSessions(slot, PR_FALSE);
}
diff --git a/security/nss/lib/softoken/pkcs11c.c b/security/nss/lib/softoken/pkcs11c.c
index 7eec3d7ee..884702cc1 100644
--- a/security/nss/lib/softoken/pkcs11c.c
+++ b/security/nss/lib/softoken/pkcs11c.c
@@ -7568,7 +7568,7 @@ NSC_DeriveKey(CK_SESSION_HANDLE hSession,
rv = ECDH_Derive(&ecPoint, &privKey->u.ec.ecParams, &ecScalar,
withCofactor, &tmp);
- PORT_Free(ecScalar.data);
+ PORT_ZFree(ecScalar.data, ecScalar.len);
ecScalar.data = NULL;
if (privKey != sourceKey->objectInfo) {
nsslowkey_DestroyPrivateKey(privKey);
diff --git a/security/nss/lib/softoken/sftkdb.c b/security/nss/lib/softoken/sftkdb.c
index 409c910f4..21796bbbb 100644
--- a/security/nss/lib/softoken/sftkdb.c
+++ b/security/nss/lib/softoken/sftkdb.c
@@ -530,6 +530,7 @@ sftk_signTemplate(PLArenaPool *arena, SFTKDBHandle *handle,
goto loser;
}
rv = sftkdb_SignAttribute(arena, &keyHandle->passwordKey,
+ keyHandle->defaultIterationCount,
objectID, template[i].type,
&plainText, &signText);
PZ_Unlock(keyHandle->passwordLock);
@@ -663,6 +664,7 @@ sftk_ExtractTemplate(PLArenaPool *arena, SFTKObject *object,
break;
}
rv = sftkdb_EncryptAttribute(arena, &handle->passwordKey,
+ handle->defaultIterationCount,
&plainText, &cipherText);
PZ_Unlock(handle->passwordLock);
if (rv == SECSuccess) {
@@ -2759,7 +2761,7 @@ sftk_DBInit(const char *configdir, const char *certPrefix,
(sftkdb_HasPasswordSet(*keyDB) == SECSuccess) ? PR_TRUE : PR_FALSE;
/* if the password on the key db is NULL, kick off our update
* chain of events */
- sftkdb_CheckPassword((*keyDB), "", &tokenRemoved);
+ sftkdb_CheckPasswordNull((*keyDB), &tokenRemoved);
} else {
/* we don't have a key DB, update the certificate DB now */
sftkdb_Update(*certDB, NULL);
diff --git a/security/nss/lib/softoken/sftkdb.h b/security/nss/lib/softoken/sftkdb.h
index a47c89670..e30f3a237 100644
--- a/security/nss/lib/softoken/sftkdb.h
+++ b/security/nss/lib/softoken/sftkdb.h
@@ -25,6 +25,7 @@ CK_RV sftkdb_closeDB(SFTKDBHandle *handle);
SECStatus sftkdb_PWIsInitialized(SFTKDBHandle *keydb);
SECStatus sftkdb_CheckPassword(SFTKDBHandle *keydb, const char *pw,
PRBool *tokenRemoved);
+SECStatus sftkdb_CheckPasswordNull(SFTKDBHandle *keydb, PRBool *tokenRemoved);
SECStatus sftkdb_PWCached(SFTKDBHandle *keydb);
SECStatus sftkdb_HasPasswordSet(SFTKDBHandle *keydb);
SECStatus sftkdb_ResetKeyDB(SFTKDBHandle *keydb);
diff --git a/security/nss/lib/softoken/sftkdbti.h b/security/nss/lib/softoken/sftkdbti.h
index 7b1db4560..22655de56 100644
--- a/security/nss/lib/softoken/sftkdbti.h
+++ b/security/nss/lib/softoken/sftkdbti.h
@@ -13,7 +13,9 @@ struct SFTKDBHandleStr {
PRInt32 ref;
CK_OBJECT_HANDLE type;
SECItem passwordKey;
+ int defaultIterationCount;
SECItem *newKey;
+ int newDefaultIterationCount;
SECItem *oldKey;
SECItem *updatePasswordKey;
PZLock *passwordLock;
@@ -39,9 +41,10 @@ struct SFTKDBHandleStr {
SECStatus sftkdb_DecryptAttribute(SECItem *passKey, SECItem *cipherText,
SECItem **plainText);
SECStatus sftkdb_EncryptAttribute(PLArenaPool *arena, SECItem *passKey,
- SECItem *plainText, SECItem **cipherText);
+ int iterationCount, SECItem *plainText,
+ SECItem **cipherText);
SECStatus sftkdb_SignAttribute(PLArenaPool *arena, SECItem *passKey,
- CK_OBJECT_HANDLE objectID,
+ int iterationCount, CK_OBJECT_HANDLE objectID,
CK_ATTRIBUTE_TYPE attrType,
SECItem *plainText, SECItem **sigText);
SECStatus sftkdb_VerifyAttribute(SECItem *passKey,
diff --git a/security/nss/lib/softoken/sftkpwd.c b/security/nss/lib/softoken/sftkpwd.c
index 9834d3ba0..b6d098a07 100644
--- a/security/nss/lib/softoken/sftkpwd.c
+++ b/security/nss/lib/softoken/sftkpwd.c
@@ -34,6 +34,14 @@
#include "secerr.h"
#include "softoken.h"
+const int NSS_DEFAULT_ITERATION_COUNT =
+#ifdef DEBUG
+ 25
+#else
+ 500
+#endif
+ ;
+
/******************************************************************
*
* Key DB password handling functions
@@ -132,7 +140,7 @@ const SEC_ASN1Template sftkdb_EncryptedDataInfoTemplate[] = {
* to data in cipherText, if cipherText is freed, cipherValue will be invalid.
*/
static SECStatus
-sftkdb_decodeCipherText(SECItem *cipherText, sftkCipherValue *cipherValue)
+sftkdb_decodeCipherText(const SECItem *cipherText, sftkCipherValue *cipherValue)
{
PLArenaPool *arena = NULL;
SFTKDBEncryptedDataInfo edi;
@@ -225,7 +233,8 @@ loser:
* with SECITEM_FreeItem by the caller.
*/
SECStatus
-sftkdb_DecryptAttribute(SECItem *passKey, SECItem *cipherText, SECItem **plain)
+sftkdb_DecryptAttribute(SECItem *passKey, SECItem *cipherText,
+ SECItem **plain)
{
SECStatus rv;
sftkCipherValue cipherValue;
@@ -261,7 +270,8 @@ loser:
*/
SECStatus
sftkdb_EncryptAttribute(PLArenaPool *arena, SECItem *passKey,
- SECItem *plainText, SECItem **cipherText)
+ int iterationCount, SECItem *plainText,
+ SECItem **cipherText)
{
SECStatus rv;
sftkCipherValue cipherValue;
@@ -275,7 +285,7 @@ sftkdb_EncryptAttribute(PLArenaPool *arena, SECItem *passKey,
RNG_GenerateGlobalRandomBytes(saltData, cipherValue.salt.len);
param = nsspkcs5_NewParam(cipherValue.alg, HASH_AlgSHA1, &cipherValue.salt,
- 1);
+ iterationCount);
if (param == NULL) {
rv = SECFailure;
goto loser;
@@ -413,7 +423,8 @@ loser:
*/
SECStatus
sftkdb_SignAttribute(PLArenaPool *arena, SECItem *passKey,
- CK_OBJECT_HANDLE objectID, CK_ATTRIBUTE_TYPE attrType,
+ int iterationCount, CK_OBJECT_HANDLE objectID,
+ CK_ATTRIBUTE_TYPE attrType,
SECItem *plainText, SECItem **signature)
{
SECStatus rv;
@@ -446,7 +457,8 @@ sftkdb_SignAttribute(PLArenaPool *arena, SECItem *passKey,
RNG_GenerateGlobalRandomBytes(saltData, prfLength);
/* initialize our pkcs5 parameter */
- param = nsspkcs5_NewParam(signValue.alg, HASH_AlgSHA1, &signValue.salt, 1);
+ param = nsspkcs5_NewParam(signValue.alg, HASH_AlgSHA1, &signValue.salt,
+ iterationCount);
if (param == NULL) {
rv = SECFailure;
goto loser;
@@ -491,7 +503,7 @@ loser:
* and sftkdb_DecryptAttribute calls.
*/
static void
-sftkdb_switchKeys(SFTKDBHandle *keydb, SECItem *passKey)
+sftkdb_switchKeys(SFTKDBHandle *keydb, SECItem *passKey, int iterationCount)
{
unsigned char *data;
int len;
@@ -507,6 +519,7 @@ sftkdb_switchKeys(SFTKDBHandle *keydb, SECItem *passKey)
len = keydb->passwordKey.len;
keydb->passwordKey.data = passKey->data;
keydb->passwordKey.len = passKey->len;
+ keydb->defaultIterationCount = iterationCount;
passKey->data = data;
passKey->len = len;
SKIP_AFTER_FORK(PZ_Unlock(keydb->passwordLock));
@@ -660,6 +673,90 @@ sftkdb_HasPasswordSet(SFTKDBHandle *keydb)
return (crv == CKR_OK) ? SECSuccess : SECFailure;
}
+/* pull out the common final part of checking a password */
+SECStatus
+sftkdb_finishPasswordCheck(SFTKDBHandle *keydb, SECItem *key,
+ const char *pw, SECItem *value,
+ PRBool *tokenRemoved);
+
+/*
+ * check to see if we have the NULL password set.
+ * We special case the NULL password so that if you have no password set, you
+ * don't do thousands of hash rounds. This allows us to startup and get
+ * webpages without slowdown in normal mode.
+ */
+SECStatus
+sftkdb_CheckPasswordNull(SFTKDBHandle *keydb, PRBool *tokenRemoved)
+{
+ /* just like sftkdb_CheckPassowd, we get the salt and value, and
+ * create a dbkey */
+ SECStatus rv;
+ SECItem salt, value;
+ unsigned char saltData[SDB_MAX_META_DATA_LEN];
+ unsigned char valueData[SDB_MAX_META_DATA_LEN];
+ SECItem key;
+ SDB *db;
+ CK_RV crv;
+ sftkCipherValue cipherValue;
+
+ cipherValue.param = NULL;
+ cipherValue.arena = NULL;
+
+ if (keydb == NULL) {
+ return SECFailure;
+ }
+
+ db = sftk_getPWSDB(keydb);
+ if (db == NULL) {
+ return SECFailure;
+ }
+
+ key.data = NULL;
+ key.len = 0;
+
+ /* get the entry from the database */
+ salt.data = saltData;
+ salt.len = sizeof(saltData);
+ value.data = valueData;
+ value.len = sizeof(valueData);
+ crv = (*db->sdb_GetMetaData)(db, "password", &salt, &value);
+ if (crv != CKR_OK) {
+ rv = SECFailure;
+ goto done;
+ }
+
+ /* get our intermediate key based on the entry salt value */
+ rv = sftkdb_passwordToKey(keydb, &salt, "", &key);
+ if (rv != SECSuccess) {
+ goto done;
+ }
+
+ /* First get the cipher type */
+ rv = sftkdb_decodeCipherText(&value, &cipherValue);
+ if (rv != SECSuccess) {
+ goto done;
+ }
+
+ if (cipherValue.param->iter != 1) {
+ rv = SECFailure;
+ goto done;
+ }
+
+ rv = sftkdb_finishPasswordCheck(keydb, &key, "", &value, tokenRemoved);
+
+done:
+ if (key.data) {
+ PORT_ZFree(key.data, key.len);
+ }
+ if (cipherValue.param) {
+ nsspkcs5_DestroyPBEParameter(cipherValue.param);
+ }
+ if (cipherValue.arena) {
+ PORT_FreeArena(cipherValue.arena, PR_FALSE);
+ }
+ return rv;
+}
+
#define SFTK_PW_CHECK_STRING "password-check"
#define SFTK_PW_CHECK_LEN 14
@@ -674,7 +771,6 @@ sftkdb_CheckPassword(SFTKDBHandle *keydb, const char *pw, PRBool *tokenRemoved)
unsigned char saltData[SDB_MAX_META_DATA_LEN];
unsigned char valueData[SDB_MAX_META_DATA_LEN];
SECItem key;
- SECItem *result = NULL;
SDB *db;
CK_RV crv;
@@ -710,8 +806,30 @@ sftkdb_CheckPassword(SFTKDBHandle *keydb, const char *pw, PRBool *tokenRemoved)
goto done;
}
+ rv = sftkdb_finishPasswordCheck(keydb, &key, pw, &value, tokenRemoved);
+
+done:
+ if (key.data) {
+ PORT_ZFree(key.data, key.len);
+ }
+ return rv;
+}
+
+/* we need to pass iterationCount in case we are updating a new database
+ * and from an old one. */
+SECStatus
+sftkdb_finishPasswordCheck(SFTKDBHandle *keydb, SECItem *key, const char *pw,
+ SECItem *value, PRBool *tokenRemoved)
+{
+ SECItem *result = NULL;
+ SECStatus rv;
+ int iterationCount = NSS_DEFAULT_ITERATION_COUNT;
+
+ if (*pw == 0) {
+ iterationCount = 1;
+ }
/* decrypt the entry value */
- rv = sftkdb_DecryptAttribute(&key, &value, &result);
+ rv = sftkdb_DecryptAttribute(key, value, &result);
if (rv != SECSuccess) {
goto done;
}
@@ -752,7 +870,7 @@ sftkdb_CheckPassword(SFTKDBHandle *keydb, const char *pw, PRBool *tokenRemoved)
* as well as changing which database is returned from
* SFTK_GET_PW_DB (thus effecting both sftkdb_CheckPassword()
* and sftkdb_HasPasswordSet()) */
- keydb->updatePasswordKey = SECITEM_DupItem(&key);
+ keydb->updatePasswordKey = SECITEM_DupItem(key);
PZ_Unlock(keydb->passwordLock);
if (keydb->updatePasswordKey == NULL) {
/* PORT_Error set by SECITEM_DupItem */
@@ -787,7 +905,7 @@ sftkdb_CheckPassword(SFTKDBHandle *keydb, const char *pw, PRBool *tokenRemoved)
* are good to go */
goto done;
}
- sftkdb_CheckPassword(keydb, "", tokenRemoved);
+ sftkdb_CheckPasswordNull(keydb, tokenRemoved);
/*
* Important 'NULL' code here. At this point either we
@@ -821,15 +939,15 @@ sftkdb_CheckPassword(SFTKDBHandle *keydb, const char *pw, PRBool *tokenRemoved)
PZ_Unlock(keydb->passwordLock);
}
/* load the keys, so the keydb can parse it's key set */
- sftkdb_switchKeys(keydb, &key);
+ sftkdb_switchKeys(keydb, key, iterationCount);
/* we need to update, do it now */
if (((keydb->db->sdb_flags & SDB_RDONLY) == 0) && keydb->update) {
/* update the peer certdb if it exists */
if (keydb->peerDB) {
- sftkdb_Update(keydb->peerDB, &key);
+ sftkdb_Update(keydb->peerDB, key);
}
- sftkdb_Update(keydb, &key);
+ sftkdb_Update(keydb, key);
}
} else {
rv = SECFailure;
@@ -837,9 +955,6 @@ sftkdb_CheckPassword(SFTKDBHandle *keydb, const char *pw, PRBool *tokenRemoved)
}
done:
- if (key.data) {
- PORT_ZFree(key.data, key.len);
- }
if (result) {
SECITEM_FreeItem(result, PR_TRUE);
}
@@ -857,7 +972,7 @@ sftkdb_PWCached(SFTKDBHandle *keydb)
static CK_RV
sftk_updateMacs(PLArenaPool *arena, SFTKDBHandle *handle,
- CK_OBJECT_HANDLE id, SECItem *newKey)
+ CK_OBJECT_HANDLE id, SECItem *newKey, int iterationCount)
{
CK_ATTRIBUTE authAttrs[] = {
{ CKA_MODULUS, NULL, 0 },
@@ -937,7 +1052,7 @@ sftk_updateMacs(PLArenaPool *arena, SFTKDBHandle *handle,
plainText.data = authAttrs[i].pValue;
plainText.len = authAttrs[i].ulValueLen;
- rv = sftkdb_SignAttribute(arena, newKey, id,
+ rv = sftkdb_SignAttribute(arena, newKey, iterationCount, id,
authAttrs[i].type, &plainText, &signText);
if (rv != SECSuccess) {
return CKR_GENERAL_ERROR;
@@ -954,7 +1069,7 @@ sftk_updateMacs(PLArenaPool *arena, SFTKDBHandle *handle,
static CK_RV
sftk_updateEncrypted(PLArenaPool *arena, SFTKDBHandle *keydb,
- CK_OBJECT_HANDLE id, SECItem *newKey)
+ CK_OBJECT_HANDLE id, SECItem *newKey, int iterationCount)
{
CK_RV crv = CKR_OK;
CK_RV crv2;
@@ -1041,7 +1156,8 @@ sftk_updateEncrypted(PLArenaPool *arena, SFTKDBHandle *keydb,
plainText.data = first[i].pValue;
plainText.len = first[i].ulValueLen;
- rv = sftkdb_EncryptAttribute(arena, newKey, &plainText, &result);
+ rv = sftkdb_EncryptAttribute(arena, newKey, iterationCount,
+ &plainText, &result);
if (rv != SECSuccess) {
return CKR_GENERAL_ERROR;
}
@@ -1056,6 +1172,7 @@ sftk_updateEncrypted(PLArenaPool *arena, SFTKDBHandle *keydb,
*/
id &= SFTK_OBJ_ID_MASK;
keydb->newKey = newKey;
+ keydb->newDefaultIterationCount = iterationCount;
crv = (*keydb->db->sdb_SetAttributeValue)(keydb->db, id, first, count);
keydb->newKey = NULL;
@@ -1063,8 +1180,8 @@ sftk_updateEncrypted(PLArenaPool *arena, SFTKDBHandle *keydb,
}
static CK_RV
-sftk_convertAttributes(SFTKDBHandle *handle,
- CK_OBJECT_HANDLE id, SECItem *newKey)
+sftk_convertAttributes(SFTKDBHandle *handle, CK_OBJECT_HANDLE id,
+ SECItem *newKey, int iterationCount)
{
CK_RV crv = CKR_OK;
PLArenaPool *arena = NULL;
@@ -1078,13 +1195,14 @@ sftk_convertAttributes(SFTKDBHandle *handle,
/*
* first handle the MACS
*/
- crv = sftk_updateMacs(arena, handle, id, newKey);
+ crv = sftk_updateMacs(arena, handle, id, newKey, iterationCount);
if (crv != CKR_OK) {
goto loser;
}
if (handle->type == SFTK_KEYDB_TYPE) {
- crv = sftk_updateEncrypted(arena, handle, id, newKey);
+ crv = sftk_updateEncrypted(arena, handle, id, newKey,
+ iterationCount);
if (crv != CKR_OK) {
goto loser;
}
@@ -1106,7 +1224,7 @@ loser:
*/
CK_RV
sftkdb_convertObjects(SFTKDBHandle *handle, CK_ATTRIBUTE *template,
- CK_ULONG count, SECItem *newKey)
+ CK_ULONG count, SECItem *newKey, int iterationCount)
{
SDBFind *find = NULL;
CK_ULONG idCount = SFTK_MAX_IDS;
@@ -1122,7 +1240,8 @@ sftkdb_convertObjects(SFTKDBHandle *handle, CK_ATTRIBUTE *template,
while ((crv == CKR_OK) && (idCount == SFTK_MAX_IDS)) {
crv = sftkdb_FindObjects(handle, find, ids, SFTK_MAX_IDS, &idCount);
for (i = 0; (crv == CKR_OK) && (i < idCount); i++) {
- crv = sftk_convertAttributes(handle, ids[i], newKey);
+ crv = sftk_convertAttributes(handle, ids[i], newKey,
+ iterationCount);
}
}
crv2 = sftkdb_FindObjectsFinal(handle, find);
@@ -1147,6 +1266,7 @@ sftkdb_ChangePassword(SFTKDBHandle *keydb,
SFTKDBHandle *certdb;
unsigned char saltData[SDB_MAX_META_DATA_LEN];
unsigned char valueData[SDB_MAX_META_DATA_LEN];
+ int iterationCount = NSS_DEFAULT_ITERATION_COUNT;
CK_RV crv;
SDB *db;
@@ -1182,6 +1302,10 @@ sftkdb_ChangePassword(SFTKDBHandle *keydb,
RNG_GenerateGlobalRandomBytes(salt.data, salt.len);
}
+ if (newPin && *newPin == 0) {
+ iterationCount = 1;
+ }
+
rv = sftkdb_passwordToKey(keydb, &salt, newPin, &newKey);
if (rv != SECSuccess) {
goto loser;
@@ -1190,7 +1314,7 @@ sftkdb_ChangePassword(SFTKDBHandle *keydb,
/*
* convert encrypted entries here.
*/
- crv = sftkdb_convertObjects(keydb, NULL, 0, &newKey);
+ crv = sftkdb_convertObjects(keydb, NULL, 0, &newKey, iterationCount);
if (crv != CKR_OK) {
rv = SECFailure;
goto loser;
@@ -1202,13 +1326,15 @@ sftkdb_ChangePassword(SFTKDBHandle *keydb,
CK_OBJECT_CLASS myClass = CKO_NETSCAPE_TRUST;
objectType.pValue = &myClass;
- crv = sftkdb_convertObjects(certdb, &objectType, 1, &newKey);
+ crv = sftkdb_convertObjects(certdb, &objectType, 1, &newKey,
+ iterationCount);
if (crv != CKR_OK) {
rv = SECFailure;
goto loser;
}
myClass = CKO_PUBLIC_KEY;
- crv = sftkdb_convertObjects(certdb, &objectType, 1, &newKey);
+ crv = sftkdb_convertObjects(certdb, &objectType, 1, &newKey,
+ iterationCount);
if (crv != CKR_OK) {
rv = SECFailure;
goto loser;
@@ -1218,7 +1344,8 @@ sftkdb_ChangePassword(SFTKDBHandle *keydb,
plainText.data = (unsigned char *)SFTK_PW_CHECK_STRING;
plainText.len = SFTK_PW_CHECK_LEN;
- rv = sftkdb_EncryptAttribute(NULL, &newKey, &plainText, &result);
+ rv = sftkdb_EncryptAttribute(NULL, &newKey, iterationCount,
+ &plainText, &result);
if (rv != SECSuccess) {
goto loser;
}
@@ -1237,7 +1364,7 @@ sftkdb_ChangePassword(SFTKDBHandle *keydb,
keydb->newKey = NULL;
- sftkdb_switchKeys(keydb, &newKey);
+ sftkdb_switchKeys(keydb, &newKey, iterationCount);
loser:
if (newKey.data) {
@@ -1262,7 +1389,7 @@ sftkdb_ClearPassword(SFTKDBHandle *keydb)
SECItem oldKey;
oldKey.data = NULL;
oldKey.len = 0;
- sftkdb_switchKeys(keydb, &oldKey);
+ sftkdb_switchKeys(keydb, &oldKey, 1);
if (oldKey.data) {
PORT_ZFree(oldKey.data, oldKey.len);
}
diff --git a/security/nss/lib/softoken/softkver.h b/security/nss/lib/softoken/softkver.h
index c1f63d769..73a38b010 100644
--- a/security/nss/lib/softoken/softkver.h
+++ b/security/nss/lib/softoken/softkver.h
@@ -17,10 +17,10 @@
* The format of the version string should be
* "<major version>.<minor version>[.<patch level>[.<build number>]][ <ECC>][ <Beta>]"
*/
-#define SOFTOKEN_VERSION "3.41" SOFTOKEN_ECC_STRING
+#define SOFTOKEN_VERSION "3.41.2" SOFTOKEN_ECC_STRING
#define SOFTOKEN_VMAJOR 3
#define SOFTOKEN_VMINOR 41
-#define SOFTOKEN_VPATCH 0
+#define SOFTOKEN_VPATCH 2
#define SOFTOKEN_VBUILD 0
#define SOFTOKEN_BETA PR_FALSE
diff --git a/security/nss/lib/ssl/ssl3con.c b/security/nss/lib/ssl/ssl3con.c
index 3b5c69b11..d98521a52 100644
--- a/security/nss/lib/ssl/ssl3con.c
+++ b/security/nss/lib/ssl/ssl3con.c
@@ -64,6 +64,7 @@ static SECStatus ssl3_FlushHandshakeMessages(sslSocket *ss, PRInt32 flags);
static CK_MECHANISM_TYPE ssl3_GetHashMechanismByHashType(SSLHashType hashType);
static CK_MECHANISM_TYPE ssl3_GetMgfMechanismByHashType(SSLHashType hash);
PRBool ssl_IsRsaPssSignatureScheme(SSLSignatureScheme scheme);
+PRBool ssl_IsRsaPkcs1SignatureScheme(SSLSignatureScheme scheme);
const PRUint8 ssl_hello_retry_random[] = {
0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11,
@@ -4060,6 +4061,9 @@ ssl_SignatureSchemeValid(SSLSignatureScheme scheme, SECOidTag spkiOid,
if (ssl_SignatureSchemeToHashType(scheme) == ssl_hash_sha1) {
return PR_FALSE;
}
+ if (ssl_IsRsaPkcs1SignatureScheme(scheme)) {
+ return PR_FALSE;
+ }
/* With TLS 1.3, EC keys should have been selected based on calling
* ssl_SignatureSchemeFromSpki(), reject them otherwise. */
return spkiOid != SEC_OID_ANSIX962_EC_PUBLIC_KEY;
@@ -4309,6 +4313,22 @@ ssl_IsRsaPssSignatureScheme(SSLSignatureScheme scheme)
return PR_FALSE;
}
+PRBool
+ssl_IsRsaPkcs1SignatureScheme(SSLSignatureScheme scheme)
+{
+ switch (scheme) {
+ case ssl_sig_rsa_pkcs1_sha256:
+ case ssl_sig_rsa_pkcs1_sha384:
+ case ssl_sig_rsa_pkcs1_sha512:
+ case ssl_sig_rsa_pkcs1_sha1:
+ return PR_TRUE;
+
+ default:
+ return PR_FALSE;
+ }
+ return PR_FALSE;
+}
+
SSLAuthType
ssl_SignatureSchemeToAuthType(SSLSignatureScheme scheme)
{
diff --git a/security/nss/lib/util/nssutil.h b/security/nss/lib/util/nssutil.h
index 62511eafe..a2be260b0 100644
--- a/security/nss/lib/util/nssutil.h
+++ b/security/nss/lib/util/nssutil.h
@@ -19,10 +19,10 @@
* The format of the version string should be
* "<major version>.<minor version>[.<patch level>[.<build number>]][ <Beta>]"
*/
-#define NSSUTIL_VERSION "3.41"
+#define NSSUTIL_VERSION "3.41.2"
#define NSSUTIL_VMAJOR 3
#define NSSUTIL_VMINOR 41
-#define NSSUTIL_VPATCH 0
+#define NSSUTIL_VPATCH 2
#define NSSUTIL_VBUILD 0
#define NSSUTIL_BETA PR_FALSE
diff --git a/security/nss/lib/util/quickder.c b/security/nss/lib/util/quickder.c
index 7a6ac1c53..70ae42b27 100644
--- a/security/nss/lib/util/quickder.c
+++ b/security/nss/lib/util/quickder.c
@@ -757,6 +757,13 @@ DecodeItem(void* dest,
}
case SEC_ASN1_BIT_STRING: {
+ /* Can't be 8 or more spare bits, or any spare bits
+ * if there are no octets. */
+ if (temp.data[0] >= 8 || (temp.data[0] > 0 && temp.len == 1)) {
+ PORT_SetError(SEC_ERROR_BAD_DER);
+ rv = SECFailure;
+ break;
+ }
/* change the length in the SECItem to be the number
of bits */
temp.len = (temp.len - 1) * 8 - (temp.data[0] & 0x7);
diff --git a/services/sync/modules/policies.js b/services/sync/modules/policies.js
index 2d85b1428..48acbe2e6 100644
--- a/services/sync/modules/policies.js
+++ b/services/sync/modules/policies.js
@@ -60,20 +60,60 @@ SyncScheduler.prototype = {
},
// nextSync is in milliseconds, but prefs can't hold that much
- get nextSync() Svc.Prefs.get("nextSync", 0) * 1000,
- set nextSync(value) Svc.Prefs.set("nextSync", Math.floor(value / 1000)),
+ get nextSync() {
+ if (Svc.Prefs) {
+ return Svc.Prefs.get("nextSync", 0) * 1000
+ }
+ },
+ set nextSync(value) {
+ if (Svc.Prefs) {
+ Svc.Prefs.set("nextSync", Math.floor(value / 1000))
+ }
+ },
- get syncInterval() Svc.Prefs.get("syncInterval", this.singleDeviceInterval),
- set syncInterval(value) Svc.Prefs.set("syncInterval", value),
+ get syncInterval() {
+ if (Svc.Prefs) {
+ return Svc.Prefs.get("syncInterval", this.singleDeviceInterval)
+ }
+ },
+ set syncInterval(value) {
+ if (Svc.Prefs) {
+ Svc.Prefs.set("syncInterval", value)
+ }
+ },
- get syncThreshold() Svc.Prefs.get("syncThreshold", SINGLE_USER_THRESHOLD),
- set syncThreshold(value) Svc.Prefs.set("syncThreshold", value),
+ get syncThreshold() {
+ if (Svc.Prefs) {
+ return Svc.Prefs.get("syncThreshold", SINGLE_USER_THRESHOLD)
+ }
+ },
+ set syncThreshold(value) {
+ if (Svc.Prefs) {
+ Svc.Prefs.set("syncThreshold", value)
+ }
+ },
- get globalScore() Svc.Prefs.get("globalScore", 0),
- set globalScore(value) Svc.Prefs.set("globalScore", value),
+ get globalScore() {
+ if (Svc.Prefs) {
+ return Svc.Prefs.get("globalScore", 0)
+ }
+ },
+ set globalScore(value) {
+ if (Svc.Prefs) {
+ Svc.Prefs.set("globalScore", value)
+ }
+ },
- get numClients() Svc.Prefs.get("numClients", 0),
- set numClients(value) Svc.Prefs.set("numClients", value),
+ get numClients() {
+ if (Svc.Prefs) {
+ return Svc.Prefs.get("numClients", 0)
+ }
+ },
+ set numClients(value) {
+ if (Svc.Prefs) {
+ Svc.Prefs.set("numClients", value)
+ }
+ },
init: function init() {
this._log.level = Log.Level[Svc.Prefs.get("log.logger.service.main")];
@@ -523,7 +563,7 @@ SyncScheduler.prototype = {
},
get isBlocked() {
- let until = Svc.Prefs.get("scheduler.blocked-until");
+ let until = Svc.Prefs ? Svc.Prefs.get("scheduler.blocked-until") : undefined;
if (until === undefined) {
return false;
}
@@ -770,19 +810,19 @@ ErrorHandler.prototype = {
},
get currentAlertMode() {
- return Svc.Prefs.get("errorhandler.alert.mode");
+ return Svc.Prefs ? Svc.Prefs.get("errorhandler.alert.mode") : undefined;
},
set currentAlertMode(str) {
- return Svc.Prefs.set("errorhandler.alert.mode", str);
+ return Svc.Prefs ? Svc.Prefs.set("errorhandler.alert.mode", str) : undefined;
},
get earliestNextAlert() {
- return Svc.Prefs.get("errorhandler.alert.earliestNext", 0) * 1000;
+ return Svc.Prefs ? Svc.Prefs.get("errorhandler.alert.earliestNext", 0) * 1000 : undefined;
},
set earliestNextAlert(msec) {
- return Svc.Prefs.set("errorhandler.alert.earliestNext", msec / 1000);
+ return Svc.Prefs ? Svc.Prefs.set("errorhandler.alert.earliestNext", msec / 1000) : undefined;
},
clearServerAlerts: function () {
diff --git a/services/sync/modules/service.js b/services/sync/modules/service.js
index 15884aca0..804eb20cd 100644
--- a/services/sync/modules/service.js
+++ b/services/sync/modules/service.js
@@ -296,21 +296,6 @@ Sync11Service.prototype = {
return false;
},
- // The global "enabled" state comes from prefs, and will be set to false
- // whenever the UI that exposes what to sync finds all Sync engines disabled.
- get enabled() {
- return Svc.Prefs.get("enabled");
- },
- set enabled(val) {
- // There's no real reason to impose this other than to catch someone doing
- // something we don't expect with bad consequences - all setting of this
- // pref are in the UI code and external to this module.
- if (val) {
- throw new Error("Only disabling via this setter is supported");
- }
- Svc.Prefs.set("enabled", val);
- },
-
/**
* Prepare to initialize the rest of Weave after waiting a little bit
*/
@@ -340,6 +325,8 @@ Sync11Service.prototype = {
this._clusterManager = this.identity.createClusterManager(this);
this.recordManager = new RecordManager(this);
+ this.enabled = true;
+
this._registerEngines();
let ua = Cc["@mozilla.org/network/protocol;1?name=http"].
@@ -1236,10 +1223,6 @@ Sync11Service.prototype = {
},
sync: function sync() {
- if (!this.enabled) {
- this._log.debug("Not syncing as Sync is disabled.");
- return;
- }
let dateStr = new Date().toLocaleFormat(LOG_DATE_FORMAT);
this._log.debug("User-Agent: " + SyncStorageRequest.prototype.userAgent);
this._log.info("Starting sync at " + dateStr);
diff --git a/services/sync/modules/util.js b/services/sync/modules/util.js
index 7fd5a7971..73f4d8a80 100644
--- a/services/sync/modules/util.js
+++ b/services/sync/modules/util.js
@@ -321,10 +321,17 @@ this.Utils = {
* could not be loaded, the first argument will be undefined.
*/
jsonLoad: Task.async(function*(filePath, that, callback) {
- let path = OS.Path.join(OS.Constants.Path.profileDir, "weave", filePath + ".json");
+ let path;
+ try {
+ path = OS.Path.normalize(OS.Path.join(OS.Constants.Path.profileDir, "weave", filePath + ".json"));
+ } catch (e) {
+ if (that._log) {
+ that._log.debug("Path join error: " + e);
+ }
+ }
if (that._log) {
- that._log.trace("Loading json from disk: " + filePath);
+ that._log.trace("Loading json from disk: " + path);
}
let json;
@@ -341,8 +348,9 @@ this.Utils = {
}
}
}
-
- callback.call(that, json);
+ if (callback) {
+ callback.call(that, json);
+ }
}),
/**
diff --git a/services/sync/services-sync.js b/services/sync/services-sync.js
index 640fb4abc..dfce84767 100644
--- a/services/sync/services-sync.js
+++ b/services/sync/services-sync.js
@@ -24,10 +24,6 @@ pref("services.sync.scheduler.sync11.singleDeviceInterval", 86400); // 1 day
pref("services.sync.errorhandler.networkFailureReportTimeout", 1209600); // 2 weeks
-// A "master" pref for Sync being enabled. Will be set to false if the sync
-// customization UI finds all our builtin engines disabled (and addons are
-// free to force this to true if they have their own engine)
-pref("services.sync.enabled", true);
// Our engines.
pref("services.sync.engine.addons", false);
pref("services.sync.engine.bookmarks", true);
diff --git a/services/sync/tests/unit/test_service_login.js b/services/sync/tests/unit/test_service_login.js
index 52ee5e63a..2ecb0a377 100644
--- a/services/sync/tests/unit/test_service_login.js
+++ b/services/sync/tests/unit/test_service_login.js
@@ -183,7 +183,7 @@ add_test(function test_login_on_sync() {
// This test exercises these two branches.
_("We're ready to sync if locked.");
- Svc.Prefs.set("enabled", true);
+ Service.enabled = true;
Services.io.offline = false;
Service.scheduler.checkSyncStatus();
do_check_true(scheduleCalled);
diff --git a/testing/profiles/prefs_general.js b/testing/profiles/prefs_general.js
index 35680ca43..3ec41b385 100644
--- a/testing/profiles/prefs_general.js
+++ b/testing/profiles/prefs_general.js
@@ -108,7 +108,6 @@ user_pref("extensions.update.background.url", "http://%(server)s/extensions-dumm
user_pref("extensions.blocklist.detailsURL", "http://%(server)s/extensions-dummy/blocklistDetailsURL");
user_pref("extensions.blocklist.itemURL", "http://%(server)s/extensions-dummy/blocklistItemURL");
user_pref("extensions.blocklist.url", "http://%(server)s/extensions-dummy/blocklistURL");
-user_pref("extensions.hotfix.url", "http://%(server)s/extensions-dummy/hotfixURL");
user_pref("extensions.systemAddon.update.url", "http://%(server)s/dummy-system-addons.xml");
// Turn off extension updates so they don't bother tests
user_pref("extensions.update.enabled", false);
diff --git a/testing/talos/talos/config.py b/testing/talos/talos/config.py
index 828e68a15..872bb3543 100644
--- a/testing/talos/talos/config.py
+++ b/testing/talos/talos/config.py
@@ -123,8 +123,6 @@ DEFAULTS = dict(
'extensions.blocklist.enabled': False,
'extensions.blocklist.url':
'http://127.0.0.1/extensions-dummy/blocklistURL',
- 'extensions.hotfix.url':
- 'http://127.0.0.1/extensions-dummy/hotfixURL',
'extensions.update.enabled': False,
'extensions.webservice.discoverURL':
'http://127.0.0.1/extensions-dummy/discoveryURL',
diff --git a/testing/talos/tests/test_talosconfig_browser_config.json b/testing/talos/tests/test_talosconfig_browser_config.json
index 7e7226c9f..b0ba17ad7 100644
--- a/testing/talos/tests/test_talosconfig_browser_config.json
+++ b/testing/talos/tests/test_talosconfig_browser_config.json
@@ -1 +1 @@
-{'deviceroot': '', 'dirs': {}, 'repository': 'http://hg.mozilla.org/releases/mozilla-release', 'buildid': '20131205075310', 'results_log': 'pathtoresults_log', 'symbols_path': None, 'bcontroller_config': 'pathtobcontroller', 'host': '', 'browser_name': 'Firefox', 'sourcestamp': '39faf812aaec', 'remote': False, 'child_process': 'plugin-container', 'branch_name': '', 'browser_version': '26.0', 'extra_args': '', 'develop': True, 'preferences': {'browser.display.overlaynavbuttons': False, 'extensions.getAddons.get.url': 'http://127.0.0.1/extensions-dummy/repositoryGetURL', 'dom.max_chrome_script_run_time': 0, 'network.proxy.type': 1, 'extensions.update.background.url': 'http://127.0.0.1/extensions-dummy/updateBackgroundURL', 'network.proxy.http': 'localhost', 'plugins.update.url': 'http://127.0.0.1/plugins-dummy/updateCheckURL', 'dom.max_script_run_time': 0, 'extensions.update.enabled': False, 'browser.safebrowsing.keyURL': 'http://127.0.0.1/safebrowsing-dummy/newkey', 'media.navigator.permission.disabled': True, 'app.update.enabled': False, 'extensions.blocklist.url': 'http://127.0.0.1/extensions-dummy/blocklistURL', 'browser.EULA.override': True, 'extensions.checkCompatibility': False, 'talos.logfile': 'pathtofile', 'browser.safebrowsing.gethashURL': 'http://127.0.0.1/safebrowsing-dummy/gethash', 'extensions.hotfix.url': 'http://127.0.0.1/extensions-dummy/hotfixURL', 'dom.disable_window_move_resize': True, 'network.proxy.http_port': 80, 'browser.dom.window.dump.enabled': True, 'extensions.update.url': 'http://127.0.0.1/extensions-dummy/updateURL', 'browser.chrome.dynamictoolbar': False, 'browser.link.open_newwindow': 2, 'extensions.getAddons.search.url': 'http://127.0.0.1/extensions-dummy/repositorySearchURL', 'browser.cache.disk.smart_size.first_run': False, 'security.turn_off_all_security_so_that_viruses_can_take_over_this_computer': True, 'dom.disable_open_during_load': False, 'extensions.getAddons.search.browseURL': 'http://127.0.0.1/extensions-dummy/repositoryBrowseURL', 'browser.cache.disk.smart_size.enabled': False, 'extensions.getAddons.getWithPerformance.url': 'http://127.0.0.1/extensions-dummy/repositoryGetWithPerformanceURL', 'hangmonitor.timeout': 0, 'extensions.getAddons.maxResults': 0, 'dom.send_after_paint_to_content': True, 'security.fileuri.strict_origin_policy': False, 'media.capturestream_hints.enabled': True, 'extensions.update.notifyUser': False, 'extensions.blocklist.enabled': False, 'browser.bookmarks.max_backups': 0, 'browser.shell.checkDefaultBrowser': False, 'media.peerconnection.enabled': True, 'dom.disable_window_flip': True, 'security.enable_java': False, 'browser.warnOnQuit': False, 'media.navigator.enabled': True, 'browser.safebrowsing.updateURL': 'http://127.0.0.1/safebrowsing-dummy/update', 'dom.allow_scripts_to_close_windows': True, 'extensions.webservice.discoverURL': 'http://127.0.0.1/extensions-dummy/discoveryURL'}, 'test_timeout': 1200, 'title': 'qm-pxp01', 'error_filename': 'pathtoerrorfile', 'webserver': 'localhost:15707', 'browser_path':ffox_path, 'port': 20701, 'browser_log': 'browser_output.txt', 'process': 'firefox.exe', 'xperf_path': 'C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe', 'extensions': ['pathtopageloader'], 'fennecIDs': '', 'env': {'NO_EM_RESTART': '1'}, 'init_url': 'http://localhost:15707/getInfo.html', 'browser_wait': 5} \ No newline at end of file
+{'deviceroot': '', 'dirs': {}, 'repository': 'http://hg.mozilla.org/releases/mozilla-release', 'buildid': '20131205075310', 'results_log': 'pathtoresults_log', 'symbols_path': None, 'bcontroller_config': 'pathtobcontroller', 'host': '', 'browser_name': 'Firefox', 'sourcestamp': '39faf812aaec', 'remote': False, 'child_process': 'plugin-container', 'branch_name': '', 'browser_version': '26.0', 'extra_args': '', 'develop': True, 'preferences': {'browser.display.overlaynavbuttons': False, 'extensions.getAddons.get.url': 'http://127.0.0.1/extensions-dummy/repositoryGetURL', 'dom.max_chrome_script_run_time': 0, 'network.proxy.type': 1, 'extensions.update.background.url': 'http://127.0.0.1/extensions-dummy/updateBackgroundURL', 'network.proxy.http': 'localhost', 'plugins.update.url': 'http://127.0.0.1/plugins-dummy/updateCheckURL', 'dom.max_script_run_time': 0, 'extensions.update.enabled': False, 'browser.safebrowsing.keyURL': 'http://127.0.0.1/safebrowsing-dummy/newkey', 'media.navigator.permission.disabled': True, 'app.update.enabled': False, 'extensions.blocklist.url': 'http://127.0.0.1/extensions-dummy/blocklistURL', 'browser.EULA.override': True, 'extensions.checkCompatibility': False, 'talos.logfile': 'pathtofile', 'browser.safebrowsing.gethashURL': 'http://127.0.0.1/safebrowsing-dummy/gethash', 'dom.disable_window_move_resize': True, 'network.proxy.http_port': 80, 'browser.dom.window.dump.enabled': True, 'extensions.update.url': 'http://127.0.0.1/extensions-dummy/updateURL', 'browser.chrome.dynamictoolbar': False, 'browser.link.open_newwindow': 2, 'extensions.getAddons.search.url': 'http://127.0.0.1/extensions-dummy/repositorySearchURL', 'browser.cache.disk.smart_size.first_run': False, 'security.turn_off_all_security_so_that_viruses_can_take_over_this_computer': True, 'dom.disable_open_during_load': False, 'extensions.getAddons.search.browseURL': 'http://127.0.0.1/extensions-dummy/repositoryBrowseURL', 'browser.cache.disk.smart_size.enabled': False, 'extensions.getAddons.getWithPerformance.url': 'http://127.0.0.1/extensions-dummy/repositoryGetWithPerformanceURL', 'hangmonitor.timeout': 0, 'extensions.getAddons.maxResults': 0, 'dom.send_after_paint_to_content': True, 'security.fileuri.strict_origin_policy': False, 'media.capturestream_hints.enabled': True, 'extensions.update.notifyUser': False, 'extensions.blocklist.enabled': False, 'browser.bookmarks.max_backups': 0, 'browser.shell.checkDefaultBrowser': False, 'media.peerconnection.enabled': True, 'dom.disable_window_flip': True, 'security.enable_java': False, 'browser.warnOnQuit': False, 'media.navigator.enabled': True, 'browser.safebrowsing.updateURL': 'http://127.0.0.1/safebrowsing-dummy/update', 'dom.allow_scripts_to_close_windows': True, 'extensions.webservice.discoverURL': 'http://127.0.0.1/extensions-dummy/discoveryURL'}, 'test_timeout': 1200, 'title': 'qm-pxp01', 'error_filename': 'pathtoerrorfile', 'webserver': 'localhost:15707', 'browser_path':ffox_path, 'port': 20701, 'browser_log': 'browser_output.txt', 'process': 'firefox.exe', 'xperf_path': 'C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe', 'extensions': ['pathtopageloader'], 'fennecIDs': '', 'env': {'NO_EM_RESTART': '1'}, 'init_url': 'http://localhost:15707/getInfo.html', 'browser_wait': 5}
diff --git a/testing/web-platform/meta/MANIFEST.json b/testing/web-platform/meta/MANIFEST.json
index 7edded5dc..03dda4a1f 100644
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -18166,6 +18166,18 @@
"url": "/html/browsers/history/the-location-interface/location-stringifier.html"
},
{
+ "path": "html/browsers/history/the-location-interface/location-symbol-toprimitive.html",
+ "url": "/html/browsers/history/the-location-interface/location-symbol-toprimitive.html"
+ },
+ {
+ "path": "html/browsers/history/the-location-interface/location-tojson.html",
+ "url": "/html/browsers/history/the-location-interface/location-tojson.html"
+ },
+ {
+ "path": "html/browsers/history/the-location-interface/location-valueof.html",
+ "url": "/html/browsers/history/the-location-interface/location-valueof.html"
+ },
+ {
"path": "html/browsers/history/the-location-interface/location_assign.html",
"url": "/html/browsers/history/the-location-interface/location_assign.html"
},
diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html
index d23323b37..bde54b266 100644
--- a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html
+++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-stringifier.html
@@ -8,4 +8,17 @@
<div id=log></div>
<script>
test_stringifier_attribute(location, "href", true);
+
+test(function() {
+ const prop1 = Object.getOwnPropertyDescriptor(location, "toString"),
+ prop2 = Object.getOwnPropertyDescriptor(location, "href")
+
+ assert_true(prop1.enumerable)
+ assert_false(prop1.writable)
+ assert_false(prop1.configurable)
+
+ assert_true(prop2.enumerable)
+ assert_false(prop2.configurable)
+ assert_equals(typeof prop2.get, "function")
+})
</script>
diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html
new file mode 100644
index 000000000..e666a3e70
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-symbol-toprimitive.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<title>Location Symbol.toPrimitive</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(() => {
+ assert_equals(location[Symbol.toPrimitive], undefined)
+ const prop = Object.getOwnPropertyDescriptor(location, Symbol.toPrimitive)
+ assert_false(prop.enumerable)
+ assert_false(prop.writable)
+ assert_false(prop.configurable)
+})
+</script>
diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-tojson.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-tojson.html
new file mode 100644
index 000000000..5f20a6e15
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-tojson.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>Location has no toJSON</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(() => {
+ assert_equals(location.toJSON, undefined)
+ assert_equals(Object.getOwnPropertyDescriptor(location, "toJSON"), undefined)
+ assert_false(location.hasOwnProperty("toJSON"))
+})
+</script>
+<!-- See https://github.com/whatwg/html/pull/2294 for context. (And the HTML Standard of course.) -->
diff --git a/testing/web-platform/tests/html/browsers/history/the-location-interface/location-valueof.html b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-valueof.html
new file mode 100644
index 000000000..978bbb63a
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/history/the-location-interface/location-valueof.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>Location valueOf</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(() => {
+ assert_equals(location.valueOf, Object.prototype.valueOf)
+ assert_equals(typeof location.valueOf.call(5), "object")
+ const prop = Object.getOwnPropertyDescriptor(location, "valueOf")
+ assert_false(prop.enumerable)
+ assert_false(prop.writable)
+ assert_false(prop.configurable)
+})
+</script>
diff --git a/toolkit/components/downloads/ApplicationReputation.cpp b/toolkit/components/downloads/ApplicationReputation.cpp
index 9fdc8a103..6adefbb8b 100644
--- a/toolkit/components/downloads/ApplicationReputation.cpp
+++ b/toolkit/components/downloads/ApplicationReputation.cpp
@@ -467,7 +467,7 @@ static const char16_t* kBinaryFileExtensions[] = {
u".isp", // IIS config
//u".isu", // InstallShield
u".jar", // Java
- u".jnlp", // Java
+ //u".jnlp", // Java
//u".job", // Windows
u".js", // JavaScript script
u".jse", // JScript
diff --git a/toolkit/components/passwordmgr/test/subtst_master_pass.html b/toolkit/components/passwordmgr/test/subtst_master_pass.html
index 14174726a..20211866a 100644
--- a/toolkit/components/passwordmgr/test/subtst_master_pass.html
+++ b/toolkit/components/passwordmgr/test/subtst_master_pass.html
@@ -2,6 +2,11 @@
This form triggers a MP and gets filled in.<br>
<form>
Username: <input type="text" id="userfield" name="u"><br>
-Password: <input type="password" id="passfield" name="p"
- oninput="parent.postMessage('filled', '*');"><br>
+Password: <input type="password" id="passfield" name="p"><br>
+<script>
+ // Only notify when we fill in the password field.
+ document.getElementById("passfield").addEventListener("input", function() {
+ parent.postMessage("filled", "*");
+ });
+</script>
</form>
diff --git a/toolkit/components/places/PlacesUtils.jsm b/toolkit/components/places/PlacesUtils.jsm
index 323fa41a1..5f6e81f18 100644
--- a/toolkit/components/places/PlacesUtils.jsm
+++ b/toolkit/components/places/PlacesUtils.jsm
@@ -1341,7 +1341,7 @@ this.PlacesUtils = {
* The container node to search through.
* @returns true if the node contains uri nodes, false otherwise.
*/
- hasChildURIs: function PU_hasChildURIs(aNode) {
+ hasChildURIs: function PU_hasChildURIs(aNode, aMultiple=false) {
if (!this.nodeIsContainer(aNode))
return false;
@@ -1357,11 +1357,14 @@ this.PlacesUtils = {
root.containerOpen = true;
}
+ let foundFirst = !aMultiple;
let found = false;
for (let i = 0; i < root.childCount && !found; i++) {
let child = root.getChild(i);
- if (this.nodeIsURI(child))
- found = true;
+ if (this.nodeIsURI(child)) {
+ found = foundFirst;
+ foundFirst = true;
+ }
}
if (!wasOpen) {
diff --git a/toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js b/toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js
index ecebce94a..3e2f88c21 100644
--- a/toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js
+++ b/toolkit/components/places/tests/unit/test_utils_getURLsForContainerNode.js
@@ -165,6 +165,7 @@ function check_uri_nodes(aQuery, aOptions, aExpectedURINodes) {
root.containerOpen = true;
var node = root.getChild(0);
do_check_eq(PU.hasChildURIs(node), aExpectedURINodes > 0);
+ do_check_eq(PU.hasChildURIs(node, true), aExpectedURINodes > 1);
do_check_eq(PU.getURLsForContainerNode(node).length, aExpectedURINodes);
root.containerOpen = false;
}
diff --git a/toolkit/components/search/nsSearchService.js b/toolkit/components/search/nsSearchService.js
index 19f4048b4..f6303bca1 100644
--- a/toolkit/components/search/nsSearchService.js
+++ b/toolkit/components/search/nsSearchService.js
@@ -780,6 +780,7 @@ EngineURL.prototype = {
}
var postData = null;
+ let postDataString = null;
if (this.method == "GET") {
// GET method requests have no post data, and append the encoded
// query string to the url...
@@ -787,6 +788,7 @@ EngineURL.prototype = {
url += "?";
url += dataString;
} else if (this.method == "POST") {
+ postDataString = dataString;
// POST method requests must wrap the encoded text in a MIME
// stream and supply that as POSTDATA.
var stringStream = Cc["@mozilla.org/io/string-input-stream;1"].
@@ -800,7 +802,7 @@ EngineURL.prototype = {
postData.setData(stringStream);
}
- return new Submission(makeURI(url), postData);
+ return new Submission(makeURI(url), postData, postDataString);
},
_getTermsParameterName: function SRCH_EURL__getTermsParameterName() {
@@ -2409,9 +2411,10 @@ Engine.prototype = {
};
// nsISearchSubmission
-function Submission(aURI, aPostData = null) {
+function Submission(aURI, aPostData = null, aPostDataString = null) {
this._uri = aURI;
this._postData = aPostData;
+ this._postDataString = aPostDataString;
}
Submission.prototype = {
get uri() {
@@ -2420,6 +2423,9 @@ Submission.prototype = {
get postData() {
return this._postData;
},
+ get postDataString() {
+ return this._postDataString;
+ },
QueryInterface: function SRCH_SUBM_QI(aIID) {
if (aIID.equals(Ci.nsISearchSubmission) ||
aIID.equals(Ci.nsISupports))
diff --git a/toolkit/components/telemetry/TelemetryEnvironment.jsm b/toolkit/components/telemetry/TelemetryEnvironment.jsm
index 295679ca4..391ea4bb4 100644
--- a/toolkit/components/telemetry/TelemetryEnvironment.jsm
+++ b/toolkit/components/telemetry/TelemetryEnvironment.jsm
@@ -196,7 +196,6 @@ const PREF_DISTRIBUTION_ID = "distribution.id";
const PREF_DISTRIBUTION_VERSION = "distribution.version";
const PREF_DISTRIBUTOR = "app.distributor";
const PREF_DISTRIBUTOR_CHANNEL = "app.distributor.channel";
-const PREF_HOTFIX_LASTVERSION = "extensions.hotfix.lastVersion";
const PREF_APP_PARTNER_BRANCH = "app.partner.";
const PREF_PARTNER_ID = "mozilla.partner.id";
const PREF_UPDATE_ENABLED = "app.update.enabled";
@@ -1050,7 +1049,6 @@ EnvironmentCache.prototype = {
vendor: Services.appinfo.vendor || null,
platformVersion: Services.appinfo.platformVersion || null,
xpcomAbi: Services.appinfo.XPCOMABI,
- hotfixVersion: Preferences.get(PREF_HOTFIX_LASTVERSION, null),
};
// Add |architecturesInBinary| only for Mac Universal builds.
diff --git a/toolkit/components/telemetry/docs/data/environment.rst b/toolkit/components/telemetry/docs/data/environment.rst
index ff0d204a4..0c259fa85 100644
--- a/toolkit/components/telemetry/docs/data/environment.rst
+++ b/toolkit/components/telemetry/docs/data/environment.rst
@@ -31,7 +31,6 @@ Structure:
vendor: <string>, // e.g. "Mozilla"
platformVersion: <string>, // e.g. "35.0"
xpcomAbi: <string>, // e.g. "x86-msvc"
- hotfixVersion: <string>, // e.g. "20141211.01"
},
settings: {
addonCompatibilityCheckEnabled: <bool>, // Whether application compatibility is respected for add-ons
diff --git a/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js b/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
index 35181272a..2518a80ba 100644
--- a/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
@@ -33,7 +33,6 @@ const PLATFORM_VERSION = "1.9.2";
const APP_VERSION = "1";
const APP_ID = "xpcshell@tests.mozilla.org";
const APP_NAME = "XPCShell";
-const APP_HOTFIX_VERSION = "2.3.4a";
const DISTRIBUTION_ID = "distributor-id";
const DISTRIBUTION_VERSION = "4.5.6b";
@@ -385,10 +384,8 @@ function checkBuildSection(data) {
Assert.equal(data.build[f], expectedInfo[f], f + " must have the correct value.");
}
- // Make sure architecture and hotfixVersion are in the environment.
+ // Make sure architecture is in the environment.
Assert.ok(checkString(data.build.architecture));
- Assert.ok(checkString(data.build.hotfixVersion));
- Assert.equal(data.build.hotfixVersion, APP_HOTFIX_VERSION);
if (gIsMac) {
let macUtils = Cc["@mozilla.org/xpcom/mac-utils;1"].getService(Ci.nsIMacUtils);
@@ -830,9 +827,6 @@ add_task(function* setup() {
gHttpServer.registerDirectory("/data/", do_get_cwd());
do_register_cleanup(() => gHttpServer.stop(() => {}));
- // Spoof the the hotfixVersion
- Preferences.set("extensions.hotfix.lastVersion", APP_HOTFIX_VERSION);
-
// Create the attribution data file, so that settings.attribution will exist.
// The attribution functionality only exists in Firefox.
if (AppConstants.MOZ_BUILD_APP == "browser") {
diff --git a/toolkit/content/aboutSupport.js b/toolkit/content/aboutSupport.js
index b1d7ab5f6..06470f966 100644
--- a/toolkit/content/aboutSupport.js
+++ b/toolkit/content/aboutSupport.js
@@ -40,6 +40,7 @@ var snapshotFormatters = {
$("application-box").textContent = data.name;
$("useragent-box").textContent = data.userAgent;
$("os-box").textContent = data.osVersion;
+ $("binary-box").textContent = Services.dirsvc.get("XREExeF", Ci.nsIFile).path;
$("supportLink").href = data.supportURL;
let version = AppConstants.MOZ_APP_VERSION_DISPLAY;
if (data.versionArch) {
@@ -52,28 +53,6 @@ var snapshotFormatters = {
if (data.updateChannel)
$("updatechannel-box").textContent = data.updateChannel;
- let statusText = stringBundle().GetStringFromName("multiProcessStatus.unknown");
-
- // Whitelist of known values with string descriptions:
- switch (data.autoStartStatus) {
- case 0:
- case 1:
- case 2:
- case 4:
- case 6:
- case 7:
- case 8:
- statusText = stringBundle().GetStringFromName("multiProcessStatus." + data.autoStartStatus);
- break;
-
- case 10:
- statusText = (Services.appinfo.OS == "Darwin" ? "OS X 10.6 - 10.8" : "Windows XP");
- break;
- }
-
- $("multiprocess-box").textContent = stringBundle().formatStringFromName("multiProcessWindows",
- [data.numRemoteWindows, data.numTotalWindows, statusText], 3);
-
$("safemode-box").textContent = data.safeMode;
},
diff --git a/toolkit/content/aboutSupport.xhtml b/toolkit/content/aboutSupport.xhtml
index 5eb64d437..fff86dff6 100644
--- a/toolkit/content/aboutSupport.xhtml
+++ b/toolkit/content/aboutSupport.xhtml
@@ -147,6 +147,15 @@
</td>
</tr>
+ <tr class="no-copy">
+ <th class="column">
+ &aboutSupport.appBasicsBinary;
+ </th>
+
+ <td id="binary-box">
+ </td>
+ </tr>
+
<tr id="profile-row" class="no-copy">
<th class="column">
#ifdef XP_WIN
@@ -227,15 +236,6 @@
<tr>
<th class="column">
- &aboutSupport.appBasicsMultiProcessSupport;
- </th>
-
- <td id="multiprocess-box">
- </td>
- </tr>
-
- <tr>
- <th class="column">
&aboutSupport.appBasicsSafeMode;
</th>
diff --git a/toolkit/locales/en-US/chrome/global/aboutSupport.dtd b/toolkit/locales/en-US/chrome/global/aboutSupport.dtd
index a0dd3531b..34db4e4c4 100644
--- a/toolkit/locales/en-US/chrome/global/aboutSupport.dtd
+++ b/toolkit/locales/en-US/chrome/global/aboutSupport.dtd
@@ -45,6 +45,7 @@ This is likely the same like id.heading in crashes.dtd. -->
<!ENTITY aboutSupport.appBasicsUpdateHistory "Update History">
<!ENTITY aboutSupport.appBasicsShowUpdateHistory "Show Update History">
+<!ENTITY aboutSupport.appBasicsBinary "Application Binary">
<!ENTITY aboutSupport.appBasicsProfileDir "Profile Directory">
<!-- LOCALIZATION NOTE (aboutSupport.appBasicsProfileDirWinMac):
This is the Windows- and Mac-specific variant of aboutSupport.appBasicsProfileDir.
@@ -63,8 +64,6 @@ Windows/Mac use the term "Folder" instead of "Directory" -->
<!ENTITY aboutSupport.appBasicsProfiles "Profiles">
-<!ENTITY aboutSupport.appBasicsMultiProcessSupport "Multiprocess Windows">
-
<!ENTITY aboutSupport.appBasicsSafeMode "Safe Mode">
<!ENTITY aboutSupport.showDir.label "Open Directory">
diff --git a/toolkit/locales/en-US/chrome/global/aboutSupport.properties b/toolkit/locales/en-US/chrome/global/aboutSupport.properties
index 564292e3d..be9ce5f33 100644
--- a/toolkit/locales/en-US/chrome/global/aboutSupport.properties
+++ b/toolkit/locales/en-US/chrome/global/aboutSupport.properties
@@ -99,23 +99,6 @@ gpuProcessKillButton = Terminate GPU Process
minLibVersions = Expected minimum version
loadedLibVersions = Version in use
-# LOCALIZATION NOTE %1$S and %2$S will be replaced with the number of remote and the total number
-# of windows, respectively, while %3$S will be replaced with one of the status strings below,
-# which contains a description of the multi-process preference and status.
-# Note: multiProcessStatus.3 doesn't exist because status=3 was deprecated.
-multiProcessWindows = %1$S/%2$S (%3$S)
-multiProcessStatus.0 = Enabled by user
-multiProcessStatus.1 = Enabled by default
-multiProcessStatus.2 = Disabled
-multiProcessStatus.4 = Disabled by accessibility tools
-multiProcessStatus.5 = Disabled by lack of graphics hardware acceleration on Mac OS X
-multiProcessStatus.6 = Disabled by unsupported text input
-multiProcessStatus.7 = Disabled by add-ons
-multiProcessStatus.8 = Disabled forcibly
-# No longer in use (bug 1296353) but we might bring this back.
-multiProcessStatus.9 = Disabled by graphics hardware acceleration on Windows XP
-multiProcessStatus.unknown = Unknown status
-
asyncPanZoom = Asynchronous Pan/Zoom
apzNone = none
wheelEnabled = wheel input enabled
diff --git a/toolkit/locales/l10n.mk b/toolkit/locales/l10n.mk
index 05bda0b56..f1825438d 100644
--- a/toolkit/locales/l10n.mk
+++ b/toolkit/locales/l10n.mk
@@ -112,13 +112,13 @@ repackage-zip: UNPACKAGE='$(ZIP_IN)'
repackage-zip: libs-$(AB_CD)
# call a hook for apps to put their uninstall helper.exe into the package
$(UNINSTALLER_PACKAGE_HOOK)
- $(PYTHON) $(MOZILLA_DIR)/toolkit/mozapps/installer/l10n-repack.py $(STAGEDIST) $(DIST)/xpi-stage/locale-$(AB_CD) \
+ $(PYTHON) $(MOZILLA_DIR)/toolkit/mozapps/installer/l10n-repack.py '$(STAGEDIST)' $(DIST)/xpi-stage/locale-$(AB_CD) \
$(MOZ_PKG_EXTRAL10N) \
$(if $(filter omni,$(MOZ_PACKAGER_FORMAT)),$(if $(NON_OMNIJAR_FILES),--non-resource $(NON_OMNIJAR_FILES)))
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
ifneq (en,$(LPROJ_ROOT))
- mv $(STAGEDIST)/en.lproj $(STAGEDIST)/$(LPROJ_ROOT).lproj
+ mv '$(STAGEDIST)'/en.lproj '$(STAGEDIST)'/$(LPROJ_ROOT).lproj
endif
endif
@@ -133,7 +133,7 @@ endif
# packaging done, undo l10n stuff
ifneq (en,$(LPROJ_ROOT))
ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
- mv $(STAGEDIST)/$(LPROJ_ROOT).lproj $(STAGEDIST)/en.lproj
+ mv '$(STAGEDIST)'/$(LPROJ_ROOT).lproj '$(STAGEDIST)'/en.lproj
endif
endif
$(NSINSTALL) -D $(DIST)/$(PKG_PATH)
@@ -197,7 +197,7 @@ endif
generate-snippet-%:
$(PYTHON) $(MOZILLA_DIR)/tools/update-packaging/generatesnippet.py \
--mar-path=$(ABS_DIST)/update \
- --application-ini-file=$(STAGEDIST)/application.ini \
+ --application-ini-file='$(STAGEDIST)'/application.ini \
--locale=$* \
--product=$(MOZ_PKG_APPNAME) \
--platform=$(MOZ_PKG_PLATFORM) \
diff --git a/toolkit/modules/AppConstants.jsm b/toolkit/modules/AppConstants.jsm
index ae0eea1c4..40ceb15ba 100644
--- a/toolkit/modules/AppConstants.jsm
+++ b/toolkit/modules/AppConstants.jsm
@@ -60,13 +60,6 @@ this.AppConstants = Object.freeze({
false,
#endif
- MOZ_DEV_EDITION:
-#ifdef MOZ_DEV_EDITION
- true,
-#else
- false,
-#endif
-
MOZ_SERVICES_HEALTHREPORT:
#ifdef MOZ_SERVICES_HEALTHREPORT
true,
diff --git a/toolkit/modules/Troubleshoot.jsm b/toolkit/modules/Troubleshoot.jsm
index 8d84eec8c..6ee6cb54e 100644
--- a/toolkit/modules/Troubleshoot.jsm
+++ b/toolkit/modules/Troubleshoot.jsm
@@ -220,18 +220,6 @@ var dataProviders = {
}
}
- data.remoteAutoStart = Services.appinfo.browserTabsRemoteAutostart;
-
- try {
- let e10sStatus = Cc["@mozilla.org/supports-PRUint64;1"]
- .createInstance(Ci.nsISupportsPRUint64);
- let appinfo = Services.appinfo.QueryInterface(Ci.nsIObserver);
- appinfo.observe(e10sStatus, "getE10SBlocked", "");
- data.autoStartStatus = e10sStatus.data;
- } catch (e) {
- data.autoStartStatus = -1;
- }
-
done(data);
},
diff --git a/toolkit/modules/tests/browser/browser_Troubleshoot.js b/toolkit/modules/tests/browser/browser_Troubleshoot.js
index 4124be1fb..ebc4de1f9 100644
--- a/toolkit/modules/tests/browser/browser_Troubleshoot.js
+++ b/toolkit/modules/tests/browser/browser_Troubleshoot.js
@@ -126,13 +126,6 @@ const SNAPSHOT_SCHEMA = {
supportURL: {
type: "string",
},
- remoteAutoStart: {
- type: "boolean",
- required: true,
- },
- autoStartStatus: {
- type: "number",
- },
numTotalWindows: {
type: "number",
},
diff --git a/toolkit/mozapps/extensions/content/extensions.js b/toolkit/mozapps/extensions/content/extensions.js
index 1e185f879..9576e9a3b 100644
--- a/toolkit/mozapps/extensions/content/extensions.js
+++ b/toolkit/mozapps/extensions/content/extensions.js
@@ -2153,7 +2153,7 @@ var gDiscoverView = {
Ci.nsIWebProgressListener.STATE_IS_REQUEST |
Ci.nsIWebProgressListener.STATE_TRANSFERRING;
// Once transferring begins show the content
- if (aStateFlags & transferStart)
+ if ((aStateFlags & transferStart) === transferStart)
this.node.selectedPanel = this._browser;
// Only care about the network events
diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk
index 71a956aa4..dc9324597 100644
--- a/toolkit/mozapps/installer/packager.mk
+++ b/toolkit/mozapps/installer/packager.mk
@@ -52,7 +52,7 @@ stage-package: $(MOZ_PKG_MANIFEST) $(MOZ_PKG_MANIFEST_DEPS)
$(if $(OPTIMIZEJARS),--optimizejars) \
$(if $(DISABLE_JAR_COMPRESSION),--disable-compression) \
$(addprefix --unify ,$(UNIFY_DIST)) \
- $(MOZ_PKG_MANIFEST) $(DIST) $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)$(if $(MOZ_PKG_MANIFEST),,$(_BINPATH)) \
+ $(MOZ_PKG_MANIFEST) '$(DIST)' '$(DIST)'/$(STAGEPATH)$(MOZ_PKG_DIR)$(if $(MOZ_PKG_MANIFEST),,$(_BINPATH)) \
$(if $(filter omni,$(MOZ_PACKAGER_FORMAT)),$(if $(NON_OMNIJAR_FILES),--non-resource $(NON_OMNIJAR_FILES)))
$(PYTHON) $(MOZILLA_DIR)/toolkit/mozapps/installer/find-dupes.py $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)
ifdef MOZ_PACKAGE_JSSHELL
diff --git a/toolkit/mozapps/installer/upload-files.mk b/toolkit/mozapps/installer/upload-files.mk
index 25103ff37..40af34a59 100644
--- a/toolkit/mozapps/installer/upload-files.mk
+++ b/toolkit/mozapps/installer/upload-files.mk
@@ -286,18 +286,18 @@ endif
ifdef MOZ_SIGN_PREPARED_PACKAGE_CMD
ifeq (Darwin, $(OS_ARCH))
MAKE_PACKAGE = $(or $(call MAKE_SIGN_EME_VOUCHER,$(STAGEPATH)$(MOZ_PKG_DIR)$(_BINPATH)/$(MOZ_CHILD_PROCESS_NAME).app/Contents/MacOS,$(STAGEPATH)$(MOZ_PKG_DIR)$(_RESPATH)),true) \
- && (cd $(STAGEPATH)$(MOZ_PKG_DIR)$(_RESPATH) && $(CREATE_PRECOMPLETE_CMD)) \
- && cd ./$(PKG_DMG_SOURCE) && $(MOZ_SIGN_PREPARED_PACKAGE_CMD) $(MOZ_MACBUNDLE_NAME) \
+ && (cd '$(STAGEPATH)$(MOZ_PKG_DIR)$(_RESPATH)' && $(CREATE_PRECOMPLETE_CMD)) \
+ && cd ./$(PKG_DMG_SOURCE) && $(MOZ_SIGN_PREPARED_PACKAGE_CMD) '$(MOZ_MACBUNDLE_NAME)' \
&& cd $(PACKAGE_BASE_DIR) && $(INNER_MAKE_PACKAGE)
else
MAKE_PACKAGE = $(MOZ_SIGN_PREPARED_PACKAGE_CMD) $(MOZ_PKG_DIR) \
&& $(or $(call MAKE_SIGN_EME_VOUCHER,$(STAGEPATH)$(MOZ_PKG_DIR)),true) \
- && (cd $(STAGEPATH)$(MOZ_PKG_DIR)$(_RESPATH) && $(CREATE_PRECOMPLETE_CMD)) \
+ && (cd '$(STAGEPATH)$(MOZ_PKG_DIR)$(_RESPATH)' && $(CREATE_PRECOMPLETE_CMD)) \
&& $(INNER_MAKE_PACKAGE)
endif #Darwin
else
- MAKE_PACKAGE = (cd $(STAGEPATH)$(MOZ_PKG_DIR)$(_RESPATH) && $(CREATE_PRECOMPLETE_CMD)) && $(INNER_MAKE_PACKAGE)
+ MAKE_PACKAGE = (cd '$(STAGEPATH)$(MOZ_PKG_DIR)$(_RESPATH)' && $(CREATE_PRECOMPLETE_CMD)) && $(INNER_MAKE_PACKAGE)
endif
ifdef MOZ_SIGN_PACKAGE_CMD
diff --git a/toolkit/mozapps/installer/windows/nsis/common.nsh b/toolkit/mozapps/installer/windows/nsis/common.nsh
index 846718dab..36e228797 100755
--- a/toolkit/mozapps/installer/windows/nsis/common.nsh
+++ b/toolkit/mozapps/installer/windows/nsis/common.nsh
@@ -5218,21 +5218,6 @@
StrCpy $AddStartMenuSC "1"
${EndIf}
- ReadINIStr $R8 $R7 "Install" "TaskbarShortcut"
- ${If} $R8 == "false"
- StrCpy $AddTaskbarSC "0"
- ${Else}
- StrCpy $AddTaskbarSC "1"
- ${EndIf}
-
- ReadINIStr $R8 $R7 "Install" "MaintenanceService"
- ${If} $R8 == "false"
- StrCpy $InstallMaintenanceService "0"
- ${Else}
- ; Installing the service always requires elevation.
- ${ElevateUAC}
- ${EndIf}
-
!ifndef NO_STARTMENU_DIR
ReadINIStr $R8 $R7 "Install" "StartMenuDirectoryName"
${If} $R8 != ""
diff --git a/toolkit/profile/nsToolkitProfileService.cpp b/toolkit/profile/nsToolkitProfileService.cpp
index 38b3a37f1..e818d27e6 100644
--- a/toolkit/profile/nsToolkitProfileService.cpp
+++ b/toolkit/profile/nsToolkitProfileService.cpp
@@ -425,22 +425,6 @@ nsToolkitProfileService::Init()
nsToolkitProfile* currentProfile = nullptr;
-#ifdef MOZ_DEV_EDITION
- nsCOMPtr<nsIFile> ignoreSeparateProfile;
- rv = mAppData->Clone(getter_AddRefs(ignoreSeparateProfile));
- if (NS_FAILED(rv))
- return rv;
-
- rv = ignoreSeparateProfile->AppendNative(NS_LITERAL_CSTRING("ignore-dev-edition-profile"));
- if (NS_FAILED(rv))
- return rv;
-
- bool shouldIgnoreSeparateProfile;
- rv = ignoreSeparateProfile->Exists(&shouldIgnoreSeparateProfile);
- if (NS_FAILED(rv))
- return rv;
-#endif
-
unsigned int c = 0;
bool foundAuroraDefault = false;
for (c = 0; true; ++c) {
@@ -501,35 +485,8 @@ nsToolkitProfileService::Init()
mChosen = currentProfile;
this->SetDefaultProfile(currentProfile);
}
-#ifdef MOZ_DEV_EDITION
- // Use the dev-edition-default profile if this is an Aurora build and
- // ignore-dev-edition-profile is not present.
- if (name.EqualsLiteral("dev-edition-default") && !shouldIgnoreSeparateProfile) {
- mChosen = currentProfile;
- foundAuroraDefault = true;
- }
-#endif
}
-#ifdef MOZ_DEV_EDITION
- if (!foundAuroraDefault && !shouldIgnoreSeparateProfile) {
- // If a single profile exists, it may not be already marked as default.
- // Do it now to avoid problems when we create the dev-edition-default profile.
- if (!mChosen && mFirst && !mFirst->mNext)
- this->SetDefaultProfile(mFirst);
-
- // Create a default profile for aurora, if none was found.
- nsCOMPtr<nsIToolkitProfile> profile;
- rv = CreateProfile(nullptr,
- NS_LITERAL_CSTRING("dev-edition-default"),
- getter_AddRefs(profile));
- if (NS_FAILED(rv)) return rv;
- mChosen = profile;
- rv = Flush();
- if (NS_FAILED(rv)) return rv;
- }
-#endif
-
if (!mChosen && mFirst && !mFirst->mNext) // only one profile
mChosen = mFirst;
return NS_OK;
diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
index 4ae70fd43..035d35a9d 100644
--- a/toolkit/xre/nsAppRunner.cpp
+++ b/toolkit/xre/nsAppRunner.cpp
@@ -2173,9 +2173,9 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n
return ShowProfileManager(aProfileSvc, aNative);
}
-#ifndef MOZ_DEV_EDITION
- // If the only existing profile is the dev-edition-profile and this is not
- // Developer Edition, then no valid profiles were found.
+ // Dev edition leftovers:
+ // If the only existing profile is the dev-edition-profile,
+ // then no valid profiles were found.
if (count == 1) {
nsCOMPtr<nsIToolkitProfile> deProfile;
// GetSelectedProfile will auto-select the only profile if there's just one
@@ -2186,7 +2186,6 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n
count = 0;
}
}
-#endif
if (!count) {
gDoMigration = true;
@@ -2195,25 +2194,15 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n
// create a default profile
nsCOMPtr<nsIToolkitProfile> profile;
nsresult rv = aProfileSvc->CreateProfile(nullptr, // choose a default dir for us
-#ifdef MOZ_DEV_EDITION
- NS_LITERAL_CSTRING("dev-edition-default"),
-#else
NS_LITERAL_CSTRING("default"),
-#endif
getter_AddRefs(profile));
if (NS_SUCCEEDED(rv)) {
-#ifndef MOZ_DEV_EDITION
aProfileSvc->SetDefaultProfile(profile);
-#endif
aProfileSvc->Flush();
rv = profile->Lock(nullptr, aResult);
if (NS_SUCCEEDED(rv)) {
if (aProfileName)
-#ifdef MOZ_DEV_EDITION
- aProfileName->AssignLiteral("dev-edition-default");
-#else
aProfileName->AssignLiteral("default");
-#endif
return NS_OK;
}
}
@@ -4232,9 +4221,6 @@ PRTimeToSeconds(PRTime t_usec)
}
#endif
-const char* kForceEnableE10sPref = "browser.tabs.remote.force-enable";
-const char* kForceDisableE10sPref = "browser.tabs.remote.force-disable";
-
uint32_t
MultiprocessBlockPolicy() {
if (gMultiprocessBlockPolicyInitialized) {
@@ -4242,50 +4228,6 @@ MultiprocessBlockPolicy() {
}
gMultiprocessBlockPolicyInitialized = true;
- /**
- * Avoids enabling e10s if there are add-ons installed.
- */
- bool addonsCanDisable = Preferences::GetBool("extensions.e10sBlocksEnabling", false);
- bool disabledByAddons = Preferences::GetBool("extensions.e10sBlockedByAddons", false);
-
- if (addonsCanDisable && disabledByAddons) {
- gMultiprocessBlockPolicy = kE10sDisabledForAddons;
- }
-
-#if defined(XP_WIN)
- bool disabledForA11y = false;
- /**
- * Avoids enabling e10s if accessibility has recently loaded. Performs the
- * following checks:
- * 1) Checks a pref indicating if a11y loaded in the last session. This pref
- * is set in nsBrowserGlue.js. If a11y was loaded in the last session we
- * do not enable e10s in this session.
- * 2) Accessibility stores a last run date (PR_IntervalNow) when it is
- * initialized (see nsBaseWidget.cpp). We check if this pref exists and
- * compare it to now. If a11y hasn't run in an extended period of time or
- * if the date pref does not exist we load e10s.
- */
- disabledForA11y = Preferences::GetBool(kAccessibilityLoadedLastSessionPref, false);
- if (!disabledForA11y &&
- Preferences::HasUserValue(kAccessibilityLastRunDatePref)) {
- #define ONE_WEEK_IN_SECONDS (60*60*24*7)
- uint32_t a11yRunDate = Preferences::GetInt(kAccessibilityLastRunDatePref, 0);
- MOZ_ASSERT(0 != a11yRunDate);
- // If a11y hasn't run for a period of time, clear the pref and load e10s
- uint32_t now = PRTimeToSeconds(PR_Now());
- uint32_t difference = now - a11yRunDate;
- if (difference > ONE_WEEK_IN_SECONDS || !a11yRunDate) {
- Preferences::ClearUser(kAccessibilityLastRunDatePref);
- } else {
- disabledForA11y = true;
- }
- }
-
- if (disabledForA11y) {
- gMultiprocessBlockPolicy = kE10sDisabledForAccessibility;
- }
-#endif
-
// We do not support E10S, block by policy.
gMultiprocessBlockPolicy = kE10sForceDisabled;
@@ -4300,46 +4242,20 @@ mozilla::BrowserTabsRemoteAutostart()
}
gBrowserTabsRemoteAutostartInitialized = true;
- // If we're in the content process, we are running E10S.
- if (XRE_IsContentProcess()) {
- gBrowserTabsRemoteAutostart = true;
- return gBrowserTabsRemoteAutostart;
- }
-
bool optInPref = Preferences::GetBool("browser.tabs.remote.autostart", false);
bool trialPref = Preferences::GetBool("browser.tabs.remote.autostart.2", false);
bool prefEnabled = optInPref || trialPref;
int status;
- if (optInPref) {
- status = kE10sEnabledByUser;
- } else if (trialPref) {
- status = kE10sEnabledByDefault;
- } else {
- status = kE10sDisabledByUser;
- }
if (prefEnabled) {
uint32_t blockPolicy = MultiprocessBlockPolicy();
if (blockPolicy != 0) {
status = blockPolicy;
} else {
- gBrowserTabsRemoteAutostart = true;
+ MOZ_CRASH("e10s force enabled bypassing policy -- unsupported configuration");
}
- }
-
- // Uber override pref for manual testing purposes
- if (Preferences::GetBool(kForceEnableE10sPref, false)) {
- gBrowserTabsRemoteAutostart = true;
- prefEnabled = true;
- status = kE10sEnabledByUser;
- }
-
- // Uber override pref for emergency blocking
- if (gBrowserTabsRemoteAutostart &&
- (Preferences::GetBool(kForceDisableE10sPref, false) ||
- EnvHasValue("MOZ_FORCE_DISABLE_E10S"))) {
- gBrowserTabsRemoteAutostart = false;
- status = kE10sForceDisabled;
+ } else {
+ status = kE10sDisabledByUser;
}
gBrowserTabsRemoteStatus = status;
diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/rules/import-browserjs-globals.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/rules/import-browserjs-globals.js
index 00a48f359..e449931bd 100644
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/rules/import-browserjs-globals.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/rules/import-browserjs-globals.js
@@ -32,7 +32,6 @@ const SCRIPTS = [
"browser/base/content/browser-addons.js",
"browser/base/content/browser-ctrlTab.js",
"browser/base/content/browser-customization.js",
- "browser/base/content/browser-devedition.js",
"browser/base/content/browser-feeds.js",
"browser/base/content/browser-fullScreenAndPointerLock.js",
"browser/base/content/browser-fullZoom.js",
diff --git a/tools/update-packaging/common.sh b/tools/update-packaging/common.sh
index ec9478035..24f1ca6eb 100755
--- a/tools/update-packaging/common.sh
+++ b/tools/update-packaging/common.sh
@@ -60,15 +60,15 @@ make_add_instruction() {
# before performing this add instruction.
testdir=$(echo "$f" | sed 's/\(.*distribution\/extensions\/[^\/]*\)\/.*/\1/')
notice " add-if \"$testdir\" \"$f\""
- echo "add-if \"$testdir\" \"$f\"" >> $filev2
+ echo "add-if \"$testdir\" \"$f\"" >> "$filev2"
if [ ! $filev3 = "" ]; then
- echo "add-if \"$testdir\" \"$f\"" >> $filev3
+ echo "add-if \"$testdir\" \"$f\"" >> "$filev3"
fi
else
notice " add \"$f\"$forced"
- echo "add \"$f\"" >> $filev2
- if [ ! $filev3 = "" ]; then
- echo "add \"$f\"" >> $filev3
+ echo "add \"$f\"" >> "$filev2"
+ if [ ! "$filev3" = "" ]; then
+ echo "add \"$f\"" >> "$filev3"
fi
fi
}
@@ -100,7 +100,7 @@ make_add_if_not_instruction() {
filev3="$2"
notice " add-if-not \"$f\" \"$f\""
- echo "add-if-not \"$f\" \"$f\"" >> $filev3
+ echo "add-if-not \"$f\" \"$f\"" >> "$filev3"
}
make_patch_instruction() {
@@ -114,12 +114,12 @@ make_patch_instruction() {
# before performing this add instruction.
testdir=$(echo "$f" | sed 's/\(.*distribution\/extensions\/[^\/]*\)\/.*/\1/')
notice " patch-if \"$testdir\" \"$f.patch\" \"$f\""
- echo "patch-if \"$testdir\" \"$f.patch\" \"$f\"" >> $filev2
- echo "patch-if \"$testdir\" \"$f.patch\" \"$f\"" >> $filev3
+ echo "patch-if \"$testdir\" \"$f.patch\" \"$f\"" >> "$filev2"
+ echo "patch-if \"$testdir\" \"$f.patch\" \"$f\"" >> "$filev3"
else
notice " patch \"$f.patch\" \"$f\""
- echo "patch \"$f.patch\" \"$f\"" >> $filev2
- echo "patch \"$f.patch\" \"$f\"" >> $filev3
+ echo "patch \"$f.patch\" \"$f\"" >> "$filev2"
+ echo "patch \"$f.patch\" \"$f\"" >> "$filev3"
fi
}
@@ -148,18 +148,18 @@ append_remove_instructions() {
if [ ! $(echo "$f" | grep -c '^#') = 1 ]; then
if [ $(echo "$f" | grep -c '\/$') = 1 ]; then
notice " rmdir \"$f\""
- echo "rmdir \"$f\"" >> $filev2
- echo "rmdir \"$f\"" >> $filev3
+ echo "rmdir \"$f\"" >> "$filev2"
+ echo "rmdir \"$f\"" >> "$filev3"
elif [ $(echo "$f" | grep -c '\/\*$') = 1 ]; then
# Remove the *
f=$(echo "$f" | sed -e 's:\*$::')
notice " rmrfdir \"$f\""
- echo "rmrfdir \"$f\"" >> $filev2
- echo "rmrfdir \"$f\"" >> $filev3
+ echo "rmrfdir \"$f\"" >> "$filev2"
+ echo "rmrfdir \"$f\"" >> "$filev3"
else
notice " remove \"$f\""
- echo "remove \"$f\"" >> $filev2
- echo "remove \"$f\"" >> $filev3
+ echo "remove \"$f\"" >> "$filev2"
+ echo "remove \"$f\"" >> "$filev3"
fi
fi
fi
diff --git a/tools/update-packaging/make_full_update.sh b/tools/update-packaging/make_full_update.sh
index f0466144d..ba1404474 100755
--- a/tools/update-packaging/make_full_update.sh
+++ b/tools/update-packaging/make_full_update.sh
@@ -67,13 +67,13 @@ list_files files
popd
# Add the type of update to the beginning of the update manifests.
-> $updatemanifestv2
-> $updatemanifestv3
+> "$updatemanifestv2"
+> "$updatemanifestv3"
notice ""
notice "Adding type instruction to update manifests"
notice " type complete"
-echo "type \"complete\"" >> $updatemanifestv2
-echo "type \"complete\"" >> $updatemanifestv3
+echo "type \"complete\"" >> "$updatemanifestv2"
+echo "type \"complete\"" >> "$updatemanifestv3"
notice ""
notice "Adding file add instructions to update manifests"
diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
index 172cb4444..05d8bb0f0 100644
--- a/widget/gtk/nsFilePicker.cpp
+++ b/widget/gtk/nsFilePicker.cpp
@@ -23,6 +23,7 @@
#include "nsNetUtil.h"
#include "nsReadableUtils.h"
#include "mozcontainer.h"
+#include "mozilla/Preferences.h"
#include "nsFilePicker.h"
@@ -175,6 +176,7 @@ nsFilePicker::nsFilePicker()
, mFileChooserDelegate(nullptr)
#endif
{
+ mUseNativeFileChooser = Preferences::GetBool("widget.allow-gtk-native-file-chooser", false);
}
nsFilePicker::~nsFilePicker()
@@ -197,7 +199,7 @@ ReadMultipleFiles(gpointer filename, gpointer array)
}
void
-nsFilePicker::ReadValuesFromFileChooser(GtkWidget *file_chooser)
+nsFilePicker::ReadValuesFromFileChooser(void *file_chooser)
{
mFiles.Clear();
@@ -389,19 +391,10 @@ nsFilePicker::Open(nsIFilePickerShownCallback *aCallback)
if (!mOkButtonLabel.IsEmpty()) {
accept_button = buttonLabel.get();
} else {
- accept_button = (action == GTK_FILE_CHOOSER_ACTION_SAVE) ?
- GTK_STOCK_SAVE : GTK_STOCK_OPEN;
+ accept_button = nullptr;
}
- GtkWidget *file_chooser =
- gtk_file_chooser_dialog_new(title, parent_widget, action,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- accept_button, GTK_RESPONSE_ACCEPT,
- nullptr);
- gtk_dialog_set_alternative_button_order(GTK_DIALOG(file_chooser),
- GTK_RESPONSE_ACCEPT,
- GTK_RESPONSE_CANCEL,
- -1);
+ void *file_chooser = GtkFileChooserNew(title.get(), parent_widget, action, accept_button);
if (mAllowURLs) {
gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(file_chooser), FALSE);
}
@@ -412,11 +405,7 @@ nsFilePicker::Open(nsIFilePickerShownCallback *aCallback)
g_signal_connect(file_chooser, "update-preview", G_CALLBACK(UpdateFilePreviewWidget), img_preview);
}
- GtkWindow *window = GTK_WINDOW(file_chooser);
- gtk_window_set_modal(window, TRUE);
- if (parent_widget) {
- gtk_window_set_destroy_with_parent(window, TRUE);
- }
+ GtkFileChooserSetModal(file_chooser, parent_widget, TRUE);
NS_ConvertUTF16toUTF8 defaultName(mDefault);
switch (mMode) {
@@ -454,18 +443,21 @@ nsFilePicker::Open(nsIFilePickerShownCallback *aCallback)
// Otherwise, if our dialog gets destroyed, we'll lose the dialog's
// delegate by the time this gets processed in the event loop.
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=1166741
- GtkDialog *dialog = GTK_DIALOG(file_chooser);
- GtkContainer *area = GTK_CONTAINER(gtk_dialog_get_content_area(dialog));
- gtk_container_forall(area, [](GtkWidget *widget,
- gpointer data) {
- if (GTK_IS_FILE_CHOOSER_WIDGET(widget)) {
- auto result = static_cast<GtkFileChooserWidget**>(data);
- *result = GTK_FILE_CHOOSER_WIDGET(widget);
- }
- }, &mFileChooserDelegate);
-
- if (mFileChooserDelegate)
- g_object_ref(mFileChooserDelegate);
+ if (GTK_IS_DIALOG(file_chooser)) {
+ GtkDialog *dialog = GTK_DIALOG(file_chooser);
+ GtkContainer *area = GTK_CONTAINER(gtk_dialog_get_content_area(dialog));
+ gtk_container_forall(area, [](GtkWidget *widget,
+ gpointer data) {
+ if (GTK_IS_FILE_CHOOSER_WIDGET(widget)) {
+ auto result = static_cast<GtkFileChooserWidget**>(data);
+ *result = GTK_FILE_CHOOSER_WIDGET(widget);
+ }
+ }, &mFileChooserDelegate);
+
+ if (mFileChooserDelegate) {
+ g_object_ref(mFileChooserDelegate);
+ }
+ }
#endif
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(file_chooser),
@@ -473,7 +465,9 @@ nsFilePicker::Open(nsIFilePickerShownCallback *aCallback)
}
}
- gtk_dialog_set_default_response(GTK_DIALOG(file_chooser), GTK_RESPONSE_ACCEPT);
+ if (GTK_IS_DIALOG(file_chooser)) {
+ gtk_dialog_set_default_response(GTK_DIALOG(file_chooser), GTK_RESPONSE_ACCEPT);
+ }
int32_t count = mFilters.Length();
for (int32_t i = 0; i < count; ++i) {
@@ -517,14 +511,13 @@ nsFilePicker::Open(nsIFilePickerShownCallback *aCallback)
mCallback = aCallback;
NS_ADDREF_THIS();
g_signal_connect(file_chooser, "response", G_CALLBACK(OnResponse), this);
- g_signal_connect(file_chooser, "destroy", G_CALLBACK(OnDestroy), this);
- gtk_widget_show(file_chooser);
+ GtkFileChooserShow(file_chooser);
return NS_OK;
}
/* static */ void
-nsFilePicker::OnResponse(GtkWidget* file_chooser, gint response_id,
+nsFilePicker::OnResponse(void* file_chooser, gint response_id,
gpointer user_data)
{
static_cast<nsFilePicker*>(user_data)->
@@ -539,7 +532,7 @@ nsFilePicker::OnDestroy(GtkWidget* file_chooser, gpointer user_data)
}
void
-nsFilePicker::Done(GtkWidget* file_chooser, gint response)
+nsFilePicker::Done(void* file_chooser, gint response)
{
mRunning = false;
@@ -583,7 +576,7 @@ nsFilePicker::Done(GtkWidget* file_chooser, gint response)
// requests that any remaining references be released, but the reference
// count will not be decremented again if GtkWindow's reference has already
// been released.
- gtk_widget_destroy(file_chooser);
+ GtkFileChooserDestroy(file_chooser);
#if (MOZ_WIDGET_GTK == 3)
if (mFileChooserDelegate) {
@@ -608,3 +601,73 @@ nsFilePicker::Done(GtkWidget* file_chooser, gint response)
}
NS_RELEASE_THIS();
}
+
+// All below functions available as of GTK 3.20+
+
+void *
+nsFilePicker::GtkFileChooserNew(
+ const gchar *title, GtkWindow *parent,
+ GtkFileChooserAction action,
+ const gchar *accept_label)
+{
+ static auto sGtkFileChooserNativeNewPtr = (void * (*)(
+ const gchar *, GtkWindow *,
+ GtkFileChooserAction,
+ const gchar *, const gchar *))
+ dlsym(RTLD_DEFAULT, "gtk_file_chooser_native_new");
+ if (mUseNativeFileChooser && sGtkFileChooserNativeNewPtr != nullptr) {
+ return (*sGtkFileChooserNativeNewPtr)(title, parent, action, accept_label, nullptr);
+ }
+ if (accept_label == nullptr) {
+ accept_label = (action == GTK_FILE_CHOOSER_ACTION_SAVE)
+ ? GTK_STOCK_SAVE : GTK_STOCK_OPEN;
+ }
+ GtkWidget *file_chooser = gtk_file_chooser_dialog_new(title, parent, action,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ accept_label, GTK_RESPONSE_ACCEPT, nullptr);
+ gtk_dialog_set_alternative_button_order(GTK_DIALOG(file_chooser),
+ GTK_RESPONSE_ACCEPT, GTK_RESPONSE_CANCEL, -1);
+ return file_chooser;
+}
+
+void
+nsFilePicker::GtkFileChooserShow(void *file_chooser)
+{
+ static auto sGtkNativeDialogShowPtr = (void (*)(void *))
+ dlsym(RTLD_DEFAULT, "gtk_native_dialog_show");
+ if (mUseNativeFileChooser && sGtkNativeDialogShowPtr != nullptr) {
+ (*sGtkNativeDialogShowPtr)(file_chooser);
+ } else {
+ g_signal_connect(file_chooser, "destroy", G_CALLBACK(OnDestroy), this);
+ gtk_widget_show(GTK_WIDGET(file_chooser));
+ }
+}
+
+void
+nsFilePicker::GtkFileChooserDestroy(void *file_chooser)
+{
+ static auto sGtkNativeDialogDestroyPtr = (void (*)(void *))
+ dlsym(RTLD_DEFAULT, "gtk_native_dialog_destroy");
+ if (mUseNativeFileChooser && sGtkNativeDialogDestroyPtr != nullptr) {
+ (*sGtkNativeDialogDestroyPtr)(file_chooser);
+ } else {
+ gtk_widget_destroy(GTK_WIDGET(file_chooser));
+ }
+}
+
+void
+nsFilePicker::GtkFileChooserSetModal(void *file_chooser,
+ GtkWindow *parent_widget, gboolean modal)
+{
+ static auto sGtkNativeDialogSetModalPtr = (void (*)(void *, gboolean))
+ dlsym(RTLD_DEFAULT, "gtk_native_dialog_set_modal");
+ if (mUseNativeFileChooser && sGtkNativeDialogSetModalPtr != nullptr) {
+ (*sGtkNativeDialogSetModalPtr)(file_chooser, modal);
+ } else {
+ GtkWindow *window = GTK_WINDOW(file_chooser);
+ gtk_window_set_modal(window, modal);
+ if (parent_widget != nullptr) {
+ gtk_window_set_destroy_with_parent(window, modal);
+ }
+ }
+}
diff --git a/widget/gtk/nsFilePicker.h b/widget/gtk/nsFilePicker.h
index 2b5042098..e0a1d541d 100644
--- a/widget/gtk/nsFilePicker.h
+++ b/widget/gtk/nsFilePicker.h
@@ -48,12 +48,12 @@ public:
protected:
virtual ~nsFilePicker();
- void ReadValuesFromFileChooser(GtkWidget *file_chooser);
+ void ReadValuesFromFileChooser(void *file_chooser);
- static void OnResponse(GtkWidget* dialog, gint response_id,
+ static void OnResponse(void* dialog, gint response_id,
gpointer user_data);
- static void OnDestroy(GtkWidget* dialog, gpointer user_data);
- void Done(GtkWidget* dialog, gint response_id);
+ static void OnDestroy(GtkWidget* file_chooser, gpointer user_data);
+ void Done(void* file_chooser, gint response_id);
nsCOMPtr<nsIWidget> mParentWidget;
nsCOMPtr<nsIFilePickerShownCallback> mCallback;
@@ -74,9 +74,19 @@ protected:
private:
static nsIFile *mPrevDisplayDirectory;
+ void *GtkFileChooserNew(
+ const gchar *title, GtkWindow *parent,
+ GtkFileChooserAction action,
+ const gchar *accept_label);
+ void GtkFileChooserShow(void *file_chooser);
+ void GtkFileChooserDestroy(void *file_chooser);
+ void GtkFileChooserSetModal(void *file_chooser, GtkWindow* parent_widget,
+ gboolean modal);
+
#if (MOZ_WIDGET_GTK == 3)
GtkFileChooserWidget *mFileChooserDelegate;
#endif
+ bool mUseNativeFileChooser;
};
#endif
diff --git a/xpcom/io/nsLocalFileWin.cpp b/xpcom/io/nsLocalFileWin.cpp
index 23c283f95..e73e15950 100644
--- a/xpcom/io/nsLocalFileWin.cpp
+++ b/xpcom/io/nsLocalFileWin.cpp
@@ -3034,7 +3034,6 @@ nsLocalFile::IsExecutable(bool* aResult)
"ins",
"isp",
"jar", // java application bundle
- "jnlp", // java web start
"js",
"jse",
"lnk",